Files
artcraft/frontend/apps
Tanish Manku 1155b12b32 PageScene: coalesce burst undo entries via UndoableAction.tryMerge
The previous panel-undo fix used session boundaries (open on first
edit, commit on selection change / unmount). It overshot: while
editing the same object's panel without changing selection, the
session never committed, so Ctrl+Z fell through to the most recent
*previous* entry — typically the CreateAction that added the shape.
Result: editing a shape's transform then hitting Ctrl+Z deleted the
shape.

Replace session boundaries with action-level coalescing:

- Add optional `tryMerge(other)` to the UndoableAction interface.
  HistoryManager.record now offers each new action to the previous
  entry's tryMerge first; if absorbed, the new action drops out and
  the existing entry's `after` extends to cover the burst.
- TransformAction: constructor now takes (editor, uuid, before, after)
  directly; drop the begin/commit pattern. tryMerge merges a follow-up
  TransformAction whose `before` matches this one's `after` (chain
  continuity) — same uuid only.
- ColorAction: same treatment. tryMerge folds the native color
  picker's per-pixel onChange burst into a single undo entry.

Caller-side: drop all session machinery from the panel
(transformSessionRef, colorSessionRef, lastUuidRef, beginPanelTransform,
commitPanelTransform, the unmount-only effect). On every input
change the panel calls `transformObject` / `setObjectColor`, which
snapshot before, apply, snapshot after, and record. The manager
handles the rest.

Gizmo path in editor.ts updated to the new TransformAction shape:
capture before-snap at dragstart on a small `activeDragStart` ref,
build TransformAction(before, after) at dragend.

Side benefit: gizmo-drag and panel-edit bursts on the same object
now coalesce into a single undo entry across input sources, since
both produce TransformActions whose chain continues.
2026-05-01 04:51:11 -07:00
..
2026-03-12 21:35:29 +07:00