"use client" import type React from "react" import { useState, useRef } from "react" import { X, Upload } from "lucide-react" import { Button } from "@/components/ui/button" import { useToast } from "@/hooks/use-toast" import { validateFileForUpload, generateFilePreview } from "@/lib/file-utils" export function CharacterUploader() { const [preview, setPreview] = useState(null) const [isDragging, setIsDragging] = useState(false) const fileInputRef = useRef(null) const { toast } = useToast() const handleFile = async (file: File) => { const validation = validateFileForUpload(file, true) if (validation.valid) { const previewUrl = await generateFilePreview(file) setPreview(previewUrl) } else if (validation.error) { toast({ title: "Invalid file", description: validation.error, variant: "destructive", duration: 4000, }) } } const handleDrop = (e: React.DragEvent) => { e.preventDefault() setIsDragging(false) const file = e.dataTransfer.files[0] if (file) handleFile(file) } const handleDragOver = (e: React.DragEvent) => { e.preventDefault() setIsDragging(true) } const handleDragLeave = () => { setIsDragging(false) } const clearPreview = () => { setPreview(null) if (fileInputRef.current) { fileInputRef.current.value = "" } } if (preview) { return (
Character preview
) } return ( ) }