enes

TabView

TabView dispone un conjunto de pestañas como una tira, con la forma que un navegador le da a las pestañas de sus documentos. Cada pestaña puede llevar un icono y un botón de cierre, y un botón de pestaña nueva puede situarse al final de la tira.

The document you are working on.

La tira se ocupa de la selección y de nada más. Lo que abre una pestaña lo renderizas tú, donde corresponda en la página, así que una pestaña puede abrir un panel debajo, cambiar una región en otro sitio o dirigir una ruta.

Para crear una tira de pestañas, necesitarás usar los siguientes componentes:

  • TabView: El componente raíz que crea el contexto que lee cada pestaña: cuál está seleccionada, si las pestañas se cierran y cómo toman su ancho. Renderiza el `tablist` y, opcionalmente, el botón de pestaña nueva.
  • TabViewTab: Una sola pestaña de la tira. Informa de su propia selección y puede llevar un icono y un botón de cierre.

Uso

Una tira de pestañas espera un `value` en cada pestaña y un `activeTab` con el que compararlo. Vincula `activeTab` para seguir la selección y renderiza tú mismo lo que abre la pestaña seleccionada.

<script>
	import { TabView, TabViewTab } from 'fluentui-svelte';

	let activeTab = $state('document');
</script>

<TabView bind:activeTab listProps={{ 'aria-label': 'Workspaces' }}>
	<TabViewTab id="tab-document" value="document">Document</TabViewTab>
	<TabViewTab id="tab-mail" value="mail">Mail</TabViewTab>
</TabView>

{#if activeTab === 'document'}
	<div role="tabpanel" aria-labelledby="tab-document">The document you are working on.</div>
{:else}
	<div role="tabpanel" aria-labelledby="tab-mail">Everything that landed in your inbox.</div>
{/if}

Cerrar pestañas

`closable` le da a cada pestaña un botón de cierre, y una pestaña concreta puede activarlo o renunciar a él por su cuenta. La tira nunca elimina una pestaña: las pestañas son tu marcado, así que `onTabClose` te devuelve el valor y deja en tus manos la eliminación — y qué pestaña toma el relevo.

Botón de pestaña nueva

`showNewTabButton` añade un botón al final de la tira, fuera del `tablist` para que nunca se lea como una pestaña. `onNewTab` se dispara cuando se activa.

Ancho de las pestañas

`tabWidthMode` decide cómo toman su ancho las pestañas: `equal` reparte la tira por igual, `size-to-content` ajusta cada pestaña a su propia etiqueta y `compact` reduce a su icono cada pestaña en reposo y solo despliega la seleccionada.

Deshabilitado

Una pestaña deshabilitada no puede seleccionarse, y las flechas pasan por encima en lugar de detenerse en ella.

Propiedades del componente (TabView)

NameTypeDefaultDescription
ref bindableHTMLDivElementLa referencia del DOM del elemento que envuelve la tira.
listRef bindableHTMLDivElementLa referencia del DOM de la lista de pestañas.
listPropsHTMLAttributesLas props que se aplican al elemento de la lista de pestañas, donde viven el rol `tablist` y su etiqueta.
activeTab bindablestringEl valor de la pestaña seleccionada.
onTabChange(event: Event, value: string) => voidSe dispara cuando cambia la pestaña seleccionada.
closablebooleanfalseTodas las pestañas muestran un botón de cierre, salvo que la pestaña renuncie a él.
onTabClose(event: Event, value: string) => voidSe dispara cuando una pestaña pide cerrarse. Eliminarla queda en manos del consumidor.
showNewTabButtonbooleanfalseMuestra el botón que añade una pestaña nueva al final de la tira.
onNewTab(event: MouseEvent) => voidSe dispara cuando se activa el botón de pestaña nueva.
newTabButtonPropsHTMLButtonAttributesLas props que se aplican al botón de pestaña nueva.
tabWidthMode'equal' | 'size-to-content' | 'compact''equal'Cómo toman su ancho las pestañas: repartiendo la tira por igual, ajustándose a su propio contenido o reduciéndose al icono en todas las pestañas menos la seleccionada.
disableTabspotbooleanfalseDeja la tira fuera de la gestión del foco de tabspot, para que conectes la tuya.
Element Attributes (div)

Propiedades del componente (TabViewTab)

NameTypeDefaultDescription
ref bindableHTMLDivElementLa referencia del DOM del elemento de la pestaña.
valuestringEl valor que identifica a la pestaña. Por defecto, un id generado.
iconSnippet | ComponentEl icono que se muestra antes de la etiqueta.
closablebooleanMuestra el botón de cierre de la pestaña. Recurre al `closable` de la tira.
disabledbooleanDeshabilita la interacción del usuario.
onClose(event: Event, value: string) => voidSe dispara cuando la pestaña pide cerrarse, ya sea desde su botón de cierre o con la tecla `Delete`.
Element Attributes (div)

Navegación por teclado

La tira es una sola parada de tabulación. `ArrowLeft` y `ArrowRight` recorren las pestañas, `Home` y `End` saltan a los extremos, `Enter` y `Space` seleccionan la pestaña enfocada y `Delete` la cierra cuando es cerrable. `disableTabspot` te devuelve la gestión del foco.

Accesibilidad

La tira renderiza un `tablist` y cada pestaña un `tab`, así que dale nombre a la lista con el `aria-label` que pasas en `listProps`. Como eres tú quien renderiza lo que abre una pestaña, dale a ese elemento el rol `tabpanel` y apunta su `aria-labelledby` al `id` de su pestaña.