import React, { useState } from 'react'; import { MapPin, Users, MessageCircle, Activity, Eye, Copy, Check, Sparkles, Camera } from 'lucide-react'; import { SCENES } from '../data/storyData'; import { soundManager } from '../utils/audio'; interface StoryboardViewProps { isBedtimeMode: boolean; selectedSceneId?: number; } export const StoryboardView: React.FC = ({ isBedtimeMode, selectedSceneId, }) => { const [filterAct, setFilterAct] = useState<'all' | 'beginning' | 'middle' | 'end'>('all'); const [activeSceneId, setActiveSceneId] = useState(selectedSceneId || 1); const [copiedText, setCopiedText] = useState(null); const filteredScenes = filterAct === 'all' ? SCENES : SCENES.filter(s => s.act === filterAct); const currentScene = SCENES.find(s => s.id === activeSceneId) || SCENES[0]; const handleCopyPrompt = (text: string) => { soundManager.playPop(); navigator.clipboard.writeText(text); setCopiedText(text); setTimeout(() => setCopiedText(null), 2500); }; return (
{/* Header & Concept Pitch */}
Visual Narrative Architecture 5 Key Visual Beats (Act I, II, III)

Complete Storyboard & Scene Bible

Every frame pairs narrative intent with rigorous art direction: environmental settings, natural dialogue, physical actions, camera perspectives, and exact color palettes.

{/* Act Filter Tabs */}
{/* Storyboard Navigation Thumbnails */}
{filteredScenes.map((sc) => { const isSelected = activeSceneId === sc.id; return (
{ soundManager.playPop(); setActiveSceneId(sc.id); }} className={`p-3 rounded-2xl cursor-pointer border transition-all text-left group ${ isSelected ? 'bg-amber-100/90 dark:bg-indigo-900 border-amber-400 dark:border-indigo-600 shadow-md ring-2 ring-amber-400/40' : 'bg-white dark:bg-slate-900/80 border-stone-200 dark:border-indigo-900 hover:bg-amber-50/60 dark:hover:bg-indigo-900/50' }`} >
{sc.title} Scene {sc.id} {sc.act}

{sc.title}

{sc.subtitle}

); })}
{/* Detailed Scene Storyboard Inspector */}
{/* Top Bar with Scene Header */}
Act: {currentScene.act.toUpperCase()} Scene #{currentScene.id} of {SCENES.length}

{currentScene.title}

"{currentScene.subtitle}"

Key Palette:
{currentScene.artNotes.palette.map((color, idx) => (
))}
{/* Visual Frame & Illustration Prompt Column (5 cols) */}
{/* Scene Frame Rendering */}
{currentScene.imageAlt}
Frame #{currentScene.id} Preview
{/* Illustration Prompt Box */}
Illustration Prompt (AI / Artist Bible)

"{currentScene.illustrationPrompt}"

{/* Art Direction Specs */}
Visual Direction Parameters
Camera Perspective:

{currentScene.artNotes.cameraAngle}

Lighting & Atmosphere:

{currentScene.artNotes.lighting}

Focal Point:

{currentScene.artNotes.focalPoint}

Character Expressions:

{currentScene.artNotes.expressions}

{/* Script & Stage Direction Storyboard Column (7 cols) */}
{/* Setting */}
Scene Setting & Environment
{currentScene.setting}
{/* Characters Present */}
Characters on Stage
{currentScene.characters.map((charName) => ( {charName === 'Pip' ? '🦔' : charName === 'Caelum' ? '☁️' : charName === 'Barnaby' ? '🐻' : '🐦'} {charName} ))}
{/* Script & Dialogue */}
Spoken Dialogue & Tone
{currentScene.dialogue.map((dlg, i) => (
{dlg.speaker}:

"{dlg.text}"

🎭 Tone: {dlg.tone}
))}
{/* Key Physical Actions & Choreography */}
Key Physical Actions (Beat by Beat)
{currentScene.keyActions.map((action, i) => (
{i + 1}

{action}

))}
{/* Director's & Illustrator's Intent */}
Director's Core Intention & Emotional Beat

"{currentScene.directorNotes}"

); };