@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.
Files changed (402) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -1
  3. package/angular/package.json +1 -1
  4. package/docs/API.html +27 -17
  5. package/docs/api/adapters.html +1 -1
  6. package/docs/api/ai.html +1 -1
  7. package/docs/api/alarms.html +1 -1
  8. package/docs/api/calendar.html +1 -1
  9. package/docs/api/charts.html +1 -1
  10. package/docs/api/dashboard.html +1 -1
  11. package/docs/api/data-router.html +1 -1
  12. package/docs/api/deckgl.html +1 -1
  13. package/docs/api/designer.html +1 -1
  14. package/docs/api/gantt.html +1 -1
  15. package/docs/api/geometry.html +1 -1
  16. package/docs/api/grid.html +2 -2
  17. package/docs/api/index.html +2 -2
  18. package/docs/api/kanban.html +1 -1
  19. package/docs/api/kpi.html +1 -1
  20. package/docs/api/layout.html +1 -1
  21. package/docs/api/leaflet.html +1 -1
  22. package/docs/api/list.html +1 -1
  23. package/docs/api/mapview.html +1 -1
  24. package/docs/api/mock-socket.html +1 -1
  25. package/docs/api/presets.html +1 -1
  26. package/docs/api/scheduler.html +22 -12
  27. package/docs/api/shell.html +1 -1
  28. package/docs/api/tabs.html +1 -1
  29. package/docs/api/types.html +3 -3
  30. package/docs/api-detail.html +12 -4
  31. package/docs/warnings.json +1 -1
  32. package/lattice-grid.d.ts +1 -1
  33. package/lattice-grid.esm.min.js +2 -2
  34. package/lattice-grid.min.cjs +2 -2
  35. package/lattice-grid.min.js +2 -2
  36. package/locales/all.d.ts +1 -1
  37. package/locales/all.esm.min.js +1 -1
  38. package/locales/all.min.cjs +1 -1
  39. package/locales/all.min.js +1 -1
  40. package/locales/ar.d.ts +1 -1
  41. package/locales/ar.esm.min.js +1 -1
  42. package/locales/ar.min.cjs +1 -1
  43. package/locales/ar.min.js +1 -1
  44. package/locales/cs-CZ.d.ts +1 -1
  45. package/locales/cs-CZ.esm.min.js +1 -1
  46. package/locales/cs-CZ.min.cjs +1 -1
  47. package/locales/cs-CZ.min.js +1 -1
  48. package/locales/da-DK.d.ts +1 -1
  49. package/locales/da-DK.esm.min.js +1 -1
  50. package/locales/da-DK.min.cjs +1 -1
  51. package/locales/da-DK.min.js +1 -1
  52. package/locales/de-DE.d.ts +1 -1
  53. package/locales/de-DE.esm.min.js +1 -1
  54. package/locales/de-DE.min.cjs +1 -1
  55. package/locales/de-DE.min.js +1 -1
  56. package/locales/el-GR.d.ts +1 -1
  57. package/locales/el-GR.esm.min.js +1 -1
  58. package/locales/el-GR.min.cjs +1 -1
  59. package/locales/el-GR.min.js +1 -1
  60. package/locales/en-US.d.ts +1 -1
  61. package/locales/en-US.esm.min.js +1 -1
  62. package/locales/en-US.min.cjs +1 -1
  63. package/locales/en-US.min.js +1 -1
  64. package/locales/es-ES.d.ts +1 -1
  65. package/locales/es-ES.esm.min.js +1 -1
  66. package/locales/es-ES.min.cjs +1 -1
  67. package/locales/es-ES.min.js +1 -1
  68. package/locales/fi-FI.d.ts +1 -1
  69. package/locales/fi-FI.esm.min.js +1 -1
  70. package/locales/fi-FI.min.cjs +1 -1
  71. package/locales/fi-FI.min.js +1 -1
  72. package/locales/fr-CA.d.ts +1 -1
  73. package/locales/fr-CA.esm.min.js +1 -1
  74. package/locales/fr-CA.min.cjs +1 -1
  75. package/locales/fr-CA.min.js +1 -1
  76. package/locales/fr-FR.d.ts +1 -1
  77. package/locales/fr-FR.esm.min.js +1 -1
  78. package/locales/fr-FR.min.cjs +1 -1
  79. package/locales/fr-FR.min.js +1 -1
  80. package/locales/hu-HU.d.ts +1 -1
  81. package/locales/hu-HU.esm.min.js +1 -1
  82. package/locales/hu-HU.min.cjs +1 -1
  83. package/locales/hu-HU.min.js +1 -1
  84. package/locales/it-IT.d.ts +1 -1
  85. package/locales/it-IT.esm.min.js +1 -1
  86. package/locales/it-IT.min.cjs +1 -1
  87. package/locales/it-IT.min.js +1 -1
  88. package/locales/ja-JP.d.ts +1 -1
  89. package/locales/ja-JP.esm.min.js +1 -1
  90. package/locales/ja-JP.min.cjs +1 -1
  91. package/locales/ja-JP.min.js +1 -1
  92. package/locales/nb-NO.d.ts +1 -1
  93. package/locales/nb-NO.esm.min.js +1 -1
  94. package/locales/nb-NO.min.cjs +1 -1
  95. package/locales/nb-NO.min.js +1 -1
  96. package/locales/nl-NL.d.ts +1 -1
  97. package/locales/nl-NL.esm.min.js +1 -1
  98. package/locales/nl-NL.min.cjs +1 -1
  99. package/locales/nl-NL.min.js +1 -1
  100. package/locales/pl-PL.d.ts +1 -1
  101. package/locales/pl-PL.esm.min.js +1 -1
  102. package/locales/pl-PL.min.cjs +1 -1
  103. package/locales/pl-PL.min.js +1 -1
  104. package/locales/pt-BR.d.ts +1 -1
  105. package/locales/pt-BR.esm.min.js +1 -1
  106. package/locales/pt-BR.min.cjs +1 -1
  107. package/locales/pt-BR.min.js +1 -1
  108. package/locales/ro-RO.d.ts +1 -1
  109. package/locales/ro-RO.esm.min.js +1 -1
  110. package/locales/ro-RO.min.cjs +1 -1
  111. package/locales/ro-RO.min.js +1 -1
  112. package/locales/sv-SE.d.ts +1 -1
  113. package/locales/sv-SE.esm.min.js +1 -1
  114. package/locales/sv-SE.min.cjs +1 -1
  115. package/locales/sv-SE.min.js +1 -1
  116. package/locales/uk-UA.d.ts +1 -1
  117. package/locales/uk-UA.esm.min.js +1 -1
  118. package/locales/uk-UA.min.cjs +1 -1
  119. package/locales/uk-UA.min.js +1 -1
  120. package/modules/ai.d.ts +1 -1
  121. package/modules/ai.esm.min.js +1 -1
  122. package/modules/ai.min.cjs +1 -1
  123. package/modules/ai.min.js +1 -1
  124. package/modules/alarms.d.ts +1 -1
  125. package/modules/alarms.esm.min.js +1 -1
  126. package/modules/alarms.min.cjs +1 -1
  127. package/modules/alarms.min.js +1 -1
  128. package/modules/angular.d.ts +1 -1
  129. package/modules/angular.esm.min.js +1 -1
  130. package/modules/angular.min.cjs +1 -1
  131. package/modules/angular.min.js +1 -1
  132. package/modules/calendar.d.ts +1 -1
  133. package/modules/calendar.esm.min.js +1 -1
  134. package/modules/calendar.min.cjs +1 -1
  135. package/modules/calendar.min.js +1 -1
  136. package/modules/chart-alluvial.d.ts +1 -1
  137. package/modules/chart-alluvial.esm.min.js +1 -1
  138. package/modules/chart-alluvial.min.cjs +1 -1
  139. package/modules/chart-alluvial.min.js +1 -1
  140. package/modules/chart-arc.d.ts +1 -1
  141. package/modules/chart-arc.esm.min.js +1 -1
  142. package/modules/chart-arc.min.cjs +1 -1
  143. package/modules/chart-arc.min.js +1 -1
  144. package/modules/chart-barrace.d.ts +1 -1
  145. package/modules/chart-barrace.esm.min.js +1 -1
  146. package/modules/chart-barrace.min.cjs +1 -1
  147. package/modules/chart-barrace.min.js +1 -1
  148. package/modules/chart-bubblemap.d.ts +1 -1
  149. package/modules/chart-bubblemap.esm.min.js +1 -1
  150. package/modules/chart-bubblemap.min.cjs +1 -1
  151. package/modules/chart-bubblemap.min.js +1 -1
  152. package/modules/chart-bump.d.ts +1 -1
  153. package/modules/chart-bump.esm.min.js +1 -1
  154. package/modules/chart-bump.min.cjs +1 -1
  155. package/modules/chart-bump.min.js +1 -1
  156. package/modules/chart-calendar.d.ts +1 -1
  157. package/modules/chart-calendar.esm.min.js +1 -1
  158. package/modules/chart-calendar.min.cjs +1 -1
  159. package/modules/chart-calendar.min.js +1 -1
  160. package/modules/chart-choropleth.d.ts +1 -1
  161. package/modules/chart-choropleth.esm.min.js +1 -1
  162. package/modules/chart-choropleth.min.cjs +1 -1
  163. package/modules/chart-choropleth.min.js +1 -1
  164. package/modules/chart-decomposition.d.ts +1 -1
  165. package/modules/chart-decomposition.esm.min.js +1 -1
  166. package/modules/chart-decomposition.min.cjs +1 -1
  167. package/modules/chart-decomposition.min.js +1 -1
  168. package/modules/chart-diverging.d.ts +1 -1
  169. package/modules/chart-diverging.esm.min.js +1 -1
  170. package/modules/chart-diverging.min.cjs +1 -1
  171. package/modules/chart-diverging.min.js +1 -1
  172. package/modules/chart-dumbbell.d.ts +1 -1
  173. package/modules/chart-dumbbell.esm.min.js +1 -1
  174. package/modules/chart-dumbbell.min.cjs +1 -1
  175. package/modules/chart-dumbbell.min.js +1 -1
  176. package/modules/chart-fan.d.ts +1 -1
  177. package/modules/chart-fan.esm.min.js +1 -1
  178. package/modules/chart-fan.min.cjs +1 -1
  179. package/modules/chart-fan.min.js +1 -1
  180. package/modules/chart-forcetree.d.ts +1 -1
  181. package/modules/chart-forcetree.esm.min.js +1 -1
  182. package/modules/chart-forcetree.min.cjs +1 -1
  183. package/modules/chart-forcetree.min.js +1 -1
  184. package/modules/chart-hexbin.d.ts +1 -1
  185. package/modules/chart-hexbin.esm.min.js +1 -1
  186. package/modules/chart-hexbin.min.cjs +1 -1
  187. package/modules/chart-hexbin.min.js +1 -1
  188. package/modules/chart-hexmap.d.ts +1 -1
  189. package/modules/chart-hexmap.esm.min.js +1 -1
  190. package/modules/chart-hexmap.min.cjs +1 -1
  191. package/modules/chart-hexmap.min.js +1 -1
  192. package/modules/chart-icicle.d.ts +1 -1
  193. package/modules/chart-icicle.esm.min.js +1 -1
  194. package/modules/chart-icicle.min.cjs +1 -1
  195. package/modules/chart-icicle.min.js +1 -1
  196. package/modules/chart-markermap.d.ts +1 -1
  197. package/modules/chart-markermap.esm.min.js +1 -1
  198. package/modules/chart-markermap.min.cjs +1 -1
  199. package/modules/chart-markermap.min.js +1 -1
  200. package/modules/chart-motion.d.ts +1 -1
  201. package/modules/chart-motion.esm.min.js +1 -1
  202. package/modules/chart-motion.min.cjs +1 -1
  203. package/modules/chart-motion.min.js +1 -1
  204. package/modules/chart-pack.d.ts +1 -1
  205. package/modules/chart-pack.esm.min.js +1 -1
  206. package/modules/chart-pack.min.cjs +1 -1
  207. package/modules/chart-pack.min.js +1 -1
  208. package/modules/chart-parallel.d.ts +1 -1
  209. package/modules/chart-parallel.esm.min.js +1 -1
  210. package/modules/chart-parallel.min.cjs +1 -1
  211. package/modules/chart-parallel.min.js +1 -1
  212. package/modules/chart-pictorial.d.ts +1 -1
  213. package/modules/chart-pictorial.esm.min.js +1 -1
  214. package/modules/chart-pictorial.min.cjs +1 -1
  215. package/modules/chart-pictorial.min.js +1 -1
  216. package/modules/chart-polararea.d.ts +1 -1
  217. package/modules/chart-polararea.esm.min.js +1 -1
  218. package/modules/chart-polararea.min.cjs +1 -1
  219. package/modules/chart-polararea.min.js +1 -1
  220. package/modules/chart-polarscatter.d.ts +1 -1
  221. package/modules/chart-polarscatter.esm.min.js +1 -1
  222. package/modules/chart-polarscatter.min.cjs +1 -1
  223. package/modules/chart-polarscatter.min.js +1 -1
  224. package/modules/chart-pyramid.d.ts +1 -1
  225. package/modules/chart-pyramid.esm.min.js +1 -1
  226. package/modules/chart-pyramid.min.cjs +1 -1
  227. package/modules/chart-pyramid.min.js +1 -1
  228. package/modules/chart-radialbar.d.ts +1 -1
  229. package/modules/chart-radialbar.esm.min.js +1 -1
  230. package/modules/chart-radialbar.min.cjs +1 -1
  231. package/modules/chart-radialbar.min.js +1 -1
  232. package/modules/chart-ridgeline.d.ts +1 -1
  233. package/modules/chart-ridgeline.esm.min.js +1 -1
  234. package/modules/chart-ridgeline.min.cjs +1 -1
  235. package/modules/chart-ridgeline.min.js +1 -1
  236. package/modules/chart-roc.d.ts +1 -1
  237. package/modules/chart-roc.esm.min.js +1 -1
  238. package/modules/chart-roc.min.cjs +1 -1
  239. package/modules/chart-roc.min.js +1 -1
  240. package/modules/chart-scatter3d.d.ts +1 -1
  241. package/modules/chart-scatter3d.esm.min.js +1 -1
  242. package/modules/chart-scatter3d.min.cjs +1 -1
  243. package/modules/chart-scatter3d.min.js +1 -1
  244. package/modules/chart-serpentine.d.ts +1 -1
  245. package/modules/chart-serpentine.esm.min.js +1 -1
  246. package/modules/chart-serpentine.min.cjs +1 -1
  247. package/modules/chart-serpentine.min.js +1 -1
  248. package/modules/chart-slope.d.ts +1 -1
  249. package/modules/chart-slope.esm.min.js +1 -1
  250. package/modules/chart-slope.min.cjs +1 -1
  251. package/modules/chart-slope.min.js +1 -1
  252. package/modules/chart-spiral.d.ts +1 -1
  253. package/modules/chart-spiral.esm.min.js +1 -1
  254. package/modules/chart-spiral.min.cjs +1 -1
  255. package/modules/chart-spiral.min.js +1 -1
  256. package/modules/chart-splom.d.ts +1 -1
  257. package/modules/chart-splom.esm.min.js +1 -1
  258. package/modules/chart-splom.min.cjs +1 -1
  259. package/modules/chart-splom.min.js +1 -1
  260. package/modules/chart-tree.d.ts +1 -1
  261. package/modules/chart-tree.esm.min.js +1 -1
  262. package/modules/chart-tree.min.cjs +1 -1
  263. package/modules/chart-tree.min.js +1 -1
  264. package/modules/chart-venn.d.ts +1 -1
  265. package/modules/chart-venn.esm.min.js +1 -1
  266. package/modules/chart-venn.min.cjs +1 -1
  267. package/modules/chart-venn.min.js +1 -1
  268. package/modules/chart-voronoi.d.ts +1 -1
  269. package/modules/chart-voronoi.esm.min.js +1 -1
  270. package/modules/chart-voronoi.min.cjs +1 -1
  271. package/modules/chart-voronoi.min.js +1 -1
  272. package/modules/chart-waffle.d.ts +1 -1
  273. package/modules/chart-waffle.esm.min.js +1 -1
  274. package/modules/chart-waffle.min.cjs +1 -1
  275. package/modules/chart-waffle.min.js +1 -1
  276. package/modules/chart-wordcloud.d.ts +1 -1
  277. package/modules/chart-wordcloud.esm.min.js +1 -1
  278. package/modules/chart-wordcloud.min.cjs +1 -1
  279. package/modules/chart-wordcloud.min.js +1 -1
  280. package/modules/charts.d.ts +1 -1
  281. package/modules/charts.esm.min.js +1 -1
  282. package/modules/charts.min.cjs +1 -1
  283. package/modules/charts.min.js +1 -1
  284. package/modules/dashboard.d.ts +1 -1
  285. package/modules/dashboard.esm.min.js +1 -1
  286. package/modules/dashboard.min.cjs +1 -1
  287. package/modules/dashboard.min.js +1 -1
  288. package/modules/data-router.d.ts +1 -1
  289. package/modules/data-router.esm.min.js +1 -1
  290. package/modules/data-router.min.cjs +1 -1
  291. package/modules/data-router.min.js +1 -1
  292. package/modules/deckgl.d.ts +1 -1
  293. package/modules/deckgl.esm.min.js +1 -1
  294. package/modules/deckgl.min.cjs +1 -1
  295. package/modules/deckgl.min.js +1 -1
  296. package/modules/designer.d.ts +1 -1
  297. package/modules/designer.esm.min.js +1 -1
  298. package/modules/designer.min.cjs +1 -1
  299. package/modules/designer.min.js +1 -1
  300. package/modules/devtools.d.ts +1 -1
  301. package/modules/devtools.esm.min.js +1 -1
  302. package/modules/devtools.min.cjs +1 -1
  303. package/modules/devtools.min.js +1 -1
  304. package/modules/dhtmlx-compat.d.ts +1 -1
  305. package/modules/dhtmlx-compat.esm.min.js +1 -1
  306. package/modules/dhtmlx-compat.min.cjs +1 -1
  307. package/modules/dhtmlx-compat.min.js +1 -1
  308. package/modules/gantt.d.ts +1 -1
  309. package/modules/gantt.esm.min.js +1 -1
  310. package/modules/gantt.min.cjs +1 -1
  311. package/modules/gantt.min.js +1 -1
  312. package/modules/geo-europe-nuts.d.ts +1 -1
  313. package/modules/geo-europe-nuts.esm.min.js +1 -1
  314. package/modules/geo-europe-nuts.min.cjs +1 -1
  315. package/modules/geo-europe-nuts.min.js +1 -1
  316. package/modules/geo-uk.d.ts +1 -1
  317. package/modules/geo-uk.esm.min.js +1 -1
  318. package/modules/geo-uk.min.cjs +1 -1
  319. package/modules/geo-uk.min.js +1 -1
  320. package/modules/geo-us-states.d.ts +1 -1
  321. package/modules/geo-us-states.esm.min.js +1 -1
  322. package/modules/geo-us-states.min.cjs +1 -1
  323. package/modules/geo-us-states.min.js +1 -1
  324. package/modules/geo-world-110m.d.ts +1 -1
  325. package/modules/geo-world-110m.esm.min.js +1 -1
  326. package/modules/geo-world-110m.min.cjs +1 -1
  327. package/modules/geo-world-110m.min.js +1 -1
  328. package/modules/geo-world-50m.d.ts +1 -1
  329. package/modules/geo-world-50m.esm.min.js +1 -1
  330. package/modules/geo-world-50m.min.cjs +1 -1
  331. package/modules/geo-world-50m.min.js +1 -1
  332. package/modules/geometry.d.ts +1 -1
  333. package/modules/geometry.esm.min.js +1 -1
  334. package/modules/geometry.min.cjs +1 -1
  335. package/modules/geometry.min.js +1 -1
  336. package/modules/htmx.d.ts +1 -1
  337. package/modules/htmx.esm.min.js +2 -2
  338. package/modules/htmx.min.cjs +2 -2
  339. package/modules/htmx.min.js +2 -2
  340. package/modules/kanban.d.ts +1 -1
  341. package/modules/kanban.esm.min.js +1 -1
  342. package/modules/kanban.min.cjs +1 -1
  343. package/modules/kanban.min.js +1 -1
  344. package/modules/kpi.d.ts +1 -1
  345. package/modules/kpi.esm.min.js +1 -1
  346. package/modules/kpi.min.cjs +1 -1
  347. package/modules/kpi.min.js +1 -1
  348. package/modules/layout.d.ts +1 -1
  349. package/modules/layout.esm.min.js +1 -1
  350. package/modules/layout.min.cjs +1 -1
  351. package/modules/layout.min.js +1 -1
  352. package/modules/leaflet.d.ts +1 -1
  353. package/modules/leaflet.esm.min.js +1 -1
  354. package/modules/leaflet.min.cjs +1 -1
  355. package/modules/leaflet.min.js +1 -1
  356. package/modules/list.d.ts +1 -1
  357. package/modules/list.esm.min.js +1 -1
  358. package/modules/list.min.cjs +1 -1
  359. package/modules/list.min.js +1 -1
  360. package/modules/mapview.d.ts +1 -1
  361. package/modules/mapview.esm.min.js +1 -1
  362. package/modules/mapview.min.cjs +1 -1
  363. package/modules/mapview.min.js +1 -1
  364. package/modules/mock-socket.d.ts +1 -1
  365. package/modules/mock-socket.esm.min.js +1 -1
  366. package/modules/mock-socket.min.cjs +1 -1
  367. package/modules/mock-socket.min.js +1 -1
  368. package/modules/presets.d.ts +1 -1
  369. package/modules/presets.esm.min.js +1 -1
  370. package/modules/presets.min.cjs +1 -1
  371. package/modules/presets.min.js +1 -1
  372. package/modules/react.d.ts +1 -1
  373. package/modules/react.esm.min.js +1 -1
  374. package/modules/react.min.cjs +1 -1
  375. package/modules/react.min.js +1 -1
  376. package/modules/scheduler.d.ts +12 -8
  377. package/modules/scheduler.esm.min.js +90 -78
  378. package/modules/scheduler.esm.min.js.map +2 -2
  379. package/modules/scheduler.min.cjs +90 -78
  380. package/modules/scheduler.min.js +90 -78
  381. package/modules/scheduler.min.js.map +2 -2
  382. package/modules/shell.d.ts +1 -1
  383. package/modules/shell.esm.min.js +1 -1
  384. package/modules/shell.min.cjs +1 -1
  385. package/modules/shell.min.js +1 -1
  386. package/modules/svelte.d.ts +1 -1
  387. package/modules/svelte.esm.min.js +1 -1
  388. package/modules/svelte.min.cjs +1 -1
  389. package/modules/svelte.min.js +1 -1
  390. package/modules/tabs.d.ts +1 -1
  391. package/modules/tabs.esm.min.js +1 -1
  392. package/modules/tabs.min.cjs +1 -1
  393. package/modules/tabs.min.js +1 -1
  394. package/modules/vue.d.ts +1 -1
  395. package/modules/vue.esm.min.js +1 -1
  396. package/modules/vue.min.cjs +1 -1
  397. package/modules/vue.min.js +1 -1
  398. package/modules/webcomponent.d.ts +1 -1
  399. package/modules/webcomponent.esm.min.js +2 -2
  400. package/modules/webcomponent.min.cjs +2 -2
  401. package/modules/webcomponent.min.js +2 -2
  402. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -9,6 +9,17 @@ and what it means for a grid already in production.
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [1.98.2] - 2026-10-10
13
+
14
+ ### Fixed
15
+
16
+ - **The scheduler's resource pane keeps person names readable when resources are grouped** (BACKLOG-0002163). Grouping by team used a fixed 240px group column inside a fixed 300px pane, squeezing the person column down to a mid-word clip; the pane's width is now the documented `resourceWidth` option (default 300px) behind a draggable, keyboard-operable divider, and the group column honours its own column-width setting — or the 120px synthesised default — so every name stays fully visible, or ellipsises with the full name as its native title when the column is too narrow.
17
+ - `resourceWidth` sets the pane at mount, `setResourceWidth(px)` resizes it programmatically, and the divider is a `role="separator"` you can drag or arrow through (8px, or 32px with Shift), clamped to the pane's range and announcing its value to screen readers.
18
+ - The width is carried by `getState()`/`setState(state)` alongside the zoom and scroll.
19
+
20
+ - **The scheduler's time-axis labels never overlap or clip, at any pixels-per-day** (BACKLOG-0002164). The day preset's 26px columns were narrower than the "Sun 4" labels painted on them, so neighbouring labels ran together; a bare px-per-day crossing the 18px mark into per-day labels collided the same way, and a whole-plan "Fit" topped out at 17px/day and could not fill a 1920px screen. The axis now picks a label granularity and format that fit the tightest column — shorter day names, every nth day, or week/month labels — and drops the one label that would run past the axis's right edge, so every zoom preset is legible in the stock theme at 1440 and 1920.
21
+ - `zoom: 'fit'` is a new preset that sizes the pixels-per-day to the timeline's width, so a plan's span fills it edge-to-edge; `getZoom()`, `getState()` and `zoom:change` report `'fit'` as the level.
22
+
12
23
  ## [1.98.1] - 2026-10-10
13
24
 
14
25
  ### Fixed
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.98.1 · [latticegrid.dev](https://www.latticegrid.dev) · TOCLOCO Inc
8
+ Version 1.98.2 · [latticegrid.dev](https://www.latticegrid.dev) · TOCLOCO Inc
9
9
 
10
10
  ---
11
11
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.98.1",
2
+ "version": "1.98.2",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
5
  "module": "./fesm2022/toclocoinc-lattice-grid-angular.mjs",
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.98.1</p>
385
+ <p class="rail__sub">API reference · v1.98.2</p>
386
386
  <nav>
387
387
  <div class="rail__group">
388
388
  <span class="rail__label">Start</span>
@@ -578,7 +578,7 @@
578
578
  </header>
579
579
 
580
580
  <p class="chips">
581
- <span class="chip">Version 1.98.1</span>
581
+ <span class="chip">Version 1.98.2</span>
582
582
  <span class="chip">Zero dependencies</span>
583
583
  <span class="chip"><a href="api-detail.html">Developer guide &rarr;</a></span>
584
584
  </p>
@@ -3458,7 +3458,7 @@ grid.destroy();
3458
3458
  <table>
3459
3459
  <thead><tr><th>Member</th><th>Returns</th><th>Description</th></tr></thead>
3460
3460
  <tbody>
3461
- <tr><td class="sig">getVersion()</td><td class="type">string</td><td class="desc">The version this grid came from, e.g. <code>'1.98.1'</code>. Also on the module as <code>getVersion()</code>, for when you have no grid to hand.</td></tr>
3461
+ <tr><td class="sig">getVersion()</td><td class="type">string</td><td class="desc">The version this grid came from, e.g. <code>'1.98.2'</code>. Also on the module as <code>getVersion()</code>, for when you have no grid to hand.</td></tr>
3462
3462
  <tr><td class="sig">get(key)</td><td class="type">unknown</td><td class="desc">Read any configuration key.</td></tr>
3463
3463
  <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>
3464
3464
  <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>
@@ -14389,11 +14389,13 @@ const scheduler = createScheduler(document.querySelector('#scheduler'), {
14389
14389
  resources: [{ id: 'alice', name: 'Alice', role: 'Design', capacity: 4 }],
14390
14390
  events: [{ id: 1, resourceId: 'alice', name: 'Review', startDate: '2026-03-02 09:00', endDate: '2026-03-02 11:00' }],
14391
14391
  createGrid, // the page's own grid factory (injected, never bundled)
14392
- zoom: 'day', // 'hour' | 'day' | 'week' | 'month' | 'quarter' | px-per-day
14392
+ zoom: 'day', // 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'fit' | px-per-day
14393
+ resourceWidth: 320, // the left resource pane's width in px (drag its divider, or setResourceWidth)
14393
14394
  fields: { resourceId: 'resourceId', startDate: 'startDate', endDate: 'endDate', name: 'name' },
14394
14395
  });</code></pre>
14395
- <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, or a bare pixels-per-day number — with pointer-wheel (Ctrl+wheel) and keyboard (+/&minus;) zoom and arrow-key scrolling. 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 &times; 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>
14396
+ <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 (+/&minus;) 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 &times; 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>
14396
14397
  <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 +/&minus; zoom — so the scheduler passes the same accessibility audit the grid does.</p>
14398
+ <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>
14397
14399
  <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> &mdash; so a bound dataset sees it exactly as it sees a grid edit &mdash; 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> &mdash; or named by <code>readOnlyWhen</code>/<code>resourceReadOnlyWhen</code> &mdash; refuses the gesture with a catalogued reason.</p>
14398
14400
  <div class="table-wrap">
14399
14401
  <table>
@@ -14402,7 +14404,7 @@ const scheduler = createScheduler(document.querySelector('#scheduler'), {
14402
14404
  <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>
14403
14405
  <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>
14404
14406
  <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>
14405
- <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>
14407
+ <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>
14406
14408
  <tr><td class="sig">groupBy / setGroupBy(field | (resource) =&gt; 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>
14407
14409
  <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>
14408
14410
  <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>
@@ -14416,7 +14418,8 @@ const scheduler = createScheduler(document.querySelector('#scheduler'), {
14416
14418
  <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 &mdash; each one undo step and one <code>event:change</code>, refused on a read-only event or resource.</td></tr>
14417
14419
  <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>
14418
14420
  <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>
14419
- <tr><td class="sig">getState() / setState(state)</td><td class="desc">Serialise and reapply the restorable view state (<code>zoom</code> and the timeline <code>scroll</code>) across browser history.</td></tr>
14421
+ <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>
14422
+ <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>
14420
14423
  <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>
14421
14424
  <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>
14422
14425
  <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>
@@ -14426,7 +14429,7 @@ const scheduler = createScheduler(document.querySelector('#scheduler'), {
14426
14429
  <h3 id="scheduler-example">Placement, lanes, workload, zoom, grouping, search, editing and export, executed</h3>
14427
14430
  <p class="section-note">Two resources, three events (two overlapping into two sub-lanes on Alice's row), the day axis, the
14428
14431
  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>
14429
- <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');
14432
+ <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');
14430
14433
  const sched = createScheduler(null, {
14431
14434
  resources: [
14432
14435
  { id: 'alice', name: 'Alice', role: 'Design', capacity: 4, calendar: 'weekends' },
@@ -14440,7 +14443,7 @@ const sched = createScheduler(null, {
14440
14443
  fields: { resourceId: 'resourceId', startDate: 'startDate', endDate: 'endDate', name: 'name' },
14441
14444
  resourceKey: 'id', eventKey: 'id',
14442
14445
  zoom: 'day', date: '2026-03-02',
14443
- defaultDuration: 60, rowHeight: 34, weekStartDay: 1,
14446
+ defaultDuration: 60, rowHeight: 34, resourceWidth: 320, weekStartDay: 1,
14444
14447
  todayLine: true, nonWorking: true,
14445
14448
  calendars: { weekends: 'weekends' },
14446
14449
  workload: true,
@@ -14473,6 +14476,9 @@ const filteredResources = sched.ctx.visibleResources.length; // 1
14473
14476
  sched.setResourceFilter(null);
14474
14477
  const wlRows = sched.workload.rows.size; // 2 (one band row per resource)
14475
14478
  const wlOver = sched.workload.overAllocated.length; // 0 (nothing over-allocated)
14479
+ const rwBefore = sched.getState().resourceWidth; // 320 (the configured pane width)
14480
+ sched.setResourceWidth(400);
14481
+ const rwAfter = sched.getState().resourceWidth; // 400 (resized via the API)
14476
14482
  const changed = sched.edit.move(1, 1).ok; // true (moved one day)
14477
14483
  const movedStart = sched.events.get(1).startDate; // 2026-03-03 09:00
14478
14484
  sched.undo();
@@ -14486,8 +14492,10 @@ const isSvg = /^&lt;svg /.test(svg); // true
14486
14492
  const hasBars = (svg.match(/&lt;rect /g) || []).length &gt;= 3; // true (one bar per placed event)
14487
14493
  const noVar = svg.includes('var(') === false; // true (print-safe palette, no tokens)
14488
14494
  const printed = sched.print(); // false (no window to open, headless)
14495
+ sched.setZoom('fit');
14496
+ const fit = sched.getZoom().level; // fit (fills the timeline width)
14489
14497
  sched.destroy();
14490
- 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>
14498
+ 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>
14491
14499
 
14492
14500
  <h2 id="kpi">The KPI (stat-tile) view</h2>
14493
14501
  <p><code>modules/kpi</code> is an opt-in view of a dataset as a panel of <strong>stat tiles</strong> &mdash; each tile an aggregate over the routed rows: a sum, an average, a min/max, a count, a distinct count, or a host reducer. It is the fourth first-class viewer beside the grid, the kanban and the gantt, in the same shape: a separate bundle that adds no weight to a page that does not load it, changes nothing in grid core, and pulls in no dependency. A KPI panel is <em>just another dataset viewer</em>: it consumes data through the same keyed-diff contract a grid exposes, <code>kpi.rows.apply({ add, update, remove })</code>, so a Data Router can <code>attach(value, kpi)</code> and drive a KPI panel beside a grid, a kanban and a chart off one feed.</p>
@@ -29295,10 +29303,11 @@ return `next ${p.mean.toFixed(1)}; r2 ${f.r2.toFixed(1)}; band ${p.upper - p.low
29295
29303
  <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>
29296
29304
  <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>
29297
29305
  <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>
29298
- <tr><td class="name">zoom</td><td class="type"><a href="#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>
29306
+ <tr><td class="name">zoom</td><td class="type"><a href="#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>
29299
29307
  <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>
29300
29308
  <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>
29301
29309
  <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>
29310
+ <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>
29302
29311
  <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>
29303
29312
  <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>
29304
29313
  <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>
@@ -29430,12 +29439,13 @@ return `next ${p.mean.toFixed(1)}; r2 ${f.r2.toFixed(1)}; band ${p.upper - p.low
29430
29439
  <tbody>
29431
29440
  <tr><td class="name">refresh</td><td class="type">(): <a href="#type-Scheduler">Scheduler</a></td><td class="desc">&mdash;</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>
29432
29441
  <tr><td class="name">setEvents</td><td class="type">(events: <a href="#type-SchedulerRow">SchedulerRow</a>[]): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>events: <a href="#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>
29433
- <tr><td class="name">setZoom</td><td class="type">(zoom: <a href="#type-SchedulerZoom">SchedulerZoom</a>): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>zoom: <a href="#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`.</td></tr>
29434
- <tr><td class="name">getZoom</td><td class="type">(): { level: string; px: number }</td><td class="desc">&mdash;</td><td class="type"><code>{ level: string; px: number }</code></td><td class="desc">The current zoom `{ level, px }`.</td></tr>
29442
+ <tr><td class="name">setZoom</td><td class="type">(zoom: <a href="#type-SchedulerZoom">SchedulerZoom</a>): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>zoom: <a href="#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>
29443
+ <tr><td class="name">getZoom</td><td class="type">(): { level: string; px: number }</td><td class="desc">&mdash;</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>
29435
29444
  <tr><td class="name">setGroupBy</td><td class="type">(groupBy: string | ((resource: <a href="#type-SchedulerRow">SchedulerRow</a>) =&gt; unknown) | null): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>groupBy: string | ((resource: <a href="#type-SchedulerRow">SchedulerRow</a>) =&gt; 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>
29436
29445
  <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>
29437
29446
  <tr><td class="name">setResourceFilter</td><td class="type">(fn: ((resource: <a href="#type-SchedulerRow">SchedulerRow</a>) =&gt; unknown) | null): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>fn: ((resource: <a href="#type-SchedulerRow">SchedulerRow</a>) =&gt; 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>
29438
29447
  <tr><td class="name">setEventFilter</td><td class="type">(fn: ((event: <a href="#type-SchedulerRow">SchedulerRow</a>) =&gt; unknown) | null): <a href="#type-Scheduler">Scheduler</a></td><td class="desc"><code>fn: ((event: <a href="#type-SchedulerRow">SchedulerRow</a>) =&gt; 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>
29448
+ <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>
29439
29449
  <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>
29440
29450
  <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>
29441
29451
  <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>
@@ -29447,7 +29457,7 @@ return `next ${p.mean.toFixed(1)}; r2 ${f.r2.toFixed(1)}; band ${p.upper - p.low
29447
29457
  <tr><td class="name">toPNG</td><td class="type">(pngOpts?: { range?: { from?: number | string | Date; to?: number | string | Date }; scale?: number; background?: string; }): Promise&lt;Blob | null&gt;</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&lt;Blob | null&gt;</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>
29448
29458
  <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) =&gt; string) | false; footer?: string | ((page: number, pages: number) =&gt; 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) =&gt; string) | false; footer?: string | ((page: number, pages: number) =&gt; 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>
29449
29459
  <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>
29450
- <tr><td class="name">getState</td><td class="type">(): { version: number; zoom: string; scroll: { left: number; top: number } }</td><td class="desc">&mdash;</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>
29460
+ <tr><td class="name">getState</td><td class="type">(): { version: number; zoom: string; scroll: { left: number; top: number }; resourceWidth: number }</td><td class="desc">&mdash;</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>
29451
29461
  <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>
29452
29462
  <tr><td class="name">destroy</td><td class="type">(): void</td><td class="desc">&mdash;</td><td class="type"><code>void</code></td><td class="desc">Tear the scheduler down.</td></tr>
29453
29463
  </tbody>
@@ -35785,8 +35795,8 @@ return `next ${p.mean.toFixed(1)}; r2 ${f.r2.toFixed(1)}; band ${p.upper - p.low
35785
35795
  <p class="type-def"><code>type SchedulerRow = Record&lt;string, unknown&gt;</code></p>
35786
35796
  <p class="section-note"><small>Declared in <code>lattice-grid/modules/scheduler</code>.</small></p>
35787
35797
  <h4 id="type-SchedulerZoom">SchedulerZoom</h4>
35788
- <p class="section-note">A scheduler zoom level name, or a bare pixels-per-day number.</p>
35789
- <p class="type-def"><code>type SchedulerZoom = 'hour' | 'day' | 'week' | 'month' | 'quarter' | number</code></p>
35798
+ <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>
35799
+ <p class="type-def"><code>type SchedulerZoom = 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'fit' | number</code></p>
35790
35800
  <p class="section-note"><small>Declared in <code>lattice-grid/modules/scheduler</code>.</small></p>
35791
35801
  <h4 id="type-ScrollbarMode">ScrollbarMode</h4>
35792
35802
  <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>
@@ -35976,7 +35986,7 @@ return `next ${p.mean.toFixed(1)}; r2 ${f.r2.toFixed(1)}; band ${p.upper - p.low
35976
35986
  <!-- END GENERATED TYPE REFERENCE -->
35977
35987
 
35978
35988
  <footer>
35979
- Lattice Grid 1.98.1 · Copyright © 2026 TOCLOCO Inc. All rights reserved.
35989
+ Lattice Grid 1.98.2 · Copyright © 2026 TOCLOCO Inc. All rights reserved.
35980
35990
  This document describes the behaviour of the shipped library. Where this guide and the code
35981
35991
  disagree, the code wins: please <a href="https://www.latticegrid.dev">tell us</a>.
35982
35992
  </footer>
@@ -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.98.1</title>
16
+ <title>Adapters 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/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.98.1</title>
16
+ <title>AI 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
@@ -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.98.1</title>
16
+ <title>Alarms 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
@@ -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>Calendar API Reference — Lattice Grid 1.98.1</title>
16
+ <title>Calendar 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
@@ -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.98.1</title>
16
+ <title>Charts 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
@@ -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>Dashboard API Reference — Lattice Grid 1.98.1</title>
16
+ <title>Dashboard 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
@@ -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.98.1</title>
16
+ <title>Data router 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
@@ -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>deck.gl API Reference — Lattice Grid 1.98.1</title>
16
+ <title>deck.gl 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
@@ -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>Designer API Reference — Lattice Grid 1.98.1</title>
16
+ <title>Designer 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
@@ -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.98.1</title>
16
+ <title>Gantt 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
@@ -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>Geometry API Reference — Lattice Grid 1.98.1</title>
16
+ <title>Geometry 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
@@ -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.98.1</title>
16
+ <title>Grid 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
@@ -1870,7 +1870,7 @@ grid.destroy();
1870
1870
  <table>
1871
1871
  <thead><tr><th>Member</th><th>Returns</th><th>Description</th></tr></thead>
1872
1872
  <tbody>
1873
- <tr><td class="sig">getVersion()</td><td class="type">string</td><td class="desc">The version this grid came from, e.g. <code>'1.98.1'</code>. Also on the module as <code>getVersion()</code>, for when you have no grid to hand.</td></tr>
1873
+ <tr><td class="sig">getVersion()</td><td class="type">string</td><td class="desc">The version this grid came from, e.g. <code>'1.98.2'</code>. Also on the module as <code>getVersion()</code>, for when you have no grid to hand.</td></tr>
1874
1874
  <tr><td class="sig">get(key)</td><td class="type">unknown</td><td class="desc">Read any configuration key.</td></tr>
1875
1875
  <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>
1876
1876
  <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>
@@ -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.98.1</title>
16
+ <title>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,7 +450,7 @@
450
450
  <tr><td class="name"><a href="kanban.html">The board (kanban) view</a></td><td class="desc"><code>createKanban</code>: columns from any status property, drag or keyboard moves that write back, swimlanes, sprints, epics and the child grid.</td><td class="type">1</td><td class="type">50</td><td class="type">384</td></tr>
451
451
  <tr><td class="name"><a href="gantt.html">The Gantt module</a></td><td class="desc"><code>createGantt</code>: the scheduling engine and the critical path, the four dependency links, milestones and summaries, and editable bars.</td><td class="type">1</td><td class="type">131</td><td class="type">891</td></tr>
452
452
  <tr><td class="name"><a href="calendar.html">The calendar viewer</a></td><td class="desc"><code>createCalendar</code>: a month grid and a week day-grid of rows as cards, keyed by a date field, with navigation, overflow and the viewer contract.</td><td class="type">1</td><td class="type">11</td><td class="type">90</td></tr>
453
- <tr><td class="name"><a href="scheduler.html">The resource scheduler</a></td><td class="desc"><code>createScheduler</code>: resources as rows in a left grid and events as bars on a shared time axis, with the Gantt's zoom scale, per-resource calendars and virtualised rows and time.</td><td class="type">1</td><td class="type">14</td><td class="type">102</td></tr>
453
+ <tr><td class="name"><a href="scheduler.html">The resource scheduler</a></td><td class="desc"><code>createScheduler</code>: resources as rows in a left grid and events as bars on a shared time axis, with the Gantt's zoom scale, per-resource calendars and virtualised rows and time.</td><td class="type">1</td><td class="type">14</td><td class="type">104</td></tr>
454
454
  <tr><td class="name"><a href="tabs.html">The tabbed grid</a></td><td class="desc"><code>createTabs</code>: a tab strip where each tab holds a grid, a board, a KPI strip or a Gantt, and the tablist keyboard model.</td><td class="type">1</td><td class="type">7</td><td class="type">57</td></tr>
455
455
  <tr><td class="name"><a href="layout.html">The dashboard layout</a></td><td class="desc"><code>createLayout</code>: windows a reader moves, resizes and closes, the arrangement saved as plain JSON, locking, and the cancellable gestures.</td><td class="type">1</td><td class="type">15</td><td class="type">133</td></tr>
456
456
  <tr><td class="name"><a href="shell.html">The shell module</a></td><td class="desc"><code>createShell</code>: cells nested as rows and columns to any depth, sized by flexbox so the DOM is complete and measured the moment the factory returns.</td><td class="type">1</td><td class="type">25</td><td class="type">153</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>Kanban API Reference — Lattice Grid 1.98.1</title>
16
+ <title>Kanban 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/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.98.1</title>
16
+ <title>KPI 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
@@ -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.98.1</title>
16
+ <title>Layout 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
@@ -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>Leaflet API Reference — Lattice Grid 1.98.1</title>
16
+ <title>Leaflet 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
@@ -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>List API Reference — Lattice Grid 1.98.1</title>
16
+ <title>List 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
@@ -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>Map view API Reference — Lattice Grid 1.98.1</title>
16
+ <title>Map view 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
@@ -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.98.1</title>
16
+ <title>Mock socket 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
@@ -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>Presets API Reference — Lattice Grid 1.98.1</title>
16
+ <title>Presets 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