"use client"; import { FPS_PRESETS } from "@/constants/timeline-constants"; import { useAspectRatio } from "@/hooks/use-aspect-ratio"; import { useMediaStore } from "@/stores/media-store"; import { useProjectStore } from "@/stores/project-store"; import { useTimelineStore } from "@/stores/timeline-store"; import { Label } from "../../ui/label"; import { ScrollArea } from "../../ui/scroll-area"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../../ui/select"; import { AudioProperties } from "./audio-properties"; import { MediaProperties } from "./media-properties"; import { TextProperties } from "./text-properties"; export function PropertiesPanel() { const { activeProject, updateProjectFps } = useProjectStore(); const { getDisplayName, canvasSize } = useAspectRatio(); const { selectedElements, tracks } = useTimelineStore(); const { mediaItems } = useMediaStore(); const handleFpsChange = (value: string) => { const fps = parseFloat(value); if (!isNaN(fps) && fps > 0) { updateProjectFps(fps); } }; const emptyView = (
{/* Media Properties */}
); return ( {selectedElements.length > 0 ? 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 (
); } if (element?.type === "media") { const mediaItem = mediaItems.find( (item) => item.id === element.mediaId ); if (mediaItem?.type === "audio") { return ; } return (
); } return null; }) : emptyView}
); } function PropertyItem({ label, value }: { label: string; value: string }) { return (
{value}
); }