"use client" import { useEffect, useState } from "react" import { createPortal } from "react-dom" import { X, LayoutGrid, Sparkle, Wand2, Brush } from "lucide-react" import { type Job, effectiveFrameUrl, cutoutUrl } from "@/lib/api" interface Props { job: Job | null frameIndex: number | null onClose: () => void } export function StoryboardEditor({ job, frameIndex, onClose }: Props) { const [mounted, setMounted] = useState(false) useEffect(() => setMounted(true), []) useEffect(() => { if (frameIndex === null) return const onKey = (e: KeyboardEvent) => { if (e.key === "Escape") onClose() } window.addEventListener("keydown", onKey) return () => window.removeEventListener("keydown", onKey) }, [frameIndex, onClose]) if (!mounted || !job || frameIndex === null) return null const frame = job.frames.find((f) => f.index === frameIndex) if (!frame) return null const elements = frame.elements ?? [] const elementsWithCutout = elements.filter((e) => e.cutout_id) const seq = job.frames.filter((f) => f.timestamp <= frame.timestamp).length return createPortal(