FIG-001/ COMPOSE

every plugin.

A single table wired through createTable with the full plugin stack composed at once — text + column filters, sortable headers, pagination, sub-rows, group-by, expansion, selection, column resizing, hidden columns, column ordering, and data export.

  • Plugins compose declaratively on the second argument to createTable — each one returns a fresh instance, so order doesn't matter for setup, only for which derived state wraps which.
  • Header + body rows are produced by separate methods on the view model so you can inject merge, group, and resize behaviour without rewriting the render loop.
  • Filter renderers (TextFilter, NumberRangeFilter, SelectFilter) are ordinary Svelte components passed through createRender — bring your own UI library.
↩ all examples
pattern · plugin composition mode · live running source
Hidden columns
Pagination
1 / 0
Column order
Name (0 records, 0 in page)
Info (0 samples)
Summary
First Name
Last Name
Age
Status
Visits
Profile Progress
Mohammad Crist — 20 yo — 60%
MohammadCrist20single8760
Keara Ledner — 38 yo — 10%
KearaLedner38relationship210
Jimmie Jenkins — 54 yo — 7%
JimmieJenkins54relationship237
Presley Schneider — 26 yo — 54%
PresleySchneider26single9054
Brendan Schumm — 59 yo — 51%
BrendanSchumm59complicated051
Geneva Leannon — 51 yo — 98%
GenevaLeannon51single3698
Estelle Monahan — 42 yo — 28%
EstelleMonahan42single528
Kate Osinski — 54 yo — 73%
KateOsinski54complicated2473
Kailee Hammes — 26 yo — 59%
KaileeHammes26single459
Desiree Pollich — 36 yo — 13%
DesireePollich36complicated9413
Sebastian Schumm — 44 yo — 24%
SebastianSchumm44relationship5324
Tate Schmeler — 49 yo — 80%
TateSchmeler49single7080
Tina Ullrich-Dietrich — 21 yo — 1%
TinaUllrich-Dietrich21relationship101
Jeremy Bednar — 23 yo — 65%
JeremyBednar23single1165
Florian Lebsack — 55 yo — 86%
FlorianLebsack55complicated5286
Ian Glover — 36 yo — 32%
IanGlover36relationship232
plugin state · debug
{
  "groupByIds": [],
  "sortKeys": [],
  "filterValues": {
    "visits": [
      null,
      null
    ]
  },
  "selectedDataIds": {
    "1": true
  },
  "columnIdOrder": [],
  "hiddenColumnIds": [],
  "expandedIds": {
    "1": true
  },
  "columnWidths": {
    "age": 100
  }
}
category · compose
sheet · sheet 01 / 01
⟳ to re-run