"use client"; import { ScrollArea } from "../ui/scroll-area"; import { Button } from "../ui/button"; import { Scissors, ArrowLeftToLine, ArrowRightToLine, Trash2, Snowflake, Copy, SplitSquareHorizontal, } from "lucide-react"; import { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider, } from "../ui/tooltip"; import { useTimelineStore, type TimelineTrack } from "@/stores/timeline-store"; export function Timeline() { const { tracks, addTrack } = useTimelineStore(); return (
{/* Toolbar */}
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)
{/* Tracks Area */}
{/* Time Markers */}
{Array.from({ length: 16 }).map((_, i) => (
{i}s
))}
{/* Timeline Tracks */} {tracks.length === 0 ? (

No tracks in timeline

Add a video or audio track to get started

) : (
{tracks.map((track) => ( ))}
)}
); } function TimelineTrackComponent({ track }: { track: TimelineTrack }) { const getTrackColor = (type: string) => { switch (type) { case "video": return "bg-blue-500/20 border-blue-500/30"; case "audio": return "bg-green-500/20 border-green-500/30"; case "effects": return "bg-purple-500/20 border-purple-500/30"; default: return "bg-gray-500/20 border-gray-500/30"; } }; return (
{track.name}
{track.clips.length === 0 ? (
Drop media here
) : (
{track.clips.length} clip{track.clips.length !== 1 ? "s" : ""}
)}
); }