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 (
setTextToEncode('')} />
); } // 预览态:显示文本预览 + 二维码(紧凑布局,适配popup窗口) return (
{/* 文本预览区域(固定高度,单行显示) */}
{getTruncatedText(generatorState.savedText)}
{/* 二维码预览区域(自适应剩余空间) */}
); }