mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-14 18:01:20 +08:00
4c893b969b
* feat(studio): clip drag engine — preview and commit (unwired) 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. * feat(studio): timeline interaction hooks and lanes component (unwired) 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. * feat(studio): canvas chrome components (unwired) 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.