Table
Table muestra conjuntos de datos bidimensionales. Cada parte es una primitiva que se puede componer libremente, así que la tabla no impone de dónde vienen los datos.
| File | Author | Last updated |
|---|---|---|
Meeting notes | Max Mustermann | 7h ago |
Thursday presentation | Erika Mustermann | Yesterday at 1:45 PM |
Training recording | John Doe | Yesterday at 1:45 PM |
Purchase order | Jane Doe | Tue at 9:30 AM |
Los componentes son deliberadamente de bajo nivel: la ordenación, la selección y el filtrado no vienen incluidos. La tabla renderiza lo que le entregas y refleja el estado que le das, así que cualquier capa de datos la controla sin pelearse con un motor interno.
Para crear una tabla, necesitarás usar los siguientes componentes:
Table: El componente raíz que crea el contexto que leen las demás partes: el tamaño, si las partes se renderizan como elementos nativos de tabla y si las columnas son ordenables.TableHeader: La sección de encabezado de la tabla.TableHeaderCell: El encabezado de una columna. Se convierte en un botón de ordenación cuando la columna es ordenable.TableBody: La sección del cuerpo de la tabla, donde viven las filas de datos.TableRow: Una fila de la tabla. Se puede rellenar para marcarla como seleccionada.TableCell: Una celda de una fila.
Otros componentes que se pueden usar dentro de la tabla incluyen:
TableCellLayout: Distribuye una celda en elemento visual, contenido principal y una descripción opcional.TableSelectionCell: Una celda que contiene la casilla o el botón de radio que indica si la fila está seleccionada.TableCellActions: Acciones fijadas al final de una celda, reveladas mientras la fila tiene el puntero encima o el foco dentro.
Uso
Compón las partes igual que escribirías el marcado a mano: una fila de encabezado con celdas de encabezado y después una fila de celdas por elemento.
<script>
import { Table, TableHeader, TableHeaderCell, TableBody, TableRow, TableCell } from 'fluentui-svelte';
const columns = ['File', 'Author', 'Last updated'];
const items = [{ file: 'Meeting notes', author: 'Max Mustermann', lastUpdated: '7h ago' }];
</script>
<Table aria-label="Files">
<TableHeader>
<TableRow>
{#each columns as column (column)}
<TableHeaderCell>{column}</TableHeaderCell>
{/each}
</TableRow>
</TableHeader>
<TableBody>
{#each items as item (item.file)}
<TableRow>
<TableCell>{item.file}</TableCell>
<TableCell>{item.author}</TableCell>
<TableCell>{item.lastUpdated}</TableCell>
</TableRow>
{/each}
</TableBody>
</Table> Tamaño
Usa size para fijar de una vez la altura de fila y la escala tipográfica de cada parte.
Ordenación
sortable en la tabla convierte cada celda de encabezado en un botón, y una celda concreta puede activarlo o desactivarlo con su propio sortable. La tabla nunca ordena los datos: dale a cada encabezado el sortDirection que debe anunciar, maneja onclick y devuelve las filas en el orden que quieras.
Selección múltiple
La celda de selección muestra la selección, no es su dueña. El clic en el indicador también llega a la fila de abajo, así que la fila es el único sitio donde conectar onclick. Márcala con aria-selected, rellénala con appearance="brand" y aliméntale checked desde tu propio estado.
Selección simple
Usa type="radio" en la celda de selección cuando solo se pueda seleccionar una fila a la vez. Dale el mismo name a todos los indicadores para que el navegador los agrupe, y usa invisible en la celda del encabezado para mantener la columna alineada sin ofrecer un "seleccionar todo".
Selección sutil
subtle mantiene el indicador fuera de la vista hasta que la fila tiene el puntero encima, el foco dentro o está seleccionada. Calma una tabla densa sin perder la affordance.
Distribución de la celda
TableCellLayout le da a la celda la disposición estándar de Fluent: elemento visual, contenido principal y una segunda línea debajo. appearance="primary" enfatiza la celda y truncate recorta el contenido con puntos suspensivos.
Acciones de celda
TableCellActions fija contenido al final de una celda y lo revela mientras la fila tiene el puntero encima o el foco dentro. Normalmente es una fila de botones, y visible los mantiene siempre a la vista.
Navegación por teclado
enableTabspot le da a la tabla una sola parada de tabulación y mueve el foco entre celdas con las flechas, con Home, End, PageUp y PageDown para saltar más lejos. También cambia la tabla al patrón role="grid", que es lo que esa navegación exige.
Columnas redimensionables
resizableColumns le da a cada celda de encabezado un tirador que ensancha o estrecha su columna, y fija la maquetación de la tabla para que el ancho se mantenga. columnSizing pone un mínimo por columna, columnWidths es bindable si quieres leer los anchos o restaurarlos después, y el tirador responde a las flechas izquierda y derecha para quien no use puntero.
Sin líneas entre filas
noRowBorders elimina la línea que separa una fila de la siguiente, para una tabla que vive dentro de una tarjeta u otra superficie que ya la enmarca.
Elementos no nativos
noNativeElements renderiza cada parte como un div y distribuye las filas con flexbox, escribiendo los roles ARIA que una tabla nativa aporta de forma implícita. Úsalo cuando la maquetación estricta de tabla estorbe, como ocurre con filas virtualizadas y encabezados fijos.
Virtualización
La tabla renderiza lo que le pongas dentro, así que cualquier librería de virtualización sirve. Combínala con noNativeElements, porque una table semántica la maqueta el navegador de una sola pasada y se pelea con una lista por ventanas. En el DOM solo existe una ventana de filas, así que nada de dentro puede dimensionar las columnas: dale un min-width a la tabla, e informa el tamaño real del conjunto con aria-rowcount y aria-rowindex.
Propiedades del componente (Table)
| Name | Type | Default | Description |
|---|---|---|---|
as | 'table' | 'div' | 'table' | El elemento HTML con el que se renderiza la tabla. Es un div por defecto cuando se establece noNativeElements. |
ref bindable | HTMLTableElement | HTMLDivElement | La referencia DOM del elemento de la tabla. | |
size | 'extra-small' | 'small' | 'medium' | 'medium' | Afecta a los tamaños de todos los subcomponentes de la tabla. |
noNativeElements | boolean | false | Renderiza cada parte de la tabla como un div en lugar de un elemento semántico de tabla. La maquetación pasa de display: table a display: flex, que es lo que necesitan la virtualización y los encabezados fijos. |
sortable | boolean | false | Convierte cada celda de encabezado en un botón de ordenación. Las celdas individuales pueden seguir activándolo por su cuenta. |
noRowBorders | boolean | false | Elimina la línea que separa una fila de la siguiente. |
enableTabspot | boolean | false | Mueve el foco entre celdas con las flechas, a través de una sola parada de tabulación. También cambia la tabla al patrón role="grid", que es lo que esa navegación exige. |
virtualizer | TableVirtualizer | Permite que las flechas alcancen filas que una lista por ventanas todavía no ha renderizado. Solo se lee cuando enableTabspot está activo, y las filas necesitan un aria-rowindex para que pueda volver a encontrarlas. | |
resizableColumns | boolean | false | Le da a cada celda de encabezado un tirador que ensancha o estrecha su columna. También fija la maquetación de la tabla, para que una columna conserve el ancho que se le dio. |
columnWidths bindable | number[] | El ancho de cada columna en píxeles, según la posición de la columna. Las columnas que se omitan conservan su propio tamaño. | |
columnSizing | ColumnSizing[] | Límites por columna, según la posición de la columna. | |
onColumnResize | (e: Event, data: { index: number; width: number }) => void | Se llama cada vez que una columna se arrastra o se ajusta a un ancho nuevo. | |
| HTML Attributes |
Propiedades del componente (TableHeader)
| Name | Type | Default | Description |
|---|---|---|---|
as | 'thead' | 'div' | 'thead' | El elemento HTML con el que se renderiza el encabezado. Se hereda de la tabla por defecto. |
ref bindable | HTMLTableSectionElement | HTMLDivElement | La referencia DOM del elemento del encabezado. | |
| HTML Attributes |
Propiedades del componente (TableHeaderCell)
| Name | Type | Default | Description |
|---|---|---|---|
as | 'th' | 'div' | 'th' | El elemento HTML con el que se renderiza la celda de encabezado. Se hereda de la tabla por defecto. |
ref bindable | HTMLTableCellElement | HTMLDivElement | La referencia DOM del elemento de la celda de encabezado. | |
sortable | boolean | Si la columna es ordenable. Se hereda de la tabla por defecto. | |
sortDirection | 'ascending' | 'descending' | La dirección en la que está ordenada la columna actualmente. También establece aria-sort. | |
sortIcon | Snippet | Component | El indicador que se renderiza junto a la etiqueta de una columna ordenable. | |
aside | Snippet | Component | Contenido colocado después de la etiqueta, fuera del botón de ordenación. | |
focusMode | 'cell' | 'group' | 'none' | 'cell' | Cómo tratan las flechas a la celda. 'group' mantiene el contenido focusable de la celda fuera del orden de tabulación hasta que Enter entra, y Escape vuelve a salir. 'none' omite la celda por completo. Solo se lee cuando la tabla activa enableTabspot. Una celda de encabezado redimensionable usa 'group' por defecto, para que las flechas alcancen su tirador en lugar de abandonar la columna. |
resizable | boolean | Si la columna se puede redimensionar. Se hereda de la tabla por defecto. | |
resizeLabel | string | 'Resize column' | El nombre accesible del tirador de redimensionado. Dale una cadena traducida, e idealmente propia de cada columna: los atributos de la celda llegan a la celda, nunca al tirador que hay dentro. |
| HTML Attributes |
Propiedades del componente (TableBody)
| Name | Type | Default | Description |
|---|---|---|---|
as | 'tbody' | 'div' | 'tbody' | El elemento HTML con el que se renderiza el cuerpo. Se hereda de la tabla por defecto. |
ref bindable | HTMLTableSectionElement | HTMLDivElement | La referencia DOM del elemento del cuerpo. | |
| HTML Attributes |
Propiedades del componente (TableRow)
| Name | Type | Default | Description |
|---|---|---|---|
as | 'tr' | 'div' | 'tr' | El elemento HTML con el que se renderiza la fila. Se hereda de la tabla por defecto. |
ref bindable | HTMLTableRowElement | HTMLDivElement | La referencia DOM del elemento de la fila. | |
appearance | 'none' | 'brand' | 'neutral' | 'none' | Cómo se rellena la fila. Pensado para marcar una fila seleccionada. |
| HTML Attributes |
Propiedades del componente (TableCell)
| Name | Type | Default | Description |
|---|---|---|---|
as | 'td' | 'div' | 'td' | El elemento HTML con el que se renderiza la celda. Se hereda de la tabla por defecto. |
ref bindable | HTMLTableCellElement | HTMLDivElement | La referencia DOM del elemento de la celda. | |
focusMode | 'cell' | 'group' | 'none' | 'cell' | Cómo tratan las flechas a la celda. 'group' mantiene el contenido focusable de la celda fuera del orden de tabulación hasta que Enter entra, y Escape vuelve a salir. 'none' omite la celda por completo. Solo se lee cuando la tabla activa enableTabspot. |
| HTML Attributes |
Propiedades del componente (TableSelectionCell)
| Name | Type | Default | Description |
|---|---|---|---|
as | 'td' | 'div' | 'td' | El elemento HTML con el que se renderiza la celda. Se hereda de la tabla por defecto. |
ref bindable | HTMLTableCellElement | HTMLDivElement | La referencia DOM del elemento de la celda. | |
type | 'checkbox' | 'radio' | 'checkbox' | Una tabla puede tener dos modos de selección. |
checked | boolean | 'mixed' | false | Si la fila está seleccionada. 'mixed' renderiza el estado indeterminado. |
subtle | boolean | false | Solo muestra el indicador cuando está marcado, o cuando la fila tiene el puntero encima o el foco. |
invisible | boolean | false | Oculta el indicador mientras sigue ocupando el mismo espacio. |
checkboxProps | CheckboxProps | Las propiedades que se propagan a la casilla que se renderiza cuando type es 'checkbox'. | |
radioProps | RadioButtonProps | Las propiedades que se propagan al botón de radio que se renderiza cuando type es 'radio'. | |
| HTML Attributes |
Propiedades del componente (TableCellLayout)
| Name | Type | Default | Description |
|---|---|---|---|
ref bindable | HTMLDivElement | null | La referencia DOM del elemento de la distribución. | |
media | Snippet | Component | Un icono, un avatar o cualquier otro elemento visual colocado antes del contenido principal. | |
description | string | Una segunda línea de texto que describe o complementa el contenido principal. | |
appearance | 'primary' | Enfatiza la celda ampliando el elemento visual y poniendo el contenido principal en negrita. | |
truncate | boolean | Recorta el contenido con puntos suspensivos en lugar de dejar que se ajuste en varias líneas. | |
| HTML Attributes |
Propiedades del componente (TableCellActions)
| Name | Type | Default | Description |
|---|---|---|---|
ref bindable | HTMLDivElement | null | La referencia DOM del elemento de las acciones. | |
visible | boolean | Mantiene las acciones a la vista en lugar de esperar a que la fila tenga el puntero encima o el foco. | |
| HTML Attributes |

