"use client";
import { ScrollArea } from "@/components/ui/scroll-area";
import { AudioProperties } from "./audio-properties";
import { VideoProperties } from "./video-properties";
import { TextProperties } from "./text-properties";
import { EffectProperties } from "./effect-properties";
import { ClipEffectsProperties } from "./clip-effects-properties";
import { EmptyView } from "./empty-view";
import { useEditor } from "@/hooks/use-editor";
import { useElementSelection } from "@/hooks/timeline/element/use-element-selection";
import { usePropertiesStore } from "@/stores/properties-store";
import { isVisualElement } from "@/lib/timeline";
import type { TimelineElement, TimelineTrack } from "@/types/timeline";
function ElementProperties({
track,
element,
}: {
track: TimelineTrack;
element: TimelineElement;
}) {
if (element.type === "text") {
return ;
}
if (element.type === "audio") {
return ;
}
if (
element.type === "video" ||
element.type === "image" ||
element.type === "sticker"
) {
return ;
}
if (element.type === "effect") {
return ;
}
return null;
}
export function PropertiesPanel() {
const editor = useEditor();
const { selectedElements } = useElementSelection();
const clipEffectsTarget = usePropertiesStore(
(state) => state.clipEffectsTarget,
);
const clipEffectsTrack = clipEffectsTarget
? editor.timeline.getTrackById({ trackId: clipEffectsTarget.trackId })
: null;
const clipEffectsElement = clipEffectsTrack?.elements.find(
(element) => element.id === clipEffectsTarget?.elementId,
);
const isShowingClipEffects =
clipEffectsTrack &&
clipEffectsElement &&
isVisualElement(clipEffectsElement);
const elementsWithTracks = editor.timeline.getElementsWithTracks({
elements: selectedElements,
});
return (
{isShowingClipEffects ? (
) : selectedElements.length > 0 ? (
{elementsWithTracks.map(({ track, element }) => (
))}
) : (
)}
);
}