@toclocoinc/lattice-grid 1.68.1 → 1.68.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 (164) hide show
  1. package/README.md +26 -1
  2. package/angular/fesm2022/toclocoinc-lattice-grid-angular.mjs +1 -0
  3. package/angular/package.json +1 -1
  4. package/docs/API.html +3833 -1278
  5. package/docs/api-detail.html +101 -4
  6. package/lattice-grid.d.ts +2626 -143
  7. package/lattice-grid.esm.min.js +192 -36
  8. package/lattice-grid.min.cjs +192 -36
  9. package/lattice-grid.min.js +192 -36
  10. package/modules/ai.d.ts +111 -13
  11. package/modules/ai.esm.min.js +3 -3
  12. package/modules/ai.min.cjs +3 -3
  13. package/modules/ai.min.js +3 -3
  14. package/modules/angular.d.ts +1 -1
  15. package/modules/angular.esm.min.js +3 -3
  16. package/modules/angular.min.cjs +3 -3
  17. package/modules/angular.min.js +3 -3
  18. package/modules/chart-alluvial.d.ts +1 -1
  19. package/modules/chart-alluvial.esm.min.js +1 -1
  20. package/modules/chart-alluvial.min.cjs +1 -1
  21. package/modules/chart-alluvial.min.js +1 -1
  22. package/modules/chart-arc.d.ts +1 -1
  23. package/modules/chart-arc.esm.min.js +1 -1
  24. package/modules/chart-arc.min.cjs +1 -1
  25. package/modules/chart-arc.min.js +1 -1
  26. package/modules/chart-bubblemap.d.ts +1 -1
  27. package/modules/chart-bubblemap.esm.min.js +1 -1
  28. package/modules/chart-bubblemap.min.cjs +1 -1
  29. package/modules/chart-bubblemap.min.js +1 -1
  30. package/modules/chart-bump.d.ts +1 -1
  31. package/modules/chart-bump.esm.min.js +1 -1
  32. package/modules/chart-bump.min.cjs +1 -1
  33. package/modules/chart-bump.min.js +1 -1
  34. package/modules/chart-calendar.d.ts +1 -1
  35. package/modules/chart-calendar.esm.min.js +1 -1
  36. package/modules/chart-calendar.min.cjs +1 -1
  37. package/modules/chart-calendar.min.js +1 -1
  38. package/modules/chart-decomposition.d.ts +1 -1
  39. package/modules/chart-decomposition.esm.min.js +1 -1
  40. package/modules/chart-decomposition.min.cjs +1 -1
  41. package/modules/chart-decomposition.min.js +1 -1
  42. package/modules/chart-diverging.d.ts +1 -1
  43. package/modules/chart-diverging.esm.min.js +1 -1
  44. package/modules/chart-diverging.min.cjs +1 -1
  45. package/modules/chart-diverging.min.js +1 -1
  46. package/modules/chart-dumbbell.d.ts +1 -1
  47. package/modules/chart-dumbbell.esm.min.js +1 -1
  48. package/modules/chart-dumbbell.min.cjs +1 -1
  49. package/modules/chart-dumbbell.min.js +1 -1
  50. package/modules/chart-fan.d.ts +1 -1
  51. package/modules/chart-fan.esm.min.js +1 -1
  52. package/modules/chart-fan.min.cjs +1 -1
  53. package/modules/chart-fan.min.js +1 -1
  54. package/modules/chart-hexbin.d.ts +1 -1
  55. package/modules/chart-hexbin.esm.min.js +1 -1
  56. package/modules/chart-hexbin.min.cjs +1 -1
  57. package/modules/chart-hexbin.min.js +1 -1
  58. package/modules/chart-hexmap.d.ts +1 -1
  59. package/modules/chart-hexmap.esm.min.js +1 -1
  60. package/modules/chart-hexmap.min.cjs +1 -1
  61. package/modules/chart-hexmap.min.js +1 -1
  62. package/modules/chart-icicle.d.ts +1 -1
  63. package/modules/chart-icicle.esm.min.js +1 -1
  64. package/modules/chart-icicle.min.cjs +1 -1
  65. package/modules/chart-icicle.min.js +1 -1
  66. package/modules/chart-markermap.d.ts +1 -1
  67. package/modules/chart-markermap.esm.min.js +1 -1
  68. package/modules/chart-markermap.min.cjs +1 -1
  69. package/modules/chart-markermap.min.js +1 -1
  70. package/modules/chart-parallel.d.ts +1 -1
  71. package/modules/chart-parallel.esm.min.js +1 -1
  72. package/modules/chart-parallel.min.cjs +1 -1
  73. package/modules/chart-parallel.min.js +1 -1
  74. package/modules/chart-ridgeline.d.ts +1 -1
  75. package/modules/chart-ridgeline.esm.min.js +1 -1
  76. package/modules/chart-ridgeline.min.cjs +1 -1
  77. package/modules/chart-ridgeline.min.js +1 -1
  78. package/modules/chart-roc.d.ts +1 -1
  79. package/modules/chart-roc.esm.min.js +1 -1
  80. package/modules/chart-roc.min.cjs +1 -1
  81. package/modules/chart-roc.min.js +1 -1
  82. package/modules/chart-slope.d.ts +1 -1
  83. package/modules/chart-slope.esm.min.js +1 -1
  84. package/modules/chart-slope.min.cjs +1 -1
  85. package/modules/chart-slope.min.js +1 -1
  86. package/modules/chart-splom.d.ts +1 -1
  87. package/modules/chart-splom.esm.min.js +1 -1
  88. package/modules/chart-splom.min.cjs +1 -1
  89. package/modules/chart-splom.min.js +1 -1
  90. package/modules/chart-waffle.d.ts +1 -1
  91. package/modules/chart-waffle.esm.min.js +1 -1
  92. package/modules/chart-waffle.min.cjs +1 -1
  93. package/modules/chart-waffle.min.js +1 -1
  94. package/modules/charts.d.ts +1 -1
  95. package/modules/charts.esm.min.js +9 -9
  96. package/modules/charts.min.cjs +9 -9
  97. package/modules/charts.min.js +9 -9
  98. package/modules/data-router.d.ts +35 -5
  99. package/modules/data-router.esm.min.js +9 -4
  100. package/modules/data-router.min.cjs +9 -4
  101. package/modules/data-router.min.js +9 -4
  102. package/modules/devtools.d.ts +1 -1
  103. package/modules/devtools.esm.min.js +1 -1
  104. package/modules/devtools.min.cjs +1 -1
  105. package/modules/devtools.min.js +1 -1
  106. package/modules/dhtmlx-compat.d.ts +1 -1
  107. package/modules/dhtmlx-compat.esm.min.js +3 -3
  108. package/modules/dhtmlx-compat.min.cjs +3 -3
  109. package/modules/dhtmlx-compat.min.js +3 -3
  110. package/modules/gantt.d.ts +283 -33
  111. package/modules/gantt.esm.min.js +8 -4
  112. package/modules/gantt.min.cjs +8 -4
  113. package/modules/gantt.min.js +8 -4
  114. package/modules/geo-europe-nuts.d.ts +1 -1
  115. package/modules/geo-europe-nuts.esm.min.js +1 -1
  116. package/modules/geo-uk.d.ts +1 -1
  117. package/modules/geo-uk.esm.min.js +1 -1
  118. package/modules/geo-us-states.d.ts +1 -1
  119. package/modules/geo-us-states.esm.min.js +1 -1
  120. package/modules/geo-world-110m.d.ts +1 -1
  121. package/modules/geo-world-110m.esm.min.js +1 -1
  122. package/modules/geo-world-50m.d.ts +1 -1
  123. package/modules/geo-world-50m.esm.min.js +1 -1
  124. package/modules/htmx.d.ts +1 -1
  125. package/modules/htmx.esm.min.js +192 -36
  126. package/modules/htmx.min.cjs +192 -36
  127. package/modules/htmx.min.js +192 -36
  128. package/modules/kanban.d.ts +456 -5
  129. package/modules/kanban.esm.min.js +3 -3
  130. package/modules/kanban.min.cjs +3 -3
  131. package/modules/kanban.min.js +3 -3
  132. package/modules/kpi.d.ts +68 -4
  133. package/modules/kpi.esm.min.js +3 -3
  134. package/modules/kpi.min.cjs +3 -3
  135. package/modules/kpi.min.js +3 -3
  136. package/modules/layout.d.ts +134 -8
  137. package/modules/layout.esm.min.js +3 -3
  138. package/modules/layout.min.cjs +3 -3
  139. package/modules/layout.min.js +3 -3
  140. package/modules/mock-socket.d.ts +1 -1
  141. package/modules/mock-socket.esm.min.js +1 -1
  142. package/modules/mock-socket.min.cjs +1 -1
  143. package/modules/mock-socket.min.js +1 -1
  144. package/modules/react.d.ts +5 -1
  145. package/modules/react.esm.min.js +3 -3
  146. package/modules/react.min.cjs +3 -3
  147. package/modules/react.min.js +3 -3
  148. package/modules/svelte.d.ts +1 -1
  149. package/modules/svelte.esm.min.js +3 -3
  150. package/modules/svelte.min.cjs +3 -3
  151. package/modules/svelte.min.js +3 -3
  152. package/modules/tabs.d.ts +96 -20
  153. package/modules/tabs.esm.min.js +3 -3
  154. package/modules/tabs.min.cjs +3 -3
  155. package/modules/tabs.min.js +3 -3
  156. package/modules/vue.d.ts +5 -1
  157. package/modules/vue.esm.min.js +3 -3
  158. package/modules/vue.min.cjs +3 -3
  159. package/modules/vue.min.js +3 -3
  160. package/modules/webcomponent.d.ts +10 -39
  161. package/modules/webcomponent.esm.min.js +237 -40
  162. package/modules/webcomponent.min.cjs +237 -40
  163. package/modules/webcomponent.min.js +237 -40
  164. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, kpi module
2
+ * Lattice Grid 1.68.2, kpi module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
54
54
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
55
55
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
56
56
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
57
- const STAMPED_VERSION="1.68.1";
57
+ const STAMPED_VERSION="1.68.2";
58
58
  async function resolveVersion(){
59
59
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
60
60
  return STAMPED_VERSION;
61
61
  }
62
- const VERSION="1.68.1";
62
+ const VERSION="1.68.2";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, kpi module
2
+ * Lattice Grid 1.68.2, kpi module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
54
54
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
55
55
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
56
56
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
57
- const STAMPED_VERSION="1.68.1";
57
+ const STAMPED_VERSION="1.68.2";
58
58
  async function resolveVersion(){
59
59
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
60
60
  return STAMPED_VERSION;
61
61
  }
62
- const VERSION="1.68.1";
62
+ const VERSION="1.68.2";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, layout module type declarations
2
+ * Lattice Grid 1.68.2, layout module type declarations
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -208,6 +208,134 @@ interface LayoutCloseEvent {
208
208
  defaultPrevented?: boolean;
209
209
  }
210
210
 
211
+ /**
212
+ * `window:moved`: a window finished moving.
213
+ *
214
+ * The past-tense event, so there is no `preventDefault` on it — the move has
215
+ * happened, and `beforeWindowMove` ({@link LayoutMoveEvent}) is where it could
216
+ * have been stopped.
217
+ */
218
+ interface LayoutWindowMovedEvent {
219
+ /** Which window moved. */
220
+ id: string;
221
+ /** Where it was before the gesture. */
222
+ from: LayoutPlacement;
223
+ /** Where it was asked to go. */
224
+ to: LayoutPlacement;
225
+ /** Where it actually ended up, which under `compact: 'vertical'` may differ from `to`. */
226
+ landed: LayoutPlacement;
227
+ /** Who caused it: `user` for a drag or a keyboard move, `api` for `setWindow`. */
228
+ origin: 'api' | 'user';
229
+ }
230
+
231
+ /**
232
+ * `window:closed`: a window was removed and its payload container handed back.
233
+ *
234
+ * The past-tense event: no `preventDefault`, because the window has gone. The
235
+ * container is **not** destroyed — whatever the host mounted in it is the
236
+ * host's to tear down.
237
+ */
238
+ interface LayoutWindowClosedEvent {
239
+ /** Which window closed. */
240
+ id: string;
241
+ /** The id of its content container. */
242
+ payloadId: string;
243
+ /** The container itself, handed back so the host can destroy what it mounted. */
244
+ payload: HTMLElement;
245
+ /** Who caused it: `user` for the close control, `api` for a call. */
246
+ origin: 'api' | 'user';
247
+ }
248
+
249
+ /**
250
+ * `windowMove:cancelled` and `windowResize:cancelled`: a `before…` handler
251
+ * refused the gesture. A notification, so it carries no `preventDefault`.
252
+ */
253
+ interface LayoutMoveCancelledEvent {
254
+ /** Which window did not move. */
255
+ id: string;
256
+ /** Where it is, and stays. */
257
+ from: LayoutPlacement;
258
+ /** Where it would have gone. */
259
+ to: LayoutPlacement;
260
+ /** Who asked for the gesture that was refused: `user` for a drag or keyboard move, `api` for `setWindow`. */
261
+ origin: 'api' | 'user';
262
+ /** The reason given to `preventDefault`, or `'prevented'`. */
263
+ reason: string;
264
+ }
265
+
266
+ /**
267
+ * `windowClose:cancelled`: a `beforeWindowClose` handler refused the close. A
268
+ * notification, so it carries no `preventDefault`.
269
+ */
270
+ interface LayoutCloseCancelledEvent {
271
+ /** Which window stayed open. */
272
+ id: string;
273
+ /** The id of its content container. */
274
+ payloadId: string;
275
+ /** Who asked for the close that was refused. */
276
+ origin: 'api' | 'user';
277
+ /** The reason given to `preventDefault`, or `'prevented'`. */
278
+ reason: string;
279
+ }
280
+
281
+ /**
282
+ * The events a dashboard layout raises.
283
+ *
284
+ * The layout's own, not a grid's: `grid.on` takes {@link EventName} and knows
285
+ * nothing about these. Each has a matching `on…` config callback (`onWindowMoved`,
286
+ * `onBeforeWindowClose`, …) and both routes fire.
287
+ *
288
+ * The three `before…` events are cancellable: call `preventDefault(reason?)` on
289
+ * the payload, or return a Promise to hold the gesture until it settles; a veto
290
+ * fires the matching `…:cancelled` carrying the reason. Subscribing to `'*'`
291
+ * receives every past-tense event and never gates.
292
+ */
293
+ type LayoutEventName =
294
+ /** A window finished moving, with where it was asked to go and where it actually landed. */
295
+ | 'window:moved'
296
+ /** A window's payload container changed size, measured in CSS pixels — including on the opening frame. */
297
+ | 'window:resized'
298
+ /** A window was closed and its payload container handed back. */
299
+ | 'window:closed'
300
+ /** The arrangement settled after an add, close, move, resize, minimise, restore or `setLayout`. */
301
+ | 'layout:changed'
302
+ /** A window is about to move; cancellable. */
303
+ | 'beforeWindowMove'
304
+ /** A window is about to be resized by a drag or a call; cancellable. */
305
+ | 'beforeWindowResize'
306
+ /** A window is about to be closed; cancellable. */
307
+ | 'beforeWindowClose'
308
+ /** A `beforeWindowMove` handler refused the move. */
309
+ | 'windowMove:cancelled'
310
+ /** A `beforeWindowResize` handler refused the resize. */
311
+ | 'windowResize:cancelled'
312
+ /** A `beforeWindowClose` handler refused the close. */
313
+ | 'windowClose:cancelled';
314
+
315
+ /** What a handler receives, per layout event. */
316
+ interface LayoutEventPayloads {
317
+ /** Which window moved, from where, to where, and where it landed. */
318
+ 'window:moved': LayoutWindowMovedEvent;
319
+ /** The measured content box of the window's payload container. */
320
+ 'window:resized': LayoutResizeEvent;
321
+ /** The window that closed, and the container handed back. */
322
+ 'window:closed': LayoutWindowClosedEvent;
323
+ /** The arrangement, and what settled it. */
324
+ 'layout:changed': LayoutChangedEvent;
325
+ /** The move about to be applied, with `preventDefault` to stop it. */
326
+ beforeWindowMove: LayoutMoveEvent;
327
+ /** The resize about to be applied, with `preventDefault` to stop it. */
328
+ beforeWindowResize: LayoutMoveEvent;
329
+ /** The close about to happen, with `preventDefault` to refuse it. */
330
+ beforeWindowClose: LayoutCloseEvent;
331
+ /** The move that was refused, and why. */
332
+ 'windowMove:cancelled': LayoutMoveCancelledEvent;
333
+ /** The resize that was refused, and why. */
334
+ 'windowResize:cancelled': LayoutMoveCancelledEvent;
335
+ /** The close that was refused, and why. */
336
+ 'windowClose:cancelled': LayoutCloseCancelledEvent;
337
+ }
338
+
211
339
  /** The payload of `layout:changed`: the whole arrangement, plus what moved it. */
212
340
  interface LayoutChangedEvent extends LayoutSnapshot {
213
341
  /**
@@ -428,17 +556,15 @@ interface Layout {
428
556
  /**
429
557
  * Subscribe to a layout event, or to `'*'` for every past-tense one; returns a function
430
558
  * that unsubscribes. Only an explicit `before…` subscription can cancel an action — the
431
- * `'*'` stream never gates.
559
+ * `'*'` stream never gates. What each event carries is {@link LayoutEventPayloads}; the
560
+ * handler is declared with the widest of them, so narrow on the name inside it.
432
561
  */
433
562
  on(
434
- name: 'window:moved' | 'window:resized' | 'window:closed' | 'layout:changed'
435
- | 'beforeWindowMove' | 'beforeWindowResize' | 'beforeWindowClose'
436
- | 'windowMove:cancelled' | 'windowResize:cancelled' | 'windowClose:cancelled'
437
- | '*' | string,
438
- fn: (event: any) => unknown,
563
+ name: LayoutEventName | '*',
564
+ fn: (event: LayoutEventPayloads[LayoutEventName]) => unknown,
439
565
  ): () => void;
440
566
  /** Remove a handler registered with `on`. */
441
- off(name: string, fn: (event: any) => unknown): void;
567
+ off(name: LayoutEventName | '*', fn: (event: LayoutEventPayloads[LayoutEventName]) => unknown): void;
442
568
  /** Tear the layout down; whatever the host mounted in a payload is the host's to destroy. */
443
569
  destroy(): void;
444
570
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, layout module
2
+ * Lattice Grid 1.68.2, layout module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -52,12 +52,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
52
52
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
53
53
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
54
54
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
55
- const STAMPED_VERSION="1.68.1";
55
+ const STAMPED_VERSION="1.68.2";
56
56
  async function resolveVersion(){
57
57
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
58
58
  return STAMPED_VERSION;
59
59
  }
60
- const VERSION="1.68.1";
60
+ const VERSION="1.68.2";
61
61
  const warned=new Set();
62
62
  const WARNED_LIMIT=2000;
63
63
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, layout module
2
+ * Lattice Grid 1.68.2, layout module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
54
54
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
55
55
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
56
56
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
57
- const STAMPED_VERSION="1.68.1";
57
+ const STAMPED_VERSION="1.68.2";
58
58
  async function resolveVersion(){
59
59
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
60
60
  return STAMPED_VERSION;
61
61
  }
62
- const VERSION="1.68.1";
62
+ const VERSION="1.68.2";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, layout module
2
+ * Lattice Grid 1.68.2, layout module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
54
54
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
55
55
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
56
56
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
57
- const STAMPED_VERSION="1.68.1";
57
+ const STAMPED_VERSION="1.68.2";
58
58
  async function resolveVersion(){
59
59
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
60
60
  return STAMPED_VERSION;
61
61
  }
62
- const VERSION="1.68.1";
62
+ const VERSION="1.68.2";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, mock-socket module type declarations
2
+ * Lattice Grid 1.68.2, mock-socket module type declarations
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, mock-socket module
2
+ * Lattice Grid 1.68.2, mock-socket module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, mock-socket module
2
+ * Lattice Grid 1.68.2, mock-socket module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, mock-socket module
2
+ * Lattice Grid 1.68.2, mock-socket module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, react module type declarations
2
+ * Lattice Grid 1.68.2, react module type declarations
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -202,6 +202,10 @@ export interface LatticeTabSpec {
202
202
  label?: string;
203
203
  /** A React element, or a function returning one, rendered through a portal. */
204
204
  content?: unknown | (() => unknown);
205
+ /**
206
+ * Any other prop the host wants to carry on the tab. Passed through untouched, so a
207
+ * React host can key its own state off the same object the grid holds.
208
+ */
205
209
  [key: string]: unknown;
206
210
  }
207
211
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, react module
2
+ * Lattice Grid 1.68.2, react module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -52,12 +52,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
52
52
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
53
53
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
54
54
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
55
- const STAMPED_VERSION="1.68.1";
55
+ const STAMPED_VERSION="1.68.2";
56
56
  async function resolveVersion(){
57
57
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
58
58
  return STAMPED_VERSION;
59
59
  }
60
- const VERSION="1.68.1";
60
+ const VERSION="1.68.2";
61
61
  const warned=new Set();
62
62
  const WARNED_LIMIT=2000;
63
63
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, react module
2
+ * Lattice Grid 1.68.2, react module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
54
54
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
55
55
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
56
56
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
57
- const STAMPED_VERSION="1.68.1";
57
+ const STAMPED_VERSION="1.68.2";
58
58
  async function resolveVersion(){
59
59
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
60
60
  return STAMPED_VERSION;
61
61
  }
62
- const VERSION="1.68.1";
62
+ const VERSION="1.68.2";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, react module
2
+ * Lattice Grid 1.68.2, react module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
54
54
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
55
55
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
56
56
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
57
- const STAMPED_VERSION="1.68.1";
57
+ const STAMPED_VERSION="1.68.2";
58
58
  async function resolveVersion(){
59
59
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
60
60
  return STAMPED_VERSION;
61
61
  }
62
- const VERSION="1.68.1";
62
+ const VERSION="1.68.2";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, svelte module type declarations
2
+ * Lattice Grid 1.68.2, svelte module type declarations
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, svelte module
2
+ * Lattice Grid 1.68.2, svelte module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -52,12 +52,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
52
52
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
53
53
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
54
54
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
55
- const STAMPED_VERSION="1.68.1";
55
+ const STAMPED_VERSION="1.68.2";
56
56
  async function resolveVersion(){
57
57
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
58
58
  return STAMPED_VERSION;
59
59
  }
60
- const VERSION="1.68.1";
60
+ const VERSION="1.68.2";
61
61
  const warned=new Set();
62
62
  const WARNED_LIMIT=2000;
63
63
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, svelte module
2
+ * Lattice Grid 1.68.2, svelte module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
54
54
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
55
55
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
56
56
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
57
- const STAMPED_VERSION="1.68.1";
57
+ const STAMPED_VERSION="1.68.2";
58
58
  async function resolveVersion(){
59
59
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
60
60
  return STAMPED_VERSION;
61
61
  }
62
- const VERSION="1.68.1";
62
+ const VERSION="1.68.2";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, svelte module
2
+ * Lattice Grid 1.68.2, svelte module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
54
54
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
55
55
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
56
56
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
57
- const STAMPED_VERSION="1.68.1";
57
+ const STAMPED_VERSION="1.68.2";
58
58
  async function resolveVersion(){
59
59
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
60
60
  return STAMPED_VERSION;
61
61
  }
62
- const VERSION="1.68.1";
62
+ const VERSION="1.68.2";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
package/modules/tabs.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, tabs module type declarations
2
+ * Lattice Grid 1.68.2, tabs module type declarations
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -71,26 +71,101 @@ interface TabDescriptor {
71
71
  badgeTone?: 'good' | 'warn' | 'bad' | 'unknown' | ((count: number | null, tab: { id: string; label: string; from: string | null }) => 'good' | 'warn' | 'bad' | 'unknown' | null);
72
72
  }
73
73
 
74
- /** The payload every tab-change event carries. */
74
+ /**
75
+ * `beforeTabChange`: a switch is about to be applied, and may be refused.
76
+ *
77
+ * Delivered through `packages/modules/shared/emitter.js`'s `emitBefore`, which
78
+ * builds the event from the module's action context plus `type`, the resolved
79
+ * `origin` and the veto surface — so every member below is always present on
80
+ * this event. A handler refuses the switch by calling `preventDefault(reason?)`
81
+ * or by returning a Promise that resolves `false`; the active tab then does not
82
+ * change and `tabChange:cancelled` fires carrying the reason.
83
+ */
75
84
  interface TabChangeEvent {
85
+ /** Which event this is: `beforeTabChange`. */
86
+ type: string;
76
87
  /** The tab being switched to. */
77
88
  id: string;
78
- /** The tab being left, or null for the first activation. */
89
+ /** The tab being left, or null when no tab was active. */
79
90
  previousId: string | null;
80
91
  /**
81
- * Who caused the switch: `user` for a click or keypress, `api` for `activate()`, `init`
82
- * for the opening tab. Defaults to `user`.
92
+ * Who asked for the switch: `user` for a click or a keypress, `api` for
93
+ * `activate()`. The opening tab is activated silently, so it raises no
94
+ * `beforeTabChange` at all.
83
95
  */
84
- origin?: 'api' | 'user' | 'init';
96
+ origin: 'api' | 'user';
97
+ /** The reason given to `preventDefault`, or null while nothing has refused the switch. */
98
+ reason: string | null;
99
+ /** True once a handler has refused the switch. */
100
+ defaultPrevented: boolean;
101
+ /** Refuse the switch; the optional reason is carried on `tabChange:cancelled`. */
102
+ preventDefault(reason?: string): void;
103
+ }
104
+
105
+ /**
106
+ * `tab:changed`: the switch happened — the target panel is revealed, its grid
107
+ * materialised on first activation, the badges refreshed and `aria-selected`
108
+ * moved. A notification, so it carries no `preventDefault`.
109
+ */
110
+ interface TabChangedEvent {
111
+ /** Which event this is: `tab:changed`. */
112
+ type: string;
113
+ /** The tab now active. */
114
+ id: string;
85
115
  /**
86
- * Why the switch was refused — the reason given to `preventDefault`, `prevented` when
87
- * none was, or `error` when a handler threw.
116
+ * The tab that was left, or null for the mount-time activation — which
117
+ * happens while the strip is being built, before a handler can subscribe.
88
118
  */
89
- reason?: string | null;
90
- /** Cancel the switch (only meaningful on `beforeTabChange`). */
91
- preventDefault?: (reason?: string) => void;
92
- /** True once a handler has cancelled the switch. */
93
- defaultPrevented?: boolean;
119
+ previousId: string | null;
120
+ }
121
+
122
+ /**
123
+ * `tabChange:cancelled`: a `beforeTabChange` handler refused the switch, so the
124
+ * active tab did not change. A notification, so it carries no `preventDefault`.
125
+ */
126
+ interface TabChangeCancelledEvent {
127
+ /** Which event this is: `tabChange:cancelled`. */
128
+ type: string;
129
+ /** The tab that was not switched to. */
130
+ id: string;
131
+ /** The tab that is still active, or null when none was. */
132
+ previousId: string | null;
133
+ /** Who asked for the switch that was refused. */
134
+ origin: 'api' | 'user';
135
+ /** The reason given to `preventDefault`, or `'prevented'` when none was. */
136
+ reason: string;
137
+ }
138
+
139
+ /**
140
+ * The events a tabbed grid raises.
141
+ *
142
+ * The strip's own, not a grid's: `grid.on` takes {@link EventName} and knows
143
+ * nothing about these, and each tab's grid keeps raising its own events itself.
144
+ * `on()` warns once on any other name, because a binding to an event that can
145
+ * never fire is a silent no-op. Each event also has a config callback
146
+ * (`onBeforeTabChange`, `onTabChange`, `onTabChangeCancelled`); both routes
147
+ * fire.
148
+ *
149
+ * Only `beforeTabChange` is cancellable — it is the one that runs before
150
+ * anything moves. `tab:changed` and `tabChange:cancelled` report a decision
151
+ * already taken and carry no `preventDefault`.
152
+ */
153
+ type TabsEventName =
154
+ /** A switch is about to be applied; cancellable. */
155
+ | 'beforeTabChange'
156
+ /** The active tab changed: its panel is showing and its grid is mounted. */
157
+ | 'tab:changed'
158
+ /** A `beforeTabChange` handler refused the switch; the active tab did not change. */
159
+ | 'tabChange:cancelled';
160
+
161
+ /** What a handler receives, per tabs event. */
162
+ interface TabsEventPayloads {
163
+ /** The switch about to happen, with `preventDefault` to refuse it. */
164
+ beforeTabChange: TabChangeEvent;
165
+ /** The tab now active, and the one it replaced. */
166
+ 'tab:changed': TabChangedEvent;
167
+ /** The switch that was refused, and why. */
168
+ 'tabChange:cancelled': TabChangeCancelledEvent;
94
169
  }
95
170
 
96
171
  /** Tabbed-grid configuration. */
@@ -108,7 +183,7 @@ interface TabsConfig {
108
183
  /** An explicit message-catalogue override; otherwise a mounted tab's own `grid.messages` is used. */
109
184
  messages?: { t(key: string, params?: Record<string, unknown>): string };
110
185
  /** Called after the active tab has changed, alongside the `tab:changed` event. */
111
- onTabChange?: (event: TabChangeEvent) => void;
186
+ onTabChange?: (event: TabChangedEvent) => void;
112
187
  /**
113
188
  * Called before the switch. Return `false`, call `preventDefault(reason)`, or throw, to
114
189
  * stay where you are; return a promise and the switch waits for it. Alongside the
@@ -119,7 +194,7 @@ interface TabsConfig {
119
194
  * Called when a switch was refused, with the reason on the payload. Alongside
120
195
  * `tabChange:cancelled`.
121
196
  */
122
- onTabChangeCancelled?: (event: TabChangeEvent) => void;
197
+ onTabChangeCancelled?: (event: TabChangeCancelledEvent) => void;
123
198
  }
124
199
 
125
200
  /**
@@ -141,13 +216,14 @@ interface Tabs {
141
216
  /** Switch the active tab, gated by `beforeTabChange`. */
142
217
  activate(id: string, opts?: { origin?: 'api' | 'user' }): boolean | Promise<boolean>;
143
218
  /**
144
- * Subscribe to `beforeTabChange`, `tab:changed` or `tabChange:cancelled`; returns a
145
- * function that unsubscribes. Any other name is warned about once, because it names a
146
- * binding that could never fire.
219
+ * Register an event handler; returns a function that removes it. Any other name is
220
+ * warned about once, because it names a binding that could never fire. What each event
221
+ * carries is {@link TabsEventPayloads}; the handler is declared with the widest of
222
+ * them, so narrow on the name inside it.
147
223
  */
148
- on(name: 'beforeTabChange' | 'tab:changed' | 'tabChange:cancelled' | string, fn: (event: TabChangeEvent) => void): () => void;
224
+ on(name: TabsEventName, fn: (event: TabsEventPayloads[TabsEventName]) => void): () => void;
149
225
  /** Remove a handler registered with `on`. */
150
- off(name: string, fn: (event: TabChangeEvent) => void): void;
226
+ off(name: TabsEventName, fn: (event: TabsEventPayloads[TabsEventName]) => void): void;
151
227
  /** Tear the whole strip down; destroys every mounted tab's grid. */
152
228
  destroy(): void;
153
229
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.68.1, tabs module
2
+ * Lattice Grid 1.68.2, tabs module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -52,12 +52,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
52
52
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
53
53
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
54
54
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
55
- const STAMPED_VERSION="1.68.1";
55
+ const STAMPED_VERSION="1.68.2";
56
56
  async function resolveVersion(){
57
57
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
58
58
  return STAMPED_VERSION;
59
59
  }
60
- const VERSION="1.68.1";
60
+ const VERSION="1.68.2";
61
61
  const warned=new Set();
62
62
  const WARNED_LIMIT=2000;
63
63
  function rememberWarned(key){