Documentation

From install to
production table.

Choose the right renderer, integrate your framework, configure every major capability, and connect application state safely.

01

Install the package

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-table
Load styles onceImport wts-data-table/styles.css for Complete, or the matching base.css or lite.css stylesheet.
02

Integrate your framework

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/angular
import { 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.

03

Choose a renderer

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.

Completewts-data-table

Full compatibility renderer. Use this first when feature coverage matters more than the smallest bundle.

Basewts-data-table/base

Tree-shakable renderer where optional behavior is added through exact feature imports.

Litewts-data-table/lite

Compact read-heavy renderer with sorting, filtering, paging, grouping, selection, responsive overflow, and virtualization.

Corewts-data-table/core

DOM-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()]
});
04

Feature guide

These are the standard capabilities available to the controller and wrappers. Each item names the option, method, or package entry point to start with.

Find and understand data

Turn a large row set into a useful answer.

SortinginitialState.sorting / setSorting()

Order by one or several typed columns with custom comparators when needed.

Global searchshowGlobalFilter

Provide one quick search across every searchable column.

Column filterscolumnFilters

Use text, select, boolean, range, date, date-time, and time filters per column.

Advanced filtersadvancedFiltering

Build nested AND/OR rules for complex business queries.

SearchPanessearchPanes

Show faceted values and cascading live counts locally or from a server.

GroupingshowGrouping / state.grouping

Build expandable nested groups from headers or a grouping drop zone.

Aggregatesaggregation / summaryRows

Calculate count, sum, average, min, max, or custom group and footer totals.

Pivot modelswts-data-table/pivot

Create DOM-free cross-tab dimensions, values, subtotals, and grand totals.

Select and change data

Support application workflows without losing stable row identity.

Row selectionselectionMode

Choose none, single, or multiple selection using stable IDs.

Bulk actionsbulkActions

Act on selected rows or an all-filtered selection without loading every record.

Cell and range selectioncellSelection

Select cells, rows, columns, and rectangular ranges.

Inline editingediting / onEditCommit

Validate and persist keyboard-accessible optimistic edits with rollback.

AutoFill and pasteautoFill

Copy or continue series across editable ranges and accept TSV input.

Batch edit historywts-data-table/edit-history

Validate atomic multi-cell changes and provide bounded undo and redo.

CRUD editorwts-data-table/crud

Create, edit, delete, upload, and bulk-edit through several form layouts.

Tree and detail rowsgetSubRows / rowExpansion

Display nested data, lazy children, or master-detail content.

Ordering and pinningrowReordering / rowPinning

Move rows with pointer or keyboard and keep important rows visible.

Control presentation

Adapt the table to product layout, viewport, and export needs.

Column layoutcolumnMenu / showColumnManager

Resize, reorder, hide, auto-size, and pin columns.

Responsive detailsresponsive

Collapse lower-priority columns into accessible inline or popover details.

Card viewwts-data-table/card-view

Switch the processed page into a synchronized responsive card grid.

Sticky sectionsstickyHeader / stickyFooter

Keep multi-row headers and summary footers in view.

Grouped and temporal columnsheaderGroup / filterVariant

Build nested headers and typed date, date-time, and time controls.

Buttonsbuttons

Add copy, CSV, Excel, PDF, print, columns, nested commands, and custom actions.

Custom contentcell / layout / plugins

Render safe text or DOM nodes and place features into layout slots.

Exportswts-data-table/export

Export to clipboard, CSV, JSON, XLSX, PDF, or semantic print HTML.

Saved viewswts-data-table/persistence

Store versioned state or encode it into shareable URL parameters.

Themes and tokenstheme / --wts-table-*

Use framework adapters and 87 supported CSS custom properties.

Localization and RTLwts-data-table/i18n

Load locale packs, negotiate fallback, format values, and apply RTL.

Scale and integrate

Choose the data and rendering strategy for the workload.

Adaptive paginationpagination / pageSizes

Use numbered pages, first/last controls, page jumps, and adaptive ranges.

Virtualizationvirtualization

Mount only visible rows and columns while preserving semantic table markup.

Manual server datamanualFiltering / manualSorting / manualPagination

Keep UI state in the table while an API owns querying and row counts.

Async data sourcewts-data-table/data-source

Add debouncing, cancellation, caching, stale-response protection, and status.

Unified server adapterwts-data-table/server

Share authenticated transports, retries, cache, errors, and telemetry across rows and facets.

Database adapters@wts-data-table/server

Translate allowlisted requests into PostgreSQL, MySQL, SQLite, Knex, or Prisma queries.

Cursor and infinite loadingcreateDataTableCursorDataSourceController()

Append opaque cursor pages from an observer, button, or framework effect.

Remote SearchPanessearchPanes.loadFacets

Load authenticated server facets with cancellation and cascading counts.

TransactionsapplyTransaction()

Add, update, and remove identified rows without replacing all data.

Web Componentwts-data-table/element

Use the complete renderer from standards-based custom elements.

Feature plug-inswts-data-table/plugin

Install validated behavior with manifests, dependency resolution, and cleanup.

AccessibilityariaLabel / ariaDescription

Use semantic tables, labelled controls, keyboard workflows, and live status.

05

Build a production configuration

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)
});
Large dataUse virtualization to reduce mounted DOM. Use manual processing or the data-source controller when the complete result should not live in browser memory.
06

Own state and lifecycle

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()
Framework wrappersData changes update rows in place. Replacing options intentionally remounts configuration. Angular, React, and Vue wrappers clean up on unmount.
07

Licensed advanced features

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.

advanced-row-modelAdvanced row modelwts-data-table/remote · wts-data-table/remote-viewport

Bounded external windows and server-owned row spaces.

indexed-searchIndexed searchwts-data-table/search · wts-data-table/search-filters

Indexed and database-aware filtering for large collections.

background-exportBackground exportwts-data-table/export-jobs · wts-data-table/durable-export

Durable asynchronous exports that outlive a browser request.

worker-processingWorker processingwts-data-table/worker-engine · wts-data-table/worker-table

Move data processing off the UI thread.

live-dataLive datawts-data-table/live-data · wts-data-table/live-transports

Apply ordered real-time changes from WebSocket or custom transports.

server-analyticsServer analyticswts-data-table/pivot-controller · wts-data-table/pivot-builder

Build server-backed pivot and analytical queries.

spreadsheet-formulasSpreadsheet formulaswts-data-table/formula-engine · wts-data-table/formula-editor

Parse, calculate, edit, and project workbook formulas.

collaborative-editingCollaborative editingwts-data-table/collaboration-client · wts-data-table/collaboration-table

Synchronize concurrent editing through application transports.

governed-editingGoverned editingwts-data-table/governance-client · wts-data-table/governance-panel

Apply review, policy, audit, and controlled-change workflows.

report-designerReport designerwts-data-table/report-controller · wts-data-table/report-designer

Build 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
});
08

Developer guides

Continue with site-native guides for complete workflows, edge cases, security boundaries, server protocols, and production decisions.