Instalación
npx logic2b@next add file-dropzoneUso
import { FileDropzone } from "@/components/ui/file-dropzone"
<FileDropzone
inputLabel="Subir imágenes de producto"
multiple
accept="image/*"
onFiles={(files) => upload(files)}
/>
Se resalta mientras se arrastra un archivo sobre ella y llama a onFiles con
el File[] soltado o seleccionado. La lista de archivos, las previsualizaciones
y el progreso de subida quedan a tu cargo: pasa contenido propio como children
para sustituir el icono y mensaje predeterminados.
Accesibilidad
La superficie es una región con role="button", admite foco y responde a
Intro o Espacio para abrir el selector de archivos, por lo
que funciona sin ratón. Junto a ella se genera un <input type="file"> nativo
con etiqueta, fuera de la región de botón, para evitar controles interactivos
anidados. Usa inputLabel para describir la finalidad de la subida.
Playground interactivo
Edita las propiedades del componente y revisa el JSX exacto antes de copiarlo. La vista previa se carga solo cuando esta sección entra en pantalla.
<FileDropzone
accept="image/*"
multiple
inputLabel="Upload project images"
className="w-full max-w-md"
/>Referencia de API
Generada a partir de las exportaciones públicas de TypeScript en src/ui/file-dropzone.tsx. Las descripciones técnicas conservan el texto canónico del código fuente.
FileDropzoneProps
Tipointerface FileDropzoneProps extends Omit<React.ComponentProps<"div">, "onDrop" | "children"> { /** Called with the accepted files when they are dropped or selected. */ onFiles?: (files: File[]) => void /** `accept` attribute forwarded to the file input (e.g. `"image/*"`). */ accept?: string /** Allow selecting more than one file. Default `false`. */ multiple?: boolean disabled?: boolean /** Accessible name for the native file input. Default `"Upload files"`. */ inputLabel?: string /** Replace the default icon/prompt with your own content. */ children?: React.ReactNode }FileDropzone
ComponenteA drag-and-drop file surface with click / keyboard to browse. Native DnD (no dependencies): highlights while a file is dragged over it and calls `onFiles` with the dropped or selected files. Rendering the file list is left to the consumer.
Props: FileDropzoneProps| Propiedad | Tipo | Obligatoria | Valor predeterminado | Descripción |
|---|---|---|---|---|
onFiles | (files: File[]) => void | No | — | Called with the accepted files when they are dropped or selected. |
accept | string | No | — | `accept` attribute forwarded to the file input (e.g. `"image/*"`). |
multiple | boolean | No | false | Allow selecting more than one file. Default `false`. |
disabled | boolean | No | — | — |
inputLabel | string | No | "Upload files" | Accessible name for the native file input. Default `"Upload files"`. |
children | React.ReactNode | No | — | Replace the default icon/prompt with your own content. |
Contrato de accesibilidad
Comportamiento legible por máquinas y responsabilidades de quien integra file-dropzone. Los detalles normativos conservan el texto canónico del registro.
- Soporte
- Comportamiento implementado
- Patrón
- file upload
- HTMLInputElement type=file
| Teclas | Comportamiento |
|---|---|
| Enter Space | Activate the focused control. |
Semántica incorporada
- A hidden native file input owns the picker; the visible drop surface is keyboard activatable.
Responsabilidades de integración
- Provide contextual instructions, accepted formats and validation feedback.