ListView
ListView es un componente para renderizar un conjunto de elementos apilados verticalmente. Estos elementos pueden recibir foco, seleccionarse, tener una acción principal y una o más acciones secundarias, y admitir navegación por teclado y características de accesibilidad.
Uso
<script>
import { ListView, ListViewItem } from 'fluentui-svelte';
let list = ['A', 'B', 'C'];
let selected = ['A'];
</script>
<ListView selectedItems={selected}>
{#each list as item (item)}
<ListViewItem value={item}>{item}</ListViewItem>
{/each}
</ListView> Navigation Mode
Usa items para mantener cada elemento en el orden de tabulación. Usa composite para que la lista tenga una sola parada y accede a los controles secundarios con Derecha. La selección usa roles listbox y option en modo items, o grid, row y gridcell en modo composite. Para una navegación seleccionable con sublistas, establece role="list" en cada ListView y usa aria-current en los enlaces: cada lista gestiona sus propios selectedItems, sin seleccionar elementos de otros niveles.
Mejores prácticas
- Mantén las listas que solo muestran texto fuera de la secuencia de Tab. Configura
navigationModeen elListViewexterior: usaitemspara navegar con enlaces nativos ycompositepara tarjetas seleccionables con controles secundarios. Deja que el componente gestione eltabindexde los elementos y sus controles, salvo que desactives esa gestión condisableTabspot. - Con los roles de grid predeterminados en listas compuestas seleccionables, el componente coloca el contenido de cada fila en un único
gridcelly gestiona la navegación hacia sus controles. No necesitas añadir contenedoresgridcellmanualmente. - Usa
onActionpara la acción principal del elemento y botones o enlaces nativos cononclickpara acciones secundarias. Enter y Espacio activan los elementos interactivos no nativos; los enlaces conservan su comportamiento de teclado nativo. En filas compuestas seleccionables, la casilla cambia la selección de forma independiente y los botones y enlaces secundarios no ejecutan la acción ni seleccionan la fila. - Conserva los roles predeterminados para listas planas con selección; dependen de
selectionModeynavigationMode. Usa etiquetas HTML compatibles:ul/olcon elementosli, oas="div"tanto en la lista de tarjetas como en sus elementos. - Usa
ListViewItemBranchpara sublistas expandibles. Las ramas nunca son seleccionables y gestionan sus atributos de expansión y el foco. Cada lista anidada controla su propia selección. Establecerole="list"en cada lista seleccionable que contenga ramas para conservar la semántica nativa de listas. - Asigna un nombre accesible al
ListViewseleccionable conaria-labeloaria-labelledby. Asigna un nombre alnavy marca el enlace actual conaria-current="page". Usa texto visible significativo oaria-labelen los controles, unlabeldescriptivo para cada rama y valoresvalueestables al usar selección.
Navegación por teclado
Arriba y Abajo recorren los elementos del mismo nivel; Inicio y Fin llevan a sus extremos. Derecha abre una rama cerrada; en una rama abierta, entra en su sublista. Izquierda cierra una rama abierta; desde una rama cerrada o un hijo, vuelve a su padre. Escape cierra la rama más cercana y devuelve el foco a su botón. Derecha también entra en los controles de un elemento compuesto: Izquierda y Derecha los recorren, e Izquierda desde el primer control vuelve a la fila. Enter activa los enlaces; Enter y Espacio activan los botones y los elementos seleccionables. En modo items, Tab recorre los elementos y sus controles; en modo composite, toda la lista tiene una sola parada de tabulación. disableTabspot desactiva la gestión del foco con las flechas.
Navegación simple
Envuelve la lista en una región nav con nombre y usa as="a" con href para los enlaces de navegación. ListView envuelve los enlaces en elementos de lista nativos cuando la lista es ul u ol. Usa aria-current="page" en el enlace actual; la navegación conserva la semántica nativa de listas y enlaces.
Navegación con sublistas
Anida un ListView dentro de ListViewItemBranch. Las ramas son botones de expansión que reciben foco y nunca son seleccionables. El estado de expansión, aria-expanded, aria-controls, el contenido oculto y la restauración del foco se gestionan automáticamente. Cada lista anidada conserva su selección al cerrarse. Usa semántica nativa de listas; establece role="list" al habilitar la selección en una lista que contiene ramas.
Selection Mode
Use selectionMode (single, multiselect, or extended) to control how items are selected.
Alternar al hacer clic
En una lista multiselect, un clic normal selecciona solo ese elemento y Ctrl/Cmd + clic lo alterna. Activa toggleOnClick para que un clic normal alterne el elemento directamente.
Checkmark
Agrega y configura una casilla de verificación para el elemento. Puedes usar las mismas propiedades para el componente Checkbox .
La casilla alterna la selección de su elemento sin disparar onAction. Enlaza selectedItems para leer o controlar la selección.
Tarjetas con una acción principal
Con navigationMode en composite y un selectionMode, cada elemento es una fila. Establece as="div" en la lista y en sus tarjetas para mantener una estructura HTML válida. Al hacer clic en una fila se ejecuta su acción principal (onAction), la casilla alterna su selección y cualquier botón interno es una acción secundaria. Usa checkmark.wrapperAttributes.style para ubicar la casilla donde la necesites, como la esquina superior derecha de la tarjeta.
Los controles secundarios ejecutan sus propias acciones sin seleccionar el elemento ni disparar su acción principal. La casilla solo alterna la selección.
Propiedades de ListView
| Name | Type | Default | Description |
|---|---|---|---|
role | AriaRole | Sobrescribe el rol de la lista y los roles derivados de sus ítems. Usa list para una navegación anidada con selección independiente. | |
selectionMode | 'none' | 'single' | 'multiselect' | 'extended' | 'none' | Cuántos items se pueden seleccionar, y cómo se realiza la selección. |
navigationMode | 'items' | 'composite' | 'items' | Si la lista ocupa una sola parada de tabulación, o cada item ocupa la suya. |
manageSpecialKeys | boolean | TabspotRootOptions['manageSpecialKeys'] | true | Las teclas especiales que gestiona Tabspot en la raíz. Configura las teclas individualmente para dejar Escape al panel contenedor. Las claves omitidas en un objeto quedan desactivadas. |
selectedItems bindable | string[] | Los valores de los items seleccionados. | |
shape | 'circular' | 'rounded' | 'square' | 'rounded' | Los items pueden tener forma circular, redondeada o cuadrada. |
onSelectionChange | (e: Event, selectedItems: string[] | []) => void | Se llama cada vez que cambia la selección. | |
toggleOnClick | boolean | false | Cuando selectionMode es 'multiselect', hacer clic en un item alterna su selección directamente en lugar de requerir Ctrl/Cmd + clic. |
as | 'ul' | 'ol' | 'div' | 'ul' | El elemento HTML con el que se renderiza la lista. |
ref bindable | HTMLUListElement | HTMLOListElement | HTMLDivElement | La referencia del DOM del elemento lista. | |
disableTabspot | boolean | false | Deja la lista fuera de la gestión de foco de tabspot, para conectar la tuya propia. |
| HTML Attributes |
Propiedades de ListViewItem
| Name | Type | Default | Description |
|---|---|---|---|
as | 'li' | 'a' | 'button' | 'div' | 'li' | El elemento HTML con el que se renderiza el ítem. Los enlaces y botones se envuelven en un elemento de lista cuando la lista se renderiza como ul u ol. Usa li o div para listas anidadas y contenido con varios controles. Los botones no pueden contener casillas ni filas compuestas. |
shape | 'circular' | 'rounded' | 'square' | El item puede tener forma circular, redondeada o cuadrada. Por defecto se hereda de la lista. | |
value | string | El valor que se reporta a la lista cuando se selecciona el item. Si no se indica, se genera un id. | |
active | boolean | Renderiza el elemento en su estado pulsado. | |
role | 'treeitem' | 'menuitem' | 'option' | 'row' | El rol ARIA del item. Por defecto se deriva de la lista. | |
disabled | boolean | Deshabilita la interacción del usuario. | |
checkmark | CheckboxProps | Las props que se aplican al checkbox que se renderiza cuando la lista es multiselect. | |
onAction | (e: MouseEvent, value: string) => void | Se llama cuando el item recibe un clic o se activa con el teclado. | |
onfocus | (e: Event, value: string) => void | Se llama cuando el item recibe el foco. | |
ref bindable | HTMLLIElement | HTMLAnchorElement | HTMLButtonElement | HTMLDivElement | La referencia del DOM del elemento item. | |
| HTML Attributes |
Propiedades de ListViewItemBranch
| Name | Type | Default | Description |
|---|---|---|---|
label | string | La etiqueta accesible que se muestra en el botón de expansión. | |
icon | Snippet | Component | El icono decorativo antes de la etiqueta. | |
expanded bindable | boolean | false | Indica si el contenido anidado es visible. Las ramas solo se abren o cierran y nunca son seleccionables. |
onExpandedChange | (e: Event, expanded: boolean) => void | Se ejecuta cuando el usuario abre o cierra la rama. | |
disabled | boolean | false | Deshabilita el botón de expansión. |
shape | 'circular' | 'rounded' | 'square' | La forma del botón de expansión. Se hereda de la lista por defecto. | |
ref bindable | HTMLButtonElement | La referencia DOM del botón nativo de expansión. Los atributos HTML adicionales, incluidos class e id, también se aplican a este botón. | |
wrapperRef bindable | HTMLLIElement | HTMLDivElement | La referencia DOM del elemento contenedor, el elemento de lista que contiene el bot�n y la lista anidada. | |
wrapperAttributes | HTMLAttributes | Los atributos que se aplican al elemento wrapper. | |
children | Snippet | Contenido de ListView anidado, que permanece montado al cerrarse para conservar su selección. | |
HTMLButtonAttributes without children, role, type, value, aria-expanded, aria-controls |

