import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import type { VeoSegment } from '@/types'; import { ChevronDownIcon, CopyIcon, CheckIcon } from './Icons'; interface SegmentPromptsViewerProps { segments: VeoSegment[]; accentColor: 'coral' | 'electric'; } export const SegmentPromptsViewer: React.FC = ({ segments, accentColor }) => { const [isOpen, setIsOpen] = useState(false); const [expandedSegments, setExpandedSegments] = useState>(new Set()); const [copiedIndex, setCopiedIndex] = useState(null); const toggleSegment = (index: number) => { const newExpanded = new Set(expandedSegments); if (newExpanded.has(index)) { newExpanded.delete(index); } else { newExpanded.add(index); } setExpandedSegments(newExpanded); }; const expandAll = () => { setExpandedSegments(new Set(segments.map((_, i) => i))); }; const collapseAll = () => { setExpandedSegments(new Set()); }; const copySegment = (segment: VeoSegment, index: number) => { const formatted = JSON.stringify(segment, null, 2); navigator.clipboard.writeText(formatted); setCopiedIndex(index); setTimeout(() => setCopiedIndex(null), 2000); }; const copyAllSegments = () => { const formatted = JSON.stringify({ segments }, null, 2); navigator.clipboard.writeText(formatted); setCopiedIndex(-1); setTimeout(() => setCopiedIndex(null), 2000); }; if (segments.length === 0) return null; return (
{isOpen && (
{/* Controls */}
{/* Segment Cards */}
{segments.map((segment, index) => { const isExpanded = expandedSegments.has(index); return (
{/* Segment Header */}
{/* Expanded Content */} {isExpanded && (
{/* Dialogue */}

Dialogue

"{segment.action_timeline?.dialogue}"

{/* Character Description */}

Character

Current State:

{segment.character_description?.current_state}

Voice Matching:

{segment.character_description?.voice_matching}

{/* Scene Continuity */}

Scene

Environment:

{segment.scene_continuity?.environment}

Camera:

{segment.scene_continuity?.camera_position} • {segment.scene_continuity?.camera_movement}

Lighting:

{segment.scene_continuity?.lighting_state}

{/* Synchronized Actions */}

Timeline

{Object.entries(segment.action_timeline?.synchronized_actions || {}).map(([time, action]) => (
{time}

{action}

))}
{/* Segment Info */}
Duration: {segment.segment_info?.duration}
Location: {segment.segment_info?.location}
)}
); })}
)}
); };