api reference
Types and the glossary
Every type alias the declarations export, with its definition, and the value and result types the surfaces hand back. Every type name on every page links here.
API reference › Types and the glossary
All 13 pages Everything on one page → Developer guide →
Type reference
Generated from the type declarations, so it always matches the release. Each surface lists its properties, its methods and the events it raises as three tables; an option or value type lists its members once.
Glossary of value types
The value and result types the surfaces above hand back, alphabetical.
AcfResult
Autocorrelation (ACF) and partial autocorrelation (PACF) arrays.
| Property | Type | Description |
|---|---|---|
| acf | number[] | The autocorrelation at each lag; index 0 is lag 0 and is always 1. |
| pacf | number[] | The partial autocorrelation at each lag; index 0 is 1, and `pacf[1] === acf[1]`. |
| bounds | { upper: number; lower: number } | The approximate ±1.96/√n white-noise confidence band. |
| n | number | The series length the ACF/PACF were computed over. |
| nlags | number | The maximum lag. |
| approximate | boolean | Always true: the ±1.96/√n band is an approximation. |
AdfResult
The Augmented Dickey-Fuller stationarity test result.
| Property | Type | Description |
|---|---|---|
| statistic | number | The ADF t-statistic on the lagged level. |
| usedLag | number | The number of augmenting lags chosen by AIC. |
| nobs | number | The observations the final regression used. |
| criticalValues | { '1%': number; '5%': number; '10%': number } | MacKinnon's constant+trend critical values at the 1%, 5% and 10% levels. |
| pValue | number | An approximate p-value, interpolated across the critical-value ladder. |
| pApproximate | boolean | Always true: the p-value is an interpolation, not the MacKinnon surface. |
| stationary | boolean | Whether the series is stationary at the 5% level. |
| verdict | string | The plain-language verdict: `'stationary'` or `'non-stationary'`. |
| regression | 'ct' | The regression form used - always `'ct'` (constant + trend) in v1. |
AggregateProvenance
How one aggregate was routed, for `lastPlan()` provenance.
| Property | Type | Description |
|---|---|---|
| id | string | The output column the aggregate fills. |
| col | string | The column being reduced. |
| fn | string | The reduction asked for - `sum`, `avg`, `p95` and the rest. |
| class | PushdownClass 'identical' | 'may-differ' | 'fallback' | How the engine result relates to the grid kernel. |
| reason | string | Why it is client-side, when it is (config, fallback, or the guard). (optional) |
| weight | string | The column supplying the weights, for a weighted reduction. (optional) |
| params | Record<string, unknown> | Parameters the statistic takes, carried through so an adapter emits the matching SQL (e.g. a trim share). (optional) |
AggregateRequest
One aggregate the grid asks the source to compute over the matching set. `params` carries e.g. `{ share: 0.1 }` so an adapter emits the matching SQL; `weight` names the second column for a two-column stat like `correlation`.
| Property | Type | Description |
|---|---|---|
| id | string | Keys the result back to the request. |
| col | string | The column to reduce. |
| fn | string | The statistic name, as used in `total: '<name>'`. |
| weight | string | The second column, for a two-column statistic. (optional) |
| params | Record<string, unknown> | Parameters the statistic takes, e.g. a trim share. (optional) |
AnomalyReason
| Property | Type | Description |
|---|---|---|
| column | string | The column that put this row over the line. |
| name | string | The column's display name, or its id. |
| value | number | The row's value in that column. |
| score | number | The modified z-score, for the `modifiedZScore` method. (optional) |
| lower | number | The lower fence, for the `iqr` method. (optional) |
| upper | number | The upper fence, for the `iqr` method. (optional) |
| method | Extract<OutlierMethod, 'modifiedZScore' | 'iqr'> | Which rule flagged it. (optional) |
AnomalyReport
| Property | Type | Description |
|---|---|---|
| method | Extract<OutlierMethod, 'modifiedZScore' | 'iqr' | 'mahalanobis'> | Which rule produced the report. |
| k | number | The IQR fence multiplier, for the `iqr` method. (optional) |
| n | number | How many rows the scan ran over. |
| rows | AnomalyRow[] | The flagged rows, worst first. |
| flagged | number | How many rows were flagged. |
| skipped | string[] | The column ids that were not numeric and so could not be scored. |
| scored | number | How many numeric columns were scored (univariate). (optional) |
| columns | unknown | Per-column summaries (univariate): the centre, spread and fence per column. (optional) |
| df | number | The degrees of freedom of the χ² cut (multivariate). (optional) |
| cutoff | number | null | The χ² cut the squared distance is compared against (multivariate). (optional) |
| center | number[] | The joint centre the distances are measured from (multivariate). (optional) |
| used | number | How many complete rows defined the metric (multivariate). (optional) |
| singular | boolean | Whether the covariance was singular and had to be regularised (multivariate). (optional) |
AnomalyRow
| Property | Type | Description |
|---|---|---|
| rowKey | string | null | The row key - stable across a sort or a feed, where the index is not. |
| index | number | The physical row index at the time of the call. |
| score | number | null | The row's headline score: its most extreme modified z-score across the flagging columns (univariate), the Mahalanobis distance (multivariate), or null for the IQR method, which has no single score. |
| squared | number | null | The squared Mahalanobis distance, for the `mahalanobis` method. (optional) |
| why | AnomalyReason[] | Why this row was flagged: the columns and how far, so it is explainable. |
ApproximateEntry
One entry of the approximate maintenance tier.
| Property | Type | Description |
|---|---|---|
| sketch | string | The sketch that backs this kernel: `HyperLogLog`, `KLL`, `SpaceSaving`. |
| bound | ErrorBound | The error bound the sketch is verified to meet. |
CapabilityInterval
An interval for a capability index, by Bissell's approximation.
| Property | Type | Description |
|---|---|---|
| index | number | The point estimate the interval is around - the Cpk or Ppk it was computed for. |
| lower | number | The lower bound. This is the figure that matters: a Cpk of 1.35 from thirty parts has a lower bound below 1, so "we passed 1.33" has not been shown. |
| upper | number | The upper bound. |
| margin | number | Half the interval's width - the ± figure. |
| n | number | How many readings the index was computed from. Two or more, or there is no interval. |
| confidence | number | The level the bounds were computed at, 0 to 1. 0.95 by default. |
CaptureOptions
Rendering the grid to a still image. `scale` multiplies the pixel dimensions : 2 for a retina still, 3 or 4 for a slide. `background` fills behind the grid so a PNG dropped into a deck does not show it through.
| Property | Type | Description |
|---|---|---|
| scale | number | Multiply the image's pixel dimensions - 2 for a retina-quality still, 3 or 4 for a slide. 2 by default. (optional) |
| background | string | The colour painted behind the grid, since a grid whose own background is transparent would otherwise photograph onto nothing. (optional) |
| download | boolean | Save the image as a file as well as returning it. A file name is generated when you give none, rather than the save being refused. (optional) |
| fileName | string | The name to save under. Supplying one also triggers the download unless `download: false` says otherwise. (optional) |
ChangeResult
| Property | Type | Description |
|---|---|---|
| added | Row[] | The rows that were added. |
| updated | Row[] | The rows that were updated. |
| removed | string[] | The keys of the rows that were removed. |
| rejected | RejectedRow[] | Rows that could not be applied. A batch of a thousand containing three bad ones applies the other 997 and lists the three here. (optional) |
ChartAnnotation
| Property | Type | Description |
|---|---|---|
| kind | ChartAnnotationKind 'line' | 'target' | 'band' | 'callout' | 'event' | The default is a reference line. `event` is a labelled vertical marker with a flag at a position on the x axis, described into the accessible table with that position stated. (optional) |
| value | number | A constant value, for a line, target or callout's measure position. (optional) |
| compute | ChartAnnotationCompute | string | A reduction of the annotated data instead of a constant. (optional) |
| from | number | string | A band's two edges. On a horizontal band each is a measure value, a constant or (with `fromCompute`/`toCompute`) computed. On a vertical band (`orient: 'vertical'`, each is an x position - a category or a number - and the band shades the x-range between them: an event window, a maintenance period, a recession. (optional) |
| to | number | string | A band's far edge - a measure value on a horizontal band, an x position on a vertical one. (optional) |
| fromCompute | string | Compute a band's near edge from the data instead of stating it, by reduction name. (optional) |
| toCompute | string | Compute a band's far edge from the data instead of stating it. (optional) |
| x | unknown | A vertical line's, event marker's or callout's x position: a category or a number. (optional) |
| at | unknown | An alias for `x`, read when `x` is absent. (optional) |
| orient | ChartAnnotationOrient 'horizontal' | 'vertical' | Force a line vertical rather than horizontal, or shade a `band` across an x-range rather than a measure range. (optional) |
| axis | ChartAxisSide 'left' | 'right' | 'y2' | Which measure axis the annotation reads. (optional) |
| series | string | Restrict a `compute` to one series, by its key. (optional) |
| label | string | The text drawn beside the annotation, and the sentence it contributes to the accessible table. Omitted, the annotation is drawn unlabelled. (optional) |
| colour | string | The annotation's stroke, and a band's fill. Defaults to `currentColor`. (optional) |
| opacity | number | A band's fill opacity; the default is 0.12. (optional) |
| className | string | Extra class names on the annotation's element, so a stylesheet can reach one annotation in particular. (optional) |
ChartAxis
One axis's configuration. A bare string is the title.
| Property | Type | Description |
|---|---|---|
| title | string | The axis title. A bare string in place of this whole object is taken as the title. `axis.y.title` names whatever the y values are and `axis.x.title` whatever the x values are; each is drawn beside the axis that actually carries those values, so on a type that swaps sides (`horizontalBar`) the two titles swap with it. (optional) |
| min | number | Fix the axis rather than taking its extent from the data. (optional) |
| max | number | Fix the top of the axis rather than taking it from the data. (optional) |
| ticks | number | unknown[] | A tick count, or the exact values to tick. (optional) |
| format | string | ((value: unknown) => string) | A format mask, or a function of the value. (optional) |
| grid | boolean | Draw the gridlines this axis owns. Default true for the measure axis. (optional) |
| labels | boolean | Draw the tick labels. (optional) |
| scale | ChartScale 'auto' | 'linear' | 'time' | 'band' | 'category' | Pin the x axis's scale rather than taking it from the column's type. The default, `'auto'`, is the rule stated in the charts section: a temporal column type (`date`, `datetime`, `timestamp`, `dateString`) draws a time axis, a numeric one draws a linear axis whatever its distinct count, and everything else draws bands. `'band'` is how a numeric code column - a quarter, a rating, a star count - asks for its bands back; `'linear'` and `'time'` put a column the grid types as text onto a continuous axis. Only the x axis reads it. (optional) |
| every | number | Show every nth category label, on a crowded category axis. (optional) |
| rotate | boolean | 'auto' | Force the category labels' rotation rather than deciding it. (optional) |
| window | Pick<WindowSpec, 'kind' | 'span'> | A rolling window for the axis domain, in the shipped `WindowSpec` vocabulary that rolling statistics already use. Only `{ kind: 'time', span }` applies to an axis: the domain becomes the last `span` milliseconds ending **now**, so the chart keeps scrolling left while the feed is silent - the thing a count window cannot do, because with no rows arriving nothing changes. Advanced on a low-frequency clock (a quarter of the window, between 50 ms and 1 s), never per frame, and stopped when the chart is destroyed or its document is hidden. Needs a continuous x axis carrying wall-clock times; `{ kind: 'count' }` is the source's `maxRows` and is refused here rather than given a second meaning. (optional) |
ChartBrushEvent
`brush`: a range was dragged out on an axis, **before** the chart zooms or filters on it. A handler that wants to take the brush over calls `preventDefault()` on the payload, which stops the chart zooming its own domain or filtering the grid for this drag; writing `defaultPrevented` directly still works, the same way.
| Property | Type | Description |
|---|---|---|
| mode | string | What the spec asked a brush to do: `zoom` the chart's own domain, or `filter` the grid. |
| kind | string | What the dragged range resolved to: a continuous `range`, or the discrete `values` of a category axis. |
| values | unknown[] | The category values the drag covered, on a category axis. |
| range | { from: unknown; to: unknown } | null | The numeric or time bounds the drag covered, on a continuous axis, or null. |
| axis | string | Which axis was dragged: `x`, `y` or `y2`. |
| column | string | null | The grid column the range names - the measure's on a value axis, the dimension's on `x`. |
| defaultPrevented | boolean | True once a handler has called `preventDefault`. Absent until then - a handler may also set it directly, which the chart honours the same way. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| preventDefault | (): void | - | void | Stop the chart acting on this brush - no zoom, no filter. It takes no reason, and there is no `<action>:cancelled` event: this is a default a host takes over, not a mutation a host vetoes. |
ChartClickEvent
`click`: a mark was clicked, **before** the chart does anything about it. The one event most callers want: it is how a click on a mark becomes a filter on the grid. It fires whether or not the spec sets `filterOnClick`, and it fires before the filter, the drill or the selection the chart would otherwise apply - so a host that wants to do something else entirely (open a drawer, cross-filter a second grid) calls `preventDefault()` and takes the click over.
| Property | Type | Description |
|---|---|---|
| defaultPrevented | boolean | True once a handler has called `preventDefault`. Absent until then - a handler may also set it directly, which the chart honours the same way. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| preventDefault | (): void | - | void | Stop the chart acting on this click - no filter, no drill, no selection change. It takes no reason, and there is no `<action>:cancelled` event: this is a default a host takes over, not a mutation a host vetoes. |
ChartDatumEvent
A mark, in the terms a host thinks in: `hover`'s payload, and the shape `click` adds its `preventDefault` to. One shape for every chart type, so a host need not know whether it attached to a pie, a bar chart, a treemap, a map, a matrix or a network to read what the pointer is on: a type with no third channel leaves the field null. There is no `point` wrapper - the fields are flat.
| Property | Type | Description |
|---|---|---|
| label | string | The mark's label: the category, the slice, the tile, the region or the node. |
| value | number | null | The measure under the mark when a single series sits there, otherwise null - in which case the per-series numbers are in `series`. |
| category | unknown | The value to filter `column` to: the stored category behind the label, or null where the geometry has none. |
| column | string | null | The grid column the mark filters on, or null (a network node is a source in some rows and a target in others). |
| series | ChartDatumSeries[] | null | The per-series readings under the mark, or null on a geometry that has one value per mark. |
| rowKeys | unknown[] | The keys of the source rows behind the mark; empty where the geometry keeps none. |
| path | unknown[] | The mark's path from the drawn root, on a hierarchy - a treemap tile, a sunburst arc, a flow end. (optional) |
| depth | number | How deep the mark sits below the drawn root, on a hierarchy. (optional) |
| from | number | A histogram bin's lower bound, present only on a bin. (optional) |
| to | number | A histogram bin's upper bound, present only on a bin. (optional) |
| native | object | The DOM pointer event behind it. |
ChartDatumSeries
One series' reading under a mark, on a chart with several series. `value` is that series' own number at the mark, and `rows` how many source rows were aggregated into it - a count, not the rows themselves.
| Property | Type | Description |
|---|---|---|
| key | string | The series key, as bound. |
| label | string | The series' display label. |
| value | number | null | This series' value at the mark. |
| rows | number | How many source rows were aggregated into that value. |
ChartDrawEvent
`draw`: the chart finished a draw, at its settled size. Raised once per `draw()`, after the second pass a legend or heading that changed the plot box forces - so a handler never sees the in-between, wrongly-sized pass. A draw that showed the empty state instead raises nothing.
| Property | Type | Description |
|---|---|---|
| chartType | string | The type drawn, which for an extension type is its registered name. |
| categories | unknown[] | The categories drawn, in plot order. |
| empty | boolean | Whether the binding had nothing to draw. |
ChartDrillEvent
`drill`: the chart descended into a hierarchy, or `ascend()` came back up. Raised after the new level is set and before it is drawn.
| Property | Type | Description |
|---|---|---|
| path | unknown[] | The drill path from the top, a label per level. |
| label | string | null | The label just descended into, or the level now shown after an `ascend()`. |
ChartEvent
What every chart event carries, whatever it is about. The three members the chart's own dispatcher adds to each payload before it reaches a handler, so one handler bound to several charts can tell which chart and which grid it is being told about.
| Property | Type | Description |
|---|---|---|
| type | ChartEventName 'click' | 'hover' | 'leave' | 'focus' | 'draw' | 'drill' | 'brush' | 'legend' | Which event this is: `click`, `hover`, `leave`, `focus`, `draw`, `drill`, `brush` or `legend`. |
| chart | Chart | The chart that raised it. |
| grid | Grid | The grid the chart draws, as given in the spec. |
ChartEventPayloads
What a handler receives, per chart event.
| Property | Type | Description |
|---|---|---|
| click | ChartClickEvent | The mark clicked, with `preventDefault` to take the click over. |
| hover | ChartDatumEvent | The mark under the pointer, the same shape a click reports. |
| leave | ChartEvent | Nothing but the chart and its grid: the pointer is over no mark. |
| focus | ChartFocusEvent | The mark the keyboard is on. |
| draw | ChartDrawEvent | What was drawn, and whether there was anything to draw. |
| drill | ChartDrillEvent | The new drill path. |
| brush | ChartBrushEvent | The range dragged out, and the column it names, with `preventDefault` to take the brush over. |
| legend | ChartLegendEvent | The legend entry clicked, and every hidden series after it. |
ChartFocusEvent
`focus`: the keyboard moved onto a mark, which has just been given the `aria-label` a screen reader announces.
| Property | Type | Description |
|---|---|---|
| label | string | The focused mark's label. |
| value | number | null | The focused mark's value. |
| index | number | The mark's position in the drawn order. |
ChartLabels
Data labels beside each mark.
| Property | Type | Description |
|---|---|---|
| position | ChartLabelPosition 'outside' | 'inside' | 'auto' | Where a label sits relative to its mark. `outside` (the default) puts it past the mark, away from the baseline; `inside` and `auto` prefer within the mark and fall back outside when it will not fit. An outside label with no room above it falls inside whatever this says, rather than being dropped from the tallest bar. (optional) |
| format | string | ((value: unknown, point?: unknown) => string) | A format mask, or a function of the value. (optional) |
| minGap | number | Pixels two labels must leave between them before both are kept. (optional) |
ChartLegendEvent
`legend`: a legend entry was clicked and the hidden set already changed; the redraw follows.
| Property | Type | Description |
|---|---|---|
| label | string | The clicked entry's label. |
| key | string | The clicked entry's series key. |
| hidden | boolean | Whether that series is now hidden. |
| hiddenKeys | string[] | Every hidden series key after the click. |
ChartMeasure
| Property | Type | Description |
|---|---|---|
| col | string | The column reduced for this measure. |
| fn | TotalName 'sum' | 'min' | 'max' | 'avg' | 'count' | 'first' | 'last' | 'countValues' | (string & {}) | A reduction name, as the totals row uses. (optional) |
| type | ChartMeasureType 'bar' | 'line' | 'area' | The mark this measure draws with, on a combo chart. (optional) |
| axis | Side 'left' | 'right' | Which axis it belongs to, on a combo chart. (optional) |
| title | string | The series label a combo's legend and axis titles use. `label` is read too, as an undeclared alias, for a caller already using it; `title` wins when both are given. Falls back to the measure column's own `title`, then to `col`, when neither is set. (optional) |
ChartNode
One node of a `network` chart, as the host declares it. `x` and `y` are fractions of the plot, 0 to 1, measured from its top-left. A node giving both is **pinned** there and takes no part in the force simulation; the rest are laid out around it, deterministically. Giving only one of the two is not a position and the node is laid out.
| Property | Type | Description |
|---|---|---|
| id | string | Matches a value in the `source` or `target` column. |
| label | string | Drawn beneath the node. The id is used when this is absent. (optional) |
| icon | string | A name in the grid's icon registry, drawn inside the node's disc. (optional) |
| x | number | Where to pin it, as a fraction of the plot's width. (optional) |
| y | number | Where to pin it, as a fraction of the plot's height. (optional) |
ChartTrend
One trend or forecast overlay.
| Property | Type | Description |
|---|---|---|
| method | ChartTrendMethod | The overlay method; `linear` by default. (optional) |
| forecast | number | For the linear method, how many steps to project the line past the data as a dashed forecast. Ignored by the moving-average and exponential methods, which have no slope to extrapolate. (optional) |
| window | number | For the moving-average method, the trailing window in points; 3 by default. (optional) |
| period | number | An alias for `window`. (optional) |
| kind | SmoothingMethod 'ses' | 'holt' | For the exponential method, single smoothing (`ses`) or Holt's level+trend (`holt`). (optional) |
| alpha | number | For the exponential method, the level factor in `[0, 1]`; omit to fit it. (optional) |
| beta | number | For Holt's exponential smoothing, the trend factor in `[0, 1]`; omit to fit it. (optional) |
| band | boolean | 'prediction' | 'confidence' | The uncertainty band shaded around a linear `forecast`. The Student-t `prediction` band (a future observation) by default; `confidence` shades the narrower mean-response band; `false` opts out and leaves the bare dashed line. Ignored where there is no linear forecast to put a band on. (optional) |
| confidence | number | The forecast band's confidence level in `(0, 1)`; 0.95 by default. (optional) |
| label | boolean | `false` suppresses the R² label on a linear trend. (optional) |
ClipboardOptions
| Property | Type | Description |
|---|---|---|
| headers | boolean | Put a row of column titles above the copied cells. (optional) |
| rows | ExportRowsScope 'visible' | 'all' | 'selected' | 'range' | What to copy: `'visible'`, `'all'`, `'selected'` rows, or `'range'` for the selected cell rectangle. (optional) |
| sanitise | boolean | Apply the CSV/Excel formula-injection guard to copied cells: prefix a field beginning with `=`, `+`, `-`, `@`, a tab or a CR with an apostrophe so a spreadsheet treats it as text. **Off by default** (unlike CSV/Excel export, which default it on), because the clipboard most often round-trips back into a grid or cell range where the apostrophe would corrupt the value. Turn it on when your users paste the clipboard into Excel or Google Sheets. (optional) |
ColumnDifference
How one column differs between the filtered subset and its population.
| Property | Type | Description |
|---|---|---|
| column | string | The column id. |
| name | string | The column's display name, or its id. |
| measure | Extract<DriftMeasure, 'standardizedMeanDifference' | 'categoricalTotalVariation'> | The effect size reported for this column's family: the standardized mean difference for a numeric column, the total variation of the category mix for a categorical one. Never a p-value. |
| magnitude | number | null | The effect size in its own terms, or null when it has no scale here. |
| distance | number | The total variation distance between subset and population, 0 to 1 - the common scale both families reduce to, and what the ranking sorts by. |
| direction | number | +1 when the subset sits above the population, −1 below, 0 for a mix. |
| subsetN | number | How many rows the subset comparison stood on. |
| populationN | number | How many rows the population comparison stood on. |
| reliable | boolean | False when the subset is too small to read the difference from. |
ColumnDistribution
| Property | Type | Description |
|---|---|---|
| n | number | How many usable numbers the column yielded. Dates count, as their epoch milliseconds; nulls and unparseable values do not. |
| min | number | The smallest usable value in the column. |
| max | number | The largest usable value in the column. |
| mean | number | The arithmetic mean, accumulated by Welford's method so a column of large values with a small spread keeps its precision. |
| stddev | number | The sample standard deviation, which `from: 'stddev'` scales against. Zero when there is only one value. |
| median | number | The middle value, by the same quantile definition the totals row and the formula engine use. |
| q1 | number | The first quartile, which `bottomPercent` and outlier rules resolve against. |
| q3 | number | The third quartile, which `topPercent` and outlier rules resolve against. |
| iqr | number | The interquartile range, `q3 - q1`. |
| sorted | number[] | Every usable value, ascending - what a percentile threshold is read from. |
ColumnProfile
| Property | Type | Description |
|---|---|---|
| column | string | The id of the column this profile describes. |
| rows | number | How many rows the profile was computed over - the rows the filters leave, or the window the source is holding. |
| present | number | How many of those rows carry a value. Counted as values, not as numbers, so a text column is not reported as entirely missing. |
| missing | number | How many of those rows are null, undefined or empty - the first question a profile is opened to answer. |
| numeric | number | How many of those rows carry a value the statistics could use - a number. `present` counts values of any kind, so the two differ on a text column and on one with unparseable entries. |
| coverage | { covered: number; total: number } | What the figures were computed over, when that is a window rather than every matching row (a source that holds everything omits it, so `if (profile.coverage)` is the "is this windowed" test). (optional) |
| distinct | number | How many different values the column holds over those rows. |
| min | number | null | The smallest numeric value, or null on a column with no numbers in it. |
| max | number | null | The largest numeric value, or null on a column with no numbers in it. |
| mean | number | null | The arithmetic mean of the numeric values, or null when there are none. |
| median | number | null | The middle value, which says whether the mean is representative. Null when there are no numbers. |
| q1 | number | null | The first quartile - a quarter of the values fall below it. Null when there are no numbers. |
| q3 | number | null | The third quartile - three quarters of the values fall below it. Null when there are no numbers. |
| iqr | number | null | The interquartile range, `q3 - q1`: the spread of the middle half, which outliers cannot inflate. Null when there are no numbers. |
| stddev | number | null | The sample standard deviation, needing at least two numbers; null otherwise. |
| outliers | number | How many values fall outside Tukey's fence, 1.5 interquartile ranges beyond the quartiles - an outlier here means what it means on a box plot. |
| histogram | HistogramBin[] | The shape rather than the summary: the value counts per bucket. Two columns can share a mean, a median and a deviation and still be a bell and a barbell. Empty on a column with no numbers. |
| topValues | TopValue[] | For a categorical (non-numeric) column, the commonest values, largest first. Absent for a numeric column, whose shape the numeric figures and the histogram already carry. (optional) |
CommentDescriptor
Counts for one cell. Never bodies: this is consulted on every repaint.
| Property | Type | Description |
|---|---|---|
| count | number | How many comments the cell carries. A cell whose count reaches zero is dropped from the index rather than kept at 0. |
| unresolved | number | How many of them are unresolved - what the marker colours itself by, and what the hidden-comment count sums. |
| updated | number | When the cell's thread last changed, as epoch milliseconds, so a recently touched cell can be distinguished from an old one. |
ConfidenceInterval
An interval for an estimated figure, at a stated level.
| Property | Type | Description |
|---|---|---|
| mean | number | The sample mean the interval is centred on. |
| lower | number | The lower bound: the mean less the margin. |
| upper | number | The upper bound: the mean plus the margin. |
| margin | number | Half the interval's width - the ± figure. Computed from the t distribution rather than the normal one, which is materially too narrow below about thirty readings. |
| n | number | How many readings it was computed from. Fewer than two gives no interval at all: one reading is a number with no idea how wrong it is. |
| confidence | number | The level the bounds were computed at, 0 to 1. |
CsvExportOptions
| Property | Type | Description |
|---|---|---|
| delimiter | string | What separates fields. A comma by default; a field containing it is quoted. (optional) |
| quote | string | The quote character. A double quote by default, doubled inside a quoted field as RFC 4180 requires. Set it to an empty string to quote nothing. (optional) |
| lineEnding | string | What separates rows. `\r\n` by default, which is what RFC 4180 and Excel expect. (optional) |
| headers | boolean | Write a header row of column titles. On by default. (optional) |
| columns | string[] | Which columns to export, by id and in this order. Columns the grid hides, or that opted out with `export.csv: false`, are still excluded. (optional) |
| hidden | boolean | Include the columns the grid hides, rather than only the visible ones. Off by default. Columns that opted out with `export.csv: false` are still excluded. (optional) |
| rows | Extract<ExportRowsScope, 'visible' | 'all' | 'selected'> | Which rows to export: `'visible'` (the default - what the filters and sort leave), `'all'`, or `'selected'`. (optional) |
| sanitise | boolean | { enabled?: boolean; prefix?: string; characters?: string; keepNumbers?: boolean; } | The formula-injection guard, **on by default**: a field beginning with `=`, `+`, `-`, `@`, a tab or a CR is prefixed with an apostrophe, because a spreadsheet would otherwise execute it when the file is opened. `false` turns it off; an object tunes it - `characters` to widen or narrow the set, `prefix` to change the escape, `keepNumbers: true` to leave a field that is entirely a number alone (so a negative currency stays numeric). (optional) |
| bom | boolean | Emit a UTF-8 byte-order mark, so Excel detects the encoding instead of guessing at it. Off by default. (optional) |
| fileName | string | The name for the downloaded file. A `.csv` extension is added when it has none, and a name is generated when you give none. (optional) |
| download | boolean | Trigger a browser download instead of returning the text. The call then returns the blob, so a headless caller still gets something usable. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| processCell | (p: CellParams) => string | p: CellParams | => string | Rewrite each cell's text as it is written out. It receives the same parameter bag a renderer gets, so one implementation serves rendering, tooltips and export alike. (optional) |
CurrencyConfig
| Property | Type | Description |
|---|---|---|
| code | string | The default currency code for bare numeric input, e.g. `'USD'`. (optional) |
| display | string | The currency to render and aggregate in. Omit to keep each cell's own. (optional) |
| rates | RateSource | The caller's rate source: a `(from,to)=>rate|null` fn or a rate table. (optional) |
| rateBase | string | The code a rate *table* is denominated in, when not the one mapping to 1. (optional) |
| decimals | number | Fixed fraction digits; omit for the code's own convention. (optional) |
| locale | string | The locale for number formatting. (optional) |
| nullDisplay | string | Text for a null cell. (optional) |
| missingRate | string | The loud marker rendered when a needed rate is missing. (optional) |
| excel | string | An Excel number-format override. (optional) |
| codes | string[] | The code list a currency editor's picker offers. (optional) |
DatasetColumnDifference
| Property | Type | Description |
|---|---|---|
| column | string | The column id, present on both grids. |
| name | string | The column's display name, or its id. |
| measure | Extract<DriftMeasure, 'pooledStandardMeanDifference' | 'categoricalTotalVariation'> | The effect size reported for this column's family: the pooled standardised mean difference (Cohen's d) for a numeric column, the total variation of the category mix for a categorical one. Never a p-value. |
| magnitude | number | null | The effect size in its own terms, or null when it has no scale here. |
| distance | number | The total variation distance between the two datasets, 0 to 1 - the common scale both families reduce to, and what the ranking sorts by. |
| direction | number | +1 when dataset A sits above dataset B, −1 below, 0 for a mix. |
| nA | number | How many rows the first grid's side stood on. |
| nB | number | How many rows the second grid's side stood on. |
| reliable | boolean | False when either side is too small to read the difference from. |
DatasetComparison
| Property | Type | Description |
|---|---|---|
| ranked | DatasetColumnDifference[] | Every shared column, largest difference first. |
| nA | number | How many rows the first grid contributed (its filtered set). |
| nB | number | How many rows the second grid contributed (its filtered set). |
| unmatched | { onlyA: string[]; onlyB: string[] } | Columns present on only one side, which cannot be compared. |
| measures | { numeric: string; categorical: string; common: string } | The measure each family reports, and the common scale, named for a legend. |
DiagnosticWarning
One thing the grid has flagged as probably a mistake.
| Property | Type | Description |
|---|---|---|
| id | string | Stable identifier, nameable in a support conversation. |
| message | string | A plain description of what was found. |
| values | Record<string, unknown> | The specific values involved, so the warning is actionable. |
| count | number | How many times a diagnostic check has raised this warning. Always 1 for a warning that came from a `[lattice]` console message, which is reported once and not counted. |
| first | number | When it was first raised, as epoch milliseconds. |
| last | number | When it was last raised, as epoch milliseconds - which, with `count`, says whether it is still happening. |
| source | DiagnosticSource 'check' | 'reported' | 'info' | `'check'` raised by a diagnostic check, `'reported'` from `warnOnce`. |
ErrorBound
How an approximate reduction's error bound holds, and what it measures.
| Property | Type | Description |
|---|---|---|
| kind | ErrorBoundKind 'deterministic' | 'probabilistic' | 'exact' | `deterministic` every run, `probabilistic` in expectation, `exact` to float rounding. |
| metric | ErrorBoundMetric 'absolute' | 'relative' | 'rank' | 'none' | What the number measures. `rank` is a fraction of the rank, for quantiles. |
| value | number | The bound itself, in the unit `metric` names. |
| statement | string | A one-line human reading of the guarantee. |
ExcelBorderSpec
A cell border, per edge. `true` means a thin line; a string names the style.
| Property | Type | Description |
|---|---|---|
| left | boolean | string | The line on the cell's left edge: `true` for a thin line, or a named style (`'thin'`, `'medium'`, `'hair'`, …). Omit for no line. (optional) |
| right | boolean | string | The line on the cell's right edge, in the same forms. (optional) |
| top | boolean | string | The line on the cell's top edge, in the same forms. (optional) |
| bottom | boolean | string | The line on the cell's bottom edge, in the same forms. (optional) |
ExcelCellStyle
A conditional-formatting rule's rendering, returned by `cellStyle`.
| Property | Type | Description |
|---|---|---|
| bold | boolean | Draw the cell's text bold. (optional) |
| italic | boolean | Draw the cell's text italic. (optional) |
| colour | string | Font colour as 6- or 8-digit hex/ARGB, e.g. 'FFFF0000'. `color` is an alias. (optional) |
| color | string | American spelling of `colour`; either is accepted. (optional) |
| fill | string | Solid fill colour as 6- or 8-digit hex/ARGB. (optional) |
ExcelExportOptions
| Property | Type | Description |
|---|---|---|
| sheetName | string | The worksheet's name. `'Sheet1'` by default, and made unique and legal for Excel if it is neither. (optional) |
| freezePanes | boolean | Freeze the header rows and the pinned columns, so they stay in view as the sheet scrolls. On by default. (optional) |
| variantFills | boolean | Carry the grid's cell variants across as solid fills. Off by default: a printed spreadsheet is usually wanted plain. (optional) |
| borders | boolean | string | ExcelBorderSpec | Draw cell borders on the data grid. `false` (default) is borderless; `true` draws a thin box; a string names the line style; an object picks edges. (optional) |
| hiddenColumns | ExcelHiddenColumns 'omit' | 'hidden' | What to do with grid-hidden columns. `'omit'` (default) drops them; `'hidden'` keeps them as Excel-hidden columns for round-trip fidelity. (optional) |
| autoFilter | boolean | Put Excel's filter dropdowns on the header row, so the sheet opens ready to filter. On by default; `false` writes a plain header. (optional) |
| merges | string[] | Explicit merged body ranges in A1 form, e.g. ['A3:A4']. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| onProgress | (p: { written: number; total: number }) => void | p: { written: number; total: number } | => void | Called as the workbook streams out, with how many rows have been written and how many there are, so a large export can show progress. (optional) |
FacetState
A column's computed distribution.
| Property | Type | Description |
|---|---|---|
| bounds | FacetBounds | null | Where the bars are. `null` until the column has been counted, or when it has no histogram. |
| counts | Uint32Array | null | Counts under every filter except this column's own. Aligned to `buckets`. |
| unfiltered | Uint32Array | null | Counts with no filter applied, for the "40 of 200" reading. |
| stale | boolean | True while a recount is outstanding; draw the previous counts faded. |
| suppressed | string | null | Why there is no histogram - `'disabled'`, `'type'`, `'rows'`, `'streaming'`, `'cardinality'`, `'no-provider'` - or `null` when there is one. |
FindCount
How many matches there are and which is current. `windowed` is the honest scope flag: over a paged pushdown source only the loaded rows are searched, so `total` counts matches in `loaded` rows out of the `rows` the source reports for the whole matching set.
| Property | Type | Description |
|---|---|---|
| current | number | 1-based position of the current match; 0 when there is none. |
| total | number | How many matches were found in the rows that were actually searched. |
| complete | boolean | False while the bar's sliced scan is still running, so a partial count is never read as final. |
| windowed | boolean | True when the search covered a window rather than the whole set - a paged or streaming source. It is the flag that keeps `total` honest. |
| loaded | number | Rows the search actually read; a windowed source's not-yet-fetched placeholders are not counted. |
| rows | number | The rows the source reports for the whole matching set, when it can say. |
FindMatch
One matching cell.
| Property | Type | Description |
|---|---|---|
| key | string | The key of the row the match is in. |
| colId | string | The column the match is in. |
| index | number | The display index, or -1 for a row pinned to an edge. |
| pinned | RowPin | null | Which sticky strip a pinned row is in; null for a body row. |
FindQuery
How `grid.find(text, opts)` matches. Defaults: case-insensitive, substring, every visible column, starting from the first row. Find matches the **formatted display text** - what the cell shows, a column `format` included - never a raw value; there is no regular-expression mode.
| Property | Type | Description |
|---|---|---|
| caseSensitive | boolean | Match letter case exactly. Default false. (optional) |
| wholeCell | boolean | The whole cell text must equal the search text rather than contain it. Default false. (optional) |
| columns | string[] | string | null | Search only these column ids. Omitted searches every visible column. (optional) |
| from | number | The display index to start from: the first match at or after it becomes current. Default 0. (optional) |
FindState
The current query and whether the bar is showing.
| Property | Type | Description |
|---|---|---|
| text | string | What is being searched for. Empty when nothing is. |
| caseSensitive | boolean | Whether the search distinguishes case. Off by default. |
| wholeCell | boolean | Whether a cell must match the text entirely rather than contain it. Off by default. |
| columns | string[] | null | The columns being searched, or `null` for every visible column. |
| open | boolean | Whether the find bar is showing. It flips on a headless grid too, so a host driving its own control can follow it. |
ForecastPoint
One forecast step: the point estimate and, where a band applies, its interval.
| Property | Type | Description |
|---|---|---|
| step | number | The step ahead, `1 … horizon`. |
| at | number | The time-axis position the step is stamped at, extrapolated at the mean spacing. |
| mean | number | The point forecast. |
| lower | number | null | The prediction-interval lower bound (a future observation), or null when none applies. |
| upper | number | null | The prediction-interval upper bound, or null when none applies. |
| lowerMean | number | null | The mean-response (confidence) lower bound - `linear` only, the band a trendline draws. (optional) |
| upperMean | number | null | The mean-response (confidence) upper bound - `linear` only. (optional) |
| se | number | null | The prediction standard error the band was built from, or null when none applies. |
ForecastResult
A forecast: the chosen model, its parameters, and the projected points.
| Property | Type | Description |
|---|---|---|
| method | ForecastMethod 'movingAverage' | 'ses' | 'holt' | 'holtWinters' | 'linear' | Which method produced it. |
| horizon | number | How many steps ahead were projected. |
| confidence | number | The band level, e.g. 0.95. |
| n | number | How many finite readings the fit used. |
| sigma | number | null | The residual standard deviation the bands were built from, or null when there was none. |
| r2 | number | The fit's coefficient of determination - `linear` only. (optional) |
| params | { slope?: number; intercept?: number; alpha?: number; beta?: number; gamma?: number; period?: number; windowLen?: number; } | The model parameters: `slope`/`intercept` (linear), `alpha`/`beta`/`gamma`/`period`, or `windowLen`. |
| points | ForecastPoint[] | The forecast, one entry per step. |
GeoPack
An optional geometry pack for a geomap, as one of the `modules/geo-*` packages exports. Generated at build time from a named public source; `source`, `licence` and `attribution` record where the geometry came from and what its licence requires. A single-layer pack carries `topology` directly; a multi-layer pack (the UK) carries `layers` instead, keyed by layer name, each with its own `topology`.
| Property | Type | Description |
|---|---|---|
| id | string | The pack's identity, which `shapes: { pack: id }` names once the module has been imported. |
| title | string | What the pack covers, in words - for a picker or a caption. |
| kind | string | The family of geometry the pack holds (`world`, `uk`, `us-states`, …), so a host can tell two packs apart without parsing the id. |
| projection | ChartSpec['projection'] | The projection this geometry is meant to be drawn in; the chart uses it unless the spec names its own. (optional) |
| projectionOptions | ChartSpec['projectionOptions'] | The settings that projection needs - a centre or standard parallels - chosen for the region the pack covers. (optional) |
| source | { name: string; url: string; version: string; retrieved: string } | Where the geometry came from: the publisher, the URL, the edition, and the date it was retrieved. |
| licence | { name: string; url: string } | The licence the geometry is published under, by name and URL. |
| attribution | string | The attribution line the licence requires, verbatim, or `''` when it asks for none. |
| topology | object | The pack's geometry, as TopoJSON. Single-layer packs carry it here; a multi-layer pack carries `layers` instead. (optional) |
| layers | Record<string, { name: string; topology: object }> | A multi-layer pack's geometries, keyed by layer name, each with its own title and topology - regions, local authorities and constituencies share a coastline, so they ship together. (optional) |
| defaultLayer | string | Which layer is drawn when the spec names none. Unset, the first layer in the object is used. (optional) |
GridModule
| Property | Type | Description |
|---|---|---|
| name | string | The module's name, which `registry.has()` answers on. Registration is idempotent by it: the first one wins and a repeat is ignored, so a lazy loader may register the same module twice. |
| version | string | The module's version. Part of what makes two registrations of the same name equivalent, so a repeat that declares a different version is reported as a dropped reconfiguration rather than passing as an idle repeat. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| install | (ctx: ModuleContext): void | ctx: ModuleContext | void | Register everything the module contributes - renderers, editors, filters, data types, totals, pipes - on the registry it is handed. A module without one is ignored and says so, and a throw here leaves it unregistered. |
| uninstall | (ctx: ModuleContext): void | ctx: ModuleContext | void | Undo what `install` did. The capability set is rebuilt from the modules that remain, and subscribers are told which regions need repainting. (optional) |
GroupComparison
| Property | Type | Description |
|---|---|---|
| test | Extract<SignificanceTest, 'welch' | 'mannWhitney' | 'chiSquare'> | The test used, named so it is never hidden. |
| chosenBy | TestSelection 'auto' | 'override' | Whether the test was chosen automatically or forced by the caller. |
| reason | string | Why this test - the column family, a normality screen, or the override. |
| statistic | number | The test statistic. |
| statisticName | string | What the statistic is: `t`, `U`, or `chiSquare`. |
| df | number | null | The degrees of freedom, where the test has them; null for Mann-Whitney. |
| pValue | number | The two-sided p-value, returned as data for the caller to interpret. Never thresholded into a verdict here. |
| interval | GroupDifferenceInterval | null | The confidence interval on the difference, or null when there is none. |
| effectSize | GroupEffectSize | The paired effect size, so the p-value is never read on its own. |
| nA | number | How many rows the first group stood on. |
| nB | number | How many rows the second group stood on. |
| groups | [unknown, unknown] | The two group values compared, as keys. |
| reliable | boolean | False when either group is under the reliability floor. |
| method | string | The test's method, named per the reference-suite honesty rule. |
GroupDifferenceInterval
A confidence interval on the difference a two-sample test measured.
| Property | Type | Description |
|---|---|---|
| estimate | number | The point estimate of the difference the interval is around. |
| lower | number | The lower bound of the difference. An interval spanning zero is the honest way to say the two groups may not differ at all. |
| upper | number | The upper bound of the difference. |
| confidence | number | The level the bounds were computed at, 0 to 1. |
| method | string | The method, named for honesty: `welch-t`, `hodges-lehmann`, `newcombe`. |
| category | unknown | For a chi-square interval, which category's share the difference is of. (optional) |
GroupEffectSize
The effect size paired with a two-sample test - the "how big" half.
| Property | Type | Description |
|---|---|---|
| name | string | The named measure: `pooledStandardMeanDifference` (Cohen's d) for the numeric tests, `categoricalTotalVariation` for chi-square. |
| value | number | null | The effect size in its own terms, or null when it has no scale here. |
Heteroscedasticity
The Breusch-Pagan heteroscedasticity test result.
| Property | Type | Description |
|---|---|---|
| statistic | number | The test statistic, distributed as chi-square under the null of constant variance. |
| df | number | The degrees of freedom the statistic is judged against - one per predictor. |
| p | number | The probability of a statistic this large if the residual variance really were constant. Small means it is not, so the model's standard errors understate the uncertainty. |
| heteroscedastic | boolean | True when the test rejects homoscedasticity at the 0.05 level. |
HistogramBin
| Property | Type | Description |
|---|---|---|
| from | number | The bin's lower edge. The first bin reports the column's true minimum, which may be below where the bins were laid, because values beyond the fences are clamped into the end bins. |
| to | number | The bin's upper edge, exclusive except in the last bin, which reports the column's true maximum for the same reason. |
| count | number | How many values fell in the bin. The end bins include everything clamped in from beyond the fences, which is why an outlier shows as a bump rather than a hundred empty bars. |
HistoryEntry
| Property | Type | Description |
|---|---|---|
| seq | number | Monotonic sequence number, in the order actions were recorded. |
| type | string | What kind of action it was, e.g. `'sort'`, `'column:pin'`, `'edit'`. |
| label | string | Human text for a button, e.g. `'sort by Region'`. |
| target | string | null | The column or row the action was aimed at, where there was one. |
| at | number | When it was recorded, on the high-resolution clock. |
| delegated | boolean | True when the edit model owns the undo rather than the history stack. |
| undone | boolean | Set once the entry has been undone. (optional) |
| [key: string] | unknown | Whatever else the action that was recorded needed to replay itself - the writes behind an edit, the widths behind a resize. Private to the history model's own apply path, and not a shape to depend on. |
IconGlyph
One sprite: its view box, its path data, and how it is painted.
| Property | Type | Description |
|---|---|---|
| viewBox | string | The SVG view box the paths are drawn in, normally `'0 0 16 16'`. |
| paths | string[] | One or more SVG path `d` strings making up the glyph. |
| paint | Paint 'stroke' | 'fill' | Whether the paths are stroked or filled. Filled unless it says otherwise. |
ImportColumn
One source column as understood by the importer, after type inference ().
| Property | Type | Description |
|---|---|---|
| source | string | The heading as written in the file. |
| index | number | The column's position in each row. |
| field | string | The grid field this column maps onto; empty to exclude it from the import. |
| type | string | The inferred (or grid-dictated) type used to coerce the column's values. |
| samples | string[] | A few non-blank sample values, for the preview. |
| matched | boolean | Whether the heading matched one of the grid's own columns. |
ImportPreview
What a preview carries - everything a confirm dialog needs ().
| Property | Type | Description |
|---|---|---|
| delimiter | string | The delimiter that was used, detected or supplied. |
| header | string[] | The source column headings. |
| columns | ImportColumn[] | The per-column mapping and inference the user may edit before confirming. |
| records | Record<string, unknown>[] | Every mapped, coerced record the import would add. |
| sample | Record<string, unknown>[] | The leading records, for a preview table. |
| rowCount | number | How many data rows the file holds. |
| warnings | string[] | Anything worth flagging before confirming - a ragged file, a bad quote. |
ImportXlsxPreview
What an `.xlsx` preview carries - an {@link ImportPreview} plus the sheet read ().
| Property | Type | Description |
|---|---|---|
| sheet | string | null | The archive path of the worksheet that was read, e.g. `xl/worksheets/sheet1.xml`. |
| header | string[] | The source column headings. |
| columns | ImportColumn[] | The per-column mapping and inference the user may edit before confirming. |
| records | Record<string, unknown>[] | Every mapped, coerced record the import would add. |
| sample | Record<string, unknown>[] | The leading records, for a preview table. |
| rowCount | number | How many data rows the sheet holds. |
| warnings | string[] | Anything worth flagging before confirming. |
LicenceInfo
| Property | Type | Description |
|---|---|---|
| valid | boolean | Whether the licence passed: the right product, in date, for this domain, with a signature that checks out. What `licence.set` returns straight away is provisional - the signature check is asynchronous - and `licence:changed` fires again once it settles. |
| product | string | The product the key was issued for. (optional) |
| issuedTo | string | Who the key was issued to. (optional) |
| expires | string | The ISO date the licence lapses on, judged in UTC so a licence expiring `2027-01-01` is good throughout that day. A perpetual key has none. (optional) |
| reason | string | Why the verdict came out as it did: `missing`, `malformed`, `prefix`, `product`, `expired`, `domain` or `signature` for a refusal, and `unverified` alongside a pass on a host with no Ed25519 to check with, where only the signature's shape could be examined. (optional) |
MaintenanceTier
The maintenance label for one kernel across both tiers.
| Property | Type | Description |
|---|---|---|
| stat | string | The kernel name. |
| exact | MaintenanceExactness | null | Its exact tier, or null when it is not an exact kernel. |
| approximate | ApproximateEntry | null | The approximate alternative and bound, or null when none exists. |
ModuleContext
| Property | Type | Description |
|---|---|---|
| registry | Registry | The registry to add to, or remove from. It is the shared one, so anything registered is visible to every grid using it. |
| grid | Grid | The grid the module is being installed into, when it is being installed per grid rather than globally. (optional) |
Money
A stored currency value: an amount in a named currency. `{amount:10,code:'USD'}` is a different value from `{amount:10,code:'EUR'}` - currency is a real type, not a display format, so the code rides on every cell.
| Property | Type | Description |
|---|---|---|
| amount | number | How much, as a plain number. It must be finite for the value to be accepted. |
| code | string | The ISO currency code the amount is in, normalised to upper case. It is part of the value, not a display setting: 10 USD and 10 EUR are different values and never compare as equal. |
MutateCapability
| Property | Type | Description |
|---|---|---|
| append | boolean | The adapter can insert new rows, bridged by the structural engine (`edit.addRow`,). (optional) |
| update | boolean | The adapter can patch existing rows, bridged by the cell edit path ( Option A). (optional) |
| delete | boolean | The adapter can remove rows, bridged by the structural engine (`edit.deleteRow`,). (optional) |
| returning | Returning 'row' | 'key' | 'none' | The reconcile contract - what the server hands back after a successful mutation (). `'row'`: the authoritative row (id, computed columns, timestamps), reconciled before confirm. `'key'`: only the assigned key. `'none'` (the default): nothing - the optimistic value stands (last-write-wins). (optional) |
MutationOp
| Property | Type | Description |
|---|---|---|
| kind | UpdateKind 'append' | 'update' | 'delete' | Which mutation this is: `'append'`, `'update'` or `'delete'`. It decides which of the fields below carry the payload. |
| rows | unknown[] | append: the new rows (may lack a server-assigned key). (optional) |
| key | string | update: the row key. (optional) |
| patch | Record<string, unknown> | update: the changed columns only, matching `PendingWrite` semantics. (optional) |
| keys | string[] | delete: the row key(s). (optional) |
| origin | string | Provenance, carried through for auth / audit. (optional) |
| requestId | string | Stable id for idempotent retry / dedupe. Reserved; retry is a non-goal in wave 1. (optional) |
MutationResult
The result of a mutation () - the reconcile payload. A cell-update commit flows this back through `PendingWrites`: `ok: false` reverts and surfaces `reason`; `rows` (`returning: 'row'`) reconciles server truth before confirm; `conflict` surfaces a last-write-wins divergence via `cell:conflict`.
| Property | Type | Description |
|---|---|---|
| ok | boolean | Whether the mutation reached the server. Only an explicit `false` rejects - it reverts the optimistic change and surfaces `reason`; anything else is taken as success. |
| rows | unknown[] | `returning: 'row'` - the authoritative row(s) to reconcile to. (optional) |
| keys | string[] | `returning: 'key'` - server-assigned key(s) for appended rows, in order. (optional) |
| reason | string | On rejection - surfaced on `cell:reverted`, never swallowed. (optional) |
| conflict | { key: string; serverRow?: unknown } | The server's current value, for a surfaced last-write-wins conflict. (optional) |
OpenRowOp
A structural op (append or delete) still awaiting an outcome ().
| Property | Type | Description |
|---|---|---|
| id | string | The op's identity, as it arrived on `row:pending`. This is what `edit.settleRow` takes. |
| kind | RowChangeKind 'append' | 'delete' | Whether the row is being appended or deleted. |
| key | string | The row key the op is tracked under - for an append, the client temporary key until the server returns a real one. |
| state | UpdateState 'pending' | 'superseded' | `'pending'` while this is the live op for the row, `'superseded'` once a later one replaced it. |
| age | number | How long the op has been outstanding, in milliseconds. |
OpenWrite
| Property | Type | Description |
|---|---|---|
| id | string | The write's identity, as it arrived on `cell:pending`. This is what `edit.settle` takes. |
| key | string | The key of the row being written to. |
| colId | string | The column being written to. |
| value | unknown | The optimistic value - what the cell is showing while the write is in flight. |
| before | unknown | The value the cell held before the write, which a revert puts back. |
| state | UpdateState 'pending' | 'superseded' | `'pending'` while this is the newest write for the cell, `'superseded'` once a later edit replaced it. A superseded write never writes its value back, however it settles. |
| age | number | How long the write has been outstanding, in milliseconds. Past `edit.pendingTimeout` the grid warns that it is stuck. |
ProcessCapability
| Property | Type | Description |
|---|---|---|
| n | number | How many readings the study covers. At least two are needed, and a study this small should be read with the confidence interval beside it. |
| mean | number | Where the process is actually centred, which is what separates Cp from Cpk. |
| lower | number | null | The lower specification limit in force, or `null` for a one-sided specification. It is the customer's requirement, not the process's behaviour. |
| upper | number | null | The upper specification limit in force, or `null` for a one-sided specification. |
| target | number | null | The nominal value the process aims at, when one was declared. `null` otherwise. |
| sigmaWithin | number | null | Short-term variation, from the moving range: what Cp and Cpk use. |
| sigmaOverall | number | null | Overall variation: what Pp and Ppk use. |
| cp | number | null | Potential capability. Null for a one-sided specification. |
| cpk | number | null | Capability allowing for where the process is centred. |
| pp | number | null | Cp over the overall spread: what the process actually delivered. |
| ppk | number | null | Cpk over the overall spread. Well below Cpk means the process drifted. |
| outOfSpec | number | How many readings fell outside the specification - the count the indices only imply. |
| defectRate | number | null | The share of readings outside the specification, as a fraction. The figure a customer asks for. |
| limits | { centre: number; upper: number; lower: number; sigma: number } | null | Three sigma either side of the process mean, from the moving range. |
| baseline | number | How many leading readings set the limits. (optional) |
| ruleSet | ControlChartRuleSet 'westernElectric' | 'nelson' | Which rule set `violations` were judged against, they number differently. (optional) |
| violations | { index: number; rule: number; description: string }[] | Each point the control rules flagged, with its index, the rule number and what the rule says. Judged against limits from the baseline period, so a step change shows as a run rather than flagging everything. Read `ruleSet` alongside - the two rule sets number their rules differently. |
| interval | CapabilityInterval | null | A confidence interval for `cpk`. A study that reports the point estimate alone overstates itself: 1.35 from thirty parts has a lower bound below 1. (optional) |
| intervalPp | CapabilityInterval | null | The same, for `ppk`. (optional) |
ProportionInterval
A Wilson score interval for a rate. Stays inside 0 to 1 at the extremes.
| Property | Type | Description |
|---|---|---|
| proportion | number | The observed share, successes over n. |
| lower | number | The lower bound, by the Wilson score method and never below 0 - the textbook interval reaches below zero at a rate near zero. |
| upper | number | The upper bound, never above 1. This is what "0 of 40 failed, so the rate is under 9%" comes from: at zero successes the textbook interval collapses to a point and claims certainty. |
| n | number | The sample size. |
| confidence | number | The level the bounds were computed at, 0 to 1. 0.95 by default. |
PushdownAdapter
An engine the grid can query, and what it is able to answer.
| Property | Type | Description |
|---|---|---|
| name | string | Used in diagnostics and in the message when work cannot be pushed. (optional) |
| capabilities | PushdownCapabilities | What the engine behind this adapter can do - which filters, sorts, aggregates and grouping it will take. The planner pushes only what is declared here and runs the rest client-side. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| execute | (query: RemoteRequest, request?: RemoteRequest): Promise<{ rows: unknown[]; total?: number; pendingTotal?: Promise<number | null> }> | query: RemoteRequestrequest?: RemoteRequest | Promise<{ rows: unknown[]; total?: number; pendingTotal?: Promise<number | null> }> | Run the part of the query the adapter declared it could handle. An adapter whose count is expensive may answer with `pendingTotal` instead of `total`: the rows are delivered now and the promise resolves with the same exact number when the count finishes. The source publishes it then and fires `source:total`; until it does the grid reports no total and `grid.rows.totalPending()` is `true`. It is opt-in per adapter - one that returns `total` behaves exactly as it always has - and `pendingTotal` is ignored when `total` is present, because a total that is already here has nothing to wait for. The promise must resolve with the exact count or `null`; it must never resolve with an estimate. |
| executeGroupLevel | ( query: RemoteRequest, aggregates: Array<{ id: string; col: string; fn: string; weight?: string }>, request?: RemoteRequest, ): Promise<{ rows: unknown[]; total?: number; leaves?: boolean; matchCount?: number; grand?: Record<string, unknown>; }> | query: RemoteRequestaggregates: Array<{ id: string; col: string; fn: string; weight?: string }>request?: RemoteRequest | Promise<{ rows: unknown[]; total?: number; leaves?: boolean; matchCount?: number; grand?: Record<string, unknown>; }> | Answer one level of a grouped grid. Present only when `capabilities.group` opts in. The level is `query.groupValues.length`: the root asks for the outermost grouping column's distinct values, expanding a group asks for the next column's values within it, and past the last grouping column the children are the leaves (`leaves: true`). A group row comes back in the shape the remote source already reads from a grouping server: the grouping column's own id carries the key, `leafCount` the group's row count, `totals` the subtotals keyed by column id. `total` is how many group rows the level holds. At the root, `matchCount` and `grand` carry the whole-set figures a grouped window cannot derive - the rows the filter matched, and the grand total over them. `aggregates` is the subtotal list the source routed to the engine; anything it could not route is named in `PushdownPlan.aggregates.client` and left absent from the group row rather than computed over the wrong set. (optional) |
| unfilteredCount | (): Promise<number | null> | - | Promise<number | null> | The row count before any filter - the denominator of "1,204 of 100,000" under grouping, where the display count is group headers rather than rows. Optional; a source falls back to the display count. (optional) |
| mutate | (op: MutationOp, request?: RemoteRequest): Promise<MutationResult> | op: MutationOprequest?: RemoteRequest | Promise<MutationResult> | Persist one mutation (). Present only when `capabilities.mutate` opts in. `createPushdownSource` synthesises an `edit.commit` that calls this for cell updates ( Option A); `request` threads the abort signal through the way `execute` receives it, and auth already lives on the adapter. (optional) |
PushdownAggregatesConfig
Design-time aggregate-pushdown policy for a pushdown source Part B). The developer chooses, at grid setup before render, whether each statistic is computed by the engine (fast, over the matching set) or client-side (the grid's exact definition, needs a full-dataset pull). It is fixed for the life of the grid, never a runtime toggle, and never surfaced to an end user. Absent, every aggregate is computed client-side - today's behaviour, so no existing caller regresses. `engine-if-identical` is the recommended setting for a windowed DuckDB source: it pushes only the statistics whose engine result is verified identical to the grid kernel, keeping the documented MAY-DIFFER stats (e.g. `mode`) client-side. The engine is used only when the filter is fully pushed; a residual filter forces every aggregate client-side, so an engine figure and a client figure never mix in one result set.
| Property | Type | Description |
|---|---|---|
| default | AggregateMode 'engine' | 'client' | 'engine-if-identical' | The default policy for stats the engine can express. `'engine'` pushes everything expressible (using the engine's method for MAY-DIFFER stats); `'engine-if-identical'` pushes only the verified-identical ones; `'client'` computes everything client-side. Default `'client'`. (optional) |
| overrides | Record<string, 'engine' | 'client'> | Per-stat overrides, winning over `default`. A stat the engine cannot express (`weightedQuantile`) is always client-side regardless. (optional) |
PushdownCapabilities
What a pushdown adapter can answer. Everything is off unless declared.
| Property | Type | Description |
|---|---|---|
| filter | false | 'term' | 'flat' | 'tree' | `false`, a single field and term, a flat conjunction, or a full tree. (optional) |
| operators | string[] | Which comparison operators the engine understands. (optional) |
| sort | false | 'single' | 'multi' | `false`, one column only, or many. (optional) |
| quick | boolean | Whether a free-text search across columns can be pushed. (optional) |
| range | boolean | Whether the engine can return a window rather than the whole result. (optional) |
| total | boolean | Whether it can report the count of matching rows. (optional) |
| group | boolean | Whether it can answer the grid's grouped view - group rows, their counts, their subtotals and their order - one level at a time, instead of returning the leaves for the grid to group in the browser. All or nothing, unlike `filter`. A filter splits because the engine narrowing a superset and the grid narrowing what is left reach the same set; a grouping cannot, because group rows counted over the wrong set are wrong rows, not slow ones. So the push router refuses the whole grouped level - and says why in `PushdownPlan.groupReason` - whenever anything else in the query failed to push. An adapter declaring this must implement `executeGroupLevel`; one that declares it without the method is re-planned without grouping and warned about, rather than half-pushed. (optional) |
| mutate | false | MutateCapability | What the adapter can persist back - the write-back contract (). `false` (the default) is read-only by declaration. A declared block opts kinds in; `capabilitiesOf` resolves it to a full `MutateCapability` (or `false`). (optional) |
PushdownFullDatasetConfig
Opt-in, sticky full-dataset pull for a pushdown/remote source. Off by default. When enabled, the source materialises the entire matching set client-side once per query signature and serves every window, total and statistic from it, so those figures are computed over the whole set rather than the loaded window. A set past either limit is refused with a visible `source:error` - never silently truncated.
| Property | Type | Description |
|---|---|---|
| enabled | boolean | Sticky: hold the whole matching set client-side. Default `false`. (optional) |
| maxRows | number | Refuse (visible error) past this many rows. Default `1_000_000`. (optional) |
| maxBytesEstimate | number | Refuse past this estimated heap cost, in bytes. Default `512 * 1024 * 1024`. (optional) |
PushdownPlan
How one request was divided between the engine and the grid.
| Property | Type | Description |
|---|---|---|
| pushed | RemoteRequest | The query the adapter was given. |
| residual | { filters: object | null; sort: SortEntry[] | null; quick: string; where: WhereRuntime | null; /** * Whether the rows the residual runs over are the whole matching set rather * than a fetched fraction. Set by the source when it hands * the residual to `applyResidual`; absent on the plan `lastPlan()` reports, * because it is a property of one fetch's result, not of the plan. * * When true the counts the residual produces are whole-dataset counts, so * the page-relative `where` warning is suppressed. Absent counts as not * whole: silence has to be earned. */ whole?: boolean; } | What the grid applied afterwards. `where` is the host predicate runtime when one survived the `whereRowLimit` gate, and `null` when none was registered or the gate refused it. |
| needsAll | boolean | Whether the whole result had to be fetched rather than a window. |
| unpushed | string[] | Which parts could not be pushed: `filter`, `sort`, `quick`, `where`, `group`. |
| grouped | boolean | Whether the engine answered the grid's grouped view for this request. False for an ungrouped query and for a grouped one the engine was refused - `groupReason` says which. |
| groupLevel | number | Which grouping level a pushed grouped request asked for: 0 at the root, 1 inside a group, and so on. Zero when nothing was grouped. |
| groupReason | string | Why a grouped request was *not* pushed, in a sentence, or `''` when it was pushed or when nothing was grouped. Grouping is all or nothing, so this is the whole story rather than a residual. |
| full | boolean | Whether the whole result was fetched because `fullDataset` is on, rather than only because residual work forced it. When true, totals and statistics reduce over the whole matching set and the windowed-stat warning is silent. |
| aggregates | { engine: AggregateProvenance[]; client: AggregateProvenance[]; groupBy?: string[]; } | Per-aggregate provenance, present only when the last request computed aggregates Part B): which statistics the engine computed and which the client did, with the class the pushdown map assigned each. Under grouping it also carries the `groupBy` the subtotals were computed over. Build-time inspection, not a runtime per-figure marker. (optional) |
PushdownSourceConfig
| Property | Type | Description |
|---|---|---|
| adapter | PushdownAdapter | The engine the query is pushed to - DuckDB, a SQL endpoint, anything that declares what it can do and executes it. |
| compute | object | The compute barrel, for applying whatever the engine could not. (optional) |
| pageSize | number | How many rows are fetched per block. 100 by default. (optional) |
| fullDataset | PushdownFullDatasetConfig | Opt-in full-dataset pull. Off unless `fullDataset.enabled` is set. See {@link PushdownFullDatasetConfig}. (optional) |
| aggregates | PushdownAggregatesConfig | Design-time aggregate-pushdown policy. Absent = client-side (today's behaviour). See {@link PushdownAggregatesConfig}. (optional) |
| allowPartialResults | boolean | Accept a partial/paged result to a whole-set request when residual work (a filter, sort or quick search) will run over it client-side. Off by default: such a shortfall is refused with a thrown error, because filtering or sorting a fraction of the result presents the wrong rows as the whole filtered set - a wrong answer, not a slow one. Set `true` only when you knowingly accept that risk (e.g. an adapter that cannot page and a result small enough not to matter); the old warn-once-and-proceed behaviour is then kept. It never changes the fullDataset memory-guard or the no-residual short-return warning. (optional) |
| whereRowLimit | number | The most rows the source will fetch and hold in order to run a twinless `where` predicate as the residual. Defaults to `50_000`, the same anchor as the grid's `workerThreshold` - the size at which this codebase already judges a dataset big enough to need different handling. A `where` predicate is a host function no engine can evaluate, so the only way to honour one is to fetch every matching row and filter here. That silently turns a windowed grid into a whole-dataset download, which is the thing a pushdown source exists to avoid. So it is a gate, not a free upgrade: at or past this many matching rows the predicate is **refused and warned about** - the rows it would exclude stay on screen - rather than the download being taken on the host's behalf. An adapter that reports no row total counts as over the limit, because guessing the other way is guessing your way into the download. Raise it when you want that download; the `{ condition }` twin is the route that narrows the fetch itself and works at any size. (optional) |
Registry
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| modules | (): GridModule[] | - | GridModule[] | The installed modules, in the order they were registered. |
| has | (name: string): boolean | name: string | boolean | Whether a module of this name is installed. |
| renderer | (name: string): RendererCtor | RenderFn | undefined | name: string | RendererCtor | RenderFn | undefined | A registered cell renderer by name, or `undefined`. Falls back to the shared `component` namespace, so one entry in `config.components` can serve as renderer, editor and filter alike. |
| editor | (name: string): EditorCtor | undefined | name: string | EditorCtor | undefined | A registered editor by name, or `undefined`. Falls back to the shared `component` namespace. |
| filter | (name: string): FilterCtor | undefined | name: string | FilterCtor | undefined | A registered filter by name, or `undefined`. Falls back to the shared `component` namespace. |
| dataType | (name: string): DataType | undefined | name: string | DataType | undefined | A registered data type by name, or `undefined`. |
| totalFn | (name: string): TotalFn | undefined | name: string | TotalFn | undefined | A registered total function by name, or `undefined`. |
| pipe | (name: string): ((v: unknown, ...a: string[]) => string) | undefined | name: string | ((v: unknown, ...a: string[]) => string) | undefined | A registered template pipe by name - the functions a cell template calls with `{{ value | pipe }}` - or `undefined`. |
| register | (kind: string, name: string, impl: unknown): void | kind: stringname: stringimpl: unknown | void | Add an implementation under a name, for one of `renderer`, `editor`, `filter`, `dataType`, `totalFn`, `pipe` or `component`. An unknown kind or a missing name warns and does nothing; registering over an existing name replaces it and warns. |
RegressionBand
A pointwise confidence band for the mean response of a single-predictor fit.
| Property | Type | Description |
|---|---|---|
| confidence | number | The level the band was computed at - the model's `confidence`, 0.95 by default. |
| points | { x: number; yhat: number; lower: number; upper: number }[] | One point per fitted row, in ascending predictor order: the predictor value, the fitted response, and the band's lower and upper edges at that point. |
RegressionFit
| Property | Type | Description |
|---|---|---|
| slope | number | The fitted slope: how much the response moves per unit of the predictor. |
| intercept | number | The fitted response where the predictor is zero. |
| r2 | number | The square of Pearson's r: how much of the response the fit accounts for. |
| stdError | number | Standard error of the slope, which is what says it differs from zero. |
| n | number | Pairs that survived pairwise deletion, not rows scanned. |
RejectedRow
A row a change could not apply, and why. Reported, never thrown.
| Property | Type | Description |
|---|---|---|
| operation | RejectedRowOperation 'add' | 'update' | 'remove' | Which part of the change the row was in: `'add'`, `'update'` or `'remove'`. |
| id | string | The key of the row that could not be applied. |
| reason | RejectedRowReason 'unknown-id' | 'duplicate-id' | `unknown-id`, no row with that key. `duplicate-id`, a row with that key already exists; admitting a second would corrupt every structure that resolves one key to one row. |
RowChange
| Property | Type | Description |
|---|---|---|
| add | unknown[] | Rows to add. A row whose key the grid already holds is rejected rather than admitted twice. (optional) |
| at | number | Where to insert the added rows, as a physical index. They go on the end when it is left out or is past the end. (optional) |
| update | unknown[] | Rows to update, matched to existing rows by key. A key the grid does not hold is rejected. (optional) |
| remove | unknown[] | string[] | Rows to remove, given either as keys or as row objects the grid reads the key from. (optional) |
SavedView
| Property | Type | Description |
|---|---|---|
| id | string | The view's identity, which `apply`, `rename`, `remove` and `setDefault` take. |
| name | string | What the view is called. Renaming refuses a blank or duplicate name. |
| description | string | Longer text about the view, for a picker that has room for it. |
| shared | boolean | Whether the view was stored for everyone rather than for this user alone. The storage adapter decides what that means. |
| isDefault | boolean | Applied on load when no `config.state` is given. `config.state` wins outright over this flag: with both present, the default view is never applied and the active view id stays `null`. |
| builtin | boolean | Supplied in `config.views.saved`: listed apart, and not renamable or deletable. |
| createdAt | number | When the view was first saved, as epoch milliseconds. It survives an overwrite; `updatedAt` does not. |
| updatedAt | number | When it was last changed, as epoch milliseconds. |
| state | GridState | A partial `GridState`; only the sections it names are applied. |
SeriesStats
| Property | Type | Description |
|---|---|---|
| n | number | How many readings the summary was computed over. At least two are needed or there is no sequence to describe and `null` comes back instead. |
| first | number | The reading the series opens with, in the ordering `by` imposed. |
| last | number | The reading the series ends with, in the same ordering. |
| change | number | Last minus first, in the column's own units. |
| changePercent | number | null | The same change as a percentage of the first reading's magnitude. `null` when the series starts at zero, which has no percentage. |
| volatility | number | null | Standard deviation of period-on-period returns. |
| annualisedVolatility | number | null | The same, times the root of `periodsPerYear`; null unless one was given. |
| growth | number | null | Compound growth per period, annualised when `periodsPerYear` is given. |
| maxDrawdown | number | null | The largest peak-to-trough fall, as a fraction. |
| maxDrawdownFrom | number | The index of the peak the largest fall started from. |
| maxDrawdownTo | number | The index of the trough the largest fall ended at. |
| autocorrelation | number | null | Lag-1: positive is momentum, negative is mean reversion. |
| upDays | number | How many period-on-period moves were upward. A period whose previous reading was zero has no return and counts in neither. |
| downDays | number | How many period-on-period moves were downward. |
Source
| Property | Type | Description |
|---|---|---|
| mode | SourceMode 'memory' | 'paged' | 'remote' | 'stream' | Which kind of source this is - `'memory'`, `'paged'`, `'remote'` or `'stream'`. Several features read it: histograms are refused over an open stream, and cross-filtering needs a memory source. (read-only) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| count | (): number | - | number | How many display rows the source is offering, group rows included. A paged source with an unknown total reports what it has discovered plus one page, so the scrollbar keeps growing as the rows arrive. |
| at | (index: number): Row | undefined | index: number | Row | undefined | The row at a display index. A row that has not arrived yet comes back as a skeleton placeholder rather than `undefined`, so the renderer always has something to lay out. |
| byKey | (key: string): Row | undefined | key: string | Row | undefined | The row with this key, or `undefined` when the source does not hold it. |
| loaded | (index: number): boolean | index: number | boolean | Whether the row at an index has actually arrived. `false` for a skeleton, which is how the renderer knows to draw a placeholder. |
| hint | (start: number, end: number): void | start: numberend: number | void | Tell the source which rows are about to be needed - the viewport, plus whatever overscan the renderer wants - so it can fetch ahead. Advisory: a source may ignore it. |
| apply | (change: RowChange): ChangeResult | change: RowChange | ChangeResult | Apply an incremental change to the rows the source holds, returning what it added, updated and removed. |
| reload | (opts?: ReloadOptions): void | opts?: ReloadOptions | void | Throw away what is cached and fetch again. What a host calls when the data changed behind the grid's back. |
| destroy | (): void | - | void | Release whatever the source holds - sockets, timers, in-flight requests - when the grid is torn down. (optional) |
Stat
The handle `createStat` returns.
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| element | (): HTMLElement | null | - | HTMLElement | null | The tile's root element. Null when the tile was misconfigured - a missing container or document returns an inert handle rather than throwing, so one bad tile does not take the dashboard with it. |
| value | (): unknown | - | unknown | The value currently shown, as computed rather than as formatted. Null on an inert handle. |
| refresh | (): void | - | void | Recompute and repaint now. Works even on a tile with `live: false`, which is the point of it. |
| destroy | (): void | - | void | Stop following the grid and remove the tile from the document. |
StatCoverage
How much of the data a computed figure actually covers. `covered < total`, or `total === null`, means the figure is approximate.
| Property | Type | Description |
|---|---|---|
| covered | number | Rows the figure was computed over. |
| total | number | null | Rows the source knows about, or `null` when it cannot know - never a guess. |
| windowed | boolean | True when a window bounded the computation, so the figure covers part of the data. |
StateApplyReport
| Property | Type | Description |
|---|---|---|
| applied | string[] | The state keys that were restored, in application order. |
| skipped | { key: string; reason: string }[] | The keys that were not restored, each with a reason in words a host can show - `not an array`, `unknown column`, `skipped by caller`, and so on. A partial restore is reported, never thrown. |
SubsetComparison
The subset-vs-population ranking.
| Property | Type | Description |
|---|---|---|
| ranked | ColumnDifference[] | Every compared column, largest difference first. |
| subsetN | number | How many rows the filtered subset holds. |
| populationN | number | How many rows the whole population holds. |
| filtered | boolean | Whether a filter is actually narrowing the set. |
| measures | { numeric: string; categorical: string; common: string } | The measure each family reports, and the common scale, named for a legend. |
TopValue
One row of a categorical column's top-values table.
| Property | Type | Description |
|---|---|---|
| value | unknown | The value itself, as it is stored. |
| count | number | How many present rows carry it. |
| share | number | Its share of the present values, 0 to 1. |
TwoSampleSpec
How {@link StatisticsApi.compareGroups} splits the rows and picks a test.
| Property | Type | Description |
|---|---|---|
| by | string | The column whose values split the rows into groups. Required. |
| groups | [unknown, unknown] | The two group values to compare. The two most frequent when omitted. (optional) |
| test | SignificanceTest 'auto' | 'welch' | 'mannWhitney' | 'chiSquare' | Force a test rather than choosing by column family. `auto` (the default) picks Welch or Mann-Whitney for a numeric column and chi-square for a categorical one; the choice is always named in the result. (optional) |
| confidence | number | The confidence level for the interval, 0 to 1. 0.95 by default. (optional) |
| category | unknown | The focal category for a chi-square difference interval, when the column has more than two categories. Without it, a multi-category comparison reports no scalar interval, only the effect size. (optional) |
UnitConfig
| Property | Type | Description |
|---|---|---|
| system | string | Which unit system the column measures in - `'data'`, `'length'`, `'mass'` and the rest, plus anything registered with `registerUnitSystem`. `'data'` by default; an unknown name warns and names the systems that exist. (optional) |
| unit | string | The unit the stored numbers are in. Everything else - conversion, the display ladder, parsing - is relative to this. Defaults to the system's base unit, and an unknown symbol warns and falls back to it. (optional) |
| binary | boolean | Use the power-of-two ladder - KiB, MiB, GiB - instead of the power-of-ten one. Off by default. (optional) |
| decimals | number | A fixed number of decimal places: it sets the minimum and the maximum to the same figure. (optional) |
| minDecimals | number | The fewest decimal places to show, padding with zeros. 0 by default. (optional) |
| maxDecimals | number | The most decimal places to show. Two by default, or the minimum when that is higher. (optional) |
| display | string | Which unit to render in: a symbol from the system, or `'auto'` to pick the largest rung the value fills - 1,500,000 bytes as `1.5 MB`. Unset renders in the stored unit. Display only: the stored number never changes, so sort, filter and totals are unaffected. (optional) |
| locale | string | The BCP-47 locale the number is formatted in. The grid's by default. (optional) |
| group | boolean | Whether to group thousands. On by default. (optional) |
| space | string | What sits between the number and the symbol. A single space by default when the symbol trails (`1,200 kg`) and nothing when it leads, which is how a leading symbol is written. An explicit value wins either way. (optional) |
| placement | UnitSymbolPlacement 'suffix' | 'prefix' | Whether the symbol goes after the number (the default) or before it. (optional) |
| compound | string[] | Render one stored number across an ordered subset of the system's units, e.g. `['ft', 'in']` for `5 ft 11 in`. Display and parse only: the stored value stays a single base-unit number, so sort, filter and total are unchanged. Parsing sums the parts. (optional) |
| significantFigures | number | Round to this many significant figures before the rung is chosen, so 999,999 B at three figures reads `1 MB` rather than `1,000 kB`. Off when unset or not a positive number; ignored by a `compound` column, which renders across units instead. (optional) |
| nullDisplay | string | What to show for a value that is not a finite number - null, undefined, empty, or unparseable text. Empty by default. (optional) |
UnitDescriptor
One unit descriptor: a symbol and how many base quantities it is worth.
| Property | Type | Description |
|---|---|---|
| symbol | string | The symbol shown beside the number, and the name this unit is referred to by - `'kB'`, `'ft'`, `'°C'`. |
| factor | number | How many of the system's base quantity one of this unit is worth - 1,000 for a kilobyte in a system based on bytes. Conversion is this ratio, which is why the base unit's factor is 1. |
| aliases | readonly string[] | Lowercase spellings that unambiguously mean this unit, so typed input reads `kilobytes` and `kilobyte` as `kB`. |
| binary | boolean | Whether this is a power-of-two unit (KiB, MiB), which puts it on the binary ladder rather than the decimal one. |
| prefix | string | null | The bare SI-style prefix this unit carries - `m`, `G` - or `null` for a unit that has none. |
| auto | boolean | Whether `display: 'auto'` may choose this unit. On by default; turn it off for a unit that would break the ladder's coherence, as inches and feet do among metres. |
ValidationError
One recorded validation error.
| Property | Type | Description |
|---|---|---|
| key | string | The key of the row holding the invalid cell. |
| colId | string | The column holding the invalid cell. |
| code | string | Which rule failed - `required`, `min`, `pattern` and so on - so a host can react to the kind of failure rather than parsing its wording. |
| message | string | The message shown against the cell: the rule's own `messages` entry, the spec-wide `message`, or the built-in English default for that rule. |
ViewChange
| Property | Type | Description |
|---|---|---|
| reason | ViewChangeReason 'save' | 'update' | 'rename' | 'remove' | 'default' | 'import' | 'seed' | 'replace' | What happened to the views: a view was saved, updated, renamed, removed, made default, imported, seeded from configuration, or the whole set replaced. |
| view | SavedView | null | The view the change concerns; null for a bulk replace. |
ViewImportReport
What {@link ViewsApi.import} reports.
| Property | Type | Description |
|---|---|---|
| imported | Omit<SavedView, 'state'>[] | The views that were stored, as metadata - the state is not repeated. |
| skipped | { name: string; reason: string }[] | Each view that was not stored, with a reason in words a host can show. |
| repaired | { name: string; key: string; reason: string }[] | Each state section that was dropped from an otherwise valid view. |
ViewPayload
What {@link ViewsApi.export} produces and {@link ViewsApi.import} accepts.
| Property | Type | Description |
|---|---|---|
| kind | string | Marks the object as a Lattice view payload. |
| version | number | The payload format version, so an older file can be read or refused. |
| exportedAt | number | When it was exported, in epoch milliseconds. |
| views | SavedView[] | The views themselves, each with `isDefault` cleared. |
ViewStorage
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| read | (): SavedView[] | - | SavedView[] | Load the user's views. Called at construction and by `views.reload()`. |
| write | (views: SavedView[], change: ViewChange): void | views: SavedView[]change: ViewChange | void | Mirror the views somewhere synchronous: `localStorage`, an in-memory cache. For a server, listen for `view:saved` / `view:removed` and do the write yourself: the grid does not make network calls and does not want to know whether yours succeeded. |
WhereOptions
How a `where` predicate is re-evaluated, whether `filters.clear()` may remove it, and what the source may be told about it.
| Property | Type | Description |
|---|---|---|
| deps | string[] | The columns the predicate reads, in the same spirit as `value.deps` on a computed column (). Declared, the verdict is cached per row and re-run only when one of these columns changes on that row. Omitted, the predicate is treated as reading the whole row and is called on every pass - never stale, and never skipped either. (optional) |
| pinned | boolean | Survive `filters.clear()`. For a predicate that is not the user's filter - row-level permissions, tenant scoping - where a "clear filters" button must never widen what the user can see. (optional) |
| condition | FilterSet | A declarative twin of the predicate, pushed to the source while the function stays as the residual. On a pushdown engine this narrows the fetch instead of filtering a page client-side. It must be implied by the predicate: the grid ANDs both, so a twin wider than the function costs only time, while one narrower than it hides rows the function would have kept. **The twin is what works at any size.** Without one, a pushdown source can still run the function - but only as the residual over the whole matching set, so it does so only while that set is under `whereRowLimit` (default `50_000`) and refuses loudly past it. A paged or remote source cannot run it at all and warns at registration. The twin is pushed to the engine, so it narrows the fetch itself and none of that applies. (optional) |
WindowSpec
The window a windowed aggregate was computed over.
| Property | Type | Description |
|---|---|---|
| kind | WindowKind 'count' | 'time' | 'session' | Which window: last N ticks, last N ms, or the session. |
| span | number | The size: N ticks, N ms, or the session duration in ms. |
| size | number | How many values actually fell inside the window. |
WindowedResult
One windowed figure and the window it covers.
| Property | Type | Description |
|---|---|---|
| value | number | null | The reduction, or null when the window held no usable values. |
| over | WindowSpec | The window the figure was computed over - always stated. |
Types
Every type alias the declarations export, with its definition. A type named anywhere in the tables above links to its entry here.
AggregateMode
How one requested aggregate should be computed.
type AggregateMode = 'engine' | 'client' | 'engine-if-identical'
AIAsk
The provider-agnostic model callback the host supplies. The module never imports a provider SDK, reads a key, or makes a network call - it builds this payload and awaits the host's reply. A host may wrap a chat provider (`{ text }`), a completion (a bare string), a tool-calling turn (`{ toolCalls }`), or a structured provider (`{ structured }`).
type AIAsk = (payload: { system: string; message: string; prompt: string; messages: Array<{ role: string; content: string; [k: string]: unknown }>; tools?: object[]; schema?: unknown; signal?: AbortSignal; }) => Promise< | string | { text?: string; content?: string; toolCalls?: object[]; structured?: unknown } >
Declared in lattice-grid/modules/ai.
AIBriefKind
What an AI narrative targets.
type AIBriefKind = 'view' | 'column' | 'forecast' | 'kpi' | 'chart' | 'risk'
Declared in lattice-grid/modules/ai.
AIEventName
The events an AI controller raises. The controller's own, not the grid's: `grid.on` takes {@link EventName} and knows nothing about these. `on()` warns once on any other name, because a binding to an event that can never fire is a silent no-op. Each event also has a config callback (`onNarrative`, `onQuery`, `onProposal`, `onError`); both routes fire. None of them is cancellable: each reports a run that has already finished, and the one point where the AI changes anything - applying a proposal - goes through the grid's own `beforeEdit` gate (or the board's `beforeMove`), which is where a host vetoes an AI write.
type AIEventName = 'narrative' | 'query' | 'proposal' | 'error'
Declared in lattice-grid/modules/ai.
AINarrativeMode
Which path an AI narrative ran through: tool calls, or an upfront facts packet.
type AINarrativeMode = 'tools' | 'packet'
Declared in lattice-grid/modules/ai.
AIProposalScope
An AI proposal's row scope: the filtered view, or an opted-in widen to all rows.
type AIProposalScope = 'view' | 'all'
Declared in lattice-grid/modules/ai.
AIReconcileMode
What to do with an ungrounded figure in an AI narrative: drop it, or flag it in place.
type AIReconcileMode = 'strip' | 'flag'
Declared in lattice-grid/modules/ai.
Align
Cell and header alignment. `left` and `right` are accepted and normalised to `start` and `end`. `start`/`end` follow the writing direction, so they mirror in a right-to-left grid while `left`/`right` stay physical. `centre` is accepted alongside `center`.
type Align = 'start' | 'center' | 'end' | 'left' | 'right' | 'centre'
AnnotationKind
What an annotation mark is: a freehand trail, an arrow, a rectangle, a highlight, or text.
type AnnotationKind = 'freehand' | 'arrow' | 'rect' | 'highlight' | 'text'
AnnotationRegion
Which columns an annotation mark belongs to: the pinned start, the centre, or the pinned end.
type AnnotationRegion = 'start' | 'centre' | 'end'
AnnotationTool
The annotation drawing tool: a pen, an arrow, a rectangle, or a highlighter.
type AnnotationTool = 'pen' | 'arrow' | 'rect' | 'highlight'
BadgeTone
A tab's count-badge tone, declared by the host rather than derived from a threshold.
type BadgeTone = 'good' | 'warn' | 'bad' | 'unknown'
Declared in lattice-grid/modules/tabs.
BooleanDisplay
How a boolean format renders its two states: as text, a glyph pair, or an icon pair.
type BooleanDisplay = 'checkbox' | 'switch' | 'text' | 'icon'
CamelJoin
An event name as the callback prop a Svelte 5 component takes: `'cell:changed'` becomes `'CellChanged'`, so the prop is `onCellChanged`. Svelte 5 removed component events - `createEventDispatcher` is deprecated and `on:` no longer applies to a component - so an instance event reaches a host as a callback prop. The all-lowercase spelling (`oncellchanged`) is accepted at runtime too, for hosts that prefer Svelte's DOM attribute style; only the canonical one is typed, because a union of both would make every misspelling type-check.
type CamelJoin<E extends string> = E extends `${infer Head}:${infer Tail}` ? `${Capitalize<Head>}${CamelJoin<Tail>}` : Capitalize<E>
Declared in lattice-grid/modules/svelte.
ChartAnnotationCompute
A named reduction a chart annotation's `compute` derives its position from.
type ChartAnnotationCompute = 'mean' | 'avg' | 'median' | 'min' | 'max'
ChartAnnotationKind
What kind of chart annotation this is.
type ChartAnnotationKind = 'line' | 'target' | 'band' | 'callout' | 'event'
ChartAnnotationOrient
Whether a chart annotation is forced horizontal or vertical.
type ChartAnnotationOrient = 'horizontal' | 'vertical'
ChartAxisSide
Which measure axis a chart annotation reads: left, right, or the secondary y2.
type ChartAxisSide = 'left' | 'right' | 'y2'
ChartEventName
The events a chart raises. A chart's own, not the grid's: `grid.on` takes {@link EventName} and knows nothing about these. There is no `point:click`, `point:hover` or `series:toggle`; the events are the flat names below, and `click` is the one most callers want - it is how a click on a mark becomes a filter on the grid. Every payload carries `type`, `chart` and `grid` ({@link ChartEvent}); what else arrives is {@link ChartEventPayloads}. A handler that throws is reported to the console and the rest still run. Each event also fires the matching `on<Event>` in the spec (`onClick`, `onDraw`, …) before the subscribers. `click` and `brush` are the two events the chart acts on, and both carry a `preventDefault` a handler can call to take the action over; the rest are notifications.
type ChartEventName = 'click' | 'hover' | 'leave' | 'focus' | 'draw' | 'drill' | 'brush' | 'legend'
ChartLabelPosition
Where a chart data label sits relative to its mark.
type ChartLabelPosition = 'outside' | 'inside' | 'auto'
ChartMeasureType
The mark a combo chart's measure draws with.
type ChartMeasureType = 'bar' | 'line' | 'area'
ChartScale
How a chart axis's scale is chosen, rather than taken from the column's type.
type ChartScale = 'auto' | 'linear' | 'time' | 'band' | 'category'
ChartTrendMethod
A trend or forecast overlay method. Each name has aliases: `linear` (also `lr`, `ols`, `regression`); `movingAverage` (also `ma`, `sma`, `rolling`); `exponential` (also `ewma`, `ses`, `holt`, `smoothing`).
type ChartTrendMethod = 'linear' | 'movingAverage' | 'exponential' | 'lr' | 'ols' | 'regression' | 'ma' | 'sma' | 'rolling' | 'ewma' | 'ses' | 'holt' | 'smoothing'
ChartType
One of the thirty chart types `createChart` accepts.
type ChartType = 'line' | 'step' | 'area' | 'rangeArea' | 'bar' | 'horizontalBar' | 'waterfall' | 'scatter' | 'bubble' | 'forest' | 'combo' | 'pareto' | 'histogram' | 'boxplot' | 'heatmap' | 'qq' | 'ecdf' | 'lorenz' | 'correlogram' | 'control' | 'capability' | 'movingRange' | 'pie' | 'donut' | 'sunburst' | 'treemap' | 'radar' | 'gauge' | 'funnel' | 'candlestick' | 'geomap' | 'sankey' | 'chord' | 'network' | 'stream' | 'marimekko' | 'violin' | 'gantt'
ColumnExportLookup
How a lookup column leaves in an export: its label, its stored value, or both.
type ColumnExportLookup = 'label' | 'value' | 'columns'
ColumnGroupAction
What happened to a banded header group.
type ColumnGroupAction = 'formed' | 'removed' | 'renamed' | 'dissolved' | 'moved' | 'applied'
ColumnGroupGranularity
The calendar unit a column's row-grouping buckets a timestamp by.
type ColumnGroupGranularity = 'day' | 'week' | 'month' | 'instant'
ColumnRef
A column, named by its `id`: what every API that asks "which column" takes.
type ColumnRef = string
CommentDisplayMode
Whether a comment thread floats beside its cell or opens in a side panel.
type CommentDisplayMode = 'anchored' | 'docked'
CommentOperation
Which comment-provider call failed.
type CommentOperation = 'loadIndex' | 'loadThread' | 'addComment' | 'editComment' | 'deleteComment' | 'resolveThread' | 'unresolveThread'
CompactDisplay
Which compact form `notation: 'compact'` renders, short (`1.2M`) or long (`1.2 million`).
type CompactDisplay = 'short' | 'long'
Comparator
Your own sort order for a column, in place of the built-in one for its type. Return a negative number when `a` sorts first, a positive number when `b` does, and zero when they tie. The two rows are passed as well, so an order can depend on a second field, and `descending` says which way the grid is about to apply the result - which is how blanks are kept last either way.
type Comparator = ( a: unknown, b: unknown, rowA?: Row, rowB?: Row, descending?: boolean, ) => number
ControlChartRuleSet
Which control-chart rule family flags an out-of-control point.
type ControlChartRuleSet = 'westernElectric' | 'nelson'
CorrelationMethod
Which correlation a correlogram computes.
type CorrelationMethod = 'pearson' | 'spearman' | 'kendall'
CorrelationOrient
Whether a pairwise correlation is shaped as one row per pair, or the square matrix.
type CorrelationOrient = 'pairs' | 'matrix'
CurrencyDisplay
How a currency figure names its unit, mirroring `Intl.NumberFormatOptions.currencyDisplay`.
type CurrencyDisplay = 'symbol' | 'code' | 'name' | 'narrowSymbol'
DashJoin
The event name a Vue template binds, as a type: `'cell:changed'` becomes `'cell-changed'`. Recursive over the `:` segments, so a three-part name like `'cell:edit:start'` becomes `'cell-edit-start'` - the same rule `dashedName` applies at runtime, stated once so the props type and the implementation cannot disagree. A colon cannot appear in a Vue binding, which is why the adapter renames at all.
type DashJoin<E extends string> = E extends `${infer Head}:${infer Tail}` ? `${Head}-${DashJoin<Tail>}` : E
Declared in lattice-grid/modules/vue.
DataTypeBase
The storage family a data type belongs to.
type DataTypeBase = 'text' | 'number' | 'boolean' | 'date' | 'dateString' | 'object'
DataTypeStorage
How the column store holds a type's values in bulk.
type DataTypeStorage = 'float64' | 'int32' | 'bitset' | 'dictionary' | 'object'
DateStyle
A locale-chosen date form, mirroring `Intl.DateTimeFormatOptions.dateStyle`.
type DateStyle = 'short' | 'medium' | 'long' | 'full'
DecorationName
How a cell is drawn around its value: plain text, a filled background, a rounded pill, a coloured dot, an inline bar, a heat shade, or an icon. The shape only - which colour it takes is the variant's job.
type DecorationName = 'plain' | 'fill' | 'pill' | 'dot' | 'bar' | 'heat' | 'icon'
DecorationShape
A decoration's container outline shape.
type DecorationShape = 'pill' | 'rounded' | 'square'
DecorationSize
A decoration's size token, following the grid's density unless set.
type DecorationSize = 'sm' | 'md' | 'lg'
DeltaMode
What a movement line prints: the difference alone, the percentage alone, or both.
type DeltaMode = 'absolute' | 'relative' | 'both'
Declared in lattice-grid/modules/kpi.
Density
A named preset, or a raw scale where 1 is `standard`. Row heights are 23.8 / 28 / 42 / 56px for the four presets; a number scales 28px.
type Density = 'compact' | 'standard' | 'comfortable' | 'spacious' | number
DepValues
The values a computed column's dependencies hold for the row being computed, keyed by column id, so a formula reads what it declared it needs rather than reaching into the raw row.
type DepValues = Record<string, unknown>
DerivedFollow
Which of a derived source's rows to read.
type DerivedFollow = 'filtered' | 'all' | 'selected' | 'grouped'
DerivedOrient
With `profile`, whether a derived source emits one row per column or one per statistic.
type DerivedOrient = 'columns' | 'metrics'
DerivedRefresh
When a derived source re-derives: on every change, coalesced to a frame, or only on demand.
type DerivedRefresh = 'live' | 'idle' | 'manual'
DerivedStatistics
Which relational statistic a derived source projects into rows, and how. See `DerivedSourceConfig.statistics`. A discriminated union on `fn`, so the relational statistics still deferred - `regression`, `regressionModel`, `forecast`, `anomalies`, `adf`, `acf`, `spearman`, `kendall`, `covariance`, `subsetVsPopulation`, `compareGroups`, `capability`, `interval`, `windowed`, `weightedQuantile`, `weightedAverage` - arrive as further arms of this one key rather than as a second mechanism.
type DerivedStatistics = DerivedCorrelation | DerivedSeries | DerivedDatasetComparison
DiagnosticSource
Where a diagnostic warning came from: a scheduled check, or a `warnOnce` report.
type DiagnosticSource = 'check' | 'reported' | 'info'
DiffAddedColumns
In diff/audit mode, whether a column absent from the snapshot counts as changed or is left alone.
type DiffAddedColumns = 'unchanged' | 'changed'
Direction
Writing direction. See {@link GridConfig.direction}.
type Direction = 'ltr' | 'rtl' | 'auto'
DistributionOp
Operators that resolve against the column's own distribution (spec 8.12).
type DistributionOp = 'topPercent' | 'bottomPercent' | 'topN' | 'bottomN' | 'aboveMean' | 'belowMean' | 'aboveMedian' | 'belowMedian' | 'zAbove' | 'zBelow' | 'outlier'
DriftMeasure
Every effect-size measure the difference surface reports, widest set: the two families' numeric measures (subset-vs-population, and dataset-vs-dataset) plus the categorical one both share. A single comparison site reports only the member(s) its own family can produce, via `Extract<DriftMeasure, …>`.
type DriftMeasure = 'standardizedMeanDifference' | 'pooledStandardMeanDifference' | 'categoricalTotalVariation'
Edge
The leading or trailing side of a value, layout or column pin.
type Edge = 'start' | 'end'
EditConfirmMode
How an optimistic write settles: on what `commit` returns, or only when you call `edit.settle` yourself.
type EditConfirmMode = 'auto' | 'manual'
EditMode
How an edit session is scoped: one cell committing on move-away, or one row held open until the whole row commits as a step.
type EditMode = 'cell' | 'row'
EditorCtor
An editor class. The grid instantiates one when an edit session opens on a cell and destroys it when the session ends, however it ended.
type EditorCtor = new () => Editor
EditorName
The built-in cell editors, addressable by name through `cell.edit`. Anything registered through `components` is also valid here.
type EditorName = 'checkbox' | 'code' | 'colour' | 'currency' | 'date' | 'datetime' | 'duration' | 'iconPicker' | 'ipaddress' | 'multiSelect' | 'number' | 'objectPicker' | 'password' | 'radix' | 'rating' | 'segmented' | 'select' | 'slider' | 'temperature' | 'text' | 'textarea' | 'time' | 'treeSelect' | 'unit' | (string & {})
EditStartGesture
Which gesture opens a cell editor.
type EditStartGesture = 'single' | 'double' | 'key'
ErrorBoundKind
How an approximate reduction's error bound holds: every run, in expectation, or to rounding.
type ErrorBoundKind = 'deterministic' | 'probabilistic' | 'exact'
ErrorBoundMetric
What an error bound's value measures.
type ErrorBoundMetric = 'absolute' | 'relative' | 'rank' | 'none'
EventHandler
A function subscribed to a grid event, handed the event that fired.
type EventHandler = (e: GridEvent) => void
EventName
Every event the grid emits. Complete, and checked against the runtime by `tools/check.js`, an `emit()` call with no entry here fails the build. It was not complete before: fifty-one events were emitted and undeclared, so subscribing to any of them from TypeScript was a compile error on an event the grid genuinely raises. Grouped by the subsystem that raises them, which is also how the reference lists them.
type EventName = 'ready' | 'destroy' | 'render:first' | 'render:done' | 'config:changed' | 'licence:changed' | 'model:changed' | 'rows:changed' | 'rows:queued' | 'rows:deferred' | 'rows:paused' | 'rows:resumed' | 'row:received' | 'row:sent' | 'row:copied' | 'row:moved' | 'source:error' | 'source:total' | 'stream:chunk' | 'stream:end' | 'stream:evicted' | 'rowDrag:started' | 'rowDrag:moved' | 'rowDrag:left' | 'rowDrag:ended' | 'cell:changed' | 'cell:pending' | 'cell:confirmed' | 'cell:reverted' | 'cell:conflict' | 'cell:clicked' | 'cell:dblclicked' | 'cell:contextmenu' | 'cell:mouseover' | 'cell:mouseout' | 'cell:mousedown' | 'cell:mouseup' | 'cell:edit:start' | 'cell:edit:end' | 'row:edit:start' | 'row:edit:end' | 'row:clicked' | 'row:dblclicked' | 'row:pending' | 'row:confirmed' | 'row:reverted' | 'row:conflict' | 'form:opened' | 'form:closed' | 'form:saved' | 'form:error' | 'sort:changed' | 'filter:changed' | 'group:toggled' | 'facet:computed' | 'facet:filtered' | 'facet:expanded' | 'facet:failed' | 'column:moved' | 'column:resized' | 'column:visible' | 'column:pinned' | 'column:grouped' | 'column:pivoted' | 'column:filter:open' | 'column:profile:open' | 'column:menu:open' | 'pivot:drill' | 'columns:changed' | 'columns:tagged' | 'columngroup:changed' | 'header:contextmenu' | 'selection:changed' | 'range:changed' | 'clipboard:copy' | 'page:changed' | 'scroll' | 'scroll:end' | 'size:changed' | 'detail:toggled' | 'toolpanel:focus' | 'highlight:changed' | 'find:changed' | 'tree:loading' | 'tree:loaded' | 'tree:loadFailed' | 'tree:loadAborted' | 'state:changed' | 'state:reset' | 'history:changed' | 'history:applied' | 'views:changed' | 'view:applied' | 'view:saved' | 'view:removed' | 'view:renamed' | 'view:default' | 'validation:failed' | 'validation:cleared' | 'formatting:changed' | 'redaction:changed' | 'permissions:changed' | 'presentation:changed' | 'presentation:started' | 'presentation:ended' | 'presentation:view' | 'presentation:scale' | 'presentation:spotlight' | 'presentation:captured' | 'comment:added' | 'comment:edited' | 'comment:deleted' | 'comment:failed' | 'comment:resolved' | 'comment:unresolved' | 'comment:threadOpened' | 'comment:threadClosed' | 'comment:indexLoaded' | 'presence:published' | 'presence:joined' | 'presence:updated' | 'presence:left' | 'presence:failed' | 'presence:lockRefused' | 'diff:changed' | 'diff:swapped' | 'timeline:attached' | 'timeline:detached' | 'timeline:seek' | 'timeline:seeking' | 'annotation:changed' | 'export:progress' | 'export:request' | 'export:done' | 'shortcuts:opened' | 'shortcuts:closed' | 'print:before' | 'print:after' | 'beforeEdit' | 'beforeSort' | 'beforeFilter' | 'beforeColumnMove' | 'beforeColumnResize' | 'beforeColumnHide' | 'beforeSelect' | 'beforeRowAdd' | 'beforeDelete' | 'beforeRowMove' | 'beforeGroup' | 'beforeRowReceive' | 'edit:cancelled' | 'sort:cancelled' | 'filter:cancelled' | 'columnMove:cancelled' | 'columnResize:cancelled' | 'columnHide:cancelled' | 'selection:cancelled' | 'rowAdd:cancelled' | 'delete:cancelled' | 'rowMove:cancelled' | 'group:cancelled' | 'rowReceive:cancelled' | '*'
EventOrigin
Who caused a grid change: `'user'` interaction, an `'api'` call, `'init'` (the grid's own startup), or an approved `'ai'` write.
type EventOrigin = 'api' | 'user' | 'init' | 'ai'
ExcelHiddenColumns
What an Excel export does with grid-hidden columns: drop them, or keep them Excel-hidden.
type ExcelHiddenColumns = 'omit' | 'hidden'
ExportRowsScope
Which rows an export or a copy includes, widest set (the clipboard's, which alone offers `'range'`); a file export accepts the narrower `Extract<ExportRowsScope, …>` that excludes it.
type ExportRowsScope = 'visible' | 'all' | 'selected' | 'range'
FacetBarOrder
How a categorical facet histogram's bars are ordered.
type FacetBarOrder = 'count' | 'alpha'
FacetBoundsKind
Which family of buckets a column's facet histogram draws, or `none` for no histogram.
type FacetBoundsKind = 'numeric' | 'date' | 'category' | 'boolean' | 'none'
FacetBucketStrategy
How a facet histogram's numeric buckets are placed across a column's values.
type FacetBucketStrategy = 'equal' | 'quantile' | 'log'
FacetDateGranularity
The calendar unit a date column's facet histogram buckets by.
type FacetDateGranularity = 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year'
FacetOverflowMode
What a facet histogram does with a categorical column past its cardinality limit.
type FacetOverflowMode = 'suppress' | 'topN'
FacetSuppressedReason
Why a facet histogram was not drawn.
type FacetSuppressedReason = 'type' | 'cardinality' | 'rows' | 'streaming' | 'no-provider' | 'disabled'
Feed
A feed: any iterator that yields a snapshot first, then deltas forever.
type Feed = Iterator<FeedMessage>
Declared in lattice-grid/modules/mock-socket.
FeedMessageKind
Whether a feed message is the opening snapshot, or a delta of changes since.
type FeedMessageKind = 'snapshot' | 'delta'
Declared in lattice-grid/modules/mock-socket.
FeedRow
One record on a feed: any object. Its partition comes from a property and its identity from `rowKey`.
type FeedRow = Record<string, unknown>
Declared in lattice-grid/modules/mock-socket.
FilterCtor
A filter class. The grid instantiates one per column that uses it, and asks it to rebuild its control when the rows change.
type FilterCtor = new () => Filter
FilterKind
Which kind of filter fired: the structured condition tree, or the quick filter.
type FilterKind = 'structured' | 'quick'
FilterName
The built-in column filters, addressable by name through `column.filter`. `none` turns filtering off for a column; anything registered through `components` is also valid here.
type FilterName = 'text' | 'number' | 'date' | 'boolean' | 'set' | 'multi' | 'none' | (string & {})
FilterOp
How a filter group's children combine: conjunction, disjunction, or negation.
type FilterOp = 'and' | 'or' | 'not'
FilterSet
A filter, as data: one condition, a group nesting conditions and further groups to any depth, or `null` for no filter at all. This is the shape the filter APIs hand back and accept, so a filter can be saved with a view, sent to a server and restored without going through the user interface that built it.
type FilterSet = FilterGroup | Condition | null
FollowScope
Which slice of a source's rows a shared multi-site "follow" setting reads.
type FollowScope = 'filtered' | 'all' | 'selected' | 'grouped'
ForecastMethod
A forecasting kernel's method.
type ForecastMethod = 'movingAverage' | 'ses' | 'holt' | 'holtWinters' | 'linear'
FormatSpec
How a value is turned into the text you see. One of the four formatters, picked by the `type` on the spec; the rest of the object is that formatter's own options.
type FormatSpec = NumberFormat | DateFormat | BooleanFormat | TextFormat
FormattingScope
A column id, or `'*'` for every column.
type FormattingScope = string
FormulaResult
The result of evaluating a formula a user typed into a cell (spec 8.11).
type FormulaResult = { ok: true; value: unknown; references: string[] } | { ok: false; error: string; at?: number }
GanttBarLabel
What a Gantt bar's own label shows: the task name, its percent, its dates, or nothing.
type GanttBarLabel = 'name' | 'percent' | 'dates' | 'none'
Declared in lattice-grid/modules/gantt.
GanttCalendar
A working-time calendar: a Monday-Friday preset, or explicit working weekdays and holidays.
type GanttCalendar = 'weekends' | { workdays?: number[]; holidays?: Array<string | number | Date> }
Declared in lattice-grid/modules/gantt.
GanttConstraintType
A scheduling constraint: pin the start, pin the finish, or schedule as late as possible.
type GanttConstraintType = 'must-start-on' | 'must-finish-on' | 'as-late-as-possible' | 'MSO' | 'MFO' | 'ALAP'
Declared in lattice-grid/modules/gantt.
GanttEventName
The events a Gantt controller raises. The controller's own, not a grid's: `grid.on` takes {@link EventName} and knows nothing about these, and a grid-bound Gantt follows the grid's events itself rather than re-publishing them. `on()` takes a name and a listener and warns about nothing, so a misspelt name is a subscription that never fires. The seven `before…` events are cancellable ({@link GanttBeforeEvent}); each has a matching `<action>:cancelled` that fires when a handler refuses, carrying the same context plus the reason. `schedule` and `error` are the recompute's own pair and are raised on every recompute, whatever caused it.
type GanttEventName = 'schedule' | 'error' | 'beforeTaskEdit' | 'beforeTaskMove' | 'beforeTaskResize' | 'beforeProgressChange' | 'beforeMilestoneMove' | 'beforeDependencyCreate' | 'beforeTaskDelete' | 'taskEdit:cancelled' | 'taskMove:cancelled' | 'taskResize:cancelled' | 'progressChange:cancelled' | 'milestoneMove:cancelled' | 'dependencyCreate:cancelled' | 'taskDelete:cancelled'
Declared in lattice-grid/modules/gantt.
GanttLinkType
One of the four dependency link types (finish-to-start, start-to-start, finish-to-finish, start-to-finish).
type GanttLinkType = 'FS' | 'SS' | 'FF' | 'SF'
Declared in lattice-grid/modules/gantt.
GanttResourceSpec
Resource capacities for over-allocation detection and leveling: either a list of resources with a capacity (max concurrent units, default 1) or a name→capacity map.
type GanttResourceSpec = Array<{ id?: string; name?: string; resource?: string; capacity?: number; maxUnits?: number; max?: number; units?: number }> | Record<string, number>
Declared in lattice-grid/modules/gantt.
GanttZoom
The Gantt timeline's zoom: a named level, or raw pixels-per-day.
type GanttZoom = 'day' | 'week' | 'month' | 'quarter'
Declared in lattice-grid/modules/gantt.
GraphqlPagination
How a GraphQL adapter pages: an offset/limit list, or a Relay cursor connection.
type GraphqlPagination = 'offset' | 'cursor'
HandlerProp
The React prop name for one grid event: `'rows:changed'` is `onRowsChanged`. The pair with {@link PascalJoin} is what lets an editor complete the props of `<LatticeGrid>` from the event union itself.
type HandlerProp<E extends string> = `on${PascalJoin<E>}`
Declared in lattice-grid/modules/react.
HeaderControlsVisibility
When the per-column header controls - the sort arrow, the filter funnel and the menu button - are shown, as a grid-level default. See {@link GridConfig.headerControls}.
type HeaderControlsVisibility = 'hover' | 'always' | 'hidden' | 'none'
HistoryDirection
Which way the undo/redo stack moved.
type HistoryDirection = 'undo' | 'redo'
IconDefinition
One sprite as a registration route accepts it: `config.icons`, `registerIcon` and `registerIcons` all take this shape. The long form is the glyph itself - a view box, one or more SVG path `d` strings, and whether they are stroked or filled. The two short forms exist because most glyphs are one filled path on the house 16x16 box: a bare path string, or an array of them, is read as exactly that, so a host registering its own mark writes the path and nothing else. `path` is accepted as a singular spelling of `paths`. What comes back out of {@link IconRegistryApi} is always the normalised {@link IconGlyph}, never the short form. A name already in the registry is overridden, which is how the expander chevron or the sort arrow is swapped for a host's own.
type IconDefinition = string | string[] | { viewBox?: string; paths?: string[]; path?: string; paint?: Paint; }
IconName
A glyph name from the icon sprite registry (`packages/dom/src/cell/icons.js`). The union below is every built-in name, generated from `iconNames()` so an editor can autocomplete and typo-check them - see `test/icon-name-type-drift.test.js`, which fails if this list and the registry ever disagree. It is deliberately **not closed**: the registry is extensible at runtime via `registerIcon`, `registerIcons`, `config.icons` and `grid.icons`, and `(string & {})` widens the type so a custom registered name still typechecks without losing autocomplete on the built-ins. A name the registry has never heard of - built-in or custom - draws a blank glyph and warns once at runtime; it is not a type error.
type IconName = 'chevronRight' | 'chevronDown' | 'chevronUp' | 'chevronLeft' | 'check' | 'dash' | 'close' | 'plus' | 'minus' | 'info' | 'success' | 'warning' | 'danger' | 'clock' | 'lock' | 'link' | 'external' | 'filter' | 'pause' | 'play' | 'chart' | 'palette' | 'undo' | 'redo' | 'columns' | 'download' | 'restore' | 'spreadsheet' | 'print' | 'maximise' | 'minimise' | 'views' | 'search' | 'pencil' | 'trash' | 'share' | 'pin' | 'sortAsc' | 'sortDesc' | 'menu' | 'drag' | 'star' | 'heart' | 'circleFilled' | 'square' | 'bolt' | 'flag' | 'arrow' | 'highlight' | 'thumbUp' | 'eye' | 'eyeOff' | 'copy' | 'present' | 'blank' | (string & {})
IconSetKind
A built-in glyph set for an icon-set formatting rule.
type IconSetKind = 'arrows' | 'trafficLights' | 'ratings'
IconSetName
A built-in threshold icon set, mapping value bands to built-in glyphs.
type IconSetName = 'trafficLights' | 'arrows' | 'trafficArrows' | 'ratings' | (string & {})
ImportMode
How a confirmed import lands: added to the dataset, or replacing it.
type ImportMode = 'append' | 'replace'
IntervalBounds
Which ends of a `between` range are inclusive, in interval notation.
type IntervalBounds = '[]' | '[)' | '(]' | '()'
JoinType
Whether a join keeps only matched rows, or keeps every row on this side.
type JoinType = 'inner' | 'left'
KanbanColumnDef
A column definition: an id string, or an object configuring one column.
type KanbanColumnDef = string | { id: string; title?: string; color?: string; wipLimit?: number; collapsed?: boolean; sla?: KanbanSlaThreshold | { warn?: KanbanSlaThreshold; breach?: KanbanSlaThreshold }; slaWarn?: KanbanSlaThreshold; slaBreach?: KanbanSlaThreshold; }
Declared in lattice-grid/modules/kanban.
KanbanEventName
The events a board raises. The board's own, not the grid's: `grid.on` takes {@link EventName} and knows nothing about these, and a grid-bound board follows the grid's events itself rather than re-publishing them. `on()` warns once on any other name, because a binding to an event that can never fire is a silent no-op. The `before…` six are cancellable on the same contract the grid core uses: call `preventDefault(reason?)` on the payload, or return a Promise to hold the action until it settles; a veto fires the matching `<action>:cancelled` carrying the reason.
type KanbanEventName = 'card:click' | 'card:dblclick' | 'card:contextmenu' | 'card:move' | 'card:reverted' | 'card:confirmed' | 'selection:changed' | 'column:collapse' | 'card:add' | 'drag:start' | 'drag:end' | 'swimlane:collapse' | 'swimlane:reorder' | 'column:reorder' | 'filter:changed' | 'sprint:changed' | 'epic:changed' | 'card:expand' | 'card:drill' | 'card:edit' | 'card:sla' | 'beforeMove' | 'beforeAdd' | 'beforeEdit' | 'beforeLaneReorder' | 'beforeColumnReorder' | 'beforeColumnChange' | 'move:cancelled' | 'add:cancelled' | 'edit:cancelled' | 'laneReorder:cancelled' | 'columnReorder:cancelled' | 'columnChange:cancelled'
Declared in lattice-grid/modules/kanban.
KanbanFieldMap
A card field mapping: a property path, a function, or an object opting into inline edit.
type KanbanFieldMap = string | ((row: KanbanRow) => unknown) | { field: string; edit?: boolean; editor?: (ctx: { card: KanbanCard; field: string; value: string; commit: (value: unknown) => void; cancel: () => void }) => KanbanEditor; }
Declared in lattice-grid/modules/kanban.
KanbanReadonly
Granular readonly: the whole board, or selectively by column id and card key.
type KanbanReadonly = boolean | { board?: boolean; columns?: Record<string, boolean>; cards?: Record<string, boolean>; }
Declared in lattice-grid/modules/kanban.
KanbanRow
A row backing a card: any object. Its column comes from `columnProperty` and its identity from `rowKey`.
type KanbanRow = Record<string, unknown>
Declared in lattice-grid/modules/kanban.
KanbanSlaThreshold
A card-aging / SLA threshold: a raw millisecond count, or a `{ weeks, days, hours, minutes, seconds, ms }` spec whose fields are summed (`{ days: 3, hours: 12 }` → 3.5 days). A negative or non-finite value means "no threshold at this level".
type KanbanSlaThreshold = number | { weeks?: number; week?: number; w?: number; days?: number; day?: number; d?: number; hours?: number; hour?: number; h?: number; minutes?: number; minute?: number; m?: number; min?: number; seconds?: number; second?: number; s?: number; sec?: number; ms?: number; milliseconds?: number; }
Declared in lattice-grid/modules/kanban.
KPIAggregation
The aggregation kinds a tile can compute. `custom` is a host reducer over the rows.
type KPIAggregation = 'sum' | 'avg' | 'min' | 'max' | 'count' | 'countDistinct' | 'custom'
Declared in lattice-grid/modules/kpi.
KPIEventName
The events a KPI panel raises. The panel's own, not the grid's: `grid.on` takes {@link EventName} and knows nothing about these, and a grid-bound panel follows the grid's events itself rather than re-publishing them. `on()` warns once on any other name, because a binding to an event that can never fire is a silent no-op.
type KPIEventName = 'tile:click' | 'tile:dblclick' | 'tile:contextmenu' | 'node:toggle' | 'change'
Declared in lattice-grid/modules/kpi.
KPIFormat
Number formatting for a tile value. `percent` treats the value as a ratio (0.42 → 42%).
type KPIFormat = 'number' | 'currency' | 'percent' | 'compact' | { type?: 'number' | 'currency' | 'percent' | 'compact'; decimals?: number; currency?: string; locale?: string }
Declared in lattice-grid/modules/kpi.
KpiRollupStatus
A KPI tile or node's status including the "measured nothing" state.
type KpiRollupStatus = 'good' | 'warn' | 'critical' | 'unknown'
Declared in lattice-grid/modules/kpi.
KPIRow
A row backing a KPI aggregate: any object. Its identity comes from `rowKey`.
type KPIRow = Record<string, unknown>
Declared in lattice-grid/modules/kpi.
KpiStatus
A KPI tile or node's status: good, a warning, or critical - never `unknown`.
type KpiStatus = 'good' | 'warn' | 'critical'
Declared in lattice-grid/modules/kpi.
KpiThresholdDirection
Which way is good for a KPI threshold: a higher value, or a lower one.
type KpiThresholdDirection = 'higherIsBetter' | 'lowerIsBetter'
Declared in lattice-grid/modules/kpi.
KPITile
One tile: a `kind`-discriminated aggregate stat tile (the default) or a clock tile.
type KPITile = KPIStatTile | KPIClockTile
Declared in lattice-grid/modules/kpi.
KpiTileKind
Which kind of tile a computed KPI tile is: an aggregate stat, or a clock.
type KpiTileKind = 'stat' | 'clock'
Declared in lattice-grid/modules/kpi.
LatticeChartProps
A chart's React props: the spec, the common ones, and its five events.
type LatticeChartProps = Record<string, unknown> & LatticeViewerCommonProps & { grid?: Grid | null; onClick?: (payload: unknown) => void; onHover?: (payload: unknown) => void; onLeave?: (payload: unknown) => void; onDraw?: (payload: unknown) => void; onLegend?: (payload: unknown) => void; }
Declared in lattice-grid/modules/react.
LatticeGanttProps
The Gantt's React props.
type LatticeGanttProps = Record<string, unknown> & LatticeViewerCommonProps & { tasks?: unknown[]; dependencies?: unknown[]; onSchedule?: (payload: unknown) => void; onError?: (payload: unknown) => void; }
Declared in lattice-grid/modules/react.
LatticeGridEventProps
Every grid event as a React callback prop, each receiving the `GridEvent`.
type LatticeGridEventProps = { [E in EventName as HandlerProp<E>]?: (event: GridEvent) => void; }
Declared in lattice-grid/modules/react.
LatticeGridGlobal
The namespace object the script-tag build publishes, as a type. Named so that the ambient global below can refer to it: inside a `declare global` block the identifier `LatticeGrid` is the global being declared, so `typeof LatticeGrid` there would describe itself.
type LatticeGridGlobal = typeof LatticeGrid
LatticeLayoutProps
The layout's React props.
type LatticeLayoutProps = Record<string, unknown> & LatticeViewerCommonProps
Declared in lattice-grid/modules/react.
LatticeSvelteCallbacks
Every event of a set, as the optional callback props a caller may bind.
type LatticeSvelteCallbacks<Events extends string, Payload> = { [E in Events as `on${CamelJoin<E>}`]?: (payload: Payload) => void; }
Declared in lattice-grid/modules/svelte.
LatticeSvelteGridRegistry
The registry `GridProvider.svelte` puts in context and every viewer reads.
type LatticeSvelteGridRegistry = { publish: (name: string, grid: Grid | null) => void; get: (name?: string) => Grid | null; names: () => string[]; subscribe: (fn: () => void) => () => void; }
Declared in lattice-grid/modules/svelte.
LatticeSvelteHostProps
Host-element bindings every component here puts on its wrapper `div`.
type LatticeSvelteHostProps = { class?: string; style?: string; id?: string; }
Declared in lattice-grid/modules/svelte.
LatticeSvelteRouterHandle
The router handle `Router.svelte` puts in context.
type LatticeSvelteRouterHandle = { readonly router: unknown; attach: (grid: Grid, route: unknown, routeOptions?: Record<string, unknown>) => void; detach: (grid: Grid) => void; destroy: () => void; }
Declared in lattice-grid/modules/svelte.
LatticeTabsProps
The tab strip's React props.
type LatticeTabsProps = Record<string, unknown> & { tabs: LatticeTabSpec[]; active?: string; onBeforeTabChange?: (payload: unknown) => void; onTabChanged?: (payload: unknown) => void; onTabChangeCancelled?: (payload: unknown) => void; className?: string; style?: Record<string, unknown>; id?: string; }
Declared in lattice-grid/modules/react.
LatticeVueChartProps
A chart's Vue props: the spec, the common ones, and its five events.
type LatticeVueChartProps = Record<string, unknown> & LatticeVueViewerCommonProps & LatticeVueListeners<'click' | 'hover' | 'leave' | 'draw' | 'legend', unknown>
Declared in lattice-grid/modules/vue.
LatticeVueGanttProps
The Gantt's Vue props.
type LatticeVueGanttProps = Record<string, unknown> & LatticeVueViewerCommonProps & { tasks?: unknown[]; dependencies?: unknown[]; } & LatticeVueListeners<'schedule' | 'error', unknown>
Declared in lattice-grid/modules/vue.
LatticeVueGridEmit
What `<LatticeGrid>` emits. `grid-ready` and `grid-destroyed` are named that way because `ready` and `destroy` are **grid event names** already re-emitted here, and React and Angular name their lifecycle pair the same.
type LatticeVueGridEmit = { (event: DashJoin<EventName>, payload: GridEvent): void; (event: 'grid-ready', grid: Grid): void; (event: 'grid-destroyed'): void; }
Declared in lattice-grid/modules/vue.
LatticeVueHostProps
Host-element bindings every component here forwards to its wrapper `div`.
type LatticeVueHostProps = { class?: unknown; style?: unknown; id?: string; }
Declared in lattice-grid/modules/vue.
LatticeVueLayoutProps
The layout's Vue props.
type LatticeVueLayoutProps = Record<string, unknown> & LatticeVueViewerCommonProps
Declared in lattice-grid/modules/vue.
LatticeVueListeners
Every event of a set, as the optional listener props a caller may bind.
type LatticeVueListeners<Events extends string, Payload> = { [E in Events as ListenerProp<E>]?: (payload: Payload) => void; }
Declared in lattice-grid/modules/vue.
LatticeVueTabsProps
The tab strip's Vue props.
type LatticeVueTabsProps = Record<string, unknown> & LatticeVueHostProps & { tabs: LatticeVueTabSpec[]; active?: string; onReady?: (strip: unknown) => void; onDestroyed?: () => void; } & LatticeVueListeners<'before-tab-change' | 'tab-changed' | 'tab-change-cancelled', unknown>
Declared in lattice-grid/modules/vue.
LatticeVueViewerCommonProps
What every viewer component takes beyond its own configuration.
type LatticeVueViewerCommonProps = LatticeVueHostProps & { grid?: Grid | null; gridName?: string; onReady?: (instance: unknown) => void; onDestroyed?: () => void; }
Declared in lattice-grid/modules/vue.
LatticeVueViewerEmit
A viewer's emitter: its own events under dashed names, plus the lifecycle pair.
type LatticeVueViewerEmit<Events extends string> = { (event: Events, payload: unknown): void; (event: 'ready', instance: unknown): void; (event: 'destroyed'): void; }
Declared in lattice-grid/modules/vue.
LayoutCompaction
Which way displaced windows are pushed, and floated, when the arrangement compacts.
type LayoutCompaction = 'vertical' | 'horizontal' | 'none'
Declared in lattice-grid/modules/layout.
LayoutEventName
The events a dashboard layout raises. The layout's own, not a grid's: `grid.on` takes {@link EventName} and knows nothing about these. Each has a matching `on…` config callback (`onWindowMoved`, `onBeforeWindowClose`, …) and both routes fire. The three `before…` events are cancellable: call `preventDefault(reason?)` on the payload, or return a Promise to hold the gesture until it settles; a veto fires the matching `…:cancelled` carrying the reason. Subscribing to `'*'` receives every past-tense event and never gates.
type LayoutEventName = 'window:moved' | 'window:resized' | 'window:closed' | 'layout:changed' | 'beforeWindowMove' | 'beforeWindowResize' | 'beforeWindowClose' | 'windowMove:cancelled' | 'windowResize:cancelled' | 'windowClose:cancelled'
Declared in lattice-grid/modules/layout.
LayoutOverflow
Whether a layout axis clips its content at the edge or scrolls past it.
type LayoutOverflow = 'static' | 'scroll'
Declared in lattice-grid/modules/layout.
LicenceState
What a deployment is treated as, for licensing purposes.
type LicenceState = 'licensed' | 'localhost' | 'trial'
ListenerProp
One dashed event, as the listener prop Vue's template compiler produces: `'cell-changed'` becomes `'onCell-changed'`. Vue resolves `@cell-changed` to that prop name, so listing them is what makes a template binding type-check.
type ListenerProp<E extends string> = `on${Capitalize<E>}`
Declared in lattice-grid/modules/vue.
LookupSortBy
How a lookup's option list is ordered for display.
type LookupSortBy = 'label' | 'value' | 'optionOrder' | 'count'
MaintenanceExactness
Whether a kernel's exact tier is maintained incrementally, or rescans.
type MaintenanceExactness = 'maintained' | 'rescan'
MapProjection
A geomap's named projection; a caller may also supply a projection function directly.
type MapProjection = 'equalEarth' | 'robinson' | 'mercator' | 'equirectangular' | 'albers' | 'transverseMercator' | 'britishNationalGrid'
NumberFormatNegative
How a negative number is marked: a leading minus, parentheses, or a trailing suffix.
type NumberFormatNegative = 'minus' | 'parentheses' | 'suffix'
NumberFormatNotation
A number format's magnitude notation, mirroring `Intl.NumberFormatOptions.notation`.
type NumberFormatNotation = 'standard' | 'compact' | 'scientific'
NumberFormatStyle
A number format's family: plain decimal, currency, or a percentage.
type NumberFormatStyle = 'decimal' | 'currency' | 'percent'
Operator
The comparison a filter condition makes. Every operator has an exact negation - `eq`/`ne`, `contains`/`notContains`, `between`/`notBetween`, `in`/`notIn`, `blank`/`notBlank` - so a rule and its inverse are always both expressible. Which of them a column offers depends on its type, and a source that pushes filtering down to a query engine may accept a narrower set again.
type Operator = 'eq' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte' | 'between' | 'notBetween' | 'in' | 'notIn' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'matches' | 'blank' | 'notBlank' | 'containsAny' | 'containsAll' | 'containsNone'
OutlierMethod
Every anomaly-detection method the statistics surface offers, widest set: the robust modified z-score and Tukey's IQR fences (static or rolling), and multivariate Mahalanobis distance. A narrower site accepts a subset via `Extract<OutlierMethod, …>` rather than minting a fourth named alias.
type OutlierMethod = 'modifiedZScore' | 'iqr' | 'mahalanobis' | 'rollingModifiedZScore' | 'rollingIqr'
Paint
How an SVG shape's paths are painted: a stroked outline, or a solid fill.
type Paint = 'stroke' | 'fill'
PascalJoin
The handler prop name one event maps to, as a type: `'cell:changed'` becomes `'onCellChanged'`. Recursive over the `:` segments, so a three-part name like `'cell:edit:start'` becomes `'onCellEditStart'` - the same rule `handlerName` applies at runtime, stated once so the props type and the implementation cannot disagree.
type PascalJoin<E extends string> = E extends `${infer Head}:${infer Tail}` ? `${Capitalize<Head>}${PascalJoin<Tail>}` : Capitalize<E>
Declared in lattice-grid/modules/react.
PermissionLevel
The four corners of read × write. `writeOnly` is a secret: the column is present and editable, its value never shown, exported, copied or searched.
type PermissionLevel = 'hidden' | 'read' | 'writeOnly' | 'write'
PermissionPolicy
Who may read and write which columns, from the blunt answer to the precise one: one level for every column, a level per column id, a list of rules, a function asked once per column, or an object pairing a default with per-column overrides.
type PermissionPolicy = PermissionLevel | Record<string, PermissionLevel> | { field?: string; id?: string; permission: PermissionLevel }[] | ((column: ResolvedColumn, params: { colId: string; context?: unknown; grid?: unknown }) => PermissionLevel | undefined) | { default?: PermissionLevel; columns?: Record<string, PermissionLevel>; resolve?(column: ResolvedColumn, params: { colId: string; context?: unknown }): PermissionLevel | undefined; }
PivotGroupTotalsPlacement
Where a pivot's grand-total column group sits relative to the pivoted columns.
type PivotGroupTotalsPlacement = 'before' | 'after'
PresenceOperation
Which presence-transport call failed.
type PresenceOperation = 'subscribe' | 'publish'
Presentation
Where a card's pop-out child view appears.
type Presentation = 'drawer' | 'modal' | 'inline'
Declared in lattice-grid/modules/kanban.
PushdownClass
How a pushed-down aggregate's engine result relates to the grid's own kernel.
type PushdownClass = 'identical' | 'may-differ' | 'fallback'
QuickFilterMode
How the quick filter's text is matched against a cell.
type QuickFilterMode = 'contains' | 'words' | 'fuzzy' | 'regex'
RailActionName
The rail's built-in action names, plus `'-'` for a divider.
type RailActionName = 'undo' | 'redo' | 'pause' | 'restore' | 'maximise' | 'export' | 'excel' | 'clipboard' | 'print'
RateSource
A caller-supplied exchange-rate source. The grid ships and fetches no rates. Either a function `(from, to) => rate|null`, or a table of rates per unit of a common base (the base being whichever code maps to 1, or `rateBase`). A source that cannot answer returns `null`, which is surfaced loudly, never as zero.
type RateSource = ((from: string, to: string) => number | null) | Record<string, number>
RegressionMethod
A regression shadow's fitting method.
type RegressionMethod = 'ols' | 'wls' | 'robust' | 'quantile'
RejectedRowOperation
Which part of a rejected change a row was in.
type RejectedRowOperation = 'add' | 'update' | 'remove'
RejectedRowReason
Why a row in a change was rejected: an unknown key, or one already taken.
type RejectedRowReason = 'unknown-id' | 'duplicate-id'
RendererCtor
A renderer class. The grid instantiates one per cell element and reuses it as that element is recycled down the viewport.
type RendererCtor = new () => Renderer
RendererName
The built-in cell renderers, addressable by name through `cell.render`. Anything registered through `components` is also valid here.
type RendererName = 'area' | 'bullet' | 'checkbox' | 'colour' | 'column' | 'delta' | 'detailExpander' | 'donut' | 'gauge' | 'group' | 'icon' | 'image' | 'line' | 'link' | 'pie' | 'pill' | 'progress' | 'qrcode' | 'range' | 'rating' | 'skeleton' | 'stacked' | 'twoline' | 'winloss' | (string & {})
RenderFn
The short form of a renderer: a function handed the cell and returning the HTML string or the element to show. Reach for a `Renderer` class instead when the cell has to hold state or release something as it is recycled.
type RenderFn = (p: CellParams) => string | HTMLElement
ResolvedCapabilities
A capability set with every key present, as `capabilitiesOf` returns it. `operators` becomes a `Set` rather than staying an array: it is tested once per condition per query, and membership on an array is a scan. The declared form and the resolved form differ, which is why this is its own type.
type ResolvedCapabilities = Omit<Required<PushdownCapabilities>, 'operators' | 'mutate'> & { operators: ReadonlySet<string>; mutate: false | Required<MutateCapability>; }
Returning
What a server hands back after a successful mutation: the full row, just the key, or nothing.
type Returning = 'row' | 'key' | 'none'
RollingOutlierMethod
The rolling (windowed) anomaly methods alone, without the static ones.
type RollingOutlierMethod = 'rollingModifiedZScore' | 'rollingIqr'
RoutePredicate
What a route matches: a partition VALUE (the record is routed when `row[key] === value`), or a `fn(row)` predicate for a composite route. Declared as `unknown` because any value can be a partition key; the function form is the only one TypeScript can check.
type RoutePredicate = unknown
Declared in lattice-grid/modules/data-router.
RouterEventName
The events a data router raises. One event, and the router raises nothing else: routing itself is reported to each attached viewer through its own `rows.apply`, not through an event here. The `metrics` timer runs only while at least one `metrics` listener is registered, so collection costs nothing until someone asks for it, and stops when the last listener unsubscribes.
type RouterEventName = 'metrics'
Declared in lattice-grid/modules/data-router.
RouterJoinMissing
What a fan-in lookup join does with a row while its lookup has not arrived.
type RouterJoinMissing = 'hold' | 'passthrough' | 'null'
Declared in lattice-grid/modules/data-router.
RouterKey
A property name, or a function reading the value off a row, returning a string or number. Composite (`string[]`) keys are core-grid-only: a route (or an alert, or a group) keys its own partition by one value, so there is nothing for an array to join into here.
type RouterKey = string | ((row: RouterRecord) => string | number)
Declared in lattice-grid/modules/data-router.
RouterRecord
A record routed through a data router: any object. Its partition comes from the router's `key` and its identity within a grid from `rowKey`.
type RouterRecord = Record<string, unknown>
Declared in lattice-grid/modules/data-router.
RouterWrite
A write captured off a writable route's grid, handed to `onWrite`.
type RouterWrite = Record<string, unknown>
Declared in lattice-grid/modules/data-router.
RouteSort
A route's `sort`: a comparator, or a key and direction (`'asc'` unless `'desc'`).
type RouteSort = ((a: RouterRecord, b: RouterRecord) => number) | { key: string; dir?: 'asc' | 'desc' }
Declared in lattice-grid/modules/data-router.
RouteWhere
A filter-wire condition for a route's `where` (v7): `{ col, op, value }`, or an `and` / `or` / `not` group of them.
type RouteWhere = Record<string, unknown>
Declared in lattice-grid/modules/data-router.
RowChangeKind
Whether a structural row op is an append or a delete.
type RowChangeKind = 'append' | 'delete'
RowFormMode
Whether `GridConfig.rowForm` opens as a side drawer or a centred dialog.
type RowFormMode = 'drawer' | 'dialog'
RowPin
Which sticky strip a row is pinned in, top or bottom.
type RowPin = 'top' | 'bottom'
RowScope
Which rows a column's positional shadow (a rank or similar) is computed against.
type RowScope = 'all' | 'filtered'
RowTransferMode
Whether a row dragged out of the grid via `rowTransfer` is moved or left in place.
type RowTransferMode = 'move' | 'copy'
RunningTotalMode
A running total's shape: a running sum, a running percentage, or a period-over-period delta.
type RunningTotalMode = 'total' | 'percent' | 'delta'
ScaleFrom
Where a colour or bar scale's bounds are derived from, when `min`/`max` are not given.
type ScaleFrom = 'minmax' | 'quantile' | 'stddev'
ScrollbarMode
How the grid's scroll viewport draws its scrollbars,. `auto` is the platform's native behaviour - overlay scrollbars fade away when idle. `always` keeps that native bar shown whether or not the pointer is over the grid, so the affordance never disappears on a touchpad or an overlay OS. `custom` replaces it with a bar the grid draws itself: the same size, colour and hit area in every browser, sized by the `--lattice-scrollbar-*` tokens, for a target bigger than the platform's own thin overlay ribbon.
type ScrollbarMode = 'auto' | 'always' | 'custom'
SelectionMode
What a grid's rows and cells may have selected, and whether it is one thing or several.
type SelectionMode = 'none' | 'single' | 'multiple'
SelectionRelation
A cross-grid selection relation (v2,: a key map (target rows whose `to` value is among the selected source rows' `from` values - an IN set), or a function handed the selected source rows that returns a target-row predicate.
type SelectionRelation = { from: string; to: string } | ((selected: RouterRecord[]) => ((row: RouterRecord) => boolean))
Declared in lattice-grid/modules/data-router.
ShadowDecomposition
A seasonal decomposition's model: additive, or multiplicative.
type ShadowDecomposition = 'additive' | 'multiplicative'
ShadowKind
What a shadow column computes about a value the grid is tracking: how it has changed (updates, delta, rate, streak), when it last changed, where it sits among the other rows (rank, percentile, share of total), or how unusual it is. A shadow column sorts, filters, groups and exports like any other.
type ShadowKind = 'updates' | 'updatedAt' | 'sinceUpdate' | 'delta' | 'deltaPercent' | 'rate' | 'history' | 'firstValue' | 'streak' | 'rank' | 'rankAsc' | 'rankChange' | 'percentile' | 'quartile' | 'zScore' | 'shareOfTotal'
ShadowWithin
Whether a rolling shadow is computed per group, or across the whole dataset.
type ShadowWithin = 'group' | 'all'
ShowWhen
When a leaf column or a column group is shown, relative to an ancestor band's open state.
type ShowWhen = 'open' | 'closed' | 'always'
Side
The left or right side of a chart: a measure axis, or a combo measure's side.
type Side = 'left' | 'right'
SignificanceTest
Which two-sample significance test is used, or `auto` to pick by column family.
type SignificanceTest = 'auto' | 'welch' | 'mannWhitney' | 'chiSquare'
SlaAgeChipVisibility
Whether a card's age chip shows always, or only once it reaches warn or breach.
type SlaAgeChipVisibility = 'always' | 'threshold'
Declared in lattice-grid/modules/kanban.
SlaAgeingBasis
Where a card's ageing clock starts: in its current column, or since it arrived on the board.
type SlaAgeingBasis = 'column' | 'board'
Declared in lattice-grid/modules/kanban.
SmoothingMethod
An exponential-smoothing shadow's model: single smoothing, or Holt's level+trend.
type SmoothingMethod = 'ses' | 'holt'
SortDirection
A sort direction: ascending or descending.
type SortDirection = 'asc' | 'desc'
SourceConfig
Where a grid's rows come from: an array held in memory, a paged endpoint, a remote query, a live stream, or rows derived from another grid. The `type` field picks which, and the rest of the object is that source's own options.
type SourceConfig = MemorySourceConfig | PagedSourceConfig | RemoteSourceConfig | StreamSourceConfig | DerivedSourceConfig
SourceMode
Which kind of data source a grid is bound to.
type SourceMode = 'memory' | 'paged' | 'remote' | 'stream'
SpcStatistic
Which statistic a confidence interval reads: a mean, or a proportion.
type SpcStatistic = 'mean' | 'proportion'
SpecStatus
The three verdicts a `specStatus` shadow can report.
type SpecStatus = 'PASS' | 'WARN' | 'FAIL'
StateChangeCause
What caused a `state:changed`. `'user'` is a change to one part of the view - a sort, a filter, a column moved, resized, pinned or hidden, a grouping, a page - whether it arrived as a gesture or as the equivalent API call. `'apply'` is `state.apply()`, including the restore an undo performs and a `config.state` seed at construction. `'reset'` is `state.reset()`, and is the one a persistence layer skips: saving the reset arrangement writes the default straight back over the view the user had just abandoned.
type StateChangeCause = 'user' | 'apply' | 'reset'
StateSection
Every top-level section of a {@link GridState} bar `version` - the vocabulary `state.apply`'s `skip` list, `StateApplyReport.applied` and `StateChangedEvent.sections` all speak, derived from `GridState` itself so a new section cannot appear in one and be missing from the others.
type StateSection = Exclude<keyof GridState, 'version'>
StatFollowScope
Which of a grid's rows feed a KPI stat's value.
type StatFollowScope = 'filtered' | 'all' | 'selected'
StatGoodDirection
Whether a rise in a KPI stat's value counts as good news.
type StatGoodDirection = 'up' | 'down' | 'neither'
TabsEventName
The events a tabbed grid raises. The strip's own, not a grid's: `grid.on` takes {@link EventName} and knows nothing about these, and each tab's grid keeps raising its own events itself. `on()` warns once on any other name, because a binding to an event that can never fire is a silent no-op. Each event also has a config callback (`onBeforeTabChange`, `onTabChange`, `onTabChangeCancelled`); both routes fire. Only `beforeTabChange` is cancellable - it is the one that runs before anything moves. `tab:changed` and `tabChange:cancelled` report a decision already taken and carry no `preventDefault`.
type TabsEventName = 'beforeTabChange' | 'tab:changed' | 'tabChange:cancelled'
Declared in lattice-grid/modules/tabs.
TargetSize
Whether interactive targets are sized for a fine pointer or raised for touch.
type TargetSize = 'default' | 'large'
TestSelection
Whether a two-sample test was chosen automatically, or forced by the caller.
type TestSelection = 'auto' | 'override'
TextTransform
A locale-aware case change for text display: upper, lower, title, or none.
type TextTransform = 'none' | 'upper' | 'lower' | 'title'
Theme
A shipped theme, or your own name, the value is written to `data-theme` on the grid's root, so `.lattice[data-theme="mine"]` is all a custom one needs. Unset follows the viewer's `prefers-color-scheme`.
type Theme = 'light' | 'dark' | 'high-contrast' | 'terminal' | (string & {})
ThresholdLevel
An SLA threshold classification: on time, past the warn threshold, or past the breach one.
type ThresholdLevel = 'ok' | 'warn' | 'breach'
Declared in lattice-grid/modules/kanban.
TimeStyle
A locale-chosen time form, mirroring `Intl.DateTimeFormatOptions.timeStyle`.
type TimeStyle = 'short' | 'medium' | 'long'
ToolPanelName
The built-in tool panels, addressable by name from configuration.
type ToolPanelName = 'columns' | 'filters' | 'views' | 'quick' | 'formatting' | (string & {})
ToolPanelSide
Which edge a docked tool panel sits against.
type ToolPanelSide = 'left' | 'right'
TotalFn
Your own aggregation: handed every value in the group, plus the row the total is being computed for and the grid it belongs to, and returning the value to show.
type TotalFn = (values: unknown[], ctx: { row: Row; column: Column; grid: Grid; context: unknown }) => unknown
TotalName
The built-in aggregations, used for group totals, the footer row and pivot values. `countValues` counts the non-blank ones; `first` and `last` take the value at the ends of the group in its current order. Anything registered as a custom total is also valid here.
type TotalName = 'sum' | 'min' | 'max' | 'avg' | 'count' | 'first' | 'last' | 'countValues' | (string & {})
TypeName
What kind of value a column holds, which is what decides how it is parsed, sorted, filtered, aligned and formatted before you configure anything else. The first few are inferred from the data. Everything after them is asked for by name on the column, because a number is a number until you say it is a bitrate, a decibel, an IPv4 address or a duration.
type TypeName = 'text' | 'number' | 'boolean' | 'date' | 'dateString' | 'object' | 'lookup' | 'image'
UnitSymbolPlacement
Whether a unit's symbol is written before the number or after it.
type UnitSymbolPlacement = 'suffix' | 'prefix'
Unsubscribe
What a subscription hands back: call it to stop listening, without having to keep hold of the handler for an `off()`.
type Unsubscribe = () => void
UpdateKind
Which mutation a `MutationOp` carries: an insert, a patch, or a delete.
type UpdateKind = 'append' | 'update' | 'delete'
UpdatesFlushMode
When a queued update batch applies: on a paint boundary, at end of task, on the coalescing window, or only when asked.
type UpdatesFlushMode = 'frame' | 'microtask' | 'interval' | 'manual'
UpdateState
Whether an outstanding write or row op is still the live one, or was superseded.
type UpdateState = 'pending' | 'superseded'
UrlSourceFormat
A URL source's file format: a whole JSON document, or newline-delimited JSON.
type UrlSourceFormat = 'json' | 'ndjson'
VAlign
Vertical alignment of a cell's content within its row. The vertical counterpart to {@link Align}. `top` sits the content at the top of the row, `middle` centres it and `bottom` drops it to the bottom. It is most visible on tall or `autoHeight` rows, where a wrapped-text column can be `top` while its single-line neighbours are `middle`.
type VAlign = 'top' | 'middle' | 'bottom'
VariantName
The colour role a decoration takes, named by meaning rather than by hue so that a theme restyles every grid at once. `none` draws no decoration at all, and your own name is accepted for a variant you have defined through `variants`.
type VariantName = 'neutral' | 'info' | 'success' | 'warning' | 'danger' | 'accent' | 'none' | (string & {})
VariantSpec
Which variant a cell takes, from the simplest answer to the most conditional: one name for the whole column, a lookup keyed on the cell's value, a list of rules tried in order, or a function of the cell.
type VariantSpec = VariantName | { map: Record<string, VariantName>; default?: VariantName } | { when: VariantWhen[]; default?: VariantName } | ((p: CellParams) => VariantName)
ViewChangeReason
What happened to a saved view, or the whole set.
type ViewChangeReason = 'save' | 'update' | 'rename' | 'remove' | 'default' | 'import' | 'seed' | 'replace'
ViewConflictPolicy
What an imported view named the same as an existing one does: keep both, overwrite, or skip.
type ViewConflictPolicy = 'rename' | 'overwrite' | 'skip'
ViewerKind
Every viewer a framework adapter's generic `createLatticeViewer`/`bindViewer` helper can bind to. The widest set across React, Vue and Svelte; a helper that supports fewer of them still takes this type; the ones it cannot actually build fail at the call, not at the type.
type ViewerKind = 'kpi' | 'kanban' | 'tabs' | 'chart' | 'gantt' | 'layout' | 'router'
ViewerOrigin
Who asked for a viewer-chrome change - a tab switch, a layout window moved or closed - narrower than {@link EventOrigin} because these are always either a direct interaction or an API call, never the grid's own startup or an AI write.
type ViewerOrigin = 'api' | 'user'
ViewPresentation
Which responsive layout the grid's body is rendered as: cards, or a table.
type ViewPresentation = 'cards' | 'table'
WindowedFn
A named aggregate a windowed reduction can return.
type WindowedFn = 'sum' | 'avg' | 'mean' | 'min' | 'max' | 'count' | 'variance' | 'stddev'
WindowKind
How a rolling shadow's window is measured: a row count, a time span, or the whole session.
type WindowKind = 'count' | 'time' | 'session'