5a824c2eee
75 components + DESIGN_SYSTEM.md + sync script. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.7 KiB
3.7 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, output, tested, tests, test_file_path, file_path, props, emits, has_state, framework, variant
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | output | tested | tests | test_file_path | file_path | props | emits | has_state | framework | variant | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dropzone | component | ts | ui | 1.0.0 | impure | Dropzone(props: DropzoneProps): JSX.Element | Zona de drag-and-drop para archivos con estados idle/accept/reject, límite de tamaño y tipos MIME. Wrapper sobre Mantine Dropzone. |
|
false |
|
Componente Dropzone que renderiza área de arrastrar y soltar archivos con feedback visual | false | frontend/functions/ui/dropzone.tsx |
|
|
true | react |
Ejemplo
import {
Dropzone,
DropzoneAccept,
DropzoneReject,
DropzoneIdle,
IMAGE_MIME_TYPE,
} from '@fn_library/dropzone'
import { IconPhoto, IconUpload, IconX } from '@tabler/icons-react'
import { Group, Text } from '@mantine/core'
function ImageUploader() {
return (
<Dropzone
onDrop={(files) => console.log('Archivos aceptados:', files)}
onReject={(files) => console.log('Archivos rechazados:', files)}
accept={IMAGE_MIME_TYPE}
maxSize={5 * 1024 ** 2}
>
<Group justify="center" gap="xl" mih={120} style={{ pointerEvents: 'none' }}>
<DropzoneAccept>
<IconUpload size={52} stroke={1.5} />
</DropzoneAccept>
<DropzoneReject>
<IconX size={52} stroke={1.5} />
</DropzoneReject>
<DropzoneIdle>
<IconPhoto size={52} stroke={1.5} />
</DropzoneIdle>
<div>
<Text size="xl" inline>
Arrastra imágenes aquí o haz clic para seleccionar
</Text>
<Text size="sm" c="dimmed" inline mt={7}>
Máximo 5 MB por imagen
</Text>
</div>
</Group>
</Dropzone>
)
}
Notas
El prop onDrop tiene un default vacío (() => {}) para que el componente sea válido sin handler. Siempre sobreescribirlo en uso real.
Sub-componentes exportados:
DropzoneAccept— visible cuando el archivo arrastrado es aceptado (tipo y tamaño válidos)DropzoneReject— visible cuando el archivo es rechazadoDropzoneIdle— visible en estado de reposoDropzoneFullScreen— captura drops en cualquier parte de la pantalla
Constantes de tipos MIME exportadas:
IMAGE_MIME_TYPE— imágenes comunes (png, jpg, gif, webp, etc.)MIME_TYPES— objeto con claves por tipo (pdf, csv, xlsx, mp4, etc.)