From dfde7592bbad0d79528e3ccaf393ea3d78177b01 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Fri, 27 Jun 2025 01:02:01 +0200 Subject: refactor: separate timeline toolbar into new component and add new TrackType type --- .../web/src/components/editor/timeline-toolbar.tsx | 219 +++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 apps/web/src/components/editor/timeline-toolbar.tsx (limited to 'apps/web/src/components/editor/timeline-toolbar.tsx') diff --git a/apps/web/src/components/editor/timeline-toolbar.tsx b/apps/web/src/components/editor/timeline-toolbar.tsx new file mode 100644 index 00000000..51464794 --- /dev/null +++ b/apps/web/src/components/editor/timeline-toolbar.tsx @@ -0,0 +1,219 @@ +"use client"; + +import type { TrackType } from "@/types/timeline"; +import { + ArrowLeftToLine, + ArrowRightToLine, + Copy, + Pause, + Play, + Scissors, + Snowflake, + SplitSquareHorizontal, + Trash2, +} from "lucide-react"; +import { Button } from "../ui/button"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "../ui/select"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "../ui/tooltip"; + +interface TimelineToolbarProps { + isPlaying: boolean; + currentTime: number; + duration: number; + speed: number; + tracks: any[]; + toggle: () => void; + setSpeed: (speed: number) => void; + addTrack: (type: TrackType) => string; + addClipToTrack: (trackId: string, clip: any) => void; + handleSplitSelected: () => void; + handleDuplicateSelected: () => void; + handleFreezeSelected: () => void; + handleDeleteSelected: () => void; +} + +export function TimelineToolbar({ + isPlaying, + currentTime, + duration, + speed, + tracks, + toggle, + setSpeed, + addTrack, + addClipToTrack, + handleSplitSelected, + handleDuplicateSelected, + handleFreezeSelected, + handleDeleteSelected, +}: TimelineToolbarProps) { + return ( +
+ + {/* Play/Pause Button */} + + + + + + {isPlaying ? "Pause (Space)" : "Play (Space)"} + + + +
+ + {/* Time Display */} +
+ {currentTime.toFixed(1)}s / {duration.toFixed(1)}s +
+ + {/* Test Clip Button - for debugging */} + {tracks.length === 0 && ( + <> +
+ + + + + Add a test clip to try playback + + + )} + +
+ + + + + + Split clip (S) + + + + + + + Split and keep left (A) + + + + + + + Split and keep right (D) + + + + + + + Separate audio (E) + + + + + + + Duplicate clip (Ctrl+D) + + + + + + + Freeze frame (F) + + + + + + + Delete clip (Delete) + + +
+ + {/* Speed Control */} + + + + + Playback Speed + + +
+ ); +} -- cgit v1.3.1