import { Loader2, Pencil, QrCode } from 'lucide-react'; import TextInputArea from '@/components/TextInputArea'; import QrCodePreview from '@/components/QrCodePreview'; import { useI18n } from '@/utils/chromeI18n'; import { useQrCodeContext } from '../contexts/QrCodeContext'; import { Button } from '@/components/ui/button'; import { Label } from '@/components/ui/label'; import { cn } from '@/lib/utils'; /** 文本预览的最大显示字符数 */ const TEXT_PREVIEW_MAX_LENGTH = 80; export default function GeneratePanel() { const { t } = useI18n('qrCode'); const { generatorState, setTextToEncode, confirmGenerate, backToEdit, downloadQrCode, copyQrCode, } = useQrCodeContext(); const isInputStep = generatorState.step === 'input'; const hasText = generatorState.textToEncode.trim().length > 0; /** 截断文本用于预览显示 */ const getTruncatedText = (text: string) => { if (text.length <= TEXT_PREVIEW_MAX_LENGTH) return text; return text.slice(0, TEXT_PREVIEW_MAX_LENGTH) + '...'; }; // 输入态:只显示输入框和生成按钮 if (isInputStep) { return (