enes

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.

  • Chile
  • Colombia
  • Dominican Republic
  • Costa Rica
  • Venezuela

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 navigationMode en el ListView exterior: usa items para navegar con enlaces nativos y composite para tarjetas seleccionables con controles secundarios. Deja que el componente gestione el tabindex de los elementos y sus controles, salvo que desactives esa gestión con disableTabspot.
  • Con los roles de grid predeterminados en listas compuestas seleccionables, el componente coloca el contenido de cada fila en un único gridcell y gestiona la navegación hacia sus controles. No necesitas añadir contenedores gridcell manualmente.
  • Usa onAction para la acción principal del elemento y botones o enlaces nativos con onclick para 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 selectionMode y navigationMode. Usa etiquetas HTML compatibles: ul/ol con elementos li, o as="div" tanto en la lista de tarjetas como en sus elementos.
  • Usa ListViewItemBranch para 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. Establece role="list" en cada lista seleccionable que contenga ramas para conservar la semántica nativa de listas.
  • Asigna un nombre accesible al ListView seleccionable con aria-label o aria-labelledby. Asigna un nombre al nav y marca el enlace actual con aria-current="page". Usa texto visible significativo o aria-label en los controles, un label descriptivo para cada rama y valores value estables 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.

  • Apple
  • Banana
  • Cherry

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.

  • Apple
  • Banana
  • Cherry

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.

  • Apple
  • Banana
  • Cherry

Selected: Apple

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.

Fluent

Design system

Svelte

UI framework

Vite

Build tool

Selected:

Last action:

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

NameTypeDefaultDescription
roleAriaRoleSobrescribe 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.
manageSpecialKeysboolean | TabspotRootOptions['manageSpecialKeys']trueLas 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 bindablestring[]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[] | []) => voidSe llama cada vez que cambia la selección.
toggleOnClickbooleanfalseCuando 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 bindableHTMLUListElement | HTMLOListElement | HTMLDivElementLa referencia del DOM del elemento lista.
disableTabspotbooleanfalseDeja la lista fuera de la gestión de foco de tabspot, para conectar la tuya propia.
HTML Attributes

Propiedades de ListViewItem

NameTypeDefaultDescription
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.
valuestringEl valor que se reporta a la lista cuando se selecciona el item. Si no se indica, se genera un id.
activebooleanRenderiza el elemento en su estado pulsado.
role'treeitem' | 'menuitem' | 'option' | 'row'El rol ARIA del item. Por defecto se deriva de la lista.
disabledbooleanDeshabilita la interacción del usuario.
checkmarkCheckboxPropsLas props que se aplican al checkbox que se renderiza cuando la lista es multiselect.
onAction(e: MouseEvent, value: string) => voidSe llama cuando el item recibe un clic o se activa con el teclado.
onfocus(e: Event, value: string) => voidSe llama cuando el item recibe el foco.
ref bindableHTMLLIElement | HTMLAnchorElement | HTMLButtonElement | HTMLDivElementLa referencia del DOM del elemento item.
HTML Attributes

Propiedades de ListViewItemBranch

NameTypeDefaultDescription
labelstringLa etiqueta accesible que se muestra en el botón de expansión.
iconSnippet | ComponentEl icono decorativo antes de la etiqueta.
expanded bindablebooleanfalseIndica si el contenido anidado es visible. Las ramas solo se abren o cierran y nunca son seleccionables.
onExpandedChange(e: Event, expanded: boolean) => voidSe ejecuta cuando el usuario abre o cierra la rama.
disabledbooleanfalseDeshabilita 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 bindableHTMLButtonElementLa 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 bindableHTMLLIElement | HTMLDivElementLa referencia DOM del elemento contenedor, el elemento de lista que contiene el bot�n y la lista anidada.
wrapperAttributesHTMLAttributesLos atributos que se aplican al elemento wrapper.
childrenSnippetContenido de ListView anidado, que permanece montado al cerrarse para conservar su selección.
HTMLButtonAttributes without children, role, type, value, aria-expanded, aria-controls
Editar este documento Ver como Markdown