Módulos

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 });
El módulo incluye su propia hoja de estilos con alcance automático; nunca importas CSS manualmente.

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.

PropiedadTipoPredeterminadoDescripción
accessorKeystring—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.
idstringaccessorKeyId 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.
headerstring | (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.
typestring'string'Tipo de valor — string, number, date, boolean o html. Define la alineación predeterminada, el formato y el tipo de filtro deducido.
enableSortingbooleantrueSi la columna se puede ordenar. Alias de sortable. Establece false en columnas de acción / casilla.
enableHidingbooleantrueSi la columna aparece en el menú de visibilidad de columnas y se puede alternar.
enableColumnFilterbooleantrueSi la columna muestra un control de filtro. Alias de filterable.
filterTypestring—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 / maxSizenumber—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.
alignstring—Alineación de texto — left, center o right. Toma valores predeterminados del tipo de columna.
metaobject—Datos arbitrarios que puedes leer dentro de callbacks header / cell.
accessorKey y field son intercambiables, al igual que header (cadena) y title, y cell y formatter. Usa el vocabulario que prefieras; mezclarlos entre columnas es perfectamente válido.

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:

AuxiliarDescripción
row.getValue('field')Lee el valor de una columna en la fila actual.
row.originalEl 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.
Los mismos asistentes están disponibles fuera de las funciones de retorno mediante table.getTableApi(), para construir barras de herramientas personalizadas o controles.

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 }] },
});
Con multiSort habilitado, Mayús+clic en encabezados para ordenar por varias columnas; un pequeño distintivo muestra la prioridad de ordenamiento de cada columna.

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.

NombreDescripción
textCoincidencia de subcadena (sin distinción de mayúsculas y minúsculas por defecto).
numberValor exacto, o un rango mín / máx.
numberrangeDos entradas que delimitan un rango numérico.
selectDropdown de opción única con los valores distintos de la columna.
multiselectDropdown multi-select — las filas que coinciden con cualquier valor seleccionado pasan.
facetedPopover de selección múltiple facetada con una insignia de conteo.
booleanDropdown Verdadero / Falso / Todos.
dateCoincidencia de una sola fecha.
daterangeLí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
  ],
});
El tipo faceted renderiza un popover de selección múltiple, construyendo sus opciones automáticamente desde los datos.

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.

PropiedadTipoPredeterminadoDescripción
enabledbooleantrueActiva o desactiva la paginación. Cuando está desactivada, todas las filas se renderizan (con desplazamiento virtual por encima del umbral).
pageSizenumber25Filas por página.
pageSizesnumber[][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.
showPageSizeSelectorbooleantrueMuestra el dropdown de filas por página.
showPageInfobooleantrueMuestra el resumen 'Mostrando 1–10 de 42'.
showFirstLastbooleantrueMuestra 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
});
PropiedadTipoPredeterminadoDescripción
mode'none' | 'single' | 'multi''none''none', 'single' o 'multi'.
checkboxbooleanfalseRenderiza una columna de casilla (y una casilla de seleccionar todo en el encabezado en modo multi).
selectAllbooleantruePermite que la casilla del encabezado seleccione todas las filas de la página.
preserveOnFilterbooleanfalseManté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.

VariableDescripción
--kdt-bgFondo de tabla. Establece transparent para fusionarse con la página.
--kdt-popover-bgFondo para dropdowns / menús faceted — mantenido opaco incluso cuando el fondo de la tabla es transparente.
--kdt-fgColor de texto predeterminado.
--kdt-mutedSuperficie sutil (encabezado, filas agrupadas, distintivos).
--kdt-muted-fgColor de texto secundario / encabezado / placeholder.
--kdt-borderColor de borde y divisor.
--kdt-accentSuperficie de desplazamiento / activa para filas, botones y elementos de menú.
--kdt-primaryAcento primario — casillas seleccionadas, botón de paginación activo.
--kdt-radiusRadio de esquina para el contenedor, entradas, botones y menús.
--kdt-row-heightAltura de fila del cuerpo (también se establece a través de density).
--kdt-font-familyFamilia 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).

El objeto style también acepta atajos de alto nivel (borderColor, accentColor, radius, fontFamily, alternateRowColor, hoverRowColor …) que se traducen a las variables CSS coincidentes para ti.

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.

EventoDescripción
rowClickSe hizo clic en una fila — payload: row, rowIndex, originalEvent.
cellClickSe hizo clic en una celda — payload: value, row, column, rowIndex, colIndex.
selectionChangeSelección cambió — payload: selected, added, removed.
sortChangeOrdenamiento cambió — payload: column, direction, multiSort.
filterChangeUn filtro cambió — payload: column, value, allFilters.
pageChangePágina cambió — payload: page, pageSize, totalPages.
cellEditUna 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:

LocaleDescripción
enInglés (base / alternativa).
pt-BRPortugués (Brasil).
esEspañol.
zhChino simplificado.
Un locale desconocido o coincidente parcialmente (por ejemplo, pt-PT) recurre primero al idioma principal y luego al inglés.

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 redraw

Agrega 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' });
Las flechas de paginación (« » ‹ ›) son neutrales respecto al idioma y no se traducen; anúlalas mediante lang si necesitas otros símbolos.

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ónTipoDescripción
dataany[]La matriz de filas. Reemplazable posteriormente con setData().
columnsColumnDefinition[]Definiciones de columnas. Se deducen de los datos cuando se omiten.
rowKeystringCampo utilizado como identidad de fila estable.
sortingobjectComportamiento de ordenamiento — enabled, multiSort, defaultSort.
filteringobjectFiltrado por columna — enabled, position, showReset.
searchobjectCuadro de búsqueda global — enabled, placeholder, columns, debounceMs.
paginationobjectPaginación — ver la tabla de paginación anterior.
selectionobjectSelección de filas — ver la tabla de selección anterior.
columnVisibilityobjectMenú de barra de herramientas de visibilidad de columnas — enabled.
columnPinningobjectFijación de columnas — enabled.
columnResizingobjectCambio de tamaño de columna — enabled (predeterminado true).
columnReorderingobjectArrastrar para reordenar columnas — enabled.
groupingobjectAgrupación de filas por una o más columnas con agregados.
virtualScrollobjectRenderizado virtualizado para conjuntos de datos grandes — enabled, rowHeight, threshold.
exportingobjectExportación CSV / JSON / portapapeles y menú Exportar de la barra de herramientas — enabled, formats.
serverSideobjectDatos del lado del servidor, ordenamiento, filtrado y paginación a través de una URL.
toolbarobjectBarra de herramientas — enabled y qué elementos se muestran (search, columnToggle, export, density…).
styleobjectEstilo visual — density, theme, colors y los atajos de variables CSS.
classNamesobjectGanchos de clase por parte.
initialStateobjectEstado inicial conveniente — pageSize, sorting, columnVisibility, columnFilters.
eventsobjectManejadores de eventos.
localestringCódigo de locale para las cadenas integradas (omitido o 'auto' detecta automáticamente desde el navegador, cualquier otro valor lo fija).
langobjectAnula 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étodoDescripción
setDatasetData(rows) — reemplaza todos los datos; las columnas se re-deducen si no se establece.
getData / getSelectedRowsgetData() / getFilteredData() / getSelectedRows() — lee las filas actuales.
sort / clearSortsort(column, direction?) / clearSort() — controla el ordenamiento.
setFilter / clearFiltersetFilter(column, value) / clearFilter(column?) — controla los filtros.
search / clearSearchsearch(query) / clearSearch() — impulsa la búsqueda global.
goToPage / setPageSizegoToPage(n) / setPageSize(n) — controla la paginación.
showColumn / pinColumnshowColumn(field) / hideColumn(field) / pinColumn(field, dir) — gestiona columnas.
selectRow / selectAllselectRow(i) / deselectRow(i) / selectAll() / deselectAll().
exportCSV / exportJSONexportCSV() / exportJSON() / copyToClipboard() — exporta datos.
getTableApigetTableApi() — el objeto asistentes de tabla, para integraciones personalizadas.
update / redraw / destroyupdate(options) / redraw() / destroy() — actualiza o desmonta la cuadrícula.
Estas opciones están en capas: habilita una característica con su bloque, refina columnas individualmente y personaliza todo a través de variables CSS. Explora la cuadrícula en vivo en la página principal.