@toclocoinc/lattice-grid 1.98.1 → 1.98.2
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 +11 -0
- package/README.md +1 -1
- package/angular/package.json +1 -1
- package/docs/API.html +27 -17
- package/docs/api/adapters.html +1 -1
- package/docs/api/ai.html +1 -1
- package/docs/api/alarms.html +1 -1
- package/docs/api/calendar.html +1 -1
- package/docs/api/charts.html +1 -1
- package/docs/api/dashboard.html +1 -1
- package/docs/api/data-router.html +1 -1
- package/docs/api/deckgl.html +1 -1
- package/docs/api/designer.html +1 -1
- package/docs/api/gantt.html +1 -1
- package/docs/api/geometry.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/leaflet.html +1 -1
- package/docs/api/list.html +1 -1
- package/docs/api/mapview.html +1 -1
- package/docs/api/mock-socket.html +1 -1
- package/docs/api/presets.html +1 -1
- package/docs/api/scheduler.html +22 -12
- package/docs/api/shell.html +1 -1
- package/docs/api/tabs.html +1 -1
- package/docs/api/types.html +3 -3
- package/docs/api-detail.html +12 -4
- package/docs/warnings.json +1 -1
- package/lattice-grid.d.ts +1 -1
- package/lattice-grid.esm.min.js +2 -2
- package/lattice-grid.min.cjs +2 -2
- package/lattice-grid.min.js +2 -2
- package/locales/all.d.ts +1 -1
- package/locales/all.esm.min.js +1 -1
- package/locales/all.min.cjs +1 -1
- package/locales/all.min.js +1 -1
- package/locales/ar.d.ts +1 -1
- package/locales/ar.esm.min.js +1 -1
- package/locales/ar.min.cjs +1 -1
- package/locales/ar.min.js +1 -1
- package/locales/cs-CZ.d.ts +1 -1
- package/locales/cs-CZ.esm.min.js +1 -1
- package/locales/cs-CZ.min.cjs +1 -1
- package/locales/cs-CZ.min.js +1 -1
- package/locales/da-DK.d.ts +1 -1
- package/locales/da-DK.esm.min.js +1 -1
- package/locales/da-DK.min.cjs +1 -1
- package/locales/da-DK.min.js +1 -1
- package/locales/de-DE.d.ts +1 -1
- package/locales/de-DE.esm.min.js +1 -1
- package/locales/de-DE.min.cjs +1 -1
- package/locales/de-DE.min.js +1 -1
- package/locales/el-GR.d.ts +1 -1
- package/locales/el-GR.esm.min.js +1 -1
- package/locales/el-GR.min.cjs +1 -1
- package/locales/el-GR.min.js +1 -1
- package/locales/en-US.d.ts +1 -1
- package/locales/en-US.esm.min.js +1 -1
- package/locales/en-US.min.cjs +1 -1
- package/locales/en-US.min.js +1 -1
- package/locales/es-ES.d.ts +1 -1
- package/locales/es-ES.esm.min.js +1 -1
- package/locales/es-ES.min.cjs +1 -1
- package/locales/es-ES.min.js +1 -1
- package/locales/fi-FI.d.ts +1 -1
- package/locales/fi-FI.esm.min.js +1 -1
- package/locales/fi-FI.min.cjs +1 -1
- package/locales/fi-FI.min.js +1 -1
- package/locales/fr-CA.d.ts +1 -1
- package/locales/fr-CA.esm.min.js +1 -1
- package/locales/fr-CA.min.cjs +1 -1
- package/locales/fr-CA.min.js +1 -1
- package/locales/fr-FR.d.ts +1 -1
- package/locales/fr-FR.esm.min.js +1 -1
- package/locales/fr-FR.min.cjs +1 -1
- package/locales/fr-FR.min.js +1 -1
- package/locales/hu-HU.d.ts +1 -1
- package/locales/hu-HU.esm.min.js +1 -1
- package/locales/hu-HU.min.cjs +1 -1
- package/locales/hu-HU.min.js +1 -1
- package/locales/it-IT.d.ts +1 -1
- package/locales/it-IT.esm.min.js +1 -1
- package/locales/it-IT.min.cjs +1 -1
- package/locales/it-IT.min.js +1 -1
- package/locales/ja-JP.d.ts +1 -1
- package/locales/ja-JP.esm.min.js +1 -1
- package/locales/ja-JP.min.cjs +1 -1
- package/locales/ja-JP.min.js +1 -1
- package/locales/nb-NO.d.ts +1 -1
- package/locales/nb-NO.esm.min.js +1 -1
- package/locales/nb-NO.min.cjs +1 -1
- package/locales/nb-NO.min.js +1 -1
- package/locales/nl-NL.d.ts +1 -1
- package/locales/nl-NL.esm.min.js +1 -1
- package/locales/nl-NL.min.cjs +1 -1
- package/locales/nl-NL.min.js +1 -1
- package/locales/pl-PL.d.ts +1 -1
- package/locales/pl-PL.esm.min.js +1 -1
- package/locales/pl-PL.min.cjs +1 -1
- package/locales/pl-PL.min.js +1 -1
- package/locales/pt-BR.d.ts +1 -1
- package/locales/pt-BR.esm.min.js +1 -1
- package/locales/pt-BR.min.cjs +1 -1
- package/locales/pt-BR.min.js +1 -1
- package/locales/ro-RO.d.ts +1 -1
- package/locales/ro-RO.esm.min.js +1 -1
- package/locales/ro-RO.min.cjs +1 -1
- package/locales/ro-RO.min.js +1 -1
- package/locales/sv-SE.d.ts +1 -1
- package/locales/sv-SE.esm.min.js +1 -1
- package/locales/sv-SE.min.cjs +1 -1
- package/locales/sv-SE.min.js +1 -1
- package/locales/uk-UA.d.ts +1 -1
- package/locales/uk-UA.esm.min.js +1 -1
- package/locales/uk-UA.min.cjs +1 -1
- package/locales/uk-UA.min.js +1 -1
- package/modules/ai.d.ts +1 -1
- package/modules/ai.esm.min.js +1 -1
- package/modules/ai.min.cjs +1 -1
- package/modules/ai.min.js +1 -1
- package/modules/alarms.d.ts +1 -1
- package/modules/alarms.esm.min.js +1 -1
- package/modules/alarms.min.cjs +1 -1
- package/modules/alarms.min.js +1 -1
- package/modules/angular.d.ts +1 -1
- package/modules/angular.esm.min.js +1 -1
- package/modules/angular.min.cjs +1 -1
- package/modules/angular.min.js +1 -1
- package/modules/calendar.d.ts +1 -1
- package/modules/calendar.esm.min.js +1 -1
- package/modules/calendar.min.cjs +1 -1
- package/modules/calendar.min.js +1 -1
- 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-barrace.d.ts +1 -1
- package/modules/chart-barrace.esm.min.js +1 -1
- package/modules/chart-barrace.min.cjs +1 -1
- package/modules/chart-barrace.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-choropleth.d.ts +1 -1
- package/modules/chart-choropleth.esm.min.js +1 -1
- package/modules/chart-choropleth.min.cjs +1 -1
- package/modules/chart-choropleth.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-forcetree.d.ts +1 -1
- package/modules/chart-forcetree.esm.min.js +1 -1
- package/modules/chart-forcetree.min.cjs +1 -1
- package/modules/chart-forcetree.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-motion.d.ts +1 -1
- package/modules/chart-motion.esm.min.js +1 -1
- package/modules/chart-motion.min.cjs +1 -1
- package/modules/chart-motion.min.js +1 -1
- package/modules/chart-pack.d.ts +1 -1
- package/modules/chart-pack.esm.min.js +1 -1
- package/modules/chart-pack.min.cjs +1 -1
- package/modules/chart-pack.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-pictorial.d.ts +1 -1
- package/modules/chart-pictorial.esm.min.js +1 -1
- package/modules/chart-pictorial.min.cjs +1 -1
- package/modules/chart-pictorial.min.js +1 -1
- package/modules/chart-polararea.d.ts +1 -1
- package/modules/chart-polararea.esm.min.js +1 -1
- package/modules/chart-polararea.min.cjs +1 -1
- package/modules/chart-polararea.min.js +1 -1
- package/modules/chart-polarscatter.d.ts +1 -1
- package/modules/chart-polarscatter.esm.min.js +1 -1
- package/modules/chart-polarscatter.min.cjs +1 -1
- package/modules/chart-polarscatter.min.js +1 -1
- package/modules/chart-pyramid.d.ts +1 -1
- package/modules/chart-pyramid.esm.min.js +1 -1
- package/modules/chart-pyramid.min.cjs +1 -1
- package/modules/chart-pyramid.min.js +1 -1
- package/modules/chart-radialbar.d.ts +1 -1
- package/modules/chart-radialbar.esm.min.js +1 -1
- package/modules/chart-radialbar.min.cjs +1 -1
- package/modules/chart-radialbar.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-scatter3d.d.ts +1 -1
- package/modules/chart-scatter3d.esm.min.js +1 -1
- package/modules/chart-scatter3d.min.cjs +1 -1
- package/modules/chart-scatter3d.min.js +1 -1
- package/modules/chart-serpentine.d.ts +1 -1
- package/modules/chart-serpentine.esm.min.js +1 -1
- package/modules/chart-serpentine.min.cjs +1 -1
- package/modules/chart-serpentine.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-spiral.d.ts +1 -1
- package/modules/chart-spiral.esm.min.js +1 -1
- package/modules/chart-spiral.min.cjs +1 -1
- package/modules/chart-spiral.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-tree.d.ts +1 -1
- package/modules/chart-tree.esm.min.js +1 -1
- package/modules/chart-tree.min.cjs +1 -1
- package/modules/chart-tree.min.js +1 -1
- package/modules/chart-venn.d.ts +1 -1
- package/modules/chart-venn.esm.min.js +1 -1
- package/modules/chart-venn.min.cjs +1 -1
- package/modules/chart-venn.min.js +1 -1
- package/modules/chart-voronoi.d.ts +1 -1
- package/modules/chart-voronoi.esm.min.js +1 -1
- package/modules/chart-voronoi.min.cjs +1 -1
- package/modules/chart-voronoi.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/chart-wordcloud.d.ts +1 -1
- package/modules/chart-wordcloud.esm.min.js +1 -1
- package/modules/chart-wordcloud.min.cjs +1 -1
- package/modules/chart-wordcloud.min.js +1 -1
- package/modules/charts.d.ts +1 -1
- package/modules/charts.esm.min.js +1 -1
- package/modules/charts.min.cjs +1 -1
- package/modules/charts.min.js +1 -1
- package/modules/dashboard.d.ts +1 -1
- package/modules/dashboard.esm.min.js +1 -1
- package/modules/dashboard.min.cjs +1 -1
- package/modules/dashboard.min.js +1 -1
- package/modules/data-router.d.ts +1 -1
- package/modules/data-router.esm.min.js +1 -1
- package/modules/data-router.min.cjs +1 -1
- package/modules/data-router.min.js +1 -1
- package/modules/deckgl.d.ts +1 -1
- package/modules/deckgl.esm.min.js +1 -1
- package/modules/deckgl.min.cjs +1 -1
- package/modules/deckgl.min.js +1 -1
- package/modules/designer.d.ts +1 -1
- package/modules/designer.esm.min.js +1 -1
- package/modules/designer.min.cjs +1 -1
- package/modules/designer.min.js +1 -1
- 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 +1 -1
- package/modules/dhtmlx-compat.min.cjs +1 -1
- package/modules/dhtmlx-compat.min.js +1 -1
- package/modules/gantt.d.ts +1 -1
- package/modules/gantt.esm.min.js +1 -1
- package/modules/gantt.min.cjs +1 -1
- package/modules/gantt.min.js +1 -1
- 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 +1 -1
- package/modules/geo-europe-nuts.min.js +1 -1
- package/modules/geo-uk.d.ts +1 -1
- package/modules/geo-uk.esm.min.js +1 -1
- package/modules/geo-uk.min.cjs +1 -1
- package/modules/geo-uk.min.js +1 -1
- 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 +1 -1
- package/modules/geo-us-states.min.js +1 -1
- 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 +1 -1
- package/modules/geo-world-110m.min.js +1 -1
- 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 +1 -1
- package/modules/geo-world-50m.min.js +1 -1
- package/modules/geometry.d.ts +1 -1
- package/modules/geometry.esm.min.js +1 -1
- package/modules/geometry.min.cjs +1 -1
- package/modules/geometry.min.js +1 -1
- package/modules/htmx.d.ts +1 -1
- package/modules/htmx.esm.min.js +2 -2
- package/modules/htmx.min.cjs +2 -2
- package/modules/htmx.min.js +2 -2
- package/modules/kanban.d.ts +1 -1
- package/modules/kanban.esm.min.js +1 -1
- package/modules/kanban.min.cjs +1 -1
- package/modules/kanban.min.js +1 -1
- package/modules/kpi.d.ts +1 -1
- package/modules/kpi.esm.min.js +1 -1
- package/modules/kpi.min.cjs +1 -1
- package/modules/kpi.min.js +1 -1
- package/modules/layout.d.ts +1 -1
- package/modules/layout.esm.min.js +1 -1
- package/modules/layout.min.cjs +1 -1
- package/modules/layout.min.js +1 -1
- package/modules/leaflet.d.ts +1 -1
- package/modules/leaflet.esm.min.js +1 -1
- package/modules/leaflet.min.cjs +1 -1
- package/modules/leaflet.min.js +1 -1
- package/modules/list.d.ts +1 -1
- package/modules/list.esm.min.js +1 -1
- package/modules/list.min.cjs +1 -1
- package/modules/list.min.js +1 -1
- package/modules/mapview.d.ts +1 -1
- package/modules/mapview.esm.min.js +1 -1
- package/modules/mapview.min.cjs +1 -1
- package/modules/mapview.min.js +1 -1
- 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/presets.d.ts +1 -1
- package/modules/presets.esm.min.js +1 -1
- package/modules/presets.min.cjs +1 -1
- package/modules/presets.min.js +1 -1
- package/modules/react.d.ts +1 -1
- package/modules/react.esm.min.js +1 -1
- package/modules/react.min.cjs +1 -1
- package/modules/react.min.js +1 -1
- package/modules/scheduler.d.ts +12 -8
- package/modules/scheduler.esm.min.js +90 -78
- package/modules/scheduler.esm.min.js.map +2 -2
- package/modules/scheduler.min.cjs +90 -78
- package/modules/scheduler.min.js +90 -78
- package/modules/scheduler.min.js.map +2 -2
- package/modules/shell.d.ts +1 -1
- package/modules/shell.esm.min.js +1 -1
- package/modules/shell.min.cjs +1 -1
- package/modules/shell.min.js +1 -1
- package/modules/svelte.d.ts +1 -1
- package/modules/svelte.esm.min.js +1 -1
- package/modules/svelte.min.cjs +1 -1
- package/modules/svelte.min.js +1 -1
- package/modules/tabs.d.ts +1 -1
- package/modules/tabs.esm.min.js +1 -1
- package/modules/tabs.min.cjs +1 -1
- package/modules/tabs.min.js +1 -1
- package/modules/vue.d.ts +1 -1
- package/modules/vue.esm.min.js +1 -1
- package/modules/vue.min.cjs +1 -1
- package/modules/vue.min.js +1 -1
- package/modules/webcomponent.d.ts +1 -1
- package/modules/webcomponent.esm.min.js +2 -2
- package/modules/webcomponent.min.cjs +2 -2
- package/modules/webcomponent.min.js +2 -2
- package/package.json +1 -1
package/docs/api/scheduler.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>Scheduler API Reference — Lattice Grid 1.98.
|
|
16
|
+
<title>Scheduler API Reference — Lattice Grid 1.98.2</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
|
@@ -450,11 +450,13 @@ const scheduler = createScheduler(document.querySelector('#scheduler'), {
|
|
|
450
450
|
resources: [{ id: 'alice', name: 'Alice', role: 'Design', capacity: 4 }],
|
|
451
451
|
events: [{ id: 1, resourceId: 'alice', name: 'Review', startDate: '2026-03-02 09:00', endDate: '2026-03-02 11:00' }],
|
|
452
452
|
createGrid, // the page's own grid factory (injected, never bundled)
|
|
453
|
-
zoom: 'day', // 'hour' | 'day' | 'week' | 'month' | 'quarter' | px-per-day
|
|
453
|
+
zoom: 'day', // 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'fit' | px-per-day
|
|
454
|
+
resourceWidth: 320, // the left resource pane's width in px (drag its divider, or setResourceWidth)
|
|
454
455
|
fields: { resourceId: 'resourceId', startDate: 'startDate', endDate: 'endDate', name: 'name' },
|
|
455
456
|
});</code></pre>
|
|
456
|
-
<p>The time axis reuses the Gantt's own zoom scale — <code>hour</code>, <code>day</code>, <code>week</code>, <code>month</code> and <code>quarter</code> presets,
|
|
457
|
+
<p>The time axis reuses the Gantt's own zoom scale — <code>hour</code>, <code>day</code>, <code>week</code>, <code>month</code> and <code>quarter</code> presets, a bare pixels-per-day number, or <code>'fit'</code> to size the pixels-per-day to the timeline's width so the plan fills it — with pointer-wheel (Ctrl+wheel) and keyboard (+/−) zoom and arrow-key scrolling. Whatever the pixels-per-day, the axis picks a label granularity and format that fit (BACKLOG-0002164): shorter day names, every nth day, or week/month labels, so no two labels overlap and none is clipped at any scale. A <code>todayLine</code> marks today, and with <code>nonWorking</code> (default on) each resource's own calendar shades its non-working days exactly as the Gantt shades them: a <code>'weekends'</code> string, a <code>{ workdays, holidays }</code> spec, or a name looked up in <code>calendars</code>. Overlapping events in one resource stack into sub-lanes, so a two-hour review never hides the sketch behind it. Rows and time are both virtualised — only the rows and days under the viewport (plus <code>overscan</code>) create DOM, so 500 resources × 20 000 events stays bounded and scrollable. An event whose start cannot be read is counted in <code>unscheduled</code> and reported once, never thrown. With <code>workload: true</code>, each row also draws a histogram band across the bottom of the time axis — one cell per zoom bucket whose fill height is the booked share of the resource's own capacity, computed by the Gantt's <code>computeWorkload</code> against the resource's own calendar and capacity. An over-allocated bucket is highlighted with the theme's danger tokens <em>and</em> a warning glyph (never colour alone), and named resource-by-resource with its periods in an accessible live-region summary, which re-derives live when <code>setEvents(events)</code> replaces the feed. Pass <code>null</code> for the element and the same model answers headlessly.</p>
|
|
457
458
|
<p><strong>Find and read the plan.</strong> A <code>groupBy</code> — a field name or a per-resource function — groups the resources into collapsible group rows, driven by the left grid's own grouping so the two panes can never disagree; the timeline mirrors the grid's expand/collapse state, and a toggle in either pane collapses the other. A <code>search</code> query narrows both sides at once, matching any string or number field of a resource or event (a row stays when its own text <em>or</em> one of its events' text matches, so a match never orphans its bar). A <code>resourceFilter</code> hides rows, an <code>eventFilter</code> hides bars, and each takes a predicate a row must pass. The Gantt's tooltip card — the same card its bars show — opens on an event's hover and keyboard focus with its start, end, duration and resource. Every bar, row, group header and the time axis is named for screen readers, and the keyboard alone reaches every event: the arrow keys walk between events and rows (roving focus), Enter activates, Home/End jump a row's ends, and +/− zoom — so the scheduler passes the same accessibility audit the grid does.</p>
|
|
459
|
+
<p><strong>Resize the resource pane</strong> (BACKLOG-0002163). The left resource table's width is the documented <code>resourceWidth</code> option (default 300px). A draggable, keyboard-operable divider between the pane and the time axis resizes it live — drag the handle, or focus it and press the arrow keys (8px, or 32px with Shift) — clamped between a floor and the time axis's minimum share, and the handle is a <code>role="separator"</code> that announces its value to screen readers. The width is carried by <code>getState()</code>/<code>setState(state)</code> alongside the zoom and scroll, and <code>setResourceWidth(px)</code> sets it programmatically. When the resources are grouped, the group column adopts its own column width (or the 120px synthesised default) instead of a fixed width, so every person's name stays fully visible — or, where a column is too narrow, ellipsises with the full name as its native title, never a mid-word clip.</p>
|
|
458
460
|
<p><strong>Events are editable</strong> (BACKLOG-0002124): drag a bar to move it in time, drop it onto another resource row to reassign it, drag either edge to resize it, drag over empty time in a row to create an event, and press Delete (or use the right-click menu) to delete one. Every change snaps to the zoom step, writes back through <code>events.apply</code> — so a bound dataset sees it exactly as it sees a grid edit — and is one undo step: <code>undo()</code>/<code>redo()</code> or Ctrl/Cmd+Z / Ctrl/Cmd+Shift+Z. Each change raises the one cancellable <code>beforeEventChange</code> (call <code>preventDefault()</code> to refuse it, data untouched) and then one <code>event:change</code> carrying the event id and the old and new values. <code>editable: false</code> switches editing off; an event or a resource marked <code>readOnly: true</code> — or named by <code>readOnlyWhen</code>/<code>resourceReadOnlyWhen</code> — refuses the gesture with a catalogued reason.</p>
|
|
459
461
|
<div class="table-wrap">
|
|
460
462
|
<table>
|
|
@@ -463,7 +465,7 @@ const scheduler = createScheduler(document.querySelector('#scheduler'), {
|
|
|
463
465
|
<tr><td class="sig">createScheduler(el, config)</td><td class="desc">Create a scheduler. Pass a DOM element to render into, or <code>null</code> for a headless scheduler that computes the same placement and axis model.</td></tr>
|
|
464
466
|
<tr><td class="sig">rows.apply({ add, update, remove }) / rows.forEach / rows.count / rows.get(key)</td><td class="desc">The keyed-diff consumer contract over the resources (the left grid's rows), keyed by <code>resourceKey</code>.</td></tr>
|
|
465
467
|
<tr><td class="sig">events.apply({ add, update, remove }) / events.forEach / events.count / events.get(key)</td><td class="desc">The same keyed-diff contract over the events, keyed by <code>eventKey</code>.</td></tr>
|
|
466
|
-
<tr><td class="sig">setZoom('hour'|'day'|'week'|'month'|'quarter'|number) / getZoom()</td><td class="desc">Change the axis scale, re-render and fire <code>zoom:change</code>; a bare number is pixels-per-day and picks the tick level that reads best at that density.</td></tr>
|
|
468
|
+
<tr><td class="sig">setZoom('hour'|'day'|'week'|'month'|'quarter'|'fit'|number) / getZoom()</td><td class="desc">Change the axis scale, re-render and fire <code>zoom:change</code>; a bare number is pixels-per-day and picks the tick level that reads best at that density, and <code>'fit'</code> sizes the pixels-per-day so the plan fills the timeline width.</td></tr>
|
|
467
469
|
<tr><td class="sig">groupBy / setGroupBy(field | (resource) => value)</td><td class="desc">Group the resources into collapsible group rows by a field name or function; <code>null</code> is flat. The left grid does the grouping and the timeline mirrors its collapse state.</td></tr>
|
|
468
470
|
<tr><td class="sig">search / setSearch(query)</td><td class="desc">A case-insensitive query that narrows both the resource rows and the event bars, matching any string or number field (a row stays when one of its events matches).</td></tr>
|
|
469
471
|
<tr><td class="sig">resourceFilter / setResourceFilter(fn)</td><td class="desc">A predicate a resource must pass to stay visible; <code>null</code> clears it.</td></tr>
|
|
@@ -477,7 +479,8 @@ const scheduler = createScheduler(document.querySelector('#scheduler'), {
|
|
|
477
479
|
<tr><td class="sig">edit.move(key, deltaDays) / edit.reassign(key, resourceKey) / edit.resize(key, edge, day) / edit.create(resourceKey, startDay, endDay) / edit.remove(key)</td><td class="desc">The editing controller: move in time, reassign to a row, resize one edge, create and delete — each one undo step and one <code>event:change</code>, refused on a read-only event or resource.</td></tr>
|
|
478
480
|
<tr><td class="sig">undo() / redo() / canUndo() / canRedo()</td><td class="desc">Step the edit history back and forth (Ctrl/Cmd+Z and Ctrl/Cmd+Shift+Z from the keyboard do the same).</td></tr>
|
|
479
481
|
<tr><td class="sig">reassign(key, resourceId)</td><td class="desc">Move an event to another resource row and fire <code>change</code>; returns false for an unknown key or an unchanged resource.</td></tr>
|
|
480
|
-
<tr><td class="sig">
|
|
482
|
+
<tr><td class="sig">resourceWidth / setResourceWidth(px)</td><td class="desc">The left resource pane's width in px (default 300): the option sets it at mount, <code>setResourceWidth</code> resizes programmatically, and the draggable/keyboard divider resizes it by hand — all clamped into the pane's range and carried by <code>getState</code>.</td></tr>
|
|
483
|
+
<tr><td class="sig">getState() / setState(state)</td><td class="desc">Serialise and reapply the restorable view state (<code>zoom</code>, the timeline <code>scroll</code> and the <code>resourceWidth</code>) across browser history.</td></tr>
|
|
481
484
|
<tr><td class="sig">schedulerFromGantt(el, gantt, opts) / schedulerFromRows(el, rows, opts) / schedulerFromCalendar(el, calendar, opts)</td><td class="desc">Build a scheduler over a Gantt plan's assignments (wired so a reassign writes back), a plain dataset, or a calendar's events.</td></tr>
|
|
482
485
|
<tr><td class="sig">on(name, fn) / off(name, fn)</td><td class="desc">Events: <code>zoom:change</code> <code>{ level, px }</code>; <code>change</code> <code>{ id, kind, resource: { from, to }, row }</code> on a reassign; the cancellable <code>beforeEventChange</code> (veto with <code>preventDefault()</code>), <code>eventChange:cancelled</code>, and <code>event:change</code> <code>{ id, action, changes, oldValues, newValues }</code>.</td></tr>
|
|
483
486
|
<tr><td class="sig">destroy()</td><td class="desc">Destroy the left grid, empty the element, remove only what the module added, and drop handlers and caches. The host still owns the element.</td></tr>
|
|
@@ -487,7 +490,7 @@ const scheduler = createScheduler(document.querySelector('#scheduler'), {
|
|
|
487
490
|
<h3 id="scheduler-example">Placement, lanes, workload, zoom, grouping, search, editing and export, executed</h3>
|
|
488
491
|
<p class="section-note">Two resources, three events (two overlapping into two sub-lanes on Alice's row), the day axis, the
|
|
489
492
|
keyed-diff contract, the per-resource workload band, grouping, search and the two filters, an edit and its undo, and a print-safe SVG export of the visible range, run headless on every build.</p>
|
|
490
|
-
<pre data-run="js" data-expect="2|3|2|0|26|true|2|1|1|1|1|2|0|true|2026-03-03 09:00|2026-03-02 09:00|week|3|true|true|true|false" data-covers="export:createScheduler config:SchedulerConfig.resources config:SchedulerConfig.events config:SchedulerConfig.fields config:SchedulerConfig.resourceKey config:SchedulerConfig.eventKey config:SchedulerConfig.zoom config:SchedulerConfig.date config:SchedulerConfig.defaultDuration config:SchedulerConfig.rowHeight config:SchedulerConfig.weekStartDay config:SchedulerConfig.todayLine config:SchedulerConfig.nonWorking config:SchedulerConfig.calendars config:SchedulerConfig.workload config:SchedulerConfig.colorProperty config:SchedulerConfig.colorMap config:SchedulerConfig.ariaLabel config:SchedulerConfig.labels config:SchedulerConfig.overscan config:SchedulerConfig.groupBy config:SchedulerConfig.search config:SchedulerConfig.resourceFilter config:SchedulerConfig.eventFilter config:SchedulerConfig.editable config:SchedulerConfig.readOnlyWhen config:SchedulerConfig.resourceReadOnlyWhen"><code>const { createScheduler } = await import('../packages/modules/scheduler/index.js');
|
|
493
|
+
<pre data-run="js" data-expect="2|3|2|0|26|true|2|1|1|1|1|2|0|320|400|true|2026-03-03 09:00|2026-03-02 09:00|week|3|true|true|true|false|fit" data-covers="export:createScheduler config:SchedulerConfig.resources config:SchedulerConfig.events config:SchedulerConfig.fields config:SchedulerConfig.resourceKey config:SchedulerConfig.eventKey config:SchedulerConfig.zoom config:SchedulerConfig.date config:SchedulerConfig.defaultDuration config:SchedulerConfig.rowHeight config:SchedulerConfig.resourceWidth config:SchedulerConfig.weekStartDay config:SchedulerConfig.todayLine config:SchedulerConfig.nonWorking config:SchedulerConfig.calendars config:SchedulerConfig.workload config:SchedulerConfig.colorProperty config:SchedulerConfig.colorMap config:SchedulerConfig.ariaLabel config:SchedulerConfig.labels config:SchedulerConfig.overscan config:SchedulerConfig.groupBy config:SchedulerConfig.search config:SchedulerConfig.resourceFilter config:SchedulerConfig.eventFilter config:SchedulerConfig.editable config:SchedulerConfig.readOnlyWhen config:SchedulerConfig.resourceReadOnlyWhen"><code>const { createScheduler } = await import('../packages/modules/scheduler/index.js');
|
|
491
494
|
const sched = createScheduler(null, {
|
|
492
495
|
resources: [
|
|
493
496
|
{ id: 'alice', name: 'Alice', role: 'Design', capacity: 4, calendar: 'weekends' },
|
|
@@ -501,7 +504,7 @@ const sched = createScheduler(null, {
|
|
|
501
504
|
fields: { resourceId: 'resourceId', startDate: 'startDate', endDate: 'endDate', name: 'name' },
|
|
502
505
|
resourceKey: 'id', eventKey: 'id',
|
|
503
506
|
zoom: 'day', date: '2026-03-02',
|
|
504
|
-
defaultDuration: 60, rowHeight: 34, weekStartDay: 1,
|
|
507
|
+
defaultDuration: 60, rowHeight: 34, resourceWidth: 320, weekStartDay: 1,
|
|
505
508
|
todayLine: true, nonWorking: true,
|
|
506
509
|
calendars: { weekends: 'weekends' },
|
|
507
510
|
workload: true,
|
|
@@ -534,6 +537,9 @@ const filteredResources = sched.ctx.visibleResources.length; // 1
|
|
|
534
537
|
sched.setResourceFilter(null);
|
|
535
538
|
const wlRows = sched.workload.rows.size; // 2 (one band row per resource)
|
|
536
539
|
const wlOver = sched.workload.overAllocated.length; // 0 (nothing over-allocated)
|
|
540
|
+
const rwBefore = sched.getState().resourceWidth; // 320 (the configured pane width)
|
|
541
|
+
sched.setResourceWidth(400);
|
|
542
|
+
const rwAfter = sched.getState().resourceWidth; // 400 (resized via the API)
|
|
537
543
|
const changed = sched.edit.move(1, 1).ok; // true (moved one day)
|
|
538
544
|
const movedStart = sched.events.get(1).startDate; // 2026-03-03 09:00
|
|
539
545
|
sched.undo();
|
|
@@ -547,8 +553,10 @@ const isSvg = /^<svg /.test(svg); // true
|
|
|
547
553
|
const hasBars = (svg.match(/<rect /g) || []).length >= 3; // true (one bar per placed event)
|
|
548
554
|
const noVar = svg.includes('var(') === false; // true (print-safe palette, no tokens)
|
|
549
555
|
const printed = sched.print(); // false (no window to open, headless)
|
|
556
|
+
sched.setZoom('fit');
|
|
557
|
+
const fit = sched.getZoom().level; // fit (fills the timeline width)
|
|
550
558
|
sched.destroy();
|
|
551
|
-
return [resources, events, overlap, unscheduled, px, hasTicks, groups, matchedEvents, matchedResources, filteredEvents, filteredResources, wlRows, wlOver, changed, movedStart, undone, zoom, after, isSvg, hasBars, noVar, printed].join('|');</code></pre>
|
|
559
|
+
return [resources, events, overlap, unscheduled, px, hasTicks, groups, matchedEvents, matchedResources, filteredEvents, filteredResources, wlRows, wlOver, rwBefore, rwAfter, changed, movedStart, undone, zoom, after, isSvg, hasBars, noVar, printed, fit].join('|');</code></pre>
|
|
552
560
|
<h2 id="ref-scheduler-reference">Type reference</h2>
|
|
553
561
|
<p class="section-note">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.</p>
|
|
554
562
|
<h3 id="ref-module-scheduler">The scheduler module</h3>
|
|
@@ -649,10 +657,11 @@ return [resources, events, overlap, unscheduled, px, hasTicks, groups, matchedEv
|
|
|
649
657
|
<tr><td class="name">resourceKey</td><td class="type">string</td><td class="desc">The resource identity field. Default `'id'`. <small>(optional)</small></td></tr>
|
|
650
658
|
<tr><td class="name">eventKey</td><td class="type">string</td><td class="desc">The event identity field. Default `'id'`. <small>(optional)</small></td></tr>
|
|
651
659
|
<tr><td class="name">columns</td><td class="type">unknown[]</td><td class="desc">The left table's columns; defaults to name/role/capacity. <small>(optional)</small></td></tr>
|
|
652
|
-
<tr><td class="name">zoom</td><td class="type"><a href="types.html#type-SchedulerZoom">SchedulerZoom</a> <small class="literals">'hour' | 'day' | 'week' | 'month' | 'quarter' | number</small></td><td class="desc">The zoom: a preset name or px-per-day. Default `'day'`. <small>(optional)</small></td></tr>
|
|
660
|
+
<tr><td class="name">zoom</td><td class="type"><a href="types.html#type-SchedulerZoom">SchedulerZoom</a> <small class="literals">'hour' | 'day' | 'week' | 'month' | 'quarter' | 'fit' | number</small></td><td class="desc">The zoom: a preset name (`'fit'` fills the timeline width), or px-per-day. Default `'day'`. <small>(optional)</small></td></tr>
|
|
653
661
|
<tr><td class="name">date</td><td class="type">Date | string | number</td><td class="desc">The anchor date the axis centres on. Default the earliest event start, else today. <small>(optional)</small></td></tr>
|
|
654
662
|
<tr><td class="name">defaultDuration</td><td class="type">number</td><td class="desc">The minutes an event without an end runs. Default 60. <small>(optional)</small></td></tr>
|
|
655
663
|
<tr><td class="name">rowHeight</td><td class="type">number</td><td class="desc">The row height in px. Default 34. <small>(optional)</small></td></tr>
|
|
664
|
+
<tr><td class="name">resourceWidth</td><td class="type">number</td><td class="desc">The resource pane's width in px (the left table). Default 300; drag the divider or use `setResourceWidth` to change it. <small>(optional)</small></td></tr>
|
|
656
665
|
<tr><td class="name">locale</td><td class="type">string</td><td class="desc">BCP-47 locale for tick labels. <small>(optional)</small></td></tr>
|
|
657
666
|
<tr><td class="name">timeZone</td><td class="type">string</td><td class="desc">IANA time-zone name for tick labels. Default UTC. <small>(optional)</small></td></tr>
|
|
658
667
|
<tr><td class="name">weekStartDay</td><td class="type">number</td><td class="desc">Week-start weekday, 0=Sun…6=Sat. <small>(optional)</small></td></tr>
|
|
@@ -784,12 +793,13 @@ return [resources, events, overlap, unscheduled, px, hasTicks, groups, matchedEv
|
|
|
784
793
|
<tbody>
|
|
785
794
|
<tr><td class="name">refresh</td><td class="type">(): <a href="#type-Scheduler">Scheduler</a></td><td class="desc">—</td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Re-seed from the config arrays (unless a diff landed) and re-render.</td></tr>
|
|
786
795
|
<tr><td class="name">setEvents</td><td class="type">(events: <a href="types.html#type-SchedulerRow">SchedulerRow</a>[]): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>events: <a href="types.html#type-SchedulerRow">SchedulerRow</a>[]</code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Replace every event and re-render, keyed by `eventKey`.</td></tr>
|
|
787
|
-
<tr><td class="name">setZoom</td><td class="type">(zoom: <a href="types.html#type-SchedulerZoom">SchedulerZoom</a>): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>zoom: <a href="types.html#type-SchedulerZoom">SchedulerZoom</a></code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Change the zoom and re-render, firing `zoom:change
|
|
788
|
-
<tr><td class="name">getZoom</td><td class="type">(): { level: string; px: number }</td><td class="desc">—</td><td class="type"><code>{ level: string; px: number }</code></td><td class="desc">The current zoom `{ level, px }
|
|
796
|
+
<tr><td class="name">setZoom</td><td class="type">(zoom: <a href="types.html#type-SchedulerZoom">SchedulerZoom</a>): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>zoom: <a href="types.html#type-SchedulerZoom">SchedulerZoom</a></code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Change the zoom and re-render, firing `zoom:change`. `'fit'` fills the timeline width.</td></tr>
|
|
797
|
+
<tr><td class="name">getZoom</td><td class="type">(): { level: string; px: number }</td><td class="desc">—</td><td class="type"><code>{ level: string; px: number }</code></td><td class="desc">The current zoom `{ level, px }` — `level` is `'fit'` when zoomed to fit.</td></tr>
|
|
789
798
|
<tr><td class="name">setGroupBy</td><td class="type">(groupBy: string | ((resource: <a href="types.html#type-SchedulerRow">SchedulerRow</a>) => unknown) | null): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>groupBy: string | ((resource: <a href="types.html#type-SchedulerRow">SchedulerRow</a>) => unknown) | null</code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Group the resources by a field or function, re-mounting the left grid.</td></tr>
|
|
790
799
|
<tr><td class="name">setSearch</td><td class="type">(query: string): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>query: string</code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Set the search query that narrows rows and bars; `''` clears it.</td></tr>
|
|
791
800
|
<tr><td class="name">setResourceFilter</td><td class="type">(fn: ((resource: <a href="types.html#type-SchedulerRow">SchedulerRow</a>) => unknown) | null): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>fn: ((resource: <a href="types.html#type-SchedulerRow">SchedulerRow</a>) => unknown) | null</code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Set the resource filter; `null` clears it.</td></tr>
|
|
792
801
|
<tr><td class="name">setEventFilter</td><td class="type">(fn: ((event: <a href="types.html#type-SchedulerRow">SchedulerRow</a>) => unknown) | null): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>fn: ((event: <a href="types.html#type-SchedulerRow">SchedulerRow</a>) => unknown) | null</code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Set the event filter; `null` clears it.</td></tr>
|
|
802
|
+
<tr><td class="name">setResourceWidth</td><td class="type">(width: number): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>width: number</code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Resize the resource pane to a pixel width, clamped into the divider's range.</td></tr>
|
|
793
803
|
<tr><td class="name">toggleGroup</td><td class="type">(value: unknown): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>value: unknown</code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Expand or collapse one group by its value.</td></tr>
|
|
794
804
|
<tr><td class="name">undo</td><td class="type">(opts?: { origin?: string }): boolean</td><td class="desc"><code>opts?: { origin?: string }</code></td><td class="type"><code>boolean</code></td><td class="desc">Undo the most recent edit.</td></tr>
|
|
795
805
|
<tr><td class="name">redo</td><td class="type">(opts?: { origin?: string }): boolean</td><td class="desc"><code>opts?: { origin?: string }</code></td><td class="type"><code>boolean</code></td><td class="desc">Redo the most recently undone edit.</td></tr>
|
|
@@ -801,7 +811,7 @@ return [resources, events, overlap, unscheduled, px, hasTicks, groups, matchedEv
|
|
|
801
811
|
<tr><td class="name">toPNG</td><td class="type">(pngOpts?: { range?: { from?: number | string | Date; to?: number | string | Date }; scale?: number; background?: string; }): Promise<Blob | null></td><td class="desc"><code>pngOpts?: { range?: { from?: number | string | Date; to?: number | string | Date }; scale?: number; background?: string; }</code></td><td class="type"><code>Promise<Blob | null></code></td><td class="desc">This scheduler as a PNG (BACKLOG-0002128): `toSVG` rasterised through a canvas. Makes no network request. `null` when nothing is laid out or there is no canvas to rasterise with.</td></tr>
|
|
802
812
|
<tr><td class="name">print</td><td class="type">(printOpts?: { paper?: 'A4' | 'Letter' | 'A3'; orientation?: 'landscape' | 'portrait'; fitToWidth?: boolean; scale?: number; title?: string | false; header?: string | ((page: number, pages: number) => string) | false; footer?: string | ((page: number, pages: number) => string) | false; }): boolean</td><td class="desc"><code>printOpts?: { paper?: 'A4' | 'Letter' | 'A3'; orientation?: 'landscape' | 'portrait'; fitToWidth?: boolean; scale?: number; title?: string | false; header?: string | ((page: number, pages: number) => string) | false; footer?: string | ((page: number, pages: number) => string) | false; }</code></td><td class="type"><code>boolean</code></td><td class="desc">Print this scheduler — the resource table, the time axis and the bars — paged and scaled (BACKLOG-0002128): the table header and time header repeat on every page and no row is split across a page boundary. Opens the browser's own print path over a standalone document; "PDF" is whatever the browser's print dialog offers ("Save as PDF") — no server, no dependency. Always prints in a fixed, print-safe light palette, independent of the mounted theme.</td></tr>
|
|
803
813
|
<tr><td class="name">reassign</td><td class="type">(key: unknown, resourceId: unknown): boolean</td><td class="desc"><code>key: unknown</code><br><code>resourceId: unknown</code></td><td class="type"><code>boolean</code></td><td class="desc">Move an event to another resource row and fire `change` (`{ id, kind: 'reassign', resource: { from, to }, row }`). Returns false when the event key is unknown or the resource is unchanged.</td></tr>
|
|
804
|
-
<tr><td class="name">getState</td><td class="type">(): { version: number; zoom: string; scroll: { left: number; top: number } }</td><td class="desc">—</td><td class="type"><code>{ version: number; zoom: string; scroll: { left: number; top: number } }</code></td><td class="desc">Serialise the restorable view state: `{ version, zoom, scroll }`.</td></tr>
|
|
814
|
+
<tr><td class="name">getState</td><td class="type">(): { version: number; zoom: string; scroll: { left: number; top: number }; resourceWidth: number }</td><td class="desc">—</td><td class="type"><code>{ version: number; zoom: string; scroll: { left: number; top: number }; resourceWidth: number }</code></td><td class="desc">Serialise the restorable view state: `{ version, zoom, scroll, resourceWidth }`.</td></tr>
|
|
805
815
|
<tr><td class="name">setState</td><td class="type">(state: object): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>state: object</code></td><td class="type"><code><a href="#type-Scheduler">Scheduler</a></code></td><td class="desc">Reapply a state snapshot from {@link Scheduler.getState}.</td></tr>
|
|
806
816
|
<tr><td class="name">destroy</td><td class="type">(): void</td><td class="desc">—</td><td class="type"><code>void</code></td><td class="desc">Tear the scheduler down.</td></tr>
|
|
807
817
|
</tbody>
|
package/docs/api/shell.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>Shell API Reference — Lattice Grid 1.98.
|
|
16
|
+
<title>Shell API Reference — Lattice Grid 1.98.2</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.98.
|
|
16
|
+
<title>Tabs API Reference — Lattice Grid 1.98.2</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.98.
|
|
16
|
+
<title>Types API Reference — Lattice Grid 1.98.2</title>
|
|
17
17
|
<style>
|
|
18
18
|
/* ---------------------------------------------------------------
|
|
19
19
|
Palette lifted from the grid's own theme, so the reference reads as an
|
|
@@ -3564,8 +3564,8 @@
|
|
|
3564
3564
|
<p class="type-def"><code>type SchedulerRow = Record<string, unknown></code></p>
|
|
3565
3565
|
<p class="section-note"><small>Declared in <code>lattice-grid/modules/scheduler</code>.</small></p>
|
|
3566
3566
|
<h4 id="type-SchedulerZoom">SchedulerZoom</h4>
|
|
3567
|
-
<p class="section-note">A scheduler zoom level name, or a bare pixels-per-day number.</p>
|
|
3568
|
-
<p class="type-def"><code>type SchedulerZoom = 'hour' | 'day' | 'week' | 'month' | 'quarter' | number</code></p>
|
|
3567
|
+
<p class="section-note">A scheduler zoom level name (`'fit'` sizes px-per-day to the timeline width), or a bare pixels-per-day number.</p>
|
|
3568
|
+
<p class="type-def"><code>type SchedulerZoom = 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'fit' | number</code></p>
|
|
3569
3569
|
<p class="section-note"><small>Declared in <code>lattice-grid/modules/scheduler</code>.</small></p>
|
|
3570
3570
|
<h4 id="type-ScrollbarMode">ScrollbarMode</h4>
|
|
3571
3571
|
<p class="section-note">How the grid's scroll viewport draws its scrollbars (BACKLOG-0000990, BACKLOG-0001288). `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.</p>
|
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.98.
|
|
440
|
+
<p class="rail__sub">Developer guide · v1.98.2</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.98.
|
|
557
|
+
<span class="chip">Version 1.98.2</span>
|
|
558
558
|
<span class="chip">Zero dependencies</span>
|
|
559
559
|
<span class="chip">No build step</span>
|
|
560
560
|
</p>
|
|
@@ -1866,7 +1866,7 @@ off(); <span class="cmt">// every subscrip
|
|
|
1866
1866
|
</p>
|
|
1867
1867
|
<div class="example">
|
|
1868
1868
|
<p class="example__label">Which version am I running?</p>
|
|
1869
|
-
<pre><code>grid.getVersion(); <span class="cmt">// '1.98.
|
|
1869
|
+
<pre><code>grid.getVersion(); <span class="cmt">// '1.98.2'</span>
|
|
1870
1870
|
LatticeGrid.getVersion(); <span class="cmt">// the same, when you have no grid to hand</span></code></pre>
|
|
1871
1871
|
</div>
|
|
1872
1872
|
<p class="lead-in">
|
|
@@ -10804,6 +10804,14 @@ return boundCount + '|' + routed;</code></pre>
|
|
|
10804
10804
|
<p><strong>Overlaps stack, not collide.</strong> Events that share a resource and a span split
|
|
10805
10805
|
into sub-lanes, so two events in one row sit side by side. A bar's colour comes from
|
|
10806
10806
|
<code>colorProperty</code> and <code>colorMap</code>.</p>
|
|
10807
|
+
<p><strong>The resource pane resizes.</strong> The left table's width is the
|
|
10808
|
+
<code>resourceWidth</code> option (300px default), resized live by a draggable,
|
|
10809
|
+
keyboard-operable divider between it and the time axis, or programmatically with
|
|
10810
|
+
<code>setResourceWidth(px)</code>; the width is carried by
|
|
10811
|
+
<code>getState()</code>/<code>setState()</code> so a restored view keeps it. When the resources
|
|
10812
|
+
are grouped, the group column honours its own column width instead of a fixed one, so a
|
|
10813
|
+
person's name stays fully visible — or, in a column too narrow for it, ellipsises with the
|
|
10814
|
+
full name as its native title, never a mid-word clip.</p>
|
|
10807
10815
|
<p><strong>Find and read the plan.</strong> A <code>groupBy</code> — a field name or a
|
|
10808
10816
|
per-resource function — groups the resources into collapsible rows, driven by the left
|
|
10809
10817
|
grid's own grouping so the two panes can never disagree, and a <code>search</code> query narrows
|
|
@@ -12957,7 +12965,7 @@ grid.licence.state(); <span class="cmt">// 'licensed' | 'localhost' | 'trial'<
|
|
|
12957
12965
|
|
|
12958
12966
|
<footer>
|
|
12959
12967
|
<p>
|
|
12960
|
-
Lattice Grid 1.98.
|
|
12968
|
+
Lattice Grid 1.98.2 · Copyright © 2026 TOCLOCO Inc. All rights reserved.
|
|
12961
12969
|
Written against the shipped source. Where this guide and the code disagree, the code wins,
|
|
12962
12970
|
please <a href="https://www.latticegrid.dev">tell us</a>.
|
|
12963
12971
|
</p>
|
package/docs/warnings.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.98.
|
|
2
|
+
"version": "1.98.2",
|
|
3
3
|
"generated": "tools/build.js from docs/warnings/catalogue.json",
|
|
4
4
|
"about": "Every developer-facing diagnostic Lattice Grid prints to the console, by the key it de-duplicates on. The key is the stable identifier: it is the `id` of every reported entry `grid.diagnostics.warnings()` hands back, what the devtools panel lists, and what to quote in a support conversation. A `*` in an id stands for a value filled in at runtime (a column id, a chart id, an event name), so `icon:*` is one entry covering every column the icon renderer refuses.",
|
|
5
5
|
"fields": {
|
package/lattice-grid.d.ts
CHANGED