K
KoreUI

Upload

Form

Subida de archivos con drag & drop, progreso en tiempo real vía Livewire, validación del lado del cliente (tipo, tamaño, cantidad), previews de imágenes, pegado desde portapapeles y fallback sin Livewire.

Uso básico

Drag & drop or browse

{{-- Con Livewire --}}
<x-kore::upload wire:model="avatar" label="Avatar" accept="image/*" :max-size="5" />

{{-- Sin Livewire (input file estándar) --}}
<x-kore::upload name="document" label="Documento" accept=".pdf" />
{{-- Con Livewire --}}
<x-kore::upload wire:model="avatar" label="Avatar" accept="image/*" :max-size="5" />

{{-- Sin Livewire (input file estándar) --}}
<x-kore::upload name="document" label="Documento" accept=".pdf" />

Variantes

Dropzone (por defecto) y button.

Drag & drop or browse

{{-- Dropzone --}}
<x-kore::upload wire:model="file" label="Dropzone" />

{{-- Button --}}
<x-kore::upload wire:model="file" label="Botón" variant="button" />
{{-- Dropzone --}}
<x-kore::upload wire:model="file" label="Dropzone" />

{{-- Button --}}
<x-kore::upload wire:model="file" label="Botón" variant="button" />

Múltiples archivos

Permite subir varios archivos con límites de cantidad y tamaño.

Drag & drop or browse

<x-kore::upload wire:model="photos" label="Fotos"
    multiple :max-files="5" :max-size="3"
    accept="image/png,image/jpeg,.webp" />
<x-kore::upload wire:model="photos" label="Fotos"
    multiple :max-files="5" :max-size="3"
    accept="image/png,image/jpeg,.webp" />

Validación cliente

Los archivos se validan antes de iniciar la subida. Se verifican tipo, tamaño y cantidad.

Drag & drop or browse

<x-kore::upload wire:model="docs" label="Documentos"
    accept=".pdf,.docx" :max-size="10" :max-files="3" multiple />
<x-kore::upload wire:model="docs" label="Documentos"
    accept=".pdf,.docx" :max-size="10" :max-files="3" multiple />

Preview de imágenes

Habilitado por defecto. Las imágenes muestran miniatura; los demás archivos un icono genérico.

Drag & drop or browse

Drag & drop or browse

{{-- Con preview (default) --}}
<x-kore::upload wire:model="file" label="Con preview" accept="image/*" />

{{-- Sin preview --}}
<x-kore::upload wire:model="file" label="Sin preview" :preview="false" />
{{-- Con preview (default) --}}
<x-kore::upload wire:model="file" label="Con preview" accept="image/*" />

{{-- Sin preview --}}
<x-kore::upload wire:model="file" label="Sin preview" :preview="false" />

Pegar del portapapeles

Habilitado por defecto. Ctrl+V / Cmd+V con el componente enfocado para pegar imágenes.

Drag & drop or browse

Drag & drop or browse

{{-- Con paste (default) --}}
<x-kore::upload wire:model="file" label="Pega una imagen" />

{{-- Sin paste --}}
<x-kore::upload wire:model="file" label="Sin paste" :pasteable="false" />
{{-- Con paste (default) --}}
<x-kore::upload wire:model="file" label="Pega una imagen" />

{{-- Sin paste --}}
<x-kore::upload wire:model="file" label="Sin paste" :pasteable="false" />

Eliminar y limpiar

Botón de eliminar por archivo y botón de limpiar todo.

Drag & drop or browse

Drag & drop or browse

{{-- Eliminar por archivo --}}
<x-kore::upload wire:model="file" label="Archivo" deletable />

{{-- Limpiar todo --}}
<x-kore::upload wire:model="files" label="Archivos" multiple clearable />
{{-- Eliminar por archivo --}}
<x-kore::upload wire:model="file" label="Archivo" deletable />

{{-- Limpiar todo --}}
<x-kore::upload wire:model="files" label="Archivos" multiple clearable />

Modo estático

Muestra archivos ya subidos sin zona de carga. Útil en formularios de edición.

<x-kore::upload label="Adjuntos" static
    :static-files="[
        ['name' => 'reporte.pdf', 'size' => 245760, 'type' => 'application/pdf'],
        ['name' => 'foto.jpg', 'size' => 1048576, 'type' => 'image/jpeg', 'url' => '/storage/foto.jpg'],
    ]"
    deletable />
<x-kore::upload label="Adjuntos" static
    :static-files="[
        ['name' => 'reporte.pdf', 'size' => 245760, 'type' => 'application/pdf'],
        ['name' => 'foto.jpg', 'size' => 1048576, 'type' => 'image/jpeg', 'url' => '/storage/foto.jpg'],
    ]"
    deletable />

Auto upload

Cuando está deshabilitado, los archivos se preparan localmente y el usuario debe hacer clic en Subir.

Drag & drop or browse

<x-kore::upload wire:model="files" label="Archivos"
    :auto-upload="false" multiple deletable clearable />
<x-kore::upload wire:model="files" label="Archivos"
    :auto-upload="false" multiple deletable clearable />

Reintentos

Reintenta automáticamente las subidas fallidas hasta el máximo configurado.

Drag & drop or browse

<x-kore::upload wire:model="file" label="Archivo"
    retryable :max-retries="3" :retry-delay="2000" />
<x-kore::upload wire:model="file" label="Archivo"
    retryable :max-retries="3" :retry-delay="2000" />

Cámara

En dispositivos móviles, abre la cámara directamente en lugar del selector de archivos.

Drag & drop or browse

Drag & drop or browse

{{-- Cámara frontal (selfie) --}}
<x-kore::upload wire:model="selfie" label="Selfie" capture="user" accept="image/*" />

{{-- Cámara trasera (escaneo) --}}
<x-kore::upload wire:model="scan" label="Escanear" capture="environment" accept="image/*" />
{{-- Cámara frontal (selfie) --}}
<x-kore::upload wire:model="selfie" label="Selfie" capture="user" accept="image/*" />

{{-- Cámara trasera (escaneo) --}}
<x-kore::upload wire:model="scan" label="Escanear" capture="environment" accept="image/*" />

Estados

Disabled, required, hint y error.

Drag & drop or browse

Drag & drop or browse

Drag & drop or browse

Máximo 5 MB, PNG o JPG

Drag & drop or browse

<x-kore::upload label="Disabled" disabled />
<x-kore::upload label="Required" required />
<x-kore::upload label="Con hint" hint="Máximo 5 MB, PNG o JPG" />
<x-kore::upload label="Con error" error="Por favor sube un archivo." />
<x-kore::upload label="Disabled" disabled />
<x-kore::upload label="Required" required />
<x-kore::upload label="Con hint" hint="Máximo 5 MB, PNG o JPG" />
<x-kore::upload label="Con error" error="Por favor sube un archivo." />

Props

Prop Tipo Default Descripción
label string|null null Texto de la etiqueta
hint string|null null Texto de ayuda debajo del campo
name string|null null Nombre para detección de errores
error string|null null Mensaje de error manual
variant string dropzone Variante visual: dropzone, button
multiple bool false Permitir selección de múltiples archivos
accept string|null null Tipos de archivo aceptados (ej: image/*,.pdf)
maxSize int|null null Tamaño máximo en MB por archivo
maxFiles int|null null Número máximo de archivos (modo multiple)
preview bool true Mostrar miniaturas para imágenes
deletable bool false Mostrar botón de eliminar en cada archivo
deleteMethod string deleteUpload Método Livewire para eliminar archivo
clearable bool false Mostrar botón de limpiar todo
pasteable bool true Permitir pegar archivos del portapapeles
static bool false Mostrar archivos existentes sin zona de carga
staticFiles array|null null Array de objetos de archivos existentes
disabled bool false Estado deshabilitado
required bool false Campo obligatorio con asterisco
showError bool true Auto-detectar errores del \$errors bag
autoUpload bool true Subir automáticamente al seleccionar. false = modo staging
retryable bool false Habilitar reintento automático en error
maxRetries int 3 Máximo de reintentos por archivo
retryDelay int 2000 Retraso en ms entre reintentos
capture string|null null Modo de captura de cámara: user (frontal) o environment (trasera)

Configuración

Defaults globales en config/kore-ui.php.

config/kore-ui.php
'form' => [
    'upload' => [
        'max_size' => null,              // MB por archivo (null = sin límite del lado del cliente)
        'delete_method' => 'deleteUpload',
        'auto_upload' => true,           // false = modo staging
        'retryable' => false,            // reintento automático en error
        'max_retries' => 3,
        'retry_delay' => 2000,           // ms
    ],
],
'form' => [
    'upload' => [
        'max_size' => null,              // MB por archivo (null = sin límite del lado del cliente)
        'delete_method' => 'deleteUpload',
        'auto_upload' => true,           // false = modo staging
        'retryable' => false,            // reintento automático en error
        'max_retries' => 3,
        'retry_delay' => 2000,           // ms
    ],
],