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.
| Property | Type | Description |
|---|---|---|
| acf | number[] | The autocorrelation at each lag; index 0 is lag 0 and is always 1. |
| pacf | number[] | The partial autocorrelation at each lag; index 0 is 1, and `pacf[1] === acf[1]`. |
| bounds | { upper: number; lower: number } | The approximate ±1.96/√n white-noise confidence band. |
| n | number | The series length the ACF/PACF were computed over. |
| nlags | number | The maximum lag. |
| approximate | boolean | Always true: the ±1.96/√n band is an approximation. |
AdfResult
The Augmented Dickey-Fuller stationarity test result.
| Property | Type | Description |
|---|---|---|
| statistic | number | The ADF t-statistic on the lagged level. |
| usedLag | number | The number of augmenting lags chosen by AIC. |
| nobs | number | The observations the final regression used. |
| criticalValues | { '1%': number; '5%': number; '10%': number } | MacKinnon's constant+trend critical values at the 1%, 5% and 10% levels. |
| pValue | number | An approximate p-value, interpolated across the critical-value ladder. |
| pApproximate | boolean | Always true: the p-value is an interpolation, not the MacKinnon surface. |
| stationary | boolean | Whether the series is stationary at the 5% level. |
| verdict | string | The plain-language verdict: `'stationary'` or `'non-stationary'`. |
| regression | 'ct' | The regression form used - always `'ct'` (constant + trend) in v1. |
AggregateProvenance
How one aggregate was routed, for `lastPlan()` provenance.
| Property | Type | Description |
|---|---|---|
| id | string | The output column the aggregate fills. |
| col | string | The column being reduced. |
| fn | string | The reduction asked for - `sum`, `avg`, `p95` and the rest. |
| class | PushdownClass 'identical' | 'may-differ' | 'fallback' | How the engine result relates to the grid kernel. |
| reason | string | Why it is client-side, when it is (config, fallback, or the guard). (optional) |
| weight | string | The column supplying the weights, for a weighted reduction. (optional) |
| params | Record<string, unknown> | Parameters the statistic takes, carried through so an adapter emits the matching SQL (e.g. a trim share). (optional) |
AggregateRequest
One aggregate the grid asks the source to compute over the matching set. `params` carries e.g. `{ share: 0.1 }` so an adapter emits the matching SQL; `weight` names the second column for a two-column stat like `correlation`.
| Property | Type | Description |
|---|---|---|
| id | string | Keys the result back to the request. |
| col | string | The column to reduce. |
| fn | string | The statistic name, as used in `total: '<name>'`. |
| weight | string | The second column, for a two-column statistic. (optional) |
| params | Record<string, unknown> | Parameters the statistic takes, e.g. a trim share. (optional) |
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.
| Property | Type | Description |
|---|---|---|
| id | string | The new mark's stable id, usable with {@link AnnotationApi.remove}. |
| count | number | How many marks are on the layer now. |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| valueOf | (): number | - | number `count` | The primitive-coercion hook: makes the result stand in for the old bare-number return in arithmetic and comparison. |
AnomalyReason
| Property | Type | Description |
|---|---|---|
| column | string | The column that put this row over the line. |
| name | string | The column's display name, or its id. |
| value | number | The row's value in that column. |
| score | number | The modified z-score, for the `modifiedZScore` method. (optional) |
| lower | number | The lower fence, for the `iqr` method. (optional) |
| upper | number | The upper fence, for the `iqr` method. (optional) |
| method | Extract<OutlierMethod, 'modifiedZScore' | 'iqr'> | Which rule flagged it. (optional) |
AnomalyReport
| Property | Type | Description |
|---|---|---|
| method | Extract<OutlierMethod, 'modifiedZScore' | 'iqr' | 'mahalanobis'> | Which rule produced the report. |
| k | number | The IQR fence multiplier, for the `iqr` method. (optional) |
| n | number | How many rows the scan ran over. |
| rows | AnomalyRow[] | The flagged rows, worst first. |
| flagged | number | How many rows were flagged. |
| skipped | string[] | The column ids that were not numeric and so could not be scored. |
| scored | number | How many numeric columns were scored (univariate). (optional) |
| columns | unknown | Per-column summaries (univariate): the centre, spread and fence per column. (optional) |
| df | number | The degrees of freedom of the χ² cut (multivariate). (optional) |
| cutoff | number | null | The χ² cut the squared distance is compared against (multivariate). (optional) |
| center | number[] | The joint centre the distances are measured from (multivariate). (optional) |
| used | number | How many complete rows defined the metric (multivariate). (optional) |
| singular | boolean | Whether the covariance was singular and had to be regularised (multivariate). (optional) |
AnomalyRow
| Property | Type | Description |
|---|---|---|
| rowKey | string | null | The row key - stable across a sort or a feed, where the index is not. |
| index | number | The physical row index at the time of the call. |
| score | number | null | The row's headline score: its most extreme modified z-score across the flagging columns (univariate), the Mahalanobis distance (multivariate), or null for the IQR method, which has no single score. |
| squared | number | null | The squared Mahalanobis distance, for the `mahalanobis` method. (optional) |
| why | AnomalyReason[] | Why this row was flagged: the columns and how far, so it is explainable. |
ApproximateEntry
One entry of the approximate maintenance tier.
| Property | Type | Description |
|---|---|---|
| sketch | string | The sketch that backs this kernel: `HyperLogLog`, `KLL`, `SpaceSaving`. |
| bound | ErrorBound | The error bound the sketch is verified to meet. |
CapabilityInterval
An interval for a capability index, by Bissell's approximation.
| Property | Type | Description |
|---|---|---|
| index | number | The point estimate the interval is around - the Cpk or Ppk it was computed for. |
| lower | number | The lower bound. This is the figure that matters: a Cpk of 1.35 from thirty parts has a lower bound below 1, so "we passed 1.33" has not been shown. |
| upper | number | The upper bound. |
| margin | number | Half the interval's width - the ± figure. |
| n | number | How many readings the index was computed from. Two or more, or there is no interval. |
| confidence | number | The level the bounds were computed at, 0 to 1. 0.95 by default. |
CaptureOptions
Rendering the grid to a still image. `scale` multiplies the pixel dimensions : 2 for a retina still, 3 or 4 for a slide. `background` fills behind the grid so a PNG dropped into a deck does not show it through.
| Property | Type | Description |
|---|---|---|
| scale | number | Multiply the image's pixel dimensions - 2 for a retina-quality still, 3 or 4 for a slide. 2 by default. (optional) |
| background | string | The colour painted behind the grid, since a grid whose own background is transparent would otherwise photograph onto nothing. (optional) |
| download | boolean | Save the image as a file as well as returning it. A file name is generated when you give none, rather than the save being refused. (optional) |
| fileName | string | The name to save under. Supplying one also triggers the download unless `download: false` says otherwise. (optional) |
ChangeResult
| Property | Type | Description |
|---|---|---|
| added | Row[] | The rows that were added. |
| updated | Row[] | The rows that were updated. |
| removed | string[] | The keys of the rows that were removed. |
| rejected | RejectedRow[] | Rows that could not be applied. A batch of a thousand containing three bad ones applies the other 997 and lists the three here. (optional) |
ChartActiveRule
One entry of {@link Chart.responsive} and of the `responsive` event's `active` list.
| Property | Type | Description |
|---|---|---|
| index | number | The rule's position in the resolved list (`'auto'` expands to two rules). |
| auto | boolean | True for one of the built-in rules `responsive: 'auto'` stands for. |
| maxWidth | number | The rule's `maxWidth`, as given. (optional) |
| minWidth | number | The rule's `minWidth`, as given. (optional) |
| maxHeight | number | The rule's `maxHeight`, as given. (optional) |
| minHeight | number | The rule's `minHeight`, as given. (optional) |
ChartAnimationOptions
The object form of {@link ChartSpec.animation}: how a chart's entry and its updates play.
| Property | Type | Description |
|---|---|---|
| duration | number | How 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) |
| entry | boolean | Play 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) |
| update | boolean | Play 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) |
| budget | number | The 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}.
| Property | Type | Description |
|---|---|---|
| animated | boolean | Whether the draw played an entry or an update. |
| reason | string | Why: `'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'`. |
| marks | number | How many marks the drawing has, as counted against the budget. |
| budget | number | The budget in force. |
ChartAnnotateMeasure
Where a `measure-x` or `measure-xy` readout's volume figure comes from.
| Property | Type | Description |
|---|---|---|
| volume | string | The 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`.
| Property | Type | Description |
|---|---|---|
| tools | ChartAnnotationToolName[] | Which tools the rail offers; the default is all of them, in rail order. (optional) |
| rail | ChartAnnotateRail 'left' | 'top' | 'none' | Where the rail sits; `none` keeps the drawings and the pointer tools without the strip. (optional) |
| readOnly | boolean | Draw what is in the state and refuse every change, including the rail itself. (optional) |
| measure | ChartAnnotateMeasure | How a measurer's volume figure is found. (optional) |
| pen | ChartPenOptions | The freehand pen's colour and width defaults. (optional) |
ChartAnnotation
| Property | Type | Description |
|---|---|---|
| kind | ChartAnnotationKind 'line' | 'target' | 'band' | 'callout' | 'event' | The default is a reference line. `event` is a labelled vertical marker with a flag at a position on the x axis, described into the accessible table with that position stated. (optional) |
| value | number | A constant value, for a line, target or callout's measure position. (optional) |
| compute | ChartAnnotationCompute | string | A reduction of the annotated data instead of a constant. (optional) |
| from | number | string | A band's two edges. On a horizontal band each is a measure value, a constant or (with `fromCompute`/`toCompute`) computed. On a vertical band (`orient: 'vertical'`, each is an x position - a category or a number - and the band shades the x-range between them: an event window, a maintenance period, a recession. (optional) |
| to | number | string | A band's far edge - a measure value on a horizontal band, an x position on a vertical one. (optional) |
| fromCompute | string | Compute a band's near edge from the data instead of stating it, by reduction name. (optional) |
| toCompute | string | Compute a band's far edge from the data instead of stating it. (optional) |
| x | unknown | A vertical line's, event marker's or callout's x position: a category or a number. (optional) |
| at | unknown | An alias for `x`, read when `x` is absent. (optional) |
| orient | ChartAnnotationOrient 'horizontal' | 'vertical' | Force a line vertical rather than horizontal, or shade a `band` across an x-range rather than a measure range. (optional) |
| axis | ChartAxisSide 'left' | 'right' | 'y2' | Which measure axis the annotation reads. (optional) |
| series | string | Restrict a `compute` to one series, by its key. (optional) |
| label | string | The text drawn beside the annotation, and the sentence it contributes to the accessible table. Omitted, the annotation is drawn unlabelled. (optional) |
| colour | string | The annotation's stroke, and a band's fill. Defaults to `currentColor`. (optional) |
| opacity | number | A band's fill opacity; the default is 0.12. (optional) |
| className | string | Extra class names on the annotation's element, so a stylesheet can reach one annotation in particular. (optional) |
ChartAnnotationAnchor
One point of a drawn chart annotation, in the chart's own data coordinates.
| Property | Type | Description |
|---|---|---|
| x | string | number | Date | The 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. |
| y | number | The y reading, on the measure axis. |
ChartAnnotationEvent
What an `annotation:added`, `annotation:changed` or `annotation:removed` handler receives.
| Property | Type | Description |
|---|---|---|
| item | ChartAnnotationItem | The drawing that was added, changed or removed, as plain JSON. |
| readout | ChartAnnotationReadout | A 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.
| Property | Type | Description |
|---|---|---|
| id | string | Unique within the process; assigned when the drawing is made or restored. |
| kind | ChartAnnotationItemKind | Which shape this is. |
| anchors | ChartAnnotationAnchor[] | 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. |
| text | string | The label, for `text`, `callout` and `note`. (optional) |
| colour | string | A CSS colour overriding the themed default. (optional) |
| readOnly | boolean | When 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) |
| width | number | A `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.
| Property | Type | Description |
|---|---|---|
| count | number | How 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) |
| elapsedMs | number | The 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) |
| volume | number | The sum of the volume column (see {@link ChartAnnotateMeasure}) across the x span. (optional) |
| change | number | The signed change between the two y anchors. (optional) |
| changePercent | number | null | The signed percentage change between the two y anchors; `null` when the first is zero. (optional) |
| dx | number | A 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) |
| slope | number | A 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.
| Property | Type | Description |
|---|---|---|
| title | string | The axis title. A bare string in place of this whole object is taken as the title. `axis.y.title` names whatever the y values are and `axis.x.title` whatever the x values are; each is drawn beside the axis that actually carries those values, so on a type that swaps sides (`horizontalBar`) the two titles swap with it. (optional) |
| min | number | Fix the 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) |
| max | number | Fix the high end of the axis rather than taking it from the data; see `min`. (optional) |
| ticks | number | unknown[] | A tick count, or the exact values to tick. (optional) |
| format | string | ((value: unknown) => string) | A format mask, or a function of the value. (optional) |
| grid | boolean | Draw the gridlines this axis owns. Default true for the measure axis. (optional) |
| labels | boolean | Draw the tick labels. (optional) |
| scale | ChartScale 'auto' | 'linear' | 'time' | 'band' | 'category' | Pin the x axis's scale rather than taking it from the column's type. The default, `'auto'`, is the rule stated in the charts section: a temporal column type (`date`, `datetime`, `timestamp`, `dateString`) draws a time axis, a numeric one draws a linear axis whatever its distinct count, and everything else draws bands. `'band'` is how a numeric code column - a quarter, a rating, a star count - asks for its bands back; `'linear'` and `'time'` put a column the grid types as text onto a continuous axis. Only the x axis reads it. 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) |
| barWidth | number | How 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) |
| every | number | Show every nth category label, on a crowded category axis. (optional) |
| rotate | boolean | 'auto' | Force the category labels' rotation rather than deciding it. (optional) |
| position | Side '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) |
| window | Pick<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.
| Property | Type | Description |
|---|---|---|
| range | ChartZoomRange | The visible range. |
| pinned | boolean | Whether 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.
| Property | Type | Description |
|---|---|---|
| mode | string | What the spec asked a brush to do: `zoom` the chart's own domain, or `filter` the grid. |
| kind | string | What the dragged range resolved to: a continuous `range`, or the discrete `values` of a category axis. |
| values | unknown[] | The category values the drag covered, on a category axis. |
| range | { from: unknown; to: unknown } | null | The numeric or time bounds the drag covered, on a continuous axis, or null. |
| axis | string | Which axis was dragged: `x`, `y` or `y2`. |
| column | string | null | The grid column the range names - the 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. |
| defaultPrevented | boolean | True once a handler has called `preventDefault`. Absent until then - a handler may also set it directly, which the chart honours the same way. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| preventDefault | (): void | - | void | Stop the chart acting on this brush - no zoom, no filter. It takes no reason, and there is no `<action>:cancelled` event: this is a default a host takes over, not a mutation a host vetoes. |
ChartClickEvent
`click`: a mark was clicked, **before** the chart does anything about it. The one event most callers want: it is how a click on a mark becomes a filter on the grid. It fires whether or not the spec sets `filterOnClick`, and it fires before the filter, the drill or the selection the chart would otherwise apply - so a host that wants to do something else entirely (open a drawer, cross-filter a second grid) calls `preventDefault()` and takes the click over.
| Property | Type | Description |
|---|---|---|
| defaultPrevented | boolean | True once a handler has called `preventDefault`. Absent until then - a handler may also set it directly, which the chart honours the same way. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| preventDefault | (): void | - | void | Stop the chart acting on this click - no filter, no drill, no selection change. It takes no reason, and there is no `<action>:cancelled` event: this is a default a host takes over, not a mutation a host vetoes. |
ChartCursorApi
The host's handle on a chart's crosshair.
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| set | (x: unknown): boolean | x: unknown | boolean | Put 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 | - | void | Take the cursor away, raising `cursor:leave`. |
| get | (): ChartCursorPosition | null | - | ChartCursorPosition | null | Where the cursor is, or null when it is not showing. |
ChartCursorLeaveEvent
What a `cursor:leave` handler receives.
| Property | Type | Description |
|---|---|---|
| source | 'pointer' | 'api' | 'row' | 'group' | What took it away. |
ChartCursorMoveEvent
What a `cursor:move` handler receives.
| Property | Type | Description |
|---|---|---|
| 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.
| Property | Type | Description |
|---|---|---|
| x | boolean | Draw the hairline across the category or time axis, snapped to a reading. Default true. (optional) |
| y | boolean | Draw 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) |
| labels | boolean | Label 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) |
| group | string | Charts 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) |
| zoom | boolean | With 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) |
| rowHover | boolean | Move 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.
| Property | Type | Description |
|---|---|---|
| x | unknown | The x of the reading it is at: a category, a number or a date as the column holds it. |
| key | string | A stable string for that x. |
| label | string | The 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.
| Property | Type | Description |
|---|---|---|
| label | string | The mark's label: the category, the slice, the tile, the region or the node. |
| value | number | null | The measure under the mark when a single series sits there, otherwise null - in which case the per-series numbers are in `series`. |
| category | unknown | The value to filter `column` to: the stored category behind the label, or null where the geometry has none. |
| column | string | null | The grid column the mark filters on, or null (a network node is a source in some rows and a target in others). |
| series | ChartDatumSeries[] | null | The per-series readings under the mark, or null on a geometry that has one value per mark. |
| rowKeys | unknown[] | The keys of the source rows behind the mark; empty where the geometry keeps none. |
| path | unknown[] | The mark's path from the drawn root, on a hierarchy - a treemap tile, a sunburst arc, a flow end. (optional) |
| depth | number | How deep the mark sits below the drawn root, on a hierarchy. (optional) |
| index | number | Which drawn node, on `forceTree`, `pack`, `tree` and `voronoiTreemap` - its position in the drawing's node list. (optional) |
| from | number | A histogram bin's lower bound, present only on a bin. (optional) |
| to | number | A histogram bin's upper bound, present only on a bin. (optional) |
| native | object | The DOM pointer event behind it. |
ChartDatumSeries
One series' reading under a mark, on a chart with several series. `value` is that series' own number at the mark, and `rows` how many source rows were aggregated into it - a count, not the rows themselves.
| Property | Type | Description |
|---|---|---|
| key | string | The series key, as bound. |
| label | string | The series' display label. |
| value | number | null | This series' value at the mark. |
| rows | number | How many source rows were aggregated into that value. |
ChartDrawEvent
`draw`: the chart finished a draw, at its settled size. Raised once per `draw()`, after the second pass a legend or heading that changed the plot box forces - so a handler never sees the in-between, wrongly-sized pass. A draw that showed the empty state instead raises nothing.
| Property | Type | Description |
|---|---|---|
| chartType | string | The type drawn, which for an extension type is its registered name. |
| categories | unknown[] | The categories drawn, in plot order. |
| empty | boolean | Whether the binding had nothing to draw. |
ChartDrillEvent
`drill`: the chart descended into a hierarchy, or `ascend()` came back up. Raised after the new level is set and before it is drawn.
| Property | Type | Description |
|---|---|---|
| path | unknown[] | The drill path from the top, a label per level. |
| label | string | null | The label just descended into, or the level now shown after an `ascend()`. |
ChartEditEvent
What a chart's `edit` and `editRejected` handlers receive.
| Property | Type | Description |
|---|---|---|
| rowKeys | string[] | The rows the edit wrote to. |
| colId | string | The column of the first value written. |
| value | number | The value the mark was dragged to. |
| oldValue | number | The value it had. |
| writes | Array<{ key: string; colId: string; value: number }> | Every cell written (several, for a distributed total or an `'xy'` drag). |
| reason | string | For `editRejected`: why the grid refused it (`'validation'`, a veto reason, `'readOnly'`). (optional) |
| message | string | For `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}).
| Property | Type | Description |
|---|---|---|
| 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) |
| step | number | The keyboard step in the measure's units (Shift takes ten). Default: a round 1% of the axis. (optional) |
| min | number | The lowest value a drag or a key can reach. (optional) |
| max | number | The highest value a drag or a key can reach. (optional) |
| snap | boolean | number | Round 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.
| Property | Type | Description |
|---|---|---|
| type | ChartEventName | Which event this is: `click`, `hover`, `leave`, `focus`, `draw`, `drill`, `brush` or `legend`. |
| chart | Chart | The chart that raised it. |
| grid | Grid | The grid the chart draws, as given in the spec. |
ChartEventPayloads
What a handler receives, per chart event.
| Property | Type | Description |
|---|---|---|
| click | ChartClickEvent | The mark clicked, with `preventDefault` to take the click over. |
| hover | ChartDatumEvent | The mark under the pointer, the same shape a click reports. |
| leave | ChartEvent | Nothing but the chart and its grid: the pointer is over no mark. |
| focus | ChartFocusEvent | The mark the keyboard is on. |
| draw | ChartDrawEvent | What was drawn, and whether there was anything to draw. |
| drill | ChartDrillEvent | The new drill path. |
| brush | ChartBrushEvent | The range dragged out, and the column it names, with `preventDefault` to take the brush over. |
| legend | ChartLegendEvent | The legend entry clicked, and every hidden series after it. |
| annotation:added | ChartAnnotationEvent | The drawing that was just made. |
| annotation:changed | ChartAnnotationEvent | The drawing that was just moved or re-lettered. |
| annotation:removed | ChartAnnotationEvent | The drawing that was just deleted. |
| zoom | ChartZoomEvent | The range now drawn, and what moved it. |
| cursor:move | ChartCursorMoveEvent | Where the crosshair is and every series' value there. |
| cursor:leave | ChartCursorLeaveEvent | Why the crosshair went. |
| edit | ChartEditEvent | The edit the grid accepted. |
| editRejected | ChartEditEvent | The edit the grid refused, with its reason and message. |
| responsive | ChartResponsiveEvent | The 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.
| Property | Type | Description |
|---|---|---|
| label | string | The focused mark's label. |
| value | number | null | The focused mark's value. |
| index | number | The mark's position in the drawn order. |
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.
| Property | Type | Description |
|---|---|---|
| gradient | 'linear' | 'radial' | `'linear'` along `angle`, or `'radial'` from the centre out. |
| angle | number | A linear gradient's direction in CSS degrees: 0 bottom-to-top, 90 left-to-right, 180 (default) top-to-bottom. (optional) |
| stops | Array<[number, string]> | At least two `[offset, colour]` stops. |
ChartLabels
Data labels beside each mark.
| Property | Type | Description |
|---|---|---|
| position | ChartLabelPosition 'outside' | 'inside' | 'auto' | Where a label sits relative to its mark. `outside` (the default) puts it past the mark, away from the baseline; `inside` and `auto` prefer within the mark and fall back outside when it will not fit. An outside label with no room above it falls inside whatever this says, rather than being dropped from the tallest bar. (optional) |
| format | string | ((value: unknown, point?: unknown) => string) | A format mask, or a function of the value. (optional) |
| minGap | number | Pixels two labels must leave between them before both are kept. (optional) |
ChartLegendEvent
`legend`: a legend entry was clicked and the hidden set already changed; the redraw follows.
| Property | Type | Description |
|---|---|---|
| label | string | The clicked entry's label. |
| key | string | The clicked entry's series key. |
| hidden | boolean | Whether that series is now hidden. |
| hiddenKeys | string[] | Every hidden series key after the click. |
ChartMarkerOptions
Pictures as markers on a line, scatter or bubble chart and on a `markermap`.
| Property | Type | Description |
|---|---|---|
| image | string | { 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. |
| size | number | The marker's size in pixels, 6 to 64. Default 16. (optional) |
ChartMeasure
| Property | Type | Description |
|---|---|---|
| col | string | The column reduced for this measure. |
| fn | TotalName 'sum' | 'min' | 'max' | 'avg' | 'count' | 'first' | 'last' | 'countValues' | (string & {}) | A reduction name, as the totals row uses. (optional) |
| type | ChartMeasureType 'bar' | 'line' | 'area' | The mark this measure draws with, on a combo chart. (optional) |
| axis | Side 'left' | 'right' | Which axis it belongs to, on a combo chart. (optional) |
| title | string | The series label a combo's legend and axis titles use. `label` is read too, as an undeclared alias, for a caller already using it; `title` wins when both are given. Falls back to the measure column's own `title`, then to `col`, when neither is set. (optional) |
| cumulative | boolean | Accumulate 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.
| Property | Type | Description |
|---|---|---|
| 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) |
| snap | boolean | Snap 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) |
| pin | boolean | Pin 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.
| Property | Type | Description |
|---|---|---|
| id | string | Matches a value in the `source` or `target` column. |
| label | string | Drawn beneath the node. The id is used when this is absent. (optional) |
| icon | string | A name in the grid's icon registry, drawn inside the node's disc. (optional) |
| x | number | Where to pin it, as a fraction of the plot's width. (optional) |
| y | number | Where to pin it, as a fraction of the plot's height. (optional) |
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.
| Property | Type | Description |
|---|---|---|
| pattern | 'hatch' | 'crosshatch' | 'dots' | 'grid' | The motif: diagonal lines, two crossing line sets, dots, or a square grid. |
| colour | string | The ink colour; the series colour when unset. (optional) |
| background | string | The tile's background; transparent when unset. (optional) |
| size | number | The tile size in pixels. Default 8. (optional) |
| angle | number | The 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`.
| Property | Type | Description |
|---|---|---|
| colour | string | A CSS colour for new strokes (a plain value: no semicolons or braces); default the theme's foreground. (optional) |
| width | number | The stroke width in pixels for new strokes, up to 24; default 2. (optional) |
ChartProvenance
What {@link Chart.provenance} reports (GEO-5).
| Property | Type | Description |
|---|---|---|
| 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'`. |
| reason | string | null | Why the chart reads the loaded rows; `null` for an engine chart. |
| refused | boolean | True when `aggregate: 'engine'` was asked and the source could not serve it. |
| pending | boolean | True while an engine request is in flight; the last drawing stays up until it lands. |
| viewport | ChartViewportProvenance | A 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) |
| dropped | number | What 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) |
| frames | number | How many frames an animated chart (`barRace`, `motion`) has: the distinct values of its time column. (optional) |
| animation | ChartAnimationProvenance | What the last draw did about animation: whether it played, why or why not, and the marks counted against {@link ChartAnimationOptions.budget}. |
| measures | Array<{ 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`.
| Property | Type | Description |
|---|---|---|
| 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.
| Property | Type | Description |
|---|---|---|
| active | ChartActiveRule[] | The rules matching now, in the order they apply; empty when the base options are back. |
| width | number | The container's width in pixels at the change. (optional) |
| height | number | The 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.
| Property | Type | Description |
|---|---|---|
| maxWidth | number | Matches while the container is at most this wide. (optional) |
| minWidth | number | Matches while the container is at least this wide. (optional) |
| maxHeight | number | Matches while the container is at most this tall. (optional) |
| minHeight | number | Matches while the container is at least this tall. (optional) |
| set | Partial<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.
| Property | Type | Description |
|---|---|---|
| annotations | ChartAnnotationItem[] | Everything drawn on the chart, in paint order. (optional) |
| zoom | ChartZoomState | The visible range per axis; absent when the chart is showing everything. (optional) |
ChartTrend
One trend or forecast overlay.
| Property | Type | Description |
|---|---|---|
| method | ChartTrendMethod | The overlay method; `linear` by default. (optional) |
| forecast | number | For the linear method, how many steps to project the line past the data as a dashed forecast. Ignored by the moving-average and exponential methods, which have no slope to extrapolate. (optional) |
| window | number | For the moving-average method, the trailing window in points; 3 by default. (optional) |
| period | number | An alias for `window`. (optional) |
| kind | SmoothingMethod 'ses' | 'holt' | For the exponential method, single smoothing (`ses`) or Holt's level+trend (`holt`). (optional) |
| alpha | number | For the exponential method, the level factor in `[0, 1]`; omit to fit it. (optional) |
| beta | number | For Holt's exponential smoothing, the trend factor in `[0, 1]`; omit to fit it. (optional) |
| band | boolean | 'prediction' | 'confidence' | The uncertainty band shaded around a linear `forecast`. The Student-t `prediction` band (a future observation) by default; `confidence` shades the narrower mean-response band; `false` opts out and leaves the bare dashed line. Ignored where there is no linear forecast to put a band on. (optional) |
| confidence | number | The forecast band's confidence level in `(0, 1)`; 0.95 by default. (optional) |
| label | boolean | `false` suppresses the R² label on a linear trend. (optional) |
ChartViewportFilterOptions
Narrows {@link ChartSpec.viewportFilter}, GEO-4,.
| Property | Type | Description |
|---|---|---|
| column | string | On 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) |
| debounce | number | Milliseconds 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).
| Property | Type | Description |
|---|---|---|
| rows | number | The rows drawn as points for the view; 0 when binned or refused. |
| matched | number | How many rows fell inside the view. |
| cap | number | The cap in force ({@link ChartSpec.viewportCap}). |
| binned | boolean | True when the view was drawn as density cells. |
| cells | number | How many density cells were drawn; 0 when not binned. |
| over | string | null | Why nothing was drawn, when the view was over the cap with no density form; else null. |
| bbox | [number, number, number, number] | null | The 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.
| Property | Type | Description |
|---|---|---|
| height | number | The 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.
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| set | (range: ChartZoomRange | { x?: ChartZoomRange | ChartAxisZoomState; y?: ChartZoomRange | ChartAxisZoomState }): boolean | range: ChartZoomRange | { x?: ChartZoomRange | ChartAxisZoomState; y?: ChartZoomRange | ChartAxisZoomState } | boolean | Show 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 | - | boolean | Show everything again, on every axis; returns whether anything was zoomed. |
ChartZoomEvent
What a `zoom` handler receives.
| Property | Type | Description |
|---|---|---|
| x | ChartZoomRange | null | The x range now drawn, in the axis's own units; the full extent when nothing is zoomed. |
| y | ChartZoomRange | null | The measure range now drawn, present only when `zoom.axes` includes the y axis. (optional) |
| reason | ChartZoomReason '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`.
| Property | Type | Description |
|---|---|---|
| axes | ChartZoomAxes 'x' | 'y' | 'xy' | Which axes zoom; the default is `x`. (optional) |
| buttons | ChartZoomButtons 'hover' | 'always' | 'none' | When the toolbar is shown; the default is `hover`. (optional) |
| wheel | boolean | Whether the wheel zooms about the pointer; on by default. (optional) |
| pan | boolean | Whether dragging a zoomed plot pans it; on by default. A configured `brush` wins the drag. (optional) |
| step | number | How 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) |
| min | number | The 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.
| Property | Type | Description |
|---|---|---|
| x | ChartAxisZoomState | The x axis's visible range. (optional) |
| y | ChartAxisZoomState | The measure axis's visible range, when `axes` includes it. (optional) |
ClipboardOptions
| Property | Type | Description |
|---|---|---|
| headers | boolean | Put a row of column titles above the copied cells. (optional) |
| rows | ExportRowsScope 'visible' | 'all' | 'selected' | 'range' | What to copy: `'visible'`, `'all'`, `'selected'` rows, or `'range'` for the selected cell rectangle. (optional) |
| sanitise | boolean | Apply the CSV/Excel formula-injection guard to copied cells: prefix a field beginning with `=`, `+`, `-`, `@`, a tab or a CR with an apostrophe so a spreadsheet treats it as text. **Off by default** (unlike CSV/Excel export, which default it on), because the clipboard most often round-trips back into a grid or cell range where the apostrophe would corrupt the value. Turn it on when your users paste the clipboard into Excel or Google Sheets. (optional) |
| rowNumbers | boolean | Include 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.
| Property | Type | Description |
|---|---|---|
| column | string | The column id. |
| name | string | The column's display name, or its id. |
| measure | Extract<DriftMeasure, 'standardizedMeanDifference' | 'categoricalTotalVariation'> | The effect size reported for this column's family: the standardized mean difference for a numeric column, the total variation of the category mix for a categorical one. Never a p-value. |
| magnitude | number | null | The effect size in its own terms, or null when it has no scale here. |
| distance | number | The total variation distance between subset and population, 0 to 1 - the common scale both families reduce to, and what the ranking sorts by. |
| direction | number | +1 when the subset sits above the population, −1 below, 0 for a mix. |
| subsetN | number | How many rows the subset comparison stood on. |
| populationN | number | How many rows the population comparison stood on. |
| reliable | boolean | False when the subset is too small to read the difference from. |
ColumnDistribution
| Property | Type | Description |
|---|---|---|
| n | number | How many usable numbers the column yielded. Dates count, as their epoch milliseconds; nulls and unparseable values do not. |
| min | number | The smallest usable value in the column. |
| max | number | The largest usable value in the column. |
| mean | number | The arithmetic mean, accumulated by Welford's method so a column of large values with a small spread keeps its precision. |
| stddev | number | The sample standard deviation, which `from: 'stddev'` scales against. Zero when there is only one value. |
| median | number | The middle value, by the same quantile definition the totals row and the formula engine use. |
| q1 | number | The first quartile, which `bottomPercent` and outlier rules resolve against. |
| q3 | number | The third quartile, which `topPercent` and outlier rules resolve against. |
| iqr | number | The interquartile range, `q3 - q1`. |
| sorted | number[] | Every usable value, ascending - what a percentile threshold is read from. |
ColumnProfile
| Property | Type | Description |
|---|---|---|
| column | string | The id of the column this profile describes. |
| rows | number | How many rows the profile was computed over - the rows the filters leave, or the window the source is holding. |
| present | number | How many of those rows carry a value. Counted as values, not as numbers, so a text column is not reported as entirely missing. |
| missing | number | How many of those rows are null, undefined or empty - the first question a profile is opened to answer. |
| numeric | number | How many of those rows carry a value the statistics could use - a number. `present` counts values of any kind, so the two differ on a text column and on one with unparseable entries. |
| coverage | { covered: number; total: number } | What the figures were computed over, when that is a window rather than every matching row (a source that holds everything omits it, so `if (profile.coverage)` is the "is this windowed" test). (optional) |
| distinct | number | How many different values the column holds over those rows. |
| min | number | null | The smallest numeric value, or null on a column with no numbers in it. |
| max | number | null | The largest numeric value, or null on a column with no numbers in it. |
| mean | number | null | The arithmetic mean of the numeric values, or null when there are none. |
| median | number | null | The middle value, which says whether the mean is representative. Null when there are no numbers. |
| q1 | number | null | The first quartile - a quarter of the values fall below it. Null when there are no numbers. |
| q3 | number | null | The third quartile - three quarters of the values fall below it. Null when there are no numbers. |
| iqr | number | null | The interquartile range, `q3 - q1`: the spread of the middle half, which outliers cannot inflate. Null when there are no numbers. |
| stddev | number | null | The sample standard deviation, needing at least two numbers; null otherwise. |
| outliers | number | null | How many values fall outside Tukey's fence, 1.5 interquartile ranges beyond the quartiles - an outlier here means what it means on a box plot. |
| 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) |
| unavailable | Array<{ 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) |
| histogram | HistogramBin[] | The shape rather than the summary: the value counts per bucket. Two columns can share a mean, a median and a deviation and still be a bell and a barbell. Empty on a column with no numbers. |
| topValues | TopValue[] | For a categorical (non-numeric) column, the commonest values, largest first. Absent for a numeric column, whose shape the numeric figures and the histogram already carry. (optional) |
CommentDescriptor
Counts for one cell. Never bodies: this is consulted on every repaint.
| Property | Type | Description |
|---|---|---|
| count | number | How many comments the cell carries. A cell whose count reaches zero is dropped from the index rather than kept at 0. |
| unresolved | number | How many of them are unresolved - what the marker colours itself by, and what the hidden-comment count sums. |
| updated | number | When the cell's thread last changed, as epoch milliseconds, so a recently touched cell can be distinguished from an old one. |
ConfidenceInterval
An interval for an estimated figure, at a stated level.
| Property | Type | Description |
|---|---|---|
| mean | number | The sample mean the interval is centred on. |
| lower | number | The lower bound: the mean less the margin. |
| upper | number | The upper bound: the mean plus the margin. |
| margin | number | Half the interval's width - the ± figure. Computed from the t distribution rather than the normal one, which is materially too narrow below about thirty readings. |
| n | number | How many readings it was computed from. Fewer than two gives no interval at all: one reading is a number with no idea how wrong it is. |
| confidence | number | The level the bounds were computed at, 0 to 1. |
CsvExportOptions
| Property | Type | Description |
|---|---|---|
| delimiter | string | What separates fields. A comma by default; a field containing it is quoted. (optional) |
| quote | string | The quote character. A double quote by default, doubled inside a quoted field as RFC 4180 requires. Set it to an empty string to quote nothing. (optional) |
| lineEnding | string | What separates rows. `\r\n` by default, which is what RFC 4180 and Excel expect. (optional) |
| headers | boolean | Write a header row of column titles. On by default. (optional) |
| columns | string[] | Which columns to export, by id and in this order. Columns the grid hides, or that opted out with `export.csv: false`, are still excluded. (optional) |
| hidden | boolean | Include the columns the grid hides, rather than only the visible ones. Off by default. Columns that opted out with `export.csv: false` are still excluded. (optional) |
| rowNumbers | boolean | Include 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) |
| rows | Extract<ExportRowsScope, 'visible' | 'all' | 'selected'> | Which rows to export: `'visible'` (the default - what the filters and sort leave), `'all'`, or `'selected'`. (optional) |
| sanitise | boolean | { enabled?: boolean; prefix?: string; characters?: string; keepNumbers?: boolean; } | The formula-injection guard, **on by default**: a field beginning with `=`, `+`, `-`, `@`, a tab or a CR is prefixed with an apostrophe, because a spreadsheet would otherwise execute it when the file is opened. `false` turns it off; an object tunes it - `characters` to widen or narrow the set, `prefix` to change the escape, `keepNumbers: true` to leave a field that is entirely a number alone (so a negative currency stays numeric). (optional) |
| bom | boolean | Emit a UTF-8 byte-order mark, so Excel detects the encoding instead of guessing at it. Off by default. (optional) |
| fileName | string | The name for the downloaded file. A `.csv` extension is added when it has none, and a name is generated when you give none. (optional) |
| download | boolean | Trigger a browser download instead of returning the text. The call then returns the blob, so a headless caller still gets something usable. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| processCell | (p: CellParams) => string | p: CellParams | => string | Rewrite each cell's text as it is written out. It receives the same parameter bag a renderer gets, so one implementation serves rendering, tooltips and export alike. (optional) |
CurrencyConfig
| Property | Type | Description |
|---|---|---|
| code | string | The default currency code for bare numeric input, e.g. `'USD'`. (optional) |
| display | string | The currency to render and aggregate in. Omit to keep each cell's own. (optional) |
| rates | RateSource | The caller's rate source: a `(from,to)=>rate|null` fn or a rate table. (optional) |
| rateBase | string | The code a rate *table* is denominated in, when not the one mapping to 1. (optional) |
| decimals | number | Fixed fraction digits; omit for the code's own convention. (optional) |
| locale | string | The locale for number formatting. (optional) |
| nullDisplay | string | Text for a null cell. (optional) |
| missingRate | string | The loud marker rendered when a needed rate is missing. (optional) |
| excel | string | An Excel number-format override. (optional) |
| codes | string[] | The code list a currency editor's picker offers. (optional) |
DatasetColumnDifference
| Property | Type | Description |
|---|---|---|
| column | string | The column id, present on both grids. |
| name | string | The column's display name, or its id. |
| measure | Extract<DriftMeasure, 'pooledStandardMeanDifference' | 'categoricalTotalVariation'> | The effect size reported for this column's family: the pooled standardised mean difference (Cohen's d) for a numeric column, the total variation of the category mix for a categorical one. Never a p-value. |
| magnitude | number | null | The effect size in its own terms, or null when it has no scale here. |
| distance | number | The total variation distance between the two datasets, 0 to 1 - the common scale both families reduce to, and what the ranking sorts by. |
| direction | number | +1 when dataset A sits above dataset B, −1 below, 0 for a mix. |
| nA | number | How many rows the first grid's side stood on. |
| nB | number | How many rows the second grid's side stood on. |
| reliable | boolean | False when either side is too small to read the difference from. |
DatasetComparison
| Property | Type | Description |
|---|---|---|
| ranked | DatasetColumnDifference[] | Every shared column, largest difference first. |
| nA | number | How many rows the first grid contributed (its filtered set). |
| nB | number | How many rows the second grid contributed (its filtered set). |
| unmatched | { onlyA: string[]; onlyB: string[] } | Columns present on only one side, which cannot be compared. |
| measures | { numeric: string; categorical: string; common: string } | The measure each family reports, and the common scale, named for a legend. |
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.
| Property | Type | Description |
|---|---|---|
| masterKey | string | The key of the master row whose detail region raised this. |
| masterRow | Row | The master row itself. |
| detailGrid | Grid | The nested grid instance the event came from. |
| path | string | null | The 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.
| Property | Type | Description |
|---|---|---|
| id | string | Stable identifier, nameable in a support conversation. |
| message | string | A plain description of what was found. |
| values | Record<string, unknown> | The specific values involved, so the warning is actionable. |
| count | number | How many times a diagnostic check has raised this warning. Always 1 for a warning that came from a `[lattice]` console message, which is reported once and not counted. |
| first | number | When it was first raised, as epoch milliseconds. |
| last | number | When it was last raised, as epoch milliseconds - which, with `count`, says whether it is still happening. |
| source | DiagnosticSource 'check' | 'reported' | 'info' | `'check'` raised by a diagnostic check, `'reported'` from `warnOnce`. |
DuckDbSpatialOptions
The `spatial` option of `duckdbAdapter` in its object form (GEO-2). `spatial: true` is the same with neither member set.
| Property | Type | Description |
|---|---|---|
| column | string | A 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) |
| crs | string | number | The 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.
| Property | Type | Description |
|---|---|---|
| kind | ErrorBoundKind 'deterministic' | 'probabilistic' | 'exact' | `deterministic` every run, `probabilistic` in expectation, `exact` to float rounding. |
| metric | ErrorBoundMetric 'absolute' | 'relative' | 'rank' | 'none' | What the number measures. `rank` is a fraction of the rank, for quantiles. |
| value | number | The bound itself, in the unit `metric` names. |
| statement | string | A one-line human reading of the guarantee. |
ExcelBorderSpec
A cell border, per edge. `true` means a thin line; a string names the style.
| Property | Type | Description |
|---|---|---|
| left | boolean | string | The line on the cell's left edge: `true` for a thin line, or a named style (`'thin'`, `'medium'`, `'hair'`, …). Omit for no line. (optional) |
| right | boolean | string | The line on the cell's right edge, in the same forms. (optional) |
| top | boolean | string | The line on the cell's top edge, in the same forms. (optional) |
| bottom | boolean | string | The line on the cell's bottom edge, in the same forms. (optional) |
ExcelCellStyle
A conditional-formatting rule's rendering, returned by `cellStyle`.
| Property | Type | Description |
|---|---|---|
| bold | boolean | Draw the cell's text bold. (optional) |
| italic | boolean | Draw the cell's text italic. (optional) |
| colour | string | Font colour as 6- or 8-digit hex/ARGB, e.g. 'FFFF0000'. `color` is an alias. (optional) |
| color | string | American spelling of `colour`; either is accepted. (optional) |
| fill | string | Solid fill colour as 6- or 8-digit hex/ARGB. (optional) |
ExcelExportOptions
| Property | Type | Description |
|---|---|---|
| sheetName | string | The worksheet's name. `'Sheet1'` by default, and made unique and legal for Excel if it is neither. (optional) |
| freezePanes | boolean | Freeze the header rows and the pinned columns, so they stay in view as the sheet scrolls. On by default. (optional) |
| variantFills | boolean | Carry the grid's cell variants across as solid fills. Off by default: a printed spreadsheet is usually wanted plain. (optional) |
| borders | boolean | string | ExcelBorderSpec | Draw cell borders on the data grid. `false` (default) is borderless; `true` draws a thin box; a string names the line style; an object picks edges. (optional) |
| hiddenColumns | ExcelHiddenColumns 'omit' | 'hidden' | What to do with grid-hidden columns. `'omit'` (default) drops them; `'hidden'` keeps them as Excel-hidden columns for round-trip fidelity. (optional) |
| autoFilter | boolean | Put Excel's filter dropdowns on the header row, so the sheet opens ready to filter. On by default; `false` writes a plain header. (optional) |
| merges | string[] | Explicit merged body ranges in A1 form, e.g. ['A3:A4']. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| onProgress | (p: { written: number; total: number }) => void | p: { written: number; total: number } | => void | Called as the workbook streams out, with how many rows have been written and how many there are, so a large export can show progress. (optional) |
FacetState
A column's computed distribution.
| Property | Type | Description |
|---|---|---|
| bounds | FacetBounds | null | Where the bars are. `null` until the column has been counted, or when it has no histogram. |
| counts | Uint32Array | null | Counts under every filter except this column's own. Aligned to `buckets`. |
| unfiltered | Uint32Array | null | Counts with no filter applied, for the "40 of 200" reading. |
| stale | boolean | True while a recount is outstanding; draw the previous counts faded. |
| suppressed | string | null | Why there is no histogram - `'disabled'`, `'type'`, `'rows'`, `'streaming'`, `'cardinality'`, `'no-provider'` - or `null` when there is one. |
FindCount
How many matches there are and which is current. `windowed` is the honest scope flag: over a paged pushdown source only the loaded rows are searched, so `total` counts matches in `loaded` rows out of the `rows` the source reports for the whole matching set.
| Property | Type | Description |
|---|---|---|
| current | number | 1-based position of the current match; 0 when there is none. |
| total | number | How many matches were found in the rows that were actually searched. |
| complete | boolean | False while the bar's sliced scan is still running, so a partial count is never read as final. |
| windowed | boolean | True when the search covered a window rather than the whole set - a paged or streaming source. It is the flag that keeps `total` honest. |
| loaded | number | Rows the search actually read; a windowed source's not-yet-fetched placeholders are not counted. |
| rows | number | The rows the source reports for the whole matching set, when it can say. |
FindMatch
One matching cell.
| Property | Type | Description |
|---|---|---|
| key | string | The key of the row the match is in. |
| colId | string | The column the match is in. |
| index | number | The display index, or -1 for a row pinned to an edge. |
| pinned | RowPin | null | Which sticky strip a pinned row is in; null for a body row. |
FindQuery
How `grid.find(text, opts)` matches. Defaults: case-insensitive, substring, every visible column, starting from the first row. Find matches the **formatted display text** - what the cell shows, a column `format` included - never a raw value; there is no regular-expression mode.
| Property | Type | Description |
|---|---|---|
| caseSensitive | boolean | Match letter case exactly. Default false. (optional) |
| wholeCell | boolean | The whole cell text must equal the search text rather than contain it. Default false. (optional) |
| columns | string[] | string | null | Search only these column ids. Omitted searches every visible column. (optional) |
| from | number | The display index to start from: the first match at or after it becomes current. Default 0. (optional) |
FindState
The current query and whether the bar is showing.
| Property | Type | Description |
|---|---|---|
| text | string | What is being searched for. Empty when nothing is. |
| caseSensitive | boolean | Whether the search distinguishes case. Off by default. |
| wholeCell | boolean | Whether a cell must match the text entirely rather than contain it. Off by default. |
| columns | string[] | null | The columns being searched, or `null` for every visible column. |
| open | boolean | Whether the find bar is showing. It flips on a headless grid too, so a host driving its own control can follow it. |
ForecastPoint
One forecast step: the point estimate and, where a band applies, its interval.
| Property | Type | Description |
|---|---|---|
| step | number | The step ahead, `1 … horizon`. |
| at | number | The time-axis position the step is stamped at, extrapolated at the mean spacing. |
| mean | number | The point forecast. |
| lower | number | null | The prediction-interval lower bound (a future observation), or null when none applies. |
| upper | number | null | The prediction-interval upper bound, or null when none applies. |
| lowerMean | number | null | The mean-response (confidence) lower bound - `linear` only, the band a trendline draws. (optional) |
| upperMean | number | null | The mean-response (confidence) upper bound - `linear` only. (optional) |
| se | number | null | The prediction standard error the band was built from, or null when none applies. |
ForecastResult
A forecast: the chosen model, its parameters, and the projected points.
| Property | Type | Description |
|---|---|---|
| method | ForecastMethod 'movingAverage' | 'ses' | 'holt' | 'holtWinters' | 'linear' | Which method produced it. |
| horizon | number | How many steps ahead were projected. |
| confidence | number | The band level, e.g. 0.95. |
| n | number | How many finite readings the fit used. |
| sigma | number | null | The residual standard deviation the bands were built from, or null when there was none. |
| r2 | number | The fit's coefficient of determination - `linear` only. (optional) |
| params | { slope?: number; intercept?: number; alpha?: number; beta?: number; gamma?: number; period?: number; windowLen?: number; } | The model parameters: `slope`/`intercept` (linear), `alpha`/`beta`/`gamma`/`period`, or `windowLen`. |
| points | ForecastPoint[] | The forecast, one entry per step. |
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.
| Property | Type | Description |
|---|---|---|
| type | GeometryKind 'Point' | 'LineString' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon' | 'GeometryCollection' | The geometry kind. |
| coordinates | unknown | The 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) |
| geometries | GeoJsonGeometry[] | 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`.
| Property | Type | Description |
|---|---|---|
| id | string | The pack's identity, which `shapes: { pack: id }` names once the module has been imported. |
| title | string | What the pack covers, in words - for a picker or a caption. |
| kind | string | The family of geometry the pack holds (`world`, `uk`, `us-states`, …), so a host can tell two packs apart without parsing the id. |
| projection | ChartSpec['projection'] | The projection this geometry is meant to be drawn in; the chart uses it unless the spec names its own. (optional) |
| projectionOptions | ChartSpec['projectionOptions'] | The settings that projection needs - a centre or standard parallels - chosen for the region the pack covers. (optional) |
| source | { name: string; url: string; version: string; retrieved: string } | Where the geometry came from: the publisher, the URL, the edition, and the date it was retrieved. |
| licence | { name: string; url: string } | The licence the geometry is published under, by name and URL. |
| attribution | string | The attribution line the licence requires, verbatim, or `''` when it asks for none. |
| topology | object | The pack's geometry, as TopoJSON. Single-layer packs carry it here; a multi-layer pack carries `layers` instead. (optional) |
| layers | Record<string, { name: string; topology: object }> | A multi-layer pack's geometries, keyed by layer name, each with its own title and topology - regions, local authorities and constituencies share a coastline, so they ship together. (optional) |
| defaultLayer | string | Which layer is drawn when the spec names none. Unset, the first layer in the object is used. (optional) |
GridModule
| Property | Type | Description |
|---|---|---|
| name | string | The module's name, which `registry.has()` answers on. Registration is idempotent by it: the first one wins and a repeat is ignored, so a lazy loader may register the same module twice. |
| version | string | The module's version. Part of what makes two registrations of the same name equivalent, so a repeat that declares a different version is reported as a dropped reconfiguration rather than passing as an idle repeat. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| install | (ctx: ModuleContext): void | ctx: ModuleContext | void | Register everything the module contributes - renderers, editors, filters, data types, totals, pipes - on the registry it is handed. A module without one is ignored and says so, and a throw here leaves it unregistered. |
| uninstall | (ctx: ModuleContext): void | ctx: ModuleContext | void | Undo what `install` did. The capability set is rebuilt from the modules that remain, and subscribers are told which regions need repainting. (optional) |
GroupComparison
| Property | Type | Description |
|---|---|---|
| test | Extract<SignificanceTest, 'welch' | 'mannWhitney' | 'chiSquare'> | The test used, named so it is never hidden. |
| chosenBy | TestSelection 'auto' | 'override' | Whether the test was chosen automatically or forced by the caller. |
| reason | string | Why this test - the column family, a normality screen, or the override. |
| statistic | number | The test statistic. |
| statisticName | string | What the statistic is: `t`, `U`, or `chiSquare`. |
| df | number | null | The degrees of freedom, where the test has them; null for Mann-Whitney. |
| pValue | number | The two-sided p-value, returned as data for the caller to interpret. Never thresholded into a verdict here. |
| interval | GroupDifferenceInterval | null | The confidence interval on the difference, or null when there is none. |
| effectSize | GroupEffectSize | The paired effect size, so the p-value is never read on its own. |
| nA | number | How many rows the first group stood on. |
| nB | number | How many rows the second group stood on. |
| groups | [unknown, unknown] | The two group values compared, as keys. |
| reliable | boolean | False when either group is under the reliability floor. |
| method | string | The test's method, named per the reference-suite honesty rule. |
GroupDifferenceInterval
A confidence interval on the difference a two-sample test measured.
| Property | Type | Description |
|---|---|---|
| estimate | number | The point estimate of the difference the interval is around. |
| lower | number | The lower bound of the difference. An interval spanning zero is the honest way to say the two groups may not differ at all. |
| upper | number | The upper bound of the difference. |
| confidence | number | The level the bounds were computed at, 0 to 1. |
| method | string | The method, named for honesty: `welch-t`, `hodges-lehmann`, `newcombe`. |
| category | unknown | For a chi-square interval, which category's share the difference is of. (optional) |
GroupEffectSize
The effect size paired with a two-sample test - the "how big" half.
| Property | Type | Description |
|---|---|---|
| name | string | The named measure: `pooledStandardMeanDifference` (Cohen's d) for the numeric tests, `categoricalTotalVariation` for chi-square. |
| value | number | null | The effect size in its own terms, or null when it has no scale here. |
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.
| Property | Type | Description |
|---|---|---|
| icons | Record<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.
| Property | Type | Description |
|---|---|---|
| statistic | number | The test statistic, distributed as chi-square under the null of constant variance. |
| df | number | The degrees of freedom the statistic is judged against - one per predictor. |
| p | number | The probability of a statistic this large if the residual variance really were constant. Small means it is not, so the model's standard errors understate the uncertainty. |
| heteroscedastic | boolean | True when the test rejects homoscedasticity at the 0.05 level. |
HistogramBin
| Property | Type | Description |
|---|---|---|
| from | number | The bin's lower edge. The first bin reports the column's true minimum, which may be below where the bins were laid, because values beyond the fences are clamped into the end bins. |
| to | number | The bin's upper edge, exclusive except in the last bin, which reports the column's true maximum for the same reason. |
| count | number | How many values fell in the bin. The end bins include everything clamped in from beyond the fences, which is why an outlier shows as a bump rather than a hundred empty bars. |
HistoryEntry
| Property | Type | Description |
|---|---|---|
| seq | number | Monotonic sequence number, in the order actions were recorded. |
| type | string | What kind of action it was, e.g. `'sort'`, `'column:pin'`, `'edit'`. |
| label | string | Human text for a button, e.g. `'sort by Region'`. |
| target | string | null | The column or row the action was aimed at, where there was one. |
| at | number | When it was recorded, on the high-resolution clock. |
| delegated | boolean | True when the edit model owns the undo rather than the history stack. |
| undone | boolean | Set once the entry has been undone. (optional) |
| [key: string] | unknown | Whatever else the action that was recorded needed to replay itself - the writes behind an edit, the widths behind a resize. Private to the history model's own apply path, and not a shape to depend on. |
IconGlyph
One sprite: its view box, its path data, and how it is painted.
| Property | Type | Description |
|---|---|---|
| viewBox | string | The SVG view box the paths are drawn in, normally `'0 0 16 16'`. |
| paths | string[] | One or more SVG path `d` strings making up the glyph. |
| paint | Paint 'stroke' | 'fill' | Whether the paths are stroked or filled. Filled unless it says otherwise. |
ImportColumn
One source column as understood by the importer, after type inference ().
| Property | Type | Description |
|---|---|---|
| source | string | The heading as written in the file. |
| index | number | The column's position in each row. |
| field | string | The grid field this column maps onto; empty to exclude it from the import. |
| type | string | The inferred (or grid-dictated) type used to coerce the column's values. |
| samples | string[] | A few non-blank sample values, for the preview. |
| matched | boolean | Whether the heading matched one of the grid's own columns. |
ImportPreview
What a preview carries - everything a confirm dialog needs ().
| Property | Type | Description |
|---|---|---|
| delimiter | string | The delimiter that was used, detected or supplied. |
| header | string[] | The source column headings. |
| columns | ImportColumn[] | The per-column mapping and inference the user may edit before confirming. |
| records | Record<string, unknown>[] | Every mapped, coerced record the import would add. |
| sample | Record<string, unknown>[] | The leading records, for a preview table. |
| rowCount | number | How many data rows the file holds. |
| warnings | string[] | Anything worth flagging before confirming - a ragged file, a bad quote. |
ImportXlsxPreview
What an `.xlsx` preview carries - an {@link ImportPreview} plus the sheet read ().
| Property | Type | Description |
|---|---|---|
| sheet | string | null | The archive path of the worksheet that was read, e.g. `xl/worksheets/sheet1.xml`. |
| header | string[] | The source column headings. |
| columns | ImportColumn[] | The per-column mapping and inference the user may edit before confirming. |
| records | Record<string, unknown>[] | Every mapped, coerced record the import would add. |
| sample | Record<string, unknown>[] | The leading records, for a preview table. |
| rowCount | number | How many data rows the sheet holds. |
| warnings | string[] | Anything worth flagging before confirming. |
ImportXlsxSheet
One worksheet of an `.xlsx` workbook, as {@link ImportApi#xlsxSheets} lists it (,.
| Property | Type | Description |
|---|---|---|
| name | string | The sheet's tab name, as written in the workbook. |
| hidden | boolean | True when Excel marks the sheet `hidden` or `veryHidden`; the default read skips it. |
LicenceInfo
| Property | Type | Description |
|---|---|---|
| valid | boolean | Whether the licence passed: the right product, in date, for this domain, with a signature that checks out. What `licence.set` returns straight away is provisional - the signature check is asynchronous - and `licence:changed` fires again once it settles. |
| product | string | The product the key was issued for. (optional) |
| issuedTo | string | Who the key was issued to. (optional) |
| expires | string | The ISO date the licence lapses on, judged in UTC so a licence expiring `2027-01-01` is good throughout that day. A perpetual key has none. (optional) |
| 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) |
| reason | string | Why the verdict came out as it did: `missing`, `malformed`, `prefix`, `product`, `expired`, `domain` or `signature` for a refusal, and `unverified` alongside a pass on a host with no Ed25519 to check with, where only the signature's shape could be examined. (optional) |
ListCount
The operand of `listCount`: how the number of items compares to `value`.
| Property | Type | Description |
|---|---|---|
| op | 'gt' | 'gte' | 'lt' | 'lte' | 'eq' | The comparison. |
| value | number | The number of items to compare with. |
MaintenanceTier
The maintenance label for one kernel across both tiers.
| Property | Type | Description |
|---|---|---|
| stat | string | The kernel name. |
| exact | MaintenanceExactness | null | Its exact tier, or null when it is not an exact kernel. |
| approximate | ApproximateEntry | null | The approximate alternative and bound, or null when none exists. |
ModuleContext
| Property | Type | Description |
|---|---|---|
| registry | Registry | The registry to add to, or remove from. It is the shared one, so anything registered is visible to every grid using it. |
| grid | Grid | The grid the module is being installed into, when it is being installed per grid rather than globally. (optional) |
Money
A stored currency value: an amount in a named currency. `{amount:10,code:'USD'}` is a different value from `{amount:10,code:'EUR'}` - currency is a real type, not a display format, so the code rides on every cell.
| Property | Type | Description |
|---|---|---|
| amount | number | How much, as a plain number. It must be finite for the value to be accepted. |
| code | string | The ISO currency code the amount is in, normalised to upper case. It is part of the value, not a display setting: 10 USD and 10 EUR are different values and never compare as equal. |
MutateCapability
| Property | Type | Description |
|---|---|---|
| append | boolean | The adapter can insert new rows, bridged by the structural engine (`edit.addRow`,). (optional) |
| update | boolean | The adapter can patch existing rows, bridged by the cell edit path ( Option A). (optional) |
| delete | boolean | The adapter can remove rows, bridged by the structural engine (`edit.deleteRow`,). (optional) |
| returning | Returning 'row' | 'key' | 'none' | The reconcile contract - what the server hands back after a successful mutation (). `'row'`: the authoritative row (id, computed columns, timestamps), reconciled before confirm. `'key'`: only the assigned key. `'none'` (the default): nothing - the optimistic value stands (last-write-wins). (optional) |
MutationOp
| Property | Type | Description |
|---|---|---|
| kind | UpdateKind 'append' | 'update' | 'delete' | Which mutation this is: `'append'`, `'update'` or `'delete'`. It decides which of the fields below carry the payload. |
| rows | unknown[] | append: the new rows (may lack a server-assigned key). (optional) |
| key | string | update: the row key. (optional) |
| patch | Record<string, unknown> | update: the changed columns only, matching `PendingWrite` semantics. (optional) |
| keys | string[] | delete: the row key(s). (optional) |
| origin | string | Provenance, carried through for auth / audit. (optional) |
| requestId | string | Stable id for idempotent retry / dedupe. Reserved; retry is a non-goal in wave 1. (optional) |
MutationResult
The result of a mutation () - the reconcile payload. A cell-update commit flows this back through `PendingWrites`: `ok: false` reverts and surfaces `reason`; `rows` (`returning: 'row'`) reconciles server truth before confirm; `conflict` surfaces a last-write-wins divergence via `cell:conflict`.
| Property | Type | Description |
|---|---|---|
| ok | boolean | Whether the mutation reached the server. Only an explicit `false` rejects - it reverts the optimistic change and surfaces `reason`; anything else is taken as success. |
| rows | unknown[] | `returning: 'row'` - the authoritative row(s) to reconcile to. (optional) |
| keys | string[] | `returning: 'key'` - server-assigned key(s) for appended rows, in order. (optional) |
| reason | string | On rejection - surfaced on `cell:reverted`, never swallowed. (optional) |
| conflict | { key: string; serverRow?: unknown } | The server's current value, for a surfaced last-write-wins conflict. (optional) |
OpenRowOp
A structural op (append or delete) still awaiting an outcome ().
| Property | Type | Description |
|---|---|---|
| id | string | The op's identity, as it arrived on `row:pending`. This is what `edit.settleRow` takes. |
| kind | RowChangeKind 'append' | 'delete' | Whether the row is being appended or deleted. |
| key | string | The row key the op is tracked under - for an append, the client temporary key until the server returns a real one. |
| state | UpdateState 'pending' | 'superseded' | `'pending'` while this is the live op for the row, `'superseded'` once a later one replaced it. |
| age | number | How long the op has been outstanding, in milliseconds. |
OpenWrite
| Property | Type | Description |
|---|---|---|
| id | string | The write's identity, as it arrived on `cell:pending`. This is what `edit.settle` takes. |
| key | string | The key of the row being written to. |
| colId | string | The column being written to. |
| value | unknown | The optimistic value - what the cell is showing while the write is in flight. |
| before | unknown | The value the cell held before the write, which a revert puts back. |
| state | UpdateState 'pending' | 'superseded' | `'pending'` while this is the newest write for the cell, `'superseded'` once a later edit replaced it. A superseded write never writes its value back, however it settles. |
| age | number | How long the write has been outstanding, in milliseconds. Past `edit.pendingTimeout` the grid warns that it is stuck. |
ProcessCapability
| Property | Type | Description |
|---|---|---|
| n | number | How many readings the study covers. At least two are needed, and a study this small should be read with the confidence interval beside it. |
| mean | number | Where the process is actually centred, which is what separates Cp from Cpk. |
| lower | number | null | The lower specification limit in force, or `null` for a one-sided specification. It is the customer's requirement, not the process's behaviour. |
| upper | number | null | The upper specification limit in force, or `null` for a one-sided specification. |
| target | number | null | The nominal value the process aims at, when one was declared. `null` otherwise. |
| sigmaWithin | number | null | Short-term variation, from the moving range: what Cp and Cpk use. |
| sigmaOverall | number | null | Overall variation: what Pp and Ppk use. |
| cp | number | null | Potential capability. Null for a one-sided specification. |
| cpk | number | null | Capability allowing for where the process is centred. |
| pp | number | null | Cp over the overall spread: what the process actually delivered. |
| ppk | number | null | Cpk over the overall spread. Well below Cpk means the process drifted. |
| outOfSpec | number | How many readings fell outside the specification - the count the indices only imply. |
| defectRate | number | null | The share of readings outside the specification, as a fraction. The figure a customer asks for. |
| limits | { centre: number; upper: number; lower: number; sigma: number } | null | Three sigma either side of the process mean, from the moving range. |
| baseline | number | How many leading readings set the limits. (optional) |
| ruleSet | ControlChartRuleSet 'westernElectric' | 'nelson' | Which rule set `violations` were judged against, they number differently. (optional) |
| violations | { index: number; rule: number; description: string }[] | Each point the control rules flagged, with its index, the rule number and what the rule says. Judged against limits from the baseline period, so a step change shows as a run rather than flagging everything. Read `ruleSet` alongside - the two rule sets number their rules differently. |
| interval | CapabilityInterval | null | A confidence interval for `cpk`. A study that reports the point estimate alone overstates itself: 1.35 from thirty parts has a lower bound below 1. (optional) |
| intervalPp | CapabilityInterval | null | The same, for `ppk`. (optional) |
ProportionInterval
A Wilson score interval for a rate. Stays inside 0 to 1 at the extremes.
| Property | Type | Description |
|---|---|---|
| proportion | number | The observed share, successes over n. |
| lower | number | The lower bound, by the Wilson score method and never below 0 - the textbook interval reaches below zero at a rate near zero. |
| upper | number | The upper bound, never above 1. This is what "0 of 40 failed, so the rate is under 9%" comes from: at zero successes the textbook interval collapses to a point and claims certainty. |
| n | number | The sample size. |
| confidence | number | The level the bounds were computed at, 0 to 1. 0.95 by default. |
PushdownAdapter
An engine the grid can query, and what it is able to answer.
| Property | Type | Description |
|---|---|---|
| name | string | Used in diagnostics and in the message when work cannot be pushed. (optional) |
| capabilities | PushdownCapabilities | What the engine behind this adapter can do - which filters, sorts, aggregates and grouping it will take. The planner pushes only what is declared here and runs the rest client-side. (optional) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| 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: RemoteRequestrequest?: 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: RemoteRequestaggregates: Array<{ id: string; col: string; fn: string; weight?: string }>request?: RemoteRequest | Promise<{ rows: unknown[]; total?: number; leaves?: boolean; matchCount?: number; grand?: Record<string, unknown>; }> | Answer one level of a grouped grid. Present only when `capabilities.group` opts in. The level is `query.groupValues.length`: the root asks for the outermost grouping column's distinct values, expanding a group asks for the next column's values within it, and past the last grouping column the children are the leaves (`leaves: true`). A group row comes back in the shape the remote source already reads from a grouping server: the grouping column's own id carries the key, `leafCount` the group's row count, `totals` the subtotals keyed by column id. `total` is how many group rows the level holds. At the root, `matchCount` and `grand` carry the whole-set figures a grouped window cannot derive - the rows the filter matched, and the grand total over them. `aggregates` is the subtotal list the source routed to the engine; anything it could not route is named in `PushdownPlan.aggregates.client` and left absent from the group row rather than computed over the wrong set. (optional) |
| 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: RemoteRequestaggregates: Array<{ id: string; col: string; fn: string; weight?: string }>request?: RemoteRequest | Promise<{ rows: unknown[]; total?: number; leaves?: boolean; matchCount?: number; grand?: Record<string, unknown>; 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: MutationOprequest?: RemoteRequest | Promise<MutationResult> | Persist one mutation (). Present only when `capabilities.mutate` opts in. `createPushdownSource` synthesises an `edit.commit` that calls this for cell updates ( Option A); `request` threads the abort signal through the way `execute` receives it, and auth already lives on the adapter. (optional) |
PushdownAggregatesConfig
Design-time aggregate-pushdown policy for a pushdown source Part B). The developer chooses, at grid setup before render, whether each statistic is computed by the engine (fast, over the matching set) or client-side (the grid's exact definition, needs a full-dataset pull). It is fixed for the life of the grid, never a runtime toggle, and never surfaced to an end user. Absent, every aggregate is computed client-side - today's behaviour, so no existing caller regresses. `engine-if-identical` is the recommended setting for a windowed DuckDB source: it pushes only the statistics whose engine result is verified identical to the grid kernel, keeping the documented MAY-DIFFER stats (e.g. `mode`) client-side. The engine is used only when the filter is fully pushed; a residual filter forces every aggregate client-side, so an engine figure and a client figure never mix in one result set.
| Property | Type | Description |
|---|---|---|
| default | AggregateMode 'engine' | 'client' | 'engine-if-identical' | The default policy for stats the engine can express. `'engine'` pushes everything expressible (using the engine's method for MAY-DIFFER stats); `'engine-if-identical'` pushes only the verified-identical ones; `'client'` computes everything client-side. Default `'client'`. (optional) |
| overrides | Record<string, 'engine' | 'client'> | Per-stat overrides, winning over `default`. A stat the engine cannot express (`weightedQuantile`) is always client-side regardless. (optional) |
PushdownCapabilities
What a pushdown adapter can answer. Everything is off unless declared.
| Property | Type | Description |
|---|---|---|
| filter | false | 'term' | 'flat' | 'tree' | `false`, a single field and term, a flat conjunction, or a full tree. (optional) |
| operators | string[] | Which comparison operators the engine understands. (optional) |
| sort | false | 'single' | 'multi' | `false`, one column only, or many. (optional) |
| quick | boolean | Whether a free-text search across columns can be pushed. (optional) |
| range | boolean | Whether the engine can return a window rather than the whole result. (optional) |
| total | boolean | Whether it can report the count of matching rows. (optional) |
| group | boolean | Whether it can answer the grid's grouped view - group rows, their counts, their subtotals and their order - one level at a time, instead of returning the leaves for the grid to group in the browser. All or nothing, unlike `filter`. A filter splits because the engine narrowing a superset and the grid narrowing what is left reach the same set; a grouping cannot, because group rows counted over the wrong set are wrong rows, not slow ones. So the push router refuses the whole grouped level - and says why in `PushdownPlan.groupReason` - whenever anything else in the query failed to push. An adapter declaring this must implement `executeGroupLevel`; one that declares it without the method is re-planned without grouping and warned about, rather than half-pushed. (optional) |
| pivot | boolean | Whether 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) |
| buckets | string[] | 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) |
| aggregates | string[] | 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) |
| mutate | false | MutateCapability | What the adapter can persist back - the write-back contract (). `false` (the default) is read-only by declaration. A declared block opts kinds in; `capabilitiesOf` resolves it to a full `MutateCapability` (or `false`). (optional) |
PushdownFullDatasetConfig
Opt-in, sticky full-dataset pull for a pushdown/remote source. Off by default. When enabled, the source materialises the entire matching set client-side once per query signature and serves every window, total and statistic from it, so those figures are computed over the whole set rather than the loaded window. A set past either limit is refused with a visible `source:error` - never silently truncated.
| Property | Type | Description |
|---|---|---|
| enabled | boolean | Sticky: hold the whole matching set client-side. Default `false`. (optional) |
| maxRows | number | Refuse (visible error) past this many rows. Default `1_000_000`. (optional) |
| maxBytesEstimate | number | Refuse past this estimated heap cost, in bytes. Default `512 * 1024 * 1024`. (optional) |
PushdownPlan
How one request was divided between the engine and the grid.
| Property | Type | Description |
|---|---|---|
| pushed | RemoteRequest | The query the adapter was given. |
| residual | { filters: object | null; sort: SortEntry[] | null; quick: string; where: WhereRuntime | null; /** * Whether the rows the residual runs over are the whole matching set rather * than a fetched fraction. Set by the source when it hands * the residual to `applyResidual`; absent on the plan `lastPlan()` reports, * because it is a property of one fetch's result, not of the plan. * * When true the counts the residual produces are whole-dataset counts, so * the page-relative `where` warning is suppressed. Absent counts as not * whole: silence has to be earned. */ whole?: boolean; } | What the grid applied afterwards. `where` is the host predicate runtime when one survived the `whereRowLimit` gate, and `null` when none was registered or the gate refused it. |
| needsAll | boolean | Whether the whole result had to be fetched rather than a window. |
| unpushed | string[] | Which parts could not be pushed: `filter`, `sort`, `quick`, `where`, `group`, `pivot`. |
| grouped | boolean | Whether the engine answered the grid's grouped view for this request. False for an ungrouped query and for a grouped one the engine was refused - `groupReason` says which. |
| groupLevel | number | Which grouping level a pushed grouped request asked for: 0 at the root, 1 inside a group, and so on. Zero when nothing was grouped. |
| groupReason | string | Why a grouped request was *not* pushed, in a sentence, or `''` when it was pushed or when nothing was grouped. Grouping is all or nothing, so this is the whole story rather than a residual. |
| pivoted | boolean | Whether 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. |
| pivotReason | string | Why 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. |
| full | boolean | Whether the whole result was fetched because `fullDataset` is on, rather than only because residual work forced it. When true, totals and statistics reduce over the whole matching set and the windowed-stat warning is silent. |
| aggregates | { engine: AggregateProvenance[]; client: AggregateProvenance[]; groupBy?: string[]; /** 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
| Property | Type | Description |
|---|---|---|
| adapter | PushdownAdapter | The engine the query is pushed to - DuckDB, a SQL endpoint, anything that declares what it can do and executes it. |
| compute | object | The compute barrel, for applying whatever the engine could not. (optional) |
| pageSize | number | How many rows are fetched per block. 100 by default. (optional) |
| fullDataset | PushdownFullDatasetConfig | Opt-in full-dataset pull. Off unless `fullDataset.enabled` is set. See {@link PushdownFullDatasetConfig}. (optional) |
| aggregates | PushdownAggregatesConfig | Design-time aggregate-pushdown policy. Absent = client-side (today's behaviour). See {@link PushdownAggregatesConfig}. (optional) |
| allowPartialResults | boolean | Accept a partial/paged result to a whole-set request when residual work (a filter, sort or quick search) will run over it client-side. Off by default: such a shortfall is refused with a thrown error, because filtering or sorting a fraction of the result presents the wrong rows as the whole filtered set - a wrong answer, not a slow one. Set `true` only when you knowingly accept that risk (e.g. an adapter that cannot page and a result small enough not to matter); the old warn-once-and-proceed behaviour is then kept. It never changes the fullDataset memory-guard or the no-residual short-return warning. (optional) |
| whereRowLimit | number | The most rows the source will fetch and hold in order to run a twinless `where` predicate as the residual. Defaults to `50_000`, the same anchor as the grid's `workerThreshold` - the size at which this codebase already judges a dataset big enough to need different handling. A `where` predicate is a host function no engine can evaluate, so the only way to honour one is to fetch every matching row and filter here. That silently turns a windowed grid into a whole-dataset download, which is the thing a pushdown source exists to avoid. So it is a gate, not a free upgrade: at or past this many matching rows the predicate is **refused and warned about** - the rows it would exclude stay on screen - rather than the download being taken on the host's behalf. An adapter that reports no row total counts as over the limit, because guessing the other way is guessing your way into the download. Raise it when you want that download; the `{ condition }` twin is the route that narrows the fetch itself and works at any size. (optional) |
Registry
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| modules | (): GridModule[] | - | GridModule[] | The installed modules, in the order they were registered. |
| has | (name: string): boolean | name: string | boolean | Whether a module of this name is installed. |
| renderer | (name: string): RendererCtor | RenderFn | undefined | name: string | RendererCtor | RenderFn | undefined | A registered cell renderer by name, or `undefined`. Falls back to the shared `component` namespace, so one entry in `config.components` can serve as renderer, editor and filter alike. |
| editor | (name: string): EditorCtor | undefined | name: string | EditorCtor | undefined | A registered editor by name, or `undefined`. Falls back to the shared `component` namespace. |
| filter | (name: string): FilterCtor | undefined | name: string | FilterCtor | undefined | A registered filter by name, or `undefined`. Falls back to the shared `component` namespace. |
| dataType | (name: string): DataType | undefined | name: string | DataType | undefined | A registered data type by name, or `undefined`. |
| totalFn | (name: string): TotalFn | undefined | name: string | TotalFn | undefined | A registered total function by name, or `undefined`. |
| pipe | (name: string): ((v: unknown, ...a: string[]) => string) | undefined | name: string | ((v: unknown, ...a: string[]) => string) | undefined | A registered template pipe by name - the functions a cell template calls with `{{ value | pipe }}` - or `undefined`. |
| register | (kind: string, name: string, impl: unknown): void | kind: stringname: stringimpl: unknown | void | Add an implementation under a name, for one of `renderer`, `editor`, `filter`, `dataType`, `totalFn`, `pipe` or `component`. An unknown kind or a missing name warns and does nothing; registering over an existing name replaces it and warns. |
RegressionBand
A pointwise confidence band for the mean response of a single-predictor fit.
| Property | Type | Description |
|---|---|---|
| confidence | number | The level the band was computed at - the model's `confidence`, 0.95 by default. |
| points | { x: number; yhat: number; lower: number; upper: number }[] | One point per fitted row, in ascending predictor order: the predictor value, the fitted response, and the band's lower and upper edges at that point. |
RegressionFit
| Property | Type | Description |
|---|---|---|
| slope | number | The fitted slope: how much the response moves per unit of the predictor. |
| intercept | number | The fitted response where the predictor is zero. |
| r2 | number | The square of Pearson's r: how much of the response the fit accounts for. |
| stdError | number | Standard error of the slope, which is what says it differs from zero. |
| n | number | Pairs that survived pairwise deletion, not rows scanned. |
RejectedRow
A row a change could not apply, and why. Reported, never thrown.
| Property | Type | Description |
|---|---|---|
| operation | RejectedRowOperation 'add' | 'update' | 'remove' | Which part of the change the row was in: `'add'`, `'update'` or `'remove'`. |
| id | string | The key of the row that could not be applied. |
| reason | RejectedRowReason 'unknown-id' | 'duplicate-id' | `unknown-id`, no row with that key. `duplicate-id`, a row with that key already exists; admitting a second would corrupt every structure that resolves one key to one row. |
RowChange
| Property | Type | Description |
|---|---|---|
| add | unknown[] | Rows to add. A row whose key the grid already holds is rejected rather than admitted twice. (optional) |
| at | number | Where to insert the added rows, as a physical index. They go on the end when it is left out or is past the end. (optional) |
| update | unknown[] | Rows to update, matched to existing rows by key. A key the grid does not hold is rejected. (optional) |
| remove | unknown[] | string[] | Rows to remove, given either as keys or as row objects the grid reads the key from. (optional) |
RowOrderResult
What `rowOrder.enter`, `set` and `exit` report.
| Property | Type | Description |
|---|---|---|
| manual | boolean | Whether a manual order is in force after the call. |
| reason | string | Why 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.
| Property | Type | Description |
|---|---|---|
| colId | string | The column the grid is grouped by at this level. |
| from | unknown | The value it had. |
| to | unknown | The value of the group it joined. |
SavedView
| Property | Type | Description |
|---|---|---|
| id | string | The view's identity, which `apply`, `rename`, `remove` and `setDefault` take. |
| name | string | What the view is called. Renaming refuses a blank or duplicate name. |
| description | string | Longer text about the view, for a picker that has room for it. |
| shared | boolean | Whether the view was stored for everyone rather than for this user alone. The storage adapter decides what that means. |
| isDefault | boolean | Applied on load when no `config.state` is given. `config.state` wins outright over this flag: with both present, the default view is never applied and the active view id stays `null`. |
| builtin | boolean | Supplied in `config.views.saved`: listed apart, and not renamable or deletable. |
| createdAt | number | When the view was first saved, as epoch milliseconds. It survives an overwrite; `updatedAt` does not. |
| updatedAt | number | When it was last changed, as epoch milliseconds. |
| state | GridState | A partial `GridState`; only the sections it names are applied. |
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.
| Property | Type | Description |
|---|---|---|
| count | number | How many selected cells carry a value at all (blank cells are excluded). |
| numeric | number | How many of those parsed as a number. |
| sum | number | null | Null when `numeric` is 0. |
| min | number | null | Null when `numeric` is 0. |
| max | number | null | Null when `numeric` is 0. |
| avg | number | null | Null when `numeric` is 0. |
| cells | number | How many cells were selected, blank or not - the size of the range itself. |
| distinct | number | How many distinct values (numeric or not) the selected cells hold. |
| median | number | The middle of the numeric values, sorted. Absent when `numeric` is 0. (optional) |
| q1 | number | The first quartile. Absent when `numeric` is 0. (optional) |
| q3 | number | The third quartile. Absent when `numeric` is 0. (optional) |
| iqr | number | `q3 - q1`. Absent when `numeric` is 0. (optional) |
| stddev | number | null | Sample standard deviation; null with exactly one numeric value. Absent when `numeric` is 0. (optional) |
| outliers | number | How many numeric values sit outside the standard `1.5 * iqr` fence. Absent when `numeric` is 0. (optional) |
SeriesStats
| Property | Type | Description |
|---|---|---|
| n | number | How many readings the summary was computed over. At least two are needed or there is no sequence to describe and `null` comes back instead. |
| first | number | The reading the series opens with, in the ordering `by` imposed. |
| last | number | The reading the series ends with, in the same ordering. |
| change | number | Last minus first, in the column's own units. |
| changePercent | number | null | The same change as a percentage of the first reading's magnitude. `null` when the series starts at zero, which has no percentage. |
| volatility | number | null | Standard deviation of period-on-period returns. |
| annualisedVolatility | number | null | The same, times the root of `periodsPerYear`; null unless one was given. |
| growth | number | null | Compound growth per period, annualised when `periodsPerYear` is given. |
| maxDrawdown | number | null | The largest peak-to-trough fall, as a fraction. |
| maxDrawdownFrom | number | The index of the peak the largest fall started from. |
| maxDrawdownTo | number | The index of the trough the largest fall ended at. |
| autocorrelation | number | null | Lag-1: positive is momentum, negative is mean reversion. |
| upDays | number | How many period-on-period moves were upward. A period whose previous reading was zero has no return and counts in neither. |
| downDays | number | How many period-on-period moves were downward. |
Source
| Property | Type | Description |
|---|---|---|
| mode | SourceMode 'memory' | 'paged' | 'remote' | 'stream' | Which kind of source this is - `'memory'`, `'paged'`, `'remote'` or `'stream'`. Several features read it: histograms are refused over an open stream, and cross-filtering needs a memory source. (read-only) |
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| count | (): number | - | number | How many display rows the source is offering, group rows included. A paged source with an unknown total reports what it has discovered plus one page, so the scrollbar keeps growing as the rows arrive. |
| at | (index: number): Row | undefined | index: number | Row | undefined | The row at a display index. A row that has not arrived yet comes back as a skeleton placeholder rather than `undefined`, so the renderer always has something to lay out. |
| byKey | (key: string): Row | undefined | key: string | Row | undefined | The row with this key, or `undefined` when the source does not hold it. |
| loaded | (index: number): boolean | index: number | boolean | Whether the row at an index has actually arrived. `false` for a skeleton, which is how the renderer knows to draw a placeholder. |
| hint | (start: number, end: number): void | start: numberend: number | void | Tell the source which rows are about to be needed - the viewport, plus whatever overscan the renderer wants - so it can fetch ahead. Advisory: a source may ignore it. |
| apply | (change: RowChange): ChangeResult | change: RowChange | ChangeResult | Apply an incremental change to the rows the source holds, returning what it added, updated and removed. |
| reload | (opts?: ReloadOptions): void | opts?: ReloadOptions | void | Throw away what is cached and fetch again. What a host calls when the data changed behind the grid's back. |
| destroy | (): void | - | void | Release whatever the source holds - sockets, timers, in-flight requests - when the grid is torn down. (optional) |
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.
| Property | Type | Description |
|---|---|---|
| col | ColumnRef | The geometry column. |
| bucket | 'grid' | The bucket kind; `grid` is the one there is. |
| size | number | The cell size in degrees, above zero. |
SpatialDistance
A circle on the Earth's surface: the operand of `withinDistance`.
| Property | Type | Description |
|---|---|---|
| lon | number | The centre's longitude, in degrees. |
| lat | number | The centre's latitude, in degrees. |
| metres | number | The radius, in metres. |
Stat
The handle `createStat` returns.
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| element | (): HTMLElement | null | - | HTMLElement | null | The tile's root element. Null when the tile was misconfigured - a missing container or document returns an inert handle rather than throwing, so one bad tile does not take the dashboard with it. |
| value | (): unknown | - | unknown | The value currently shown, as computed rather than as formatted. Null on an inert handle. |
| refresh | (): void | - | void | Recompute and repaint now. Works even on a tile with `live: false`, which is the point of it. |
| destroy | (): void | - | void | Stop following the grid and remove the tile from the document. |
StatCoverage
How much of the data a computed figure actually covers. `covered < total`, or `total === null`, means the figure is approximate.
| Property | Type | Description |
|---|---|---|
| covered | number | Rows the figure was computed over. |
| total | number | null | Rows the source knows about, or `null` when it cannot know - never a guess. |
| windowed | boolean | True when a window bounded the computation, so the figure covers part of the data. |
SubsetComparison
The subset-vs-population ranking.
| Property | Type | Description |
|---|---|---|
| ranked | ColumnDifference[] | Every compared column, largest difference first. |
| subsetN | number | How many rows the filtered subset holds. |
| populationN | number | How many rows the whole population holds. |
| filtered | boolean | Whether a filter is actually narrowing the set. |
| measures | { numeric: string; categorical: string; common: string } | The measure each family reports, and the common scale, named for a legend. |
TopValue
One row of a categorical column's top-values table.
| Property | Type | Description |
|---|---|---|
| value | unknown | The value itself, as it is stored. |
| count | number | How many present rows carry it. |
| share | number | Its share of the present values, 0 to 1. |
TwoSampleSpec
How {@link StatisticsApi.compareGroups} splits the rows and picks a test.
| Property | Type | Description |
|---|---|---|
| by | string | The column whose values split the rows into groups. Required. |
| groups | [unknown, unknown] | The two group values to compare. The two most frequent when omitted. (optional) |
| test | SignificanceTest 'auto' | 'welch' | 'mannWhitney' | 'chiSquare' | Force a test rather than choosing by column family. `auto` (the default) picks Welch or Mann-Whitney for a numeric column and chi-square for a categorical one; the choice is always named in the result. (optional) |
| confidence | number | The confidence level for the interval, 0 to 1. 0.95 by default. (optional) |
| category | unknown | The focal category for a chi-square difference interval, when the column has more than two categories. Without it, a multi-category comparison reports no scalar interval, only the effect size. (optional) |
UnitConfig
| Property | Type | Description |
|---|---|---|
| system | string | Which unit system the column measures in - `'data'`, `'length'`, `'mass'` and the rest, plus anything registered with `registerUnitSystem`. `'data'` by default; an unknown name warns and names the systems that exist. (optional) |
| unit | string | The unit the stored numbers are in. Everything else - conversion, the display ladder, parsing - is relative to this. Defaults to the system's base unit, and an unknown symbol warns and falls back to it. (optional) |
| binary | boolean | Use the power-of-two ladder - KiB, MiB, GiB - instead of the power-of-ten one. Off by default. (optional) |
| decimals | number | A fixed number of decimal places: it sets the minimum and the maximum to the same figure. (optional) |
| minDecimals | number | The fewest decimal places to show, padding with zeros. 0 by default. (optional) |
| maxDecimals | number | The most decimal places to show. Two by default, or the minimum when that is higher. (optional) |
| display | string | Which unit to render in: a symbol from the system, or `'auto'` to pick the largest rung the value fills - 1,500,000 bytes as `1.5 MB`. Unset renders in the stored unit. Display only: the stored number never changes, so sort, filter and totals are unaffected. (optional) |
| locale | string | The BCP-47 locale the number is formatted in. The grid's by default. (optional) |
| group | boolean | Whether to group thousands. On by default. (optional) |
| space | string | What sits between the number and the symbol. A single space by default when the symbol trails (`1,200 kg`) and nothing when it leads, which is how a leading symbol is written. An explicit value wins either way. (optional) |
| placement | UnitSymbolPlacement 'suffix' | 'prefix' | Whether the symbol goes after the number (the default) or before it. (optional) |
| compound | string[] | Render one stored number across an ordered subset of the system's units, e.g. `['ft', 'in']` for `5 ft 11 in`. Display and parse only: the stored value stays a single base-unit number, so sort, filter and total are unchanged. Parsing sums the parts. (optional) |
| significantFigures | number | Round to this many significant figures before the rung is chosen, so 999,999 B at three figures reads `1 MB` rather than `1,000 kB`. Off when unset or not a positive number; ignored by a `compound` column, which renders across units instead. (optional) |
| nullDisplay | string | What to show for a value that is not a finite number - null, undefined, empty, or unparseable text. Empty by default. (optional) |
UnitDescriptor
One unit descriptor: a symbol and how many base quantities it is worth.
| Property | Type | Description |
|---|---|---|
| symbol | string | The symbol shown beside the number, and the name this unit is referred to by - `'kB'`, `'ft'`, `'°C'`. |
| factor | number | How many of the system's base quantity one of this unit is worth - 1,000 for a kilobyte in a system based on bytes. Conversion is this ratio, which is why the base unit's factor is 1. |
| aliases | readonly string[] | Lowercase spellings that unambiguously mean this unit, so typed input reads `kilobytes` and `kilobyte` as `kB`. |
| binary | boolean | Whether this is a power-of-two unit (KiB, MiB), which puts it on the binary ladder rather than the decimal one. |
| prefix | string | null | The bare SI-style prefix this unit carries - `m`, `G` - or `null` for a unit that has none. |
| auto | boolean | Whether `display: 'auto'` may choose this unit. On by default; turn it off for a unit that would break the ladder's coherence, as inches and feet do among metres. |
ValidationError
One recorded validation error.
| Property | Type | Description |
|---|---|---|
| key | string | The key of the row holding the invalid cell. |
| colId | string | The column holding the invalid cell. |
| code | string | Which rule failed - `required`, `min`, `pattern` and so on - so a host can react to the kind of failure rather than parsing its wording. |
| message | string | The message shown against the cell: the rule's own `messages` entry, the spec-wide `message`, or the built-in English default for that rule. |
ViewChange
| Property | Type | Description |
|---|---|---|
| reason | ViewChangeReason 'save' | 'update' | 'rename' | 'remove' | 'default' | 'import' | 'seed' | 'replace' | What happened to the views: a view was saved, updated, renamed, removed, made default, imported, seeded from configuration, or the whole set replaced. |
| view | SavedView | null | The view the change concerns; null for a bulk replace. |
ViewImportReport
What {@link ViewsApi.import} reports.
| Property | Type | Description |
|---|---|---|
| imported | Omit<SavedView, 'state'>[] | The views that were stored, as metadata - the state is not repeated. |
| skipped | { name: string; reason: string }[] | Each view that was not stored, with a reason in words a host can show. |
| repaired | { name: string; key: string; reason: string }[] | Each state section that was dropped from an otherwise valid view. |
ViewPayload
What {@link ViewsApi.export} produces and {@link ViewsApi.import} accepts.
| Property | Type | Description |
|---|---|---|
| kind | string | Marks the object as a Lattice view payload. |
| version | number | The payload format version, so an older file can be read or refused. |
| exportedAt | number | When it was exported, in epoch milliseconds. |
| views | SavedView[] | The views themselves, each with `isDefault` cleared. |
ViewStorage
| Method | Signature | Parameters | Returns | Description |
|---|---|---|---|---|
| read | (): SavedView[] | - | SavedView[] | Load the user's views. Called at construction and by `views.reload()`. |
| write | (views: SavedView[], change: ViewChange): void | views: SavedView[]change: ViewChange | void | Mirror the views somewhere synchronous: `localStorage`, an in-memory cache. For a server, listen for `view:saved` / `view:removed` and do the write yourself: the grid does not make network calls and does not want to know whether yours succeeded. |
WhereOptions
How a `where` predicate is re-evaluated, whether `filters.clear()` may remove it, and what the source may be told about it.
| Property | Type | Description |
|---|---|---|
| deps | string[] | The columns the predicate reads, in the same spirit as `value.deps` on a computed column (). Declared, the verdict is cached per row and re-run only when one of these columns changes on that row. Omitted, the predicate is treated as reading the whole row and is called on every pass - never stale, and never skipped either. (optional) |
| pinned | boolean | Survive `filters.clear()`. For a predicate that is not the user's filter - row-level permissions, tenant scoping - where a "clear filters" button must never widen what the user can see. (optional) |
| condition | FilterSet | A declarative twin of the predicate, pushed to the source while the function stays as the residual. On a pushdown engine this narrows the fetch instead of filtering a page client-side. It must be implied by the predicate: the grid ANDs both, so a twin wider than the function costs only time, while one narrower than it hides rows the function would have kept. **The twin is what works at any size.** Without one, a pushdown source can still run the function - but only as the residual over the whole matching set, so it does so only while that set is under `whereRowLimit` (default `50_000`) and refuses loudly past it. A paged or remote source cannot run it at all and warns at registration. The twin is pushed to the engine, so it narrows the fetch itself and none of that applies. (optional) |
WindowSpec
The window a windowed aggregate was computed over.
| Property | Type | Description |
|---|---|---|
| kind | WindowKind 'count' | 'time' | 'session' | Which window: last N ticks, last N ms, or the session. |
| span | number | The size: N ticks, N ms, or the session duration in ms. |
| size | number | How many values actually fell inside the window. |
WindowedResult
One windowed figure and the window it covers.
| Property | Type | Description |
|---|---|---|
| value | number | null | The reduction, or null when the window held no usable values. |
| over | WindowSpec | The window the figure was computed over - always stated. |
Types
Every type alias the declarations export, with its definition. A type named anywhere in the tables above links to its entry here.
AggregateMode
How one requested aggregate should be computed.
type AggregateMode = 'engine' | 'client' | 'engine-if-identical'
AIAsk
The provider-agnostic model callback the host supplies. The module never imports a provider SDK, reads a key, or makes a network call - it builds this payload and awaits the host's reply. A host may wrap a chat provider (`{ text }`), a completion (a bare string), a tool-calling turn (`{ toolCalls }`), or a structured provider (`{ structured }`).
type AIAsk = (payload: { system: string; message: string; prompt: string; messages: Array<{ role: string; content: string; [k: string]: unknown }>; tools?: object[]; schema?: unknown; signal?: AbortSignal; }) => Promise< | string | { text?: string; content?: string; toolCalls?: object[]; structured?: unknown } >
Declared in lattice-grid/modules/ai.
AIBriefKind
What an AI narrative targets.
type AIBriefKind = 'view' | 'column' | 'forecast' | 'kpi' | 'chart' | 'risk'
Declared in lattice-grid/modules/ai.
AIEventName
The events an AI controller raises. The controller's own, not the grid's: `grid.on` takes {@link EventName} and knows nothing about these. `on()` warns once on any other name, because a binding to an event that can never fire is a silent no-op. Each event also has a config callback (`onNarrative`, `onQuery`, `onProposal`, `onError`); both routes fire. None of them is cancellable: each reports a run that has already finished, and the one point where the AI changes anything - applying a proposal - goes through the grid's own `beforeEdit` gate (or the board's `beforeMove`), which is where a host vetoes an AI write.
type AIEventName = 'narrative' | 'query' | 'proposal' | 'error'
Declared in lattice-grid/modules/ai.
AINarrativeMode
Which path an AI narrative ran through: tool calls, or an upfront facts packet.
type AINarrativeMode = 'tools' | 'packet'
Declared in lattice-grid/modules/ai.
AIProposalScope
An AI proposal's row scope: the filtered view, or an opted-in widen to all rows.
type AIProposalScope = 'view' | 'all'
Declared in lattice-grid/modules/ai.
AIReconcileMode
What to do with an ungrounded figure in an AI narrative: drop it, or flag it in place.
type AIReconcileMode = 'strip' | 'flag'
Declared in lattice-grid/modules/ai.
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'