DataTable
Una grilla de datos interactiva que se distribuye como módulo opcional. Ordenamiento, filtrado multi-tipo, paginación, selección de filas, gestión de columnas y un renderizador totalmente personalizable sin dependencias de frameworks — configurado con definiciones de columnas simples.
Instalación
DataTable es un módulo independiente — no lleva dependencias de gráficos y puede usarse por sí solo. Importa la clase y apunta a un elemento contenedor y a una matriz de datos.
import { DataTable } from 'katucharts.js/datatable';
const table = new DataTable('#grid', { data: rows });Inicio rápido
Pasa tus filas como datos y describe cada columna. Sin columnas suministradas, la cuadrícula las deduce de la primera fila.
const rows = [
{ id: 'm5gr84i9', amount: 316, status: 'success', email: '[email protected]' },
{ id: '3u1reuv4', amount: 242, status: 'success', email: '[email protected]' },
{ id: 'derv1ws0', amount: 837, status: 'processing', email: '[email protected]' },
];
new DataTable('#grid', {
data: rows,
columns: [
{ accessorKey: 'status', header: 'Status' },
{ accessorKey: 'email', header: 'Email' },
{ accessorKey: 'amount', header: 'Amount', type: 'number' },
],
pagination: { pageSize: 10 },
filtering: { enabled: true },
});Columnas
Cada columna es un objeto. Use accessorKey, header, cell, enableSorting y propiedades relacionadas — o los nombres propios de KatuCharts field, title y formatter, que se aceptan como equivalentes.
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
accessorKey | string | — | Clave en cada objeto de fila para el valor de esta columna. Alias de field. |
accessorFn | (row) => any | — | Deriva el valor de toda la fila en lugar de una clave plana, p. ej. row => row.first + ' ' + row.last. |
id | string | accessorKey | Id de columna explícito. Requerido para columnas sin accessorKey (columnas de acción o casilla); de lo contrario, toma el valor por defecto del accessorKey. |
header | string | (ctx) => Node | — | Contenido del encabezado. Una cadena para una etiqueta simple, o una función que recibe la columna y la tabla y retorna marcado o un nodo DOM. |
cell | (ctx) => string | Node | — | Renderizador de celda personalizado que recibe row, column, getValue y table. Retorna una cadena HTML o un nodo DOM. Alias de formatter. |
type | string | 'string' | Tipo de valor — string, number, date, boolean o html. Define la alineación predeterminada, el formato y el tipo de filtro deducido. |
enableSorting | boolean | true | Si la columna se puede ordenar. Alias de sortable. Establece false en columnas de acción / casilla. |
enableHiding | boolean | true | Si la columna aparece en el menú de visibilidad de columnas y se puede alternar. |
enableColumnFilter | boolean | true | Si la columna muestra un control de filtro. Alias de filterable. |
filterType | string | — | UI de filtro para la columna — ver Filtrado. Se deduce del type cuando se omite. |
filterFn | (row, id, val) => boolean | — | Predicado personalizado (row, columnId, filterValue) => boolean que anula la lógica de filtro incorporada. |
size / minSize / maxSize | number | — | Ancho de columna en píxeles (alias width). minSize / maxSize limitan el cambio de tamaño. |
pinned | 'left' | 'right' | — | Fija la columna al borde 'left' o 'right' para que permanezca visible mientras se desplaza. |
align | string | — | Alineación de texto — left, center o right. Toma valores predeterminados del tipo de columna. |
meta | object | — | Datos arbitrarios que puedes leer dentro de callbacks header / cell. |
Renderizado de celda y encabezado
Muestra lo que quieras en una celda o encabezado. La función cell de una columna renderiza su contenido — devuelve texto, una cadena HTML o un nodo DOM — y una función header construye markup de encabezado personalizado, como un botón ordenable.
const usd = (n) => new Intl.NumberFormat('en-US',
{ style: 'currency', currency: 'USD' }).format(n);
columns: [
// function header with a sort button
{
accessorKey: 'email',
header: ({ column }) => {
const b = document.createElement('button');
b.textContent = 'Email';
b.onclick = () => column.toggleSorting();
return b;
},
},
// cell returning markup
{
accessorKey: 'amount',
header: () => '<div style="text-align:right">Amount</div>',
cell: ({ row }) =>
`<div style="text-align:right">${usd(row.getValue('amount'))}</div>`,
},
// an action / checkbox column has no accessorKey — give it an id
{ id: 'actions', cell: ({ row }) => renderMenu(row.original) },
]Cada callback recibe valores de row, column y table que puedes usar para leer datos e impulsar la cuadrícula:
| Auxiliar | Descripción |
|---|---|
row.getValue('field') | Lee el valor de una columna en la fila actual. |
row.original | El objeto row completo y original. |
row.toggleSelected() | Selecciona o deselecciona la fila. |
column.toggleSorting() | Ordena la cuadrícula por esta columna. |
column.setFilterValue(value) | Filtra esta columna por un valor. |
table.nextPage() | Ve a la página siguiente (también previousPage()). |
table.toggleAllPageRowsSelected() | Selecciona todas las filas en la página actual. |
Ordenamiento
El ordenamiento está activado por defecto; haz clic en un encabezado para ciclar ascendente → descendente → sin ordenar. Desactívalo globalmente, habilita ordenamiento de múltiples columnas o establece un ordenamiento inicial.
new DataTable('#grid', {
data: rows,
sorting: {
enabled: true,
multiSort: true,
defaultSort: [{ column: 'amount', direction: 'desc' }],
},
});
// or set an initial state
new DataTable('#grid', {
data: rows,
initialState: { sorting: [{ id: 'amount', desc: true }] },
});Filtrado
La cuadrícula ofrece un cuadro de búsqueda global más una fila de filtro por columna. Ambos se pueden activar o desactivar independientemente, y cada columna selecciona (o deduce) uno de varios tipos de filtro.
Desactiva toda la fila de filtro con filtering.enabled = false, u oculta el filtro de una única columna con filterable: false (enableColumnFilter: false). Un botón Restablecer filtros aparece automáticamente mientras cualquier filtro esté activo.
| Nombre | Descripción |
|---|---|
text | Coincidencia de subcadena (sin distinción de mayúsculas y minúsculas por defecto). |
number | Valor exacto, o un rango mín / máx. |
numberrange | Dos entradas que delimitan un rango numérico. |
select | Dropdown de opción única con los valores distintos de la columna. |
multiselect | Dropdown multi-select — las filas que coinciden con cualquier valor seleccionado pasan. |
faceted | Popover de selección múltiple facetada con una insignia de conteo. |
boolean | Dropdown Verdadero / Falso / Todos. |
date | Coincidencia de una sola fecha. |
daterange | Límites de fecha De / hasta. |
Habilita el cuadro de búsqueda global en la barra de herramientas; coincide en todas las columnas visibles (o un subconjunto elegido).
new DataTable('#grid', {
data: rows,
search: { enabled: true, placeholder: 'Search…' },
filtering: { enabled: true }, // per-column filter row
columns: [
{ accessorKey: 'email', header: 'Email' }, // text filter
{ accessorKey: 'status', header: 'Status', filterType: 'faceted' },
{ accessorKey: 'amount', header: 'Amount', type: 'number',
filterType: 'numberrange' },
{ accessorKey: 'id', header: 'ID', filterable: false }, // no filter
],
});Paginación
La paginación está activada por defecto. Configura el tamaño de página, los tamaños ofrecidos y qué controles se renderizan.
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
enabled | boolean | true | Activa o desactiva la paginación. Cuando está desactivada, todas las filas se renderizan (con desplazamiento virtual por encima del umbral). |
pageSize | number | 25 | Filas por página. |
pageSizes | number[] | [10,25,50,100] | Tamaños ofrecidos en el dropdown de filas por página. |
position | 'top' | 'bottom' | 'both' | 'bottom' | Dónde se renderiza el pie de página — top, bottom o both. |
showPageSizeSelector | boolean | true | Muestra el dropdown de filas por página. |
showPageInfo | boolean | true | Muestra el resumen 'Mostrando 1–10 de 42'. |
showFirstLast | boolean | true | Muestra los botones saltar al primero / último. |
Selección de filas
Habilita selección de una o varias filas, con casillas opcionales y un seleccionar todo en el encabezado.
const table = new DataTable('#grid', {
data: rows,
selection: { mode: 'multi', checkbox: true },
});
table.on('selection:change', ({ selected }) => {
// do something with the selected rows
});| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
mode | 'none' | 'single' | 'multi' | 'none' | 'none', 'single' o 'multi'. |
checkbox | boolean | false | Renderiza una columna de casilla (y una casilla de seleccionar todo en el encabezado en modo multi). |
selectAll | boolean | true | Permite que la casilla del encabezado seleccione todas las filas de la página. |
preserveOnFilter | boolean | false | Mantén la selección actual cuando cambien los filtros en lugar de limpiarla. |
Gestión de columnas
Más allá del renderizado, las columnas se pueden ocultar, fijar, cambiar de tamaño y reordenar. El cambio de tamaño está activado por defecto; los otros son opcionales.
- Un menú Columnas de la barra de herramientas activa o desactiva cada columna (respeta enableHiding). Oculta el botón con columnVisibility.enabled = false.
- Fija columnas a la izquierda o derecha con pinned en la columna, o columnPinning.enabled = true más el método pinColumn().
- Arrastra el borde derecho de un encabezado para redimensionar. Desactiva con columnResizing.enabled = false.
- Habilita arrastrar para reordenar con columnReordering.enabled = true.
Temas y CSS
Toda la capa visual está impulsada por propiedades personalizadas de CSS --kdt-* en una sola clase, por lo que puedes cambiar el tema estableciendo una variable — sin !important necesario. Cada parte también lleva un nombre de clase estable que puedes dirigir directamente.
Establece cualquiera de estos en .katucharts-datatable (o un envoltorio) para cambiar el tema. La cuadrícula incluye predeterminados de luz sensatos y una paleta oscura incorporada.
| Variable | Descripción |
|---|---|
--kdt-bg | Fondo de tabla. Establece transparent para fusionarse con la página. |
--kdt-popover-bg | Fondo para dropdowns / menús faceted — mantenido opaco incluso cuando el fondo de la tabla es transparente. |
--kdt-fg | Color de texto predeterminado. |
--kdt-muted | Superficie sutil (encabezado, filas agrupadas, distintivos). |
--kdt-muted-fg | Color de texto secundario / encabezado / placeholder. |
--kdt-border | Color de borde y divisor. |
--kdt-accent | Superficie de desplazamiento / activa para filas, botones y elementos de menú. |
--kdt-primary | Acento primario — casillas seleccionadas, botón de paginación activo. |
--kdt-radius | Radio de esquina para el contenedor, entradas, botones y menús. |
--kdt-row-height | Altura de fila del cuerpo (también se establece a través de density). |
--kdt-font-family | Familia de fuente para toda la cuadrícula. |
/* Re-theme by setting variables on a wrapper — no !important */
.my-grid .katucharts-datatable {
--kdt-primary: #b43417;
--kdt-radius: ;
--kdt-accent: #fbeae5;
}Temas y CSS · classNames
Prefiere adjuntar sus propias clases. Pase un objeto classNames para enganchar cualquier parte — root, toolbar, table, header, row, cell, footer y pagination.
new DataTable('#grid', {
data: rows,
classNames: { root: 'my-grid', row: 'my-row', cell: 'my-cell' },
style: { theme: 'dark', density: 'compact', radius: 12 },
});density: 'compact' | 'normal' | 'comfortable' ajusta la altura de fila y el relleno. Un elemento 'Density' de la barra de herramientas permite a los usuarios cambiarlo en vivo.
Cambia toda la cuadrícula a oscuro con style.theme = 'dark' (o establece data-theme="dark" en la raíz).
Eventos
Suscríbete a través de la opción events (o el método .on(name, handler)) para reaccionar a la interacción del usuario.
| Evento | Descripción |
|---|---|
rowClick | Se hizo clic en una fila — payload: row, rowIndex, originalEvent. |
cellClick | Se hizo clic en una celda — payload: value, row, column, rowIndex, colIndex. |
selectionChange | Selección cambió — payload: selected, added, removed. |
sortChange | Ordenamiento cambió — payload: column, direction, multiSort. |
filterChange | Un filtro cambió — payload: column, value, allFilters. |
pageChange | Página cambió — payload: page, pageSize, totalPages. |
cellEdit | Una celda fue editada — payload: row, column, oldValue, newValue. |
Localización
Las cadenas de interfaz integradas —placeholders de búsqueda y filtro, paginación, menús de exportación y densidad, controles de columna— vienen en varios idiomas. Puedes elegir un idioma explícitamente, dejar que la tabla siga al navegador o anular cadenas individuales.
De forma predeterminada, la tabla detecta el idioma del navegador y recurre al inglés cuando no hay coincidencia. Define locale para fijar un idioma; una vez establecido, no cambia por sí solo.
// Auto-detect from the browser language (default)
new DataTable('#grid', { data: rows });
// Pin a locale — stays fixed regardless of the browser
new DataTable('#grid', { data: rows, locale: 'pt-BR' });Locales incluidos de fábrica:
| Locale | Descripción |
|---|---|
en | Inglés (base / alternativa). |
pt-BR | Portugués (Brasil). |
es | Español. |
zh | Chino simplificado. |
Anular cadenas individuales
Pasa lang para anular cualquier cadena del locale activo. Las anulaciones por clave siempre prevalecen sobre el paquete de locale, así que puedes fijar un locale y aun así personalizar alguna etiqueta.
new DataTable('#grid', {
data: rows,
locale: 'pt-BR',
lang: { search: 'Procurar produtos…' }, // wins over the locale pack
});Cambia de idioma en tiempo de ejecución con setLocale: la tabla se vuelve a renderizar y conserva las anulaciones de lang.
const table = new DataTable('#grid', { data: rows });
table.setLocale('es'); // switch language and redrawAgrega tu propio idioma con registerLocale antes de crear la tabla; las cadenas omitidas recurren al inglés.
import { DataTable, registerLocale } from 'katucharts.js/datatable';
registerLocale('fr', { search: 'Rechercher…', noData: 'Aucune donnée' });
new DataTable('#grid', { data: rows, locale: 'fr' });Referencia de opciones
Opciones de nivel superior pasadas a new DataTable(container, options). Los bloques de características son objetos para que puedas habilitar y configurar cada uno en un lugar.
| Opción | Tipo | Descripción |
|---|---|---|
data | any[] | La matriz de filas. Reemplazable posteriormente con setData(). |
columns | ColumnDefinition[] | Definiciones de columnas. Se deducen de los datos cuando se omiten. |
rowKey | string | Campo utilizado como identidad de fila estable. |
sorting | object | Comportamiento de ordenamiento — enabled, multiSort, defaultSort. |
filtering | object | Filtrado por columna — enabled, position, showReset. |
search | object | Cuadro de búsqueda global — enabled, placeholder, columns, debounceMs. |
pagination | object | Paginación — ver la tabla de paginación anterior. |
selection | object | Selección de filas — ver la tabla de selección anterior. |
columnVisibility | object | Menú de barra de herramientas de visibilidad de columnas — enabled. |
columnPinning | object | Fijación de columnas — enabled. |
columnResizing | object | Cambio de tamaño de columna — enabled (predeterminado true). |
columnReordering | object | Arrastrar para reordenar columnas — enabled. |
grouping | object | Agrupación de filas por una o más columnas con agregados. |
virtualScroll | object | Renderizado virtualizado para conjuntos de datos grandes — enabled, rowHeight, threshold. |
exporting | object | Exportación CSV / JSON / portapapeles y menú Exportar de la barra de herramientas — enabled, formats. |
serverSide | object | Datos del lado del servidor, ordenamiento, filtrado y paginación a través de una URL. |
toolbar | object | Barra de herramientas — enabled y qué elementos se muestran (search, columnToggle, export, density…). |
style | object | Estilo visual — density, theme, colors y los atajos de variables CSS. |
classNames | object | Ganchos de clase por parte. |
initialState | object | Estado inicial conveniente — pageSize, sorting, columnVisibility, columnFilters. |
events | object | Manejadores de eventos. |
locale | string | Código de locale para las cadenas integradas (omitido o 'auto' detecta automáticamente desde el navegador, cualquier otro valor lo fija). |
lang | object | Anula cadenas de interfaz de usuario (información de página, sin datos, etiquetas de botón…). |
API programática
La instancia expone métodos para impulsar la cuadrícula desde tu propio código.
| Método | Descripción |
|---|---|
setData | setData(rows) — reemplaza todos los datos; las columnas se re-deducen si no se establece. |
getData / getSelectedRows | getData() / getFilteredData() / getSelectedRows() — lee las filas actuales. |
sort / clearSort | sort(column, direction?) / clearSort() — controla el ordenamiento. |
setFilter / clearFilter | setFilter(column, value) / clearFilter(column?) — controla los filtros. |
search / clearSearch | search(query) / clearSearch() — impulsa la búsqueda global. |
goToPage / setPageSize | goToPage(n) / setPageSize(n) — controla la paginación. |
showColumn / pinColumn | showColumn(field) / hideColumn(field) / pinColumn(field, dir) — gestiona columnas. |
selectRow / selectAll | selectRow(i) / deselectRow(i) / selectAll() / deselectAll(). |
exportCSV / exportJSON | exportCSV() / exportJSON() / copyToClipboard() — exporta datos. |
getTableApi | getTableApi() — el objeto asistentes de tabla, para integraciones personalizadas. |
update / redraw / destroy | update(options) / redraw() / destroy() — actualiza o desmonta la cuadrícula. |