@toclocoinc/lattice-grid 1.65.0 → 1.67.0

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 (177) hide show
  1. package/README.md +6 -4
  2. package/angular/LICENSE +111 -0
  3. package/angular/README.md +78 -0
  4. package/angular/fesm2022/toclocoinc-lattice-grid-angular.mjs +2843 -0
  5. package/angular/package.json +16 -0
  6. package/angular/types/toclocoinc-lattice-grid-angular.d.ts +1366 -0
  7. package/docs/API.html +741 -27
  8. package/docs/api-detail.html +137 -4
  9. package/lattice-grid.d.ts +9 -6
  10. package/lattice-grid.esm.min.js +26 -10
  11. package/lattice-grid.min.cjs +26 -10
  12. package/lattice-grid.min.css +1 -1
  13. package/lattice-grid.min.js +26 -10
  14. package/modules/ai.d.ts +1 -1
  15. package/modules/ai.esm.min.js +3 -3
  16. package/modules/ai.min.cjs +3 -3
  17. package/modules/ai.min.js +3 -3
  18. package/modules/angular.d.ts +1 -1
  19. package/modules/angular.esm.min.js +7 -7
  20. package/modules/angular.min.cjs +7 -7
  21. package/modules/angular.min.js +7 -7
  22. package/modules/chart-alluvial.d.ts +1 -1
  23. package/modules/chart-alluvial.esm.min.js +1 -1
  24. package/modules/chart-alluvial.min.cjs +1 -1
  25. package/modules/chart-alluvial.min.js +1 -1
  26. package/modules/chart-arc.d.ts +1 -1
  27. package/modules/chart-arc.esm.min.js +1 -1
  28. package/modules/chart-arc.min.cjs +1 -1
  29. package/modules/chart-arc.min.js +1 -1
  30. package/modules/chart-bubblemap.d.ts +1 -1
  31. package/modules/chart-bubblemap.esm.min.js +1 -1
  32. package/modules/chart-bubblemap.min.cjs +1 -1
  33. package/modules/chart-bubblemap.min.js +1 -1
  34. package/modules/chart-bump.d.ts +1 -1
  35. package/modules/chart-bump.esm.min.js +1 -1
  36. package/modules/chart-bump.min.cjs +1 -1
  37. package/modules/chart-bump.min.js +1 -1
  38. package/modules/chart-calendar.d.ts +1 -1
  39. package/modules/chart-calendar.esm.min.js +1 -1
  40. package/modules/chart-calendar.min.cjs +1 -1
  41. package/modules/chart-calendar.min.js +1 -1
  42. package/modules/chart-decomposition.d.ts +1 -1
  43. package/modules/chart-decomposition.esm.min.js +1 -1
  44. package/modules/chart-decomposition.min.cjs +1 -1
  45. package/modules/chart-decomposition.min.js +1 -1
  46. package/modules/chart-diverging.d.ts +1 -1
  47. package/modules/chart-diverging.esm.min.js +1 -1
  48. package/modules/chart-diverging.min.cjs +1 -1
  49. package/modules/chart-diverging.min.js +1 -1
  50. package/modules/chart-dumbbell.d.ts +1 -1
  51. package/modules/chart-dumbbell.esm.min.js +1 -1
  52. package/modules/chart-dumbbell.min.cjs +1 -1
  53. package/modules/chart-dumbbell.min.js +1 -1
  54. package/modules/chart-fan.d.ts +1 -1
  55. package/modules/chart-fan.esm.min.js +1 -1
  56. package/modules/chart-fan.min.cjs +1 -1
  57. package/modules/chart-fan.min.js +1 -1
  58. package/modules/chart-hexbin.d.ts +1 -1
  59. package/modules/chart-hexbin.esm.min.js +1 -1
  60. package/modules/chart-hexbin.min.cjs +1 -1
  61. package/modules/chart-hexbin.min.js +1 -1
  62. package/modules/chart-hexmap.d.ts +1 -1
  63. package/modules/chart-hexmap.esm.min.js +1 -1
  64. package/modules/chart-hexmap.min.cjs +1 -1
  65. package/modules/chart-hexmap.min.js +1 -1
  66. package/modules/chart-icicle.d.ts +1 -1
  67. package/modules/chart-icicle.esm.min.js +1 -1
  68. package/modules/chart-icicle.min.cjs +1 -1
  69. package/modules/chart-icicle.min.js +1 -1
  70. package/modules/chart-markermap.d.ts +1 -1
  71. package/modules/chart-markermap.esm.min.js +1 -1
  72. package/modules/chart-markermap.min.cjs +1 -1
  73. package/modules/chart-markermap.min.js +1 -1
  74. package/modules/chart-parallel.d.ts +1 -1
  75. package/modules/chart-parallel.esm.min.js +1 -1
  76. package/modules/chart-parallel.min.cjs +1 -1
  77. package/modules/chart-parallel.min.js +1 -1
  78. package/modules/chart-ridgeline.d.ts +1 -1
  79. package/modules/chart-ridgeline.esm.min.js +1 -1
  80. package/modules/chart-ridgeline.min.cjs +1 -1
  81. package/modules/chart-ridgeline.min.js +1 -1
  82. package/modules/chart-roc.d.ts +1 -1
  83. package/modules/chart-roc.esm.min.js +1 -1
  84. package/modules/chart-roc.min.cjs +1 -1
  85. package/modules/chart-roc.min.js +1 -1
  86. package/modules/chart-slope.d.ts +1 -1
  87. package/modules/chart-slope.esm.min.js +1 -1
  88. package/modules/chart-slope.min.cjs +1 -1
  89. package/modules/chart-slope.min.js +1 -1
  90. package/modules/chart-splom.d.ts +1 -1
  91. package/modules/chart-splom.esm.min.js +1 -1
  92. package/modules/chart-splom.min.cjs +1 -1
  93. package/modules/chart-splom.min.js +1 -1
  94. package/modules/chart-waffle.d.ts +1 -1
  95. package/modules/chart-waffle.esm.min.js +1 -1
  96. package/modules/chart-waffle.min.cjs +1 -1
  97. package/modules/chart-waffle.min.js +1 -1
  98. package/modules/charts.d.ts +1 -1
  99. package/modules/charts.esm.min.js +261 -48
  100. package/modules/charts.min.cjs +261 -48
  101. package/modules/charts.min.js +261 -48
  102. package/modules/data-router.d.ts +8 -3
  103. package/modules/data-router.esm.min.js +28 -6
  104. package/modules/data-router.min.cjs +28 -6
  105. package/modules/data-router.min.js +28 -6
  106. package/modules/devtools.d.ts +1 -1
  107. package/modules/devtools.esm.min.js +1 -1
  108. package/modules/devtools.min.cjs +1 -1
  109. package/modules/devtools.min.js +1 -1
  110. package/modules/dhtmlx-compat.d.ts +1 -1
  111. package/modules/dhtmlx-compat.esm.min.js +3 -3
  112. package/modules/dhtmlx-compat.min.cjs +3 -3
  113. package/modules/dhtmlx-compat.min.js +3 -3
  114. package/modules/gantt.d.ts +8 -3
  115. package/modules/gantt.esm.min.js +27 -4
  116. package/modules/gantt.min.cjs +27 -4
  117. package/modules/gantt.min.js +27 -4
  118. package/modules/geo-europe-nuts.d.ts +1 -1
  119. package/modules/geo-europe-nuts.esm.min.js +1 -1
  120. package/modules/geo-uk.d.ts +1 -1
  121. package/modules/geo-uk.esm.min.js +1 -1
  122. package/modules/geo-us-states.d.ts +1 -1
  123. package/modules/geo-us-states.esm.min.js +1 -1
  124. package/modules/geo-world-110m.d.ts +1 -1
  125. package/modules/geo-world-110m.esm.min.js +1 -1
  126. package/modules/geo-world-50m.d.ts +1 -1
  127. package/modules/geo-world-50m.esm.min.js +1 -1
  128. package/modules/htmx.d.ts +1 -1
  129. package/modules/htmx.esm.min.js +26 -10
  130. package/modules/htmx.min.cjs +26 -10
  131. package/modules/htmx.min.js +26 -10
  132. package/modules/kanban.d.ts +10 -3
  133. package/modules/kanban.esm.min.js +24 -4
  134. package/modules/kanban.min.cjs +24 -4
  135. package/modules/kanban.min.js +24 -4
  136. package/modules/kpi.d.ts +10 -3
  137. package/modules/kpi.esm.min.js +27 -4
  138. package/modules/kpi.min.cjs +27 -4
  139. package/modules/kpi.min.js +27 -4
  140. package/modules/layout.d.ts +1 -1
  141. package/modules/layout.esm.min.js +3 -3
  142. package/modules/layout.min.cjs +3 -3
  143. package/modules/layout.min.js +3 -3
  144. package/modules/mock-socket.d.ts +1 -1
  145. package/modules/mock-socket.esm.min.js +1 -1
  146. package/modules/mock-socket.min.cjs +1 -1
  147. package/modules/mock-socket.min.js +1 -1
  148. package/modules/react.d.ts +1 -1
  149. package/modules/react.esm.min.js +3 -3
  150. package/modules/react.min.cjs +3 -3
  151. package/modules/react.min.js +3 -3
  152. package/modules/svelte.d.ts +251 -2
  153. package/modules/svelte.esm.min.js +960 -6
  154. package/modules/svelte.min.cjs +942 -5
  155. package/modules/svelte.min.js +942 -5
  156. package/modules/tabs.d.ts +1 -1
  157. package/modules/tabs.esm.min.js +3 -3
  158. package/modules/tabs.min.cjs +3 -3
  159. package/modules/tabs.min.js +3 -3
  160. package/modules/vue.d.ts +398 -9
  161. package/modules/vue.esm.min.js +1163 -31
  162. package/modules/vue.min.cjs +1147 -30
  163. package/modules/vue.min.js +1147 -30
  164. package/modules/webcomponent.d.ts +233 -1
  165. package/modules/webcomponent.esm.min.js +1274 -41
  166. package/modules/webcomponent.min.cjs +1256 -41
  167. package/modules/webcomponent.min.js +1256 -41
  168. package/package.json +27 -2
  169. package/svelte/Chart.svelte +34 -0
  170. package/svelte/Gantt.svelte +34 -0
  171. package/svelte/Grid.svelte +30 -0
  172. package/svelte/GridProvider.svelte +13 -0
  173. package/svelte/KPI.svelte +34 -0
  174. package/svelte/Kanban.svelte +34 -0
  175. package/svelte/Layout.svelte +34 -0
  176. package/svelte/Router.svelte +16 -0
  177. package/svelte/Tabs.svelte +53 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, data-router module
2
+ * Lattice Grid 1.67.0, data-router 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.65.0";
55
+ const STAMPED_VERSION="1.67.0";
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.65.0";
60
+ const VERSION="1.67.0";
61
61
  const warned=new Set();
62
62
  const WARNED_LIMIT=2000;
63
63
  function rememberWarned(key){
@@ -1636,6 +1636,28 @@ if(typeof spec==='function')return spec;
1636
1636
  if(typeof spec==='string')return(row)=>row[spec];
1637
1637
  return fallback;
1638
1638
  }
1639
+ function rowKeyTypeName(v){
1640
+ if(Array.isArray(v))return'array';
1641
+ if(v===null)return'null';
1642
+ return typeof v;
1643
+ }
1644
+ function assertRowKeySpec(spec,where){
1645
+ if(spec===undefined)return spec;
1646
+ if(typeof spec==='string'&&spec.length>0)return spec;
1647
+ if(typeof spec==='function'){
1648
+ return(row)=>{
1649
+ const key=spec(row);
1650
+ if(typeof key==='string')return key;
1651
+ if(typeof key==='number'&&Number.isFinite(key))return key;
1652
+ throw new Error(
1653
+ `lattice-data-router: rowKey function must return a string or number; got ${rowKeyTypeName(key)}.`,
1654
+ );
1655
+ };
1656
+ }
1657
+ throw new Error(
1658
+ `lattice-data-router: rowKey must be a property name or a function; composite keys are not supported on ${where}.`,
1659
+ );
1660
+ }
1639
1661
  function comparator(sort){
1640
1662
  if(typeof sort==='function')return sort;
1641
1663
  if(sort&&typeof sort==='object'&&typeof sort.key==='string'){
@@ -1748,7 +1770,7 @@ return evalCondition(node,row);
1748
1770
  }
1749
1771
  function createDataRouter(opts={}){
1750
1772
  const partOf=resolver(opts.key,()=>undefined);
1751
- const defaultKeyOf=resolver(opts.rowKey,(row)=>row.rowKey);
1773
+ const defaultKeyOf=resolver(assertRowKeySpec(opts.rowKey,'routes'),(row)=>row.rowKey);
1752
1774
  const overlap=!!opts.overlap;
1753
1775
  const onUnrouted=typeof opts.onUnrouted==='function'?opts.onUnrouted:null;
1754
1776
  const debounceMs=Number.isFinite(opts.selectionDebounce)?Number(opts.selectionDebounce):16;
@@ -2033,7 +2055,7 @@ const makeRoute=(grid,match,o)=>({
2033
2055
  grid,
2034
2056
  sink:targetSink(grid),
2035
2057
  match,
2036
- keyOf:resolver(o.rowKey,defaultKeyOf),
2058
+ keyOf:resolver(assertRowKeySpec(o.rowKey,'routes'),defaultKeyOf),
2037
2059
  partition:new Map(),
2038
2060
  keys:new Map(),
2039
2061
  transform:typeof o.transform==='function'?o.transform:null,
@@ -2726,7 +2748,7 @@ const match=typeof predicate==='function'
2726
2748
  :(row)=>partOf(row)===predicate;
2727
2749
  const al={
2728
2750
  match,
2729
- keyOf:resolver(o.rowKey,defaultKeyOf),
2751
+ keyOf:resolver(assertRowKeySpec(o.rowKey,'alerts'),defaultKeyOf),
2730
2752
  filter:typeof o.filter==='function'?o.filter:null,
2731
2753
  condition:typeof condition==='function'?condition:()=>false,
2732
2754
  handler:typeof handler==='function'?handler:()=>{},
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, data-router module
2
+ * Lattice Grid 1.67.0, data-router 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.65.0";
57
+ const STAMPED_VERSION="1.67.0";
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.65.0";
62
+ const VERSION="1.67.0";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -1638,6 +1638,28 @@ if(typeof spec==='function')return spec;
1638
1638
  if(typeof spec==='string')return(row)=>row[spec];
1639
1639
  return fallback;
1640
1640
  }
1641
+ function rowKeyTypeName(v){
1642
+ if(Array.isArray(v))return'array';
1643
+ if(v===null)return'null';
1644
+ return typeof v;
1645
+ }
1646
+ function assertRowKeySpec(spec,where){
1647
+ if(spec===undefined)return spec;
1648
+ if(typeof spec==='string'&&spec.length>0)return spec;
1649
+ if(typeof spec==='function'){
1650
+ return(row)=>{
1651
+ const key=spec(row);
1652
+ if(typeof key==='string')return key;
1653
+ if(typeof key==='number'&&Number.isFinite(key))return key;
1654
+ throw new Error(
1655
+ `lattice-data-router: rowKey function must return a string or number; got ${rowKeyTypeName(key)}.`,
1656
+ );
1657
+ };
1658
+ }
1659
+ throw new Error(
1660
+ `lattice-data-router: rowKey must be a property name or a function; composite keys are not supported on ${where}.`,
1661
+ );
1662
+ }
1641
1663
  function comparator(sort){
1642
1664
  if(typeof sort==='function')return sort;
1643
1665
  if(sort&&typeof sort==='object'&&typeof sort.key==='string'){
@@ -1750,7 +1772,7 @@ return evalCondition(node,row);
1750
1772
  }
1751
1773
  function createDataRouter(opts={}){
1752
1774
  const partOf=resolver(opts.key,()=>undefined);
1753
- const defaultKeyOf=resolver(opts.rowKey,(row)=>row.rowKey);
1775
+ const defaultKeyOf=resolver(assertRowKeySpec(opts.rowKey,'routes'),(row)=>row.rowKey);
1754
1776
  const overlap=!!opts.overlap;
1755
1777
  const onUnrouted=typeof opts.onUnrouted==='function'?opts.onUnrouted:null;
1756
1778
  const debounceMs=Number.isFinite(opts.selectionDebounce)?Number(opts.selectionDebounce):16;
@@ -2035,7 +2057,7 @@ const makeRoute=(grid,match,o)=>({
2035
2057
  grid,
2036
2058
  sink:targetSink(grid),
2037
2059
  match,
2038
- keyOf:resolver(o.rowKey,defaultKeyOf),
2060
+ keyOf:resolver(assertRowKeySpec(o.rowKey,'routes'),defaultKeyOf),
2039
2061
  partition:new Map(),
2040
2062
  keys:new Map(),
2041
2063
  transform:typeof o.transform==='function'?o.transform:null,
@@ -2728,7 +2750,7 @@ const match=typeof predicate==='function'
2728
2750
  :(row)=>partOf(row)===predicate;
2729
2751
  const al={
2730
2752
  match,
2731
- keyOf:resolver(o.rowKey,defaultKeyOf),
2753
+ keyOf:resolver(assertRowKeySpec(o.rowKey,'alerts'),defaultKeyOf),
2732
2754
  filter:typeof o.filter==='function'?o.filter:null,
2733
2755
  condition:typeof condition==='function'?condition:()=>false,
2734
2756
  handler:typeof handler==='function'?handler:()=>{},
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, data-router module
2
+ * Lattice Grid 1.67.0, data-router 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.65.0";
57
+ const STAMPED_VERSION="1.67.0";
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.65.0";
62
+ const VERSION="1.67.0";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -1638,6 +1638,28 @@ if(typeof spec==='function')return spec;
1638
1638
  if(typeof spec==='string')return(row)=>row[spec];
1639
1639
  return fallback;
1640
1640
  }
1641
+ function rowKeyTypeName(v){
1642
+ if(Array.isArray(v))return'array';
1643
+ if(v===null)return'null';
1644
+ return typeof v;
1645
+ }
1646
+ function assertRowKeySpec(spec,where){
1647
+ if(spec===undefined)return spec;
1648
+ if(typeof spec==='string'&&spec.length>0)return spec;
1649
+ if(typeof spec==='function'){
1650
+ return(row)=>{
1651
+ const key=spec(row);
1652
+ if(typeof key==='string')return key;
1653
+ if(typeof key==='number'&&Number.isFinite(key))return key;
1654
+ throw new Error(
1655
+ `lattice-data-router: rowKey function must return a string or number; got ${rowKeyTypeName(key)}.`,
1656
+ );
1657
+ };
1658
+ }
1659
+ throw new Error(
1660
+ `lattice-data-router: rowKey must be a property name or a function; composite keys are not supported on ${where}.`,
1661
+ );
1662
+ }
1641
1663
  function comparator(sort){
1642
1664
  if(typeof sort==='function')return sort;
1643
1665
  if(sort&&typeof sort==='object'&&typeof sort.key==='string'){
@@ -1750,7 +1772,7 @@ return evalCondition(node,row);
1750
1772
  }
1751
1773
  function createDataRouter(opts={}){
1752
1774
  const partOf=resolver(opts.key,()=>undefined);
1753
- const defaultKeyOf=resolver(opts.rowKey,(row)=>row.rowKey);
1775
+ const defaultKeyOf=resolver(assertRowKeySpec(opts.rowKey,'routes'),(row)=>row.rowKey);
1754
1776
  const overlap=!!opts.overlap;
1755
1777
  const onUnrouted=typeof opts.onUnrouted==='function'?opts.onUnrouted:null;
1756
1778
  const debounceMs=Number.isFinite(opts.selectionDebounce)?Number(opts.selectionDebounce):16;
@@ -2035,7 +2057,7 @@ const makeRoute=(grid,match,o)=>({
2035
2057
  grid,
2036
2058
  sink:targetSink(grid),
2037
2059
  match,
2038
- keyOf:resolver(o.rowKey,defaultKeyOf),
2060
+ keyOf:resolver(assertRowKeySpec(o.rowKey,'routes'),defaultKeyOf),
2039
2061
  partition:new Map(),
2040
2062
  keys:new Map(),
2041
2063
  transform:typeof o.transform==='function'?o.transform:null,
@@ -2728,7 +2750,7 @@ const match=typeof predicate==='function'
2728
2750
  :(row)=>partOf(row)===predicate;
2729
2751
  const al={
2730
2752
  match,
2731
- keyOf:resolver(o.rowKey,defaultKeyOf),
2753
+ keyOf:resolver(assertRowKeySpec(o.rowKey,'alerts'),defaultKeyOf),
2732
2754
  filter:typeof o.filter==='function'?o.filter:null,
2733
2755
  condition:typeof condition==='function'?condition:()=>false,
2734
2756
  handler:typeof handler==='function'?handler:()=>{},
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, devtools module type declarations
2
+ * Lattice Grid 1.67.0, devtools 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.65.0, devtools module
2
+ * Lattice Grid 1.67.0, devtools 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.65.0, devtools module
2
+ * Lattice Grid 1.67.0, devtools 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.65.0, devtools module
2
+ * Lattice Grid 1.67.0, devtools 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.65.0, dhtmlx-compat module type declarations
2
+ * Lattice Grid 1.67.0, dhtmlx-compat 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.65.0, dhtmlx-compat module
2
+ * Lattice Grid 1.67.0, dhtmlx-compat module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -62,12 +62,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
62
62
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
63
63
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
64
64
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
65
- const STAMPED_VERSION="1.65.0";
65
+ const STAMPED_VERSION="1.67.0";
66
66
  async function resolveVersion(){
67
67
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
68
68
  return STAMPED_VERSION;
69
69
  }
70
- const VERSION="1.65.0";
70
+ const VERSION="1.67.0";
71
71
  const warned=new Set();
72
72
  const WARNED_LIMIT=2000;
73
73
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, dhtmlx-compat module
2
+ * Lattice Grid 1.67.0, dhtmlx-compat module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -63,12 +63,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
63
63
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
64
64
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
65
65
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
66
- const STAMPED_VERSION="1.65.0";
66
+ const STAMPED_VERSION="1.67.0";
67
67
  async function resolveVersion(){
68
68
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
69
69
  return STAMPED_VERSION;
70
70
  }
71
- const VERSION="1.65.0";
71
+ const VERSION="1.67.0";
72
72
  const warned=new Set();
73
73
  const WARNED_LIMIT=2000;
74
74
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, dhtmlx-compat module
2
+ * Lattice Grid 1.67.0, dhtmlx-compat module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -63,12 +63,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
63
63
  Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
64
64
  Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
65
65
  Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
66
- const STAMPED_VERSION="1.65.0";
66
+ const STAMPED_VERSION="1.67.0";
67
67
  async function resolveVersion(){
68
68
  if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
69
69
  return STAMPED_VERSION;
70
70
  }
71
- const VERSION="1.65.0";
71
+ const VERSION="1.67.0";
72
72
  const warned=new Set();
73
73
  const WARNED_LIMIT=2000;
74
74
  function rememberWarned(key){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, gantt module type declarations
2
+ * Lattice Grid 1.67.0, gantt module type declarations
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -579,8 +579,13 @@ export function createGantt(opts?: {
579
579
  grid?: unknown;
580
580
  /** Map task fields to grid column ids to enable drag write-back. */
581
581
  columns?: { start?: string; end?: string; duration?: string };
582
- /** Task identity for the live `rows.apply` surface (a field or fn); default 'id'. */
583
- rowKey?: string | ((row: GanttTask) => unknown);
582
+ /**
583
+ * Task identity for the live `rows.apply` surface (a field or fn, returning
584
+ * a string or number); default 'id'. Composite (`string[]`) keys are
585
+ * core-grid-only: the Gantt keys its own task/board identity from one
586
+ * value, so there is nothing for an array to join into here.
587
+ */
588
+ rowKey?: string | ((row: GanttTask) => string | number);
584
589
  /**
585
590
  * The host's own names for the task properties the scheduler reads, so a
586
591
  * plan can be fed as it already exists rather than renamed for the Gantt:
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, gantt module
2
+ * Lattice Grid 1.67.0, gantt 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.65.0";
55
+ const STAMPED_VERSION="1.67.0";
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.65.0";
60
+ const VERSION="1.67.0";
61
61
  const warned=new Set();
62
62
  const WARNED_LIMIT=2000;
63
63
  function rememberWarned(key){
@@ -4837,6 +4837,21 @@ Object.defineProperty(__exports,"importMSPDI",{enumerable:true,get:function(){re
4837
4837
  Object.defineProperty(__exports,"exportMSPDI",{enumerable:true,get:function(){return __m4["exportMSPDI"];}});
4838
4838
  Object.defineProperty(__exports,"computeEarnedValue",{enumerable:true,get:function(){return __m3["computeEarnedValue"];}});
4839
4839
  const GANTT_STATE_VERSION=1;
4840
+ function rowKeyTypeName(v){
4841
+ if(Array.isArray(v))return'array';
4842
+ if(v===null)return'null';
4843
+ return typeof v;
4844
+ }
4845
+ function assertGanttRowKeyFn(fn){
4846
+ return(row)=>{
4847
+ const key=fn(row);
4848
+ if(typeof key==='string')return key;
4849
+ if(typeof key==='number'&&Number.isFinite(key))return key;
4850
+ throw new Error(
4851
+ `lattice-gantt: rowKey function must return a string or number; got ${rowKeyTypeName(key)}.`,
4852
+ );
4853
+ };
4854
+ }
4840
4855
  function emitter(){
4841
4856
  const map=new Map();
4842
4857
  return{
@@ -4909,7 +4924,15 @@ const autoSchedule=!!opts.autoSchedule;
4909
4924
  const grid=opts.grid??null;
4910
4925
  const columns=opts.columns&&typeof opts.columns==='object'?{...opts.columns}:null;
4911
4926
  const fields=isObject(opts.fields)?{...opts.fields}:{};
4912
- const rowKeySpec=opts.rowKey??(typeof fields.id==='string'?fields.id:'id');
4927
+ if(opts.rowKey!==undefined&&typeof opts.rowKey!=='function'
4928
+ &&!(typeof opts.rowKey==='string'&&opts.rowKey.length>0)){
4929
+ throw new Error(
4930
+ 'lattice-gantt: rowKey must be a property name or a function; composite keys are not supported on tasks.',
4931
+ );
4932
+ }
4933
+ const rowKeySpec=typeof opts.rowKey==='function'
4934
+ ?assertGanttRowKeyFn(opts.rowKey)
4935
+ :(opts.rowKey??(typeof fields.id==='string'?fields.id:'id'));
4913
4936
  const keyOf=(row)=>String(typeof rowKeySpec==='function'?rowKeySpec(row):row[rowKeySpec]);
4914
4937
  if(fields.id===undefined){
4915
4938
  fields.id=(raw)=>{
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, gantt module
2
+ * Lattice Grid 1.67.0, gantt 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.65.0";
57
+ const STAMPED_VERSION="1.67.0";
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.65.0";
62
+ const VERSION="1.67.0";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -4839,6 +4839,21 @@ Object.defineProperty(__exports,"importMSPDI",{enumerable:true,get:function(){re
4839
4839
  Object.defineProperty(__exports,"exportMSPDI",{enumerable:true,get:function(){return __m4["exportMSPDI"];}});
4840
4840
  Object.defineProperty(__exports,"computeEarnedValue",{enumerable:true,get:function(){return __m3["computeEarnedValue"];}});
4841
4841
  const GANTT_STATE_VERSION=1;
4842
+ function rowKeyTypeName(v){
4843
+ if(Array.isArray(v))return'array';
4844
+ if(v===null)return'null';
4845
+ return typeof v;
4846
+ }
4847
+ function assertGanttRowKeyFn(fn){
4848
+ return(row)=>{
4849
+ const key=fn(row);
4850
+ if(typeof key==='string')return key;
4851
+ if(typeof key==='number'&&Number.isFinite(key))return key;
4852
+ throw new Error(
4853
+ `lattice-gantt: rowKey function must return a string or number; got ${rowKeyTypeName(key)}.`,
4854
+ );
4855
+ };
4856
+ }
4842
4857
  function emitter(){
4843
4858
  const map=new Map();
4844
4859
  return{
@@ -4911,7 +4926,15 @@ const autoSchedule=!!opts.autoSchedule;
4911
4926
  const grid=opts.grid??null;
4912
4927
  const columns=opts.columns&&typeof opts.columns==='object'?{...opts.columns}:null;
4913
4928
  const fields=isObject(opts.fields)?{...opts.fields}:{};
4914
- const rowKeySpec=opts.rowKey??(typeof fields.id==='string'?fields.id:'id');
4929
+ if(opts.rowKey!==undefined&&typeof opts.rowKey!=='function'
4930
+ &&!(typeof opts.rowKey==='string'&&opts.rowKey.length>0)){
4931
+ throw new Error(
4932
+ 'lattice-gantt: rowKey must be a property name or a function; composite keys are not supported on tasks.',
4933
+ );
4934
+ }
4935
+ const rowKeySpec=typeof opts.rowKey==='function'
4936
+ ?assertGanttRowKeyFn(opts.rowKey)
4937
+ :(opts.rowKey??(typeof fields.id==='string'?fields.id:'id'));
4915
4938
  const keyOf=(row)=>String(typeof rowKeySpec==='function'?rowKeySpec(row):row[rowKeySpec]);
4916
4939
  if(fields.id===undefined){
4917
4940
  fields.id=(raw)=>{
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, gantt module
2
+ * Lattice Grid 1.67.0, gantt 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.65.0";
57
+ const STAMPED_VERSION="1.67.0";
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.65.0";
62
+ const VERSION="1.67.0";
63
63
  const warned=new Set();
64
64
  const WARNED_LIMIT=2000;
65
65
  function rememberWarned(key){
@@ -4839,6 +4839,21 @@ Object.defineProperty(__exports,"importMSPDI",{enumerable:true,get:function(){re
4839
4839
  Object.defineProperty(__exports,"exportMSPDI",{enumerable:true,get:function(){return __m4["exportMSPDI"];}});
4840
4840
  Object.defineProperty(__exports,"computeEarnedValue",{enumerable:true,get:function(){return __m3["computeEarnedValue"];}});
4841
4841
  const GANTT_STATE_VERSION=1;
4842
+ function rowKeyTypeName(v){
4843
+ if(Array.isArray(v))return'array';
4844
+ if(v===null)return'null';
4845
+ return typeof v;
4846
+ }
4847
+ function assertGanttRowKeyFn(fn){
4848
+ return(row)=>{
4849
+ const key=fn(row);
4850
+ if(typeof key==='string')return key;
4851
+ if(typeof key==='number'&&Number.isFinite(key))return key;
4852
+ throw new Error(
4853
+ `lattice-gantt: rowKey function must return a string or number; got ${rowKeyTypeName(key)}.`,
4854
+ );
4855
+ };
4856
+ }
4842
4857
  function emitter(){
4843
4858
  const map=new Map();
4844
4859
  return{
@@ -4911,7 +4926,15 @@ const autoSchedule=!!opts.autoSchedule;
4911
4926
  const grid=opts.grid??null;
4912
4927
  const columns=opts.columns&&typeof opts.columns==='object'?{...opts.columns}:null;
4913
4928
  const fields=isObject(opts.fields)?{...opts.fields}:{};
4914
- const rowKeySpec=opts.rowKey??(typeof fields.id==='string'?fields.id:'id');
4929
+ if(opts.rowKey!==undefined&&typeof opts.rowKey!=='function'
4930
+ &&!(typeof opts.rowKey==='string'&&opts.rowKey.length>0)){
4931
+ throw new Error(
4932
+ 'lattice-gantt: rowKey must be a property name or a function; composite keys are not supported on tasks.',
4933
+ );
4934
+ }
4935
+ const rowKeySpec=typeof opts.rowKey==='function'
4936
+ ?assertGanttRowKeyFn(opts.rowKey)
4937
+ :(opts.rowKey??(typeof fields.id==='string'?fields.id:'id'));
4915
4938
  const keyOf=(row)=>String(typeof rowKeySpec==='function'?rowKeySpec(row):row[rowKeySpec]);
4916
4939
  if(fields.id===undefined){
4917
4940
  fields.id=(raw)=>{
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, geo-europe-nuts module type declarations
2
+ * Lattice Grid 1.67.0, geo-europe-nuts 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.65.0, geo-europe-nuts module
2
+ * Lattice Grid 1.67.0, geo-europe-nuts 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.65.0, geo-uk module type declarations
2
+ * Lattice Grid 1.67.0, geo-uk 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.65.0, geo-uk module
2
+ * Lattice Grid 1.67.0, geo-uk 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.65.0, geo-us-states module type declarations
2
+ * Lattice Grid 1.67.0, geo-us-states 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.65.0, geo-us-states module
2
+ * Lattice Grid 1.67.0, geo-us-states 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.65.0, geo-world-110m module type declarations
2
+ * Lattice Grid 1.67.0, geo-world-110m 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.65.0, geo-world-110m module
2
+ * Lattice Grid 1.67.0, geo-world-110m 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.65.0, geo-world-50m module type declarations
2
+ * Lattice Grid 1.67.0, geo-world-50m 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.65.0, geo-world-50m module
2
+ * Lattice Grid 1.67.0, geo-world-50m module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
package/modules/htmx.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.65.0, htmx module type declarations
2
+ * Lattice Grid 1.67.0, htmx module type declarations
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */