import type { Meta, StoryObj } from "@storybook/react" import { useState } from "react" import { Dropzone, DropzoneAccepted, DropzoneDescription, DropzoneGroup, DropzoneInput, DropzoneRejected, DropzoneTitle, DropzoneTrigger, DropzoneUploadIcon, DropzoneZone, } from "./FileUpload" const meta: Meta = { title: "media-upload/FileUpload", component: Dropzone, parameters: { layout: "centered", }, tags: ["autodocs"], } export default meta type Story = StoryObj // Basic Dropzone Story export const Default: Story = { render: () => ( Upload your files Drag and drop files here, or click to select files ), } // With File Type Restrictions export const WithFileTypeRestrictions: Story = { render: () => ( Upload images only Only JPEG, PNG, and GIF files are allowed ), } // Multiple Files Disabled export const SingleFileOnly: Story = { render: () => ( Upload single file Only one file can be uploaded at a time ), } // With Custom Trigger Button export const WithTriggerButton: Story = { render: () => ( Drop files here Or click the button below to select files Browse Files ), } // Interactive Example with State export const Interactive: Story = { render: () => { const [files, setFiles] = useState([]) return (
{ setFiles(prev => [...prev, ...acceptedFiles]) }} > Interactive Upload Files will be added to the list below {acceptedFiles => acceptedFiles.length > 0 && (
✓ {acceptedFiles.length} file(s) accepted
) }
{rejectedFiles => rejectedFiles.length > 0 && (
✗ {rejectedFiles.length} file(s) rejected
) }
{files.length > 0 && (

Uploaded Files:

{files.map((file, index) => (
{file.name}
))}
)}
) }, } // Disabled State export const Disabled: Story = { render: () => ( Upload Disabled File upload is currently disabled ), } // With Max File Size export const WithMaxFileSize: Story = { render: () => ( {" "} {/* 5MB */} Upload with Size Limit Maximum file size: 5MB {rejectedFiles => rejectedFiles.length > 0 && (
{rejectedFiles.map((file, index) => (
{file.file.name}: {file.errors.map(error => error.message).join(", ")}
))}
) }
), } // No Click (Drag Only) export const DragOnly: Story = { render: () => ( Drag Only Files can only be uploaded by dragging them here ), }