Módulos

DataTable

Uma grade de dados interativa fornecida como módulo opcional. Ordenação, filtragem multi-tipo, paginação, seleção de linhas, gerenciamento de colunas e renderizador totalmente temático independente de framework — configurado com definições de coluna simples.

Instalação

O DataTable é um módulo independente — não traz dependências de gráficos e pode ser usado sozinho. Importe a classe e aponte-a para um elemento container e um array de dados.

import { DataTable } from 'katucharts.js/datatable';

const table = new DataTable('#grid', { data: rows });
O módulo traz sua própria folha de estilos com escopo automático; você nunca importa CSS na mão.

Início rápido

Passe suas linhas como data e descreva cada coluna. Sem colunas fornecidas, a grade as infere da primeira linha.

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 },
});

Colunas

Cada coluna é um objeto. Use accessorKey, header, cell, enableSorting e propriedades relacionadas — ou os nomes próprios do KatuCharts field, title e formatter, que são aceitos como equivalentes.

PropriedadeTipoPadrãoDescrição
accessorKeystring—Chave em cada objeto de linha para o valor desta coluna. Alias de field.
accessorFn(row) => any—Derive o valor da linha inteira em vez de uma chave plana, ex. row => row.first + ' ' + row.last.
idstringaccessorKeyID de coluna explícita. Obrigatória para colunas sem accessorKey (colunas de ação ou checkbox); caso contrário, padrão para a accessorKey.
headerstring | (ctx) => Node—Conteúdo do cabeçalho. Uma string para um rótulo simples, ou uma função que recebe a coluna e a tabela e retorna markup ou um nó DOM.
cell(ctx) => string | Node—Renderizador de célula personalizado que recebe row, column, getValue e table. Retorna uma string HTML ou um nó DOM. Apelido de formatter.
typestring'string'Tipo de valor — string, number, date, boolean ou html. Orienta alinhamento padrão, formatação e o tipo de filtro inferido.
enableSortingbooleantrueSe a coluna pode ser ordenada. Alias de sortable. Defina como false em colunas de ação / checkbox.
enableHidingbooleantrueSe a coluna aparece no menu de visibilidade de colunas e pode ser desativada.
enableColumnFilterbooleantrueSe a coluna mostra um controle de filtro. Alias de filterable.
filterTypestring—UI de filtro para a coluna — veja Filtering. Inferida de type quando omitida.
filterFn(row, id, val) => boolean—Predicado customizado (row, columnId, filterValue) => boolean que sobrescreve a lógica de filtro embutida.
size / minSize / maxSizenumber—Largura da coluna em pixels (alias width). minSize / maxSize vinculam redimensionamento.
pinned'left' | 'right'—Fixe a coluna na borda 'left' ou 'right' para que permaneça visível durante a rolagem.
alignstring—Alinhamento de texto — left, center ou right. Padrões da coluna type.
metaobject—Dados arbitrários que você pode ler de volta dentro dos callbacks header / cell.
accessorKey e field são intercambiáveis, assim como header (string) e title, e cell e formatter. Use o vocabulário que preferir; misturá-los entre colunas é aceitável.

Renderização de célula e cabeçalho

Exiba o que quiser em uma célula ou cabeçalho. A função cell de uma coluna renderiza seu conteúdo — retorne texto, uma string HTML ou um nó DOM — e uma função header constrói marcação de cabeçalho customizada, como um botão ordenável.

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 recebe valores de row, column e table que você pode usar para ler dados e controlar a grade:

AuxiliarDescrição
row.getValue('field')Leia o valor de uma coluna na linha atual.
row.originalO objeto row completo e original.
row.toggleSelected()Selecione ou limpe a linha.
column.toggleSorting()Ordene a grade por esta coluna.
column.setFilterValue(value)Filtre esta coluna por um valor.
table.nextPage()Vá para a próxima página (também previousPage()).
table.toggleAllPageRowsSelected()Selecione cada linha na página atual.
Os mesmos auxiliares estão disponíveis fora dos callbacks via table.getTableApi(), para construir barras de ferramentas personalizadas ou controles.

Ordenação

A ordenação está ativada por padrão; clique em um cabeçalho para ciclar ascendente → descendente → não ordenado. Desative-a globalmente, ative ordenação multi-coluna, ou defina uma ordenação 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 }] },
});
Com multiSort ativado, Shift-clique cabeçalhos para ordenar por várias colunas; um pequeno badge mostra a prioridade de ordenação de cada coluna.

Filtragem

A grade oferece uma caixa de busca global mais uma linha de filtro por coluna. Ambas podem ser ativadas ou desativadas independentemente, e cada coluna escolhe (ou infere) um de vários tipos de filtro.

Desative toda a linha de filtro com filtering.enabled = false, ou oculte o filtro de uma única coluna com filterable: false (enableColumnFilter: false). Um botão Limpar filtros aparece automaticamente enquanto qualquer filtro estiver ativo.

NomeDescrição
textCorrespondência de substring (case-insensitive por padrão).
numberValor exato, ou um intervalo min / max.
numberrangeDuas entradas delimitando um intervalo numérico.
selectDropdown de escolha única dos valores distintos da coluna.
multiselectDropdown multi-select — linhas correspondendo qualquer valor selecionado passam.
facetedPopover de multi-seleção facetado com badge de contagem.
booleanDropdown True / False / All.
dateCorrespondência de data única.
daterangeLimites de datas de / até.

Ative a caixa de busca global na barra de ferramentas; ela corresponde a todas as colunas visíveis (ou um subconjunto escolhido).

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
  ],
});
O tipo faceted renderiza um popover de multi-seleção, construindo suas opções automaticamente a partir dos dados.

Paginação

A paginação está ativada por padrão. Configure o tamanho da página, os tamanhos oferecidos e quais controles renderizam.

PropriedadeTipoPadrãoDescrição
enabledbooleantrueAtive ou desative a paginação. Quando desativada, todas as linhas renderizam (com rolagem virtual acima do threshold).
pageSizenumber25Linhas por página.
pageSizesnumber[][10,25,50,100]Tamanhos oferecidos no dropdown linhas-por-página.
position'top' | 'bottom' | 'both''bottom'Onde o rodapé renderiza — top, bottom ou both.
showPageSizeSelectorbooleantrueMostre o dropdown linhas-por-página.
showPageInfobooleantrueMostre o resumo 'Exibindo 1–10 de 42'.
showFirstLastbooleantrueMostre os botões pular-para-primeiro / último.

Seleção de linhas

Ative seleção de linha única ou multi, com checkboxes opcionais e um select-all no cabeçalho.

const table = new DataTable('#grid', {
  data: rows,
  selection: { mode: 'multi', checkbox: true },
});

table.on('selection:change', ({ selected }) => {
  // do something with the selected rows
});
PropriedadeTipoPadrãoDescrição
mode'none' | 'single' | 'multi''none''none', 'single' ou 'multi'.
checkboxbooleanfalseRenderize uma coluna de checkbox (e um checkbox select-all no cabeçalho em modo multi).
selectAllbooleantruePermita que o checkbox do cabeçalho selecione todas as linhas da página.
preserveOnFilterbooleanfalseMantenha a seleção atual quando filtros mudam em vez de limpá-la.

Gerenciamento de colunas

Além de renderizar, colunas podem ser ocultadas, fixadas, redimensionadas e reordenadas. Redimensionamento está ativado por padrão; os outros são opt-in.

  • Um menu da barra de ferramentas Colunas alterna cada coluna on ou off (respeita enableHiding). Oculte o botão com columnVisibility.enabled = false.
  • Fixe colunas à esquerda ou à direita com pinned na coluna, ou columnPinning.enabled = true mais o método pinColumn().
  • Arraste a borda direita de um cabeçalho para redimensionar. Desative com columnResizing.enabled = false.
  • Ative arrastar para reordenar com columnReordering.enabled = true.

Tematização e CSS

Toda a camada visual é orientada por propriedades customizadas CSS --kdt-* em uma única classe, então você pode re-tematizar definindo uma variável — nenhum !important necessário. Cada parte também traz um nome de classe estável que você pode direcionar diretamente.

Defina qualquer uma destas em .katucharts-datatable (ou um wrapper) para re-tematizar. A grade traz padrões claros sensatos e uma paleta escura embutida.

VariávelDescrição
--kdt-bgFundo da tabela. Defina como transparent para misturar na página.
--kdt-popover-bgFundo para dropdowns / menus faceted — mantido opaco mesmo quando o fundo da tabela é transparente.
--kdt-fgCor de texto padrão.
--kdt-mutedSuperfície sutil (cabeçalho, linhas de grupo, badges).
--kdt-muted-fgCor de texto secundário / cabeçalho / placeholder.
--kdt-borderCor de borda e divisor.
--kdt-accentSuperfície hover / ativa para linhas, botões e itens de menu.
--kdt-primaryAcento primário — checkboxes selecionados, botão de paginação ativo.
--kdt-radiusRaio de canto para o container, inputs, botões e menus.
--kdt-row-heightAltura de linha de corpo (também defina via density).
--kdt-font-familyFamília de fontes para toda a grade.
/* Re-theme by setting variables on a wrapper — no !important */
.my-grid .katucharts-datatable {
  --kdt-primary: #b43417;
  --kdt-radius: ;
  --kdt-accent: #fbeae5;
}

Tematização e CSS · classNames

Prefere anexar suas próprias classes? Passe um objeto classNames para conectar qualquer parte — root, toolbar, table, header, row, cell, footer e 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 altura de linha e padding. Um item 'Density' na barra de ferramentas deixa usuários alternar ao vivo.

Inverta toda a grade para escuro com style.theme = 'dark' (ou defina data-theme="dark" na raiz).

O objeto style também aceita atalhos de alto nível (borderColor, accentColor, radius, fontFamily, alternateRowColor, hoverRowColor …) que são traduzidos para as variáveis CSS correspondentes para você.

Eventos

Subscreva através da opção events (ou o método .on(name, handler)) para reagir à interação do usuário.

EventoDescrição
rowClickUma linha foi clicada — payload: row, rowIndex, originalEvent.
cellClickUma célula foi clicada — payload: value, row, column, rowIndex, colIndex.
selectionChangeSeleção alterada — payload: selected, added, removed.
sortChangeOrdenação alterada — payload: column, direction, multiSort.
filterChangeUm filtro foi alterado — payload: column, value, allFilters.
pageChangePágina alterada — payload: page, pageSize, totalPages.
cellEditUma célula foi editada — payload: row, column, oldValue, newValue.

Localização

As strings de interface integradas — placeholders de busca e filtro, paginação, menus de exportação e densidade, controles de coluna — vêm em vários idiomas. Você pode escolher um idioma explicitamente, deixar a tabela seguir o navegador ou sobrescrever strings individuais.

Por padrão, a tabela detecta o idioma do navegador e usa o inglês quando não há correspondência. Defina locale para fixar um idioma; uma vez definido, ele não muda sozinho.

// 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 incluídos por padrão:

LocaleDescrição
enInglês (base / fallback).
pt-BRPortuguês (Brasil).
esEspanhol.
zhChinês simplificado.
Um locale desconhecido ou parcialmente correspondente (por exemplo, pt-PT) recai primeiro no idioma principal e, em seguida, no inglês.

Sobrescrevendo strings individuais

Passe lang para sobrescrever qualquer string do locale ativo. Sobrescritas por chave sempre vencem o pacote de locale, então você pode fixar um locale e ainda personalizar um rótulo ou outro.

new DataTable('#grid', {
  data: rows,
  locale: 'pt-BR',
  lang: { search: 'Procurar produtos…' },   // wins over the locale pack
});

Troque de idioma em tempo de execução com setLocale — a tabela é redesenhada e mantém as sobrescritas de lang.

const table = new DataTable('#grid', { data: rows });
table.setLocale('es');   // switch language and redraw

Adicione seu próprio idioma com registerLocale antes de criar a tabela; strings omitidas recaem no inglês.

import { DataTable, registerLocale } from 'katucharts.js/datatable';

registerLocale('fr', { search: 'Rechercher…', noData: 'Aucune donnée' });
new DataTable('#grid', { data: rows, locale: 'fr' });
As setas de paginação (« » ‹ ›) são neutras em relação ao idioma e não são traduzidas; sobrescreva-as via lang se precisar de símbolos diferentes.

Referência de opções

Opções de nível superior passadas para new DataTable(container, options). Blocos de recursos são objetos para que você possa ativar e configurar cada um no mesmo lugar.

OpçãoTipoDescrição
dataany[]O array de linhas. Substituível depois com setData().
columnsColumnDefinition[]Definições de coluna. Inferidas dos dados quando omitidas.
rowKeystringCampo usado como uma identidade de linha estável.
sortingobjectComportamento de ordenação — enabled, multiSort, defaultSort.
filteringobjectFiltragem por coluna — enabled, position, showReset.
searchobjectCaixa de busca global — enabled, placeholder, columns, debounceMs.
paginationobjectPaginação — veja a tabela de paginação acima.
selectionobjectSeleção de linhas — veja a tabela de seleção acima.
columnVisibilityobjectMenu de barra de ferramentas de visibilidade de coluna — enabled.
columnPinningobjectFixação de coluna — enabled.
columnResizingobjectRedimensionamento de coluna — enabled (padrão true).
columnReorderingobjectArrastar-para-reordenar colunas — enabled.
groupingobjectAgrupamento de linhas por uma ou mais colunas com agregados.
virtualScrollobjectRenderização virtualizada para grandes datasets — enabled, rowHeight, threshold.
exportingobjectExportação CSV / JSON / clipboard e menu Export da barra de ferramentas — enabled, formats.
serverSideobjectDados server-side, ordenação, filtragem e paginação via URL.
toolbarobjectBarra de ferramentas — enabled e quais itens mostram (search, columnToggle, export, density…).
styleobjectEstilo visual — density, theme, cores e os atalhos CSS-variable.
classNamesobjectConectores de classe por-parte.
initialStateobjectEstado inicial conveniente — pageSize, sorting, columnVisibility, columnFilters.
eventsobjectManipuladores de eventos.
localestringCódigo de locale para as strings integradas (omitido ou 'auto' detecta automaticamente pelo navegador, qualquer outro valor o fixa).
langobjectSobrescreva strings de UI (page info, no-data, rótulos de botão…).

API programática

A instância expõe métodos para controlar a grade a partir do seu próprio código.

MétodoDescrição
setDatasetData(rows) — substitua todos os dados; as colunas re-inferem se não definidas.
getData / getSelectedRowsgetData() / getFilteredData() / getSelectedRows() — leia as linhas atuais.
sort / clearSortsort(column, direction?) / clearSort() — controle a ordenação.
setFilter / clearFiltersetFilter(column, value) / clearFilter(column?) — controle os filtros.
search / clearSearchsearch(query) / clearSearch() — controle a busca global.
goToPage / setPageSizegoToPage(n) / setPageSize(n) — controle a paginação.
showColumn / pinColumnshowColumn(field) / hideColumn(field) / pinColumn(field, dir) — gerencie colunas.
selectRow / selectAllselectRow(i) / deselectRow(i) / selectAll() / deselectAll().
exportCSV / exportJSONexportCSV() / exportJSON() / copyToClipboard() — exporte dados.
getTableApigetTableApi() — o objeto auxiliares da tabela, para integrações personalizadas.
update / redraw / destroyupdate(options) / redraw() / destroy() — atualize ou desmonte a grade.
Essas opções são em camadas: ative um recurso com seu bloco, refine colunas individualmente, e tematize tudo através de CSS variables. Navegue pela grade ao vivo na página inicial.