mirror of
https://github.com/penpot/penpot.git
synced 2026-10-29 14:00:37 +00:00
Fixes in when the workspace syncs copies and propagates tokens, and in what a layout wait covers (Phase 3c). - Sync the copies when a shape is dragged inside a main. The component watcher dropped every commit flagged :translation? (the WASM drag commits only moves) so dragging whole mains around the canvas stays fast. A drag of a shape inside a main is flagged the same, so its copies never followed until some other edit of that main made them jump (F70). The watcher now drops a translation commit only when it moves shapes outside mains or whole mains: every shape it moves inside a main moves with the main's root (decision (q)). Otherwise the commit goes through component sync like any edit. workspace-sync-barrier-test: a translation of a whole main is dropped; one of a main's child syncs the copy. fill-commit in the interpreter takes several labels. - Propagate the file's tokens after any library update. Updating a library from the notification synced the file and then propagated its tokens, so the copies take the token values of the file's token status, not the library's. The update button of the libraries dialog's Updates tab only synced the file (F83). dwl/update-libraries syncs the file from the given libraries and then propagates its tokens; the notification and the Updates tab both use it. workspace-library-updates-test: updating a library syncs it and then propagates the tokens. - Sync copies whether or not component thumbnails are on. The component watcher's whole pipeline, the sync of the copies included, ran only when the :component-thumbnails flag was on or the WASM renderer was active. The flag is on by default, but an install that turned it off never synced copies on the SVG renderer: editing a main left its copies as they were (F8). The flag now gates only the thumbnail streams. workspace-sync-barrier-test: with the flag off, a main edit reaches the copy. - Hold a token's shapes pending until the token is applied. A plugin's waitForLayoutUpdate waits until no shape has layout work pending. Applying a token resolves the tokens first, asynchronously, and opened no pending work meanwhile, so the wait found nothing pending and returned before the token reached the shapes or their copies (F54). The shapes are now pending, as a :token task, from the start of the resolution until the update is emitted, and the layout, text and sync work it starts takes over from there. The composable interpreter no longer waits on the token itself: case AY applies a token and checks its copies after the same wait a plugin uses, and fails without this change. AI-assisted-by: claude-opus-5-5