@toclocoinc/lattice-grid 1.71.0 → 1.71.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +1 -1
- package/angular/package.json +1 -1
- package/docs/API.html +73 -15
- package/docs/api/adapters.html +1 -1
- package/docs/api/ai.html +1 -1
- package/docs/api/alarms.html +1 -1
- package/docs/api/charts.html +70 -12
- package/docs/api/data-router.html +1 -1
- package/docs/api/gantt.html +1 -1
- package/docs/api/grid.html +2 -2
- package/docs/api/index.html +2 -2
- package/docs/api/kanban.html +1 -1
- package/docs/api/kpi.html +1 -1
- package/docs/api/layout.html +1 -1
- package/docs/api/mock-socket.html +1 -1
- package/docs/api/tabs.html +1 -1
- package/docs/api/types.html +1 -1
- package/docs/api-detail.html +4 -4
- package/docs/warnings.json +13 -2
- package/lattice-grid.d.ts +53 -7
- package/lattice-grid.esm.min.js +3 -3
- package/lattice-grid.min.cjs +3 -3
- package/lattice-grid.min.js +3 -3
- package/modules/ai.d.ts +1 -1
- package/modules/ai.esm.min.js +2 -2
- package/modules/ai.min.cjs +2 -2
- package/modules/ai.min.js +2 -2
- package/modules/alarms.d.ts +1 -1
- package/modules/alarms.esm.min.js +2 -2
- package/modules/alarms.min.cjs +2 -2
- package/modules/alarms.min.js +2 -2
- package/modules/angular.d.ts +1 -1
- package/modules/angular.esm.min.js +2 -2
- package/modules/angular.min.cjs +2 -2
- package/modules/angular.min.js +2 -2
- package/modules/chart-alluvial.d.ts +1 -1
- package/modules/chart-alluvial.esm.min.js +1 -1
- package/modules/chart-alluvial.min.cjs +1 -1
- package/modules/chart-alluvial.min.js +1 -1
- package/modules/chart-arc.d.ts +1 -1
- package/modules/chart-arc.esm.min.js +1 -1
- package/modules/chart-arc.min.cjs +1 -1
- package/modules/chart-arc.min.js +1 -1
- package/modules/chart-bubblemap.d.ts +1 -1
- package/modules/chart-bubblemap.esm.min.js +1 -1
- package/modules/chart-bubblemap.min.cjs +1 -1
- package/modules/chart-bubblemap.min.js +1 -1
- package/modules/chart-bump.d.ts +1 -1
- package/modules/chart-bump.esm.min.js +1 -1
- package/modules/chart-bump.min.cjs +1 -1
- package/modules/chart-bump.min.js +1 -1
- package/modules/chart-calendar.d.ts +1 -1
- package/modules/chart-calendar.esm.min.js +1 -1
- package/modules/chart-calendar.min.cjs +1 -1
- package/modules/chart-calendar.min.js +1 -1
- package/modules/chart-decomposition.d.ts +1 -1
- package/modules/chart-decomposition.esm.min.js +1 -1
- package/modules/chart-decomposition.min.cjs +1 -1
- package/modules/chart-decomposition.min.js +1 -1
- package/modules/chart-diverging.d.ts +1 -1
- package/modules/chart-diverging.esm.min.js +1 -1
- package/modules/chart-diverging.min.cjs +1 -1
- package/modules/chart-diverging.min.js +1 -1
- package/modules/chart-dumbbell.d.ts +1 -1
- package/modules/chart-dumbbell.esm.min.js +1 -1
- package/modules/chart-dumbbell.min.cjs +1 -1
- package/modules/chart-dumbbell.min.js +1 -1
- package/modules/chart-fan.d.ts +1 -1
- package/modules/chart-fan.esm.min.js +1 -1
- package/modules/chart-fan.min.cjs +1 -1
- package/modules/chart-fan.min.js +1 -1
- package/modules/chart-hexbin.d.ts +1 -1
- package/modules/chart-hexbin.esm.min.js +1 -1
- package/modules/chart-hexbin.min.cjs +1 -1
- package/modules/chart-hexbin.min.js +1 -1
- package/modules/chart-hexmap.d.ts +1 -1
- package/modules/chart-hexmap.esm.min.js +1 -1
- package/modules/chart-hexmap.min.cjs +1 -1
- package/modules/chart-hexmap.min.js +1 -1
- package/modules/chart-icicle.d.ts +1 -1
- package/modules/chart-icicle.esm.min.js +1 -1
- package/modules/chart-icicle.min.cjs +1 -1
- package/modules/chart-icicle.min.js +1 -1
- package/modules/chart-markermap.d.ts +1 -1
- package/modules/chart-markermap.esm.min.js +1 -1
- package/modules/chart-markermap.min.cjs +1 -1
- package/modules/chart-markermap.min.js +1 -1
- package/modules/chart-parallel.d.ts +1 -1
- package/modules/chart-parallel.esm.min.js +1 -1
- package/modules/chart-parallel.min.cjs +1 -1
- package/modules/chart-parallel.min.js +1 -1
- package/modules/chart-ridgeline.d.ts +1 -1
- package/modules/chart-ridgeline.esm.min.js +1 -1
- package/modules/chart-ridgeline.min.cjs +1 -1
- package/modules/chart-ridgeline.min.js +1 -1
- package/modules/chart-roc.d.ts +1 -1
- package/modules/chart-roc.esm.min.js +1 -1
- package/modules/chart-roc.min.cjs +1 -1
- package/modules/chart-roc.min.js +1 -1
- package/modules/chart-slope.d.ts +1 -1
- package/modules/chart-slope.esm.min.js +1 -1
- package/modules/chart-slope.min.cjs +1 -1
- package/modules/chart-slope.min.js +1 -1
- package/modules/chart-splom.d.ts +1 -1
- package/modules/chart-splom.esm.min.js +1 -1
- package/modules/chart-splom.min.cjs +1 -1
- package/modules/chart-splom.min.js +1 -1
- package/modules/chart-waffle.d.ts +1 -1
- package/modules/chart-waffle.esm.min.js +1 -1
- package/modules/chart-waffle.min.cjs +1 -1
- package/modules/chart-waffle.min.js +1 -1
- package/modules/charts.d.ts +1 -1
- package/modules/charts.esm.min.js +141 -137
- package/modules/charts.esm.min.js.map +2 -2
- package/modules/charts.min.cjs +141 -137
- package/modules/charts.min.js +141 -137
- package/modules/charts.min.js.map +2 -2
- package/modules/data-router.d.ts +1 -1
- package/modules/data-router.esm.min.js +2 -2
- package/modules/data-router.min.cjs +2 -2
- package/modules/data-router.min.js +2 -2
- package/modules/devtools.d.ts +1 -1
- package/modules/devtools.esm.min.js +1 -1
- package/modules/devtools.min.cjs +1 -1
- package/modules/devtools.min.js +1 -1
- package/modules/dhtmlx-compat.d.ts +1 -1
- package/modules/dhtmlx-compat.esm.min.js +2 -2
- package/modules/dhtmlx-compat.min.cjs +2 -2
- package/modules/dhtmlx-compat.min.js +2 -2
- package/modules/gantt.d.ts +1 -1
- package/modules/gantt.esm.min.js +2 -2
- package/modules/gantt.min.cjs +2 -2
- package/modules/gantt.min.js +2 -2
- package/modules/geo-europe-nuts.d.ts +1 -1
- package/modules/geo-europe-nuts.esm.min.js +1 -1
- package/modules/geo-europe-nuts.min.cjs +8 -0
- package/modules/geo-europe-nuts.min.js +8 -0
- package/modules/geo-europe-nuts.min.js.map +6 -0
- package/modules/geo-uk.d.ts +1 -1
- package/modules/geo-uk.esm.min.js +1 -1
- package/modules/geo-uk.min.cjs +8 -0
- package/modules/geo-uk.min.js +8 -0
- package/modules/geo-uk.min.js.map +6 -0
- package/modules/geo-us-states.d.ts +1 -1
- package/modules/geo-us-states.esm.min.js +1 -1
- package/modules/geo-us-states.min.cjs +8 -0
- package/modules/geo-us-states.min.js +8 -0
- package/modules/geo-us-states.min.js.map +6 -0
- package/modules/geo-world-110m.d.ts +1 -1
- package/modules/geo-world-110m.esm.min.js +1 -1
- package/modules/geo-world-110m.min.cjs +8 -0
- package/modules/geo-world-110m.min.js +8 -0
- package/modules/geo-world-110m.min.js.map +6 -0
- package/modules/geo-world-50m.d.ts +1 -1
- package/modules/geo-world-50m.esm.min.js +1 -1
- package/modules/geo-world-50m.min.cjs +8 -0
- package/modules/geo-world-50m.min.js +8 -0
- package/modules/geo-world-50m.min.js.map +6 -0
- package/modules/htmx.d.ts +1 -1
- package/modules/htmx.esm.min.js +3 -3
- package/modules/htmx.min.cjs +3 -3
- package/modules/htmx.min.js +3 -3
- package/modules/kanban.d.ts +1 -1
- package/modules/kanban.esm.min.js +2 -2
- package/modules/kanban.min.cjs +2 -2
- package/modules/kanban.min.js +2 -2
- package/modules/kpi.d.ts +1 -1
- package/modules/kpi.esm.min.js +2 -2
- package/modules/kpi.min.cjs +2 -2
- package/modules/kpi.min.js +2 -2
- package/modules/layout.d.ts +1 -1
- package/modules/layout.esm.min.js +2 -2
- package/modules/layout.min.cjs +2 -2
- package/modules/layout.min.js +2 -2
- package/modules/mock-socket.d.ts +1 -1
- package/modules/mock-socket.esm.min.js +1 -1
- package/modules/mock-socket.min.cjs +1 -1
- package/modules/mock-socket.min.js +1 -1
- package/modules/react.d.ts +1 -1
- package/modules/react.esm.min.js +2 -2
- package/modules/react.min.cjs +2 -2
- package/modules/react.min.js +2 -2
- package/modules/svelte.d.ts +1 -1
- package/modules/svelte.esm.min.js +2 -2
- package/modules/svelte.min.cjs +2 -2
- package/modules/svelte.min.js +2 -2
- package/modules/tabs.d.ts +1 -1
- package/modules/tabs.esm.min.js +2 -2
- package/modules/tabs.min.cjs +2 -2
- package/modules/tabs.min.js +2 -2
- package/modules/vue.d.ts +1 -1
- package/modules/vue.esm.min.js +2 -2
- package/modules/vue.min.cjs +2 -2
- package/modules/vue.min.js +2 -2
- package/modules/webcomponent.d.ts +1 -1
- package/modules/webcomponent.esm.min.js +3 -3
- package/modules/webcomponent.min.cjs +3 -3
- package/modules/webcomponent.min.js +3 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,26 @@ and what it means for a grid already in production.
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [1.71.3] - 2026-09-25
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- A `scheme` array coloured slices and series by position, so a category or series a filter removed shifted every colour after it — a sites-by-status donut and a severity-stacked bar could not hold "Operational" green and "Offline" red once one status disappeared for a quarter (BACKLOG-0001453). `scheme` now also accepts a `{ name: colour }` map: it keys on the category for `pie`/`donut`/`sunburst`, on the series value for any cartesian type with `series`, and on the `x` category for a single-series `bar`/`horizontalBar`. A name absent from the map falls back to the ordered scheme by its position among the other unmapped names only, so an explicit assignment is never disturbed by a name the map does not mention. A map and an array `palette` do not combine — the map wins, once, with a warning (`chart:scheme:array-and-map`).
|
|
17
|
+
- `legend: { values: true }` appends each entry's own total after its name and a thin space — a category's for `pie`/`donut`, a series' for a series legend — formatted by the measure column.
|
|
18
|
+
- A `donut` now takes `centre: { value: 'total' | number | string, label? }`, drawn in the hole: `'total'` sums the slices actually drawn, a number is formatted the same way, a string is written through unchanged; both the value and an optional label are sized to fit the hole and never drawn past its edge.
|
|
19
|
+
|
|
20
|
+
## [1.71.1] - 2026-09-24
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- A single-series `bar` or `horizontalBar` drew every mark in the scheme colour even when the value column already carried conditional-formatting rules, so a NOC panel and the topology it summarised disagreed about what a number meant (BACKLOG-0001451). A `bar`/`horizontalBar` with no `series` key now fills each mark from the y column's own rules — the same `styleFor` a cell, a network link and a marker map already answer to — and the legend names the rules that fired instead of the one, unnamed series. Without a rule on the column, or with `series` set, the scheme applies exactly as before.
|
|
25
|
+
- `horizontalBar` accepted `labels: true` and then warned it draws no data labels; it now draws one label per bar, at the bar's end, falling inside the bar rather than off the plot's right edge when the label would otherwise overflow — the same rescue a tall vertical bar already gets from the top of the plot.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- A script-tag page could not load a geometry pack: the five packs under `modules/geo-*` shipped ESM only, so a plain `<script src>` page could draw every built-in chart type and every extension chart type but could not get a world, US, UK or European outline beside them without a bundler (BACKLOG-0001450). Each pack now also ships as UMD and CJS, on its own global (`LatticeGridGeoWorld110m`, `LatticeGridGeoWorld50m`, `LatticeGridGeoEuropeNuts`, `LatticeGridGeoUk`, `LatticeGridGeoUsStates`), carrying `.pack` and `.default` — never merged into `LatticeGrid`, since all five export the same two names and a second pack loaded the same way would otherwise overwrite the first's `pack` on a shared object.
|
|
30
|
+
- `tools/check.js` gained a format-parity gate: every optional module directory now has to ship both a UMD and a CJS artefact, named by module and by missing format when one does not, so the next module that ships ESM-only fails the build rather than needing its own card to notice.
|
|
31
|
+
|
|
12
32
|
## [1.71.0] - 2026-09-23
|
|
13
33
|
|
|
14
34
|
### Added
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ dependencies, no build step required. Optional adapters for React, Vue, Svelte
|
|
|
5
5
|
and Web Components ship alongside it, and Angular has compiled components of its
|
|
6
6
|
own at `@toclocoinc/lattice-grid/angular` — inside this package, not beside it.
|
|
7
7
|
|
|
8
|
-
Version 1.71.
|
|
8
|
+
Version 1.71.3 · [latticegrid.dev](https://www.latticegrid.dev) · TOCLOCO Inc
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
package/angular/package.json
CHANGED
package/docs/API.html
CHANGED
|
@@ -382,7 +382,7 @@
|
|
|
382
382
|
<div class="shell">
|
|
383
383
|
<aside class="rail">
|
|
384
384
|
<p class="rail__brand">Lattice Grid</p>
|
|
385
|
-
<p class="rail__sub">API reference · v1.71.
|
|
385
|
+
<p class="rail__sub">API reference · v1.71.3</p>
|
|
386
386
|
<nav>
|
|
387
387
|
<div class="rail__group">
|
|
388
388
|
<span class="rail__label">Start</span>
|
|
@@ -553,7 +553,7 @@
|
|
|
553
553
|
</header>
|
|
554
554
|
|
|
555
555
|
<p class="chips">
|
|
556
|
-
<span class="chip">Version 1.71.
|
|
556
|
+
<span class="chip">Version 1.71.3</span>
|
|
557
557
|
<span class="chip">Zero dependencies</span>
|
|
558
558
|
<span class="chip"><a href="api-detail.html">Developer guide →</a></span>
|
|
559
559
|
</p>
|
|
@@ -2180,7 +2180,7 @@ grid.destroy();
|
|
|
2180
2180
|
<table>
|
|
2181
2181
|
<thead><tr><th>Member</th><th>Returns</th><th>Description</th></tr></thead>
|
|
2182
2182
|
<tbody>
|
|
2183
|
-
<tr><td class="sig">getVersion()</td><td class="type">string</td><td class="desc">The version this grid came from, e.g. <code>'1.71.
|
|
2183
|
+
<tr><td class="sig">getVersion()</td><td class="type">string</td><td class="desc">The version this grid came from, e.g. <code>'1.71.3'</code>. Also on the module as <code>getVersion()</code>, for when you have no grid to hand.</td></tr>
|
|
2184
2184
|
<tr><td class="sig">get(key)</td><td class="type">unknown</td><td class="desc">Read any configuration key.</td></tr>
|
|
2185
2185
|
<tr><td class="sig">set(key, value)</td><td class="type">void</td><td class="desc">Write one key. Every key is live; nothing needs a rebuild.</td></tr>
|
|
2186
2186
|
<tr><td class="sig">setAll(values)</td><td class="type">void</td><td class="desc">Write several in one pass. Emits one <code>config:changed</code> for the batch, not one per key.</td></tr>
|
|
@@ -5816,9 +5816,10 @@ const chart = createChart({
|
|
|
5816
5816
|
<tr><td class="name">series</td><td class="type">string</td><td class="desc">Splits the measure into one series per distinct value.</td></tr>
|
|
5817
5817
|
<tr><td class="name">measures</td><td class="type">object[]</td><td class="desc"><code>{col, fn, type, axis}</code>: several measures at once, each reduced by an aggregation. <code>fn</code> is one of <code>sum</code>, <code>avg</code> (alias <code>mean</code>), <code>min</code>, <code>max</code>, <code>count</code>, <code>countValues</code>, <code>first</code>, <code>last</code>; it defaults to <code>sum</code>. An <code>fn</code> that is none of these is a mistake, not a silent <code>sum</code>: it warns once, naming the value and the supported set, and falls back to <code>sum</code> so the chart still draws.</td></tr>
|
|
5818
5818
|
<tr><td class="name">title</td><td class="type">string</td><td class="desc">Drawn above the plot.</td></tr>
|
|
5819
|
-
<tr><td class="name">scheme</td><td class="type">string | string[]</td><td class="desc">A named scheme
|
|
5820
|
-
<tr><td class="name">legend</td><td class="type">boolean | object</td><td class="desc"><code>position</code>,
|
|
5821
|
-
<tr><td class="name">
|
|
5819
|
+
<tr><td class="name">scheme</td><td class="type">string | string[] | object</td><td class="desc">A named scheme, your own ordered colours, or a <code>{ name: colour }</code> map (BACKLOG-0001453). <code>schemeNames()</code> lists the built-in ones, including a colour-blind-safe palette. The map is what survives a filter: a pie or donut keys it on the category, a chart with <code>series</code> keys it on the series value, and a single-series bar or column keys it on the <code>x</code> category instead. A name the map does not mention falls back to the ordered scheme by its position among the other unmapped names, so <code>{ Operational: 'green', Offline: 'red' }</code> keeps "Operational" exactly as green whichever categories a filter leaves. A map and a <code>palette</code> array do not combine — the map wins, and the array is ignored once, with a warning.</td></tr>
|
|
5820
|
+
<tr><td class="name">legend</td><td class="type">boolean | object</td><td class="desc"><code>position</code>, <code>isolate</code> so a click shows only that series (what plain toggling makes a reader with eight series do in seven clicks), and <code>values: true</code>, which appends each entry's own total after its name and a thin space — a category's for pie and donut, a series' for a series legend — formatted by the measure column (BACKLOG-0001453).</td></tr>
|
|
5821
|
+
<tr><td class="name">centre</td><td class="type">object</td><td class="desc">A donut's own figure, drawn in its hole (BACKLOG-0001453); every other type ignores it, having no hole. <code>{ value: 'total' | number | string, label? }</code> — <code>'total'</code> sums the slices actually drawn, so hiding a category from the legend moves the figure with them; a number is formatted the same way; a string is written through unchanged. <code>label</code> is a second line beneath it. Both are sized to fit the hole and never drawn past its edge.</td></tr>
|
|
5822
|
+
<tr><td class="name">labels</td><td class="type">boolean | object</td><td class="desc">Values beside each mark. <code>position</code>, <code>format</code>, <code>minGap</code>. A label that would overlap one already placed is dropped rather than drawn over it. <code>horizontalBar</code> draws them exactly as <code>bar</code> does: the figure sits past the end of the bar and, where that would spill past the plot's right edge, inside the bar instead (BACKLOG-0001451).</td></tr>
|
|
5822
5823
|
<tr><td class="name">axis</td><td class="type">object</td><td class="desc">Titles, tick density and formatting per axis.</td></tr>
|
|
5823
5824
|
<tr><td class="name">reference</td><td class="type">object[]</td><td class="desc">Horizontal lines: <code>{value, label}</code>.</td></tr>
|
|
5824
5825
|
<tr><td class="name">multiples</td><td class="type">string</td><td class="desc">One chart per distinct value of this column, on a shared scale.</td></tr>
|
|
@@ -5928,6 +5929,48 @@ grid.destroy();
|
|
|
5928
5929
|
after the plot has been laid out. <code>margin: { left }</code> is added to whatever the
|
|
5929
5930
|
labels need rather than competing with it.
|
|
5930
5931
|
</p>
|
|
5932
|
+
<p class="section-note">
|
|
5933
|
+
<strong>A rule on the column colours the bar</strong> (BACKLOG-0001451). A single-series
|
|
5934
|
+
<code>bar</code> or <code>horizontalBar</code> — no <code>series</code> key —
|
|
5935
|
+
takes each mark's fill from the <code>y</code> column's own conditional-formatting rules,
|
|
5936
|
+
the same <code>styleFor</code> a cell and a <a href="#network-map">network link</a> already
|
|
5937
|
+
answer to, and the legend names the rules that fired instead of the one, unnamed series.
|
|
5938
|
+
Without a rule on the column, or with <code>series</code> set, the bars keep the scheme
|
|
5939
|
+
exactly as before — a rule and a series both mean “colour by something”,
|
|
5940
|
+
and only one is read at a time.
|
|
5941
|
+
</p>
|
|
5942
|
+
<p class="section-note">
|
|
5943
|
+
<strong>A <code>scheme</code> can colour by name instead of by position</strong>
|
|
5944
|
+
(BACKLOG-0001453). <code>scheme: { Operational: 'green', Degraded: 'amber', Offline: 'red' }</code>
|
|
5945
|
+
keys on the category for a <code>pie</code>, <code>donut</code> or <code>sunburst</code>; on
|
|
5946
|
+
the series value for any cartesian type with a <code>series</code> column; and on the
|
|
5947
|
+
<code>x</code> category for a single-series <code>bar</code> or <code>horizontalBar</code>
|
|
5948
|
+
— the same "no <code>series</code>" case the rule colour above reads, and a rule still
|
|
5949
|
+
outranks the map where both apply. The point of the map is what an ordered array cannot do: a
|
|
5950
|
+
category a filter removes never shifts the colour of the ones that stay, because each name's
|
|
5951
|
+
colour comes from the map rather than from where it happens to sort. A name the map does not
|
|
5952
|
+
mention falls back to the ordered scheme by its position among the <em>other unmapped</em>
|
|
5953
|
+
names only. A map and an array <code>palette</code> are two ways of choosing the same thing
|
|
5954
|
+
and do not combine — given both, the map wins and the array is ignored, once, with a
|
|
5955
|
+
warning (<code>chart:scheme:array-and-map</code>).
|
|
5956
|
+
</p>
|
|
5957
|
+
<p class="section-note">
|
|
5958
|
+
<strong><code>legend: { values: true }</code> writes the number beside the name</strong>
|
|
5959
|
+
(BACKLOG-0001453). Each entry gets its own total appended after a thin space — the
|
|
5960
|
+
category's for a <code>pie</code> or <code>donut</code>, the series' for a series legend
|
|
5961
|
+
— formatted by the measure column exactly as a cell in that column would be, so a
|
|
5962
|
+
legend reading "Operational 42" and a filtered grid never disagree about what 42 means.
|
|
5963
|
+
</p>
|
|
5964
|
+
<p class="section-note">
|
|
5965
|
+
<strong>A donut can carry a figure in its own hole</strong> (BACKLOG-0001453):
|
|
5966
|
+
<code>centre: { value: 'total', label: 'sites' }</code>. <code>'total'</code> sums the slices
|
|
5967
|
+
actually drawn, so hiding a category from the legend moves the figure with the slices rather
|
|
5968
|
+
than leaving it stale; a number is a caller's own figure, formatted the same way; a string is
|
|
5969
|
+
written through unchanged, for a centre naming something a sum cannot. <code>label</code> is a
|
|
5970
|
+
second line beneath the value. Both are sized to the hole a donut cuts — never a pie's,
|
|
5971
|
+
which has none — and are shrunk together, proportionally, and truncated rather than
|
|
5972
|
+
drawn past its edge.
|
|
5973
|
+
</p>
|
|
5931
5974
|
|
|
5932
5975
|
<h3>The chart</h3>
|
|
5933
5976
|
<div class="table-wrap">
|
|
@@ -6080,15 +6123,29 @@ createGrid(el, {
|
|
|
6080
6123
|
|
|
6081
6124
|
createChart({ grid, container: '#map', type: 'geomap', code: 'iso', y: 'revenue',
|
|
6082
6125
|
shapes: pack }); <span class="cmt">// Equal Earth, fitted to the pack</span></code></pre>
|
|
6126
|
+
<p><strong>No bundler? Every pack also ships UMD/CJS</strong> (BACKLOG-0001450), exactly as
|
|
6127
|
+
<code>chart-markermap</code> and the other extension chart types do: a plain <code><script
|
|
6128
|
+
src></code> page reaches the pack from its own global rather than an <code>import</code>. Each
|
|
6129
|
+
pack takes its own global — never merged into <code>LatticeGrid</code> — because all five export the
|
|
6130
|
+
same two names (<code>pack</code>, <code>default</code>), and a page loading more than one would have
|
|
6131
|
+
the second overwrite the first on a shared object.</p>
|
|
6132
|
+
<pre><code><script src="lattice-grid.min.js"></script>
|
|
6133
|
+
<script src="modules/charts.min.js"></script>
|
|
6134
|
+
<script src="modules/chart-markermap.min.js"></script>
|
|
6135
|
+
<script src="modules/geo-world-110m.min.js"></script>
|
|
6136
|
+
<script>
|
|
6137
|
+
LatticeGrid.createChart({ grid, container: '#map', type: 'markermap', lon: 'lng', lat: 'lat',
|
|
6138
|
+
shapes: LatticeGridGeoWorld110m.pack });
|
|
6139
|
+
</script></code></pre>
|
|
6083
6140
|
<div class="table-wrap">
|
|
6084
6141
|
<table>
|
|
6085
|
-
<thead><tr><th>Module</th><th>Regions</th><th>Source and licence</th><th>Size (gzipped)</th><th>Attribution required</th></tr></thead>
|
|
6142
|
+
<thead><tr><th>Module</th><th>Script-tag global</th><th>Regions</th><th>Source and licence</th><th>Size (gzipped)</th><th>Attribution required</th></tr></thead>
|
|
6086
6143
|
<tbody>
|
|
6087
|
-
<tr><td class="sig">modules/geo-world-110m</td><td>177 countries</td><td>Natural Earth 1:110m Admin 0, via world-atlas — public domain</td><td>39 KB</td><td>None</td></tr>
|
|
6088
|
-
<tr><td class="sig">modules/geo-world-50m</td><td>241 countries</td><td>Natural Earth 1:50m Admin 0, via world-atlas — public domain</td><td>225 KB</td><td>None</td></tr>
|
|
6089
|
-
<tr><td class="sig">modules/geo-us-states</td><td>50 states + DC</td><td>US Census cartographic boundaries, via us-atlas — public domain</td><td>36 KB</td><td>None</td></tr>
|
|
6090
|
-
<tr><td class="sig">modules/geo-europe-nuts</td><td>NUTS 0–2</td><td>Eurostat GISCO NUTS 2021 1:20m — free re-use with attribution</td><td>95 KB</td><td><code>© EuroGeographics for the administrative boundaries</code></td></tr>
|
|
6091
|
-
<tr><td class="sig">modules/geo-uk</td><td>9 regions, 361 local authorities, 650 constituencies</td><td>ONS Open Geography, generalised clipped — Open Government Licence v3.0</td><td>292 KB</td><td><code>Contains OS data © Crown copyright and database right 2026; Source: Office for National Statistics licensed under the Open Government Licence v.3.0</code></td></tr>
|
|
6144
|
+
<tr><td class="sig">modules/geo-world-110m</td><td class="sig">LatticeGridGeoWorld110m</td><td>177 countries</td><td>Natural Earth 1:110m Admin 0, via world-atlas — public domain</td><td>39 KB</td><td>None</td></tr>
|
|
6145
|
+
<tr><td class="sig">modules/geo-world-50m</td><td class="sig">LatticeGridGeoWorld50m</td><td>241 countries</td><td>Natural Earth 1:50m Admin 0, via world-atlas — public domain</td><td>225 KB</td><td>None</td></tr>
|
|
6146
|
+
<tr><td class="sig">modules/geo-us-states</td><td class="sig">LatticeGridGeoUsStates</td><td>50 states + DC</td><td>US Census cartographic boundaries, via us-atlas — public domain</td><td>36 KB</td><td>None</td></tr>
|
|
6147
|
+
<tr><td class="sig">modules/geo-europe-nuts</td><td class="sig">LatticeGridGeoEuropeNuts</td><td>NUTS 0–2</td><td>Eurostat GISCO NUTS 2021 1:20m — free re-use with attribution</td><td>95 KB</td><td><code>© EuroGeographics for the administrative boundaries</code></td></tr>
|
|
6148
|
+
<tr><td class="sig">modules/geo-uk</td><td class="sig">LatticeGridGeoUk</td><td>9 regions, 361 local authorities, 650 constituencies</td><td>ONS Open Geography, generalised clipped — Open Government Licence v3.0</td><td>292 KB</td><td><code>Contains OS data © Crown copyright and database right 2026; Source: Office for National Statistics licensed under the Open Government Licence v.3.0</code></td></tr>
|
|
6092
6149
|
</tbody>
|
|
6093
6150
|
</table>
|
|
6094
6151
|
</div>
|
|
@@ -14716,8 +14773,9 @@ return `next ${p.mean.toFixed(1)}; r2 ${f.r2.toFixed(1)}; band ${p.upper - p.low
|
|
|
14716
14773
|
<tr><td class="name">start</td><td class="type">string</td><td class="desc">The start-date column, for a gantt chart. <small>(optional)</small></td></tr>
|
|
14717
14774
|
<tr><td class="name">end</td><td class="type">string</td><td class="desc">The end-date column, for a gantt chart. <small>(optional)</small></td></tr>
|
|
14718
14775
|
<tr><td class="name">title</td><td class="type">string</td><td class="desc">A heading above the plot, drawn in the figure's caption alongside any `subtitle`. <small>(optional)</small></td></tr>
|
|
14719
|
-
<tr><td class="name">scheme</td><td class="type"><a href="#type-ChartSchemeName">ChartSchemeName</a> | string | string[]
|
|
14720
|
-
<tr><td class="name">legend</td><td class="type">boolean | { position?: 'top' | 'bottom' | 'left' | 'right'; isolate?: boolean }</td><td class="desc">Show the series legend. The object form places it, and `isolate` lets a click on a legend entry show that series alone. <small>(optional)</small></td></tr>
|
|
14776
|
+
<tr><td class="name">scheme</td><td class="type"><a href="#type-ChartSchemeName">ChartSchemeName</a> | string | string[] | Record<string, string></td><td class="desc">A named scheme, an array of colours, or a `{ [name]: colour }` map (BACKLOG-0001453). The built-in names are {@link ChartSchemeName} (`'default'`, `'bright'`, `'earth'`, `'mono'`); a name registered with `registerScheme` is a plain string alongside them. The map is the form that survives a filter: a pie or donut keys it on the category (`x`) value, a chart with a `series` column keys it on the series value, and a single-series bar or column — no `series` — keys it on the `x` category instead. A name absent from the map falls back to the ordered scheme by its position among the *other unmapped* names, so `{ Operational: 'green' }` keeps every other category exactly as it was whichever ones a filter removes — an ordered array reassigns every colour after the gap. A map and an array `palette` do not combine; given both, the map wins and the array is ignored, once, with a warning. <small>(optional)</small></td></tr>
|
|
14777
|
+
<tr><td class="name">legend</td><td class="type">boolean | { position?: 'top' | 'bottom' | 'left' | 'right'; isolate?: boolean; values?: boolean; }</td><td class="desc">Show the series legend. The object form places it, and `isolate` lets a click on a legend entry show that series alone. `values: true` appends each entry's own total — a category's for pie and donut, a series' for a series legend — formatted by the measure column, after the name and a thin space (BACKLOG-0001453). <small>(optional)</small></td></tr>
|
|
14778
|
+
<tr><td class="name">centre</td><td class="type">{ value: 'total' | number | string; label?: string }</td><td class="desc">The figure a donut draws in its own hole (BACKLOG-0001453); ignored by every other type, which has no hole to draw into. `value: 'total'` sums the slices actually drawn — a legend click that hides a category moves the figure with them — formatted by the measure column; a number is a caller's own figure, formatted the same way; a string is written through unchanged. `label` is a second line beneath it. Both are sized to fit the hole and are never drawn past its edge. <small>(optional)</small></td></tr>
|
|
14721
14779
|
<tr><td class="name">labels</td><td class="type">boolean | <a href="#type-ChartLabels">ChartLabels</a></td><td class="desc">Print the value beside each mark. `true` takes the defaults; the object form sets the position, the format and the minimum gap. Only the chart types that support labels honour it. <small>(optional)</small></td></tr>
|
|
14722
14780
|
<tr><td class="name">axis</td><td class="type">{ x?: string | <a href="#type-ChartAxis">ChartAxis</a>; y?: string | <a href="#type-ChartAxis">ChartAxis</a>; y2?: string | <a href="#type-ChartAxis">ChartAxis</a>; right?: string | <a href="#type-ChartAxis">ChartAxis</a>; }</td><td class="desc">Per-axis configuration. Each side is a title string or an object of `{ title, min, max, ticks, format, grid, labels }`. `y2` (or `right`) configures the second measure axis of a dual-axis or combo chart (BACKLOG-0000743); a dual-axis chart labels both axes by default so it cannot silently mislead. <small>(optional)</small></td></tr>
|
|
14723
14781
|
<tr><td class="name">brush</td><td class="type">boolean | 'filter' | 'zoom' | 'select' | { mode: 'filter' | 'zoom' | 'select'; axis?: 'x' | 'y' | 'y2' }</td><td class="desc">Dragging across the plot. `true` or `'filter'` writes a range condition into the grid; `'zoom'` changes only this chart's own domain; `'select'` selects the rows under the drag. The object form names which axis the drag acts on — `axis: 'y'` or `'y2'` brushes a value axis, which on a dual-axis chart must say which one it means (BACKLOG-0000743). <small>(optional)</small></td></tr>
|
|
@@ -20313,7 +20371,7 @@ return `next ${p.mean.toFixed(1)}; r2 ${f.r2.toFixed(1)}; band ${p.upper - p.low
|
|
|
20313
20371
|
<!-- END GENERATED TYPE REFERENCE -->
|
|
20314
20372
|
|
|
20315
20373
|
<footer>
|
|
20316
|
-
Lattice Grid 1.71.
|
|
20374
|
+
Lattice Grid 1.71.3 · Copyright © 2026 TOCLOCO Inc. All rights reserved.
|
|
20317
20375
|
This document describes the behaviour of the shipped library. Where this guide and the code
|
|
20318
20376
|
disagree, the code wins: please <a href="https://www.latticegrid.dev">tell us</a>.
|
|
20319
20377
|
</footer>
|
package/docs/api/adapters.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Adapters API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Adapters API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api/ai.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>AI API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>AI API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api/alarms.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Alarms API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Alarms API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api/charts.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Charts API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Charts API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
|
@@ -478,9 +478,10 @@ const chart = createChart({
|
|
|
478
478
|
<tr><td class="name">series</td><td class="type">string</td><td class="desc">Splits the measure into one series per distinct value.</td></tr>
|
|
479
479
|
<tr><td class="name">measures</td><td class="type">object[]</td><td class="desc"><code>{col, fn, type, axis}</code>: several measures at once, each reduced by an aggregation. <code>fn</code> is one of <code>sum</code>, <code>avg</code> (alias <code>mean</code>), <code>min</code>, <code>max</code>, <code>count</code>, <code>countValues</code>, <code>first</code>, <code>last</code>; it defaults to <code>sum</code>. An <code>fn</code> that is none of these is a mistake, not a silent <code>sum</code>: it warns once, naming the value and the supported set, and falls back to <code>sum</code> so the chart still draws.</td></tr>
|
|
480
480
|
<tr><td class="name">title</td><td class="type">string</td><td class="desc">Drawn above the plot.</td></tr>
|
|
481
|
-
<tr><td class="name">scheme</td><td class="type">string | string[]</td><td class="desc">A named scheme
|
|
482
|
-
<tr><td class="name">legend</td><td class="type">boolean | object</td><td class="desc"><code>position</code>,
|
|
483
|
-
<tr><td class="name">
|
|
481
|
+
<tr><td class="name">scheme</td><td class="type">string | string[] | object</td><td class="desc">A named scheme, your own ordered colours, or a <code>{ name: colour }</code> map (BACKLOG-0001453). <code>schemeNames()</code> lists the built-in ones, including a colour-blind-safe palette. The map is what survives a filter: a pie or donut keys it on the category, a chart with <code>series</code> keys it on the series value, and a single-series bar or column keys it on the <code>x</code> category instead. A name the map does not mention falls back to the ordered scheme by its position among the other unmapped names, so <code>{ Operational: 'green', Offline: 'red' }</code> keeps "Operational" exactly as green whichever categories a filter leaves. A map and a <code>palette</code> array do not combine — the map wins, and the array is ignored once, with a warning.</td></tr>
|
|
482
|
+
<tr><td class="name">legend</td><td class="type">boolean | object</td><td class="desc"><code>position</code>, <code>isolate</code> so a click shows only that series (what plain toggling makes a reader with eight series do in seven clicks), and <code>values: true</code>, which appends each entry's own total after its name and a thin space — a category's for pie and donut, a series' for a series legend — formatted by the measure column (BACKLOG-0001453).</td></tr>
|
|
483
|
+
<tr><td class="name">centre</td><td class="type">object</td><td class="desc">A donut's own figure, drawn in its hole (BACKLOG-0001453); every other type ignores it, having no hole. <code>{ value: 'total' | number | string, label? }</code> — <code>'total'</code> sums the slices actually drawn, so hiding a category from the legend moves the figure with them; a number is formatted the same way; a string is written through unchanged. <code>label</code> is a second line beneath it. Both are sized to fit the hole and never drawn past its edge.</td></tr>
|
|
484
|
+
<tr><td class="name">labels</td><td class="type">boolean | object</td><td class="desc">Values beside each mark. <code>position</code>, <code>format</code>, <code>minGap</code>. A label that would overlap one already placed is dropped rather than drawn over it. <code>horizontalBar</code> draws them exactly as <code>bar</code> does: the figure sits past the end of the bar and, where that would spill past the plot's right edge, inside the bar instead (BACKLOG-0001451).</td></tr>
|
|
484
485
|
<tr><td class="name">axis</td><td class="type">object</td><td class="desc">Titles, tick density and formatting per axis.</td></tr>
|
|
485
486
|
<tr><td class="name">reference</td><td class="type">object[]</td><td class="desc">Horizontal lines: <code>{value, label}</code>.</td></tr>
|
|
486
487
|
<tr><td class="name">multiples</td><td class="type">string</td><td class="desc">One chart per distinct value of this column, on a shared scale.</td></tr>
|
|
@@ -590,6 +591,48 @@ grid.destroy();
|
|
|
590
591
|
after the plot has been laid out. <code>margin: { left }</code> is added to whatever the
|
|
591
592
|
labels need rather than competing with it.
|
|
592
593
|
</p>
|
|
594
|
+
<p class="section-note">
|
|
595
|
+
<strong>A rule on the column colours the bar</strong> (BACKLOG-0001451). A single-series
|
|
596
|
+
<code>bar</code> or <code>horizontalBar</code> — no <code>series</code> key —
|
|
597
|
+
takes each mark's fill from the <code>y</code> column's own conditional-formatting rules,
|
|
598
|
+
the same <code>styleFor</code> a cell and a <a href="#network-map">network link</a> already
|
|
599
|
+
answer to, and the legend names the rules that fired instead of the one, unnamed series.
|
|
600
|
+
Without a rule on the column, or with <code>series</code> set, the bars keep the scheme
|
|
601
|
+
exactly as before — a rule and a series both mean “colour by something”,
|
|
602
|
+
and only one is read at a time.
|
|
603
|
+
</p>
|
|
604
|
+
<p class="section-note">
|
|
605
|
+
<strong>A <code>scheme</code> can colour by name instead of by position</strong>
|
|
606
|
+
(BACKLOG-0001453). <code>scheme: { Operational: 'green', Degraded: 'amber', Offline: 'red' }</code>
|
|
607
|
+
keys on the category for a <code>pie</code>, <code>donut</code> or <code>sunburst</code>; on
|
|
608
|
+
the series value for any cartesian type with a <code>series</code> column; and on the
|
|
609
|
+
<code>x</code> category for a single-series <code>bar</code> or <code>horizontalBar</code>
|
|
610
|
+
— the same "no <code>series</code>" case the rule colour above reads, and a rule still
|
|
611
|
+
outranks the map where both apply. The point of the map is what an ordered array cannot do: a
|
|
612
|
+
category a filter removes never shifts the colour of the ones that stay, because each name's
|
|
613
|
+
colour comes from the map rather than from where it happens to sort. A name the map does not
|
|
614
|
+
mention falls back to the ordered scheme by its position among the <em>other unmapped</em>
|
|
615
|
+
names only. A map and an array <code>palette</code> are two ways of choosing the same thing
|
|
616
|
+
and do not combine — given both, the map wins and the array is ignored, once, with a
|
|
617
|
+
warning (<code>chart:scheme:array-and-map</code>).
|
|
618
|
+
</p>
|
|
619
|
+
<p class="section-note">
|
|
620
|
+
<strong><code>legend: { values: true }</code> writes the number beside the name</strong>
|
|
621
|
+
(BACKLOG-0001453). Each entry gets its own total appended after a thin space — the
|
|
622
|
+
category's for a <code>pie</code> or <code>donut</code>, the series' for a series legend
|
|
623
|
+
— formatted by the measure column exactly as a cell in that column would be, so a
|
|
624
|
+
legend reading "Operational 42" and a filtered grid never disagree about what 42 means.
|
|
625
|
+
</p>
|
|
626
|
+
<p class="section-note">
|
|
627
|
+
<strong>A donut can carry a figure in its own hole</strong> (BACKLOG-0001453):
|
|
628
|
+
<code>centre: { value: 'total', label: 'sites' }</code>. <code>'total'</code> sums the slices
|
|
629
|
+
actually drawn, so hiding a category from the legend moves the figure with the slices rather
|
|
630
|
+
than leaving it stale; a number is a caller's own figure, formatted the same way; a string is
|
|
631
|
+
written through unchanged, for a centre naming something a sum cannot. <code>label</code> is a
|
|
632
|
+
second line beneath the value. Both are sized to the hole a donut cuts — never a pie's,
|
|
633
|
+
which has none — and are shrunk together, proportionally, and truncated rather than
|
|
634
|
+
drawn past its edge.
|
|
635
|
+
</p>
|
|
593
636
|
|
|
594
637
|
<h3>The chart</h3>
|
|
595
638
|
<div class="table-wrap">
|
|
@@ -742,15 +785,29 @@ createGrid(el, {
|
|
|
742
785
|
|
|
743
786
|
createChart({ grid, container: '#map', type: 'geomap', code: 'iso', y: 'revenue',
|
|
744
787
|
shapes: pack }); <span class="cmt">// Equal Earth, fitted to the pack</span></code></pre>
|
|
788
|
+
<p><strong>No bundler? Every pack also ships UMD/CJS</strong> (BACKLOG-0001450), exactly as
|
|
789
|
+
<code>chart-markermap</code> and the other extension chart types do: a plain <code><script
|
|
790
|
+
src></code> page reaches the pack from its own global rather than an <code>import</code>. Each
|
|
791
|
+
pack takes its own global — never merged into <code>LatticeGrid</code> — because all five export the
|
|
792
|
+
same two names (<code>pack</code>, <code>default</code>), and a page loading more than one would have
|
|
793
|
+
the second overwrite the first on a shared object.</p>
|
|
794
|
+
<pre><code><script src="lattice-grid.min.js"></script>
|
|
795
|
+
<script src="modules/charts.min.js"></script>
|
|
796
|
+
<script src="modules/chart-markermap.min.js"></script>
|
|
797
|
+
<script src="modules/geo-world-110m.min.js"></script>
|
|
798
|
+
<script>
|
|
799
|
+
LatticeGrid.createChart({ grid, container: '#map', type: 'markermap', lon: 'lng', lat: 'lat',
|
|
800
|
+
shapes: LatticeGridGeoWorld110m.pack });
|
|
801
|
+
</script></code></pre>
|
|
745
802
|
<div class="table-wrap">
|
|
746
803
|
<table>
|
|
747
|
-
<thead><tr><th>Module</th><th>Regions</th><th>Source and licence</th><th>Size (gzipped)</th><th>Attribution required</th></tr></thead>
|
|
804
|
+
<thead><tr><th>Module</th><th>Script-tag global</th><th>Regions</th><th>Source and licence</th><th>Size (gzipped)</th><th>Attribution required</th></tr></thead>
|
|
748
805
|
<tbody>
|
|
749
|
-
<tr><td class="sig">modules/geo-world-110m</td><td>177 countries</td><td>Natural Earth 1:110m Admin 0, via world-atlas — public domain</td><td>39 KB</td><td>None</td></tr>
|
|
750
|
-
<tr><td class="sig">modules/geo-world-50m</td><td>241 countries</td><td>Natural Earth 1:50m Admin 0, via world-atlas — public domain</td><td>225 KB</td><td>None</td></tr>
|
|
751
|
-
<tr><td class="sig">modules/geo-us-states</td><td>50 states + DC</td><td>US Census cartographic boundaries, via us-atlas — public domain</td><td>36 KB</td><td>None</td></tr>
|
|
752
|
-
<tr><td class="sig">modules/geo-europe-nuts</td><td>NUTS 0–2</td><td>Eurostat GISCO NUTS 2021 1:20m — free re-use with attribution</td><td>95 KB</td><td><code>© EuroGeographics for the administrative boundaries</code></td></tr>
|
|
753
|
-
<tr><td class="sig">modules/geo-uk</td><td>9 regions, 361 local authorities, 650 constituencies</td><td>ONS Open Geography, generalised clipped — Open Government Licence v3.0</td><td>292 KB</td><td><code>Contains OS data © Crown copyright and database right 2026; Source: Office for National Statistics licensed under the Open Government Licence v.3.0</code></td></tr>
|
|
806
|
+
<tr><td class="sig">modules/geo-world-110m</td><td class="sig">LatticeGridGeoWorld110m</td><td>177 countries</td><td>Natural Earth 1:110m Admin 0, via world-atlas — public domain</td><td>39 KB</td><td>None</td></tr>
|
|
807
|
+
<tr><td class="sig">modules/geo-world-50m</td><td class="sig">LatticeGridGeoWorld50m</td><td>241 countries</td><td>Natural Earth 1:50m Admin 0, via world-atlas — public domain</td><td>225 KB</td><td>None</td></tr>
|
|
808
|
+
<tr><td class="sig">modules/geo-us-states</td><td class="sig">LatticeGridGeoUsStates</td><td>50 states + DC</td><td>US Census cartographic boundaries, via us-atlas — public domain</td><td>36 KB</td><td>None</td></tr>
|
|
809
|
+
<tr><td class="sig">modules/geo-europe-nuts</td><td class="sig">LatticeGridGeoEuropeNuts</td><td>NUTS 0–2</td><td>Eurostat GISCO NUTS 2021 1:20m — free re-use with attribution</td><td>95 KB</td><td><code>© EuroGeographics for the administrative boundaries</code></td></tr>
|
|
810
|
+
<tr><td class="sig">modules/geo-uk</td><td class="sig">LatticeGridGeoUk</td><td>9 regions, 361 local authorities, 650 constituencies</td><td>ONS Open Geography, generalised clipped — Open Government Licence v3.0</td><td>292 KB</td><td><code>Contains OS data © Crown copyright and database right 2026; Source: Office for National Statistics licensed under the Open Government Licence v.3.0</code></td></tr>
|
|
754
811
|
</tbody>
|
|
755
812
|
</table>
|
|
756
813
|
</div>
|
|
@@ -1131,8 +1188,9 @@ chart.destroy();
|
|
|
1131
1188
|
<tr><td class="name">start</td><td class="type">string</td><td class="desc">The start-date column, for a gantt chart. <small>(optional)</small></td></tr>
|
|
1132
1189
|
<tr><td class="name">end</td><td class="type">string</td><td class="desc">The end-date column, for a gantt chart. <small>(optional)</small></td></tr>
|
|
1133
1190
|
<tr><td class="name">title</td><td class="type">string</td><td class="desc">A heading above the plot, drawn in the figure's caption alongside any `subtitle`. <small>(optional)</small></td></tr>
|
|
1134
|
-
<tr><td class="name">scheme</td><td class="type"><a href="types.html#type-ChartSchemeName">ChartSchemeName</a> | string | string[]
|
|
1135
|
-
<tr><td class="name">legend</td><td class="type">boolean | { position?: 'top' | 'bottom' | 'left' | 'right'; isolate?: boolean }</td><td class="desc">Show the series legend. The object form places it, and `isolate` lets a click on a legend entry show that series alone. <small>(optional)</small></td></tr>
|
|
1191
|
+
<tr><td class="name">scheme</td><td class="type"><a href="types.html#type-ChartSchemeName">ChartSchemeName</a> | string | string[] | Record<string, string></td><td class="desc">A named scheme, an array of colours, or a `{ [name]: colour }` map (BACKLOG-0001453). The built-in names are {@link ChartSchemeName} (`'default'`, `'bright'`, `'earth'`, `'mono'`); a name registered with `registerScheme` is a plain string alongside them. The map is the form that survives a filter: a pie or donut keys it on the category (`x`) value, a chart with a `series` column keys it on the series value, and a single-series bar or column — no `series` — keys it on the `x` category instead. A name absent from the map falls back to the ordered scheme by its position among the *other unmapped* names, so `{ Operational: 'green' }` keeps every other category exactly as it was whichever ones a filter removes — an ordered array reassigns every colour after the gap. A map and an array `palette` do not combine; given both, the map wins and the array is ignored, once, with a warning. <small>(optional)</small></td></tr>
|
|
1192
|
+
<tr><td class="name">legend</td><td class="type">boolean | { position?: 'top' | 'bottom' | 'left' | 'right'; isolate?: boolean; values?: boolean; }</td><td class="desc">Show the series legend. The object form places it, and `isolate` lets a click on a legend entry show that series alone. `values: true` appends each entry's own total — a category's for pie and donut, a series' for a series legend — formatted by the measure column, after the name and a thin space (BACKLOG-0001453). <small>(optional)</small></td></tr>
|
|
1193
|
+
<tr><td class="name">centre</td><td class="type">{ value: 'total' | number | string; label?: string }</td><td class="desc">The figure a donut draws in its own hole (BACKLOG-0001453); ignored by every other type, which has no hole to draw into. `value: 'total'` sums the slices actually drawn — a legend click that hides a category moves the figure with them — formatted by the measure column; a number is a caller's own figure, formatted the same way; a string is written through unchanged. `label` is a second line beneath it. Both are sized to fit the hole and are never drawn past its edge. <small>(optional)</small></td></tr>
|
|
1136
1194
|
<tr><td class="name">labels</td><td class="type">boolean | <a href="types.html#type-ChartLabels">ChartLabels</a></td><td class="desc">Print the value beside each mark. `true` takes the defaults; the object form sets the position, the format and the minimum gap. Only the chart types that support labels honour it. <small>(optional)</small></td></tr>
|
|
1137
1195
|
<tr><td class="name">axis</td><td class="type">{ x?: string | <a href="types.html#type-ChartAxis">ChartAxis</a>; y?: string | <a href="types.html#type-ChartAxis">ChartAxis</a>; y2?: string | <a href="types.html#type-ChartAxis">ChartAxis</a>; right?: string | <a href="types.html#type-ChartAxis">ChartAxis</a>; }</td><td class="desc">Per-axis configuration. Each side is a title string or an object of `{ title, min, max, ticks, format, grid, labels }`. `y2` (or `right`) configures the second measure axis of a dual-axis or combo chart (BACKLOG-0000743); a dual-axis chart labels both axes by default so it cannot silently mislead. <small>(optional)</small></td></tr>
|
|
1138
1196
|
<tr><td class="name">brush</td><td class="type">boolean | 'filter' | 'zoom' | 'select' | { mode: 'filter' | 'zoom' | 'select'; axis?: 'x' | 'y' | 'y2' }</td><td class="desc">Dragging across the plot. `true` or `'filter'` writes a range condition into the grid; `'zoom'` changes only this chart's own domain; `'select'` selects the rows under the drag. The object form names which axis the drag acts on — `axis: 'y'` or `'y2'` brushes a value axis, which on a dual-axis chart must say which one it means (BACKLOG-0000743). <small>(optional)</small></td></tr>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Data router API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Data router API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api/gantt.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Gantt API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Gantt API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api/grid.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Grid API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Grid API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
|
@@ -1115,7 +1115,7 @@ grid.destroy();
|
|
|
1115
1115
|
<table>
|
|
1116
1116
|
<thead><tr><th>Member</th><th>Returns</th><th>Description</th></tr></thead>
|
|
1117
1117
|
<tbody>
|
|
1118
|
-
<tr><td class="sig">getVersion()</td><td class="type">string</td><td class="desc">The version this grid came from, e.g. <code>'1.71.
|
|
1118
|
+
<tr><td class="sig">getVersion()</td><td class="type">string</td><td class="desc">The version this grid came from, e.g. <code>'1.71.3'</code>. Also on the module as <code>getVersion()</code>, for when you have no grid to hand.</td></tr>
|
|
1119
1119
|
<tr><td class="sig">get(key)</td><td class="type">unknown</td><td class="desc">Read any configuration key.</td></tr>
|
|
1120
1120
|
<tr><td class="sig">set(key, value)</td><td class="type">void</td><td class="desc">Write one key. Every key is live; nothing needs a rebuild.</td></tr>
|
|
1121
1121
|
<tr><td class="sig">setAll(values)</td><td class="type">void</td><td class="desc">Write several in one pass. Emits one <code>config:changed</code> for the batch, not one per key.</td></tr>
|
package/docs/api/index.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
|
@@ -427,7 +427,7 @@
|
|
|
427
427
|
<thead><tr><th>Page</th><th>What is on it</th><th>Sections</th><th>Interfaces</th><th>Members</th></tr></thead>
|
|
428
428
|
<tbody>
|
|
429
429
|
<tr><td class="name"><a href="grid.html">The grid</a></td><td class="desc">Constructing a grid, every configuration property, the column definition, each <code>grid.*</code> sub-API, the sources rows come from, and every event the grid raises.</td><td class="type">56</td><td class="type">269</td><td class="type">1891</td></tr>
|
|
430
|
-
<tr><td class="name"><a href="charts.html">The charts module</a></td><td class="desc"><code>createChart</code>, the chart types and their options, the axes, annotations and tooltips, and the geographic packs.</td><td class="type">1</td><td class="type">5</td><td class="type">
|
|
430
|
+
<tr><td class="name"><a href="charts.html">The charts module</a></td><td class="desc"><code>createChart</code>, the chart types and their options, the axes, annotations and tooltips, and the geographic packs.</td><td class="type">1</td><td class="type">5</td><td class="type">109</td></tr>
|
|
431
431
|
<tr><td class="name"><a href="data-router.html">The data router</a></td><td class="desc"><code>createDataRouter</code>: one stream or one dataset split across many viewers, keyed-diff snapshots, join and rollup routes, and backpressure.</td><td class="type">1</td><td class="type">12</td><td class="type">110</td></tr>
|
|
432
432
|
<tr><td class="name"><a href="kpi.html">The KPI (stat-tile) view</a></td><td class="desc"><code>createKPI</code>: stat tiles over a dataset, the aggregations, baselines and delta, threshold bands, sparklines and the tile tree.</td><td class="type">1</td><td class="type">17</td><td class="type">130</td></tr>
|
|
433
433
|
<tr><td class="name"><a href="alarms.html">The alarms module</a></td><td class="desc"><code>createAlarms</code>: levelled alarm events from KPI tiles, grid cells and router routes — raise and clear, with a hold timer that swallows a flapping feed.</td><td class="type">1</td><td class="type">8</td><td class="type">44</td></tr>
|
package/docs/api/kanban.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Kanban API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Kanban API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api/kpi.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>KPI API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>KPI API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api/layout.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Layout API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Layout API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Mock socket API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Mock socket API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api/tabs.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Tabs API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Tabs API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api/types.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Self-contained: no stylesheet, script or font is fetched, so this opens from disk, from
|
|
14
14
|
a file share or from behind a firewall with nothing else present.
|
|
15
15
|
-->
|
|
16
|
-
<title>Types API Reference — Lattice Grid 1.71.
|
|
16
|
+
<title>Types API Reference — Lattice Grid 1.71.3</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
package/docs/api-detail.html
CHANGED
|
@@ -437,7 +437,7 @@
|
|
|
437
437
|
<div class="shell">
|
|
438
438
|
<aside class="rail">
|
|
439
439
|
<p class="rail__brand">Lattice Grid</p>
|
|
440
|
-
<p class="rail__sub">Developer guide · v1.71.
|
|
440
|
+
<p class="rail__sub">Developer guide · v1.71.3</p>
|
|
441
441
|
<nav>
|
|
442
442
|
<div class="rail__group">
|
|
443
443
|
<span class="rail__label">Start here</span>
|
|
@@ -554,7 +554,7 @@
|
|
|
554
554
|
<a href="API.html">reference tables</a> are the shorter version for when you already know.
|
|
555
555
|
</p>
|
|
556
556
|
<p class="chips">
|
|
557
|
-
<span class="chip">Version 1.71.
|
|
557
|
+
<span class="chip">Version 1.71.3</span>
|
|
558
558
|
<span class="chip">Zero dependencies</span>
|
|
559
559
|
<span class="chip">No build step</span>
|
|
560
560
|
</p>
|
|
@@ -1493,7 +1493,7 @@ off(); <span class="cmt">// every subscrip
|
|
|
1493
1493
|
</p>
|
|
1494
1494
|
<div class="example">
|
|
1495
1495
|
<p class="example__label">Which version am I running?</p>
|
|
1496
|
-
<pre><code>grid.getVersion(); <span class="cmt">// '1.71.
|
|
1496
|
+
<pre><code>grid.getVersion(); <span class="cmt">// '1.71.3'</span>
|
|
1497
1497
|
LatticeGrid.getVersion(); <span class="cmt">// the same, when you have no grid to hand</span></code></pre>
|
|
1498
1498
|
</div>
|
|
1499
1499
|
<p class="lead-in">
|
|
@@ -10175,7 +10175,7 @@ grid.licence.state(); <span class="cmt">// 'licensed' | 'localhost' | 'trial'<
|
|
|
10175
10175
|
|
|
10176
10176
|
<footer>
|
|
10177
10177
|
<p>
|
|
10178
|
-
Lattice Grid 1.71.
|
|
10178
|
+
Lattice Grid 1.71.3 · Copyright © 2026 TOCLOCO Inc. All rights reserved.
|
|
10179
10179
|
Written against the shipped source. Where this guide and the code disagree, the code wins,
|
|
10180
10180
|
please <a href="https://www.latticegrid.dev">tell us</a>.
|
|
10181
10181
|
</p>
|