Lattice Grid Buy a licence

api reference

Types API Reference

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 26 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)

AnnotationAddResult

The result of {@link AnnotationApi.add}: the new mark's id alongside the mark count `add()` returned before it had one. Coerces to `count` via `valueOf`, so code written against the old bare-number return (`if (annotate.add(m))`, `annotate.add(m) + 1`, `annotate.add(m) > 0`) keeps working unchanged. `===` and `assert.strictEqual` against a number do not coerce; compare `.count` instead.

PropertyTypeDescription
idstringThe new mark's stable id, usable with {@link AnnotationApi.remove}.
countnumberHow many marks are on the layer now.
MethodSignatureParametersReturnsDescription
valueOf(): number - number `count`The primitive-coercion hook: makes the result stand in for the old bare-number return in arithmetic and comparison.

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)

ChartActiveRule

One entry of {@link Chart.responsive} and of the `responsive` event's `active` list.

PropertyTypeDescription
indexnumberThe rule's position in the resolved list (`'auto'` expands to two rules).
autobooleanTrue for one of the built-in rules `responsive: 'auto'` stands for.
maxWidthnumberThe rule's `maxWidth`, as given. (optional)
minWidthnumberThe rule's `minWidth`, as given. (optional)
maxHeightnumberThe rule's `maxHeight`, as given. (optional)
minHeightnumberThe rule's `minHeight`, as given. (optional)

ChartAnimationOptions

The object form of {@link ChartSpec.animation}: how a chart's entry and its updates play.

PropertyTypeDescription
durationnumberHow long an entry or an update plays, in milliseconds. Default: 400. The theme's `--lattice-motion-duration` read where the chart is mounted only switches the default play off when it is `0ms`; any other value leaves 400. An explicit `duration` wins over the token. `0` draws the final state at once. (optional)
easing'linear' | 'ease-in' | 'ease-out' | 'ease-in-out' | ((t: number) => number)The curve the play follows: `'linear'`, `'ease-in'`, `'ease-out'` (the default) or `'ease-in-out'`, or a function from 0..1 to 0..1 (held to exactly 0 and 1 at the ends). (optional)
entrybooleanPlay the first drawing in: bars and columns grow from the baseline, lines and areas draw left to right, pie and donut slices sweep open, points scale and fade in. Default true. (optional)
updatebooleanPlay a change in the grid (a filter, a sort, a row update, live data) from the old drawing to the new, keyed by series and category: a mark that stays moves and grows, an entering mark grows in, a leaving one shrinks out, and the axes re-tick smoothly. Default true. (optional)
budgetnumberThe most marks a draw animates. Past it the chart draws its final state at once and {@link ChartProvenance.animation} says `reason: 'budget'`. Default 2000. (optional)

ChartAnimationProvenance

What the last draw did about animation: {@link ChartProvenance.animation}.

PropertyTypeDescription
animatedbooleanWhether the draw played an entry or an update.
reasonstringWhy: `'entry'` or `'update'` when it played; otherwise `'disabled'` (`animation: false`, or `entry`/`update` off), `'reduced-motion'`, `'automation'` (`navigator.webdriver`), `'no-window'` (headless), `'own-motion'` (a type that plays its own), `'budget'`, (`'automation'` also covers a jsdom or happy-dom test DOM, which names itself in its user agent), `'view-change'` (a resize or a zoom, which draw at once), `'unchanged'` or `'not-drawn'`.
marksnumberHow many marks the drawing has, as counted against the budget.
budgetnumberThe budget in force.

ChartAnnotateMeasure

Where a `measure-x` or `measure-xy` readout's volume figure comes from.

PropertyTypeDescription
volumestringThe column to sum between a measurer's two x anchors. Left unset, a candlestick with a fifth bound measure beyond open, high, low and close is read as the volume column; any other chart shows no volume line. (optional)

ChartAnnotateOptions

The drawing rail's settings, when `annotate` is an object rather than `true`.

PropertyTypeDescription
toolsChartAnnotationToolName[]Which tools the rail offers; the default is all of them, in rail order. (optional)
railChartAnnotateRail 'left' | 'top' | 'none'Where the rail sits; `none` keeps the drawings and the pointer tools without the strip. (optional)
readOnlybooleanDraw what is in the state and refuse every change, including the rail itself. (optional)
measureChartAnnotateMeasureHow a measurer's volume figure is found. (optional)
penChartPenOptionsThe freehand pen's colour and width defaults. (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)

ChartAnnotationAnchor

One point of a drawn chart annotation, in the chart's own data coordinates.

PropertyTypeDescription
xstring | number | DateThe x reading: a category exactly as the band scale holds it, a number on a continuous axis, or a `Date`/ISO string on a time axis.
ynumberThe y reading, on the measure axis.

ChartAnnotationEvent

What an `annotation:added`, `annotation:changed` or `annotation:removed` handler receives.

PropertyTypeDescription
itemChartAnnotationItemThe drawing that was added, changed or removed, as plain JSON.
readoutChartAnnotationReadoutA measurer's computed readout; absent for every other kind. (optional)

ChartAnnotationItem

A drawing a reader made on a chart, anchored in data rather than in pixels.

PropertyTypeDescription
idstringUnique within the process; assigned when the drawing is made or restored.
kindChartAnnotationItemKindWhich shape this is.
anchorsChartAnnotationAnchor[]The data points the shape is built from: one for a horizontal line, a vertical line, a text label or a note; two for a trend line, an arrow, a callout (the reading, then the box), a retracement, or a measurer - the span's two ends, or a rectangle's two opposite corners for `measure-xy`, and the two ends of a point-to-point `measure`); three for a parallel channel (the base line, then the offset of the parallel one). An item with fewer than its kind needs is refused with a warning rather than half-drawn.
textstringThe label, for `text`, `callout` and `note`. (optional)
colourstringA CSS colour overriding the themed default. (optional)
readOnlybooleanWhen true this one drawing cannot be moved, edited or deleted. (optional)
axis'right'Which y axis a point-to-point `measure` was taken against: `'right'` on a dual-axis chart when it was started over the right-hand axis. Absent for the left (or only) axis and for every other kind. (optional)
widthnumberA `pen` stroke's width in pixels; absent for the themed width. A stroke's `anchors` are its simplified points, in data coordinates, two or more. (optional)

ChartAnnotationReadout

What a `measure-x`, `measure-y` or `measure-xy` item's readout carries. Every field is omitted, not `null`, when it does not apply to the kind or could not be computed - `measure-y` never carries `count`, and neither half is present before anything is bound.

PropertyTypeDescription
countnumberHow many bars (a candlestick) or points (every other type) the x span covers. (optional)
countUnit'bars' | 'points'Which `count` is: `'bars'` on a candlestick, `'points'` on every other type. (optional)
elapsedMsnumberThe elapsed time between the two x anchors, in milliseconds; time axes only. (optional)
elapsed{ unit: string; count: number }`elapsedMs` in its natural unit, e.g. `{ unit: 'minutes', count: 18 }`. (optional)
volumenumberThe sum of the volume column (see {@link ChartAnnotateMeasure}) across the x span. (optional)
changenumberThe signed change between the two y anchors. (optional)
changePercentnumber | nullThe signed percentage change between the two y anchors; `null` when the first is zero. (optional)
dxnumberA point-to-point `measure`'s signed Δx: milliseconds on a time axis, the number of categories stepped over on a category axis, the plain difference on a numeric one. (optional)
dxKind'time' | 'category' | 'number'What `dx` counts: `'time'`, `'category'` or `'number'`. (optional)
duration{ unit: 'd' | 'h' | 'min' | 's' | 'ms'; count: number }[]On a time axis, `elapsedMs` as its two largest units, e.g. `[{ unit: 'd', count: 3 }, { unit: 'h', count: 4 }]`. (optional)
slopenumberA point-to-point `measure`'s slope: Δy per day on a time axis, per category, or per x unit; absent when Δx is zero. (optional)
slopeUnit'day' | 'category' | 'unit'What `slope` is per: `'day'`, `'category'` or `'unit'`. (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 low end of the axis rather than taking its extent from the data. Honoured on `y` and `y2`, and on `x` whenever the x axis is **continuous** - a time or linear axis, which is every cartesian type bound to a date or numeric column, plus a `bar` or `candlestick` that named `scale` (see. A banded x has no numeric domain to pin, so it ignores both; pin the rows instead, with a filter. On a time axis it is epoch milliseconds - the same number `Date.now()` returns - because that is what the axis's values are compared against. Readings outside the pinned domain are **clipped by the plot, not dropped**: the tooltip, the hit test and the accessible table still describe every row the chart was given. A pair that does not increase (`min >= max`) is a mirrored axis rather than a narrow one, so it is refused with one warning and the data's own extent is drawn. This is also what the reader's `brush: 'zoom'` writes, so a pinned domain and a dragged one are the same mechanism, and a `zoom` narrows *inside* a pinned domain rather than against it. (optional)
maxnumberFix the high end of the axis rather than taking it from the data; see `min`. (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. Every cartesian type honours it. `bar` and `candlestick` are the two that band by default whatever their column's type, because a mark with a width has to take that width from somewhere and a continuous axis has only the data's own interval to offer; naming `'time'` or `'linear'` here is how a caller asks for that trade. Each mark is then drawn centred on its x value, one interval wide (see `barWidth`), so a rolling `window` pans the plot smoothly as the clock advances instead of stepping one slot per reading, a missing reading leaves a gap instead of closing up, and a price pane and a volume pane sharing an `x` line up by value. (optional)
barWidthnumberHow wide one `bar` or `candlestick` is drawn on a **continuous** x axis, in the axis's own units - milliseconds on a time axis. Given in x units rather than pixels because a width in pixels would cover a different span of time every time the domain moved. The default is the median gap between consecutive x values, less the type's usual padding, so the marks sit at the sampling interval; the median rather than the mean so an overnight or weekend hole does not widen every mark. An explicit width is taken exactly as given. Ignored on a banded axis, where the band decides. (optional)
everynumberShow every nth category label, on a crowded category axis. (optional)
rotateboolean | 'auto'Force the category labels' rotation rather than deciding it. (optional)
positionSide 'left' | 'right'Which edge the measure axis draws on. Only `axis.y` and `axis.y2` read it, and only on a non-horizontal cartesian type or a `candlestick` - an AG-style price pane puts its scale on the right. The default is `'left'`. On a dual-axis chart, setting it on `y` swaps `y2` to the opposite edge, since the two can never share one side. (optional)
windowPick<WindowSpec, 'kind' | 'span'> & { /** * The clock the window ends at, in epoch milliseconds; `Date.now` by * default. The same `now` the `Window` class has taken * since its first release. * * For a live feed the default is right. For a **replay** - a recorded * session, an incident being stepped through, a scrubber over yesterday's * telemetry - the wall clock is wrong by however long ago the recording was * made, so every reading is older than the window and the chart correctly * draws nothing. Name the pane's own clock here and the window rolls * against it instead, including the "the newest value is N s old" check. * Read on every draw, so a replay that advances its clock and calls * `chart.update({ axis })` scrolls. */ now?: () => number; }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)

ChartAxisZoomState

One axis's zoom, as it is stored and restored.

PropertyTypeDescription
rangeChartZoomRangeThe visible range.
pinnedbooleanWhether the view is hanging off the newest end. A pinned view keeps the newest reading at the right edge as a rolling `axis.x.window` advances and as rows arrive; an unpinned one stays where the reader panned it.

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 dimension's on `x`, and on a value axis the measure's behind that axis (`y2`: the right axis's), or `null` when that axis carries more than one measure column.
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.

ChartCursorApi

The host's handle on a chart's crosshair.

MethodSignatureParametersReturnsDescription
set(x: unknown): booleanx: unknownbooleanPut the cursor at this x: a category on a category axis, a number or a `Date` on a continuous one (the nearest reading, unless the cursor says `snap: 'none'`). Shows the hairline and the shared tooltip and raises `cursor:move` with `source: 'api'`. Returns false when the chart has no cursor or the x is not on it.
clear(): void - voidTake the cursor away, raising `cursor:leave`.
get(): ChartCursorPosition | null - ChartCursorPosition | nullWhere the cursor is, or null when it is not showing.

ChartCursorLeaveEvent

What a `cursor:leave` handler receives.

PropertyTypeDescription
source'pointer' | 'api' | 'row' | 'group'What took it away.

ChartCursorMoveEvent

What a `cursor:move` handler receives.

PropertyTypeDescription
values{ series: string; value: string; raw: number | null }[]One entry per series at the x: its label, its value as the chart words it, and the number.
source'pointer' | 'keyboard' | 'api' | 'row' | 'group'What moved it.

ChartCursorOptions

The object form of {@link ChartSpec.cursor}: a crosshair that follows the pointer over a cartesian chart.

PropertyTypeDescription
xbooleanDraw the hairline across the category or time axis, snapped to a reading. Default true. (optional)
ybooleanDraw the hairline across the measure axis, following the pointer. Default false. (optional)
snap'nearest' | 'none'`'nearest'` (the default) snaps the x hairline to the nearest reading in the data; `'none'` puts it under the pointer, and labels the value there. (optional)
labelsbooleanLabel the hairlines at the axes, in the axis's own format. Default true. (optional)
tooltip'shared' | 'single' | false`'shared'` (the default) lists every series at the x; `'single'` lists only the series nearest the pointer; `false` draws no tooltip. (optional)
groupTooltips'pointer' | 'all'With a `group`, which charts show a tooltip. `'pointer'` (the default) shows one: the chart under the pointer, or the one `cursor.set` was called on; the other members show the hairline and axis labels only. `'all'` shows every member's own tooltip at its own hairline, on each chart that has a reading at the shared x (they overlap when the charts share a place). Read on each chart, so a follower set to `'all'` shows its tooltip even when the driving chart says `'pointer'`. `tooltip: false` still means no tooltip anywhere; any other value warns once and is treated as `'pointer'`. (optional)
groupstringCharts that name the same group share the cursor by x value, not by pixel: hovering one puts the hairline at the same category or instant on every other, and on none whose range does not cover it. Works across charts bound to different grids. (optional)
zoombooleanWith a `group`, carry this chart's x zoom to the other members that also set `zoom: true` (and a reset with it). Off by default; needs {@link ChartSpec.zoom} on each chart. (optional)
rowHoverbooleanMove the cursor to the x of the grid row the pointer is over. Off by default. (optional)

ChartCursorPosition

What {@link Chart.cursor.get} and `cursor:move` report about where the cursor is.

PropertyTypeDescription
xunknownThe x of the reading it is at: a category, a number or a date as the column holds it.
keystringA stable string for that x.
labelstringThe x as the column's own cell text words it.

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)
indexnumberWhich drawn node, on `forceTree`, `pack`, `tree` and `voronoiTreemap` - its position in the drawing's node list. (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()`.

ChartEditEvent

What a chart's `edit` and `editRejected` handlers receive.

PropertyTypeDescription
rowKeysstring[]The rows the edit wrote to.
colIdstringThe column of the first value written.
valuenumberThe value the mark was dragged to.
oldValuenumberThe value it had.
writesArray<{ key: string; colId: string; value: number }>Every cell written (several, for a distributed total or an `'xy'` drag).
reasonstringFor `editRejected`: why the grid refused it (`'validation'`, a veto reason, `'readOnly'`). (optional)
messagestringFor `editRejected`: the grid's own message, shown under the plot. (optional)

ChartEditable

How a chart's marks may be dragged to edit the grid; see {@link ChartSpec.editable}).

PropertyTypeDescription
axis'y' | 'x' | 'xy'Which axis a drag moves along: `'y'` the measure (default), `'x'` the category value of a scatter or bubble point on a numeric x axis, or `'xy'` both at once. A pie or donut slice and a floating bar's ends move along their value only. (optional)
stepnumberThe keyboard step in the measure's units (Shift takes ten). Default: a round 1% of the axis. (optional)
minnumberThe lowest value a drag or a key can reach. (optional)
maxnumberThe highest value a drag or a key can reach. (optional)
snapboolean | numberRound a drag to a quantum: `true` rounds to `step` (counted from `min`, or 0); a number rounds to that. Off by default, when a drag is continuous to about a pixel's worth. (optional)
distribute'proportional' | 'first'How a new total is shared when a mark is several rows (a bar summing a category). `'proportional'` scales every row by the same factor (equal shares when the total was zero); `'first'` puts the whole difference on the first row. Needs a measure reduced with `sum` or `avg`. Off by default: an aggregated mark is not draggable, and an attempt is warned by name (`chart:editable:aggregated`). The rows are written in one undo step; if any is refused, none is kept. (optional)

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
typeChartEventNameWhich 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.
annotation:addedChartAnnotationEventThe drawing that was just made.
annotation:changedChartAnnotationEventThe drawing that was just moved or re-lettered.
annotation:removedChartAnnotationEventThe drawing that was just deleted.
zoomChartZoomEventThe range now drawn, and what moved it.
cursor:moveChartCursorMoveEventWhere the crosshair is and every series' value there.
cursor:leaveChartCursorLeaveEventWhy the crosshair went.
editChartEditEventThe edit the grid accepted.
editRejectedChartEditEventThe edit the grid refused, with its reason and message.
responsiveChartResponsiveEventThe rules now active, and the container size they were evaluated at.

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.

ChartGradientFill

A linear or radial gradient fill, accepted anywhere a chart takes a colour for a filled mark - a bar, an area, a pie or donut slice, a treemap cell, a band, a map's land (`basemap.fill`). `stops` are `[offset, colour]` pairs, offset 0 to 1. A line or an outline is stroked in the gradient's first colour: a gradient across a hairline paints nothing.

PropertyTypeDescription
gradient'linear' | 'radial'`'linear'` along `angle`, or `'radial'` from the centre out.
anglenumberA linear gradient's direction in CSS degrees: 0 bottom-to-top, 90 left-to-right, 180 (default) top-to-bottom. (optional)
stopsArray<[number, string]>At least two `[offset, colour]` stops.

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.

ChartMarkerOptions

Pictures as markers on a line, scatter or bubble chart and on a `markermap`.

PropertyTypeDescription
imagestring | { col: string } | ((point: { label: string; x: unknown; y: unknown; rowKey: unknown }) => string | null | undefined)What to draw at each point: an icon name from the grid's icon registry (the one a network node's `icon` uses), an image URL (`https`, `http`, `blob`, a relative path or a `data:image/...` URI), `{ col }` to read either from a column per row, or a function of the point. A URL is loaded once and cached; one that is refused (`javascript:`, a non-image `data:`) or fails to load leaves the default marker for those points, with a named warning.
sizenumberThe marker's size in pixels, 6 to 64. Default 16. (optional)

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)
cumulativebooleanAccumulate this measure along the x order instead of drawing its own reduction on its own: the Nth category's drawn value is the sum of the first N. Restarts at the first category of every series a combo draws, so a running total in one measure never leaks into another's. Runs over the engine's own grouped answer when the chart is pushed down, never over a page of the source's raw rows. Default false. (optional)

ChartMeasureOptions

The point-to-point measure tool's own settings; the spec's `measure` takes `true` for the defaults or this object.

PropertyTypeDescription
axes'x' | 'y' | 'xy'What the one `measure` tool measures: `'xy'` (default) the point-to-point Δx, Δy, percentage and slope; `'x'` the span between two x readings; `'y'` the signed change and percentage between two y readings. The older `measure-x`, `measure-y` and `measure-xy` names in `annotate.tools` map to this, with a one-time warning. (optional)
snapbooleanSnap each end of a measurement to the nearest data point within 24 pixels (on the axis the measurement was started over); `false` keeps exactly what the pointer is over. Default `true`. (optional)
pinbooleanPin every measurement as soon as it is released, rather than leaving it transient until Enter or a click on it. Default `false`. (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)

ChartPatternFill

A repeating pattern fill: the colour-blind-safe way to tell series apart without relying on hue. `colour` is also the solid fallback an export that cannot carry definitions paints.

PropertyTypeDescription
pattern'hatch' | 'crosshatch' | 'dots' | 'grid'The motif: diagonal lines, two crossing line sets, dots, or a square grid.
colourstringThe ink colour; the series colour when unset. (optional)
backgroundstringThe tile's background; transparent when unset. (optional)
sizenumberThe tile size in pixels. Default 8. (optional)
anglenumberThe pattern's rotation in degrees. Default 45 for a hatch or crosshatch, 0 otherwise. (optional)

ChartPenOptions

The freehand `pen` tool's defaults; a stroke may carry its own `colour` and `width`.

PropertyTypeDescription
colourstringA CSS colour for new strokes (a plain value: no semicolons or braces); default the theme's foreground. (optional)
widthnumberThe stroke width in pixels for new strokes, up to 24; default 2. (optional)

ChartProvenance

What {@link Chart.provenance} reports (GEO-5).

PropertyTypeDescription
source'engine' | 'client'`'engine'` when every measure was reduced by the source's engine; `'client'` otherwise.
asked'auto' | 'engine' | 'client'The mode the spec asked for, after an unknown value fell back to `'auto'`.
reasonstring | nullWhy the chart reads the loaded rows; `null` for an engine chart.
refusedbooleanTrue when `aggregate: 'engine'` was asked and the source could not serve it.
pendingbooleanTrue while an engine request is in flight; the last drawing stays up until it lands.
viewportChartViewportProvenanceA map's view (GEO-6; see {@link ChartSpec.viewportCap}): present when the engine sent the rows for the view, or when the cap changed what is drawn. (optional)
ramp{ scale: 'linear' | 'log' | 'quantile'; auto: boolean; ratio: number }A ramp-coloured draw; see {@link ChartRampOptions.scale}): the scale its marks were placed on, `auto` when the chart chose it from the values rather than the spec asking, and the finite positive values' largest / smallest (0 when there are none). (optional)
droppednumberWhat an extension chart type left out and said so: a `wordCloud`'s words that were wanted and not drawn, a `motion` chart's readings a log axis cannot place. (optional)
droppedBy{ maxWords: number; noRoom: number }A `wordCloud`'s split of `dropped`: beyond `maxWords`, and no room left in the plot. (optional)
venn{ sets: number; exact: boolean; error: number; regionErrors: Record<string, number>; outside: number; }A `venn`'s fit: `exact` for two sets (`error` 0), and for three the largest gap between a region's drawn share and its share of the rows, with each region's own in `regionErrors`. (optional)
framesnumberHow many frames an animated chart (`barRace`, `motion`) has: the distinct values of its time column. (optional)
animationChartAnimationProvenanceWhat the last draw did about animation: whether it played, why or why not, and the marks counted against {@link ChartAnimationOptions.budget}.
measuresArray<{ col: string | null; fn: string; computed: 'engine' | 'client'; /** The pushdown map's class for an engine measure: `identical` or `may-differ`. */ class?: string; /** Why, for a client measure. */ reason?: string; }>Each measure's column, reduction and where it was computed.

ChartRampOptions

The object form of {@link ChartSpec.ramp}: the ramp's colours together with the scale a value is placed along it by. Read by every ramp-coloured type - `heatmap`, `geomap`, a `markermap` or `bubblemap` past its viewport cap (density cells), and the opt-in `calendar`, `hexbin`, `hexmap` and `choropleth`.

PropertyTypeDescription
colours[string, string] | string[]The sequential ramp's two colours, low value then high; the scheme's pair when unset. (optional)
scale'linear' | 'log' | 'quantile'How a value is placed along the ramp. `'linear'`: equal steps of value are equal steps of colour. `'log'`: equal ratios are, so 10 → 100 moves as far as 1,000 → 10,000; a value at or below zero is drawn at the bottom of the ramp; the legend labels powers of ten (1-2-5 steps when the values span under two decades). `'quantile'`: the values are split into five classes of equal count, one shade each, and the legend labels the four cut points. Unset, the chart chooses: `'log'` when the finite positive values span more than two orders of magnitude (largest / smallest > 100), saying so once in the console and in `chart.provenance().ramp`, and `'linear'` otherwise. A diverging ramp is always linear and centred on zero. (optional)

ChartResponsiveEvent

`responsive`: the set of matching rules changed, after the redraw it caused. Raised when a rule starts or stops matching, and once at the first draw when any rule matches.

PropertyTypeDescription
activeChartActiveRule[]The rules matching now, in the order they apply; empty when the base options are back.
widthnumberThe container's width in pixels at the change. (optional)
heightnumberThe container's height in pixels at the change. (optional)

ChartResponsiveOptions

One responsive rule: `set` is laid over the chart's options while the chart's own container satisfies every bound given. Bounds are inclusive pixel sizes of the container, not the viewport.

PropertyTypeDescription
maxWidthnumberMatches while the container is at most this wide. (optional)
minWidthnumberMatches while the container is at least this wide. (optional)
maxHeightnumberMatches while the container is at most this tall. (optional)
minHeightnumberMatches while the container is at least this tall. (optional)
setPartial<ChartSpec>Any chart option, merged over the base options: plain objects (`legend`, `axis`) merge key by key, anything else replaces. Read at draw time, so `title`, `subtitle` and `footnote`, which are built once, do not change.

ChartState

What a chart's own view state holds: the drawings on it, and the zoom.

PropertyTypeDescription
annotationsChartAnnotationItem[]Everything drawn on the chart, in paint order. (optional)
zoomChartZoomStateThe visible range per axis; absent when the chart is showing everything. (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)

ChartViewportFilterOptions

Narrows {@link ChartSpec.viewportFilter}, GEO-4,.

PropertyTypeDescription
columnstringOn a map: write the condition to a different geometry column than the one this chart places its own rows from - always a `withinBbox` on that column, whatever the map itself is placed by. Defaults to `geometry`, or has no effect naming a column when the map places rows by `lon`/`lat` (the pair is always written to those two columns). On a cartesian chart: the column the x range is written to; defaults to the chart's `x`. (optional)
debouncenumberMilliseconds to wait after a pan or zoom settles before writing; the default is 150. (optional)

ChartViewportProvenance

What a map's {@link ChartProvenance.viewport} reports (GEO-6).

PropertyTypeDescription
rowsnumberThe rows drawn as points for the view; 0 when binned or refused.
matchednumberHow many rows fell inside the view.
capnumberThe cap in force ({@link ChartSpec.viewportCap}).
binnedbooleanTrue when the view was drawn as density cells.
cellsnumberHow many density cells were drawn; 0 when not binned.
overstring | nullWhy nothing was drawn, when the view was over the cap with no density form; else null.
bbox[number, number, number, number] | nullThe box asked for, `[west, south, east, north]`; null at the initial view.
computed'engine' | 'client'Who counted or fetched the view's rows: the source's engine, or the browser.

ChartVolumePaneOptions

A candlestick's volume pane.

PropertyTypeDescription
heightnumberThe volume pane's share of the plot's height, above 0 and below 1; the default is 0.25. A value outside that range warns and the default is used. (optional)

ChartZoomApi

The host's handle on a chart's zoom.

MethodSignatureParametersReturnsDescription
set(range: ChartZoomRange | { x?: ChartZoomRange | ChartAxisZoomState; y?: ChartZoomRange | ChartAxisZoomState }): booleanrange: ChartZoomRange | { x?: ChartZoomRange | ChartAxisZoomState; y?: ChartZoomRange | ChartAxisZoomState }booleanShow this range. An array is the x axis; `{ x, y }` names either or both, each as a bare range or as `{ range, pinned }`. Returns whether the view changed. A range naming a value the axis does not have warns and is ignored.
reset(): boolean - booleanShow everything again, on every axis; returns whether anything was zoomed.

ChartZoomEvent

What a `zoom` handler receives.

PropertyTypeDescription
xChartZoomRange | nullThe x range now drawn, in the axis's own units; the full extent when nothing is zoomed.
yChartZoomRange | nullThe measure range now drawn, present only when `zoom.axes` includes the y axis. (optional)
reasonChartZoomReason 'button' | 'wheel' | 'key' | 'pan' | 'pinch' | 'reset' | 'api' | 'group' | 'filter'What moved it.

ChartZoomOptions

The zoom's settings, when `zoom` is an object rather than `true`.

PropertyTypeDescription
axesChartZoomAxes 'x' | 'y' | 'xy'Which axes zoom; the default is `x`. (optional)
buttonsChartZoomButtons 'hover' | 'always' | 'none'When the toolbar is shown; the default is `hover`. (optional)
wheelbooleanWhether the wheel zooms about the pointer; on by default. (optional)
panbooleanWhether dragging a zoomed plot pans it; on by default. A configured `brush` wins the drag. (optional)
stepnumberHow much of the visible span one press of a control is worth, between 0 and 1; the default is 0.25, so zoom in shows three quarters of what was shown and a pan moves by a quarter of it. (optional)
minnumberThe narrowest the view may go, as a share of the full extent; the default is 0.01. (optional)

ChartZoomState

A chart's zoom, per axis; an axis showing everything is absent.

PropertyTypeDescription
xChartAxisZoomStateThe x axis's visible range. (optional)
yChartAxisZoomStateThe measure axis's visible range, when `axes` includes it. (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)
rowNumbersbooleanInclude the `rowNumbers` column, the same opt-in CSV and Excel export use. (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.
outliersnumber | nullHow 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.
computed'source'`'source'` when the figures were computed by a pushdown source's engine (`statistics.profileAsync`, rather than read from rows the grid holds; absent otherwise. (optional)
unavailableArray<{ stat: string; reason: string }>The figures a pushdown source could not compute, each with why - a statistic the adapter does not declare, a source whose `aggregates` config keeps it client-side, a filter that did not push whole. Their fields carry no number. Absent when the profile was read from rows the grid holds. (optional)
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)
rowNumbersbooleanInclude the `rowNumbers` column. Off by default, like `export: { csv: false, excel: false }` on every generated column - a position marker is not data the caller asked to export until this flag says otherwise. (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.

DetailForwardedEvent

The fields every `detail:` re-emission adds on top of the nested grid's own event payload (): which master row raised it, and where the change lands on that row's own record.

PropertyTypeDescription
masterKeystringThe key of the master row whose detail region raised this.
masterRowRowThe master row itself.
detailGridGridThe nested grid instance the event came from.
pathstring | nullThe dot path from the master's record to the value that changed (for example `ports.1.vlan`), or null when the detail rows are not part of the master's own record.

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`.

DuckDbSpatialOptions

The `spatial` option of `duckdbAdapter` in its object form (GEO-2). `spatial: true` is the same with neither member set.

PropertyTypeDescription
columnstringA geometry column the schema and the file's metadata do not name - WKB in a `BLOB`, or a `GEOMETRY` column of a table or view. Must be a plain identifier. (optional)
crsstring | numberThe coordinate reference system the stored coordinates are in, when it is not longitude/latitude: `'EPSG:27700'`, or a bare EPSG code such as `27700`. Wins over a GeoParquet file's own declaration. Anything that is not `AUTHORITY:CODE` is refused when the adapter is built. (optional)

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.

GeoJsonGeometry

A geometry as a `geometry` column stores it: a GeoJSON geometry object with two-ordinate positions, longitude first. Z and M are dropped on ingest.

PropertyTypeDescription
typeGeometryKind 'Point' | 'LineString' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon' | 'GeometryCollection'The geometry kind.
coordinatesunknownThe positions, nested by kind: `[lon, lat]` for a `Point`, a list of them for a `LineString`, a list of rings for a `Polygon` (outer ring first, then holes), and one level deeper again for each `Multi*` kind. Absent on a `GeometryCollection`. (optional)
geometriesGeoJsonGeometry[]The member geometries of a `GeometryCollection`. (optional)

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.

HeadlessGridConfig

The configuration {@link createHeadlessGrid} accepts (,. Every {@link GridConfig} key remains meaningful off the DOM - sources, columns, sort, grouping and the rest all still drive the same pipeline - so this is the same shape, not a smaller one; it exists so `icons` has its own doc anchor for the headless case, which touches no `document` at all.

PropertyTypeDescription
iconsRecord<string, IconDefinition>Your own SVG glyphs, registered into this grid's own icon registry alongside the built-in set - the same shape {@link GridConfig.icons} takes, and no DOM is touched to register them. A chart type bound to this grid (a `network` node's `icon`, for example) reads a name back out through {@link Grid.icons} when it draws, into its own `<svg>`; a name neither this map nor the built-ins hold still warns once, by name, the same way it does on a rendered grid. (optional)

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.

ImportXlsxSheet

One worksheet of an `.xlsx` workbook, as {@link ImportApi#xlsxSheets} lists it (,.

PropertyTypeDescription
namestringThe sheet's tab name, as written in the workbook.
hiddenbooleanTrue when Excel marks the sheet `hidden` or `veryHidden`; the default read skips it.

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)
terms'commercial' | 'non-commercial'The licence-terms marker: `'commercial'` (the default, and the reading of every key minted before the marker existed) or `'non-commercial'` for the free tier. Reported by the verifier, never enforced by it - the terms are enforced by the licence terms, not by the software. (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)

ListCount

The operand of `listCount`: how the number of items compares to `value`.

PropertyTypeDescription
op'gt' | 'gte' | 'lt' | 'lte' | 'eq'The comparison.
valuenumberThe number of items to compare with.

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
ready(): Promise<void> - Promise<void>First-use preparation, for an adapter whose capabilities depend on something it can only learn from the engine (GEO-2: `duckdbAdapter({ spatial })` declares the spatial operators only if the extension loads). `createPushdownSource` awaits it once, before its first plan or aggregate, and reads `capabilities` again when it settles. A load that fails should narrow the capabilities and resolve, not reject; a rejection fails that request and is asked again on the next. (optional)
execute(query: RemoteRequest, request?: Partial<RemoteRequest> & { stream?: boolean }): Promise<{ rows: unknown[]; total?: number; pendingTotal?: Promise<number | null> }>query: RemoteRequest
request?: Partial<RemoteRequest> & { stream?: boolean }
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. `request.stream: true` is export mode: the call is one page of a predicate selection being read out whole, and the rows are all that is wanted. An adapter may skip its count for it; the source ignores any total it returns.
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)
executePivotLevel( 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>; pivot: RemotePivotAnswer; }>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>; pivot: RemotePivotAnswer; }>Answer one level of a pivoted grid. Present only when `capabilities.pivot` opts in. The rows are the level's group rows in the shape `executeGroupLevel` returns - or, when the grid has no row grouping, a window of leaf rows (`leaves: true`), which is what a pivot without row groups shows. Beside them, `pivot.cells` carries the *aggregated* rows the pivot columns are drawn from: one per occupied group and pivot key, with the typed group path (`[]` for the grand-total row). At the root, `pivot.axis` is every pivot key over the whole matching set - the pivot's column set, discovered from the answer - and `matchCount`/`grand` are the whole-set figures, as for a grouped level. A level of a group below the root carries only the cells of the groups in its window, so expanding a group fetches its children then. (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)
pivotbooleanWhether it can answer a pivoted grid from grouped aggregates: the level's grouping column and the pivot columns as group keys, one aggregated row per cell, never a leaf. The grid reshapes those rows into its pivot columns, whose set is discovered from the answer. All or nothing, and with no client-side fallback: a remote source holds a window, not the leaves, so a pivot the adapter cannot answer is refused by name - the fetch rejects with `code: 'pushdown:pivot-unsupported'`, the grid shows the refusal in its error overlay, and `PushdownPlan.pivotReason` says why - rather than every leaf being pulled into the browser. An adapter declaring this implements `executePivotLevel`. (optional)
bucketsstring[]The spatial bucket kinds `source.aggregate()` may push as a `groupBy` key (GEO-2): `['grid']` for a {@link SpatialBucket}. Absent or empty, a bucket key sends every aggregate to the client, named in its `reason`. (optional)
aggregatesstring[] | Set<string>The statistics `source.aggregate()` may send to this engine, by the grid's statistic name. Declared, a statistic outside it is computed by the grid and named in `lastPlan().aggregates.client` with its reason; absent, the pushdown map alone decides, as before. (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`, `pivot`.
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.
pivotedbooleanWhether the engine answered the grid's pivot for this request, from grouped aggregates. False when the grid is not pivoting and when the pivot was refused - `pivotReason` says why.
pivotReasonstringWhy a pivoted request was refused, in a sentence, or `''` when it was pushed or nothing was pivoted. A refused pivot fetches nothing: the fetch rejects with `code: 'pushdown:pivot-unsupported'` and this reason.
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[]; /** Under a pushed pivot, the pivot columns the cells were computed over. */ pivotBy?: 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)

RowOrderResult

What `rowOrder.enter`, `set` and `exit` report.

PropertyTypeDescription
manualbooleanWhether a manual order is in force after the call.
reasonstringWhy nothing changed, when nothing did: `'already'`, `'not-manual'`, `'vetoed'` (a `beforeSort` handler), `'bad-order'` or `'source-cannot-reorder'`. (optional)

RowRegroupChange

One grouping value a row moved into another group was given.

PropertyTypeDescription
colIdstringThe column the grid is grouped by at this level.
fromunknownThe value it had.
tounknownThe value of the group it joined.

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.

SelectionStatistics

The shape {@link SelectionApi.statistics} returns: what `summary()` reports, plus the range's own size and shape. `distinct` counts every non-blank value, numeric or not, so a numeric-looking selection that is really a set of codes shows up as a low distinct count against a high `count`. The five fields after `distinct` are present only when at least one selected value parsed as a number - `statistics()` never invents a quartile or a deviation over an empty numeric set.

PropertyTypeDescription
countnumberHow many selected cells carry a value at all (blank cells are excluded).
numericnumberHow many of those parsed as a number.
sumnumber | nullNull when `numeric` is 0.
minnumber | nullNull when `numeric` is 0.
maxnumber | nullNull when `numeric` is 0.
avgnumber | nullNull when `numeric` is 0.
cellsnumberHow many cells were selected, blank or not - the size of the range itself.
distinctnumberHow many distinct values (numeric or not) the selected cells hold.
mediannumberThe middle of the numeric values, sorted. Absent when `numeric` is 0. (optional)
q1numberThe first quartile. Absent when `numeric` is 0. (optional)
q3numberThe third quartile. Absent when `numeric` is 0. (optional)
iqrnumber`q3 - q1`. Absent when `numeric` is 0. (optional)
stddevnumber | nullSample standard deviation; null with exactly one numeric value. Absent when `numeric` is 0. (optional)
outliersnumberHow many numeric values sit outside the standard `1.5 * iqr` fence. Absent when `numeric` is 0. (optional)

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)

SpatialBucket

A spatial grouping key for `source.aggregate()` (GEO-2): a geometry column's centroid binned into square cells `size` degrees on a side. Pushed by an adapter that declares `buckets: ['grid']` (`duckdbAdapter({ spatial })` with the extension loaded) as `floor(ST_X(ST_Centroid(geom)) / size)` and the same for `ST_Y`; each group's key comes back as `[x, y]`, the cell covering longitudes `[x·size, (x+1)·size)` and latitudes `[y·size, (y+1)·size)`, or `null` on a rolled-up row.

PropertyTypeDescription
colColumnRefThe geometry column.
bucket'grid'The bucket kind; `grid` is the one there is.
sizenumberThe cell size in degrees, above zero.

SpatialDistance

A circle on the Earth's surface: the operand of `withinDistance`.

PropertyTypeDescription
lonnumberThe centre's longitude, in degrees.
latnumberThe centre's latitude, in degrees.
metresnumberThe radius, in metres.

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.

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.

AlarmLevel

An alarm's level. The KPI panel's own vocabulary, deliberately - `good | warn | critical` - rather than a fifth spelling of red/amber/green beside the four that already exist. Only `warn` and `critical` ARE alarms: `good` is the healthy level and clears whatever was raised.

type AlarmLevel = KpiStatus

Declared in lattice-grid/modules/alarms.

AlarmsEventName

The events an alarm set emits.

type AlarmsEventName = 'alarm:raised' | 'alarm:cleared'

Declared in lattice-grid/modules/alarms.

AlarmSource

Which of the three kinds of source an alarm came from.

type AlarmSource = 'kpi' | 'grid' | 'router'

Declared in lattice-grid/modules/alarms.

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, a highlighter, or the eraser.

type AnnotationTool = 'pen' | 'arrow' | 'rect' | 'highlight' | 'erase'

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'

CalendarEventName

The events a calendar emits.

type CalendarEventName = 'card:click' | 'card:dblclick' | 'card:contextmenu' | 'card:mount' | 'range:change' | 'beforeMove' | 'card:move'

Declared in lattice-grid/modules/calendar.

CalendarFieldMap

A card field mapping: a property path, or a function reading the row.

type CalendarFieldMap = string | ((row: CalendarRow) => unknown)

Declared in lattice-grid/modules/calendar.

CalendarReadonly

Granular readonly: the whole calendar, or selectively by day key and card key.

type CalendarReadonly = boolean | { board?: boolean; days?: Record<string, boolean>; cards?: Record<string | number, boolean>; }

Declared in lattice-grid/modules/calendar.

CalendarRow

A row backing a calendar card: any object. Its date comes from `startProperty` and its identity from `rowKey`.

type CalendarRow = Record<string, unknown>

Declared in lattice-grid/modules/calendar.

CalendarView

A calendar view name: a week day-grid, a month grid, a week time-grid, or a single-day time-grid.

type CalendarView = 'week' | 'month' | 'week-time' | 'day'

Declared in lattice-grid/modules/calendar.

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.

ChartAnnotateRail

Where a chart's drawing rail sits, or `none` for the tools without the strip.

type ChartAnnotateRail = 'left' | 'top' | 'none'

ChartAnnotationCompute

A named reduction a chart annotation's `compute` derives its position from.

type ChartAnnotationCompute = 'mean' | 'avg' | 'median' | 'min' | 'max'

ChartAnnotationItemKind

What a drawn chart annotation is; the drawing tools, less `select` and `delete`.

type ChartAnnotationItemKind = 'trendLine' | 'horizontalLine' | 'verticalLine' | 'channel' | 'fibonacci' | 'arrow' | 'pen' | 'measure-x' | 'measure-y' | 'measure-xy' | 'measure' | 'text' | 'callout' | 'note'

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'

ChartAnnotationToolName

A tool on a chart's drawing rail.

type ChartAnnotationToolName = 'select' | 'trendLine' | 'horizontalLine' | 'verticalLine' | 'channel' | 'fibonacci' | 'arrow' | 'pen' | 'measure' | 'text' | 'callout' | 'note' | 'delete' | 'measure-x' | 'measure-y' | 'measure-xy'

ChartAxisSide

Which measure axis a chart annotation reads: left, right, or the secondary y2.

type ChartAxisSide = 'left' | 'right' | 'y2'

ChartCurve

How a line or area series connects its readings. `'linear'` (the default) draws straight segments, `'monotone'` a cubic that never overshoots the data, `'catmullRom'` a spline with a `tension`, and `'step'` a level that holds a value until the next reading.

type ChartCurve = 'linear' | 'monotone' | 'catmullRom' | 'step'

ChartCurveOptions

The object form of {@link ChartSpec.curve}: a curve with its own settings. `tension` (0..1, default 1) is the Catmull-Rom spline's pull toward its points; `mode` (`'after'`, the default; `'before'` or `'middle'`) is where a step changes level between two readings.

type ChartCurveOptions = { type: ChartCurve; tension?: number; mode?: 'before' | 'after' | 'middle'; }

ChartDirectedOptions

The object form of {@link ChartSpec.directed}: how a directed chord draws its flows. `style` is how a ribbon ends at its target - `'taper'` (the default: it narrows to 40% of the width it left with) or `'arrow'` (it closes into an arrow head whose tip sits on the ring). `arc` is what a node's arc length measures - `'out'` (the default: what the node sends; a node that only receives keeps a small floor so it stays on the ring) or `'inout'` (what it sends plus what it receives).

type ChartDirectedOptions = { style?: 'taper' | 'arrow'; arc?: 'out' | 'inout'; }

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' | 'annotation:added' | 'annotation:changed' | 'annotation:removed' | 'zoom' | 'cursor:move' | 'cursor:leave' | 'edit' | 'editRejected' | 'responsive'

ChartExtensionType

Every chart type an opt-in `lattice-grid/modules/chart-*` module registers, aliases included. Importing the module is what makes the type draw; naming it here is what lets a strict TypeScript host write `createChart({ type: 'waffle' })` without a compile error. A gate check derives the registered names from the modules themselves and fails when one is missing from this union, so it cannot drift.

type ChartExtensionType = 'alluvial' | 'arc' | 'barRace' | 'bubblemap' | 'bump' | 'calendar' | 'choropleth' | 'decomposition' | 'diverging' | 'dumbbell' | 'fan' | 'forceTree' | 'hexbin' | 'hexmap' | 'icicle' | 'markermap' | 'motion' | 'nightingale' | 'pack' | 'parallel' | 'pictorial' | 'polarArea' | 'polarScatter' | 'pyramid' | 'radialBar' | 'ridgeline' | 'roc' | 'rose' | 'serpentine' | 'slope' | 'spiral' | 'splom' | 'scatter3d' | 'tree' | 'venn' | 'voronoiTreemap' | 'waffle' | 'wordCloud'

ChartFill

A gradient or pattern fill for a chart mark.

type ChartFill = ChartGradientFill | ChartPatternFill

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'

ChartPictorialOptions

The options of a `pictorial` chart. `mode` is `'fill'` (the default: one silhouette cut into horizontal bands sized by each stage's value) or `'repeat'` (an isotype row of icons per category). `shape` is an icon name from the grid's icon registry or an SVG path string (path data only; anything else is refused and the built-in figure is drawn). `unit` is what one icon stands for in `'repeat'` mode; unset, a round number that fits the widest row on one line.

type ChartPictorialOptions = { mode?: 'fill' | 'repeat'; shape?: string; unit?: number; }

ChartPolarOptions

Options for the polar chart types, set as `ChartSpec.polar`, 0001650, 0001651). `polarArea` gives every category an equal angle and draws its wedge's radius from the measure; `radialBar` draws one ring per category, swept in proportion to its value; `polarScatter` places each row by an angle and a radius. `startAngle` and `endAngle` (on the spec, in degrees clockwise from twelve o'clock) set where the angular range begins and ends; `max` fixes the outer ring or a full track.

type ChartPolarOptions = { scale?: 'sqrt' | 'linear'; sort?: 'asc' | 'desc'; multi?: 'rings' | 'stacked'; track?: boolean; angle?: 'degrees' | 'category' | 'hourOfDay' | 'dayOfWeek' | 'month'; colour?: string; }

ChartRadiusOptions

The object form of {@link ChartSpec.radius}: a pie or donut whose slice radii come from a second measure. `fn` maps that measure to a radius - `'sqrt'` (the default, area-true: area grows as the measure) or `'linear'` - and `min` is the smallest share of the full radius a slice may shrink to, from 0 to 1.

type ChartRadiusOptions = { col: string; fn?: 'sqrt' | 'linear'; min?: number; }

ChartScale

How a chart axis's scale is chosen, rather than taken from the column's type.

type ChartScale = 'auto' | 'linear' | 'time' | 'band' | 'category'

ChartSchemeName

A built-in colour scheme's name, as `scheme: '…'` or `registerScheme`'s first argument names one of `SCHEMES` - `'default'` (Okabe-Ito, checked against the common colour-vision deficiencies), `'bright'`, `'earth'` and `'mono'` (checked to survive a greyscale print). A host's own `registerScheme` name is a plain `string` alongside these, so `scheme` also accepts one it is not enumerable here.

type ChartSchemeName = 'default' | 'bright' | 'earth' | 'mono' | 'patterns'

ChartSerpentineOptions

The options of a `serpentine` timeline. `rows` is the number of rows the time axis is folded into; unset it follows the plot's size. `ticks: false` removes the calendar ticks along the path.

type ChartSerpentineOptions = { rows?: number; ticks?: boolean; }

ChartSpiralOptions

The options of a `spiral` timeline. `period` is one turn: `'day'`, `'week'` (from Monday) or `'year'` - calendar periods, UTC - or a duration (`'28d'`, `'12h'`, `'90m'`, `'45s'`, `'2w'`) or a number of milliseconds, counted from the epoch; default `'week'`. `mode` is `'points'` (the default), `'bars'` or `'spans'`; `barBy` says whether a bar's value is its `'length'` (the default) or its `'thickness'`.

type ChartSpiralOptions = { period?: 'day' | 'week' | 'year' | string | number; mode?: 'points' | 'bars' | 'spans'; barBy?: 'length' | 'thickness'; }

ChartStagesOptions

The options of a `pyramid` chart. `inverted` points the apex down. `area` makes each slice's *area* proportional to its value instead of its height. `gap` is the space between slices in pixels (default 2; area is exact with `gap: 0`). `labels` is where each slice's stage, value and share are written: `'auto'` (the default: inside where the text fits, beside it with a leader where it does not), `'inside'`, `'beside'`, or `false` for none (the legend then names the stages).

type ChartStagesOptions = { inverted?: boolean; area?: boolean; gap?: number; labels?: 'auto' | 'inside' | 'beside' | false; }

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' | 'floatingBar' | 'horizontalFloatingBar' | 'populationPyramid' | 'bullet' | 'scatter' | 'bubble' | 'forest' | 'combo' | 'pareto' | 'histogram' | 'boxplot' | 'heatmap' | 'qq' | 'ecdf' | 'lorenz' | 'correlogram' | 'control' | 'capability' | 'movingRange' | 'pie' | 'donut' | 'sunburst' | 'treemap' | 'radar' | 'gauge' | 'funnel' | 'candlestick' | 'ohlc' | 'geomap' | 'sankey' | 'chord' | 'network' | 'stream' | 'marimekko' | 'violin' | 'gantt'

ChartYMeasure

The object form of {@link ChartSpec.y}: a single measure column with its own reduction and whether it runs as a running total - the single-measure equivalent of {@link ChartMeasure.cumulative}.

type ChartYMeasure = { col: string; fn?: TotalName; cumulative?: boolean; }

ChartZoomAxes

Which axes a zoom acts on; the default is the x axis alone.

type ChartZoomAxes = 'x' | 'y' | 'xy'

ChartZoomButtons

When the zoom toolbar is shown: on hover and keyboard focus, always, or never.

type ChartZoomButtons = 'hover' | 'always' | 'none'

ChartZoomRange

A visible range, as two ends in the axis's own units: two categories on a band axis, two readings on a continuous one, and epoch milliseconds on a time axis - which is what survives `JSON.stringify` and comes back the same.

type ChartZoomRange = [string | number, string | number]

ChartZoomReason

What moved a zoom, as reported by the `zoom` event. `pinch` is a two-finger pinch on a touch screen; `filter` is the grid's filter moving the view of a chart whose grid follows it ({@link ChartSpec.viewportFilter}): the chart's condition cleared in the grid (the zoom resets), or put back by an undo or a redo (the view returns to it).

type ChartZoomReason = 'button' | 'wheel' | 'key' | 'pan' | 'pinch' | 'reset' | 'api' | 'group' | 'filter'

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

ComboLoadResult

A combo `load` result: a page, or a bare array (a single non-paging page).

type ComboLoadResult = { items: ComboOption[]; total?: number; hasMore?: boolean } | ComboOption[]

Declared in lattice-grid/modules/form.

ComboOption

A combo option: a bare value, or the object form.

type ComboOption = string | number | ComboOptionObject

Declared in lattice-grid/modules/form.

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'

DashboardPanelKind

What a panel shows.

type DashboardPanelKind = 'grid' | 'chart' | 'kpi' | 'calendar' | 'board' | 'gantt' | 'map' | 'html'

Declared in lattice-grid/modules/dashboard.

DashboardSource

A named source.

type DashboardSource = DashboardRowsSource | DashboardPushdownSource | DashboardRouterSource | DashboardGridSource

Declared in lattice-grid/modules/dashboard.

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

DesignerDerivedStep

One step of a derived grid's ordered step list.

type DesignerDerivedStep = DesignerDerivedFilterStep | DesignerDerivedGroupStep | DesignerDerivedPivotStep | DesignerDerivedJoinStep | DesignerDerivedSortStep | DesignerDerivedTopNStep

Declared in lattice-grid/modules/designer.

DesignerEventName

Every event the designer emits, in the order its `on()` declares them.

type DesignerEventName = 'state' | 'mode' | 'select' | 'page'

Declared in lattice-grid/modules/designer.

DesignerFieldType

A field's data type, shown with its own icon and grouped in the data panel.

type DesignerFieldType = 'number' | 'currency' | 'percent' | 'date' | 'datetime' | 'boolean' | 'text' | 'list' | 'geometry'

Declared in lattice-grid/modules/designer.

DesignerLlm

The host's model callback for the AI assistant. A function is `ask` itself; an object wraps `ask` and may opt into sending a bounded sample of the chosen source's rows with `sendSampleRows`.

type DesignerLlm = ((request: DesignerProposalRequest) => Promise<unknown> | unknown) | { ask: (request: DesignerProposalRequest) => Promise<unknown> | unknown; sendSampleRows?: number; }

Declared in lattice-grid/modules/designer.

DesignerMode

`'edit'` builds the canvas interactive; `'view'` is `createDashboard` and nothing else.

type DesignerMode = 'edit' | 'view'

Declared in lattice-grid/modules/designer.

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' | 'richtext' | 'segmented' | 'select' | 'slider' | 'temperature' | 'text' | 'textarea' | 'time' | 'treeSelect' | 'unit' | (string & {})

EditStartGesture

Which gesture opens a cell editor.

type EditStartGesture = 'single' | 'double' | 'key'

EmptyMessage

The empty-state message: a fixed string, or a function that returns one - or a DOM node - from the reason the grid is empty.

type EmptyMessage = string | ((ctx: EmptyMessageContext) => string | Node)

EmptyMessageReason

Why a grid is empty when it shows its `emptyMessage`. `'noData'` is an empty dataset; `'filtered'` is a non-empty dataset whose rows are all hidden by the current filters; `'loading'` is a count that has not arrived yet, and is never delivered to the message - the grid waits for one of the other two rather than guessing.

type EmptyMessageReason = 'noData' | 'filtered' | 'loading'

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' | 'detail:cell:edit:start' | 'detail:cell:edit:end' | 'detail:row:edit:start' | 'detail:row:edit:end' | 'detail:cell:changed' | '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. A `geometry` column reads a {@link GeometryFormat} instead.

type FormatSpec = NumberFormat | DateFormat | BooleanFormat | TextFormat | GeometryFormat

FormattingScope

A column id, or `'*'` for every column.

type FormattingScope = string

FormBind

The `bind` option: a grid row (`{ grid, rowKey }`), a routed record (`{ router, route, key }`), or a plain object of values.

type FormBind = FormBindGridConfig | FormBindRouterConfig | Record<string, unknown>

Declared in lattice-grid/modules/form.

FormButtonsAlign

How a `buttons` row lays its children out along the form's width.

type FormButtonsAlign = 'start' | 'end' | 'center' | 'stretch' | 'space-between'

Declared in lattice-grid/modules/form.

FormButtonVariant

A button's visual weight: theme-token colours, light and dark.

type FormButtonVariant = 'primary' | 'secondary' | 'tonal' | 'outline' | 'text' | 'danger'

Declared in lattice-grid/modules/form.

FormControlType

The control types a form item may name.

type FormControlType = 'input' | 'number' | 'textarea' | 'checkbox' | 'button' | 'text' | 'combo' | 'select' | 'radiogroup' | 'checkboxgroup' | 'toggle' | 'datepicker' | 'file' | 'richtext' | 'rating' | 'stage' | 'chips' | 'otp'

Declared in lattice-grid/modules/form.

FormDensity

The density levels a form accepts - the grid's own presets.

type FormDensity = 'compact' | 'standard' | 'comfortable'

Declared in lattice-grid/modules/form.

FormEventName

The events a form raises, on `form.on()`. The form's own, not a grid's. `on()` warns once on any other name. The cancellable `beforeChange` runs before a committed edit is stored, on the same contract the grid core uses: call `preventDefault(reason?)` on the payload, or return `false`; a veto reverts the control to its committed value. The past-tense events - `change`, `input`, `click`, `focus` and `blur` - report an edit already made and carry no `preventDefault`.

type FormEventName = 'beforeChange' | 'change' | 'input' | 'click' | 'focus' | 'blur' | 'validated' | 'complete'

Declared in lattice-grid/modules/form.

FormInputSubtype

The native subtype of an `input` item.

type FormInputSubtype = 'text' | 'email' | 'password' | 'url'

Declared in lattice-grid/modules/form.

FormLabelPosition

Where an item's label sits: above the control, to its left, or visually hidden (the accessible name stays, but the label and its asterisk take no space).

type FormLabelPosition = 'top' | 'left' | 'hidden'

Declared in lattice-grid/modules/form.

FormPickerMode

The picker modes of a `datepicker` item.

type FormPickerMode = 'date' | 'date-time' | 'time'

Declared in lattice-grid/modules/form.

FormRule

A declarative field rule: a constant, a function of the whole `{ name: value }` snapshot, or a condition on one named item's value.

type FormRule = boolean | ((values: Record<string, unknown>) => boolean) | { name?: string; equals?: unknown; in?: unknown[]; empty?: boolean; fn?: (value: unknown, values: Record<string, unknown>) => boolean; }

Declared in lattice-grid/modules/form.

FormStepOrientation

The orientation of a wizard's step indicator.

type FormStepOrientation = 'horizontal' | 'vertical'

Declared in lattice-grid/modules/form.

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 }

FormValidationMode

When an item re-checks itself: on a committed edit, on blur, or only on `validate()`.

type FormValidationMode = 'change' | 'blur' | 'submit'

Declared in lattice-grid/modules/form.

FormValidationRule

A validation rule: a built-in rule name (`email`, `number`, `integer`, `url`), a whole-value RegExp, or a function `(value, item)` returning `true`/`undefined`/`null` for pass, `false` for a fail, or a string that is the failure message.

type FormValidationRule = 'email' | 'number' | 'integer' | 'url' | RegExp | ((value: unknown, item: FormItemConfig) => boolean | string | void)

Declared in lattice-grid/modules/form.

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.

GanttBarLabelPosition

Where a Gantt bar's own label sits: `inside` centres it on the bar when it fits, `right` keeps it just past the bar's right edge, and `auto` chooses - inside when it fits, right when it does not.

type GanttBarLabelPosition = 'inside' | 'right' | 'auto'

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.

GanttCalendarRef

What a task's or resource's `calendar` may be: a calendar spec stated inline, the `'weekends'` preset, or the id of an entry in the `calendars` option. An id that names none refuses the schedule with an `unknown-calendar` error.

type GanttCalendarRef = 'weekends' | string | GanttNamedCalendar

Declared in lattice-grid/modules/gantt.

GanttCalendars

The named calendars a plan offers its tasks and resources, keyed by calendar id.

type GanttCalendars = Record<string, GanttNamedCalendar>

Declared in lattice-grid/modules/gantt.

GanttChangeCause

The cause of one committed data-change: who or what moved it.

type GanttChangeCause = 'user' | 'pushed' | 'api' | 'undo' | 'redo'

Declared in lattice-grid/modules/gantt.

GanttChangeKind

The kind of one entry inside a {@link GanttChangeBatchEvent}.

type GanttChangeKind = 'taskAdd' | 'taskRemove' | 'taskUpdate' | 'dependencyAdd' | 'dependencyRemove' | 'dependencyUpdate' | 'assignmentChange'

Declared in lattice-grid/modules/gantt.

GanttCommitChangeKind

The kind of one entry in a `lattice:gantt-commit` / `lattice:gantt-change` detail.

type GanttCommitChangeKind = 'add' | 'delete' | 'move' | 'resize' | 'progress' | 'cell-edit' | 'link' | 'row-move'

Declared in lattice-grid/modules/gantt.

GanttConstraintType

A scheduling constraint: pin a date, floor/ceiling a start or finish, or schedule as late as possible.

type GanttConstraintType = 'as-soon-as-possible' | 'must-start-on' | 'must-finish-on' | 'as-late-as-possible' | 'start-no-earlier-than' | 'start-no-later-than' | 'finish-no-earlier-than' | 'finish-no-later-than' | 'ASAP' | 'MSO' | 'MFO' | 'ALAP' | 'SNET' | 'SNLT' | 'FNET' | 'FNLT'

Declared in lattice-grid/modules/gantt.

GanttContextMenu

The split view's context menu: the host supplies the items for a task's row or bar, and the view shows them in the grid's own menu component. Return `null`/`undefined` (or an empty array) to suppress the menu for that task. The function receives the host's ORIGINAL task object (the same shape `createGantt` took, not the scheduled shape) and the DOM event that asked for the menu - a pointer `contextmenu` event on the row/bar, or `null` when the request came from the keyboard (the Menu key / Shift+F10), where there is no pointer position. `event.preventDefault()` is already called for you; the native menu does not open. Each item's `action` is called with the item (as the grid does) and a `ctx` of `{ task, event, view }` - `task` the same original task, `event` the same DOM event, and `view` the `GanttSplitView` instance the menu belongs to. The third argument, `defaults`, is the built-in task menu: add task above / below, add subtask, add successor, add predecessor, convert to milestone (or back to a task) and delete, labelled from the message catalogue, with the actions on a read-only task disabled. Return it as is to keep it, filter it to hide items, reorder it, or spread it among your own. Pass `contextMenu: true` to install exactly the defaults.

type GanttContextMenu = true | ((task: GanttTask, event: Event | null, defaults: MenuItem[]) => MenuItem[] | null | undefined) | null

Declared in lattice-grid/modules/gantt.

GanttCriticalStyle

How a critical bar is marked: recoloured, or outlined over its own fill.

type GanttCriticalStyle = 'fill' | 'outline'

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 fourteen `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' | 'beforeDependencyDelete' | 'beforeRowMove' | 'beforeRowDrop' | 'taskEdit:cancelled' | 'taskMove:cancelled' | 'taskResize:cancelled' | 'progressChange:cancelled' | 'milestoneMove:cancelled' | 'dependencyCreate:cancelled' | 'taskDelete:cancelled' | 'beforeTaskPaste' | 'taskPaste:cancelled' | 'beforeTaskAdd' | 'taskAdd:cancelled' | 'beforeMilestoneConvert' | 'milestoneConvert:cancelled' | 'dependencyDelete:cancelled' | 'rowMove:cancelled' | 'rowDrop:cancelled' | 'dependencies' | 'history' | 'columnResize' | 'workload:click' | 'workloadCellClick' | 'workloadCellDblClick' | 'workloadCellContextMenu' | 'workloadCellHover' | 'workloadCellHoverEnd' | 'workloadResourceClick' | 'dataBand:change' | 'beforeDataBandEdit' | 'dataBandEdit:cancelled' | 'cell:click' | 'cellClick' | 'cellDblClick' | 'cellContextMenu' | 'beforeCellEditStart' | 'cellEditStart' | 'cellEditStart:cancelled' | 'cellEditCommit' | 'cellEditCancel' | 'rowClick' | 'rowDblClick' | 'task:filtered' | 'draw' | 'beforeTaskExpand' | 'beforeTaskCollapse' | 'taskExpand' | 'taskCollapse' | 'taskExpand:cancelled' | 'taskCollapse:cancelled' | 'resourceExpand' | 'resourceCollapse' | 'selectionChange' | 'rowMove' | 'rowDrop' | 'schedulingConflict' | 'taskAdd' | 'taskRemove' | 'taskUpdate' | 'dependencyAdd' | 'dependencyRemove' | 'dependencyUpdate' | 'assignmentChange' | 'datesChanged' | 'change' | 'ready' | 'beforeTaskDrag' | 'taskDragStart' | 'taskDrag' | 'taskDrag:cancelled' | 'beforeTaskResizeStart' | 'taskResizeStart' | 'taskPartialResize' | 'taskResizeEnd' | 'beforePercentBarDrag' | 'percentBarDragStart' | 'percentBarDrag' | 'percentBarDrop' | 'percentBarDrag:cancelled' | 'taskClick' | 'taskDblClick' | 'taskMouseOver' | 'taskMouseOut' | 'taskContextMenu' | 'linkClick' | 'linkDblClick' | 'linkContextMenu' | 'linkHover' | 'tooltipShow' | 'tooltipHide' | 'zoomChange' | 'visibleRangeChange' | 'scroll' | 'viewMount' | 'viewDestroy' | 'dirtyChange'

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 or a name→capacity map. A resource may carry its own working `calendar`, in which case load, workload, over-allocation and `level()` measure it against THAT: zero capacity on a day it does not work, and `capacity` is read **in hours per day** (defaulting to that weekday's `hoursPerDay`). A resource with no calendar keeps the historical unitless `capacity` (max concurrent units, default 1), treated as a fraction of the plan `hoursPerDay`. A resource may also carry cost data: `rate` (per hour, for the default `type: 'work'`, or per unit of an assignment's `units` for `type: 'material'`), dated `rates` changes, and `type` - `'cost'` charges its flat `cost` once per assignment, independent of hours or units. `gantt.cost()`/`earnedValue()`/the histogram's `unit: 'cost'` read this; a resource with none of `rate`/`rates`/`cost` costs nothing, so a plan with no rate data is unaffected. A resource may also carry an `avatar` image URL, drawn as a round picture in the split view's assignee column, workload band resource rows and assignment picker - `alt` text is the resource's name, and a resource without one, or whose image fails to load, keeps its initials glyph.

type GanttResourceSpec = Array<{ id?: string; name?: string; resource?: string; avatar?: string; capacity?: number; maxUnits?: number; max?: number; units?: number; calendar?: GanttResourceCalendar | GanttCalendarRef; rate?: number; rates?: GanttResourceRateChange[]; type?: 'work' | 'material' | 'cost'; cost?: number; }> | Record<string, number>

Declared in lattice-grid/modules/gantt.

GanttSchedulingMode

A task's scheduling mode: which quantity of `effort = duration × Σ units × hours per day` is held when another changes. `fixedDuration` (the default) holds the duration; `fixedEffort` holds the effort so more units shorten the duration; `fixedUnits` holds the units so a bigger effort lengthens the duration.

type GanttSchedulingMode = 'fixedDuration' | 'fixedEffort' | 'fixedUnits'

Declared in lattice-grid/modules/gantt.

GanttTooltip

The task tooltip: a positioned card on hover and keyboard focus, anchored to the bar, in both `mount` and `mountSplit`. `true` (the default) draws the built-in card: the task name as a title, then labelled Start/End/Duration/Complete rows (dates in the grid/plan locale, e.g. "May 1, 2026"; "Duration: 152 days"), plus Effort, Assigned, Cost and Slack when the task has them. A milestone shows a single Date row instead. `{ fields }` picks and orders the rows (ignored for a milestone, which always shows just its Date). `false` turns the tooltip off. A function renders the host's own content - a `string` (always text) or a `Node`/`HTMLElement` (the host's own DOM, attached as it is; task data put into it should still be set as text, never `innerHTML`).

type GanttTooltip = boolean | { fields?: GanttTooltipField[] } | ((task: GanttScheduledTask, ctx: GanttTooltipContext) => string | HTMLElement | null | undefined)

Declared in lattice-grid/modules/gantt.

GanttTooltipField

A row the task tooltip card can show; `tooltip.fields` picks and orders them.

type GanttTooltipField = 'start' | 'end' | 'duration' | 'percentComplete' | 'effort' | 'resources' | 'cost' | 'slack' | 'deadline'

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.

GanttZoomCause

What changed the split view's zoom: a host `setZoom`/`fitZoom` (`'api'`), the view's own zoom control (`'control'`), or a future pinch/wheel gesture (`'gesture'`).

type GanttZoomCause = 'api' | 'control' | 'gesture'

Declared in lattice-grid/modules/gantt.

GanttZoomLevel

One level of the split view's built-in zoom control: a preset, or `fit`, which zooms to show the whole plan.

type GanttZoomLevel = GanttZoom | 'fit'

Declared in lattice-grid/modules/gantt.

GanttZoomValue

The level a `zoomChange` moved from or to: a preset, `fit` (the control's fit-to-plan), or `custom` for a raw pixels-per-day.

type GanttZoomValue = GanttZoom | 'fit' | 'custom'

Declared in lattice-grid/modules/gantt.

GeometryFormatPattern

What a `geometry` cell shows: `'summary'` (the default) is a line a person reads - `Point 51.5074°N 0.1278°W`, `Polygon, 14 vertices, 2.31 km²` - with numbers in the grid's locale; `'wkt'` is the Well-Known Text; `'geojson'` is the GeoJSON geometry as JSON text.

type GeometryFormatPattern = 'summary' | 'wkt' | 'geojson'

GeometryKind

The kind of a geometry: the GeoJSON geometry type name.

type GeometryKind = 'Point' | 'LineString' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon' | 'GeometryCollection'

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'

HeaderRenderFn

The short form of a heading renderer: a function handed the heading element to fill and the {@link HeaderParams} above.

type HeaderRenderFn = (label: HTMLElement, params: HeaderParams) => HTMLElement | string | void

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' | 'eraser' | 'thumbUp' | 'eye' | 'eyeOff' | 'copy' | 'present' | 'cabinet' | 'splice' | 'exchange' | 'pole' | 'chamber' | 'premises' | 'fault' | 'user' | 'calendar' | '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'

KanbanAssignee

One assignee on a card: a name string, or an object carrying `name` (or `label`/`id`) and an optional `avatar` image URL. Drawn as the avatar component the Gantt has used since 1.88 - the picture when it has one, the initials glyph otherwise, coloured from the name, with a `+N` overflow.

type KanbanAssignee = string | { name?: string; label?: string; id?: string; avatar?: string | null }

Declared in lattice-grid/modules/kanban.

KanbanChecklistMap

The checklist mapping: a property path/fn whose value is a `{ done, total }` object, or an object `{ done, total }` naming the two fields separately. Rendered as a `3/5` count.

type KanbanChecklistMap = KanbanFieldMap | { done: string; total: string }

Declared in lattice-grid/modules/kanban.

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.

KanbanColumnWidth

The column-width mode. A number fixes the width in pixels; `'fill'` (the default) shares the board width equally between the columns, never below {@link KanbanConfig.minColumnWidth}; `'auto'` keeps the natural fixed width the `--lattice-board-column-width` token declares (default 280px). The token, when the host sets it, still overrides the option.

type KanbanColumnWidth = number | 'fill' | 'auto'

Declared in lattice-grid/modules/kanban.

KanbanDensity

The card density: `'compact'` tightens each card's padding and drops the subtitle so a column fits more cards; `'comfortable'` (the default) keeps the roomier card.

type KanbanDensity = 'compact' | 'comfortable'

Declared in lattice-grid/modules/kanban.

KanbanDueMap

The due-date mapping: a property path/fn (as any other field), or an object `{ field, dueSoon }` where `dueSoon` is the number of days that counts as "due soon". The date is drawn in the grid's date format when bound to a date column, and coloured with an icon when overdue or due soon.

type KanbanDueMap = KanbanFieldMap | { field: string; dueSoon?: number }

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' | 'cards:loaded' | 'beforeMove' | 'beforeAdd' | 'beforeEdit' | 'beforeLaneReorder' | 'beforeColumnReorder' | 'beforeColumnChange' | 'move:cancelled' | 'add:cancelled' | 'edit:cancelled' | 'laneReorder:cancelled' | 'columnReorder:cancelled' | 'columnChange:cancelled' | 'history'

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.

KanbanLaneDef

A swimlane definition. A lane may also carry workflow-rule overrides: its `transitions`/`require` maps replace the board-level maps per key for cards in that lane.

type KanbanLaneDef = { id: string; title?: string; transitions?: Record<string, string[] | '*'>; require?: Record<string, KanbanRequiredField[]>; }

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' | 'tile:status'

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.

LatticeDesignerProps

The designer's React props.

type LatticeDesignerProps = Record<string, unknown> & { mode?: DesignerOptions['mode']; state?: DesignerOptions['state']; sources?: DesignerOptions['sources']; relationships?: DesignerOptions['relationships']; guardrails?: DesignerOptions['guardrails']; factories?: DesignerOptions['factories']; llm?: DesignerOptions['llm']; onStateChange?: (payload: DesignerStateEvent) => void; onMode?: (payload: DesignerModeEvent) => void; onPage?: (payload: DesignerPageEvent) => void; onSelect?: (payload: DesignerSelectEvent) => void; className?: string; style?: Record<string, unknown>; id?: string; }

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.

LatticeSchedulerProps

The scheduler's React props.

type LatticeSchedulerProps = Record<string, unknown> & LatticeViewerCommonProps & { resources?: SchedulerConfig['resources']; events?: SchedulerConfig['events']; zoom?: SchedulerConfig['zoom']; onZoomChange?: (payload: SchedulerZoomChangeEvent) => void; }

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.

LatticeSvelteDesignerProps

The designer's Svelte prop shape, for `Designer.svelte`.

type LatticeSvelteDesignerProps = LatticeSvelteHostProps & { mode?: DesignerOptions['mode']; state?: DesignerOptions['state']; sources?: DesignerOptions['sources']; relationships?: DesignerOptions['relationships']; guardrails?: DesignerOptions['guardrails']; factories?: DesignerOptions['factories']; llm?: DesignerOptions['llm']; onStateChange?: (payload: DesignerStateEvent) => void; onMode?: (payload: DesignerModeEvent) => void; onPage?: (payload: DesignerPageEvent) => void; onSelect?: (payload: DesignerSelectEvent) => 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.

LatticeVueDesignerEmit

What `<LatticeDesigner>` emits: its four events under their own names.

type LatticeVueDesignerEmit = { (event: 'state', payload: DesignerStateEvent): void; (event: 'mode', payload: DesignerModeEvent): void; (event: 'page', payload: DesignerPageEvent): void; (event: 'select', payload: DesignerSelectEvent): void; }

Declared in lattice-grid/modules/vue.

LatticeVueDesignerProps

The designer's Vue props.

type LatticeVueDesignerProps = Record<string, unknown> & LatticeVueHostProps & { mode?: DesignerOptions['mode']; state?: DesignerOptions['state']; sources?: DesignerOptions['sources']; relationships?: DesignerOptions['relationships']; guardrails?: DesignerOptions['guardrails']; factories?: DesignerOptions['factories']; llm?: DesignerOptions['llm']; } & LatticeVueListeners<'state' | 'mode' | 'page' | 'select'

Declared in lattice-grid/modules/vue.

LatticeVueFormProps

The form's Vue props: the configuration, the common ones, and its seven events.

type LatticeVueFormProps = Record<string, unknown> & LatticeVueViewerCommonProps & LatticeVueListeners< 'beforeChange' | 'change' | 'input' | 'click' | 'focus' | 'blur' | 'validated', 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.

LatticeVueSchedulerProps

The scheduler's Vue props.

type LatticeVueSchedulerProps = Record<string, unknown> & LatticeVueViewerCommonProps & { resources?: SchedulerConfig['resources']; events?: SchedulerConfig['events']; zoom?: SchedulerConfig['zoom']; } & LatticeVueListeners<'zoom-change', SchedulerZoomChangeEvent>

Declared in lattice-grid/modules/vue.

LatticeVueShellProps

The shell's Vue props: the arrangement, the common ones, and its state event.

type LatticeVueShellProps = Record<string, unknown> & LatticeVueViewerCommonProps & LatticeVueListeners<'state-change', ShellStateChangeEvent>

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.

LayoutCorners

A window frame's corner style (default `'rounded'`,. `'square'` zeroes the radius on the window, its title bar, the minimised strip and the maximised frame - all the same element in a different state - with no other visual change.

type LayoutCorners = 'rounded' | 'square'

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.

ListOperator

The four operators of a `list` column (declared by the type the opt-in `modules/list` registers), questions about the whole list. They compare items exactly (case matters), as SQL's `list_has_any` does. - `hasAny` - the list holds at least one of the operand's items. - `hasAll` - the list holds every one of them (an empty operand: every row). - `hasNone` - the list holds none of them (an empty or absent list included). - `listCount` - the number of items compares as a {@link ListCount} says. Every operator of the item type applies to a list column too, with "any item matches" semantics; see `DataType.items`.

type ListOperator = 'hasAny' | 'hasAll' | 'hasNone' | 'listCount'

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' | 'orthographic' | 'globe'

MapViewCamera

A camera: centre `[lng, lat]`, zoom, pitch and bearing in degrees.

type MapViewCamera = { center?: [number, number]; zoom?: number; pitch?: number; bearing?: number }

Declared in lattice-grid/modules/mapview.

MapViewColour

How rows are coloured: one colour (a CSS hex or `rgb()` colour, or `[r, g, b, a?]`); a category per value of a column (`map` names the colour of each value, and any other value takes the next colour of the charts palette); or a number placed along a ramp by the charts module's own scale code, between the `colours` stops (default the default scheme's sequential ramp), over `domain` (default the drawn values' range), on a `rampScale` (`linear`, `log` or `quantile`; chosen from the values when unset, as a heat map's is).

type MapViewColour = string | number[] | { field: string; map?: Record<string, string | number[]> } | { field: string; scale: 'ramp'; domain?: [number, number]; colours?: string[]; rampScale?: 'linear' | 'log' | 'quantile'; }

Declared in lattice-grid/modules/mapview.

MapViewDash

How lines are dashed: one pattern for every line, or a pattern per value of a column (`map`; a value it does not name is drawn solid). The pattern is in pixels and holds its length on screen while the camera zooms and pitches. Needs deck.gl's `PathStyleExtension` on the page's deck (the full `deck.gl` bundle has it); without it `mapview:dash` warns and lines are solid. A pattern that is none of these warns `mapview:dash:spec`.

type MapViewDash = MapViewDashPattern | { field: string; map: Record<string, MapViewDashPattern> }

Declared in lattice-grid/modules/mapview.

MapViewDashPattern

A line pattern as `[dash, gap]` in pixels, or a name: `solid`, `dashed` (10 px dash, 6 px gap) or `dotted` (2 px dash, 5 px gap).

type MapViewDashPattern = 'solid' | 'dashed' | 'dotted' | [number, number]

Declared in lattice-grid/modules/mapview.

MapViewEnd

One end of a segment row: the columns holding its latitude and longitude (`lng`, or `lon`).

type MapViewEnd = { lat: string; lng: string } | { lat: string; lon: string }

Declared in lattice-grid/modules/mapview.

MapViewEventName

The events a map view emits.

type MapViewEventName = 'feature:click' | 'feature:hover' | 'draw' | 'load' | 'close'

Declared in lattice-grid/modules/mapview.

MapViewFlow

An animated flow along routes: `speed` is traversals of a route per second (default 0.25), `trail` the share of a route the moving trail lights (default 0.3).

type MapViewFlow = boolean | { speed?: number; trail?: number }

Declared in lattice-grid/modules/mapview.

MapViewGeometry

Where a row's place is read from: a latitude and a longitude column (`lng`, or `lon`), optionally with a `route` to join rows into lines; a `from` and a `to` (each a latitude and a longitude column) for a row that is one segment; a GeoJSON column (a `Geometry` or a `Feature`, as an object or its JSON text, or WKT or WKB); or a path column holding an array of `[lng, lat]` pairs (or its JSON text).

type MapViewGeometry = { lat: string; lng: string; route?: MapViewRoute } | { lat: string; lon: string; route?: MapViewRoute } | { from: MapViewEnd; to: MapViewEnd } | { geojson: string } | { path: string }

Declared in lattice-grid/modules/mapview.

MapViewIcon

Icon markers for point rows. A point's icon is `map[value of field]`, else `default`; with a `field` and no `map` the value is itself the icon. A point with no icon is drawn as a circle. A name that is no glyph, path or URL warns `mapview:icon:<name>`; with no canvas to draw on, `mapview:icons`. Registry glyphs are tinted by the `color` mapping (an image URL is drawn as it is). In 3D an icon is a billboard: it always faces the camera, is drawn whole at ground level over the routes and the extruded buildings (it is not depth-tested, so a building never hides it), and keeps its pixel size at every zoom. All the icons live in one atlas, packed once and again only when a point asks for an icon it does not hold.

type MapViewIcon = MapViewIconRef | { field?: string; map?: Record<string, MapViewIconRef>; default?: MapViewIconRef; size?: string | number; anchor?: 'center' | 'bottom' | 'top' | 'left' | 'right'; badge?: boolean | 'circle' | 'square' | 'diamond'; }

Declared in lattice-grid/modules/mapview.

MapViewIconRef

An icon for a point row: the name of a glyph of the grid's icon registry (`grid.icons`: `cabinet`, `splice`, `exchange`, `pole`, `chamber`, `premises`, `fault` and the rest, and any you register), an SVG path (in a 16 x 16 box), an icon definition (`{ viewBox, paths }`), or an image URL.

type MapViewIconRef = string | { viewBox?: string; paths?: string[]; path?: string; paint?: 'stroke' | 'fill' }

Declared in lattice-grid/modules/mapview.

MapViewLayer

The layer kinds a map view draws a row with.

type MapViewLayer = 'point' | 'column' | 'polygon' | 'path'

Declared in lattice-grid/modules/mapview.

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' | SpatialOperator | ListOperator

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' | 'stage' | '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.

RouterDateFieldFormat

The input format a `date` field reads: `'iso'` (the default - ISO 8601, a `Date`, or an epoch number), `'epoch-s'` (seconds since the epoch), `'epoch-ms'` (milliseconds), or an explicit pattern such as `'dd/MM/yyyy'`, parsed with the grid's own date-pattern token vocabulary.

type RouterDateFieldFormat = 'iso' | 'epoch-s' | 'epoch-ms' | string

Declared in lattice-grid/modules/data-router.

RouterEventName

The events a data router raises. Routing itself is reported to each attached viewer through its own `rows.apply`, not through an event here. `metrics` is the periodic observability timer, running only while at least one listener is registered so collection costs nothing until someone asks for it. `fields:changed` (v16) fires when a spread join's field set for a route changes.

type RouterEventName = 'metrics' | 'fields:changed'

Declared in lattice-grid/modules/data-router.

RouterFieldSpec

One entry of `addSource`'s `fields` option: a type name, or an options object. The object form narrows a `number`'s decimal separator (`decimal: ','`), gives a `boolean` its own true/false marker sets, chooses a `date`'s input `format`, and lists `nulls` - strings that mean null for this field, mapped before any coercion. A field with only `nulls` (no `type`) maps its null markers and passes every other value through untouched. A value that fails to coerce is stored as null and warns once per source+field (`router:coerce-failed`).

type RouterFieldSpec = RouterFieldType | { type?: RouterFieldType; format?: RouterDateFieldFormat; decimal?: ',' | '.'; true?: string[]; false?: string[]; nulls?: string[]; }

Declared in lattice-grid/modules/data-router.

RouterFieldType

The field types `addSource`'s `fields` option can coerce a raw value to: text, number (decimal comma and thousands separators), integer, boolean (configurable true/false sets), date (ISO, epoch s/ms or a small explicit pattern set) and json (parse a string).

type RouterFieldType = 'text' | 'number' | 'integer' | 'boolean' | 'date' | 'json'

Declared in lattice-grid/modules/data-router.

RouterJoinMissing

What a fan-in join does with a row while its match 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.

RouterParentDelete

What a parent's delete does to its children (v18,, on a COLLECT join, on an unnest, and standalone via `relateRows`. `'cascade'` deletes every child whose foreign key matches the deleted parent (recursively); `'orphan'` keeps them, marked `__orphan: true`, warned once; `'keep'` keeps them bare. The default for a collect join and `relateRows` is `'keep'` - the unchanged behaviour - while an unnest defaults to `'cascade'` (its unchanged behaviour already removes its embedded children).

type RouterParentDelete = 'cascade' | 'orphan' | 'keep'

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.

RouterSpreadType

The value types a SPREAD join's `type` map can coerce an attribute to.

type RouterSpreadType = 'number' | 'date' | 'boolean' | 'text'

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'

SchedulerEventFieldChanges

The field-level edit an event edit reports: each changed field's old and new value.

type SchedulerEventFieldChanges = Record<string, { from: unknown; to: unknown }>

Declared in lattice-grid/modules/scheduler.

SchedulerEventName

The event names a scheduler emits.

type SchedulerEventName = 'zoom:change' | 'change' | 'beforeEventChange' | 'eventChange:cancelled' | 'event:change'

Declared in lattice-grid/modules/scheduler.

SchedulerRow

A row backing a scheduler resource or event: any object. Its identity comes from `resourceKey`/`eventKey`.

type SchedulerRow = Record<string, unknown>

Declared in lattice-grid/modules/scheduler.

SchedulerZoom

A scheduler zoom level name (`'fit'` sizes px-per-day to the timeline width), or a bare pixels-per-day number.

type SchedulerZoom = 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'fit' | number

Declared in lattice-grid/modules/scheduler.

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'

SelectionPredicate

A row selection as a descriptor, from {@link SelectionApi.predicate}. `all: true` is a predicate selection: every row `filter` (and `quick`, when a quick search was active) matched at the moment of select-all, less the rows in `except`. The filter is the one captured then: a later filter change does not widen or narrow it. `all: false` is the ordinary key list.

type SelectionPredicate = { all: true; filter: FilterSet | null; quick?: string; except: string[]; } | { all: false; include: string[]; }

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'

ShellContent

Anything `attach()` mounts: a Lattice view, a DOM element, or an HTML string (converted once and reused).

type ShellContent = HTMLElement | string | ShellWidget

Declared in lattice-grid/modules/shell.

ShellEventName

The events a shell raises, on `shell.on()`,,,,. The shell's own, not a 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. The cancellable `before*` events - `beforeCollapse`, `beforeExpand`, `beforeAddCell`, `beforeRemoveCell`, `beforeHide`, `beforeShow` and `beforeResizeStart` - run before the cell moves, on the same contract the grid core uses: call `preventDefault(reason?)` on the payload, or return `false`; a veto keeps the cell (or the two cells' sizes) unchanged. The past-tense events - `afterCollapse`, `afterExpand`, `afterAddCell`, `afterRemoveCell`, `afterHide`, `afterShow`, `resize`, `afterResizeEnd`, `tabChange` and `stateChange` - report a change already applied and carry no `preventDefault`.

type ShellEventName = 'beforeCollapse' | 'beforeExpand' | 'afterCollapse' | 'afterExpand' | 'beforeAddCell' | 'afterAddCell' | 'beforeRemoveCell' | 'afterRemoveCell' | 'beforeHide' | 'afterHide' | 'beforeShow' | 'afterShow' | 'tabChange' | 'stateChange' | 'beforeResizeStart' | 'resize' | 'afterResizeEnd'

Declared in lattice-grid/modules/shell.

ShellSize

A cell size: pixels as a number, or any CSS length string such as `'30%'`.

type ShellSize = number | string

Declared in lattice-grid/modules/shell.

ShellType

The separator between cells: thin lines, wide lines, an even gap, or none.

type ShellType = 'line' | 'wide' | 'space' | 'none'

Declared in lattice-grid/modules/shell.

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'

SpatialBbox

A box in degrees, `[minLon, minLat, maxLon, maxLat]`: the operand of `withinBbox`.

type SpatialBbox = [number, number, number, number]

SpatialOperator

The four operators of a `geometry` column (declared by the type the opt-in `modules/geometry` registers), evaluated in memory for any source that does not push them down. A `geometry` column accepts these and `blank`/`notBlank` only, and these are refused on any other column. - `withinBbox` - the whole geometry lies inside a {@link SpatialBbox}. - `withinPolygon` - a Point or MultiPoint lies inside a Polygon or MultiPolygon operand (holes excluded); any other geometry is tested by its centroid. - `intersects` - the two share a point: a bounding-box test, then an edge test with edges straight in longitude/latitude rather than great circles. The operand is a geometry or a {@link SpatialBbox}. - `withinDistance` - the centroid is within a {@link SpatialDistance}, by great-circle (haversine) distance. The antimeridian is not handled: a box whose west edge is east of its east edge is refused; split it into two conditions joined by `or`.

type SpatialOperator = 'withinBbox' | 'withinPolygon' | 'intersects' | 'withinDistance'

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. One switch reaches every module: `data-theme="dark"` on any ancestor (a layout's root, or `<html>`) darkens the grid, the layout chrome, charts, KPI tiles, tabs, kanban and gantt together. The nearest `data-theme` wins, so `'light'` here forces a light grid inside a dark page. `'auto'` follows the viewer's `prefers-color-scheme`. Unset writes no attribute: the grid follows the nearest themed ancestor, and is light when there is none.

type Theme = 'light' | 'dark' | 'auto' | '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 & {})

TraceMissingReason

The named reasons `trace.missing()` can report a row dropped for (v19,.

type TraceMissingReason = 'predicate-false' | 'filter-rejected' | 'join-no-partner' | 'deduped-stale-seq' | 'removed-by-cascade' | 'coerced-invalid-key' | 'not-yet-flushed' | 'unrouted'

Declared in lattice-grid/modules/data-router.

TraceStep

One step of a traced row's path (v19,: the shape varies by `kind`, mirroring the pipeline stage `explain()` already counts in aggregate - this is the same accounting, kept per row instead of summed.

type TraceStep = { kind: 'fields'; changes: { field: string; before: unknown; after: unknown }[] } | { kind: 'unnest'; parentKey: unknown } | { kind: 'join'; from: string; matchedKey: unknown; matched: boolean } | { kind: 'collect'; from: string; matchedKey: unknown; matched: boolean } | { kind: 'relate'; parentKey: unknown; matchedKey: unknown } | { kind: 'rollup'; groupKey: unknown; memberCount: number } | { kind: 'spread'; origin: string } | { kind: 'cascade'; origin: string } | { kind: 'filter'; passed: boolean } | { kind: 'sort'; passed: true } | { kind: 'transform'; passed: true } | { kind: 'route'; label: string | null; op: 'add' | 'update'; seq: number | undefined }

Declared in lattice-grid/modules/data-router.

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' | 'calendar' | 'tabs' | 'chart' | 'gantt' | 'layout' | 'router' | 'form'

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'