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 });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.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
accessorKey | string | — | 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. |
id | string | accessorKey | ID de coluna explícita. Obrigatória para colunas sem accessorKey (colunas de ação ou checkbox); caso contrário, padrão para a accessorKey. |
header | string | (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. |
type | string | 'string' | Tipo de valor — string, number, date, boolean ou html. Orienta alinhamento padrão, formatação e o tipo de filtro inferido. |
enableSorting | boolean | true | Se a coluna pode ser ordenada. Alias de sortable. Defina como false em colunas de ação / checkbox. |
enableHiding | boolean | true | Se a coluna aparece no menu de visibilidade de colunas e pode ser desativada. |
enableColumnFilter | boolean | true | Se a coluna mostra um controle de filtro. Alias de filterable. |
filterType | string | — | 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 / maxSize | number | — | 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. |
align | string | — | Alinhamento de texto — left, center ou right. Padrões da coluna type. |
meta | object | — | Dados arbitrários que você pode ler de volta dentro dos callbacks header / cell. |
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:
| Auxiliar | Descrição |
|---|---|
row.getValue('field') | Leia o valor de uma coluna na linha atual. |
row.original | O 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. |
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 }] },
});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.
| Nome | Descrição |
|---|---|
text | Correspondência de substring (case-insensitive por padrão). |
number | Valor exato, ou um intervalo min / max. |
numberrange | Duas entradas delimitando um intervalo numérico. |
select | Dropdown de escolha única dos valores distintos da coluna. |
multiselect | Dropdown multi-select — linhas correspondendo qualquer valor selecionado passam. |
faceted | Popover de multi-seleção facetado com badge de contagem. |
boolean | Dropdown True / False / All. |
date | Correspondência de data única. |
daterange | Limites 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
],
});Paginação
A paginação está ativada por padrão. Configure o tamanho da página, os tamanhos oferecidos e quais controles renderizam.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
enabled | boolean | true | Ative ou desative a paginação. Quando desativada, todas as linhas renderizam (com rolagem virtual acima do threshold). |
pageSize | number | 25 | Linhas por página. |
pageSizes | number[] | [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. |
showPageSizeSelector | boolean | true | Mostre o dropdown linhas-por-página. |
showPageInfo | boolean | true | Mostre o resumo 'Exibindo 1–10 de 42'. |
showFirstLast | boolean | true | Mostre 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
});| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
mode | 'none' | 'single' | 'multi' | 'none' | 'none', 'single' ou 'multi'. |
checkbox | boolean | false | Renderize uma coluna de checkbox (e um checkbox select-all no cabeçalho em modo multi). |
selectAll | boolean | true | Permita que o checkbox do cabeçalho selecione todas as linhas da página. |
preserveOnFilter | boolean | false | Mantenha 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ável | Descrição |
|---|---|
--kdt-bg | Fundo da tabela. Defina como transparent para misturar na página. |
--kdt-popover-bg | Fundo para dropdowns / menus faceted — mantido opaco mesmo quando o fundo da tabela é transparente. |
--kdt-fg | Cor de texto padrão. |
--kdt-muted | Superfície sutil (cabeçalho, linhas de grupo, badges). |
--kdt-muted-fg | Cor de texto secundário / cabeçalho / placeholder. |
--kdt-border | Cor de borda e divisor. |
--kdt-accent | Superfície hover / ativa para linhas, botões e itens de menu. |
--kdt-primary | Acento primário — checkboxes selecionados, botão de paginação ativo. |
--kdt-radius | Raio de canto para o container, inputs, botões e menus. |
--kdt-row-height | Altura de linha de corpo (também defina via density). |
--kdt-font-family | Famí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).
Eventos
Subscreva através da opção events (ou o método .on(name, handler)) para reagir à interação do usuário.
| Evento | Descrição |
|---|---|
rowClick | Uma linha foi clicada — payload: row, rowIndex, originalEvent. |
cellClick | Uma célula foi clicada — payload: value, row, column, rowIndex, colIndex. |
selectionChange | Seleção alterada — payload: selected, added, removed. |
sortChange | Ordenação alterada — payload: column, direction, multiSort. |
filterChange | Um filtro foi alterado — payload: column, value, allFilters. |
pageChange | Página alterada — payload: page, pageSize, totalPages. |
cellEdit | Uma 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:
| Locale | Descrição |
|---|---|
en | Inglês (base / fallback). |
pt-BR | Português (Brasil). |
es | Espanhol. |
zh | Chinês simplificado. |
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 redrawAdicione 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' });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ção | Tipo | Descrição |
|---|---|---|
data | any[] | O array de linhas. Substituível depois com setData(). |
columns | ColumnDefinition[] | Definições de coluna. Inferidas dos dados quando omitidas. |
rowKey | string | Campo usado como uma identidade de linha estável. |
sorting | object | Comportamento de ordenação — enabled, multiSort, defaultSort. |
filtering | object | Filtragem por coluna — enabled, position, showReset. |
search | object | Caixa de busca global — enabled, placeholder, columns, debounceMs. |
pagination | object | Paginação — veja a tabela de paginação acima. |
selection | object | Seleção de linhas — veja a tabela de seleção acima. |
columnVisibility | object | Menu de barra de ferramentas de visibilidade de coluna — enabled. |
columnPinning | object | Fixação de coluna — enabled. |
columnResizing | object | Redimensionamento de coluna — enabled (padrão true). |
columnReordering | object | Arrastar-para-reordenar colunas — enabled. |
grouping | object | Agrupamento de linhas por uma ou mais colunas com agregados. |
virtualScroll | object | Renderização virtualizada para grandes datasets — enabled, rowHeight, threshold. |
exporting | object | Exportação CSV / JSON / clipboard e menu Export da barra de ferramentas — enabled, formats. |
serverSide | object | Dados server-side, ordenação, filtragem e paginação via URL. |
toolbar | object | Barra de ferramentas — enabled e quais itens mostram (search, columnToggle, export, density…). |
style | object | Estilo visual — density, theme, cores e os atalhos CSS-variable. |
classNames | object | Conectores de classe por-parte. |
initialState | object | Estado inicial conveniente — pageSize, sorting, columnVisibility, columnFilters. |
events | object | Manipuladores de eventos. |
locale | string | Código de locale para as strings integradas (omitido ou 'auto' detecta automaticamente pelo navegador, qualquer outro valor o fixa). |
lang | object | Sobrescreva 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étodo | Descrição |
|---|---|
setData | setData(rows) — substitua todos os dados; as colunas re-inferem se não definidas. |
getData / getSelectedRows | getData() / getFilteredData() / getSelectedRows() — leia as linhas atuais. |
sort / clearSort | sort(column, direction?) / clearSort() — controle a ordenação. |
setFilter / clearFilter | setFilter(column, value) / clearFilter(column?) — controle os filtros. |
search / clearSearch | search(query) / clearSearch() — controle a busca global. |
goToPage / setPageSize | goToPage(n) / setPageSize(n) — controle a paginação. |
showColumn / pinColumn | showColumn(field) / hideColumn(field) / pinColumn(field, dir) — gerencie colunas. |
selectRow / selectAll | selectRow(i) / deselectRow(i) / selectAll() / deselectAll(). |
exportCSV / exportJSON | exportCSV() / exportJSON() / copyToClipboard() — exporte dados. |
getTableApi | getTableApi() — o objeto auxiliares da tabela, para integrações personalizadas. |
update / redraw / destroy | update(options) / redraw() / destroy() — atualize ou desmonte a grade. |