"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 = (
);
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}
);
}