Lattice Grid Buy a licence

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.

PropertyTypeDescription
acfnumber[]The autocorrelation at each lag; index 0 is lag 0 and is always 1.
pacfnumber[]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.
nnumberThe series length the ACF/PACF were computed over.
nlagsnumberThe maximum lag.
approximatebooleanAlways true: the ±1.96/√n band is an approximation.

AdfResult

The Augmented Dickey-Fuller stationarity test result.

PropertyTypeDescription
statisticnumberThe ADF t-statistic on the lagged level.
usedLagnumberThe number of augmenting lags chosen by AIC.
nobsnumberThe 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.
pValuenumberAn approximate p-value, interpolated across the critical-value ladder.
pApproximatebooleanAlways true: the p-value is an interpolation, not the MacKinnon surface.
stationarybooleanWhether the series is stationary at the 5% level.
verdictstringThe 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.

PropertyTypeDescription
idstringThe output column the aggregate fills.
colstringThe column being reduced.
fnstringThe reduction asked for - `sum`, `avg`, `p95` and the rest.
classPushdownClass 'identical' | 'may-differ' | 'fallback'How the engine result relates to the grid kernel.
reasonstringWhy it is client-side, when it is (config, fallback, or the guard). (optional)
weightstringThe column supplying the weights, for a weighted reduction. (optional)
paramsRecord<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`.

PropertyTypeDescription
idstringKeys the result back to the request.
colstringThe column to reduce.
fnstringThe statistic name, as used in `total: '<name>'`.
weightstringThe second column, for a two-column statistic. (optional)
paramsRecord<string, unknown>Parameters the statistic takes, e.g. a trim share. (optional)

AnomalyReason

PropertyTypeDescription
columnstringThe column that put this row over the line.
namestringThe column's display name, or its id.
valuenumberThe row's value in that column.
scorenumberThe modified z-score, for the `modifiedZScore` method. (optional)
lowernumberThe lower fence, for the `iqr` method. (optional)
uppernumberThe upper fence, for the `iqr` method. (optional)
methodExtract<OutlierMethod, 'modifiedZScore' | 'iqr'>Which rule flagged it. (optional)

AnomalyReport

PropertyTypeDescription
methodExtract<OutlierMethod, 'modifiedZScore' | 'iqr' | 'mahalanobis'>Which rule produced the report.
knumberThe IQR fence multiplier, for the `iqr` method. (optional)
nnumberHow many rows the scan ran over.
rowsAnomalyRow[]The flagged rows, worst first.
flaggednumberHow many rows were flagged.
skippedstring[]The column ids that were not numeric and so could not be scored.
scorednumberHow many numeric columns were scored (univariate). (optional)
columnsunknownPer-column summaries (univariate): the centre, spread and fence per column. (optional)
dfnumberThe degrees of freedom of the χ² cut (multivariate). (optional)
cutoffnumber | nullThe χ² cut the squared distance is compared against (multivariate). (optional)
centernumber[]The joint centre the distances are measured from (multivariate). (optional)
usednumberHow many complete rows defined the metric (multivariate). (optional)
singularbooleanWhether the covariance was singular and had to be regularised (multivariate). (optional)

AnomalyRow

PropertyTypeDescription
rowKeystring | nullThe row key - stable across a sort or a feed, where the index is not.
indexnumberThe physical row index at the time of the call.
scorenumber | nullThe 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.
squarednumber | nullThe squared Mahalanobis distance, for the `mahalanobis` method. (optional)
whyAnomalyReason[]Why this row was flagged: the columns and how far, so it is explainable.

ApproximateEntry

One entry of the approximate maintenance tier.

PropertyTypeDescription
sketchstringThe sketch that backs this kernel: `HyperLogLog`, `KLL`, `SpaceSaving`.
boundErrorBoundThe error bound the sketch is verified to meet.

CapabilityInterval

An interval for a capability index, by Bissell's approximation.

PropertyTypeDescription
indexnumberThe point estimate the interval is around - the Cpk or Ppk it was computed for.
lowernumberThe 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.
uppernumberThe upper bound.
marginnumberHalf the interval's width - the ± figure.
nnumberHow many readings the index was computed from. Two or more, or there is no interval.
confidencenumberThe 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.

PropertyTypeDescription
scalenumberMultiply the image's pixel dimensions - 2 for a retina-quality still, 3 or 4 for a slide. 2 by default. (optional)
backgroundstringThe colour painted behind the grid, since a grid whose own background is transparent would otherwise photograph onto nothing. (optional)
downloadbooleanSave 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)
fileNamestringThe name to save under. Supplying one also triggers the download unless `download: false` says otherwise. (optional)

ChangeResult

PropertyTypeDescription
addedRow[]The rows that were added.
updatedRow[]The rows that were updated.
removedstring[]The keys of the rows that were removed.
rejectedRejectedRow[]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

PropertyTypeDescription
kindChartAnnotationKind '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)
valuenumberA constant value, for a line, target or callout's measure position. (optional)
computeChartAnnotationCompute | stringA reduction of the annotated data instead of a constant. (optional)
fromnumber | stringA 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)
tonumber | stringA band's far edge - a measure value on a horizontal band, an x position on a vertical one. (optional)
fromComputestringCompute a band's near edge from the data instead of stating it, by reduction name. (optional)
toComputestringCompute a band's far edge from the data instead of stating it. (optional)
xunknownA vertical line's, event marker's or callout's x position: a category or a number. (optional)
atunknownAn alias for `x`, read when `x` is absent. (optional)
orientChartAnnotationOrient 'horizontal' | 'vertical'Force a line vertical rather than horizontal, or shade a `band` across an x-range rather than a measure range. (optional)
axisChartAxisSide 'left' | 'right' | 'y2'Which measure axis the annotation reads. (optional)
seriesstringRestrict a `compute` to one series, by its key. (optional)
labelstringThe text drawn beside the annotation, and the sentence it contributes to the accessible table. Omitted, the annotation is drawn unlabelled. (optional)
colourstringThe annotation's stroke, and a band's fill. Defaults to `currentColor`. (optional)
opacitynumberA band's fill opacity; the default is 0.12. (optional)
classNamestringExtra 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.

PropertyTypeDescription
titlestringThe 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)
minnumberFix the axis rather than taking its extent from the data. (optional)
maxnumberFix the top of the axis rather than taking it from the data. (optional)
ticksnumber | unknown[]A tick count, or the exact values to tick. (optional)
formatstring | ((value: unknown) => string)A format mask, or a function of the value. (optional)
gridbooleanDraw the gridlines this axis owns. Default true for the measure axis. (optional)
labelsbooleanDraw the tick labels. (optional)
scaleChartScale '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)
everynumberShow every nth category label, on a crowded category axis. (optional)
rotateboolean | 'auto'Force the category labels' rotation rather than deciding it. (optional)
windowPick<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.

PropertyTypeDescription
modestringWhat the spec asked a brush to do: `zoom` the chart's own domain, or `filter` the grid.
kindstringWhat the dragged range resolved to: a continuous `range`, or the discrete `values` of a category axis.
valuesunknown[]The category values the drag covered, on a category axis.
range{ from: unknown; to: unknown } | nullThe numeric or time bounds the drag covered, on a continuous axis, or null.
axisstringWhich axis was dragged: `x`, `y` or `y2`.
columnstring | nullThe grid column the range names - the measure's on a value axis, the dimension's on `x`.
defaultPreventedbooleanTrue once a handler has called `preventDefault`. Absent until then - a handler may also set it directly, which the chart honours the same way. (optional)
MethodSignatureParametersReturnsDescription
preventDefault(): void - voidStop 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.

PropertyTypeDescription
defaultPreventedbooleanTrue once a handler has called `preventDefault`. Absent until then - a handler may also set it directly, which the chart honours the same way. (optional)
MethodSignatureParametersReturnsDescription
preventDefault(): void - voidStop 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.

PropertyTypeDescription
labelstringThe mark's label: the category, the slice, the tile, the region or the node.
valuenumber | nullThe measure under the mark when a single series sits there, otherwise null - in which case the per-series numbers are in `series`.
categoryunknownThe value to filter `column` to: the stored category behind the label, or null where the geometry has none.
columnstring | nullThe grid column the mark filters on, or null (a network node is a source in some rows and a target in others).
seriesChartDatumSeries[] | nullThe per-series readings under the mark, or null on a geometry that has one value per mark.
rowKeysunknown[]The keys of the source rows behind the mark; empty where the geometry keeps none.
pathunknown[]The mark's path from the drawn root, on a hierarchy - a treemap tile, a sunburst arc, a flow end. (optional)
depthnumberHow deep the mark sits below the drawn root, on a hierarchy. (optional)
fromnumberA histogram bin's lower bound, present only on a bin. (optional)
tonumberA histogram bin's upper bound, present only on a bin. (optional)
nativeobjectThe 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.

PropertyTypeDescription
keystringThe series key, as bound.
labelstringThe series' display label.
valuenumber | nullThis series' value at the mark.
rowsnumberHow 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.

PropertyTypeDescription
chartTypestringThe type drawn, which for an extension type is its registered name.
categoriesunknown[]The categories drawn, in plot order.
emptybooleanWhether 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.

PropertyTypeDescription
pathunknown[]The drill path from the top, a label per level.
labelstring | nullThe 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.

PropertyTypeDescription
typeChartEventName 'click' | 'hover' | 'leave' | 'focus' | 'draw' | 'drill' | 'brush' | 'legend'Which event this is: `click`, `hover`, `leave`, `focus`, `draw`, `drill`, `brush` or `legend`.
chartChartThe chart that raised it.
gridGridThe grid the chart draws, as given in the spec.

ChartEventPayloads

What a handler receives, per chart event.

PropertyTypeDescription
clickChartClickEventThe mark clicked, with `preventDefault` to take the click over.
hoverChartDatumEventThe mark under the pointer, the same shape a click reports.
leaveChartEventNothing but the chart and its grid: the pointer is over no mark.
focusChartFocusEventThe mark the keyboard is on.
drawChartDrawEventWhat was drawn, and whether there was anything to draw.
drillChartDrillEventThe new drill path.
brushChartBrushEventThe range dragged out, and the column it names, with `preventDefault` to take the brush over.
legendChartLegendEventThe 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.

PropertyTypeDescription
labelstringThe focused mark's label.
valuenumber | nullThe focused mark's value.
indexnumberThe mark's position in the drawn order.

ChartLabels

Data labels beside each mark.

PropertyTypeDescription
positionChartLabelPosition '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)
formatstring | ((value: unknown, point?: unknown) => string)A format mask, or a function of the value. (optional)
minGapnumberPixels 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.

PropertyTypeDescription
labelstringThe clicked entry's label.
keystringThe clicked entry's series key.
hiddenbooleanWhether that series is now hidden.
hiddenKeysstring[]Every hidden series key after the click.

ChartMeasure

PropertyTypeDescription
colstringThe column reduced for this measure.
fnTotalName 'sum' | 'min' | 'max' | 'avg' | 'count' | 'first' | 'last' | 'countValues' | (string & {})A reduction name, as the totals row uses. (optional)
typeChartMeasureType 'bar' | 'line' | 'area'The mark this measure draws with, on a combo chart. (optional)
axisSide 'left' | 'right'Which axis it belongs to, on a combo chart. (optional)
titlestringThe 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.

PropertyTypeDescription
idstringMatches a value in the `source` or `target` column.
labelstringDrawn beneath the node. The id is used when this is absent. (optional)
iconstringA name in the grid's icon registry, drawn inside the node's disc. (optional)
xnumberWhere to pin it, as a fraction of the plot's width. (optional)
ynumberWhere to pin it, as a fraction of the plot's height. (optional)

ChartTrend

One trend or forecast overlay.

PropertyTypeDescription
methodChartTrendMethodThe overlay method; `linear` by default. (optional)
forecastnumberFor 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)
windownumberFor the moving-average method, the trailing window in points; 3 by default. (optional)
periodnumberAn alias for `window`. (optional)
kindSmoothingMethod 'ses' | 'holt'For the exponential method, single smoothing (`ses`) or Holt's level+trend (`holt`). (optional)
alphanumberFor the exponential method, the level factor in `[0, 1]`; omit to fit it. (optional)
betanumberFor Holt's exponential smoothing, the trend factor in `[0, 1]`; omit to fit it. (optional)
bandboolean | '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)
confidencenumberThe forecast band's confidence level in `(0, 1)`; 0.95 by default. (optional)
labelboolean`false` suppresses the R² label on a linear trend. (optional)

ClipboardOptions

PropertyTypeDescription
headersbooleanPut a row of column titles above the copied cells. (optional)
rowsExportRowsScope 'visible' | 'all' | 'selected' | 'range'What to copy: `'visible'`, `'all'`, `'selected'` rows, or `'range'` for the selected cell rectangle. (optional)
sanitisebooleanApply 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.

PropertyTypeDescription
columnstringThe column id.
namestringThe column's display name, or its id.
measureExtract<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.
magnitudenumber | nullThe effect size in its own terms, or null when it has no scale here.
distancenumberThe total variation distance between subset and population, 0 to 1 - the common scale both families reduce to, and what the ranking sorts by.
directionnumber+1 when the subset sits above the population, −1 below, 0 for a mix.
subsetNnumberHow many rows the subset comparison stood on.
populationNnumberHow many rows the population comparison stood on.
reliablebooleanFalse when the subset is too small to read the difference from.

ColumnDistribution

PropertyTypeDescription
nnumberHow many usable numbers the column yielded. Dates count, as their epoch milliseconds; nulls and unparseable values do not.
minnumberThe smallest usable value in the column.
maxnumberThe largest usable value in the column.
meannumberThe arithmetic mean, accumulated by Welford's method so a column of large values with a small spread keeps its precision.
stddevnumberThe sample standard deviation, which `from: 'stddev'` scales against. Zero when there is only one value.
mediannumberThe middle value, by the same quantile definition the totals row and the formula engine use.
q1numberThe first quartile, which `bottomPercent` and outlier rules resolve against.
q3numberThe third quartile, which `topPercent` and outlier rules resolve against.
iqrnumberThe interquartile range, `q3 - q1`.
sortednumber[]Every usable value, ascending - what a percentile threshold is read from.

ColumnProfile

PropertyTypeDescription
columnstringThe id of the column this profile describes.
rowsnumberHow many rows the profile was computed over - the rows the filters leave, or the window the source is holding.
presentnumberHow many of those rows carry a value. Counted as values, not as numbers, so a text column is not reported as entirely missing.
missingnumberHow many of those rows are null, undefined or empty - the first question a profile is opened to answer.
numericnumberHow 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)
distinctnumberHow many different values the column holds over those rows.
minnumber | nullThe smallest numeric value, or null on a column with no numbers in it.
maxnumber | nullThe largest numeric value, or null on a column with no numbers in it.
meannumber | nullThe arithmetic mean of the numeric values, or null when there are none.
mediannumber | nullThe middle value, which says whether the mean is representative. Null when there are no numbers.
q1number | nullThe first quartile - a quarter of the values fall below it. Null when there are no numbers.
q3number | nullThe third quartile - three quarters of the values fall below it. Null when there are no numbers.
iqrnumber | nullThe interquartile range, `q3 - q1`: the spread of the middle half, which outliers cannot inflate. Null when there are no numbers.
stddevnumber | nullThe sample standard deviation, needing at least two numbers; null otherwise.
outliersnumberHow 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.
histogramHistogramBin[]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.
topValuesTopValue[]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.

PropertyTypeDescription
countnumberHow many comments the cell carries. A cell whose count reaches zero is dropped from the index rather than kept at 0.
unresolvednumberHow many of them are unresolved - what the marker colours itself by, and what the hidden-comment count sums.
updatednumberWhen 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.

PropertyTypeDescription
meannumberThe sample mean the interval is centred on.
lowernumberThe lower bound: the mean less the margin.
uppernumberThe upper bound: the mean plus the margin.
marginnumberHalf 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.
nnumberHow 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.
confidencenumberThe level the bounds were computed at, 0 to 1.

CsvExportOptions

PropertyTypeDescription
delimiterstringWhat separates fields. A comma by default; a field containing it is quoted. (optional)
quotestringThe 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)
lineEndingstringWhat separates rows. `\r\n` by default, which is what RFC 4180 and Excel expect. (optional)
headersbooleanWrite a header row of column titles. On by default. (optional)
columnsstring[]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)
hiddenbooleanInclude 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)
rowsExtract<ExportRowsScope, 'visible' | 'all' | 'selected'>Which rows to export: `'visible'` (the default - what the filters and sort leave), `'all'`, or `'selected'`. (optional)
sanitiseboolean | { 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)
bombooleanEmit a UTF-8 byte-order mark, so Excel detects the encoding instead of guessing at it. Off by default. (optional)
fileNamestringThe name for the downloaded file. A `.csv` extension is added when it has none, and a name is generated when you give none. (optional)
downloadbooleanTrigger a browser download instead of returning the text. The call then returns the blob, so a headless caller still gets something usable. (optional)
MethodSignatureParametersReturnsDescription
processCell(p: CellParams) => stringp: CellParams=> stringRewrite 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

PropertyTypeDescription
codestringThe default currency code for bare numeric input, e.g. `'USD'`. (optional)
displaystringThe currency to render and aggregate in. Omit to keep each cell's own. (optional)
ratesRateSourceThe caller's rate source: a `(from,to)=>rate|null` fn or a rate table. (optional)
rateBasestringThe code a rate *table* is denominated in, when not the one mapping to 1. (optional)
decimalsnumberFixed fraction digits; omit for the code's own convention. (optional)
localestringThe locale for number formatting. (optional)
nullDisplaystringText for a null cell. (optional)
missingRatestringThe loud marker rendered when a needed rate is missing. (optional)
excelstringAn Excel number-format override. (optional)
codesstring[]The code list a currency editor's picker offers. (optional)

DatasetColumnDifference

PropertyTypeDescription
columnstringThe column id, present on both grids.
namestringThe column's display name, or its id.
measureExtract<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.
magnitudenumber | nullThe effect size in its own terms, or null when it has no scale here.
distancenumberThe total variation distance between the two datasets, 0 to 1 - the common scale both families reduce to, and what the ranking sorts by.
directionnumber+1 when dataset A sits above dataset B, −1 below, 0 for a mix.
nAnumberHow many rows the first grid's side stood on.
nBnumberHow many rows the second grid's side stood on.
reliablebooleanFalse when either side is too small to read the difference from.

DatasetComparison

PropertyTypeDescription
rankedDatasetColumnDifference[]Every shared column, largest difference first.
nAnumberHow many rows the first grid contributed (its filtered set).
nBnumberHow 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.

PropertyTypeDescription
idstringStable identifier, nameable in a support conversation.
messagestringA plain description of what was found.
valuesRecord<string, unknown>The specific values involved, so the warning is actionable.
countnumberHow 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.
firstnumberWhen it was first raised, as epoch milliseconds.
lastnumberWhen it was last raised, as epoch milliseconds - which, with `count`, says whether it is still happening.
sourceDiagnosticSource '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.

PropertyTypeDescription
kindErrorBoundKind 'deterministic' | 'probabilistic' | 'exact'`deterministic` every run, `probabilistic` in expectation, `exact` to float rounding.
metricErrorBoundMetric 'absolute' | 'relative' | 'rank' | 'none'What the number measures. `rank` is a fraction of the rank, for quantiles.
valuenumberThe bound itself, in the unit `metric` names.
statementstringA one-line human reading of the guarantee.

ExcelBorderSpec

A cell border, per edge. `true` means a thin line; a string names the style.

PropertyTypeDescription
leftboolean | stringThe line on the cell's left edge: `true` for a thin line, or a named style (`'thin'`, `'medium'`, `'hair'`, …). Omit for no line. (optional)
rightboolean | stringThe line on the cell's right edge, in the same forms. (optional)
topboolean | stringThe line on the cell's top edge, in the same forms. (optional)
bottomboolean | stringThe line on the cell's bottom edge, in the same forms. (optional)

ExcelCellStyle

A conditional-formatting rule's rendering, returned by `cellStyle`.

PropertyTypeDescription
boldbooleanDraw the cell's text bold. (optional)
italicbooleanDraw the cell's text italic. (optional)
colourstringFont colour as 6- or 8-digit hex/ARGB, e.g. 'FFFF0000'. `color` is an alias. (optional)
colorstringAmerican spelling of `colour`; either is accepted. (optional)
fillstringSolid fill colour as 6- or 8-digit hex/ARGB. (optional)

ExcelExportOptions

PropertyTypeDescription
sheetNamestringThe worksheet's name. `'Sheet1'` by default, and made unique and legal for Excel if it is neither. (optional)
freezePanesbooleanFreeze the header rows and the pinned columns, so they stay in view as the sheet scrolls. On by default. (optional)
variantFillsbooleanCarry the grid's cell variants across as solid fills. Off by default: a printed spreadsheet is usually wanted plain. (optional)
bordersboolean | string | ExcelBorderSpecDraw 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)
hiddenColumnsExcelHiddenColumns '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)
autoFilterbooleanPut Excel's filter dropdowns on the header row, so the sheet opens ready to filter. On by default; `false` writes a plain header. (optional)
mergesstring[]Explicit merged body ranges in A1 form, e.g. ['A3:A4']. (optional)
MethodSignatureParametersReturnsDescription
onProgress(p: { written: number; total: number }) => voidp: { written: number; total: number }=> voidCalled 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.

PropertyTypeDescription
boundsFacetBounds | nullWhere the bars are. `null` until the column has been counted, or when it has no histogram.
countsUint32Array | nullCounts under every filter except this column's own. Aligned to `buckets`.
unfilteredUint32Array | nullCounts with no filter applied, for the "40 of 200" reading.
stalebooleanTrue while a recount is outstanding; draw the previous counts faded.
suppressedstring | nullWhy 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.

PropertyTypeDescription
currentnumber1-based position of the current match; 0 when there is none.
totalnumberHow many matches were found in the rows that were actually searched.
completebooleanFalse while the bar's sliced scan is still running, so a partial count is never read as final.
windowedbooleanTrue when the search covered a window rather than the whole set - a paged or streaming source. It is the flag that keeps `total` honest.
loadednumberRows the search actually read; a windowed source's not-yet-fetched placeholders are not counted.
rowsnumberThe rows the source reports for the whole matching set, when it can say.

FindMatch

One matching cell.

PropertyTypeDescription
keystringThe key of the row the match is in.
colIdstringThe column the match is in.
indexnumberThe display index, or -1 for a row pinned to an edge.
pinnedRowPin | nullWhich 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.

PropertyTypeDescription
caseSensitivebooleanMatch letter case exactly. Default false. (optional)
wholeCellbooleanThe whole cell text must equal the search text rather than contain it. Default false. (optional)
columnsstring[] | string | nullSearch only these column ids. Omitted searches every visible column. (optional)
fromnumberThe 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.

PropertyTypeDescription
textstringWhat is being searched for. Empty when nothing is.
caseSensitivebooleanWhether the search distinguishes case. Off by default.
wholeCellbooleanWhether a cell must match the text entirely rather than contain it. Off by default.
columnsstring[] | nullThe columns being searched, or `null` for every visible column.
openbooleanWhether 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.

PropertyTypeDescription
stepnumberThe step ahead, `1 … horizon`.
atnumberThe time-axis position the step is stamped at, extrapolated at the mean spacing.
meannumberThe point forecast.
lowernumber | nullThe prediction-interval lower bound (a future observation), or null when none applies.
uppernumber | nullThe prediction-interval upper bound, or null when none applies.
lowerMeannumber | nullThe mean-response (confidence) lower bound - `linear` only, the band a trendline draws. (optional)
upperMeannumber | nullThe mean-response (confidence) upper bound - `linear` only. (optional)
senumber | nullThe 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.

PropertyTypeDescription
methodForecastMethod 'movingAverage' | 'ses' | 'holt' | 'holtWinters' | 'linear'Which method produced it.
horizonnumberHow many steps ahead were projected.
confidencenumberThe band level, e.g. 0.95.
nnumberHow many finite readings the fit used.
sigmanumber | nullThe residual standard deviation the bands were built from, or null when there was none.
r2numberThe 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`.
pointsForecastPoint[]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`.

PropertyTypeDescription
idstringThe pack's identity, which `shapes: { pack: id }` names once the module has been imported.
titlestringWhat the pack covers, in words - for a picker or a caption.
kindstringThe family of geometry the pack holds (`world`, `uk`, `us-states`, …), so a host can tell two packs apart without parsing the id.
projectionChartSpec['projection']The projection this geometry is meant to be drawn in; the chart uses it unless the spec names its own. (optional)
projectionOptionsChartSpec['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.
attributionstringThe attribution line the licence requires, verbatim, or `''` when it asks for none.
topologyobjectThe pack's geometry, as TopoJSON. Single-layer packs carry it here; a multi-layer pack carries `layers` instead. (optional)
layersRecord<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)
defaultLayerstringWhich layer is drawn when the spec names none. Unset, the first layer in the object is used. (optional)

GridModule

PropertyTypeDescription
namestringThe 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.
versionstringThe 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)
MethodSignatureParametersReturnsDescription
install(ctx: ModuleContext): voidctx: ModuleContextvoidRegister 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): voidctx: ModuleContextvoidUndo what `install` did. The capability set is rebuilt from the modules that remain, and subscribers are told which regions need repainting. (optional)

GroupComparison

PropertyTypeDescription
testExtract<SignificanceTest, 'welch' | 'mannWhitney' | 'chiSquare'>The test used, named so it is never hidden.
chosenByTestSelection 'auto' | 'override'Whether the test was chosen automatically or forced by the caller.
reasonstringWhy this test - the column family, a normality screen, or the override.
statisticnumberThe test statistic.
statisticNamestringWhat the statistic is: `t`, `U`, or `chiSquare`.
dfnumber | nullThe degrees of freedom, where the test has them; null for Mann-Whitney.
pValuenumberThe two-sided p-value, returned as data for the caller to interpret. Never thresholded into a verdict here.
intervalGroupDifferenceInterval | nullThe confidence interval on the difference, or null when there is none.
effectSizeGroupEffectSizeThe paired effect size, so the p-value is never read on its own.
nAnumberHow many rows the first group stood on.
nBnumberHow many rows the second group stood on.
groups[unknown, unknown]The two group values compared, as keys.
reliablebooleanFalse when either group is under the reliability floor.
methodstringThe test's method, named per the reference-suite honesty rule.

GroupDifferenceInterval

A confidence interval on the difference a two-sample test measured.

PropertyTypeDescription
estimatenumberThe point estimate of the difference the interval is around.
lowernumberThe lower bound of the difference. An interval spanning zero is the honest way to say the two groups may not differ at all.
uppernumberThe upper bound of the difference.
confidencenumberThe level the bounds were computed at, 0 to 1.
methodstringThe method, named for honesty: `welch-t`, `hodges-lehmann`, `newcombe`.
categoryunknownFor 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.

PropertyTypeDescription
namestringThe named measure: `pooledStandardMeanDifference` (Cohen's d) for the numeric tests, `categoricalTotalVariation` for chi-square.
valuenumber | nullThe effect size in its own terms, or null when it has no scale here.

Heteroscedasticity

The Breusch-Pagan heteroscedasticity test result.

PropertyTypeDescription
statisticnumberThe test statistic, distributed as chi-square under the null of constant variance.
dfnumberThe degrees of freedom the statistic is judged against - one per predictor.
pnumberThe 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.
heteroscedasticbooleanTrue when the test rejects homoscedasticity at the 0.05 level.

HistogramBin

PropertyTypeDescription
fromnumberThe 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.
tonumberThe bin's upper edge, exclusive except in the last bin, which reports the column's true maximum for the same reason.
countnumberHow 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

PropertyTypeDescription
seqnumberMonotonic sequence number, in the order actions were recorded.
typestringWhat kind of action it was, e.g. `'sort'`, `'column:pin'`, `'edit'`.
labelstringHuman text for a button, e.g. `'sort by Region'`.
targetstring | nullThe column or row the action was aimed at, where there was one.
atnumberWhen it was recorded, on the high-resolution clock.
delegatedbooleanTrue when the edit model owns the undo rather than the history stack.
undonebooleanSet once the entry has been undone. (optional)
[key: string]unknownWhatever 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.

PropertyTypeDescription
viewBoxstringThe SVG view box the paths are drawn in, normally `'0 0 16 16'`.
pathsstring[]One or more SVG path `d` strings making up the glyph.
paintPaint '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 ().

PropertyTypeDescription
sourcestringThe heading as written in the file.
indexnumberThe column's position in each row.
fieldstringThe grid field this column maps onto; empty to exclude it from the import.
typestringThe inferred (or grid-dictated) type used to coerce the column's values.
samplesstring[]A few non-blank sample values, for the preview.
matchedbooleanWhether the heading matched one of the grid's own columns.

ImportPreview

What a preview carries - everything a confirm dialog needs ().

PropertyTypeDescription
delimiterstringThe delimiter that was used, detected or supplied.
headerstring[]The source column headings.
columnsImportColumn[]The per-column mapping and inference the user may edit before confirming.
recordsRecord<string, unknown>[]Every mapped, coerced record the import would add.
sampleRecord<string, unknown>[]The leading records, for a preview table.
rowCountnumberHow many data rows the file holds.
warningsstring[]Anything worth flagging before confirming - a ragged file, a bad quote.

ImportXlsxPreview

What an `.xlsx` preview carries - an {@link ImportPreview} plus the sheet read ().

PropertyTypeDescription
sheetstring | nullThe archive path of the worksheet that was read, e.g. `xl/worksheets/sheet1.xml`.
headerstring[]The source column headings.
columnsImportColumn[]The per-column mapping and inference the user may edit before confirming.
recordsRecord<string, unknown>[]Every mapped, coerced record the import would add.
sampleRecord<string, unknown>[]The leading records, for a preview table.
rowCountnumberHow many data rows the sheet holds.
warningsstring[]Anything worth flagging before confirming.

LicenceInfo

PropertyTypeDescription
validbooleanWhether 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.
productstringThe product the key was issued for. (optional)
issuedTostringWho the key was issued to. (optional)
expiresstringThe 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)
reasonstringWhy 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.

PropertyTypeDescription
statstringThe kernel name.
exactMaintenanceExactness | nullIts exact tier, or null when it is not an exact kernel.
approximateApproximateEntry | nullThe approximate alternative and bound, or null when none exists.

ModuleContext

PropertyTypeDescription
registryRegistryThe registry to add to, or remove from. It is the shared one, so anything registered is visible to every grid using it.
gridGridThe 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.

PropertyTypeDescription
amountnumberHow much, as a plain number. It must be finite for the value to be accepted.
codestringThe 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

PropertyTypeDescription
appendbooleanThe adapter can insert new rows, bridged by the structural engine (`edit.addRow`,). (optional)
updatebooleanThe adapter can patch existing rows, bridged by the cell edit path ( Option A). (optional)
deletebooleanThe adapter can remove rows, bridged by the structural engine (`edit.deleteRow`,). (optional)
returningReturning '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

PropertyTypeDescription
kindUpdateKind 'append' | 'update' | 'delete'Which mutation this is: `'append'`, `'update'` or `'delete'`. It decides which of the fields below carry the payload.
rowsunknown[]append: the new rows (may lack a server-assigned key). (optional)
keystringupdate: the row key. (optional)
patchRecord<string, unknown>update: the changed columns only, matching `PendingWrite` semantics. (optional)
keysstring[]delete: the row key(s). (optional)
originstringProvenance, carried through for auth / audit. (optional)
requestIdstringStable 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`.

PropertyTypeDescription
okbooleanWhether the mutation reached the server. Only an explicit `false` rejects - it reverts the optimistic change and surfaces `reason`; anything else is taken as success.
rowsunknown[]`returning: 'row'` - the authoritative row(s) to reconcile to. (optional)
keysstring[]`returning: 'key'` - server-assigned key(s) for appended rows, in order. (optional)
reasonstringOn 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 ().

PropertyTypeDescription
idstringThe op's identity, as it arrived on `row:pending`. This is what `edit.settleRow` takes.
kindRowChangeKind 'append' | 'delete'Whether the row is being appended or deleted.
keystringThe row key the op is tracked under - for an append, the client temporary key until the server returns a real one.
stateUpdateState 'pending' | 'superseded'`'pending'` while this is the live op for the row, `'superseded'` once a later one replaced it.
agenumberHow long the op has been outstanding, in milliseconds.

OpenWrite

PropertyTypeDescription
idstringThe write's identity, as it arrived on `cell:pending`. This is what `edit.settle` takes.
keystringThe key of the row being written to.
colIdstringThe column being written to.
valueunknownThe optimistic value - what the cell is showing while the write is in flight.
beforeunknownThe value the cell held before the write, which a revert puts back.
stateUpdateState '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.
agenumberHow long the write has been outstanding, in milliseconds. Past `edit.pendingTimeout` the grid warns that it is stuck.

ProcessCapability

PropertyTypeDescription
nnumberHow many readings the study covers. At least two are needed, and a study this small should be read with the confidence interval beside it.
meannumberWhere the process is actually centred, which is what separates Cp from Cpk.
lowernumber | nullThe lower specification limit in force, or `null` for a one-sided specification. It is the customer's requirement, not the process's behaviour.
uppernumber | nullThe upper specification limit in force, or `null` for a one-sided specification.
targetnumber | nullThe nominal value the process aims at, when one was declared. `null` otherwise.
sigmaWithinnumber | nullShort-term variation, from the moving range: what Cp and Cpk use.
sigmaOverallnumber | nullOverall variation: what Pp and Ppk use.
cpnumber | nullPotential capability. Null for a one-sided specification.
cpknumber | nullCapability allowing for where the process is centred.
ppnumber | nullCp over the overall spread: what the process actually delivered.
ppknumber | nullCpk over the overall spread. Well below Cpk means the process drifted.
outOfSpecnumberHow many readings fell outside the specification - the count the indices only imply.
defectRatenumber | nullThe share of readings outside the specification, as a fraction. The figure a customer asks for.
limits{ centre: number; upper: number; lower: number; sigma: number } | nullThree sigma either side of the process mean, from the moving range.
baselinenumberHow many leading readings set the limits. (optional)
ruleSetControlChartRuleSet '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.
intervalCapabilityInterval | nullA 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)
intervalPpCapabilityInterval | nullThe same, for `ppk`. (optional)

ProportionInterval

A Wilson score interval for a rate. Stays inside 0 to 1 at the extremes.

PropertyTypeDescription
proportionnumberThe observed share, successes over n.
lowernumberThe lower bound, by the Wilson score method and never below 0 - the textbook interval reaches below zero at a rate near zero.
uppernumberThe 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.
nnumberThe sample size.
confidencenumberThe 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.

PropertyTypeDescription
namestringUsed in diagnostics and in the message when work cannot be pushed. (optional)
capabilitiesPushdownCapabilitiesWhat 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)
MethodSignatureParametersReturnsDescription
execute(query: RemoteRequest, request?: RemoteRequest): Promise<{ rows: unknown[]; total?: number; pendingTotal?: Promise<number | null> }>query: RemoteRequest
request?: 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: 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>; }>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: MutationOp
request?: 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.

PropertyTypeDescription
defaultAggregateMode '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)
overridesRecord<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.

PropertyTypeDescription
filterfalse | 'term' | 'flat' | 'tree'`false`, a single field and term, a flat conjunction, or a full tree. (optional)
operatorsstring[]Which comparison operators the engine understands. (optional)
sortfalse | 'single' | 'multi'`false`, one column only, or many. (optional)
quickbooleanWhether a free-text search across columns can be pushed. (optional)
rangebooleanWhether the engine can return a window rather than the whole result. (optional)
totalbooleanWhether it can report the count of matching rows. (optional)
groupbooleanWhether 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)
mutatefalse | MutateCapabilityWhat 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.

PropertyTypeDescription
enabledbooleanSticky: hold the whole matching set client-side. Default `false`. (optional)
maxRowsnumberRefuse (visible error) past this many rows. Default `1_000_000`. (optional)
maxBytesEstimatenumberRefuse past this estimated heap cost, in bytes. Default `512 * 1024 * 1024`. (optional)

PushdownPlan

How one request was divided between the engine and the grid.

PropertyTypeDescription
pushedRemoteRequestThe 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.
needsAllbooleanWhether the whole result had to be fetched rather than a window.
unpushedstring[]Which parts could not be pushed: `filter`, `sort`, `quick`, `where`, `group`.
groupedbooleanWhether 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.
groupLevelnumberWhich grouping level a pushed grouped request asked for: 0 at the root, 1 inside a group, and so on. Zero when nothing was grouped.
groupReasonstringWhy 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.
fullbooleanWhether 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

PropertyTypeDescription
adapterPushdownAdapterThe engine the query is pushed to - DuckDB, a SQL endpoint, anything that declares what it can do and executes it.
computeobjectThe compute barrel, for applying whatever the engine could not. (optional)
pageSizenumberHow many rows are fetched per block. 100 by default. (optional)
fullDatasetPushdownFullDatasetConfigOpt-in full-dataset pull. Off unless `fullDataset.enabled` is set. See {@link PushdownFullDatasetConfig}. (optional)
aggregatesPushdownAggregatesConfigDesign-time aggregate-pushdown policy. Absent = client-side (today's behaviour). See {@link PushdownAggregatesConfig}. (optional)
allowPartialResultsbooleanAccept 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)
whereRowLimitnumberThe 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

MethodSignatureParametersReturnsDescription
modules(): GridModule[] - GridModule[]The installed modules, in the order they were registered.
has(name: string): booleanname: stringbooleanWhether a module of this name is installed.
renderer(name: string): RendererCtor | RenderFn | undefinedname: stringRendererCtor | RenderFn | undefinedA 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 | undefinedname: stringEditorCtor | undefinedA registered editor by name, or `undefined`. Falls back to the shared `component` namespace.
filter(name: string): FilterCtor | undefinedname: stringFilterCtor | undefinedA registered filter by name, or `undefined`. Falls back to the shared `component` namespace.
dataType(name: string): DataType | undefinedname: stringDataType | undefinedA registered data type by name, or `undefined`.
totalFn(name: string): TotalFn | undefinedname: stringTotalFn | undefinedA registered total function by name, or `undefined`.
pipe(name: string): ((v: unknown, ...a: string[]) => string) | undefinedname: string((v: unknown, ...a: string[]) => string) | undefinedA registered template pipe by name - the functions a cell template calls with `{{ value | pipe }}` - or `undefined`.
register(kind: string, name: string, impl: unknown): voidkind: string
name: string
impl: unknown
voidAdd 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.

PropertyTypeDescription
confidencenumberThe 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

PropertyTypeDescription
slopenumberThe fitted slope: how much the response moves per unit of the predictor.
interceptnumberThe fitted response where the predictor is zero.
r2numberThe square of Pearson's r: how much of the response the fit accounts for.
stdErrornumberStandard error of the slope, which is what says it differs from zero.
nnumberPairs that survived pairwise deletion, not rows scanned.

RejectedRow

A row a change could not apply, and why. Reported, never thrown.

PropertyTypeDescription
operationRejectedRowOperation 'add' | 'update' | 'remove'Which part of the change the row was in: `'add'`, `'update'` or `'remove'`.
idstringThe key of the row that could not be applied.
reasonRejectedRowReason '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

PropertyTypeDescription
addunknown[]Rows to add. A row whose key the grid already holds is rejected rather than admitted twice. (optional)
atnumberWhere 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)
updateunknown[]Rows to update, matched to existing rows by key. A key the grid does not hold is rejected. (optional)
removeunknown[] | string[]Rows to remove, given either as keys or as row objects the grid reads the key from. (optional)

SavedView

PropertyTypeDescription
idstringThe view's identity, which `apply`, `rename`, `remove` and `setDefault` take.
namestringWhat the view is called. Renaming refuses a blank or duplicate name.
descriptionstringLonger text about the view, for a picker that has room for it.
sharedbooleanWhether the view was stored for everyone rather than for this user alone. The storage adapter decides what that means.
isDefaultbooleanApplied 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`.
builtinbooleanSupplied in `config.views.saved`: listed apart, and not renamable or deletable.
createdAtnumberWhen the view was first saved, as epoch milliseconds. It survives an overwrite; `updatedAt` does not.
updatedAtnumberWhen it was last changed, as epoch milliseconds.
stateGridStateA partial `GridState`; only the sections it names are applied.

SeriesStats

PropertyTypeDescription
nnumberHow many readings the summary was computed over. At least two are needed or there is no sequence to describe and `null` comes back instead.
firstnumberThe reading the series opens with, in the ordering `by` imposed.
lastnumberThe reading the series ends with, in the same ordering.
changenumberLast minus first, in the column's own units.
changePercentnumber | nullThe same change as a percentage of the first reading's magnitude. `null` when the series starts at zero, which has no percentage.
volatilitynumber | nullStandard deviation of period-on-period returns.
annualisedVolatilitynumber | nullThe same, times the root of `periodsPerYear`; null unless one was given.
growthnumber | nullCompound growth per period, annualised when `periodsPerYear` is given.
maxDrawdownnumber | nullThe largest peak-to-trough fall, as a fraction.
maxDrawdownFromnumberThe index of the peak the largest fall started from.
maxDrawdownTonumberThe index of the trough the largest fall ended at.
autocorrelationnumber | nullLag-1: positive is momentum, negative is mean reversion.
upDaysnumberHow many period-on-period moves were upward. A period whose previous reading was zero has no return and counts in neither.
downDaysnumberHow many period-on-period moves were downward.

Source

PropertyTypeDescription
modeSourceMode '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)
MethodSignatureParametersReturnsDescription
count(): number - numberHow 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 | undefinedindex: numberRow | undefinedThe 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 | undefinedkey: stringRow | undefinedThe row with this key, or `undefined` when the source does not hold it.
loaded(index: number): booleanindex: numberbooleanWhether 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): voidstart: number
end: number
voidTell 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): ChangeResultchange: RowChangeChangeResultApply an incremental change to the rows the source holds, returning what it added, updated and removed.
reload(opts?: ReloadOptions): voidopts?: ReloadOptionsvoidThrow away what is cached and fetch again. What a host calls when the data changed behind the grid's back.
destroy(): void - voidRelease whatever the source holds - sockets, timers, in-flight requests - when the grid is torn down. (optional)

Stat

The handle `createStat` returns.

MethodSignatureParametersReturnsDescription
element(): HTMLElement | null - HTMLElement | nullThe 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 - unknownThe value currently shown, as computed rather than as formatted. Null on an inert handle.
refresh(): void - voidRecompute and repaint now. Works even on a tile with `live: false`, which is the point of it.
destroy(): void - voidStop 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.

PropertyTypeDescription
coverednumberRows the figure was computed over.
totalnumber | nullRows the source knows about, or `null` when it cannot know - never a guess.
windowedbooleanTrue when a window bounded the computation, so the figure covers part of the data.

StateApplyReport

PropertyTypeDescription
appliedstring[]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.

PropertyTypeDescription
rankedColumnDifference[]Every compared column, largest difference first.
subsetNnumberHow many rows the filtered subset holds.
populationNnumberHow many rows the whole population holds.
filteredbooleanWhether 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.

PropertyTypeDescription
valueunknownThe value itself, as it is stored.
countnumberHow many present rows carry it.
sharenumberIts share of the present values, 0 to 1.

TwoSampleSpec

How {@link StatisticsApi.compareGroups} splits the rows and picks a test.

PropertyTypeDescription
bystringThe 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)
testSignificanceTest '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)
confidencenumberThe confidence level for the interval, 0 to 1. 0.95 by default. (optional)
categoryunknownThe 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

PropertyTypeDescription
systemstringWhich 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)
unitstringThe 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)
binarybooleanUse the power-of-two ladder - KiB, MiB, GiB - instead of the power-of-ten one. Off by default. (optional)
decimalsnumberA fixed number of decimal places: it sets the minimum and the maximum to the same figure. (optional)
minDecimalsnumberThe fewest decimal places to show, padding with zeros. 0 by default. (optional)
maxDecimalsnumberThe most decimal places to show. Two by default, or the minimum when that is higher. (optional)
displaystringWhich 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)
localestringThe BCP-47 locale the number is formatted in. The grid's by default. (optional)
groupbooleanWhether to group thousands. On by default. (optional)
spacestringWhat 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)
placementUnitSymbolPlacement 'suffix' | 'prefix'Whether the symbol goes after the number (the default) or before it. (optional)
compoundstring[]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)
significantFiguresnumberRound 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)
nullDisplaystringWhat 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.

PropertyTypeDescription
symbolstringThe symbol shown beside the number, and the name this unit is referred to by - `'kB'`, `'ft'`, `'°C'`.
factornumberHow 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.
aliasesreadonly string[]Lowercase spellings that unambiguously mean this unit, so typed input reads `kilobytes` and `kilobyte` as `kB`.
binarybooleanWhether this is a power-of-two unit (KiB, MiB), which puts it on the binary ladder rather than the decimal one.
prefixstring | nullThe bare SI-style prefix this unit carries - `m`, `G` - or `null` for a unit that has none.
autobooleanWhether `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.

PropertyTypeDescription
keystringThe key of the row holding the invalid cell.
colIdstringThe column holding the invalid cell.
codestringWhich rule failed - `required`, `min`, `pattern` and so on - so a host can react to the kind of failure rather than parsing its wording.
messagestringThe 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

PropertyTypeDescription
reasonViewChangeReason '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.
viewSavedView | nullThe view the change concerns; null for a bulk replace.

ViewImportReport

What {@link ViewsApi.import} reports.

PropertyTypeDescription
importedOmit<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.

PropertyTypeDescription
kindstringMarks the object as a Lattice view payload.
versionnumberThe payload format version, so an older file can be read or refused.
exportedAtnumberWhen it was exported, in epoch milliseconds.
viewsSavedView[]The views themselves, each with `isDefault` cleared.

ViewStorage

MethodSignatureParametersReturnsDescription
read(): SavedView[] - SavedView[]Load the user's views. Called at construction and by `views.reload()`.
write(views: SavedView[], change: ViewChange): voidviews: SavedView[]
change: ViewChange
voidMirror 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.

PropertyTypeDescription
depsstring[]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)
pinnedbooleanSurvive `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)
conditionFilterSetA 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.

PropertyTypeDescription
kindWindowKind 'count' | 'time' | 'session'Which window: last N ticks, last N ms, or the session.
spannumberThe size: N ticks, N ms, or the session duration in ms.
sizenumberHow many values actually fell inside the window.

WindowedResult

One windowed figure and the window it covers.

PropertyTypeDescription
valuenumber | nullThe reduction, or null when the window held no usable values.
overWindowSpecThe 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'