enes

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.

File Author Last updated
Meeting notes
Max Mustermann 7h ago
Thursday presentation
Erika Mustermann Yesterday at 1:45 PM
File Author Last updated
Meeting notes
Max Mustermann 7h ago
Thursday presentation
Erika Mustermann Yesterday at 1:45 PM
File Author Last updated
Meeting notes
Max Mustermann 7h ago
Thursday presentation
Erika Mustermann Yesterday at 1:45 PM

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.

Last updated
Meeting notes
Max Mustermann 7h ago
Purchase order
Jane Doe Tue at 9:30 AM
Thursday presentation
Erika Mustermann Yesterday at 1:45 PM
Training recording
John Doe Yesterday at 1:45 PM

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.

File Author
Meeting notes
Max Mustermann
Thursday presentation
Erika Mustermann
Training recording
John Doe
Purchase order
Jane Doe

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".

File Author
Meeting notes
Max Mustermann
Thursday presentation
Erika Mustermann
Training recording
John Doe
Purchase order
Jane Doe

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.

File Author
Meeting notes
Max Mustermann
Thursday presentation
Erika Mustermann
Training recording
John Doe
Purchase order
Jane Doe

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.

File Author
Meeting notes 7h ago
Max Mustermann
Thursday presentation Yesterday at 1:45 PM
Erika Mustermann
Training recording Yesterday at 1:45 PM
John Doe
Purchase order Tue at 9:30 AM
Jane Doe

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.

File Author
Meeting notes
Max Mustermann
Thursday presentation
Erika Mustermann
Training recording
John Doe
Purchase order
Jane Doe

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.

File Author Actions
Meeting notes
Max Mustermann
Thursday presentation
Erika Mustermann
Training recording
John Doe
Purchase order
Jane Doe

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.

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

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.

File Author
Meeting notes
Max Mustermann
Thursday presentation
Erika Mustermann
Training recording
John Doe
Purchase order
Jane Doe

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.

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

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`.

File
Author
Last updated
Document 1
Max Mustermann
7h ago
Document 2
Erika Mustermann
Yesterday at 1:45 PM
Document 3
John Doe
Yesterday at 1:45 PM
Document 4
Jane Doe
Tue at 9:30 AM
Document 5
Max Mustermann
7h ago
Document 6
Erika Mustermann
Yesterday at 1:45 PM
Document 7
John Doe
Yesterday at 1:45 PM
Document 8
Jane Doe
Tue at 9:30 AM
Document 9
Max Mustermann
7h ago
Document 10
Erika Mustermann
Yesterday at 1:45 PM
Document 11
John Doe
Yesterday at 1:45 PM
Document 12
Jane Doe
Tue at 9:30 AM
Document 13
Max Mustermann
7h ago
Document 14
Erika Mustermann
Yesterday at 1:45 PM
Document 15
John Doe
Yesterday at 1:45 PM
Document 16
Jane Doe
Tue at 9:30 AM
Document 17
Max Mustermann
7h ago
Document 18
Erika Mustermann
Yesterday at 1:45 PM
Document 19
John Doe
Yesterday at 1:45 PM
Document 20
Jane Doe
Tue at 9:30 AM
Document 21
Max Mustermann
7h ago

Propiedades del componente (Table)

NameTypeDefaultDescription
as'table' | 'div''table'El elemento HTML con el que se renderiza la tabla. Es un `div` por defecto cuando se establece `noNativeElements`.
ref bindableHTMLTableElement | HTMLDivElementLa 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.
noNativeElementsbooleanfalseRenderiza 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.
sortablebooleanfalseConvierte cada celda de encabezado en un botón de ordenación. Las celdas individuales pueden seguir activándolo por su cuenta.
noRowBordersbooleanfalseElimina la línea que separa una fila de la siguiente.
enableTabspotbooleanfalseMueve 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.
virtualizerTableVirtualizerPermite 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.
resizableColumnsbooleanfalseLe 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 bindablenumber[]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.
columnSizingColumnSizing[]Límites por columna, según la posición de la columna.
onColumnResize(e: Event, data: { index: number; width: number }) => voidSe llama cada vez que una columna se arrastra o se ajusta a un ancho nuevo.
HTML Attributes

Propiedades del componente (TableHeader)

NameTypeDefaultDescription
as'thead' | 'div''thead'El elemento HTML con el que se renderiza el encabezado. Se hereda de la tabla por defecto.
ref bindableHTMLTableSectionElement | HTMLDivElementLa referencia DOM del elemento del encabezado.
HTML Attributes

Propiedades del componente (TableHeaderCell)

NameTypeDefaultDescription
as'th' | 'div''th'El elemento HTML con el que se renderiza la celda de encabezado. Se hereda de la tabla por defecto.
ref bindableHTMLTableCellElement | HTMLDivElementLa referencia DOM del elemento de la celda de encabezado.
sortablebooleanSi 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`.
sortIconSnippet | ComponentEl indicador que se renderiza junto a la etiqueta de una columna ordenable.
asideSnippet | ComponentContenido 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.
resizablebooleanSi la columna se puede redimensionar. Se hereda de la tabla por defecto.
resizeLabelstring'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)

NameTypeDefaultDescription
as'tbody' | 'div''tbody'El elemento HTML con el que se renderiza el cuerpo. Se hereda de la tabla por defecto.
ref bindableHTMLTableSectionElement | HTMLDivElementLa referencia DOM del elemento del cuerpo.
HTML Attributes

Propiedades del componente (TableRow)

NameTypeDefaultDescription
as'tr' | 'div''tr'El elemento HTML con el que se renderiza la fila. Se hereda de la tabla por defecto.
ref bindableHTMLTableRowElement | HTMLDivElementLa 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)

NameTypeDefaultDescription
as'td' | 'div''td'El elemento HTML con el que se renderiza la celda. Se hereda de la tabla por defecto.
ref bindableHTMLTableCellElement | HTMLDivElementLa 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)

NameTypeDefaultDescription
as'td' | 'div''td'El elemento HTML con el que se renderiza la celda. Se hereda de la tabla por defecto.
ref bindableHTMLTableCellElement | HTMLDivElementLa referencia DOM del elemento de la celda.
type'checkbox' | 'radio''checkbox'Una tabla puede tener dos modos de selección.
checkedboolean | 'mixed'falseSi la fila está seleccionada. `'mixed'` renderiza el estado indeterminado.
subtlebooleanfalseSolo muestra el indicador cuando está marcado, o cuando la fila tiene el puntero encima o el foco.
invisiblebooleanfalseOculta el indicador mientras sigue ocupando el mismo espacio.
checkboxIndicatorCheckboxPropsLas propiedades que se propagan a la casilla que se renderiza cuando `type` es `'checkbox'`.
radioIndicatorRadioButtonPropsLas propiedades que se propagan al botón de radio que se renderiza cuando `type` es `'radio'`.
HTML Attributes

Propiedades del componente (TableCellLayout)

NameTypeDefaultDescription
ref bindableHTMLDivElementLa referencia DOM del elemento de la distribución.
mediaSnippet | ComponentUn icono, un avatar o cualquier otro elemento visual colocado antes del contenido principal.
descriptionstringUna 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.
truncatebooleanRecorta el contenido con puntos suspensivos en lugar de dejar que se ajuste en varias líneas.
HTML Attributes

Propiedades del componente (TableCellActions)

NameTypeDefaultDescription
ref bindableHTMLDivElementLa referencia DOM del elemento de las acciones.
visiblebooleanMantiene las acciones a la vista en lugar de esperar a que la fila tenga el puntero encima o el foco.
HTML Attributes