@hua-labs/ui
v1.0.0
파일을 선택하거나 여기에 드래그하세요
지원 형식: image/* • 최대 크기: 5 MB
• 최대 크기: 10 MB • 최대 3개
size="sm"
Small
size="md" (default)
Medium
size="lg"
Large
files | UploadedFile[] | [] | Array of uploaded files |
onChange | (files: File[]) => void | - | Callback when files are selected |
onRemove | (file: UploadedFile) => void | - | Callback when file is removed |
multiple | boolean | false | Allow multiple file selection |
accept | string | - | Accepted file types (e.g., 'image/*', '.pdf') |
maxSize | number | - | Maximum file size in bytes |
maxFiles | number | - | Maximum number of files |
disabled | boolean | false | Disable the upload component |
dragDrop | boolean | true | Enable drag and drop functionality |
placeholder | string | "파일을 선택하거나 여기에 드래그하세요" | Placeholder text |
size | "sm" | "md" | "lg" | "md" | Upload area size |
| Property | Type | Required | |
|---|---|---|---|
| id | string | * | Unique file identifier |
| file | File | * | Original File object |
| name | string | * | File name |
| size | number | * | File size in bytes |
| type | string | * | File MIME type |
| progress | number | - | Upload progress (0-100) |
| status | "pending" | "uploading" | "success" | "error" | - | Upload status |
| url | string | - | Uploaded file URL |
| error | string | - | Error message if upload failed |
image/*image/png, image/jpeg.pdfvideo/*.doc, .docx, .pdfdocs:common.basicUsagetsx
1import { Upload } from "@hua-labs/hua";2import type { UploadedFile } from "@hua-labs/hua";3 4const [files, setFiles] = useState<UploadedFile[]>([]);5 6const handleChange = (newFiles: File[]) => {7 const uploadedFiles = newFiles.map((file) => ({8 id: crypto.randomUUID(),9 file,10 name: file.name,11 size: file.size,12 type: file.type,13 status: "success" as const,14 }));15 setFiles((prev) => [...prev, ...uploadedFiles]);16};17 18<Upload19 files={files}20 onChange={handleChange}21 onRemove={(file) => setFiles((prev) => prev.filter((f) => f.id !== file.id))}22/>docs:components.upload.examples.imageOnlytsx
1<Upload2 accept="image/*"3 maxSize={5 * 1024 * 1024} // 5MB4 files={files}5 onChange={handleChange}6 onRemove={handleRemove}7 placeholder="이미지를 선택하거나 드래그하세요"8/>docs:components.upload.examples.multipletsx
1<Upload2 multiple3 maxFiles={5}4 maxSize={10 * 1024 * 1024} // 10MB5 files={files}6 onChange={handleChange}7 onRemove={handleRemove}8 placeholder="최대 5개 파일 (각 10MB 이하)"9/>docs:components.upload.examples.progresstsx
1// 파일 상태 업데이트 예시2const uploadFile = async (file: UploadedFile) => {3 // 업로드 시작4 updateFileStatus(file.id, { status: "uploading", progress: 0 });5 6 try {7 // 실제 업로드 로직 (예: XMLHttpRequest with progress)8 const url = await uploadToServer(file.file, (progress) => {9 updateFileStatus(file.id, { progress });10 });11 12 updateFileStatus(file.id, { status: "success", url });13 } catch (error) {14 updateFileStatus(file.id, { status: "error", error: "업로드 실패" });15 }16};- •
- •
- •
- •docs:components.upload.accessibility.keyboard: docs:components.upload.accessibility.keyboardDesc
- •docs:components.upload.accessibility.screenReader: docs:components.upload.accessibility.screenReaderDesc
- •docs:components.upload.accessibility.focus: docs:components.upload.accessibility.focusDesc