From 6ee16f9df8aeabfef0ca533f9f5b13daab3a3758 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Sun, 22 Jun 2025 19:28:03 +0200 Subject: feat: so much stuff --- apps/web/src/components/editor/preview-panel.tsx | 106 ++++++++++++++++++++++- 1 file changed, 103 insertions(+), 3 deletions(-) (limited to 'apps/web/src/components/editor/preview-panel.tsx') diff --git a/apps/web/src/components/editor/preview-panel.tsx b/apps/web/src/components/editor/preview-panel.tsx index 4361e967..488e1fc9 100644 --- a/apps/web/src/components/editor/preview-panel.tsx +++ b/apps/web/src/components/editor/preview-panel.tsx @@ -1,11 +1,111 @@ +"use client"; + +import { useTimelineStore } from "@/stores/timeline-store"; +import { useMediaStore } from "@/stores/media-store"; +import { ImageTimelineTreatment } from "@/components/ui/image-timeline-treatment"; +import { Button } from "@/components/ui/button"; +import { Play, Pause } from "lucide-react"; +import { useState } from "react"; + export function PreviewPanel() { - return ( -
-
+ const { tracks } = useTimelineStore(); + const { mediaItems } = useMediaStore(); + const [isPlaying, setIsPlaying] = useState(false); + + // Get the first clip from the first track for preview (simplified for now) + const firstClip = tracks[0]?.clips[0]; + const firstMediaItem = firstClip + ? mediaItems.find((item) => item.id === firstClip.mediaId) + : null; + + const renderPreviewContent = () => { + if (!firstMediaItem) { + return (
Drop media here or click to import
+ ); + } + + if (firstMediaItem.type === "image") { + return ( + + ); + } + + if (firstMediaItem.type === "video") { + return firstMediaItem.thumbnailUrl ? ( + {firstMediaItem.name} + ) : ( +
+ Video Preview +
+ ); + } + + if (firstMediaItem.type === "audio") { + return ( +
+
+
🎵
+

{firstMediaItem.name}

+
+
+ ); + } + + return null; + }; + + return ( +
+
+ {renderPreviewContent()} + + {/* Playback Controls Overlay */} + {firstMediaItem && ( +
+
+ + + {firstClip?.name || "No clip selected"} + +
+
+ )}
+ + {/* Preview Info */} + {firstMediaItem && ( +
+

+ Preview: {firstMediaItem.name} + {firstMediaItem.type === "image" && + " (with CapCut-style treatment)"} +

+
+ )}
); } -- cgit v1.3.1