"use client"; import { BookOpen, Sparkles } from "lucide-react"; import { AppModal, AppModalHeader } from "@/shared/ui/AppModal"; import { useScriptLearning } from "./script-learning/useScriptLearning"; interface ScriptLearningModalProps { isOpen: boolean; onClose: () => void; onApply?: (text: string) => void; } const WORD_COUNT_MIN = 80; const WORD_COUNT_MAX = 1000; export default function ScriptLearningModal({ isOpen, onClose, onApply }: ScriptLearningModalProps) { const { step, inputUrl, setInputUrl, topics, selectedTopic, setSelectedTopic, wordCount, setWordCount, generatedScript, error, analysisId, handleAnalyze, handleGenerate, handleRegenerate, backToInput, backToTopics, copyToClipboard, } = useScriptLearning({ isOpen }); if (!isOpen) return null; const wordCountNum = Number(wordCount); const wordCountValid = Number.isInteger(wordCountNum) && wordCountNum >= WORD_COUNT_MIN && wordCountNum <= WORD_COUNT_MAX; const canGenerate = !!analysisId && !!selectedTopic && wordCountValid; const handleApplyAndClose = () => { if (!generatedScript.trim()) return; onApply?.(generatedScript); onClose(); }; return ( } subtitle="分析博主近期选题风格并快速生成文案" onClose={onClose} />
{step === "input" && (
setInputUrl(event.target.value)} placeholder="请粘贴抖音或B站博主主页链接..." className="w-full bg-black/20 border border-white/10 rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:border-cyan-500 transition-colors" />

仅支持 https 链接,建议使用主页地址(非单条视频链接)

{error && (

{error}

)}
)} {(step === "analyzing" || step === "generating") && (

{step === "analyzing" ? "正在分析中..." : "正在生成中..."}

)} {step === "topics" && (

已完成深度学习,请选择热门话题。

请选择一个话题

{topics.map((topic) => { const active = selectedTopic === topic; return ( ); })}
setWordCount(event.target.value)} placeholder="请输入目标字数(80-1000),如 300" className="w-full bg-black/20 border border-white/10 rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:border-cyan-500 transition-colors" />
{error && (

{error}

)}
)} {step === "result" && (

生成结果

{generatedScript.length} 字

{generatedScript}

{error && (

{error}

)}
)}
); }