Transfer
UISelector de doble lista para mover elementos entre disponibles y seleccionados, con casillas, búsqueda y botones. El patrón clásico de back-office: asignar roles, elegir columnas visibles, miembros de un grupo.
Requiere Livewire. kore::transfer guarda el array de valores seleccionados con wire:model en un componente Livewire real; el contenedor va con wire:ignore. Fuera de ese contexto no tiene dónde sincronizar el estado.
En vivo
Marca casillas y usa los botones para mover elementos entre paneles, o busca dentro de cada uno. Es un componente Livewire real: el estado de abajo se actualiza en cada movimiento.
Permisos — uso básico
- Sin elementos
- Sin elementos
selectedRoles: ["edit"]
Columnas visibles — paneles y buscador personalizados
- Sin elementos
- Sin elementos
visibleColumns: ["name","email"]
{{-- Uso básico --}}
<x-kore::transfer
wire:model="selectedRoles"
label="Permisos"
:items="$items"
/>
{{-- Paneles y buscador personalizados --}}
<x-kore::transfer
wire:model="visibleColumns"
label="Columnas visibles"
:items="$columnItems"
:titles="['Ocultas', 'Visibles']"
:searchable="false"
/>{{-- Uso básico --}}
<x-kore::transfer
wire:model="selectedRoles"
label="Permisos"
:items="$items"
/>
{{-- Paneles y buscador personalizados --}}
<x-kore::transfer
wire:model="visibleColumns"
label="Columnas visibles"
:items="$columnItems"
:titles="['Ocultas', 'Visibles']"
:searchable="false"
/>Cómo funciona
Casilla y botones, con búsqueda independiente por panel.
- Casilla + botones. Marca elementos en cualquiera de los dos paneles y usa
›/‹para mover los seleccionados, o»/«para mover todos de una vez. - Búsqueda independiente por panel. Cada panel filtra por su propia etiqueta. Con
searchable=falseel buscador desaparece — útil cuando la lista es corta. wire:ignore+ plugin Alpine. El contenedor llevawire:ignore: el pluginKoreTransfergestiona el DOM de los paneles y sincroniza la selección con$wire.$set(model, valores)en cada cambio.- El orden lo marca
items. Las listas de cada panel se derivan filtrandoitemspor el arraytarget— la fuente de verdad —, así que el orden original deitemsse respeta en los dos paneles.
Props
| Prop | Tipo | Default | Descripción |
|---|---|---|---|
items
|
array | [] | Opciones: value y label por cada elemento |
wire:model
|
string | — | La propiedad Livewire donde vive el array de valores seleccionados |
searchable
|
bool | true | Muestra el buscador en cada panel |
titles
|
array | Disponibles / Seleccionados | Encabezados de los dos paneles |
label
|
string | null | Etiqueta del campo |
hint
|
string | null | Texto de ayuda bajo el campo |
name
|
string | null | Nombre del campo, para formularios y errores |
error
|
string | null | Mensaje de error a mostrar |
required
|
bool | false | Marca el campo como obligatorio |
disabled
|
bool | false | Desactiva la interacción |
readonly
|
bool | false | Las listas se leen y se buscan, pero no se marca ni se mueve nada, y el valor se sigue enviando |
showError
|
bool | true | Muestra el mensaje de error automático de validación |