# PhotoPreviewSection Component Compact photo preview component with type indicators for characters, scenes, and props. ## Features ✅ **Type Indicators** - Icons in bottom-left corner show photo type ✅ **Compact Design** - 64x64px photos with horizontal scroll ✅ **Smart Visibility** - Auto-hides when no photos ✅ **Preview Support** - Click to view full-size image ✅ **Delete Functionality** - X button appears on hover ✅ **Dark Theme** - Fully styled for dark UI ## Usage ```tsx import { PhotoPreviewSection } from './PhotoPreview'; import type { PhotoItem } from './PhotoPreview'; function MyComponent() { const [photos, setPhotos] = useState([ { url: 'photo1.jpg', type: 'character', id: '1' }, { url: 'photo2.jpg', type: 'scene', id: '2' }, { url: 'photo3.jpg', type: 'prop', id: '3' }, ]); const handleDelete = (index: number) => { setPhotos(prev => prev.filter((_, i) => i !== index)); }; return ( ); } ``` ## Props | Prop | Type | Default | Description | |------|------|---------|-------------| | `photos` | `PhotoItem[]` | `[]` | Array of photos with type information | | `onDelete` | `(index: number) => void` | optional | Callback when a photo is deleted | | `className` | `string` | `''` | Additional CSS classes | ## Photo Types ### PhotoItem Interface ```typescript interface PhotoItem { url: string; // Photo URL type: PhotoType; // 'character' | 'scene' | 'prop' id?: string; // Optional unique identifier } ``` ### Type Icons - **Character** (👤): `UserOutlined` - Cyan icon in bottom-left - **Scene** (📷): `CameraOutlined` - Cyan icon in bottom-left - **Prop** (💡): `BulbOutlined` - Cyan icon in bottom-left ## Design Specifications - **Photo Size**: 64x64px (w-16 h-16) - **Gap**: 8px between items - **Border Radius**: 6px (rounded-md) - **Type Icon**: 20x20px square, bottom-left corner with backdrop blur - **Delete Button**: Circular gray button, top-right corner (hover only) - **Scrollbar**: 4px height, appears on hover ## Interactions - **Click Photo**: Opens full-screen preview modal - **Hover Photo**: Shows delete button at top-right corner - **Click Delete**: Triggers `onDelete` callback with photo index - **Type Icon**: Always visible in bottom-left corner ## Visual Layout ``` ┌───────────────────────────────────┐ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │ │ │ │ │ │ │ │ │ [img]│ │ [img]│ │ [img]│ │ │ │ 👤 │ │ 📷 │ │ 💡 │ │ │ └──────┘ └──────┘ └──────┘ │ │ Char Scene Prop │ └───────────────────────────────────┘ ``` - Top-right: Delete button (X) - appears on hover - Bottom-left: Type icon - always visible ## Styling The component uses Tailwind CSS with custom dark theme colors: - **Primary Color**: `cyan-400` for type icons - **Text Colors**: White with varying opacity - **Borders**: White with 10% opacity, hover to cyan-400 with 60% opacity - **Backgrounds**: Black/White with low opacity + backdrop blur - **Delete Button**: Gray (`#636364`) with 80% opacity ## Notes - Component returns `null` when `photos` array is empty - Upload functionality should be implemented externally - Each photo should have a unique `id` for optimal React key handling - Preview uses antd's Image component for full-screen viewing