import type { Meta, StoryObj } from '@storybook/react'
import { Upload, FileText, ImageIcon } from 'lucide-react'
import { DropZone } from './drop-zone'
const AppContent = () => (
App content area — drag files over this window
)
const meta: Meta = {
title: 'Primitives/DropZone',
component: DropZone,
parameters: { layout: 'centered', backgrounds: { default: 'dark' } },
args: {
onDrop: (files) => console.log('dropped', files),
children: ,
},
}
export default meta
type Story = StoryObj
export const Idle: Story = {
name: 'Idle (no drag)',
}
export const WithAcceptFilter: Story = {
name: 'With Accept Filter (.pdf, .csv)',
args: {
accept: '.pdf,.csv',
title: 'Drop CSV or PDF files',
description: 'Only .pdf and .csv files will be accepted.',
},
}
export const Disabled: Story = {
name: 'Disabled',
args: { disabled: true },
}
/** Static render of the default drop overlay — the real one only mounts during dragenter. */
export const OverlayDefault: Story = {
name: 'Overlay — Default',
render: () => (
Drop files to upload
Your files will be securely stored in the workspace.
),
}
export const OverlayFiltered: Story = {
name: 'Overlay — Accept filter (.pdf, .csv)',
render: () => (
Drop CSV or PDF files
Only .pdf and .csv files will be accepted.
.pdf
.csv
),
}
export const OverlayImages: Story = {
name: 'Overlay — Images',
render: () => (
Drop images here
Accepts .png, .jpg, .webp, .gif
),
}
export const OverlayCustom: Story = {
name: 'Overlay — Custom content',
render: () => (
console.log('dropped', files)}
overlay={
Custom overlay
Replace default drop UI with anything.
}
>
Drag a real file here to trigger custom overlay
),
}