/** * ClassroomPreviewer - 课堂预览器组件 * * 预览 classroom-generator Pipeline 生成的课堂内容: * - 幻灯片导航 * - 大纲视图 * - 场景切换 * - 全屏播放模式 * - AI 教师讲解展示 */ import { useState, useCallback, useEffect } from 'react'; import { ChevronLeft, ChevronRight, Play, Pause, Maximize, Minimize, List, Grid, Volume2, VolumeX, Download, Share2, } from 'lucide-react'; import { useToast } from './ui/Toast'; // === Types === export interface ClassroomScene { id: string; title: string; type: 'title' | 'content' | 'quiz' | 'summary' | 'interactive'; content: { heading?: string; bullets?: string[]; image?: string; explanation?: string; quiz?: { question: string; options: string[]; answer: number; }; }; narration?: string; duration?: number; // seconds } export interface ClassroomData { id: string; title: string; subject: string; difficulty: '初级' | '中级' | '高级'; duration: number; // minutes scenes: ClassroomScene[]; outline: { sections: { title: string; scenes: string[]; }[]; }; createdAt: string; } interface ClassroomPreviewerProps { data: ClassroomData; onClose?: () => void; onExport?: (format: 'pptx' | 'html' | 'pdf') => void; onOpenFullPlayer?: () => void; } // === Sub-Components === interface SceneRendererProps { scene: ClassroomScene; isPlaying: boolean; showNarration: boolean; } function SceneRenderer({ scene, showNarration }: SceneRendererProps) { const renderContent = () => { switch (scene.type) { case 'title': return (
{scene.content.bullets[0]}
)}{scene.content.quiz.question}
{scene.content.explanation}
{scene.narration}
{section.title}
{data.subject} · {data.difficulty} · {data.duration} 分钟
${data.subject} · ${data.difficulty} · ${data.duration} 分钟