import { Fragment } from "react"; import { Plus } from "lucide-react"; import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger, } from "../../ui/context-menu"; import { useTimelineStore } from "@/stores/timeline-store"; import { TimelineTrackContent } from "../timeline-track"; import { TrackIcon } from "./track-icon"; import { getTrackHeight } from "@/constants/timeline-constants"; import type { TimelineTrack } from "@/types/timeline"; import type { SnapPoint } from "@/hooks/use-timeline-snapping"; export interface TimelineTracksAreaProps { tracks: TimelineTrack[]; zoomLevel: number; handleSnapPointChange: (snapPoint: SnapPoint | null) => void; clearSelectedElements: () => void; } export function TimelineTracksArea({ tracks, zoomLevel, handleSnapPointChange, clearSelectedElements, }: TimelineTracksAreaProps) { const { addTrack, toggleTrackMute } = useTimelineStore(); return ( <> {/* Track Rows */} {tracks.map((track, index) => ( {/* Left Column (Sticky Track Labels) */}
{track.muted && ( Muted )}
{/* Scrollable Track Content */}
{ // If clicking empty area (not on a element), deselect all elements if (!(e.target as HTMLElement).closest(".timeline-element")) { clearSelectedElements(); } }} >
toggleTrackMute(track.id)}> {track.muted ? "Unmute Track" : "Mute Track"} Track settings (soon)
))} {/* Add Track Button - spans full width */}
addTrack("media")} className="col-span-1 sticky left-0 w-full flex items-center border-b border-muted bg-card/[0.99] hover:bg-card/50 transition-colors cursor-pointer z-[89]" style={{ height: `${getTrackHeight("media")}px` }} >
); }