Where
Layout-first canvas (preview/layout-first.js / layout-first.html), the P0 placement surface (#1131, #1026).
Problem (data loss)
Each slot is a drop target, but there is no guard for a video released just outside a slot. The layout-first page is a normal HTML page, so a file dropped on the canvas frame, the gap between slots, or anywhere on the page triggers the browser's default behavior: it navigates away to open that file, discarding the whole single-page app — every slot the creator has already filled is lost.
Drag-and-drop placement is a core P0 interaction (#1131/#1026: direct click/drag placement). A near-miss drop today is not just a no-op — it destroys the creator's work.
Expected
A video dropped anywhere on the page never navigates the browser away. When the drop lands on the layout canvas and there is an open slot, the video is routed into the first open slot (so a near-miss still places). Drops that land on a specific slot keep working exactly as today.
Proposed fix
Register document-level dragover (preventDefault, so drops are catchable) and drop handlers. The drop handler ignores drops that landed inside a .drop-zone (those have their own handler), otherwise prevents default and routes the dropped videos into the first open visible slot via the existing placeVideoFiles spill logic.
Where
Layout-first canvas (
preview/layout-first.js/layout-first.html), the P0 placement surface (#1131, #1026).Problem (data loss)
Each slot is a drop target, but there is no guard for a video released just outside a slot. The layout-first page is a normal HTML page, so a file dropped on the canvas frame, the gap between slots, or anywhere on the page triggers the browser's default behavior: it navigates away to open that file, discarding the whole single-page app — every slot the creator has already filled is lost.
Drag-and-drop placement is a core P0 interaction (#1131/#1026:
direct click/drag placement). A near-miss drop today is not just a no-op — it destroys the creator's work.Expected
A video dropped anywhere on the page never navigates the browser away. When the drop lands on the layout canvas and there is an open slot, the video is routed into the first open slot (so a near-miss still places). Drops that land on a specific slot keep working exactly as today.
Proposed fix
Register document-level
dragover(preventDefault, so drops are catchable) anddrophandlers. The drop handler ignores drops that landed inside a.drop-zone(those have their own handler), otherwise prevents default and routes the dropped videos into the first open visible slot via the existingplaceVideoFilesspill logic.