import { useState, useEffect, useCallback } from 'react'; import Editor from 'react-simple-code-editor'; import { highlight, languages } from 'prismjs'; import 'prismjs/components/prism-markdown'; import 'prismjs/components/prism-yaml'; import 'prismjs/themes/prism.css'; import { useAccounts } from '@/hooks/useAccounts'; import { usePrompts } from '@/hooks/usePrompts'; import { Button } from '@/components/ui/button'; const PROMPT_TYPES = [ { type: 'storyboard', label: '分镜' }, { type: 'image', label: '图片提示词' }, { type: 'video', label: '视频提示词' }, ] as const; const editorStyle = { fontFamily: '"ui-monospace", "SFMono-Regular", "SF Mono", Menlo, Consolas, monospace', fontSize: 13, lineHeight: 1.6, minHeight: '100%', }; export function PromptEditor() { const { accounts } = useAccounts(); const [selectedAccount, setSelectedAccount] = useState(''); const [selectedType, setSelectedType] = useState('storyboard'); const { content, path, loading, load, save, setContent } = usePrompts(); useEffect(() => { if (accounts.length > 0 && !selectedAccount) { setSelectedAccount(accounts[0].id); } }, [accounts]); useEffect(() => { if (selectedAccount) { load(selectedAccount, selectedType); } }, [selectedAccount, selectedType]); const highlightCode = useCallback((code: string) => { try { return highlight(code, languages.markdown, 'markdown'); } catch { return code; } }, []); return (
{PROMPT_TYPES.map(({ type, label }) => ( ))}
{path || '选择账户和模板'}
); }