mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-04 01:18:34 +00:00
Follow-up to 72071c0066. The session-based panel transform recording
fixed pollution but introduced a new bug: while editing the same
object's panel without changing selection, the session never
committed, so Ctrl+Z fell through to the most recent prior entry —
typically the CreateAction for the shape, which deleted it on undo.
Add three document-level commit triggers covering the natural editing
boundaries the user expects:
- mouseup (any document-level mouseup): catches the end of an
InputVector numeric-scrub drag and any click that moves focus
elsewhere after typing.
- Enter key: explicit "done editing" commit even when the input
retains focus.
- Ctrl+Z / Ctrl+Y (capture phase): flushes the pending session before
the engine's keymap handler runs undo/redo, so the pending edit is
what gets reverted instead of the prior entry.
Capture phase on the keydown listener is load-bearing: keymap.ts
attaches its handler in bubble phase via useViewportKeyboard. Capture
fires first, so the session commits before keymap dispatches.
mouseup commit is a no-op when no session is open, so attaching it
to document doesn't cost anything for unrelated clicks.
Color session is unchanged (focus/blur boundaries on the color
input still work and don't have this issue).