import { Image as ImageIcon, Trash2, Upload } from 'lucide-react'; import TextInputArea from '@/components/TextInputArea'; import { CopyButton } from '@/components/CopyButton'; import DecodeResultPaper from './DecodeResultPaper'; import { Button } from '@/components/ui/button'; import { downloadBlob } from '@/utils/base64Converter'; import { formatBytes } from '@/utils/format'; 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'; interface Base64ConverterSectionProps { mode: 'file' | 'image'; } export default function Base64ConverterSection({ mode }: Base64ConverterSectionProps) { const [direction, setDirection] = useStorageState( `base64Converter/${mode}Mode/direction`, 'encode', isValidDirection, ); const { result, info, isLoading, isDragging, setIsDragging, fileInputRef, encodeError, decodeInput, setDecodeInput, decoded, decodeError, decodedFileName, setCustomFileName, resetAll, handleFileSelect, maxFileSizeStr, } = useBase64Converter({ mode }); const handleDirectionChange = (next: Base64ConvertDirection) => { if (next === direction) return; resetAll(); setDirection(next); }; return (