From 43bdcec5b595e1febd331187abe550a9cbca7366 Mon Sep 17 00:00:00 2001 From: shrimbly Date: Wed, 4 Feb 2026 16:02:24 +1300 Subject: [PATCH] feat(005): grid layout for clip thumbnails and labeled handles - Replace horizontal scroll filmstrip with 4-column CSS grid layout - Use aspect-video for thumbnails that scale with grid cells - Add blue "Video N" labels to each video input handle - Add blue "Output" label to video output handle - Audio handle label unchanged (purple) Co-Authored-By: Claude Opus 4.5 --- src/components/nodes/VideoStitchNode.tsx | 43 ++++++++++++++++++------ 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/src/components/nodes/VideoStitchNode.tsx b/src/components/nodes/VideoStitchNode.tsx index 5fa0bfd1..1daae444 100644 --- a/src/components/nodes/VideoStitchNode.tsx +++ b/src/components/nodes/VideoStitchNode.tsx @@ -226,15 +226,26 @@ export function VideoStitchNode({ id, data, selected }: NodeProps { const topPercent = ((index + 1) / (videoHandles.length + 1)) * 100; return ( - + + +
+ Video {index + 1} +
+
); })} @@ -266,6 +277,16 @@ export function VideoStitchNode({ id, data, selected }: NodeProps +
+ Output +
); @@ -377,7 +398,7 @@ export function VideoStitchNode({ id, data, selected }: NodeProps {/* Filmstrip */} -
+
{orderedClips.map((clip) => { const thumbnail = thumbnails.get(clip.edgeId); return ( @@ -387,7 +408,7 @@ export function VideoStitchNode({ id, data, selected }: NodeProps handleDragStart(e, clip.edgeId)} onDragOver={handleDragOver} onDrop={(e) => handleDrop(e, clip.edgeId)} - className="relative flex-shrink-0 w-20 h-[60px] bg-neutral-800 border border-neutral-600 rounded cursor-move hover:border-neutral-500 transition-colors group" + className="relative w-full aspect-video bg-neutral-800 border border-neutral-600 rounded cursor-move hover:border-neutral-500 transition-colors group" > {thumbnail ? (