When fixing issue #9479 to implement Triangular Communication for OffscreenCanvas transfers, we changed how Canvas.mjs registers callbacks.
Previously, it relied purely on the nodeId in Neo.main.DomAccess.transferCanvasToWorker({nodeId}).
However, SharedCanvas overrides getCanvasId() to return the inner <canvas> tag's id, whereas me.id refers to the div wrapper.
Because we didn't pass componentId down through the triangular communication (Main -> Canvas Worker -> App Worker), onCanvasRegistered({nodeId}) in worker/App.mjs was using nodeId (the inner canvas) to look up the component via Neo.get(). This lookup failed for SharedCanvas instances like TimelineCanvas, because their componentId is different from the nodeId of the <canvas> tag.
This PR fixes the issue by explicitly passing componentId from Canvas.mjs to Main, then to Canvas Worker, and back to App Worker, ensuring Neo.get(componentId) resolves correctly.
When fixing issue #9479 to implement Triangular Communication for OffscreenCanvas transfers, we changed how
Canvas.mjsregisters callbacks. Previously, it relied purely on thenodeIdinNeo.main.DomAccess.transferCanvasToWorker({nodeId}). However,SharedCanvasoverridesgetCanvasId()to return the inner<canvas>tag's id, whereasme.idrefers to thedivwrapper. Because we didn't passcomponentIddown through the triangular communication (Main->Canvas Worker->App Worker),onCanvasRegistered({nodeId})inworker/App.mjswas usingnodeId(the inner canvas) to look up the component viaNeo.get(). This lookup failed forSharedCanvasinstances likeTimelineCanvas, because theircomponentIdis different from thenodeIdof the<canvas>tag. This PR fixes the issue by explicitly passingcomponentIdfromCanvas.mjstoMain, then toCanvas Worker, and back toApp Worker, ensuringNeo.get(componentId)resolves correctly.