wts-data-tableFull compatibility renderer. Use this first when feature coverage matters more than the smallest bundle.
Choose the right renderer, integrate your framework, configure every major capability, and connect application state safely.
The main package contains the typed core, complete DOM renderer, modular entry points, styles, export tools, persistence, server clients, and licensed advanced feature code.
npm install wts-data-tablewts-data-table/styles.css for Complete, or the matching base.css or lite.css stylesheet.The wrappers own host creation, reactive data updates, SSR safety, and teardown. They expose the same table options and controller rather than implementing another table engine.
npm install wts-data-table @wts-data-table/angularimport { Component } from '@angular/core';
import { WtsDataTableAngularComponent } from '@wts-data-table/angular';
import 'wts-data-table/styles.css';
@Component({
standalone: true,
imports: [WtsDataTableAngularComponent],
template: `<wts-data-table-angular
[data]="projects"
[options]="options"
(ready)="table = $event"
/>`
})
export class ProjectTableComponent {
readonly projects = projects;
readonly options = {
columns,
getRowId: (row: Project) => row.id,
responsive: { breakpoint: 720, details: 'inline' }
};
}Lifecycle: Data updates rows in place. A new options object remounts the controller; ready exposes its instance.
Start with Complete. Move to Base when bundle composition matters, Lite for compact read-heavy grids, or Core when your framework must own all DOM.
wts-data-tableFull compatibility renderer. Use this first when feature coverage matters more than the smallest bundle.
wts-data-table/baseTree-shakable renderer where optional behavior is added through exact feature imports.
wts-data-table/liteCompact read-heavy renderer with sorting, filtering, paging, grouping, selection, responsive overflow, and virtualization.
wts-data-table/coreDOM-free row model and state engine for applications that own every rendered element.
import { DataTable } from 'wts-data-table/base';
import { selectionFeature } from 'wts-data-table/features/selection';
import { responsiveFeature } from 'wts-data-table/features/responsive';
import 'wts-data-table/base.css';
new DataTable({
...options,
features: [selectionFeature(), responsiveFeature()]
});These are the standard capabilities available to the controller and wrappers. Each item names the option, method, or package entry point to start with.
Turn a large row set into a useful answer.
initialState.sorting / setSorting()Order by one or several typed columns with custom comparators when needed.
showGlobalFilterProvide one quick search across every searchable column.
columnFiltersUse text, select, boolean, range, date, date-time, and time filters per column.
advancedFilteringBuild nested AND/OR rules for complex business queries.
searchPanesShow faceted values and cascading live counts locally or from a server.
showGrouping / state.groupingBuild expandable nested groups from headers or a grouping drop zone.
aggregation / summaryRowsCalculate count, sum, average, min, max, or custom group and footer totals.
wts-data-table/pivotCreate DOM-free cross-tab dimensions, values, subtotals, and grand totals.
Support application workflows without losing stable row identity.
selectionModeChoose none, single, or multiple selection using stable IDs.
bulkActionsAct on selected rows or an all-filtered selection without loading every record.
cellSelectionSelect cells, rows, columns, and rectangular ranges.
editing / onEditCommitValidate and persist keyboard-accessible optimistic edits with rollback.
autoFillCopy or continue series across editable ranges and accept TSV input.
wts-data-table/edit-historyValidate atomic multi-cell changes and provide bounded undo and redo.
wts-data-table/crudCreate, edit, delete, upload, and bulk-edit through several form layouts.
getSubRows / rowExpansionDisplay nested data, lazy children, or master-detail content.
rowReordering / rowPinningMove rows with pointer or keyboard and keep important rows visible.
Adapt the table to product layout, viewport, and export needs.
columnMenu / showColumnManagerResize, reorder, hide, auto-size, and pin columns.
responsiveCollapse lower-priority columns into accessible inline or popover details.
wts-data-table/card-viewSwitch the processed page into a synchronized responsive card grid.
stickyHeader / stickyFooterKeep multi-row headers and summary footers in view.
headerGroup / filterVariantBuild nested headers and typed date, date-time, and time controls.
buttonsAdd copy, CSV, Excel, PDF, print, columns, nested commands, and custom actions.
cell / layout / pluginsRender safe text or DOM nodes and place features into layout slots.
wts-data-table/exportExport to clipboard, CSV, JSON, XLSX, PDF, or semantic print HTML.
wts-data-table/persistenceStore versioned state or encode it into shareable URL parameters.
theme / --wts-table-*Use framework adapters and 87 supported CSS custom properties.
wts-data-table/i18nLoad locale packs, negotiate fallback, format values, and apply RTL.
Choose the data and rendering strategy for the workload.
pagination / pageSizesUse numbered pages, first/last controls, page jumps, and adaptive ranges.
virtualizationMount only visible rows and columns while preserving semantic table markup.
manualFiltering / manualSorting / manualPaginationKeep UI state in the table while an API owns querying and row counts.
wts-data-table/data-sourceAdd debouncing, cancellation, caching, stale-response protection, and status.
wts-data-table/serverShare authenticated transports, retries, cache, errors, and telemetry across rows and facets.
@wts-data-table/serverTranslate allowlisted requests into PostgreSQL, MySQL, SQLite, Knex, or Prisma queries.
createDataTableCursorDataSourceController()Append opaque cursor pages from an observer, button, or framework effect.
searchPanes.loadFacetsLoad authenticated server facets with cancellation and cascading counts.
applyTransaction()Add, update, and remove identified rows without replacing all data.
wts-data-table/elementUse the complete renderer from standards-based custom elements.
wts-data-table/pluginInstall validated behavior with manifests, dependency resolution, and cleanup.
ariaLabel / ariaDescriptionUse semantic tables, labelled controls, keyboard workflows, and live status.
Use stable row IDs, typed columns, an accessible name, and only the interaction features your product needs. Wrapper components receive the same object without element or data.
const table = new DataTable<Project>({
element: '#projects',
ariaLabel: 'Project delivery',
data: projects,
getRowId: (row) => row.id,
columns: [
{ accessor: 'name', header: 'Project', responsive: 'always' },
{ accessor: 'status', header: 'Status', filterVariant: 'select' },
{ accessor: 'budget', header: 'Budget', dataType: 'number', aggregation: 'sum' }
],
initialState: {
pagination: { pageSize: 25 },
sorting: [{ id: 'name', direction: 'asc' }]
},
showGlobalFilter: true,
columnFilters: { mode: 'collapsible' },
columnMenu: true,
selectionMode: 'multiple',
bulkActions: true,
responsive: { breakpoint: 720, details: 'inline' },
pagination: { mode: 'pages', showPageJump: true },
summaryRows: { label: 'Total', columns: { budget: 'sum' }, scope: 'filtered' },
onStateChange: (state, reason) => saveView(state, reason)
});virtualization to reduce mounted DOM. Use manual processing or the data-source controller when the complete result should not live in browser memory.getState() returns sorting, filters, paging, grouping, expansion, selection, and column layout. Mutator methods update one concern without reconstructing the table.
const state = table.getState();
const selected = table.getSelectedRows();
table.setGlobalFilter('platform');
table.setSorting([{ id: 'budget', direction: 'desc' }]);
table.setPageSize(50);
table.setData(nextProjects, totalRowCount);
table.applyTransaction({
add: [newProject],
update: [{ id: changed.id, data: changed }],
remove: [deletedId]
});
await table.ready();
await table.destroyAsync();setColumnFilter()setGrouping()setRowExpanded()pinRow()setColumnVisibility()replaceState()reset()render()Advanced capabilities ship inside the same wts-data-table package under feature-named imports. There is no separate Pro package or /premium namespace. A signed entitlement unlocks purchased capabilities.
wts-data-table/remote · wts-data-table/remote-viewportBounded external windows and server-owned row spaces.
wts-data-table/search · wts-data-table/search-filtersIndexed and database-aware filtering for large collections.
wts-data-table/export-jobs · wts-data-table/durable-exportDurable asynchronous exports that outlive a browser request.
wts-data-table/worker-engine · wts-data-table/worker-tableMove data processing off the UI thread.
wts-data-table/live-data · wts-data-table/live-transportsApply ordered real-time changes from WebSocket or custom transports.
wts-data-table/pivot-controller · wts-data-table/pivot-builderBuild server-backed pivot and analytical queries.
wts-data-table/formula-engine · wts-data-table/formula-editorParse, calculate, edit, and project workbook formulas.
wts-data-table/collaboration-client · wts-data-table/collaboration-tableSynchronize concurrent editing through application transports.
wts-data-table/governance-client · wts-data-table/governance-panelApply review, policy, audit, and controlled-change workflows.
wts-data-table/report-controller · wts-data-table/report-designerBuild reusable report definitions and report interfaces.
import { verifyDataTableLicense } from 'wts-data-table';
import { createRemoteRowModel } from 'wts-data-table/remote';
const license = await verifyDataTableLicense(entitlementToken);
const rows = createRemoteRowModel({
license,
origin: window.location.origin,
...options
});Continue with site-native guides for complete workflows, edge cases, security boundaries, server protocols, and production decisions.