feat(studio): canvas chrome components (unwired)#2208
Conversation
155b8ca to
4017242
Compare
09f11b9 to
a664a07
Compare
4017242 to
2c33b51
Compare
miga-heygen
left a comment
There was a problem hiding this comment.
Reviewed as part of the 25-PR NLE overhaul stack. Full stack review on #2205 (the keystone). No blockers on this PR. — Miga
vanceingalls
left a comment
There was a problem hiding this comment.
R1 — Batch C (unwired chrome / assembly)
Verdict: 🟢 approve
Reviewed at 2c33b510. Focus per Phase-2 recon: canvas chrome components are unwired; useDomEditNudge cross-batch import wiring resolves; fallow entries tracked for #2213 removal.
Unwired assertion — 🟢
Grepped packages/studio/src/**/*.{ts,tsx} at this SHA for consumers of every new symbol; all resolve to sibling new files only:
DomEditSelectionChrome— no live-tree consumer.useDomEditNudge— no live-tree consumer.nle/PreviewOverlays(new) — no consumer (wired later; thePreviewOverlayssymbol exists only in this new file,findconfirms no sibling with the same name).domEditResizeLocal— consumed only by sibling newDomEditSelectionChrome.tsx:8(resolveRotatedResizeCursor).
Cross-batch import wiring — 🟢
useDomEditNudge.ts depends on the earlier batches; verified all imports resolve at this SHA:
@/utils/canvasNudgeGate(from #2200) →packages/studio/src/utils/canvasNudgeGate.tspresent, exportsacquireCanvasNudgeKeys../domEditNudge(from #2203) →packages/studio/src/components/editor/domEditNudge.tspresent, exportsCANVAS_NUDGE_STEP_PX,CANVAS_NUDGE_SHIFT_STEP_PX,resolveCanvasNudgeDelta,applyManualOffsetNudgeCommit, etc../domEditOverlayGeometry,./domEditOverlayGestures,./domEditing— all pre-existing.
Fallow lifecycle — 🟢
Added to .fallowrc.jsonc:
- unusedExports block:
DomEditSelectionChrome.tsx,useDomEditNudge.ts,nle/PreviewOverlays.tsx— 3 entries. - duplication ignore block:
DomEditOverlay.tsx,DomEditSelectionChrome.tsx— 2 entries (coexistence-window clones). - complexity ignore block:
DomEditSelectionChrome.tsx,useDomEditNudge.ts— 2 entries.
All 7 entries share the TEMP(studio-dnd) pointer at studio-dnd/pr22. DomEditSelectionChrome.tsx correctly appears in both the unusedExports block (as a new file) and the duplication ignore block (its live sibling DomEditOverlay.tsx presumably contains overlapping structure — this is exactly the coexistence-window contract).
Notes for Phase 3 cross-check
None. Behavior-preserving unwired ship.
R1 by Via
a664a07 to
e07e3e2
Compare
2c33b51 to
6e29370
Compare
e07e3e2 to
55bcdb9
Compare
6e29370 to
d1e68f9
Compare
d1e68f9 to
645a3cc
Compare
55bcdb9 to
3231fcf
Compare
What: the canvas-side NLE chrome, unwired: DomEditSelectionChrome (rotated selection chrome + corner handles), domEditResizeLocal (+tests, local-space resize math), useDomEditNudge (arrow-key nudge hook), PreviewOverlays (the canvas overlay stack for the NLE shell). Why: the visible canvas editing layer, reviewable before the overlay swap rewires DomEditOverlay onto it. How: new files compiled against the coexistence layer; TEMP(studio-dnd) entry registrations for the unwired components, removed at the app-shell swap. Test plan: bunx vitest run domEditResizeLocal.test.ts; tsc --noEmit; fallow audit clean.
3231fcf to
c40be0a
Compare
645a3cc to
dd1310c
Compare

What
the canvas-side NLE chrome, unwired: DomEditSelectionChrome (rotated selection chrome + corner handles), domEditResizeLocal (+tests, local-space resize math), useDomEditNudge (arrow-key nudge hook), PreviewOverlays (the canvas overlay stack for the NLE shell).
Why
the visible canvas editing layer, reviewable before the overlay swap rewires DomEditOverlay onto it.
How
new files compiled against the coexistence layer; TEMP(studio-dnd) entry registrations for the unwired components, removed at the app-shell swap.
Test plan
bunx vitest run domEditResizeLocal.test.ts; tsc --noEmit; fallow audit clean.
Stack position 17/25 — studio NLE overhaul (CapCut-parity timeline + canvas). Graphite manages bases; merge from #2192 upward. Temporary
TEMP(studio-dnd)fallow entries (unwired-component windows) are all removed by #2213 (app-shell swap), whose tree is byte-identical to the fully-verified integration branch.