"use client"; import { useProjectStore } from "@/stores/project-store"; import { useAspectRatio } from "@/hooks/use-aspect-ratio"; import { Label } from "../ui/label"; import { ScrollArea } from "../ui/scroll-area"; import { useTimelineStore } from "@/stores/timeline-store"; import { Input } from "../ui/input"; import { MediaElement, TextElement } from "@/types/timeline"; import { useMediaStore } from "@/stores/media-store"; export function PropertiesPanel() { const { activeProject } = useProjectStore(); const { getDisplayName, canvasSize } = useAspectRatio(); const { selectedElements, tracks, updateTextElement } = useTimelineStore(); const { mediaItems } = useMediaStore(); const emptyView = (
{/* Media Properties */}
); const TextProperties = (element: TextElement, trackId: string) => (
updateTextElement(trackId, element.id, { content: e.target.value }) } />
); const MediaProperties = (element: MediaElement) => { const mediaItem = mediaItems.find((item) => item.id === element.mediaId); if (mediaItem?.type === "audio") { return
Audio properties
; } // video or image return
Video/Image properties
; }; const ElementProperties = ( <> {selectedElements.map(({ trackId, elementId }) => { const track = tracks.find((t) => t.id === trackId); const element = track?.elements.find((e) => e.id === elementId); if (element?.type === "text") { return
{TextProperties(element, trackId)}
; } if (element?.type === "media") { return
{MediaProperties(element)}
; } })} ); return ( {selectedElements.length > 0 ? ElementProperties : emptyView} ); } function PropertyItem({ label, value }: { label: string; value: string }) { return (
{value}
); }