feat(studio): canvas chrome components (unwired)#2208
Merged
miguel-heygen merged 3 commits intoJul 12, 2026
Merged
Conversation
This was referenced Jul 11, 2026
Collaborator
Author
This was referenced Jul 11, 2026
155b8ca to
4017242
Compare
09f11b9 to
a664a07
Compare
4017242 to
2c33b51
Compare
miga-heygen
reviewed
Jul 11, 2026
miga-heygen
left a comment
Contributor
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
d1e68f9 to
645a3cc
Compare
3231fcf to
c40be0a
Compare
645a3cc to
dd1310c
Compare
c40be0a to
f81114c
Compare
dd1310c to
b1fbf67
Compare
f81114c to
e887f6a
Compare
b1fbf67 to
87bccab
Compare
miguel-heygen
approved these changes
Jul 11, 2026
miguel-heygen
left a comment
Collaborator
There was a problem hiding this comment.
Re-review at current head 87bccab: unwired canvas chrome, imports, and lifecycle/fallow entries remain coherent; required checks green. Approving.
e887f6a to
cf2e6d5
Compare
87bccab to
4dc3706
Compare
cf2e6d5 to
dd3fb70
Compare
4dc3706 to
78e78fc
Compare
dd3fb70 to
6f66a32
Compare
78e78fc to
ce715a5
Compare
miguel-heygen
approved these changes
Jul 12, 2026
miguel-heygen
left a comment
Collaborator
There was a problem hiding this comment.
Re-reviewed current head and verified the addressed feedback and required behavior. Approval is for this exact head; Graphite mergeability may still be pending.
What: the NLE clip-drag engine core: timelineClipDragPreview (zone-aware preview placement; keeps the legacy resolveDragPreviewPlacement export until the timeline swap), timelineClipDragCommit (drop → move/insert commit, stacking-synced) and timelineElementsMove (batched ripple/insert move with GSAP position shifting), with test suites. Why: the drag-drop brain, reviewable as functions before any component mounts it. How: new files plus one authored intermediate (preview file = final content + legacy export the old engine still imports); consumes the collision/ snapping/zones/stacking modules and the coexistence layer. Test plan: bunx vitest run on both test suites; tsc --noEmit; fallow audit clean.
What: the timeline-side wiring layer, unwired: TimelineLanes (the lane renderer driving drag/resize/marquee), timelineMarquee (+tests), useTimelineStackingSync, useTimelineGeometry, useTimelineEditPinning, useTimelineEditingDrops. Why: everything between the pure drag math and <Timeline> itself; the timeline-glue swap PR then only rewires Timeline/TimelineCanvas onto these. How: new files, tsc-clean against the coexistence layer. Unwired components carry TEMP(studio-dnd) entry registrations, removed at the app-shell swap. Test plan: bunx vitest run timelineMarquee.test.ts; tsc --noEmit; fallow audit clean.
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.
ce715a5 to
412c2eb
Compare
6f66a32 to
27b9804
Compare
This was referenced Jul 12, 2026
This was referenced Jul 12, 2026
4c893b9
into
studio-dnd/pr16-timeline-interaction-hooks
16 of 26 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

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.