Saltar al contenido principal
Neural UIv2.0.0Documentación
Ver v1 GitHub

Table

Muestra registros planos y añade selección, ordenación o edición mientras tu aplicación controla los datos y el estado.

Categoría
Datos y jerarquía
Import
@neural-ui/core/table
Selector
neu-table
import { NeuTableComponent } from '@neural-ui/core/table';

Mostrar datos

Pasa los registros mediante data, describe los campos visibles con columns y aporta una función rowKey estable. La clave identifica un registro entre actualizaciones; no uses su posición actual. Este ejemplo aporta tres pedidos de clientes y la definición de sus columnas.

Usa Table para registros planos. Elige TreeTable si las filas tienen relaciones padre–hijo, o Tree si la jerarquía no necesita columnas.

Mostrar datos
Cliente
Importe (€)
Región
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Configurador

Prueba apariencia, selección, ordenación, búsqueda global, filtros de columna, paginación, edición, detalles de fila y acciones de columna. Cada opción actualiza la vista previa y su código. Despliega los grupos para explorar sus controles. Las opciones que dependen de otra función se habilitan al activarla.

Configurador

Vista previa

6 filas; página 1; 0 seleccionadas; orden: sin ordenar
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Código de tu configuración

Este fragmento se actualiza al cambiar las opciones. La pestaña Código incluye el componente completo, los datos y los templates.

template.html
<neu-table
  [data]="records()"
  [columns]="columns()"
  [rowKey]="rowKey"
  [appearance]='{
    "density": "normal",
    "borders": "rows",
    "striped": false,
    "stickyHeader": false,
    "responsive": "contained-scroll"
  }'
  [selectionOptions]='{
    "mode": "none"
  }'
  [sortOptions]='{
    "mode": "single",
    "removable": true,
    "defaultDirection": "asc",
    "resetPageOnChange": true
  }'
  [filterOptions]='{
    "surfaces": [],
    "globalFields": [],
    "predicates": {},
    "debounceMs": 0,
    "commit": "immediate"
  }'
  [paginationOptions]='{
    "enabled": true,
    "pageSizeOptions": [
      3,
      6,
      10
    ],
    "position": "bottom",
    "report": "range",
    "showPageJump": false
  }'
  [columnOptions]='{
    "reorderable": false,
    "resizable": false,
    "hideable": false,
    "pinnable": false
  }'
  [editingOptions]='{
    "mode": "none",
    "activation": "click",
    "commitOnBlur": false
  }'
  [expansionOptions]='{
    "enabled": false,
    "toggleOnRowClick": false
  }'
  [interactionOptions]='{
    "navigation": "native",
    "wrapFocus": false,
    "announceChanges": true
  }'
  [query]="query()"
  (queryChange)="query.set($event)"
  [selection]="selection()"
  (selectionChange)="selection.set($event.next)"
  [layout]="layout()"
  (layoutChange)="layout.set($event.next)"
  [editState]="editState()"
  (editStateChange)="editState.set($event.next)"
  (editCommit)="save($event)"
  [expandedKeys]="expanded()"
  (expandedKeysChange)="expanded.set($event.next)"
>
  <!-- Incluye los templates de editor y detalle del ejemplo completo. -->
</neu-table>

Ejemplos por función

Explora una función cada vez. Cada ejemplo tiene su propio estado y código completo. La función seleccionada queda en la URL para compartirla o volver a ella directamente.

Selección

Activa la selección con selectionOptions y aporta las claves seleccionadas mediante selection. selectionChange propone next; al aplicarlo se actualizan las casillas. El componente no sustituye tu input.

Este ejemplo selecciona solo registros cargados. Usa la selección all-matching únicamente cuando tu aplicación pueda conservar el ámbito de consulta y las claves excluidas entre páginas del servidor.

Selección
Cliente
Importe (€)
Región
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Identificadores seleccionados: —

Accesibilidad y teclado

Core aporta la estructura de tabla y los controles de las funciones activadas. Tu aplicación aporta cabeceras comprensibles, contenido útil y nombres para los controles de las plantillas. Mantén accesible por teclado el contenido interactivo y no comuniques selección o errores solo mediante color.

Usa focusCell cuando la navegación de tu aplicación necesite una celda renderizada concreta; comprueba su resultado booleano. scrollTo puede llevar una fila al área visible. Prueba los editores personalizados, detalles de fila y mensajes de carga dentro del recorrido de teclado de tu aplicación.

Tecla
Acción
Tab / Shift+Tab Recorre los controles habilitados y el contenido interactivo de las plantillas.
Enter / Space Activa el control nativo enfocado, por ejemplo de ordenación o expansión.
Enter / Escape En el editor del ejemplo, confirma o cancela el borrador.

API

Los inputs configuran la tabla y aportan el estado de la aplicación. Los outputs de cambio proponen actualizaciones; no son modelos bidireccionales. Despliega las interfaces referenciadas para consultar sus opciones y datos de eventos. Los métodos públicos actúan sobre la instancia actual; no sustituyen los datos ni realizan peticiones de red.

Inputs

Configura el componente con [propiedad]="valor". Tu aplicación proporciona estos valores; el componente no debe reemplazar el estado que le pasas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
appearanceNeuTableAppearance{ density: 'normal', borders: 'rows', striped: false, stickyHeader: false, responsive: 'contained-scroll', }[appearance]Densidad, bordes, filas alternas, cabecera fija y disposición responsive desplazable o apilada.
columnOptionsNeuTableColumnOptions{}[columnOptions]Activa el redimensionado, reordenado, ocultación o fijación de columnas. Todos los controles están desactivados inicialmente. Aplica layoutChange.next a layout para aceptar los cambios.
columnsreadonly NeuTableColumn<T, F>[][][columns]Identificadores, cabeceras, campos y descriptores opcionales de ordenación, filtrado o edición de columnas.
datareadonly T[][][data]Registros que se mostrarán. En modo remoto aporta las filas de la respuesta, no un conjunto que se suponga completo.
dataModeNeuTableDataMode'client'[dataMode]client procesa los registros cargados; remote delega su carga en la aplicación.
editingOptionsNeuTableEditingOptions<T, K, F>{ mode: 'none' }[editingOptions]Modo de edición, gesto de activación, validación opcional y confirmación al perder el foco.
editStateNeuTableEditState<K>{ kind: 'none', }[editState]Sesión aplicada de edición de celda o fila, o kind none.
expandedKeysreadonly K[][][expandedKeys]Claves aplicadas cuyas regiones de detalle están abiertas.
expansionOptionsNeuTableExpansionOptions<T>{ enabled: false, toggleOnRowClick: false, }[expansionOptions]Activa los detalles, limita las filas expandibles y permite alternarlos al pulsar la fila.
filterOptionsNeuTableFilterOptions<T, F>{ surfaces: [], globalFields: [], predicates: {}, debounceMs: 0, commit: 'immediate', }[filterOptions]Superficies de filtro, campos globales, predicados personalizados, retardo y estrategia de aplicación.
groupingNeuTableGroupingState<F> | nullnull[grouping]Campos de agrupación e identificadores de grupos abiertos aplicados; null desactiva la agrupación.
groupingOptionsNeuTableGroupingOptions<T, F>{ mode: 'subheader', scope: 'loaded', }[groupingOptions]Modo de presentación de grupos cargados y funciones opcionales de valor y agregado.
interactionOptionsNeuTableInteractionOptions{ navigation: 'native', wrapFocus: false, announceChanges: false, }[interactionOptions]Navegación de teclado nativa, por filas o celdas, retorno circular del foco y anuncios de cambios.
labelsNeuTableLabels{ ariaLabel: 'Data table', empty: 'No data', loading: 'Loading', error: 'Unable to load data', retry: 'Retry', selection: 'Selection', pagination: 'Pagination', }[labels]Mensajes localizados de controles y estados de la tabla.
layoutNeuTableLayoutState{ order: [], hidden: [], widths: {}, pinnedStart: [], pinnedEnd: [], }[layout]Orden, visibilidad, anchos y fijación inicial/final de columnas aplicados.
metadataNeuTableMetadata{ totalItems: null, loading: false, error: null, queryRevision: 0, appliedRequestId: null, }[metadata]Total remoto, estado de carga/error e identidad de la respuesta (queryRevision y appliedRequestId).
paginationOptionsNeuTablePaginationOptions{ enabled: false, pageSizeOptions: [], position: 'bottom', report: 'none', showPageJump: false, }[paginationOptions]Activa y coloca la paginación, elige tamaños de página y el resumen visible.
queryNeuTableQuery<F>{ page: 0, pageSize: 25, search: '', sort: [], filters: null, }[query]Página, tamaño, búsqueda, ordenación y expresión de filtro aplicados. Aplica queryChange para aceptar cambios.
rowKeyNeuRowKey<T, K>Obligatorio[rowKey]Función obligatoria que devuelve una clave única y estable para cada registro.
rowOptionsNeuTableRowOptions<T, K>{ reorderable: false, }[rowOptions]Estado deshabilitado, clases, fijación y disponibilidad de reordenación de filas.
rowTrackByNeuRowTrackBy<T> | undefinedSin valor por defecto[rowTrackBy]Función opcional de identidad de filas para Angular; no sustituye a rowKey como identidad del estado.
selectionNeuTableSelection<K, F>{ kind: 'keys', keys: [], }[selection]Claves seleccionadas aplicadas o ámbito all-matching con exclusiones.
selectionOptionsNeuTableSelectionOptions<T>{ mode: 'none' }[selectionOptions]Modo e indicadores de selección, comportamiento al pulsar filas, modificadores, intervalos y ámbito de seleccionar todo.
sortOptionsNeuTableSortOptions{ mode: 'single', removable: true, defaultDirection: 'asc', resetPageOnChange: true, }[sortOptions]Ordenación simple o múltiple, dirección inicial, eliminación y reinicio de página.
virtualizationOptionsNeuTableVirtualizationOptions{ enabled: false }[virtualizationOptions]Activa filas virtuales de altura fija con itemSize y overscan; las solicitudes remotas pueden usar requestStep.

Outputs

Escucha un evento con (evento)="handler($event)". La tabla indica qué datos recibe tu función y cómo utilizarlos.

Nombre
Valor emitido
Uso en el template
Descripción
dataRequestNeuTableDataRequest<F>(dataRequest)="onDataRequest($event)"Solicita una carga a la aplicación con consulta, revisiones, identificador e intervalo opcional.
editCancelNeuTableEditCancel<T, K>(editCancel)="onEditCancel($event)"Informa de la cancelación de una edición; no guardes su borrador.
editCommitNeuTableEditCommit<T, K, F>(editCommit)="onEditCommit($event)"Se emite al guardar una edición. Contiene key (fila) y changes (campo y nuevo valor). Valida los cambios y aplícalos a data en tu función; Table no modifica ni guarda tus registros.
editStateChangeNeuTableEditChange<K>(editStateChange)="onEditStateChange($event)"Emite next al iniciar o terminar una edición. Actualiza editState con $event.next para abrir o cerrar el editor.
expandedKeysChangeNeuTableExpandedKeysChange<K>(expandedKeysChange)="onExpandedKeysChange($event)"Emite next con las claves de los detalles abiertos y la fila modificada. Actualiza expandedKeys con $event.next.
exportRequestNeuTableExportRequest<F>(exportRequest)="onExportRequest($event)"Solicita una exportación a la aplicación cuando no se puede generar con los datos disponibles.
featureErrorNeuTableFeatureError(featureError)="onFeatureError($event)"Informa de la función que ha fallado, su causa y si es posible recuperarse.
groupingChangeNeuTableGroupingChange<F>(groupingChange)="onGroupingChange($event)"Emite next al abrir o cerrar un grupo. Actualiza grouping con $event.next para conservar su estado.
layoutChangeNeuTableLayoutChange(layoutChange)="onLayoutChange($event)"Emite next con el orden, anchos, visibilidad y fijación de columnas. Actualiza layout con $event.next.
queryChangeNeuTableQuery<F>(queryChange)="onQueryChange($event)"Emite la consulta completa al cambiar página, búsqueda, ordenación o filtros. Actualiza query con $event: query.set($event).
rangeChangeNeuTableRangeChange(rangeChange)="onRangeChange($event)"Informa de los intervalos virtuales visibles/renderizados y la causa del cambio.
rowActionNeuTableRowAction<T, K>(rowAction)="onRowAction($event)"Informa de la activación de una acción de fila con su registro y clave.
rowReorderNeuTableRowMove<K>(rowReorder)="onRowReorder($event)"Propone mover una fila. Tu aplicación cambia el orden de los registros tras aceptarlo.
selectionChangeNeuTableSelectionChange<T, K, F>(selectionChange)="onSelectionChange($event)"Emite next con la nueva selección, las claves añadidas o eliminadas y el origen. Actualiza selection con $event.next: selection.set($event.next).

Templates

ng-content proyecta contenido dentro del componente. Los inputs TemplateRef reciben un template; las directivas ng-template identifican templates con un contexto tipado. Una directiva compartida en el entrypoint no es necesariamente un slot de este componente.

Nombre
Mecanismo
Contrato
NeuTableCaptionDirective

Encima de la tabla

Ver ejemplo
Directiva pública de template

Un título identifica los datos.

ng-template[neuTableCaption]

Contexto utilizado: —

NeuTableCellDirective

Celda de datos

Ver ejemplo
Directiva pública de template

Los clientes o las horas planificadas usan tu presentación.

ng-template[neuTableCell]

Contexto utilizado: $implicit

NeuTableEditorDirective

Editor personalizado de celda

Ver ejemplo
Directiva pública de template

Pulsa el lápiz de la fila, edita el cliente y guarda o cancela desde sus acciones.

ng-template[neuTableEditor]

Contexto utilizado: valueSignal, setValue, commit, cancel, errors

NeuTableEmptyDirective

Área sin datos

Ver ejemplo
Directiva pública de template

Elige Vacío en el ejemplo para ver el mensaje.

ng-template[neuTableEmpty]

Contexto utilizado: —

NeuTableErrorDirective

Área de error

Ver ejemplo
Directiva pública de template

Elige Error y pulsa Reintentar para volver a solicitar los datos.

ng-template[neuTableError]

Contexto utilizado: retry

NeuTableFilterDirective

Filtro de columna en una fila o menú

Ver ejemplo
Directiva pública de template

Escribe un cliente para filtrar las filas. Limpiar las recupera; apply y clear proponen queryChange, que la aplicación acepta.

ng-template[neuTableFilter]

Contexto utilizado: column, sort, value, rule, apply(value, rule?), clear()

NeuTableFooterDirective

Pie de columna

Ver ejemplo
Directiva pública de template

Una etiqueta aparece bajo los datos de la columna indicada.

ng-template[neuTableFooter]

Contexto utilizado: —

NeuTableGroupFooterDirective

Después de cada grupo

Ver ejemplo
Directiva pública de template

El pie de grupo cuenta sus registros.

ng-template[neuTableGroupFooter]

Contexto utilizado: rows

NeuTableGroupHeaderDirective

Antes de cada grupo

Ver ejemplo
Directiva pública de template

Activa la agrupación para ver la región y el número de pedidos.

ng-template[neuTableGroupHeader]

Contexto utilizado: value, rows

NeuTableHeaderDirective

Cabecera de columna

Ver ejemplo
Directiva pública de template

La cabecera usa el nombre de la columna con contenido personalizado.

ng-template[neuTableHeader]

Contexto utilizado: column

NeuTableLoadingDirective

Área de carga

Ver ejemplo
Directiva pública de template

Elige Carga para mostrar un mensaje de estado.

ng-template[neuTableLoading]

Contexto utilizado: —

NeuTablePaginatorDirective

Paginador superior/inferior activo

Ver ejemplo
Directiva pública de template

Anterior y Siguiente usan la página aplicada y el total filtrado. page empieza en cero; total y pageCount pueden ser null en modo remoto. Las acciones proponen queryChange sin modificar el estado de la aplicación.

ng-template[neuTablePaginator]

Contexto utilizado: page, pageSize, humanPage, pageCount, total, rangeStart, rangeEnd, canFirst, canPrevious, canNext, canLast, pageSizeOptions, changePage(page), changePageSize(size)

NeuTableRowDetailDirective

Bajo una fila expandida

Ver ejemplo
Directiva pública de template

Expande una fila para ver el detalle del pedido.

ng-template[neuTableRowDetail]

Contexto utilizado: $implicit

NeuTableSummaryDirective

Debajo de la tabla

Ver ejemplo
Directiva pública de template

Un total calculado por la aplicación acompaña a la tabla.

ng-template[neuTableSummary]

Contexto utilizado: —

NeuTableToolbarDirective

Antes de las filas

Ver ejemplo
Directiva pública de template

Las instrucciones o acciones de la aplicación acompañan a los datos.

ng-template[neuTableToolbar]

Contexto utilizado: —

Cada ejemplo muestra un template diferente. Alterna entre Demo y Código para consultar su implementación, imports y estado.

Título de la tabla

NeuTableCaptionDirective

Título de la tabla
Pedidos de clientes
Cliente
Importe (€)
Región
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Acciones de la tabla

NeuTableToolbarDirective

Acciones de la tabla
Gestionar pedidos
Cliente
Importe (€)
Región
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Resumen de resultados

NeuTableSummaryDirective

Resumen de resultados
Cliente
Importe (€)
Región
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Pedidos mostrados: 3 · Importe total: 840 €

Cabecera de columna

NeuTableHeaderDirective

Cabecera de columna
Cliente Cuenta comercial
Importe (€)
Región
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Contenido de celda

NeuTableCellDirective

Contenido de celda
Cliente
Importe (€)
Región
AtlasPedido #101 240 EU
BirchPedido #102 180 US
CedarPedido #103 420 EU

Filtro personalizado

NeuTableFilterDirective

Filtro personalizado
Cliente
Importe (€)
Región
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Editor personalizado

NeuTableEditorDirective

Editor personalizado

Pulsa el lápiz de una fila para editar su cliente. Guarda los cambios o cancela desde las acciones de esa fila.

Cliente
Importe (€)
Región
Editar
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Detalle de fila

NeuTableRowDetailDirective

Detalle de fila
Detalle
Cliente
Importe (€)
Región
Atlas 240 EU
Detalle del pedido #101
Importe (€)
Región
240 EU
Birch 180 US
Cedar 420 EU

Cabecera de grupo

NeuTableGroupHeaderDirective

Cabecera de grupo

Despliega una región para ver sus pedidos.

Cliente
Importe (€)
Región

Estado vacío

NeuTableEmptyDirective

Estado vacío
Cliente
Importe (€)
Región
Todavía no hay pedidos

Los nuevos pedidos aparecerán aquí.

Estado de carga

NeuTableLoadingDirective

Estado de carga
Cliente
Importe (€)
Región
Cargando pedidos…

Estamos recuperando los resultados.

Estado de error y reintento

NeuTableErrorDirective

Estado de error y reintento
Cliente
Importe (€)
Región

Paginación personalizada

NeuTablePaginatorDirective

Paginación personalizada
Cliente
Importe (€)
Región
Atlas 240 EU
Birch 180 US
Cedar 420 EU

Métodos públicos

Nombre
Contrato
exportexport(request: NeuTableExportRequest<F>): Promise<NeuTableExportOutcome>;

Crea una exportación del ámbito solicitado. Comprueba el resultado; una exportación delegada requiere la intervención de la aplicación. El ejemplo Exportar muestra la llamada y el resultado completos.

example.ts
await table()?.export({ format: 'csv', scope: 'view' });
focusCellfocusCell(target: { readonly key: K; readonly columnId: string; }): boolean;

Mueve el foco a una celda renderizada mediante la clave estable de fila y el identificador de columna. El booleano indica si se ha podido enfocar.

example.ts
table()?.focusCell({ key: 101, columnId: 'customer' });
retryDataretryData(): void;

Solicita otro intento para la consulta remota actual. Gestiona dataRequest en la aplicación; este método no carga datos por sí mismo.

example.ts
table()?.retryData();
scrollToscrollTo(target: { readonly index?: number; readonly key?: K; }): Promise<void>;

Desplaza la tabla hasta una fila por índice o clave. Espera a que termine si otra acción depende de que la fila sea visible.

example.ts
await table()?.scrollTo({ key: 101 });

Public Types

Abre un tipo para consultar su definición y los campos de sus interfaces.

Apariencia y tokens

Usa appearance para elegir densidad, bordes, filas alternas, cabecera fija y presentación responsive. El configurador anterior muestra estas opciones por separado de las acciones de columna y la navegación por teclado. Los tokens CSS públicos permiten personalizar superficies, texto, espaciado y foco dentro de un ámbito.

Tokens específicos

Token
Efecto
Estado / variante
Valor / origen
Alternativa
--neu-table-cell-block Relleno vertical de las celdas con densidad normal. density="normal" 0.625remDeclaración raízSin alias de token
--neu-table-cell-block-compact Relleno vertical de las celdas con densidad compacta. density="compact" 0.375remDeclaración raízSin alias de token
--neu-table-cell-block-relaxed Relleno vertical de las celdas con densidad amplia. density="relaxed" 0.875remDeclaración raízSin alias de token
--neu-table-cell-inline Relleno horizontal de las celdas. Celdas de tabla var(--neu-space-3)Declaración raíz--neu-space-3
--neu-table-group-background Fondo de las filas de encabezado de grupo. Cabecera de grupo color-mix(in srgb, currentColor 4%, transparent)Declaración raízSin alias de token
--neu-table-header-height Altura de las celdas de cabecera; el contenido multilínea puede necesitar más espacio. Cabecera de columna 44pxDeclaración raízSin alias de token
--neu-table-max-height Altura máxima del área sin virtualización; los datos que la superan se desplazan dentro. Área sin virtualización 480pxDeclaración raízSin alias de token
--neu-table-selected-background Fondo de las filas seleccionadas, con prioridad sobre las bandas alternas. Fila seleccionada color-mix(in srgb, currentColor 9%, transparent)Declaración raízSin alias de token
--neu-table-space-sm Separación en controles y grupos de acciones de la tabla. Controles y acciones var(--neu-space-2)Declaración raíz--neu-space-2
--neu-table-space-xs Separación pequeña entre controles contiguos de la tabla. Controles y acciones var(--neu-space-1)Declaración raíz--neu-space-1
--neu-table-state-block Relleno vertical del contenido de carga, vacío y error. Vacío / carga / error var(--neu-space-6)Declaración raíz--neu-space-6
--neu-table-sticky-offset Desplazamiento superior de la cabecera con stickyHeader activado. stickyHeader 0pxDeclaración raízSin alias de token
--neu-table-stripe-background Fondo de las filas alternas cuando striped está activado. striped color-mix(in srgb, currentColor 4%, transparent)Declaración raízSin alias de token
--neu-table-virtual-block-size Altura del área de desplazamiento virtualizado. Virtualización 24remDeclaración raízSin alias de token

Tokens compartidos utilizados

Sobrescríbelos en un contenedor local para afectar a este ejemplo. Una modificación en :root afecta a los demás componentes que utilizan el mismo token.

Token
Efecto aquí
Otros efectos
Valor / alternativa
--neu-border Bordes normales de controles y celdas Compartido con otros consumidores de Core; limita el cambio a un ámbito. rgba(15, 23, 42, 0.08)
--neu-border-hover Bordes de controles al pasar el puntero Compartido con otros consumidores de Core; limita el cambio a un ámbito. rgba(15, 23, 42, 0.16)
--neu-focus-color Contorno visible del foco de teclado Compartido con otros consumidores de Core; limita el cambio a un ámbito. var(--neu-primary)
--neu-primary Color de marca en controles activos y énfasis Compartido con otros consumidores de Core; limita el cambio a un ámbito. #007aff
--neu-primary-soft Superficie tenue de selección o estado activo Compartido con otros consumidores de Core; limita el cambio a un ámbito. var(--neu-primary-50)
--neu-surface Superficie principal del campo, cabecera o control Compartido con otros consumidores de Core; limita el cambio a un ámbito. #ffffff
--neu-surface-2 Superficies secundarias y filas alternas Compartido con otros consumidores de Core; limita el cambio a un ámbito. #f1f5f9
--neu-text Color del texto principal y de los iconos que lo heredan Compartido con otros consumidores de Core; limita el cambio a un ámbito. #0f172a