import { Trash2, Upload } from 'lucide-react'; import TextInputArea from '@/components/TextInputArea'; import { useTranslation } from 'react-i18next'; import CopyButton from '@/components/CopyButton'; import DecodeResultPaper from '@/components/DecodeResultPaper'; import { Button } from '@/components/ui/button'; import { downloadBlob, formatFileSize, MAX_FILE_SIZE } from '@/utils/base64Converter'; import { useStorageState } from '@/utils/useStorageState'; import type { Base64ConvertDirection } from '@/types/storage'; import SwitchButtonGroup from '@/components/SwitchButtonGroup'; import { useBase64Converter } from './useBase64Converter'; // 💡 斩断重复代码 import { cn } from '@/lib/utils'; const isValidDirection = (val: unknown): val is Base64ConvertDirection => val === 'encode' || val === 'decode'; export default function FileMode() { const { t } = useTranslation('base64Converter'); const [direction, setDirection] = useStorageState( 'base64Converter/fileMode/direction', 'encode', isValidDirection, ); const { result, info, isLoading, isDragging, setIsDragging, fileInputRef, encodeError, decodeInput, setDecodeInput, decoded, decodeError, decodedFileName, setCustomFileName, resetAll, safeFileSelect, } = useBase64Converter({ mode: 'file' }); const handleDownload = () => { if (decoded) downloadBlob(decoded.blob, decodedFileName); }; return (