@toclocoinc/lattice-grid 1.80.0 → 1.81.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 (233) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/angular/package.json +1 -1
  4. package/docs/API.html +4 -4
  5. package/docs/THEMING.md +6 -3
  6. package/docs/api/adapters.html +1 -1
  7. package/docs/api/ai.html +1 -1
  8. package/docs/api/alarms.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/gantt.html +1 -1
  14. package/docs/api/geometry.html +1 -1
  15. package/docs/api/grid.html +2 -2
  16. package/docs/api/index.html +1 -1
  17. package/docs/api/kanban.html +1 -1
  18. package/docs/api/kpi.html +1 -1
  19. package/docs/api/layout.html +1 -1
  20. package/docs/api/leaflet.html +1 -1
  21. package/docs/api/list.html +1 -1
  22. package/docs/api/mock-socket.html +1 -1
  23. package/docs/api/presets.html +1 -1
  24. package/docs/api/tabs.html +1 -1
  25. package/docs/api/types.html +1 -1
  26. package/docs/api-detail.html +4 -4
  27. package/docs/warnings.json +1 -1
  28. package/lattice-grid.d.ts +1 -1
  29. package/lattice-grid.esm.min.js +3 -3
  30. package/lattice-grid.min.cjs +3 -3
  31. package/lattice-grid.min.css +1 -1
  32. package/lattice-grid.min.js +3 -3
  33. package/modules/ai.d.ts +1 -1
  34. package/modules/ai.esm.min.js +2 -2
  35. package/modules/ai.min.cjs +2 -2
  36. package/modules/ai.min.js +2 -2
  37. package/modules/alarms.d.ts +1 -1
  38. package/modules/alarms.esm.min.js +2 -2
  39. package/modules/alarms.min.cjs +2 -2
  40. package/modules/alarms.min.js +2 -2
  41. package/modules/angular.d.ts +1 -1
  42. package/modules/angular.esm.min.js +2 -2
  43. package/modules/angular.min.cjs +2 -2
  44. package/modules/angular.min.js +2 -2
  45. package/modules/chart-alluvial.d.ts +1 -1
  46. package/modules/chart-alluvial.esm.min.js +1 -1
  47. package/modules/chart-alluvial.min.cjs +1 -1
  48. package/modules/chart-alluvial.min.js +1 -1
  49. package/modules/chart-arc.d.ts +1 -1
  50. package/modules/chart-arc.esm.min.js +1 -1
  51. package/modules/chart-arc.min.cjs +1 -1
  52. package/modules/chart-arc.min.js +1 -1
  53. package/modules/chart-bubblemap.d.ts +1 -1
  54. package/modules/chart-bubblemap.esm.min.js +1 -1
  55. package/modules/chart-bubblemap.min.cjs +1 -1
  56. package/modules/chart-bubblemap.min.js +1 -1
  57. package/modules/chart-bump.d.ts +1 -1
  58. package/modules/chart-bump.esm.min.js +1 -1
  59. package/modules/chart-bump.min.cjs +1 -1
  60. package/modules/chart-bump.min.js +1 -1
  61. package/modules/chart-calendar.d.ts +1 -1
  62. package/modules/chart-calendar.esm.min.js +1 -1
  63. package/modules/chart-calendar.min.cjs +1 -1
  64. package/modules/chart-calendar.min.js +1 -1
  65. package/modules/chart-choropleth.d.ts +1 -1
  66. package/modules/chart-choropleth.esm.min.js +1 -1
  67. package/modules/chart-choropleth.min.cjs +1 -1
  68. package/modules/chart-choropleth.min.js +1 -1
  69. package/modules/chart-decomposition.d.ts +1 -1
  70. package/modules/chart-decomposition.esm.min.js +1 -1
  71. package/modules/chart-decomposition.min.cjs +1 -1
  72. package/modules/chart-decomposition.min.js +1 -1
  73. package/modules/chart-diverging.d.ts +1 -1
  74. package/modules/chart-diverging.esm.min.js +1 -1
  75. package/modules/chart-diverging.min.cjs +1 -1
  76. package/modules/chart-diverging.min.js +1 -1
  77. package/modules/chart-dumbbell.d.ts +1 -1
  78. package/modules/chart-dumbbell.esm.min.js +1 -1
  79. package/modules/chart-dumbbell.min.cjs +1 -1
  80. package/modules/chart-dumbbell.min.js +1 -1
  81. package/modules/chart-fan.d.ts +1 -1
  82. package/modules/chart-fan.esm.min.js +1 -1
  83. package/modules/chart-fan.min.cjs +1 -1
  84. package/modules/chart-fan.min.js +1 -1
  85. package/modules/chart-hexbin.d.ts +1 -1
  86. package/modules/chart-hexbin.esm.min.js +1 -1
  87. package/modules/chart-hexbin.min.cjs +1 -1
  88. package/modules/chart-hexbin.min.js +1 -1
  89. package/modules/chart-hexmap.d.ts +1 -1
  90. package/modules/chart-hexmap.esm.min.js +1 -1
  91. package/modules/chart-hexmap.min.cjs +1 -1
  92. package/modules/chart-hexmap.min.js +1 -1
  93. package/modules/chart-icicle.d.ts +1 -1
  94. package/modules/chart-icicle.esm.min.js +1 -1
  95. package/modules/chart-icicle.min.cjs +1 -1
  96. package/modules/chart-icicle.min.js +1 -1
  97. package/modules/chart-markermap.d.ts +1 -1
  98. package/modules/chart-markermap.esm.min.js +1 -1
  99. package/modules/chart-markermap.min.cjs +1 -1
  100. package/modules/chart-markermap.min.js +1 -1
  101. package/modules/chart-parallel.d.ts +1 -1
  102. package/modules/chart-parallel.esm.min.js +1 -1
  103. package/modules/chart-parallel.min.cjs +1 -1
  104. package/modules/chart-parallel.min.js +1 -1
  105. package/modules/chart-ridgeline.d.ts +1 -1
  106. package/modules/chart-ridgeline.esm.min.js +1 -1
  107. package/modules/chart-ridgeline.min.cjs +1 -1
  108. package/modules/chart-ridgeline.min.js +1 -1
  109. package/modules/chart-roc.d.ts +1 -1
  110. package/modules/chart-roc.esm.min.js +1 -1
  111. package/modules/chart-roc.min.cjs +1 -1
  112. package/modules/chart-roc.min.js +1 -1
  113. package/modules/chart-slope.d.ts +1 -1
  114. package/modules/chart-slope.esm.min.js +1 -1
  115. package/modules/chart-slope.min.cjs +1 -1
  116. package/modules/chart-slope.min.js +1 -1
  117. package/modules/chart-splom.d.ts +1 -1
  118. package/modules/chart-splom.esm.min.js +1 -1
  119. package/modules/chart-splom.min.cjs +1 -1
  120. package/modules/chart-splom.min.js +1 -1
  121. package/modules/chart-waffle.d.ts +1 -1
  122. package/modules/chart-waffle.esm.min.js +1 -1
  123. package/modules/chart-waffle.min.cjs +1 -1
  124. package/modules/chart-waffle.min.js +1 -1
  125. package/modules/charts.d.ts +1 -1
  126. package/modules/charts.esm.min.js +2 -2
  127. package/modules/charts.min.cjs +2 -2
  128. package/modules/charts.min.js +2 -2
  129. package/modules/dashboard.d.ts +1 -1
  130. package/modules/dashboard.esm.min.js +2 -2
  131. package/modules/dashboard.min.cjs +2 -2
  132. package/modules/dashboard.min.js +2 -2
  133. package/modules/data-router.d.ts +1 -1
  134. package/modules/data-router.esm.min.js +2 -2
  135. package/modules/data-router.min.cjs +2 -2
  136. package/modules/data-router.min.js +2 -2
  137. package/modules/deckgl.d.ts +1 -1
  138. package/modules/deckgl.esm.min.js +2 -2
  139. package/modules/deckgl.min.cjs +2 -2
  140. package/modules/deckgl.min.js +2 -2
  141. package/modules/devtools.d.ts +1 -1
  142. package/modules/devtools.esm.min.js +1 -1
  143. package/modules/devtools.min.cjs +1 -1
  144. package/modules/devtools.min.js +1 -1
  145. package/modules/dhtmlx-compat.d.ts +1 -1
  146. package/modules/dhtmlx-compat.esm.min.js +2 -2
  147. package/modules/dhtmlx-compat.min.cjs +2 -2
  148. package/modules/dhtmlx-compat.min.js +2 -2
  149. package/modules/gantt.d.ts +1 -1
  150. package/modules/gantt.esm.min.js +2 -2
  151. package/modules/gantt.min.cjs +2 -2
  152. package/modules/gantt.min.js +2 -2
  153. package/modules/geo-europe-nuts.d.ts +1 -1
  154. package/modules/geo-europe-nuts.esm.min.js +1 -1
  155. package/modules/geo-europe-nuts.min.cjs +1 -1
  156. package/modules/geo-europe-nuts.min.js +1 -1
  157. package/modules/geo-uk.d.ts +1 -1
  158. package/modules/geo-uk.esm.min.js +1 -1
  159. package/modules/geo-uk.min.cjs +1 -1
  160. package/modules/geo-uk.min.js +1 -1
  161. package/modules/geo-us-states.d.ts +1 -1
  162. package/modules/geo-us-states.esm.min.js +1 -1
  163. package/modules/geo-us-states.min.cjs +1 -1
  164. package/modules/geo-us-states.min.js +1 -1
  165. package/modules/geo-world-110m.d.ts +1 -1
  166. package/modules/geo-world-110m.esm.min.js +1 -1
  167. package/modules/geo-world-110m.min.cjs +1 -1
  168. package/modules/geo-world-110m.min.js +1 -1
  169. package/modules/geo-world-50m.d.ts +1 -1
  170. package/modules/geo-world-50m.esm.min.js +1 -1
  171. package/modules/geo-world-50m.min.cjs +1 -1
  172. package/modules/geo-world-50m.min.js +1 -1
  173. package/modules/geometry.d.ts +1 -1
  174. package/modules/geometry.esm.min.js +2 -2
  175. package/modules/geometry.min.cjs +2 -2
  176. package/modules/geometry.min.js +2 -2
  177. package/modules/htmx.d.ts +1 -1
  178. package/modules/htmx.esm.min.js +3 -3
  179. package/modules/htmx.min.cjs +3 -3
  180. package/modules/htmx.min.js +3 -3
  181. package/modules/kanban.d.ts +1 -1
  182. package/modules/kanban.esm.min.js +2 -2
  183. package/modules/kanban.min.cjs +2 -2
  184. package/modules/kanban.min.js +2 -2
  185. package/modules/kpi.d.ts +1 -1
  186. package/modules/kpi.esm.min.js +2 -2
  187. package/modules/kpi.min.cjs +2 -2
  188. package/modules/kpi.min.js +2 -2
  189. package/modules/layout.d.ts +1 -1
  190. package/modules/layout.esm.min.js +2 -2
  191. package/modules/layout.min.cjs +2 -2
  192. package/modules/layout.min.js +2 -2
  193. package/modules/leaflet.d.ts +1 -1
  194. package/modules/leaflet.esm.min.js +2 -2
  195. package/modules/leaflet.min.cjs +2 -2
  196. package/modules/leaflet.min.js +2 -2
  197. package/modules/list.d.ts +1 -1
  198. package/modules/list.esm.min.js +2 -2
  199. package/modules/list.min.cjs +2 -2
  200. package/modules/list.min.js +2 -2
  201. package/modules/mock-socket.d.ts +1 -1
  202. package/modules/mock-socket.esm.min.js +1 -1
  203. package/modules/mock-socket.min.cjs +1 -1
  204. package/modules/mock-socket.min.js +1 -1
  205. package/modules/presets/antd5.css +23 -0
  206. package/modules/presets/bootstrap5.css +46 -5
  207. package/modules/presets/fluent2.css +31 -4
  208. package/modules/presets/material3.css +53 -5
  209. package/modules/presets.d.ts +1 -1
  210. package/modules/presets.esm.min.js +2 -2
  211. package/modules/presets.min.cjs +2 -2
  212. package/modules/presets.min.js +2 -2
  213. package/modules/react.d.ts +1 -1
  214. package/modules/react.esm.min.js +2 -2
  215. package/modules/react.min.cjs +2 -2
  216. package/modules/react.min.js +2 -2
  217. package/modules/svelte.d.ts +1 -1
  218. package/modules/svelte.esm.min.js +2 -2
  219. package/modules/svelte.min.cjs +2 -2
  220. package/modules/svelte.min.js +2 -2
  221. package/modules/tabs.d.ts +1 -1
  222. package/modules/tabs.esm.min.js +2 -2
  223. package/modules/tabs.min.cjs +2 -2
  224. package/modules/tabs.min.js +2 -2
  225. package/modules/vue.d.ts +1 -1
  226. package/modules/vue.esm.min.js +2 -2
  227. package/modules/vue.min.cjs +2 -2
  228. package/modules/vue.min.js +2 -2
  229. package/modules/webcomponent.d.ts +1 -1
  230. package/modules/webcomponent.esm.min.js +3 -3
  231. package/modules/webcomponent.min.cjs +3 -3
  232. package/modules/webcomponent.min.js +3 -3
  233. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Lattice Grid 1.80.0, react module
2
+ * Lattice Grid 1.81.0, react module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
6
- (function(De){"use strict";var Ae=Object.create(null),Ge=Object.create(null);function ke(c,ae){Ae[c]=ae}function Ne(c){var ae=Ge[c];if(ae)return ae;var be=Object.create(null);Ge[c]=be;var ye=Ae[c];if(!ye)throw new Error("[lattice] missing module: "+c);return ye(be,Ne),be}ke("packages/core/src/internal/util.js",function(c,ae){"use strict";Object.defineProperty(c,"VERSION",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"reportedWarnings",{enumerable:!0,get:function(){return s}}),Object.defineProperty(c,"warnOnce",{enumerable:!0,get:function(){return W}}),Object.defineProperty(c,"infoOnce",{enumerable:!0,get:function(){return z}}),Object.defineProperty(c,"resetWarnings",{enumerable:!0,get:function(){return M}}),Object.defineProperty(c,"fail",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(c,"invariant",{enumerable:!0,get:function(){return _}}),Object.defineProperty(c,"DEV",{enumerable:!0,get:function(){return D}}),Object.defineProperty(c,"isObject",{enumerable:!0,get:function(){return V}}),Object.defineProperty(c,"isFunction",{enumerable:!0,get:function(){return se}}),Object.defineProperty(c,"isNil",{enumerable:!0,get:function(){return F}}),Object.defineProperty(c,"isBlank",{enumerable:!0,get:function(){return A}}),Object.defineProperty(c,"isCtor",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(c,"pathGetter",{enumerable:!0,get:function(){return X}}),Object.defineProperty(c,"pathSetter",{enumerable:!0,get:function(){return $}}),Object.defineProperty(c,"getPath",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(c,"setPath",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(c,"humanise",{enumerable:!0,get:function(){return f}}),Object.defineProperty(c,"escapeHtml",{enumerable:!0,get:function(){return k}}),Object.defineProperty(c,"titleCase",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(c,"expand",{enumerable:!0,get:function(){return o}}),Object.defineProperty(c,"toArray",{enumerable:!0,get:function(){return p}}),Object.defineProperty(c,"merge",{enumerable:!0,get:function(){return a}}),Object.defineProperty(c,"mergeRow",{enumerable:!0,get:function(){return u}}),Object.defineProperty(c,"Lru",{enumerable:!0,get:function(){return O}}),Object.defineProperty(c,"collator",{enumerable:!0,get:function(){return j}}),Object.defineProperty(c,"defaultCompare",{enumerable:!0,get:function(){return b}}),Object.defineProperty(c,"now",{enumerable:!0,get:function(){return J}}),Object.defineProperty(c,"nextFrame",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(c,"cancelFrame",{enumerable:!0,get:function(){return N}}),Object.defineProperty(c,"frameBatched",{enumerable:!0,get:function(){return x}}),Object.defineProperty(c,"settleDebounce",{enumerable:!0,get:function(){return w}}),Object.defineProperty(c,"whenIdle",{enumerable:!0,get:function(){return P}}),Object.defineProperty(c,"uid",{enumerable:!0,get:function(){return ee}});const be="1.80.0";async function ye(){return be}const Y="1.80.0",te=new Set,le=2e3;function U(t){if(te.add(t),te.size>le){const n=te.values().next().value;n!==void 0&&te.delete(n)}}const ne=[],L=500;function C(t,n,i){ne.push({key:t,level:n,message:i.map(m=>typeof m=="string"?m:g(m)).join(" "),at:Date.now()}),ne.length>L&&ne.shift()}function g(t){if(t instanceof Error)return t.message;try{return JSON.stringify(t)}catch{return String(t)}}function s(){return ne.map(t=>({...t}))}function E(t){if(t.length===0||typeof t[0]!="string")return t;const n=t[0].replace(/^\[lattice\]\s*/,"");return n===t[0]?t:[n,...t.slice(1)]}function W(t,...n){if(te.has(t))return;U(t);const i=E(n);C(t,"warn",i),console.warn("[lattice]",...i)}function z(t,...n){if(te.has(t))return;U(t);const i=E(n);C(t,"info",i),console.info("[lattice]",...i)}function M(){te.clear(),ne.length=0}function Z(t,n){const i=new Error(`[lattice] ${t}`);throw n!==void 0&&(i.cause=n),i}function _(t,n){t||Z(n)}const D=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})();function V(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function se(t){return typeof t=="function"}function F(t){return t==null}function A(t){return t==null||t===""}function oe(t){return typeof t!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(t))?!0:!!(t.prototype&&Object.getOwnPropertyNames(t.prototype).length>1)}const K=new Map;function X(t){let n=K.get(t);if(n)return n;if(!t.includes("."))n=i=>i?.[t];else{const i=t.split("."),m=i.length;n=S=>{let q=S;for(let T=0;T<m;T++){if(q==null)return;q=q[i[T]]}return q}}return K.set(t,n),n}const H=new Map;function $(t){let n=H.get(t);if(n)return n;if(!t.includes("."))n=(i,m)=>{i!=null&&(i[t]=m)};else{const i=t.split("."),m=i.length-1;n=(S,q)=>{let T=S;for(let G=0;G<m;G++){if(T==null)return;const v=i[G];T[v]==null&&(T[v]={}),T=T[v]}T!=null&&(T[i[m]]=q)}}return H.set(t,n),n}function ue(t,n){return X(n)(t)}function ve(t,n,i){$(n)(t,i)}function f(t){return t?(t.includes(".")?t.slice(t.lastIndexOf(".")+1):t).replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/\s+/g," ").trim().replace(/^./,i=>i.toUpperCase()):""}const h={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function k(t){const n=t==null?"":String(t);return/[&<>"']/.test(n)?n.replace(/[&<>"']/g,i=>h[i]):n}function ie(t){return String(t).replace(/\w\S*/g,n=>n[0].toUpperCase()+n.slice(1).toLowerCase())}function o(t,n,i){if(t!==void 0)return t===!0?{enabled:!0,...i}:t===!1?{enabled:!1}:V(t)?t:{[n]:t,enabled:!0}}function p(t){return t==null?[]:Array.isArray(t)?t:[t]}const r=Object.freeze(new Set(["__proto__","constructor","prototype"]));function a(t,n){if(!V(t))return V(n)?{...n}:n;if(!V(n))return n===void 0?t:n;const i={...t};for(const m of Object.keys(n)){if(r.has(m))continue;const S=n[m];S!==void 0&&(i[m]=V(S)&&V(i[m])?a(i[m],S):S)}return i}function u(t,n){if(!V(t)||!V(n)||t===n)return n;const i=Object.create(Object.getPrototypeOf(t));return Object.assign(i,t,n),i}class O{#n;#e=new Map;#t;constructor(n=256,i=null){this.#n=n,this.#t=i}get size(){return this.#e.size}get max(){return this.#n}set max(n){this.#n=n,this.#r()}has(n){return this.#e.has(n)}get(n){const i=this.#e;if(!i.has(n))return;const m=i.get(n);return i.delete(n),i.set(n,m),m}peek(n){return this.#e.get(n)}set(n,i){const m=this.#e;return m.has(n)&&m.delete(n),m.set(n,i),this.#r(),i}delete(n){const i=this.#e.get(n);return this.#e.delete(n)&&this.#t&&this.#t(i,n),i}clear(){if(this.#t)for(const[n,i]of this.#e)this.#t(i,n);this.#e.clear()}keys(){return this.#e.keys()}values(){return this.#e.values()}#r(){const n=this.#e;for(;n.size>this.#n;){const i=n.keys().next().value,m=n.get(i);n.delete(i),this.#t&&this.#t(m,i)}}}const y=new Map;function j(t,n){const i=`${t||""}|${n?JSON.stringify(n):""}`;let m=y.get(i);return m||(m=new Intl.Collator(t||void 0,{numeric:!0,sensitivity:"variant",...n}),y.set(i,m)),m}function b(t,n){if(t===n)return 0;if(t==null)return 1;if(n==null)return-1;if(typeof t=="number"&&typeof n=="number")return Number.isNaN(t)?Number.isNaN(n)?0:1:Number.isNaN(n)||t<n?-1:t>n?1:0;const i=String(t),m=String(n);return i<m?-1:i>m?1:0}function J(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}const I=typeof requestAnimationFrame=="function";function Q(t){return I?requestAnimationFrame(t):setTimeout(()=>t(J()),16)}function N(t){t!=null&&(I?cancelAnimationFrame(t):clearTimeout(t))}function x(t){let n=null,i=null;const m=()=>{n=null;const q=i;i=null,t(...q||[])},S=(...q)=>{i=q,n===null&&(n=Q(m))};return S.cancel=()=>{N(n),n=null,i=null},S.flush=()=>{n!==null&&(N(n),m())},S}function w(t,n){let i=null,m=null;const S=()=>{if(i=null,m===null)return;const G=m;m=null,t(...G),q()},q=()=>{i=setTimeout(S,n),typeof i?.unref=="function"&&i.unref()},T=(...G)=>{i===null?(t(...G),q()):(m=G,clearTimeout(i),q())};return T.flush=()=>{if(i!==null&&clearTimeout(i),i=null,m===null)return;const G=m;m=null,t(...G)},T.cancel=()=>{i!==null&&clearTimeout(i),i=null,m=null},T.pending=()=>i!==null||m!==null,T}function P(t,n=50){return typeof requestIdleCallback=="function"?requestIdleCallback(t,{timeout:n}):setTimeout(()=>t({timeRemaining:()=>0,didTimeout:!0}),1)}let re=0;function ee(t="l"){return`${t}${(++re).toString(36)}`}}),ke("packages/modules/shared/adapter.js",function(c,ae){"use strict";Object.defineProperty(c,"EVENT_NAMES",{enumerable:!0,get:function(){return be}}),Object.defineProperty(c,"handlerName",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"dashedName",{enumerable:!0,get:function(){return te}}),Object.defineProperty(c,"CONFIG_KEY_ALIASES",{enumerable:!0,get:function(){return le}}),Object.defineProperty(c,"aliasConfigKey",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"isHandlerProp",{enumerable:!0,get:function(){return L}}),Object.defineProperty(c,"partition",{enumerable:!0,get:function(){return C}}),Object.defineProperty(c,"createGridController",{enumerable:!0,get:function(){return g}});const be=Object.freeze(["ready","destroy","render:first","render:done","config:changed","licence:changed","model:changed","rows:changed","rows:queued","rows:deferred","rows:paused","rows:resumed","row:received","row:sent","row:copied","row:moved","source:error","source:total","stream:chunk","stream:end","stream:evicted","rowDrag:started","rowDrag:moved","rowDrag:left","rowDrag:ended","cell:changed","cell:pending","cell:confirmed","cell:reverted","cell:conflict","cell:clicked","cell:dblclicked","cell:contextmenu","cell:mouseover","cell:mouseout","cell:mousedown","cell:mouseup","cell:edit:start","cell:edit:end","row:edit:start","row:edit:end","row:clicked","row:dblclicked","row:pending","row:confirmed","row:reverted","row:conflict","form:opened","form:closed","form:saved","form:error","sort:changed","filter:changed","group:toggled","facet:computed","facet:filtered","facet:expanded","facet:failed","column:moved","column:resized","column:visible","column:pinned","column:grouped","column:pivoted","column:filter:open","column:profile:open","column:menu:open","columns:changed","columns:tagged","columngroup:changed","header:contextmenu","pivot:drill","selection:changed","range:changed","clipboard:copy","page:changed","scroll","scroll:end","size:changed","detail:toggled","detail:cell:edit:start","detail:cell:edit:end","detail:row:edit:start","detail:row:edit:end","detail:cell:changed","toolpanel:focus","highlight:changed","find:changed","tree:loading","tree:loaded","tree:loadFailed","tree:loadAborted","state:changed","state:reset","history:changed","history:applied","views:changed","view:applied","view:saved","view:removed","view:renamed","view:default","formatting:changed","redaction:changed","permissions:changed","presentation:changed","presentation:started","presentation:ended","presentation:view","presentation:scale","presentation:spotlight","presentation:captured","comment:added","comment:edited","comment:deleted","comment:failed","comment:resolved","comment:unresolved","comment:threadOpened","comment:threadClosed","comment:indexLoaded","presence:published","presence:joined","presence:updated","presence:left","presence:failed","presence:lockRefused","diff:changed","diff:swapped","timeline:attached","timeline:detached","timeline:seek","timeline:seeking","annotation:changed","validation:failed","validation:cleared","export:progress","export:request","export:done","shortcuts:opened","shortcuts:closed","print:before","print:after","beforeEdit","beforeSort","beforeFilter","beforeColumnMove","beforeColumnResize","beforeColumnHide","beforeSelect","beforeRowAdd","beforeDelete","beforeRowMove","beforeGroup","beforeRowReceive","edit:cancelled","sort:cancelled","filter:cancelled","columnMove:cancelled","columnResize:cancelled","columnHide:cancelled","selection:cancelled","rowAdd:cancelled","delete:cancelled","rowMove:cancelled","group:cancelled","rowReceive:cancelled"]),ye=Object.freeze({sort:(s,E)=>s.sort.set(E||[]),filters:(s,E)=>s.filters.set(E||null),quickFilter:(s,E)=>{if(E&&typeof E=="object"){s.filters.quick(E.text||"",{mode:E.mode});return}s.filters.quick(typeof E=="string"?E:"")},selectedKeys:(s,E)=>s.selection.set(Array.isArray(E)?E:[])});function Y(s){return`on${String(s).split(":").map(W=>W.charAt(0).toUpperCase()+W.slice(1)).join("")}`}function te(s){return String(s).replace(/:/g,"-")}const le=Object.freeze({"row-key":"rowKey","row-height":"rowHeight","header-height":"headerHeight","auto-height":"autoHeight"});function U(s){return Object.hasOwn(le,s)?le[s]:s}const ne=Object.freeze(Object.fromEntries(be.map(s=>[Y(s),s])));function L(s){return Object.hasOwn(ne,s)}function C(s){const E={},W={},z={};for(const[M,Z]of Object.entries(s||{})){if(L(M)){z[M]=Z;continue}if(Object.hasOwn(ye,M)){W[M]=Z;continue}E[M]=Z}return{config:E,imperative:W,handlers:z}}function g(s){const E=s.createGrid;if(typeof E!="function")throw new TypeError("createGridController needs createGrid; pass it in from the grid package.");const W=C(s.props||{}),z=E(s.element,{...W.config});let M=W.handlers,Z=W.config,_={};const D=F=>{if(!F||typeof F.type!="string")return;const A=M[Y(F.type)];typeof A=="function"&&A(F)},V=z.on("*",D);for(const[F,A]of Object.entries(W.imperative))A!==void 0&&(ye[F](z,A),_[F]=A);let se=!1;return{grid:z,update(F){if(se)return;const A=C(F||{});M=A.handlers;const oe={};for(const[K,X]of Object.entries(A.config))Object.is(Z[K],X)||(oe[K]=X);for(const K of Object.keys(Z))Object.hasOwn(A.config,K)||(oe[K]=void 0);Object.keys(oe).length&&z.setAll(oe),Z=A.config;for(const[K,X]of Object.entries(ye)){const H=A.imperative[K];Object.is(_[K],H)||H===void 0&&!Object.hasOwn(_,K)||(X(z,H),_[K]=H)}},destroy(){se||(se=!0,V(),z.destroy())}}}}),ke("packages/modules/react/viewers.js",function(c,ae){"use strict";Object.defineProperty(c,"VIEWER_EVENTS",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"VIEWER_APPLY",{enumerable:!0,get:function(){return te}}),Object.defineProperty(c,"VIEWER_BULK_UPDATE",{enumerable:!0,get:function(){return le}}),Object.defineProperty(c,"viewerHandlerName",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"partitionViewerProps",{enumerable:!0,get:function(){return L}}),Object.defineProperty(c,"createViewerController",{enumerable:!0,get:function(){return C}});const ye=ae("packages/core/src/internal/util.js").warnOnce,Y=Object.freeze({kpi:Object.freeze(["tile:click","tile:dblclick","tile:contextmenu","node:toggle","change","tile:status"]),kanban:Object.freeze(["card:click","card:dblclick","card:contextmenu","card:move","card:reverted","card:confirmed","selection:changed","column:collapse","card:add","drag:start","drag:end","swimlane:collapse","swimlane:reorder","column:reorder","filter:changed","sprint:changed","epic:changed","card:expand","card:drill","card:edit","card:sla","beforeMove","beforeAdd","beforeEdit","beforeLaneReorder","beforeColumnReorder","beforeColumnChange","move:cancelled","add:cancelled","edit:cancelled","laneReorder:cancelled","columnReorder:cancelled","columnChange:cancelled"]),tabs:Object.freeze(["beforeTabChange","tab:changed","tabChange:cancelled"]),chart:Object.freeze(["click","hover","leave","draw","legend"]),gantt:Object.freeze(["schedule","error"]),layout:Object.freeze(["layout:changed","window:moved","window:resized","window:closed","beforeWindowClose","windowClose:cancelled"]),router:Object.freeze(["metrics"])}),te=Object.freeze({kpi:Object.freeze({rows:(g,s)=>g.setRows(Array.isArray(s)?s:[])}),kanban:Object.freeze({rows:(g,s)=>g.setRows(Array.isArray(s)?s:[]),quickFilter:(g,s)=>g.setQuickFilter(typeof s=="string"?s:""),sprint:(g,s)=>g.setSprint(s),epic:(g,s)=>g.setEpic(s),loading:(g,s)=>g.setLoading(!!s),error:(g,s)=>g.setError(s??null)}),gantt:Object.freeze({tasks:(g,s)=>g.setTasks(Array.isArray(s)?s:[]),dependencies:(g,s)=>g.setDependencies(Array.isArray(s)?s:[])}),tabs:Object.freeze({active:(g,s)=>{typeof s=="string"&&g.activate(s)}}),chart:Object.freeze({}),layout:Object.freeze({})}),le=Object.freeze({chart:"update"});function U(g){return`on${String(g).split(":").map(E=>E.charAt(0).toUpperCase()+E.slice(1)).join("")}`}const ne=Object.freeze(Object.fromEntries(Object.entries(Y).map(([g,s])=>[g,Object.freeze(Object.fromEntries(s.map(E=>[U(E),E])))])));function L(g,s){const E=ne[g]||{},W=te[g]||{},z={},M={},Z={};for(const[_,D]of Object.entries(s||{})){if(Object.hasOwn(E,_)){Z[_]=D;continue}if(Object.hasOwn(W,_)){M[_]=D,z[_]=D;continue}z[_]=D}return{config:z,live:M,handlers:Z}}function C(g){const s=String(g.viewer),E=g.mount,W=g.name||s;if(typeof E!="function")throw new TypeError(`createViewerController needs a mount factory for "${s}"; pass the module's own factory in, e.g. { createKPI } from lattice-grid/modules/kpi.`);const z=L(s,g.props||{}),M=E(g.element,{...z.config});if(!M||typeof M!="object")throw new TypeError(`the ${W} factory returned no instance; nothing can be driven.`);let Z=z.handlers,_=z.config;const D={...z.live},V=[];if(typeof M.on=="function")for(const oe of Y[s]||[]){const K=U(oe),X=M.on(oe,H=>{const $=Z[K];typeof $=="function"&&$(H)});typeof X=="function"&&V.push(X)}const se=le[s],F=te[s]||{};let A=!1;return{instance:M,update(oe){if(A)return;const K=L(s,oe||{});Z=K.handlers;const X={};for(const[$,ue]of Object.entries(K.config))Object.is(_[$],ue)||(X[$]=ue);if(_=K.config,!Object.keys(X).length)return;const H=[];for(const $ of Object.keys(X)){const ue=F[$];if(ue){ue(M,X[$]),D[$]=X[$];continue}se&&typeof M[se]=="function"||H.push($)}if(se&&typeof M[se]=="function"){const $={};for(const ue of Object.keys(X))F[ue]||($[ue]=X[ue]);Object.keys($).length&&M[se]($)}H.length&&ye(`react.viewer.${s}.mountOnly.${H.join(".")}`,`${W}: ${H.map($=>`\`${$}\``).join(", ")} changed, but ${W} takes ${H.length===1?"it":"them"} only when the viewer is created. Nothing was applied and the viewer was NOT rebuilt — rebuilding it silently would throw away scroll position, selection and expansion. Give the component a \`key\` that changes when this must take effect, so the rebuild is yours and visible, or drive the instance through the ref.`)},destroy(){if(!A){A=!0;for(const oe of V)try{oe()}catch{}V.length=0,typeof M.destroy=="function"&&M.destroy()}}}}}),ke("packages/modules/presets/index.js",function(c,ae){"use strict";Object.defineProperty(c,"themeFromMui",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return ne}});const ye=ae("packages/core/src/internal/util.js").warnOnce;function Y(L,C){if(typeof L!="string")return L;const g=L.trim().match(/^#([0-9a-f]{6})$/i);if(!g)return L;const s=g[1],E=parseInt(s.slice(0,2),16),W=parseInt(s.slice(2,4),16),z=parseInt(s.slice(4,6),16);return`rgba(${E}, ${W}, ${z}, ${C})`}function te(L){const C=L.palette,g=C.mode==="dark";return{"--lattice-background":C.background.default,"--lattice-surface":C.background.paper,"--lattice-surface-alt":g?"#2a2a2a":C.grey[50],"--lattice-border-color":C.divider,"--lattice-border-strong":g?C.grey[600]:C.grey[400],"--lattice-foreground":C.text.primary,"--lattice-foreground-muted":C.text.secondary,"--lattice-header-foreground":C.text.primary,"--lattice-accent":C.primary.main,"--lattice-accent-contrast":C.primary.contrastText,"--lattice-link-color":C.primary.main,"--lattice-selected-background":Y(C.primary.main,.12),"--lattice-hovered-background":Y(C.text.primary,.06),"--lattice-focus-color":C.primary.main,"--lattice-variant-danger-solid":C.error.main,"--lattice-variant-danger-fill":Y(C.error.main,.12),"--lattice-variant-warning-solid":C.warning.main,"--lattice-variant-warning-fill":Y(C.warning.main,.12),"--lattice-variant-success-solid":C.success.main,"--lattice-variant-success-fill":Y(C.success.main,.12),"--lattice-variant-info-solid":C.info.main,"--lattice-variant-info-fill":Y(C.info.main,.12),"--lattice-radius":`${L.shape.borderRadius}px`,"--lattice-font-family":L.typography.fontFamily,"--lattice-font-size":`${L.typography.body2.fontSize}`,"--lattice-header-font-weight":String(L.typography.fontWeightMedium)}}function le(L){return`.lattice {
6
+ (function(De){"use strict";var Ae=Object.create(null),Ge=Object.create(null);function ke(c,ae){Ae[c]=ae}function Ne(c){var ae=Ge[c];if(ae)return ae;var be=Object.create(null);Ge[c]=be;var ye=Ae[c];if(!ye)throw new Error("[lattice] missing module: "+c);return ye(be,Ne),be}ke("packages/core/src/internal/util.js",function(c,ae){"use strict";Object.defineProperty(c,"VERSION",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"reportedWarnings",{enumerable:!0,get:function(){return s}}),Object.defineProperty(c,"warnOnce",{enumerable:!0,get:function(){return W}}),Object.defineProperty(c,"infoOnce",{enumerable:!0,get:function(){return z}}),Object.defineProperty(c,"resetWarnings",{enumerable:!0,get:function(){return M}}),Object.defineProperty(c,"fail",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(c,"invariant",{enumerable:!0,get:function(){return _}}),Object.defineProperty(c,"DEV",{enumerable:!0,get:function(){return D}}),Object.defineProperty(c,"isObject",{enumerable:!0,get:function(){return V}}),Object.defineProperty(c,"isFunction",{enumerable:!0,get:function(){return se}}),Object.defineProperty(c,"isNil",{enumerable:!0,get:function(){return F}}),Object.defineProperty(c,"isBlank",{enumerable:!0,get:function(){return A}}),Object.defineProperty(c,"isCtor",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(c,"pathGetter",{enumerable:!0,get:function(){return X}}),Object.defineProperty(c,"pathSetter",{enumerable:!0,get:function(){return $}}),Object.defineProperty(c,"getPath",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(c,"setPath",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(c,"humanise",{enumerable:!0,get:function(){return f}}),Object.defineProperty(c,"escapeHtml",{enumerable:!0,get:function(){return k}}),Object.defineProperty(c,"titleCase",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(c,"expand",{enumerable:!0,get:function(){return o}}),Object.defineProperty(c,"toArray",{enumerable:!0,get:function(){return p}}),Object.defineProperty(c,"merge",{enumerable:!0,get:function(){return a}}),Object.defineProperty(c,"mergeRow",{enumerable:!0,get:function(){return u}}),Object.defineProperty(c,"Lru",{enumerable:!0,get:function(){return O}}),Object.defineProperty(c,"collator",{enumerable:!0,get:function(){return j}}),Object.defineProperty(c,"defaultCompare",{enumerable:!0,get:function(){return b}}),Object.defineProperty(c,"now",{enumerable:!0,get:function(){return J}}),Object.defineProperty(c,"nextFrame",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(c,"cancelFrame",{enumerable:!0,get:function(){return N}}),Object.defineProperty(c,"frameBatched",{enumerable:!0,get:function(){return x}}),Object.defineProperty(c,"settleDebounce",{enumerable:!0,get:function(){return w}}),Object.defineProperty(c,"whenIdle",{enumerable:!0,get:function(){return P}}),Object.defineProperty(c,"uid",{enumerable:!0,get:function(){return ee}});const be="1.81.0";async function ye(){return be}const Y="1.81.0",te=new Set,le=2e3;function U(t){if(te.add(t),te.size>le){const n=te.values().next().value;n!==void 0&&te.delete(n)}}const ne=[],L=500;function C(t,n,i){ne.push({key:t,level:n,message:i.map(m=>typeof m=="string"?m:g(m)).join(" "),at:Date.now()}),ne.length>L&&ne.shift()}function g(t){if(t instanceof Error)return t.message;try{return JSON.stringify(t)}catch{return String(t)}}function s(){return ne.map(t=>({...t}))}function E(t){if(t.length===0||typeof t[0]!="string")return t;const n=t[0].replace(/^\[lattice\]\s*/,"");return n===t[0]?t:[n,...t.slice(1)]}function W(t,...n){if(te.has(t))return;U(t);const i=E(n);C(t,"warn",i),console.warn("[lattice]",...i)}function z(t,...n){if(te.has(t))return;U(t);const i=E(n);C(t,"info",i),console.info("[lattice]",...i)}function M(){te.clear(),ne.length=0}function Z(t,n){const i=new Error(`[lattice] ${t}`);throw n!==void 0&&(i.cause=n),i}function _(t,n){t||Z(n)}const D=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})();function V(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function se(t){return typeof t=="function"}function F(t){return t==null}function A(t){return t==null||t===""}function oe(t){return typeof t!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(t))?!0:!!(t.prototype&&Object.getOwnPropertyNames(t.prototype).length>1)}const K=new Map;function X(t){let n=K.get(t);if(n)return n;if(!t.includes("."))n=i=>i?.[t];else{const i=t.split("."),m=i.length;n=S=>{let q=S;for(let T=0;T<m;T++){if(q==null)return;q=q[i[T]]}return q}}return K.set(t,n),n}const H=new Map;function $(t){let n=H.get(t);if(n)return n;if(!t.includes("."))n=(i,m)=>{i!=null&&(i[t]=m)};else{const i=t.split("."),m=i.length-1;n=(S,q)=>{let T=S;for(let G=0;G<m;G++){if(T==null)return;const v=i[G];T[v]==null&&(T[v]={}),T=T[v]}T!=null&&(T[i[m]]=q)}}return H.set(t,n),n}function ue(t,n){return X(n)(t)}function ve(t,n,i){$(n)(t,i)}function f(t){return t?(t.includes(".")?t.slice(t.lastIndexOf(".")+1):t).replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/\s+/g," ").trim().replace(/^./,i=>i.toUpperCase()):""}const h={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function k(t){const n=t==null?"":String(t);return/[&<>"']/.test(n)?n.replace(/[&<>"']/g,i=>h[i]):n}function ie(t){return String(t).replace(/\w\S*/g,n=>n[0].toUpperCase()+n.slice(1).toLowerCase())}function o(t,n,i){if(t!==void 0)return t===!0?{enabled:!0,...i}:t===!1?{enabled:!1}:V(t)?t:{[n]:t,enabled:!0}}function p(t){return t==null?[]:Array.isArray(t)?t:[t]}const r=Object.freeze(new Set(["__proto__","constructor","prototype"]));function a(t,n){if(!V(t))return V(n)?{...n}:n;if(!V(n))return n===void 0?t:n;const i={...t};for(const m of Object.keys(n)){if(r.has(m))continue;const S=n[m];S!==void 0&&(i[m]=V(S)&&V(i[m])?a(i[m],S):S)}return i}function u(t,n){if(!V(t)||!V(n)||t===n)return n;const i=Object.create(Object.getPrototypeOf(t));return Object.assign(i,t,n),i}class O{#n;#e=new Map;#t;constructor(n=256,i=null){this.#n=n,this.#t=i}get size(){return this.#e.size}get max(){return this.#n}set max(n){this.#n=n,this.#r()}has(n){return this.#e.has(n)}get(n){const i=this.#e;if(!i.has(n))return;const m=i.get(n);return i.delete(n),i.set(n,m),m}peek(n){return this.#e.get(n)}set(n,i){const m=this.#e;return m.has(n)&&m.delete(n),m.set(n,i),this.#r(),i}delete(n){const i=this.#e.get(n);return this.#e.delete(n)&&this.#t&&this.#t(i,n),i}clear(){if(this.#t)for(const[n,i]of this.#e)this.#t(i,n);this.#e.clear()}keys(){return this.#e.keys()}values(){return this.#e.values()}#r(){const n=this.#e;for(;n.size>this.#n;){const i=n.keys().next().value,m=n.get(i);n.delete(i),this.#t&&this.#t(m,i)}}}const y=new Map;function j(t,n){const i=`${t||""}|${n?JSON.stringify(n):""}`;let m=y.get(i);return m||(m=new Intl.Collator(t||void 0,{numeric:!0,sensitivity:"variant",...n}),y.set(i,m)),m}function b(t,n){if(t===n)return 0;if(t==null)return 1;if(n==null)return-1;if(typeof t=="number"&&typeof n=="number")return Number.isNaN(t)?Number.isNaN(n)?0:1:Number.isNaN(n)||t<n?-1:t>n?1:0;const i=String(t),m=String(n);return i<m?-1:i>m?1:0}function J(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}const I=typeof requestAnimationFrame=="function";function Q(t){return I?requestAnimationFrame(t):setTimeout(()=>t(J()),16)}function N(t){t!=null&&(I?cancelAnimationFrame(t):clearTimeout(t))}function x(t){let n=null,i=null;const m=()=>{n=null;const q=i;i=null,t(...q||[])},S=(...q)=>{i=q,n===null&&(n=Q(m))};return S.cancel=()=>{N(n),n=null,i=null},S.flush=()=>{n!==null&&(N(n),m())},S}function w(t,n){let i=null,m=null;const S=()=>{if(i=null,m===null)return;const G=m;m=null,t(...G),q()},q=()=>{i=setTimeout(S,n),typeof i?.unref=="function"&&i.unref()},T=(...G)=>{i===null?(t(...G),q()):(m=G,clearTimeout(i),q())};return T.flush=()=>{if(i!==null&&clearTimeout(i),i=null,m===null)return;const G=m;m=null,t(...G)},T.cancel=()=>{i!==null&&clearTimeout(i),i=null,m=null},T.pending=()=>i!==null||m!==null,T}function P(t,n=50){return typeof requestIdleCallback=="function"?requestIdleCallback(t,{timeout:n}):setTimeout(()=>t({timeRemaining:()=>0,didTimeout:!0}),1)}let re=0;function ee(t="l"){return`${t}${(++re).toString(36)}`}}),ke("packages/modules/shared/adapter.js",function(c,ae){"use strict";Object.defineProperty(c,"EVENT_NAMES",{enumerable:!0,get:function(){return be}}),Object.defineProperty(c,"handlerName",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"dashedName",{enumerable:!0,get:function(){return te}}),Object.defineProperty(c,"CONFIG_KEY_ALIASES",{enumerable:!0,get:function(){return le}}),Object.defineProperty(c,"aliasConfigKey",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"isHandlerProp",{enumerable:!0,get:function(){return L}}),Object.defineProperty(c,"partition",{enumerable:!0,get:function(){return C}}),Object.defineProperty(c,"createGridController",{enumerable:!0,get:function(){return g}});const be=Object.freeze(["ready","destroy","render:first","render:done","config:changed","licence:changed","model:changed","rows:changed","rows:queued","rows:deferred","rows:paused","rows:resumed","row:received","row:sent","row:copied","row:moved","source:error","source:total","stream:chunk","stream:end","stream:evicted","rowDrag:started","rowDrag:moved","rowDrag:left","rowDrag:ended","cell:changed","cell:pending","cell:confirmed","cell:reverted","cell:conflict","cell:clicked","cell:dblclicked","cell:contextmenu","cell:mouseover","cell:mouseout","cell:mousedown","cell:mouseup","cell:edit:start","cell:edit:end","row:edit:start","row:edit:end","row:clicked","row:dblclicked","row:pending","row:confirmed","row:reverted","row:conflict","form:opened","form:closed","form:saved","form:error","sort:changed","filter:changed","group:toggled","facet:computed","facet:filtered","facet:expanded","facet:failed","column:moved","column:resized","column:visible","column:pinned","column:grouped","column:pivoted","column:filter:open","column:profile:open","column:menu:open","columns:changed","columns:tagged","columngroup:changed","header:contextmenu","pivot:drill","selection:changed","range:changed","clipboard:copy","page:changed","scroll","scroll:end","size:changed","detail:toggled","detail:cell:edit:start","detail:cell:edit:end","detail:row:edit:start","detail:row:edit:end","detail:cell:changed","toolpanel:focus","highlight:changed","find:changed","tree:loading","tree:loaded","tree:loadFailed","tree:loadAborted","state:changed","state:reset","history:changed","history:applied","views:changed","view:applied","view:saved","view:removed","view:renamed","view:default","formatting:changed","redaction:changed","permissions:changed","presentation:changed","presentation:started","presentation:ended","presentation:view","presentation:scale","presentation:spotlight","presentation:captured","comment:added","comment:edited","comment:deleted","comment:failed","comment:resolved","comment:unresolved","comment:threadOpened","comment:threadClosed","comment:indexLoaded","presence:published","presence:joined","presence:updated","presence:left","presence:failed","presence:lockRefused","diff:changed","diff:swapped","timeline:attached","timeline:detached","timeline:seek","timeline:seeking","annotation:changed","validation:failed","validation:cleared","export:progress","export:request","export:done","shortcuts:opened","shortcuts:closed","print:before","print:after","beforeEdit","beforeSort","beforeFilter","beforeColumnMove","beforeColumnResize","beforeColumnHide","beforeSelect","beforeRowAdd","beforeDelete","beforeRowMove","beforeGroup","beforeRowReceive","edit:cancelled","sort:cancelled","filter:cancelled","columnMove:cancelled","columnResize:cancelled","columnHide:cancelled","selection:cancelled","rowAdd:cancelled","delete:cancelled","rowMove:cancelled","group:cancelled","rowReceive:cancelled"]),ye=Object.freeze({sort:(s,E)=>s.sort.set(E||[]),filters:(s,E)=>s.filters.set(E||null),quickFilter:(s,E)=>{if(E&&typeof E=="object"){s.filters.quick(E.text||"",{mode:E.mode});return}s.filters.quick(typeof E=="string"?E:"")},selectedKeys:(s,E)=>s.selection.set(Array.isArray(E)?E:[])});function Y(s){return`on${String(s).split(":").map(W=>W.charAt(0).toUpperCase()+W.slice(1)).join("")}`}function te(s){return String(s).replace(/:/g,"-")}const le=Object.freeze({"row-key":"rowKey","row-height":"rowHeight","header-height":"headerHeight","auto-height":"autoHeight"});function U(s){return Object.hasOwn(le,s)?le[s]:s}const ne=Object.freeze(Object.fromEntries(be.map(s=>[Y(s),s])));function L(s){return Object.hasOwn(ne,s)}function C(s){const E={},W={},z={};for(const[M,Z]of Object.entries(s||{})){if(L(M)){z[M]=Z;continue}if(Object.hasOwn(ye,M)){W[M]=Z;continue}E[M]=Z}return{config:E,imperative:W,handlers:z}}function g(s){const E=s.createGrid;if(typeof E!="function")throw new TypeError("createGridController needs createGrid; pass it in from the grid package.");const W=C(s.props||{}),z=E(s.element,{...W.config});let M=W.handlers,Z=W.config,_={};const D=F=>{if(!F||typeof F.type!="string")return;const A=M[Y(F.type)];typeof A=="function"&&A(F)},V=z.on("*",D);for(const[F,A]of Object.entries(W.imperative))A!==void 0&&(ye[F](z,A),_[F]=A);let se=!1;return{grid:z,update(F){if(se)return;const A=C(F||{});M=A.handlers;const oe={};for(const[K,X]of Object.entries(A.config))Object.is(Z[K],X)||(oe[K]=X);for(const K of Object.keys(Z))Object.hasOwn(A.config,K)||(oe[K]=void 0);Object.keys(oe).length&&z.setAll(oe),Z=A.config;for(const[K,X]of Object.entries(ye)){const H=A.imperative[K];Object.is(_[K],H)||H===void 0&&!Object.hasOwn(_,K)||(X(z,H),_[K]=H)}},destroy(){se||(se=!0,V(),z.destroy())}}}}),ke("packages/modules/react/viewers.js",function(c,ae){"use strict";Object.defineProperty(c,"VIEWER_EVENTS",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"VIEWER_APPLY",{enumerable:!0,get:function(){return te}}),Object.defineProperty(c,"VIEWER_BULK_UPDATE",{enumerable:!0,get:function(){return le}}),Object.defineProperty(c,"viewerHandlerName",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"partitionViewerProps",{enumerable:!0,get:function(){return L}}),Object.defineProperty(c,"createViewerController",{enumerable:!0,get:function(){return C}});const ye=ae("packages/core/src/internal/util.js").warnOnce,Y=Object.freeze({kpi:Object.freeze(["tile:click","tile:dblclick","tile:contextmenu","node:toggle","change","tile:status"]),kanban:Object.freeze(["card:click","card:dblclick","card:contextmenu","card:move","card:reverted","card:confirmed","selection:changed","column:collapse","card:add","drag:start","drag:end","swimlane:collapse","swimlane:reorder","column:reorder","filter:changed","sprint:changed","epic:changed","card:expand","card:drill","card:edit","card:sla","beforeMove","beforeAdd","beforeEdit","beforeLaneReorder","beforeColumnReorder","beforeColumnChange","move:cancelled","add:cancelled","edit:cancelled","laneReorder:cancelled","columnReorder:cancelled","columnChange:cancelled"]),tabs:Object.freeze(["beforeTabChange","tab:changed","tabChange:cancelled"]),chart:Object.freeze(["click","hover","leave","draw","legend"]),gantt:Object.freeze(["schedule","error"]),layout:Object.freeze(["layout:changed","window:moved","window:resized","window:closed","beforeWindowClose","windowClose:cancelled"]),router:Object.freeze(["metrics"])}),te=Object.freeze({kpi:Object.freeze({rows:(g,s)=>g.setRows(Array.isArray(s)?s:[])}),kanban:Object.freeze({rows:(g,s)=>g.setRows(Array.isArray(s)?s:[]),quickFilter:(g,s)=>g.setQuickFilter(typeof s=="string"?s:""),sprint:(g,s)=>g.setSprint(s),epic:(g,s)=>g.setEpic(s),loading:(g,s)=>g.setLoading(!!s),error:(g,s)=>g.setError(s??null)}),gantt:Object.freeze({tasks:(g,s)=>g.setTasks(Array.isArray(s)?s:[]),dependencies:(g,s)=>g.setDependencies(Array.isArray(s)?s:[])}),tabs:Object.freeze({active:(g,s)=>{typeof s=="string"&&g.activate(s)}}),chart:Object.freeze({}),layout:Object.freeze({})}),le=Object.freeze({chart:"update"});function U(g){return`on${String(g).split(":").map(E=>E.charAt(0).toUpperCase()+E.slice(1)).join("")}`}const ne=Object.freeze(Object.fromEntries(Object.entries(Y).map(([g,s])=>[g,Object.freeze(Object.fromEntries(s.map(E=>[U(E),E])))])));function L(g,s){const E=ne[g]||{},W=te[g]||{},z={},M={},Z={};for(const[_,D]of Object.entries(s||{})){if(Object.hasOwn(E,_)){Z[_]=D;continue}if(Object.hasOwn(W,_)){M[_]=D,z[_]=D;continue}z[_]=D}return{config:z,live:M,handlers:Z}}function C(g){const s=String(g.viewer),E=g.mount,W=g.name||s;if(typeof E!="function")throw new TypeError(`createViewerController needs a mount factory for "${s}"; pass the module's own factory in, e.g. { createKPI } from lattice-grid/modules/kpi.`);const z=L(s,g.props||{}),M=E(g.element,{...z.config});if(!M||typeof M!="object")throw new TypeError(`the ${W} factory returned no instance; nothing can be driven.`);let Z=z.handlers,_=z.config;const D={...z.live},V=[];if(typeof M.on=="function")for(const oe of Y[s]||[]){const K=U(oe),X=M.on(oe,H=>{const $=Z[K];typeof $=="function"&&$(H)});typeof X=="function"&&V.push(X)}const se=le[s],F=te[s]||{};let A=!1;return{instance:M,update(oe){if(A)return;const K=L(s,oe||{});Z=K.handlers;const X={};for(const[$,ue]of Object.entries(K.config))Object.is(_[$],ue)||(X[$]=ue);if(_=K.config,!Object.keys(X).length)return;const H=[];for(const $ of Object.keys(X)){const ue=F[$];if(ue){ue(M,X[$]),D[$]=X[$];continue}se&&typeof M[se]=="function"||H.push($)}if(se&&typeof M[se]=="function"){const $={};for(const ue of Object.keys(X))F[ue]||($[ue]=X[ue]);Object.keys($).length&&M[se]($)}H.length&&ye(`react.viewer.${s}.mountOnly.${H.join(".")}`,`${W}: ${H.map($=>`\`${$}\``).join(", ")} changed, but ${W} takes ${H.length===1?"it":"them"} only when the viewer is created. Nothing was applied and the viewer was NOT rebuilt — rebuilding it silently would throw away scroll position, selection and expansion. Give the component a \`key\` that changes when this must take effect, so the rebuild is yours and visible, or drive the instance through the ref.`)},destroy(){if(!A){A=!0;for(const oe of V)try{oe()}catch{}V.length=0,typeof M.destroy=="function"&&M.destroy()}}}}}),ke("packages/modules/presets/index.js",function(c,ae){"use strict";Object.defineProperty(c,"themeFromMui",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return ne}});const ye=ae("packages/core/src/internal/util.js").warnOnce;function Y(L,C){if(typeof L!="string")return L;const g=L.trim().match(/^#([0-9a-f]{6})$/i);if(!g)return L;const s=g[1],E=parseInt(s.slice(0,2),16),W=parseInt(s.slice(2,4),16),z=parseInt(s.slice(4,6),16);return`rgba(${E}, ${W}, ${z}, ${C})`}function te(L){const C=L.palette,g=C.mode==="dark";return{"--lattice-background":C.background.default,"--lattice-surface":C.background.paper,"--lattice-surface-alt":g?"#2a2a2a":C.grey[50],"--lattice-border-color":C.divider,"--lattice-border-strong":g?C.grey[600]:C.grey[400],"--lattice-foreground":C.text.primary,"--lattice-foreground-muted":C.text.secondary,"--lattice-header-foreground":C.text.primary,"--lattice-accent":C.primary.main,"--lattice-accent-contrast":C.primary.contrastText,"--lattice-link-color":C.primary.main,"--lattice-selected-background":Y(C.primary.main,.12),"--lattice-hovered-background":Y(C.text.primary,.06),"--lattice-focus-color":C.primary.main,"--lattice-variant-danger-solid":C.error.main,"--lattice-variant-danger-fill":Y(C.error.main,.12),"--lattice-variant-warning-solid":C.warning.main,"--lattice-variant-warning-fill":Y(C.warning.main,.12),"--lattice-variant-success-solid":C.success.main,"--lattice-variant-success-fill":Y(C.success.main,.12),"--lattice-variant-info-solid":C.info.main,"--lattice-variant-info-fill":Y(C.info.main,.12),"--lattice-radius":`${L.shape.borderRadius}px`,"--lattice-font-family":L.typography.fontFamily,"--lattice-font-size":`${L.typography.body2.fontSize}`,"--lattice-header-font-weight":String(L.typography.fontWeightMedium)}}function le(L){return`.lattice {
7
7
  ${Object.entries(L).map(([g,s])=>` ${g}: ${s};`).join(`
8
8
  `)}
9
9
  }
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Lattice Grid 1.80.0, react module
2
+ * Lattice Grid 1.81.0, react module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
6
- (function(De){"use strict";var Ae=Object.create(null),Ge=Object.create(null);function ke(c,ae){Ae[c]=ae}function Ne(c){var ae=Ge[c];if(ae)return ae;var be=Object.create(null);Ge[c]=be;var ye=Ae[c];if(!ye)throw new Error("[lattice] missing module: "+c);return ye(be,Ne),be}ke("packages/core/src/internal/util.js",function(c,ae){"use strict";Object.defineProperty(c,"VERSION",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"reportedWarnings",{enumerable:!0,get:function(){return s}}),Object.defineProperty(c,"warnOnce",{enumerable:!0,get:function(){return W}}),Object.defineProperty(c,"infoOnce",{enumerable:!0,get:function(){return z}}),Object.defineProperty(c,"resetWarnings",{enumerable:!0,get:function(){return M}}),Object.defineProperty(c,"fail",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(c,"invariant",{enumerable:!0,get:function(){return _}}),Object.defineProperty(c,"DEV",{enumerable:!0,get:function(){return D}}),Object.defineProperty(c,"isObject",{enumerable:!0,get:function(){return V}}),Object.defineProperty(c,"isFunction",{enumerable:!0,get:function(){return se}}),Object.defineProperty(c,"isNil",{enumerable:!0,get:function(){return F}}),Object.defineProperty(c,"isBlank",{enumerable:!0,get:function(){return A}}),Object.defineProperty(c,"isCtor",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(c,"pathGetter",{enumerable:!0,get:function(){return X}}),Object.defineProperty(c,"pathSetter",{enumerable:!0,get:function(){return $}}),Object.defineProperty(c,"getPath",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(c,"setPath",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(c,"humanise",{enumerable:!0,get:function(){return f}}),Object.defineProperty(c,"escapeHtml",{enumerable:!0,get:function(){return k}}),Object.defineProperty(c,"titleCase",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(c,"expand",{enumerable:!0,get:function(){return o}}),Object.defineProperty(c,"toArray",{enumerable:!0,get:function(){return p}}),Object.defineProperty(c,"merge",{enumerable:!0,get:function(){return a}}),Object.defineProperty(c,"mergeRow",{enumerable:!0,get:function(){return u}}),Object.defineProperty(c,"Lru",{enumerable:!0,get:function(){return O}}),Object.defineProperty(c,"collator",{enumerable:!0,get:function(){return j}}),Object.defineProperty(c,"defaultCompare",{enumerable:!0,get:function(){return b}}),Object.defineProperty(c,"now",{enumerable:!0,get:function(){return J}}),Object.defineProperty(c,"nextFrame",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(c,"cancelFrame",{enumerable:!0,get:function(){return N}}),Object.defineProperty(c,"frameBatched",{enumerable:!0,get:function(){return x}}),Object.defineProperty(c,"settleDebounce",{enumerable:!0,get:function(){return w}}),Object.defineProperty(c,"whenIdle",{enumerable:!0,get:function(){return P}}),Object.defineProperty(c,"uid",{enumerable:!0,get:function(){return ee}});const be="1.80.0";async function ye(){return be}const Y="1.80.0",te=new Set,le=2e3;function U(t){if(te.add(t),te.size>le){const n=te.values().next().value;n!==void 0&&te.delete(n)}}const ne=[],L=500;function C(t,n,i){ne.push({key:t,level:n,message:i.map(m=>typeof m=="string"?m:g(m)).join(" "),at:Date.now()}),ne.length>L&&ne.shift()}function g(t){if(t instanceof Error)return t.message;try{return JSON.stringify(t)}catch{return String(t)}}function s(){return ne.map(t=>({...t}))}function E(t){if(t.length===0||typeof t[0]!="string")return t;const n=t[0].replace(/^\[lattice\]\s*/,"");return n===t[0]?t:[n,...t.slice(1)]}function W(t,...n){if(te.has(t))return;U(t);const i=E(n);C(t,"warn",i),console.warn("[lattice]",...i)}function z(t,...n){if(te.has(t))return;U(t);const i=E(n);C(t,"info",i),console.info("[lattice]",...i)}function M(){te.clear(),ne.length=0}function Z(t,n){const i=new Error(`[lattice] ${t}`);throw n!==void 0&&(i.cause=n),i}function _(t,n){t||Z(n)}const D=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})();function V(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function se(t){return typeof t=="function"}function F(t){return t==null}function A(t){return t==null||t===""}function oe(t){return typeof t!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(t))?!0:!!(t.prototype&&Object.getOwnPropertyNames(t.prototype).length>1)}const K=new Map;function X(t){let n=K.get(t);if(n)return n;if(!t.includes("."))n=i=>i?.[t];else{const i=t.split("."),m=i.length;n=S=>{let q=S;for(let T=0;T<m;T++){if(q==null)return;q=q[i[T]]}return q}}return K.set(t,n),n}const H=new Map;function $(t){let n=H.get(t);if(n)return n;if(!t.includes("."))n=(i,m)=>{i!=null&&(i[t]=m)};else{const i=t.split("."),m=i.length-1;n=(S,q)=>{let T=S;for(let G=0;G<m;G++){if(T==null)return;const v=i[G];T[v]==null&&(T[v]={}),T=T[v]}T!=null&&(T[i[m]]=q)}}return H.set(t,n),n}function ue(t,n){return X(n)(t)}function ve(t,n,i){$(n)(t,i)}function f(t){return t?(t.includes(".")?t.slice(t.lastIndexOf(".")+1):t).replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/\s+/g," ").trim().replace(/^./,i=>i.toUpperCase()):""}const h={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function k(t){const n=t==null?"":String(t);return/[&<>"']/.test(n)?n.replace(/[&<>"']/g,i=>h[i]):n}function ie(t){return String(t).replace(/\w\S*/g,n=>n[0].toUpperCase()+n.slice(1).toLowerCase())}function o(t,n,i){if(t!==void 0)return t===!0?{enabled:!0,...i}:t===!1?{enabled:!1}:V(t)?t:{[n]:t,enabled:!0}}function p(t){return t==null?[]:Array.isArray(t)?t:[t]}const r=Object.freeze(new Set(["__proto__","constructor","prototype"]));function a(t,n){if(!V(t))return V(n)?{...n}:n;if(!V(n))return n===void 0?t:n;const i={...t};for(const m of Object.keys(n)){if(r.has(m))continue;const S=n[m];S!==void 0&&(i[m]=V(S)&&V(i[m])?a(i[m],S):S)}return i}function u(t,n){if(!V(t)||!V(n)||t===n)return n;const i=Object.create(Object.getPrototypeOf(t));return Object.assign(i,t,n),i}class O{#n;#e=new Map;#t;constructor(n=256,i=null){this.#n=n,this.#t=i}get size(){return this.#e.size}get max(){return this.#n}set max(n){this.#n=n,this.#r()}has(n){return this.#e.has(n)}get(n){const i=this.#e;if(!i.has(n))return;const m=i.get(n);return i.delete(n),i.set(n,m),m}peek(n){return this.#e.get(n)}set(n,i){const m=this.#e;return m.has(n)&&m.delete(n),m.set(n,i),this.#r(),i}delete(n){const i=this.#e.get(n);return this.#e.delete(n)&&this.#t&&this.#t(i,n),i}clear(){if(this.#t)for(const[n,i]of this.#e)this.#t(i,n);this.#e.clear()}keys(){return this.#e.keys()}values(){return this.#e.values()}#r(){const n=this.#e;for(;n.size>this.#n;){const i=n.keys().next().value,m=n.get(i);n.delete(i),this.#t&&this.#t(m,i)}}}const y=new Map;function j(t,n){const i=`${t||""}|${n?JSON.stringify(n):""}`;let m=y.get(i);return m||(m=new Intl.Collator(t||void 0,{numeric:!0,sensitivity:"variant",...n}),y.set(i,m)),m}function b(t,n){if(t===n)return 0;if(t==null)return 1;if(n==null)return-1;if(typeof t=="number"&&typeof n=="number")return Number.isNaN(t)?Number.isNaN(n)?0:1:Number.isNaN(n)||t<n?-1:t>n?1:0;const i=String(t),m=String(n);return i<m?-1:i>m?1:0}function J(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}const I=typeof requestAnimationFrame=="function";function Q(t){return I?requestAnimationFrame(t):setTimeout(()=>t(J()),16)}function N(t){t!=null&&(I?cancelAnimationFrame(t):clearTimeout(t))}function x(t){let n=null,i=null;const m=()=>{n=null;const q=i;i=null,t(...q||[])},S=(...q)=>{i=q,n===null&&(n=Q(m))};return S.cancel=()=>{N(n),n=null,i=null},S.flush=()=>{n!==null&&(N(n),m())},S}function w(t,n){let i=null,m=null;const S=()=>{if(i=null,m===null)return;const G=m;m=null,t(...G),q()},q=()=>{i=setTimeout(S,n),typeof i?.unref=="function"&&i.unref()},T=(...G)=>{i===null?(t(...G),q()):(m=G,clearTimeout(i),q())};return T.flush=()=>{if(i!==null&&clearTimeout(i),i=null,m===null)return;const G=m;m=null,t(...G)},T.cancel=()=>{i!==null&&clearTimeout(i),i=null,m=null},T.pending=()=>i!==null||m!==null,T}function P(t,n=50){return typeof requestIdleCallback=="function"?requestIdleCallback(t,{timeout:n}):setTimeout(()=>t({timeRemaining:()=>0,didTimeout:!0}),1)}let re=0;function ee(t="l"){return`${t}${(++re).toString(36)}`}}),ke("packages/modules/shared/adapter.js",function(c,ae){"use strict";Object.defineProperty(c,"EVENT_NAMES",{enumerable:!0,get:function(){return be}}),Object.defineProperty(c,"handlerName",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"dashedName",{enumerable:!0,get:function(){return te}}),Object.defineProperty(c,"CONFIG_KEY_ALIASES",{enumerable:!0,get:function(){return le}}),Object.defineProperty(c,"aliasConfigKey",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"isHandlerProp",{enumerable:!0,get:function(){return L}}),Object.defineProperty(c,"partition",{enumerable:!0,get:function(){return C}}),Object.defineProperty(c,"createGridController",{enumerable:!0,get:function(){return g}});const be=Object.freeze(["ready","destroy","render:first","render:done","config:changed","licence:changed","model:changed","rows:changed","rows:queued","rows:deferred","rows:paused","rows:resumed","row:received","row:sent","row:copied","row:moved","source:error","source:total","stream:chunk","stream:end","stream:evicted","rowDrag:started","rowDrag:moved","rowDrag:left","rowDrag:ended","cell:changed","cell:pending","cell:confirmed","cell:reverted","cell:conflict","cell:clicked","cell:dblclicked","cell:contextmenu","cell:mouseover","cell:mouseout","cell:mousedown","cell:mouseup","cell:edit:start","cell:edit:end","row:edit:start","row:edit:end","row:clicked","row:dblclicked","row:pending","row:confirmed","row:reverted","row:conflict","form:opened","form:closed","form:saved","form:error","sort:changed","filter:changed","group:toggled","facet:computed","facet:filtered","facet:expanded","facet:failed","column:moved","column:resized","column:visible","column:pinned","column:grouped","column:pivoted","column:filter:open","column:profile:open","column:menu:open","columns:changed","columns:tagged","columngroup:changed","header:contextmenu","pivot:drill","selection:changed","range:changed","clipboard:copy","page:changed","scroll","scroll:end","size:changed","detail:toggled","detail:cell:edit:start","detail:cell:edit:end","detail:row:edit:start","detail:row:edit:end","detail:cell:changed","toolpanel:focus","highlight:changed","find:changed","tree:loading","tree:loaded","tree:loadFailed","tree:loadAborted","state:changed","state:reset","history:changed","history:applied","views:changed","view:applied","view:saved","view:removed","view:renamed","view:default","formatting:changed","redaction:changed","permissions:changed","presentation:changed","presentation:started","presentation:ended","presentation:view","presentation:scale","presentation:spotlight","presentation:captured","comment:added","comment:edited","comment:deleted","comment:failed","comment:resolved","comment:unresolved","comment:threadOpened","comment:threadClosed","comment:indexLoaded","presence:published","presence:joined","presence:updated","presence:left","presence:failed","presence:lockRefused","diff:changed","diff:swapped","timeline:attached","timeline:detached","timeline:seek","timeline:seeking","annotation:changed","validation:failed","validation:cleared","export:progress","export:request","export:done","shortcuts:opened","shortcuts:closed","print:before","print:after","beforeEdit","beforeSort","beforeFilter","beforeColumnMove","beforeColumnResize","beforeColumnHide","beforeSelect","beforeRowAdd","beforeDelete","beforeRowMove","beforeGroup","beforeRowReceive","edit:cancelled","sort:cancelled","filter:cancelled","columnMove:cancelled","columnResize:cancelled","columnHide:cancelled","selection:cancelled","rowAdd:cancelled","delete:cancelled","rowMove:cancelled","group:cancelled","rowReceive:cancelled"]),ye=Object.freeze({sort:(s,E)=>s.sort.set(E||[]),filters:(s,E)=>s.filters.set(E||null),quickFilter:(s,E)=>{if(E&&typeof E=="object"){s.filters.quick(E.text||"",{mode:E.mode});return}s.filters.quick(typeof E=="string"?E:"")},selectedKeys:(s,E)=>s.selection.set(Array.isArray(E)?E:[])});function Y(s){return`on${String(s).split(":").map(W=>W.charAt(0).toUpperCase()+W.slice(1)).join("")}`}function te(s){return String(s).replace(/:/g,"-")}const le=Object.freeze({"row-key":"rowKey","row-height":"rowHeight","header-height":"headerHeight","auto-height":"autoHeight"});function U(s){return Object.hasOwn(le,s)?le[s]:s}const ne=Object.freeze(Object.fromEntries(be.map(s=>[Y(s),s])));function L(s){return Object.hasOwn(ne,s)}function C(s){const E={},W={},z={};for(const[M,Z]of Object.entries(s||{})){if(L(M)){z[M]=Z;continue}if(Object.hasOwn(ye,M)){W[M]=Z;continue}E[M]=Z}return{config:E,imperative:W,handlers:z}}function g(s){const E=s.createGrid;if(typeof E!="function")throw new TypeError("createGridController needs createGrid; pass it in from the grid package.");const W=C(s.props||{}),z=E(s.element,{...W.config});let M=W.handlers,Z=W.config,_={};const D=F=>{if(!F||typeof F.type!="string")return;const A=M[Y(F.type)];typeof A=="function"&&A(F)},V=z.on("*",D);for(const[F,A]of Object.entries(W.imperative))A!==void 0&&(ye[F](z,A),_[F]=A);let se=!1;return{grid:z,update(F){if(se)return;const A=C(F||{});M=A.handlers;const oe={};for(const[K,X]of Object.entries(A.config))Object.is(Z[K],X)||(oe[K]=X);for(const K of Object.keys(Z))Object.hasOwn(A.config,K)||(oe[K]=void 0);Object.keys(oe).length&&z.setAll(oe),Z=A.config;for(const[K,X]of Object.entries(ye)){const H=A.imperative[K];Object.is(_[K],H)||H===void 0&&!Object.hasOwn(_,K)||(X(z,H),_[K]=H)}},destroy(){se||(se=!0,V(),z.destroy())}}}}),ke("packages/modules/react/viewers.js",function(c,ae){"use strict";Object.defineProperty(c,"VIEWER_EVENTS",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"VIEWER_APPLY",{enumerable:!0,get:function(){return te}}),Object.defineProperty(c,"VIEWER_BULK_UPDATE",{enumerable:!0,get:function(){return le}}),Object.defineProperty(c,"viewerHandlerName",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"partitionViewerProps",{enumerable:!0,get:function(){return L}}),Object.defineProperty(c,"createViewerController",{enumerable:!0,get:function(){return C}});const ye=ae("packages/core/src/internal/util.js").warnOnce,Y=Object.freeze({kpi:Object.freeze(["tile:click","tile:dblclick","tile:contextmenu","node:toggle","change","tile:status"]),kanban:Object.freeze(["card:click","card:dblclick","card:contextmenu","card:move","card:reverted","card:confirmed","selection:changed","column:collapse","card:add","drag:start","drag:end","swimlane:collapse","swimlane:reorder","column:reorder","filter:changed","sprint:changed","epic:changed","card:expand","card:drill","card:edit","card:sla","beforeMove","beforeAdd","beforeEdit","beforeLaneReorder","beforeColumnReorder","beforeColumnChange","move:cancelled","add:cancelled","edit:cancelled","laneReorder:cancelled","columnReorder:cancelled","columnChange:cancelled"]),tabs:Object.freeze(["beforeTabChange","tab:changed","tabChange:cancelled"]),chart:Object.freeze(["click","hover","leave","draw","legend"]),gantt:Object.freeze(["schedule","error"]),layout:Object.freeze(["layout:changed","window:moved","window:resized","window:closed","beforeWindowClose","windowClose:cancelled"]),router:Object.freeze(["metrics"])}),te=Object.freeze({kpi:Object.freeze({rows:(g,s)=>g.setRows(Array.isArray(s)?s:[])}),kanban:Object.freeze({rows:(g,s)=>g.setRows(Array.isArray(s)?s:[]),quickFilter:(g,s)=>g.setQuickFilter(typeof s=="string"?s:""),sprint:(g,s)=>g.setSprint(s),epic:(g,s)=>g.setEpic(s),loading:(g,s)=>g.setLoading(!!s),error:(g,s)=>g.setError(s??null)}),gantt:Object.freeze({tasks:(g,s)=>g.setTasks(Array.isArray(s)?s:[]),dependencies:(g,s)=>g.setDependencies(Array.isArray(s)?s:[])}),tabs:Object.freeze({active:(g,s)=>{typeof s=="string"&&g.activate(s)}}),chart:Object.freeze({}),layout:Object.freeze({})}),le=Object.freeze({chart:"update"});function U(g){return`on${String(g).split(":").map(E=>E.charAt(0).toUpperCase()+E.slice(1)).join("")}`}const ne=Object.freeze(Object.fromEntries(Object.entries(Y).map(([g,s])=>[g,Object.freeze(Object.fromEntries(s.map(E=>[U(E),E])))])));function L(g,s){const E=ne[g]||{},W=te[g]||{},z={},M={},Z={};for(const[_,D]of Object.entries(s||{})){if(Object.hasOwn(E,_)){Z[_]=D;continue}if(Object.hasOwn(W,_)){M[_]=D,z[_]=D;continue}z[_]=D}return{config:z,live:M,handlers:Z}}function C(g){const s=String(g.viewer),E=g.mount,W=g.name||s;if(typeof E!="function")throw new TypeError(`createViewerController needs a mount factory for "${s}"; pass the module's own factory in, e.g. { createKPI } from lattice-grid/modules/kpi.`);const z=L(s,g.props||{}),M=E(g.element,{...z.config});if(!M||typeof M!="object")throw new TypeError(`the ${W} factory returned no instance; nothing can be driven.`);let Z=z.handlers,_=z.config;const D={...z.live},V=[];if(typeof M.on=="function")for(const oe of Y[s]||[]){const K=U(oe),X=M.on(oe,H=>{const $=Z[K];typeof $=="function"&&$(H)});typeof X=="function"&&V.push(X)}const se=le[s],F=te[s]||{};let A=!1;return{instance:M,update(oe){if(A)return;const K=L(s,oe||{});Z=K.handlers;const X={};for(const[$,ue]of Object.entries(K.config))Object.is(_[$],ue)||(X[$]=ue);if(_=K.config,!Object.keys(X).length)return;const H=[];for(const $ of Object.keys(X)){const ue=F[$];if(ue){ue(M,X[$]),D[$]=X[$];continue}se&&typeof M[se]=="function"||H.push($)}if(se&&typeof M[se]=="function"){const $={};for(const ue of Object.keys(X))F[ue]||($[ue]=X[ue]);Object.keys($).length&&M[se]($)}H.length&&ye(`react.viewer.${s}.mountOnly.${H.join(".")}`,`${W}: ${H.map($=>`\`${$}\``).join(", ")} changed, but ${W} takes ${H.length===1?"it":"them"} only when the viewer is created. Nothing was applied and the viewer was NOT rebuilt — rebuilding it silently would throw away scroll position, selection and expansion. Give the component a \`key\` that changes when this must take effect, so the rebuild is yours and visible, or drive the instance through the ref.`)},destroy(){if(!A){A=!0;for(const oe of V)try{oe()}catch{}V.length=0,typeof M.destroy=="function"&&M.destroy()}}}}}),ke("packages/modules/presets/index.js",function(c,ae){"use strict";Object.defineProperty(c,"themeFromMui",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return ne}});const ye=ae("packages/core/src/internal/util.js").warnOnce;function Y(L,C){if(typeof L!="string")return L;const g=L.trim().match(/^#([0-9a-f]{6})$/i);if(!g)return L;const s=g[1],E=parseInt(s.slice(0,2),16),W=parseInt(s.slice(2,4),16),z=parseInt(s.slice(4,6),16);return`rgba(${E}, ${W}, ${z}, ${C})`}function te(L){const C=L.palette,g=C.mode==="dark";return{"--lattice-background":C.background.default,"--lattice-surface":C.background.paper,"--lattice-surface-alt":g?"#2a2a2a":C.grey[50],"--lattice-border-color":C.divider,"--lattice-border-strong":g?C.grey[600]:C.grey[400],"--lattice-foreground":C.text.primary,"--lattice-foreground-muted":C.text.secondary,"--lattice-header-foreground":C.text.primary,"--lattice-accent":C.primary.main,"--lattice-accent-contrast":C.primary.contrastText,"--lattice-link-color":C.primary.main,"--lattice-selected-background":Y(C.primary.main,.12),"--lattice-hovered-background":Y(C.text.primary,.06),"--lattice-focus-color":C.primary.main,"--lattice-variant-danger-solid":C.error.main,"--lattice-variant-danger-fill":Y(C.error.main,.12),"--lattice-variant-warning-solid":C.warning.main,"--lattice-variant-warning-fill":Y(C.warning.main,.12),"--lattice-variant-success-solid":C.success.main,"--lattice-variant-success-fill":Y(C.success.main,.12),"--lattice-variant-info-solid":C.info.main,"--lattice-variant-info-fill":Y(C.info.main,.12),"--lattice-radius":`${L.shape.borderRadius}px`,"--lattice-font-family":L.typography.fontFamily,"--lattice-font-size":`${L.typography.body2.fontSize}`,"--lattice-header-font-weight":String(L.typography.fontWeightMedium)}}function le(L){return`.lattice {
6
+ (function(De){"use strict";var Ae=Object.create(null),Ge=Object.create(null);function ke(c,ae){Ae[c]=ae}function Ne(c){var ae=Ge[c];if(ae)return ae;var be=Object.create(null);Ge[c]=be;var ye=Ae[c];if(!ye)throw new Error("[lattice] missing module: "+c);return ye(be,Ne),be}ke("packages/core/src/internal/util.js",function(c,ae){"use strict";Object.defineProperty(c,"VERSION",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"reportedWarnings",{enumerable:!0,get:function(){return s}}),Object.defineProperty(c,"warnOnce",{enumerable:!0,get:function(){return W}}),Object.defineProperty(c,"infoOnce",{enumerable:!0,get:function(){return z}}),Object.defineProperty(c,"resetWarnings",{enumerable:!0,get:function(){return M}}),Object.defineProperty(c,"fail",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(c,"invariant",{enumerable:!0,get:function(){return _}}),Object.defineProperty(c,"DEV",{enumerable:!0,get:function(){return D}}),Object.defineProperty(c,"isObject",{enumerable:!0,get:function(){return V}}),Object.defineProperty(c,"isFunction",{enumerable:!0,get:function(){return se}}),Object.defineProperty(c,"isNil",{enumerable:!0,get:function(){return F}}),Object.defineProperty(c,"isBlank",{enumerable:!0,get:function(){return A}}),Object.defineProperty(c,"isCtor",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(c,"pathGetter",{enumerable:!0,get:function(){return X}}),Object.defineProperty(c,"pathSetter",{enumerable:!0,get:function(){return $}}),Object.defineProperty(c,"getPath",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(c,"setPath",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(c,"humanise",{enumerable:!0,get:function(){return f}}),Object.defineProperty(c,"escapeHtml",{enumerable:!0,get:function(){return k}}),Object.defineProperty(c,"titleCase",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(c,"expand",{enumerable:!0,get:function(){return o}}),Object.defineProperty(c,"toArray",{enumerable:!0,get:function(){return p}}),Object.defineProperty(c,"merge",{enumerable:!0,get:function(){return a}}),Object.defineProperty(c,"mergeRow",{enumerable:!0,get:function(){return u}}),Object.defineProperty(c,"Lru",{enumerable:!0,get:function(){return O}}),Object.defineProperty(c,"collator",{enumerable:!0,get:function(){return j}}),Object.defineProperty(c,"defaultCompare",{enumerable:!0,get:function(){return b}}),Object.defineProperty(c,"now",{enumerable:!0,get:function(){return J}}),Object.defineProperty(c,"nextFrame",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(c,"cancelFrame",{enumerable:!0,get:function(){return N}}),Object.defineProperty(c,"frameBatched",{enumerable:!0,get:function(){return x}}),Object.defineProperty(c,"settleDebounce",{enumerable:!0,get:function(){return w}}),Object.defineProperty(c,"whenIdle",{enumerable:!0,get:function(){return P}}),Object.defineProperty(c,"uid",{enumerable:!0,get:function(){return ee}});const be="1.81.0";async function ye(){return be}const Y="1.81.0",te=new Set,le=2e3;function U(t){if(te.add(t),te.size>le){const n=te.values().next().value;n!==void 0&&te.delete(n)}}const ne=[],L=500;function C(t,n,i){ne.push({key:t,level:n,message:i.map(m=>typeof m=="string"?m:g(m)).join(" "),at:Date.now()}),ne.length>L&&ne.shift()}function g(t){if(t instanceof Error)return t.message;try{return JSON.stringify(t)}catch{return String(t)}}function s(){return ne.map(t=>({...t}))}function E(t){if(t.length===0||typeof t[0]!="string")return t;const n=t[0].replace(/^\[lattice\]\s*/,"");return n===t[0]?t:[n,...t.slice(1)]}function W(t,...n){if(te.has(t))return;U(t);const i=E(n);C(t,"warn",i),console.warn("[lattice]",...i)}function z(t,...n){if(te.has(t))return;U(t);const i=E(n);C(t,"info",i),console.info("[lattice]",...i)}function M(){te.clear(),ne.length=0}function Z(t,n){const i=new Error(`[lattice] ${t}`);throw n!==void 0&&(i.cause=n),i}function _(t,n){t||Z(n)}const D=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})();function V(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function se(t){return typeof t=="function"}function F(t){return t==null}function A(t){return t==null||t===""}function oe(t){return typeof t!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(t))?!0:!!(t.prototype&&Object.getOwnPropertyNames(t.prototype).length>1)}const K=new Map;function X(t){let n=K.get(t);if(n)return n;if(!t.includes("."))n=i=>i?.[t];else{const i=t.split("."),m=i.length;n=S=>{let q=S;for(let T=0;T<m;T++){if(q==null)return;q=q[i[T]]}return q}}return K.set(t,n),n}const H=new Map;function $(t){let n=H.get(t);if(n)return n;if(!t.includes("."))n=(i,m)=>{i!=null&&(i[t]=m)};else{const i=t.split("."),m=i.length-1;n=(S,q)=>{let T=S;for(let G=0;G<m;G++){if(T==null)return;const v=i[G];T[v]==null&&(T[v]={}),T=T[v]}T!=null&&(T[i[m]]=q)}}return H.set(t,n),n}function ue(t,n){return X(n)(t)}function ve(t,n,i){$(n)(t,i)}function f(t){return t?(t.includes(".")?t.slice(t.lastIndexOf(".")+1):t).replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/\s+/g," ").trim().replace(/^./,i=>i.toUpperCase()):""}const h={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function k(t){const n=t==null?"":String(t);return/[&<>"']/.test(n)?n.replace(/[&<>"']/g,i=>h[i]):n}function ie(t){return String(t).replace(/\w\S*/g,n=>n[0].toUpperCase()+n.slice(1).toLowerCase())}function o(t,n,i){if(t!==void 0)return t===!0?{enabled:!0,...i}:t===!1?{enabled:!1}:V(t)?t:{[n]:t,enabled:!0}}function p(t){return t==null?[]:Array.isArray(t)?t:[t]}const r=Object.freeze(new Set(["__proto__","constructor","prototype"]));function a(t,n){if(!V(t))return V(n)?{...n}:n;if(!V(n))return n===void 0?t:n;const i={...t};for(const m of Object.keys(n)){if(r.has(m))continue;const S=n[m];S!==void 0&&(i[m]=V(S)&&V(i[m])?a(i[m],S):S)}return i}function u(t,n){if(!V(t)||!V(n)||t===n)return n;const i=Object.create(Object.getPrototypeOf(t));return Object.assign(i,t,n),i}class O{#n;#e=new Map;#t;constructor(n=256,i=null){this.#n=n,this.#t=i}get size(){return this.#e.size}get max(){return this.#n}set max(n){this.#n=n,this.#r()}has(n){return this.#e.has(n)}get(n){const i=this.#e;if(!i.has(n))return;const m=i.get(n);return i.delete(n),i.set(n,m),m}peek(n){return this.#e.get(n)}set(n,i){const m=this.#e;return m.has(n)&&m.delete(n),m.set(n,i),this.#r(),i}delete(n){const i=this.#e.get(n);return this.#e.delete(n)&&this.#t&&this.#t(i,n),i}clear(){if(this.#t)for(const[n,i]of this.#e)this.#t(i,n);this.#e.clear()}keys(){return this.#e.keys()}values(){return this.#e.values()}#r(){const n=this.#e;for(;n.size>this.#n;){const i=n.keys().next().value,m=n.get(i);n.delete(i),this.#t&&this.#t(m,i)}}}const y=new Map;function j(t,n){const i=`${t||""}|${n?JSON.stringify(n):""}`;let m=y.get(i);return m||(m=new Intl.Collator(t||void 0,{numeric:!0,sensitivity:"variant",...n}),y.set(i,m)),m}function b(t,n){if(t===n)return 0;if(t==null)return 1;if(n==null)return-1;if(typeof t=="number"&&typeof n=="number")return Number.isNaN(t)?Number.isNaN(n)?0:1:Number.isNaN(n)||t<n?-1:t>n?1:0;const i=String(t),m=String(n);return i<m?-1:i>m?1:0}function J(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}const I=typeof requestAnimationFrame=="function";function Q(t){return I?requestAnimationFrame(t):setTimeout(()=>t(J()),16)}function N(t){t!=null&&(I?cancelAnimationFrame(t):clearTimeout(t))}function x(t){let n=null,i=null;const m=()=>{n=null;const q=i;i=null,t(...q||[])},S=(...q)=>{i=q,n===null&&(n=Q(m))};return S.cancel=()=>{N(n),n=null,i=null},S.flush=()=>{n!==null&&(N(n),m())},S}function w(t,n){let i=null,m=null;const S=()=>{if(i=null,m===null)return;const G=m;m=null,t(...G),q()},q=()=>{i=setTimeout(S,n),typeof i?.unref=="function"&&i.unref()},T=(...G)=>{i===null?(t(...G),q()):(m=G,clearTimeout(i),q())};return T.flush=()=>{if(i!==null&&clearTimeout(i),i=null,m===null)return;const G=m;m=null,t(...G)},T.cancel=()=>{i!==null&&clearTimeout(i),i=null,m=null},T.pending=()=>i!==null||m!==null,T}function P(t,n=50){return typeof requestIdleCallback=="function"?requestIdleCallback(t,{timeout:n}):setTimeout(()=>t({timeRemaining:()=>0,didTimeout:!0}),1)}let re=0;function ee(t="l"){return`${t}${(++re).toString(36)}`}}),ke("packages/modules/shared/adapter.js",function(c,ae){"use strict";Object.defineProperty(c,"EVENT_NAMES",{enumerable:!0,get:function(){return be}}),Object.defineProperty(c,"handlerName",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"dashedName",{enumerable:!0,get:function(){return te}}),Object.defineProperty(c,"CONFIG_KEY_ALIASES",{enumerable:!0,get:function(){return le}}),Object.defineProperty(c,"aliasConfigKey",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"isHandlerProp",{enumerable:!0,get:function(){return L}}),Object.defineProperty(c,"partition",{enumerable:!0,get:function(){return C}}),Object.defineProperty(c,"createGridController",{enumerable:!0,get:function(){return g}});const be=Object.freeze(["ready","destroy","render:first","render:done","config:changed","licence:changed","model:changed","rows:changed","rows:queued","rows:deferred","rows:paused","rows:resumed","row:received","row:sent","row:copied","row:moved","source:error","source:total","stream:chunk","stream:end","stream:evicted","rowDrag:started","rowDrag:moved","rowDrag:left","rowDrag:ended","cell:changed","cell:pending","cell:confirmed","cell:reverted","cell:conflict","cell:clicked","cell:dblclicked","cell:contextmenu","cell:mouseover","cell:mouseout","cell:mousedown","cell:mouseup","cell:edit:start","cell:edit:end","row:edit:start","row:edit:end","row:clicked","row:dblclicked","row:pending","row:confirmed","row:reverted","row:conflict","form:opened","form:closed","form:saved","form:error","sort:changed","filter:changed","group:toggled","facet:computed","facet:filtered","facet:expanded","facet:failed","column:moved","column:resized","column:visible","column:pinned","column:grouped","column:pivoted","column:filter:open","column:profile:open","column:menu:open","columns:changed","columns:tagged","columngroup:changed","header:contextmenu","pivot:drill","selection:changed","range:changed","clipboard:copy","page:changed","scroll","scroll:end","size:changed","detail:toggled","detail:cell:edit:start","detail:cell:edit:end","detail:row:edit:start","detail:row:edit:end","detail:cell:changed","toolpanel:focus","highlight:changed","find:changed","tree:loading","tree:loaded","tree:loadFailed","tree:loadAborted","state:changed","state:reset","history:changed","history:applied","views:changed","view:applied","view:saved","view:removed","view:renamed","view:default","formatting:changed","redaction:changed","permissions:changed","presentation:changed","presentation:started","presentation:ended","presentation:view","presentation:scale","presentation:spotlight","presentation:captured","comment:added","comment:edited","comment:deleted","comment:failed","comment:resolved","comment:unresolved","comment:threadOpened","comment:threadClosed","comment:indexLoaded","presence:published","presence:joined","presence:updated","presence:left","presence:failed","presence:lockRefused","diff:changed","diff:swapped","timeline:attached","timeline:detached","timeline:seek","timeline:seeking","annotation:changed","validation:failed","validation:cleared","export:progress","export:request","export:done","shortcuts:opened","shortcuts:closed","print:before","print:after","beforeEdit","beforeSort","beforeFilter","beforeColumnMove","beforeColumnResize","beforeColumnHide","beforeSelect","beforeRowAdd","beforeDelete","beforeRowMove","beforeGroup","beforeRowReceive","edit:cancelled","sort:cancelled","filter:cancelled","columnMove:cancelled","columnResize:cancelled","columnHide:cancelled","selection:cancelled","rowAdd:cancelled","delete:cancelled","rowMove:cancelled","group:cancelled","rowReceive:cancelled"]),ye=Object.freeze({sort:(s,E)=>s.sort.set(E||[]),filters:(s,E)=>s.filters.set(E||null),quickFilter:(s,E)=>{if(E&&typeof E=="object"){s.filters.quick(E.text||"",{mode:E.mode});return}s.filters.quick(typeof E=="string"?E:"")},selectedKeys:(s,E)=>s.selection.set(Array.isArray(E)?E:[])});function Y(s){return`on${String(s).split(":").map(W=>W.charAt(0).toUpperCase()+W.slice(1)).join("")}`}function te(s){return String(s).replace(/:/g,"-")}const le=Object.freeze({"row-key":"rowKey","row-height":"rowHeight","header-height":"headerHeight","auto-height":"autoHeight"});function U(s){return Object.hasOwn(le,s)?le[s]:s}const ne=Object.freeze(Object.fromEntries(be.map(s=>[Y(s),s])));function L(s){return Object.hasOwn(ne,s)}function C(s){const E={},W={},z={};for(const[M,Z]of Object.entries(s||{})){if(L(M)){z[M]=Z;continue}if(Object.hasOwn(ye,M)){W[M]=Z;continue}E[M]=Z}return{config:E,imperative:W,handlers:z}}function g(s){const E=s.createGrid;if(typeof E!="function")throw new TypeError("createGridController needs createGrid; pass it in from the grid package.");const W=C(s.props||{}),z=E(s.element,{...W.config});let M=W.handlers,Z=W.config,_={};const D=F=>{if(!F||typeof F.type!="string")return;const A=M[Y(F.type)];typeof A=="function"&&A(F)},V=z.on("*",D);for(const[F,A]of Object.entries(W.imperative))A!==void 0&&(ye[F](z,A),_[F]=A);let se=!1;return{grid:z,update(F){if(se)return;const A=C(F||{});M=A.handlers;const oe={};for(const[K,X]of Object.entries(A.config))Object.is(Z[K],X)||(oe[K]=X);for(const K of Object.keys(Z))Object.hasOwn(A.config,K)||(oe[K]=void 0);Object.keys(oe).length&&z.setAll(oe),Z=A.config;for(const[K,X]of Object.entries(ye)){const H=A.imperative[K];Object.is(_[K],H)||H===void 0&&!Object.hasOwn(_,K)||(X(z,H),_[K]=H)}},destroy(){se||(se=!0,V(),z.destroy())}}}}),ke("packages/modules/react/viewers.js",function(c,ae){"use strict";Object.defineProperty(c,"VIEWER_EVENTS",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(c,"VIEWER_APPLY",{enumerable:!0,get:function(){return te}}),Object.defineProperty(c,"VIEWER_BULK_UPDATE",{enumerable:!0,get:function(){return le}}),Object.defineProperty(c,"viewerHandlerName",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"partitionViewerProps",{enumerable:!0,get:function(){return L}}),Object.defineProperty(c,"createViewerController",{enumerable:!0,get:function(){return C}});const ye=ae("packages/core/src/internal/util.js").warnOnce,Y=Object.freeze({kpi:Object.freeze(["tile:click","tile:dblclick","tile:contextmenu","node:toggle","change","tile:status"]),kanban:Object.freeze(["card:click","card:dblclick","card:contextmenu","card:move","card:reverted","card:confirmed","selection:changed","column:collapse","card:add","drag:start","drag:end","swimlane:collapse","swimlane:reorder","column:reorder","filter:changed","sprint:changed","epic:changed","card:expand","card:drill","card:edit","card:sla","beforeMove","beforeAdd","beforeEdit","beforeLaneReorder","beforeColumnReorder","beforeColumnChange","move:cancelled","add:cancelled","edit:cancelled","laneReorder:cancelled","columnReorder:cancelled","columnChange:cancelled"]),tabs:Object.freeze(["beforeTabChange","tab:changed","tabChange:cancelled"]),chart:Object.freeze(["click","hover","leave","draw","legend"]),gantt:Object.freeze(["schedule","error"]),layout:Object.freeze(["layout:changed","window:moved","window:resized","window:closed","beforeWindowClose","windowClose:cancelled"]),router:Object.freeze(["metrics"])}),te=Object.freeze({kpi:Object.freeze({rows:(g,s)=>g.setRows(Array.isArray(s)?s:[])}),kanban:Object.freeze({rows:(g,s)=>g.setRows(Array.isArray(s)?s:[]),quickFilter:(g,s)=>g.setQuickFilter(typeof s=="string"?s:""),sprint:(g,s)=>g.setSprint(s),epic:(g,s)=>g.setEpic(s),loading:(g,s)=>g.setLoading(!!s),error:(g,s)=>g.setError(s??null)}),gantt:Object.freeze({tasks:(g,s)=>g.setTasks(Array.isArray(s)?s:[]),dependencies:(g,s)=>g.setDependencies(Array.isArray(s)?s:[])}),tabs:Object.freeze({active:(g,s)=>{typeof s=="string"&&g.activate(s)}}),chart:Object.freeze({}),layout:Object.freeze({})}),le=Object.freeze({chart:"update"});function U(g){return`on${String(g).split(":").map(E=>E.charAt(0).toUpperCase()+E.slice(1)).join("")}`}const ne=Object.freeze(Object.fromEntries(Object.entries(Y).map(([g,s])=>[g,Object.freeze(Object.fromEntries(s.map(E=>[U(E),E])))])));function L(g,s){const E=ne[g]||{},W=te[g]||{},z={},M={},Z={};for(const[_,D]of Object.entries(s||{})){if(Object.hasOwn(E,_)){Z[_]=D;continue}if(Object.hasOwn(W,_)){M[_]=D,z[_]=D;continue}z[_]=D}return{config:z,live:M,handlers:Z}}function C(g){const s=String(g.viewer),E=g.mount,W=g.name||s;if(typeof E!="function")throw new TypeError(`createViewerController needs a mount factory for "${s}"; pass the module's own factory in, e.g. { createKPI } from lattice-grid/modules/kpi.`);const z=L(s,g.props||{}),M=E(g.element,{...z.config});if(!M||typeof M!="object")throw new TypeError(`the ${W} factory returned no instance; nothing can be driven.`);let Z=z.handlers,_=z.config;const D={...z.live},V=[];if(typeof M.on=="function")for(const oe of Y[s]||[]){const K=U(oe),X=M.on(oe,H=>{const $=Z[K];typeof $=="function"&&$(H)});typeof X=="function"&&V.push(X)}const se=le[s],F=te[s]||{};let A=!1;return{instance:M,update(oe){if(A)return;const K=L(s,oe||{});Z=K.handlers;const X={};for(const[$,ue]of Object.entries(K.config))Object.is(_[$],ue)||(X[$]=ue);if(_=K.config,!Object.keys(X).length)return;const H=[];for(const $ of Object.keys(X)){const ue=F[$];if(ue){ue(M,X[$]),D[$]=X[$];continue}se&&typeof M[se]=="function"||H.push($)}if(se&&typeof M[se]=="function"){const $={};for(const ue of Object.keys(X))F[ue]||($[ue]=X[ue]);Object.keys($).length&&M[se]($)}H.length&&ye(`react.viewer.${s}.mountOnly.${H.join(".")}`,`${W}: ${H.map($=>`\`${$}\``).join(", ")} changed, but ${W} takes ${H.length===1?"it":"them"} only when the viewer is created. Nothing was applied and the viewer was NOT rebuilt — rebuilding it silently would throw away scroll position, selection and expansion. Give the component a \`key\` that changes when this must take effect, so the rebuild is yours and visible, or drive the instance through the ref.`)},destroy(){if(!A){A=!0;for(const oe of V)try{oe()}catch{}V.length=0,typeof M.destroy=="function"&&M.destroy()}}}}}),ke("packages/modules/presets/index.js",function(c,ae){"use strict";Object.defineProperty(c,"themeFromMui",{enumerable:!0,get:function(){return U}}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return ne}});const ye=ae("packages/core/src/internal/util.js").warnOnce;function Y(L,C){if(typeof L!="string")return L;const g=L.trim().match(/^#([0-9a-f]{6})$/i);if(!g)return L;const s=g[1],E=parseInt(s.slice(0,2),16),W=parseInt(s.slice(2,4),16),z=parseInt(s.slice(4,6),16);return`rgba(${E}, ${W}, ${z}, ${C})`}function te(L){const C=L.palette,g=C.mode==="dark";return{"--lattice-background":C.background.default,"--lattice-surface":C.background.paper,"--lattice-surface-alt":g?"#2a2a2a":C.grey[50],"--lattice-border-color":C.divider,"--lattice-border-strong":g?C.grey[600]:C.grey[400],"--lattice-foreground":C.text.primary,"--lattice-foreground-muted":C.text.secondary,"--lattice-header-foreground":C.text.primary,"--lattice-accent":C.primary.main,"--lattice-accent-contrast":C.primary.contrastText,"--lattice-link-color":C.primary.main,"--lattice-selected-background":Y(C.primary.main,.12),"--lattice-hovered-background":Y(C.text.primary,.06),"--lattice-focus-color":C.primary.main,"--lattice-variant-danger-solid":C.error.main,"--lattice-variant-danger-fill":Y(C.error.main,.12),"--lattice-variant-warning-solid":C.warning.main,"--lattice-variant-warning-fill":Y(C.warning.main,.12),"--lattice-variant-success-solid":C.success.main,"--lattice-variant-success-fill":Y(C.success.main,.12),"--lattice-variant-info-solid":C.info.main,"--lattice-variant-info-fill":Y(C.info.main,.12),"--lattice-radius":`${L.shape.borderRadius}px`,"--lattice-font-family":L.typography.fontFamily,"--lattice-font-size":`${L.typography.body2.fontSize}`,"--lattice-header-font-weight":String(L.typography.fontWeightMedium)}}function le(L){return`.lattice {
7
7
  ${Object.entries(L).map(([g,s])=>` ${g}: ${s};`).join(`
8
8
  `)}
9
9
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.80.0, svelte module type declarations
2
+ * Lattice Grid 1.81.0, svelte module type declarations
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Lattice Grid 1.80.0, svelte module
2
+ * Lattice Grid 1.81.0, svelte module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
6
- var le=Object.create(null),de=Object.create(null);function ne(r,Y){le[r]=Y}function fe(r){var Y=de[r];if(Y)return Y;var X=Object.create(null);de[r]=X;var K=le[r];if(!K)throw new Error("[lattice] missing module: "+r);return K(X,fe),X}ne("packages/core/src/internal/util.js",function(r,Y){"use strict";Object.defineProperty(r,"VERSION",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"reportedWarnings",{enumerable:!0,get:function(){return i}}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return k}}),Object.defineProperty(r,"infoOnce",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"resetWarnings",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"fail",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"invariant",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"DEV",{enumerable:!0,get:function(){return _}}),Object.defineProperty(r,"isObject",{enumerable:!0,get:function(){return F}}),Object.defineProperty(r,"isFunction",{enumerable:!0,get:function(){return $}}),Object.defineProperty(r,"isNil",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"isBlank",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"isCtor",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"pathGetter",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"pathSetter",{enumerable:!0,get:function(){return I}}),Object.defineProperty(r,"getPath",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"setPath",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"humanise",{enumerable:!0,get:function(){return te}}),Object.defineProperty(r,"escapeHtml",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"titleCase",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"expand",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(r,"toArray",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"merge",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"mergeRow",{enumerable:!0,get:function(){return l}}),Object.defineProperty(r,"Lru",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"collator",{enumerable:!0,get:function(){return m}}),Object.defineProperty(r,"defaultCompare",{enumerable:!0,get:function(){return s}}),Object.defineProperty(r,"now",{enumerable:!0,get:function(){return w}}),Object.defineProperty(r,"nextFrame",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"cancelFrame",{enumerable:!0,get:function(){return h}}),Object.defineProperty(r,"frameBatched",{enumerable:!0,get:function(){return g}}),Object.defineProperty(r,"settleDebounce",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"whenIdle",{enumerable:!0,get:function(){return y}}),Object.defineProperty(r,"uid",{enumerable:!0,get:function(){return z}});const X="1.80.0";async function K(){return X}const T="1.80.0",L=new Set,q=2e3;function B(e){if(L.add(e),L.size>q){const t=L.values().next().value;t!==void 0&&L.delete(t)}}const x=[],R=500;function f(e,t,n){x.push({key:e,level:t,message:n.map(d=>typeof d=="string"?d:a(d)).join(" "),at:Date.now()}),x.length>R&&x.shift()}function a(e){if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}function i(){return x.map(e=>({...e}))}function p(e){if(e.length===0||typeof e[0]!="string")return e;const t=e[0].replace(/^\[lattice\]\s*/,"");return t===e[0]?e:[t,...e.slice(1)]}function k(e,...t){if(L.has(e))return;B(e);const n=p(t);f(e,"warn",n),console.warn("[lattice]",...n)}function N(e,...t){if(L.has(e))return;B(e);const n=p(t);f(e,"info",n),console.info("[lattice]",...n)}function O(){L.clear(),x.length=0}function D(e,t){const n=new Error(`[lattice] ${e}`);throw t!==void 0&&(n.cause=t),n}function M(e,t){e||D(t)}const _=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})();function F(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function $(e){return typeof e=="function"}function W(e){return e==null}function C(e){return e==null||e===""}function H(e){return typeof e!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(e))?!0:!!(e.prototype&&Object.getOwnPropertyNames(e.prototype).length>1)}const j=new Map;function V(e){let t=j.get(e);if(t)return t;if(!e.includes("."))t=n=>n?.[e];else{const n=e.split("."),d=n.length;t=J=>{let Q=J;for(let U=0;U<d;U++){if(Q==null)return;Q=Q[n[U]]}return Q}}return j.set(e,t),t}const A=new Map;function I(e){let t=A.get(e);if(t)return t;if(!e.includes("."))t=(n,d)=>{n!=null&&(n[e]=d)};else{const n=e.split("."),d=n.length-1;t=(J,Q)=>{let U=J;for(let ee=0;ee<d;ee++){if(U==null)return;const se=n[ee];U[se]==null&&(U[se]={}),U=U[se]}U!=null&&(U[n[d]]=Q)}}return A.set(e,t),t}function Z(e,t){return V(t)(e)}function ie(e,t,n){I(t)(e,n)}function te(e){return e?(e.includes(".")?e.slice(e.lastIndexOf(".")+1):e).replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/\s+/g," ").trim().replace(/^./,n=>n.toUpperCase()):""}const re={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function oe(e){const t=e==null?"":String(e);return/[&<>"']/.test(t)?t.replace(/[&<>"']/g,n=>re[n]):t}function ce(e){return String(e).replace(/\w\S*/g,t=>t[0].toUpperCase()+t.slice(1).toLowerCase())}function ae(e,t,n){if(e!==void 0)return e===!0?{enabled:!0,...n}:e===!1?{enabled:!1}:F(e)?e:{[t]:e,enabled:!0}}function ue(e){return e==null?[]:Array.isArray(e)?e:[e]}const o=Object.freeze(new Set(["__proto__","constructor","prototype"]));function b(e,t){if(!F(e))return F(t)?{...t}:t;if(!F(t))return t===void 0?e:t;const n={...e};for(const d of Object.keys(t)){if(o.has(d))continue;const J=t[d];J!==void 0&&(n[d]=F(J)&&F(n[d])?b(n[d],J):J)}return n}function l(e,t){if(!F(e)||!F(t)||e===t)return t;const n=Object.create(Object.getPrototypeOf(e));return Object.assign(n,e,t),n}class u{#n;#e=new Map;#t;constructor(t=256,n=null){this.#n=t,this.#t=n}get size(){return this.#e.size}get max(){return this.#n}set max(t){this.#n=t,this.#r()}has(t){return this.#e.has(t)}get(t){const n=this.#e;if(!n.has(t))return;const d=n.get(t);return n.delete(t),n.set(t,d),d}peek(t){return this.#e.get(t)}set(t,n){const d=this.#e;return d.has(t)&&d.delete(t),d.set(t,n),this.#r(),n}delete(t){const n=this.#e.get(t);return this.#e.delete(t)&&this.#t&&this.#t(n,t),n}clear(){if(this.#t)for(const[t,n]of this.#e)this.#t(n,t);this.#e.clear()}keys(){return this.#e.keys()}values(){return this.#e.values()}#r(){const t=this.#e;for(;t.size>this.#n;){const n=t.keys().next().value,d=t.get(n);t.delete(n),this.#t&&this.#t(d,n)}}}const c=new Map;function m(e,t){const n=`${e||""}|${t?JSON.stringify(t):""}`;let d=c.get(n);return d||(d=new Intl.Collator(e||void 0,{numeric:!0,sensitivity:"variant",...t}),c.set(n,d)),d}function s(e,t){if(e===t)return 0;if(e==null)return 1;if(t==null)return-1;if(typeof e=="number"&&typeof t=="number")return Number.isNaN(e)?Number.isNaN(t)?0:1:Number.isNaN(t)||e<t?-1:e>t?1:0;const n=String(e),d=String(t);return n<d?-1:n>d?1:0}function w(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}const P=typeof requestAnimationFrame=="function";function G(e){return P?requestAnimationFrame(e):setTimeout(()=>e(w()),16)}function h(e){e!=null&&(P?cancelAnimationFrame(e):clearTimeout(e))}function g(e){let t=null,n=null;const d=()=>{t=null;const Q=n;n=null,e(...Q||[])},J=(...Q)=>{n=Q,t===null&&(t=G(d))};return J.cancel=()=>{h(t),t=null,n=null},J.flush=()=>{t!==null&&(h(t),d())},J}function v(e,t){let n=null,d=null;const J=()=>{if(n=null,d===null)return;const ee=d;d=null,e(...ee),Q()},Q=()=>{n=setTimeout(J,t),typeof n?.unref=="function"&&n.unref()},U=(...ee)=>{n===null?(e(...ee),Q()):(d=ee,clearTimeout(n),Q())};return U.flush=()=>{if(n!==null&&clearTimeout(n),n=null,d===null)return;const ee=d;d=null,e(...ee)},U.cancel=()=>{n!==null&&clearTimeout(n),n=null,d=null},U.pending=()=>n!==null||d!==null,U}function y(e,t=50){return typeof requestIdleCallback=="function"?requestIdleCallback(e,{timeout:t}):setTimeout(()=>e({timeRemaining:()=>0,didTimeout:!0}),1)}let E=0;function z(e="l"){return`${e}${(++E).toString(36)}`}}),ne("packages/modules/shared/adapter.js",function(r,Y){"use strict";Object.defineProperty(r,"EVENT_NAMES",{enumerable:!0,get:function(){return X}}),Object.defineProperty(r,"handlerName",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"dashedName",{enumerable:!0,get:function(){return L}}),Object.defineProperty(r,"CONFIG_KEY_ALIASES",{enumerable:!0,get:function(){return q}}),Object.defineProperty(r,"aliasConfigKey",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"isHandlerProp",{enumerable:!0,get:function(){return R}}),Object.defineProperty(r,"partition",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"createGridController",{enumerable:!0,get:function(){return a}});const X=Object.freeze(["ready","destroy","render:first","render:done","config:changed","licence:changed","model:changed","rows:changed","rows:queued","rows:deferred","rows:paused","rows:resumed","row:received","row:sent","row:copied","row:moved","source:error","source:total","stream:chunk","stream:end","stream:evicted","rowDrag:started","rowDrag:moved","rowDrag:left","rowDrag:ended","cell:changed","cell:pending","cell:confirmed","cell:reverted","cell:conflict","cell:clicked","cell:dblclicked","cell:contextmenu","cell:mouseover","cell:mouseout","cell:mousedown","cell:mouseup","cell:edit:start","cell:edit:end","row:edit:start","row:edit:end","row:clicked","row:dblclicked","row:pending","row:confirmed","row:reverted","row:conflict","form:opened","form:closed","form:saved","form:error","sort:changed","filter:changed","group:toggled","facet:computed","facet:filtered","facet:expanded","facet:failed","column:moved","column:resized","column:visible","column:pinned","column:grouped","column:pivoted","column:filter:open","column:profile:open","column:menu:open","columns:changed","columns:tagged","columngroup:changed","header:contextmenu","pivot:drill","selection:changed","range:changed","clipboard:copy","page:changed","scroll","scroll:end","size:changed","detail:toggled","detail:cell:edit:start","detail:cell:edit:end","detail:row:edit:start","detail:row:edit:end","detail:cell:changed","toolpanel:focus","highlight:changed","find:changed","tree:loading","tree:loaded","tree:loadFailed","tree:loadAborted","state:changed","state:reset","history:changed","history:applied","views:changed","view:applied","view:saved","view:removed","view:renamed","view:default","formatting:changed","redaction:changed","permissions:changed","presentation:changed","presentation:started","presentation:ended","presentation:view","presentation:scale","presentation:spotlight","presentation:captured","comment:added","comment:edited","comment:deleted","comment:failed","comment:resolved","comment:unresolved","comment:threadOpened","comment:threadClosed","comment:indexLoaded","presence:published","presence:joined","presence:updated","presence:left","presence:failed","presence:lockRefused","diff:changed","diff:swapped","timeline:attached","timeline:detached","timeline:seek","timeline:seeking","annotation:changed","validation:failed","validation:cleared","export:progress","export:request","export:done","shortcuts:opened","shortcuts:closed","print:before","print:after","beforeEdit","beforeSort","beforeFilter","beforeColumnMove","beforeColumnResize","beforeColumnHide","beforeSelect","beforeRowAdd","beforeDelete","beforeRowMove","beforeGroup","beforeRowReceive","edit:cancelled","sort:cancelled","filter:cancelled","columnMove:cancelled","columnResize:cancelled","columnHide:cancelled","selection:cancelled","rowAdd:cancelled","delete:cancelled","rowMove:cancelled","group:cancelled","rowReceive:cancelled"]),K=Object.freeze({sort:(i,p)=>i.sort.set(p||[]),filters:(i,p)=>i.filters.set(p||null),quickFilter:(i,p)=>{if(p&&typeof p=="object"){i.filters.quick(p.text||"",{mode:p.mode});return}i.filters.quick(typeof p=="string"?p:"")},selectedKeys:(i,p)=>i.selection.set(Array.isArray(p)?p:[])});function T(i){return`on${String(i).split(":").map(k=>k.charAt(0).toUpperCase()+k.slice(1)).join("")}`}function L(i){return String(i).replace(/:/g,"-")}const q=Object.freeze({"row-key":"rowKey","row-height":"rowHeight","header-height":"headerHeight","auto-height":"autoHeight"});function B(i){return Object.hasOwn(q,i)?q[i]:i}const x=Object.freeze(Object.fromEntries(X.map(i=>[T(i),i])));function R(i){return Object.hasOwn(x,i)}function f(i){const p={},k={},N={};for(const[O,D]of Object.entries(i||{})){if(R(O)){N[O]=D;continue}if(Object.hasOwn(K,O)){k[O]=D;continue}p[O]=D}return{config:p,imperative:k,handlers:N}}function a(i){const p=i.createGrid;if(typeof p!="function")throw new TypeError("createGridController needs createGrid; pass it in from the grid package.");const k=f(i.props||{}),N=p(i.element,{...k.config});let O=k.handlers,D=k.config,M={};const _=W=>{if(!W||typeof W.type!="string")return;const C=O[T(W.type)];typeof C=="function"&&C(W)},F=N.on("*",_);for(const[W,C]of Object.entries(k.imperative))C!==void 0&&(K[W](N,C),M[W]=C);let $=!1;return{grid:N,update(W){if($)return;const C=f(W||{});O=C.handlers;const H={};for(const[j,V]of Object.entries(C.config))Object.is(D[j],V)||(H[j]=V);for(const j of Object.keys(D))Object.hasOwn(C.config,j)||(H[j]=void 0);Object.keys(H).length&&N.setAll(H),D=C.config;for(const[j,V]of Object.entries(K)){const A=C.imperative[j];Object.is(M[j],A)||A===void 0&&!Object.hasOwn(M,j)||(V(N,A),M[j]=A)}},destroy(){$||($=!0,F(),N.destroy())}}}}),ne("packages/modules/react/viewers.js",function(r,Y){"use strict";Object.defineProperty(r,"VIEWER_EVENTS",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"VIEWER_APPLY",{enumerable:!0,get:function(){return L}}),Object.defineProperty(r,"VIEWER_BULK_UPDATE",{enumerable:!0,get:function(){return q}}),Object.defineProperty(r,"viewerHandlerName",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"partitionViewerProps",{enumerable:!0,get:function(){return R}}),Object.defineProperty(r,"createViewerController",{enumerable:!0,get:function(){return f}});const K=Y("packages/core/src/internal/util.js").warnOnce,T=Object.freeze({kpi:Object.freeze(["tile:click","tile:dblclick","tile:contextmenu","node:toggle","change","tile:status"]),kanban:Object.freeze(["card:click","card:dblclick","card:contextmenu","card:move","card:reverted","card:confirmed","selection:changed","column:collapse","card:add","drag:start","drag:end","swimlane:collapse","swimlane:reorder","column:reorder","filter:changed","sprint:changed","epic:changed","card:expand","card:drill","card:edit","card:sla","beforeMove","beforeAdd","beforeEdit","beforeLaneReorder","beforeColumnReorder","beforeColumnChange","move:cancelled","add:cancelled","edit:cancelled","laneReorder:cancelled","columnReorder:cancelled","columnChange:cancelled"]),tabs:Object.freeze(["beforeTabChange","tab:changed","tabChange:cancelled"]),chart:Object.freeze(["click","hover","leave","draw","legend"]),gantt:Object.freeze(["schedule","error"]),layout:Object.freeze(["layout:changed","window:moved","window:resized","window:closed","beforeWindowClose","windowClose:cancelled"]),router:Object.freeze(["metrics"])}),L=Object.freeze({kpi:Object.freeze({rows:(a,i)=>a.setRows(Array.isArray(i)?i:[])}),kanban:Object.freeze({rows:(a,i)=>a.setRows(Array.isArray(i)?i:[]),quickFilter:(a,i)=>a.setQuickFilter(typeof i=="string"?i:""),sprint:(a,i)=>a.setSprint(i),epic:(a,i)=>a.setEpic(i),loading:(a,i)=>a.setLoading(!!i),error:(a,i)=>a.setError(i??null)}),gantt:Object.freeze({tasks:(a,i)=>a.setTasks(Array.isArray(i)?i:[]),dependencies:(a,i)=>a.setDependencies(Array.isArray(i)?i:[])}),tabs:Object.freeze({active:(a,i)=>{typeof i=="string"&&a.activate(i)}}),chart:Object.freeze({}),layout:Object.freeze({})}),q=Object.freeze({chart:"update"});function B(a){return`on${String(a).split(":").map(p=>p.charAt(0).toUpperCase()+p.slice(1)).join("")}`}const x=Object.freeze(Object.fromEntries(Object.entries(T).map(([a,i])=>[a,Object.freeze(Object.fromEntries(i.map(p=>[B(p),p])))])));function R(a,i){const p=x[a]||{},k=L[a]||{},N={},O={},D={};for(const[M,_]of Object.entries(i||{})){if(Object.hasOwn(p,M)){D[M]=_;continue}if(Object.hasOwn(k,M)){O[M]=_,N[M]=_;continue}N[M]=_}return{config:N,live:O,handlers:D}}function f(a){const i=String(a.viewer),p=a.mount,k=a.name||i;if(typeof p!="function")throw new TypeError(`createViewerController needs a mount factory for "${i}"; pass the module's own factory in, e.g. { createKPI } from lattice-grid/modules/kpi.`);const N=R(i,a.props||{}),O=p(a.element,{...N.config});if(!O||typeof O!="object")throw new TypeError(`the ${k} factory returned no instance; nothing can be driven.`);let D=N.handlers,M=N.config;const _={...N.live},F=[];if(typeof O.on=="function")for(const H of T[i]||[]){const j=B(H),V=O.on(H,A=>{const I=D[j];typeof I=="function"&&I(A)});typeof V=="function"&&F.push(V)}const $=q[i],W=L[i]||{};let C=!1;return{instance:O,update(H){if(C)return;const j=R(i,H||{});D=j.handlers;const V={};for(const[I,Z]of Object.entries(j.config))Object.is(M[I],Z)||(V[I]=Z);if(M=j.config,!Object.keys(V).length)return;const A=[];for(const I of Object.keys(V)){const Z=W[I];if(Z){Z(O,V[I]),_[I]=V[I];continue}$&&typeof O[$]=="function"||A.push(I)}if($&&typeof O[$]=="function"){const I={};for(const Z of Object.keys(V))W[Z]||(I[Z]=V[Z]);Object.keys(I).length&&O[$](I)}A.length&&K(`react.viewer.${i}.mountOnly.${A.join(".")}`,`${k}: ${A.map(I=>`\`${I}\``).join(", ")} changed, but ${k} takes ${A.length===1?"it":"them"} only when the viewer is created. Nothing was applied and the viewer was NOT rebuilt — rebuilding it silently would throw away scroll position, selection and expansion. Give the component a \`key\` that changes when this must take effect, so the rebuild is yours and visible, or drive the instance through the ref.`)},destroy(){if(!C){C=!0;for(const H of F)try{H()}catch{}F.length=0,typeof O.destroy=="function"&&O.destroy()}}}}}),ne("packages/modules/presets/index.js",function(r,Y){"use strict";Object.defineProperty(r,"themeFromMui",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return x}});const K=Y("packages/core/src/internal/util.js").warnOnce;function T(R,f){if(typeof R!="string")return R;const a=R.trim().match(/^#([0-9a-f]{6})$/i);if(!a)return R;const i=a[1],p=parseInt(i.slice(0,2),16),k=parseInt(i.slice(2,4),16),N=parseInt(i.slice(4,6),16);return`rgba(${p}, ${k}, ${N}, ${f})`}function L(R){const f=R.palette,a=f.mode==="dark";return{"--lattice-background":f.background.default,"--lattice-surface":f.background.paper,"--lattice-surface-alt":a?"#2a2a2a":f.grey[50],"--lattice-border-color":f.divider,"--lattice-border-strong":a?f.grey[600]:f.grey[400],"--lattice-foreground":f.text.primary,"--lattice-foreground-muted":f.text.secondary,"--lattice-header-foreground":f.text.primary,"--lattice-accent":f.primary.main,"--lattice-accent-contrast":f.primary.contrastText,"--lattice-link-color":f.primary.main,"--lattice-selected-background":T(f.primary.main,.12),"--lattice-hovered-background":T(f.text.primary,.06),"--lattice-focus-color":f.primary.main,"--lattice-variant-danger-solid":f.error.main,"--lattice-variant-danger-fill":T(f.error.main,.12),"--lattice-variant-warning-solid":f.warning.main,"--lattice-variant-warning-fill":T(f.warning.main,.12),"--lattice-variant-success-solid":f.success.main,"--lattice-variant-success-fill":T(f.success.main,.12),"--lattice-variant-info-solid":f.info.main,"--lattice-variant-info-fill":T(f.info.main,.12),"--lattice-radius":`${R.shape.borderRadius}px`,"--lattice-font-family":R.typography.fontFamily,"--lattice-font-size":`${R.typography.body2.fontSize}`,"--lattice-header-font-weight":String(R.typography.fontWeightMedium)}}function q(R){return`.lattice {
6
+ var le=Object.create(null),de=Object.create(null);function ne(r,Y){le[r]=Y}function fe(r){var Y=de[r];if(Y)return Y;var X=Object.create(null);de[r]=X;var K=le[r];if(!K)throw new Error("[lattice] missing module: "+r);return K(X,fe),X}ne("packages/core/src/internal/util.js",function(r,Y){"use strict";Object.defineProperty(r,"VERSION",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"reportedWarnings",{enumerable:!0,get:function(){return i}}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return k}}),Object.defineProperty(r,"infoOnce",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"resetWarnings",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"fail",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"invariant",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"DEV",{enumerable:!0,get:function(){return _}}),Object.defineProperty(r,"isObject",{enumerable:!0,get:function(){return F}}),Object.defineProperty(r,"isFunction",{enumerable:!0,get:function(){return $}}),Object.defineProperty(r,"isNil",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"isBlank",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"isCtor",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"pathGetter",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"pathSetter",{enumerable:!0,get:function(){return I}}),Object.defineProperty(r,"getPath",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"setPath",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"humanise",{enumerable:!0,get:function(){return te}}),Object.defineProperty(r,"escapeHtml",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"titleCase",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"expand",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(r,"toArray",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"merge",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"mergeRow",{enumerable:!0,get:function(){return l}}),Object.defineProperty(r,"Lru",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"collator",{enumerable:!0,get:function(){return m}}),Object.defineProperty(r,"defaultCompare",{enumerable:!0,get:function(){return s}}),Object.defineProperty(r,"now",{enumerable:!0,get:function(){return w}}),Object.defineProperty(r,"nextFrame",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"cancelFrame",{enumerable:!0,get:function(){return h}}),Object.defineProperty(r,"frameBatched",{enumerable:!0,get:function(){return g}}),Object.defineProperty(r,"settleDebounce",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"whenIdle",{enumerable:!0,get:function(){return y}}),Object.defineProperty(r,"uid",{enumerable:!0,get:function(){return z}});const X="1.81.0";async function K(){return X}const T="1.81.0",L=new Set,q=2e3;function B(e){if(L.add(e),L.size>q){const t=L.values().next().value;t!==void 0&&L.delete(t)}}const x=[],R=500;function f(e,t,n){x.push({key:e,level:t,message:n.map(d=>typeof d=="string"?d:a(d)).join(" "),at:Date.now()}),x.length>R&&x.shift()}function a(e){if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}function i(){return x.map(e=>({...e}))}function p(e){if(e.length===0||typeof e[0]!="string")return e;const t=e[0].replace(/^\[lattice\]\s*/,"");return t===e[0]?e:[t,...e.slice(1)]}function k(e,...t){if(L.has(e))return;B(e);const n=p(t);f(e,"warn",n),console.warn("[lattice]",...n)}function N(e,...t){if(L.has(e))return;B(e);const n=p(t);f(e,"info",n),console.info("[lattice]",...n)}function O(){L.clear(),x.length=0}function D(e,t){const n=new Error(`[lattice] ${e}`);throw t!==void 0&&(n.cause=t),n}function M(e,t){e||D(t)}const _=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})();function F(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function $(e){return typeof e=="function"}function W(e){return e==null}function C(e){return e==null||e===""}function H(e){return typeof e!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(e))?!0:!!(e.prototype&&Object.getOwnPropertyNames(e.prototype).length>1)}const j=new Map;function V(e){let t=j.get(e);if(t)return t;if(!e.includes("."))t=n=>n?.[e];else{const n=e.split("."),d=n.length;t=J=>{let Q=J;for(let U=0;U<d;U++){if(Q==null)return;Q=Q[n[U]]}return Q}}return j.set(e,t),t}const A=new Map;function I(e){let t=A.get(e);if(t)return t;if(!e.includes("."))t=(n,d)=>{n!=null&&(n[e]=d)};else{const n=e.split("."),d=n.length-1;t=(J,Q)=>{let U=J;for(let ee=0;ee<d;ee++){if(U==null)return;const se=n[ee];U[se]==null&&(U[se]={}),U=U[se]}U!=null&&(U[n[d]]=Q)}}return A.set(e,t),t}function Z(e,t){return V(t)(e)}function ie(e,t,n){I(t)(e,n)}function te(e){return e?(e.includes(".")?e.slice(e.lastIndexOf(".")+1):e).replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/\s+/g," ").trim().replace(/^./,n=>n.toUpperCase()):""}const re={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function oe(e){const t=e==null?"":String(e);return/[&<>"']/.test(t)?t.replace(/[&<>"']/g,n=>re[n]):t}function ce(e){return String(e).replace(/\w\S*/g,t=>t[0].toUpperCase()+t.slice(1).toLowerCase())}function ae(e,t,n){if(e!==void 0)return e===!0?{enabled:!0,...n}:e===!1?{enabled:!1}:F(e)?e:{[t]:e,enabled:!0}}function ue(e){return e==null?[]:Array.isArray(e)?e:[e]}const o=Object.freeze(new Set(["__proto__","constructor","prototype"]));function b(e,t){if(!F(e))return F(t)?{...t}:t;if(!F(t))return t===void 0?e:t;const n={...e};for(const d of Object.keys(t)){if(o.has(d))continue;const J=t[d];J!==void 0&&(n[d]=F(J)&&F(n[d])?b(n[d],J):J)}return n}function l(e,t){if(!F(e)||!F(t)||e===t)return t;const n=Object.create(Object.getPrototypeOf(e));return Object.assign(n,e,t),n}class u{#n;#e=new Map;#t;constructor(t=256,n=null){this.#n=t,this.#t=n}get size(){return this.#e.size}get max(){return this.#n}set max(t){this.#n=t,this.#r()}has(t){return this.#e.has(t)}get(t){const n=this.#e;if(!n.has(t))return;const d=n.get(t);return n.delete(t),n.set(t,d),d}peek(t){return this.#e.get(t)}set(t,n){const d=this.#e;return d.has(t)&&d.delete(t),d.set(t,n),this.#r(),n}delete(t){const n=this.#e.get(t);return this.#e.delete(t)&&this.#t&&this.#t(n,t),n}clear(){if(this.#t)for(const[t,n]of this.#e)this.#t(n,t);this.#e.clear()}keys(){return this.#e.keys()}values(){return this.#e.values()}#r(){const t=this.#e;for(;t.size>this.#n;){const n=t.keys().next().value,d=t.get(n);t.delete(n),this.#t&&this.#t(d,n)}}}const c=new Map;function m(e,t){const n=`${e||""}|${t?JSON.stringify(t):""}`;let d=c.get(n);return d||(d=new Intl.Collator(e||void 0,{numeric:!0,sensitivity:"variant",...t}),c.set(n,d)),d}function s(e,t){if(e===t)return 0;if(e==null)return 1;if(t==null)return-1;if(typeof e=="number"&&typeof t=="number")return Number.isNaN(e)?Number.isNaN(t)?0:1:Number.isNaN(t)||e<t?-1:e>t?1:0;const n=String(e),d=String(t);return n<d?-1:n>d?1:0}function w(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}const P=typeof requestAnimationFrame=="function";function G(e){return P?requestAnimationFrame(e):setTimeout(()=>e(w()),16)}function h(e){e!=null&&(P?cancelAnimationFrame(e):clearTimeout(e))}function g(e){let t=null,n=null;const d=()=>{t=null;const Q=n;n=null,e(...Q||[])},J=(...Q)=>{n=Q,t===null&&(t=G(d))};return J.cancel=()=>{h(t),t=null,n=null},J.flush=()=>{t!==null&&(h(t),d())},J}function v(e,t){let n=null,d=null;const J=()=>{if(n=null,d===null)return;const ee=d;d=null,e(...ee),Q()},Q=()=>{n=setTimeout(J,t),typeof n?.unref=="function"&&n.unref()},U=(...ee)=>{n===null?(e(...ee),Q()):(d=ee,clearTimeout(n),Q())};return U.flush=()=>{if(n!==null&&clearTimeout(n),n=null,d===null)return;const ee=d;d=null,e(...ee)},U.cancel=()=>{n!==null&&clearTimeout(n),n=null,d=null},U.pending=()=>n!==null||d!==null,U}function y(e,t=50){return typeof requestIdleCallback=="function"?requestIdleCallback(e,{timeout:t}):setTimeout(()=>e({timeRemaining:()=>0,didTimeout:!0}),1)}let E=0;function z(e="l"){return`${e}${(++E).toString(36)}`}}),ne("packages/modules/shared/adapter.js",function(r,Y){"use strict";Object.defineProperty(r,"EVENT_NAMES",{enumerable:!0,get:function(){return X}}),Object.defineProperty(r,"handlerName",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"dashedName",{enumerable:!0,get:function(){return L}}),Object.defineProperty(r,"CONFIG_KEY_ALIASES",{enumerable:!0,get:function(){return q}}),Object.defineProperty(r,"aliasConfigKey",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"isHandlerProp",{enumerable:!0,get:function(){return R}}),Object.defineProperty(r,"partition",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"createGridController",{enumerable:!0,get:function(){return a}});const X=Object.freeze(["ready","destroy","render:first","render:done","config:changed","licence:changed","model:changed","rows:changed","rows:queued","rows:deferred","rows:paused","rows:resumed","row:received","row:sent","row:copied","row:moved","source:error","source:total","stream:chunk","stream:end","stream:evicted","rowDrag:started","rowDrag:moved","rowDrag:left","rowDrag:ended","cell:changed","cell:pending","cell:confirmed","cell:reverted","cell:conflict","cell:clicked","cell:dblclicked","cell:contextmenu","cell:mouseover","cell:mouseout","cell:mousedown","cell:mouseup","cell:edit:start","cell:edit:end","row:edit:start","row:edit:end","row:clicked","row:dblclicked","row:pending","row:confirmed","row:reverted","row:conflict","form:opened","form:closed","form:saved","form:error","sort:changed","filter:changed","group:toggled","facet:computed","facet:filtered","facet:expanded","facet:failed","column:moved","column:resized","column:visible","column:pinned","column:grouped","column:pivoted","column:filter:open","column:profile:open","column:menu:open","columns:changed","columns:tagged","columngroup:changed","header:contextmenu","pivot:drill","selection:changed","range:changed","clipboard:copy","page:changed","scroll","scroll:end","size:changed","detail:toggled","detail:cell:edit:start","detail:cell:edit:end","detail:row:edit:start","detail:row:edit:end","detail:cell:changed","toolpanel:focus","highlight:changed","find:changed","tree:loading","tree:loaded","tree:loadFailed","tree:loadAborted","state:changed","state:reset","history:changed","history:applied","views:changed","view:applied","view:saved","view:removed","view:renamed","view:default","formatting:changed","redaction:changed","permissions:changed","presentation:changed","presentation:started","presentation:ended","presentation:view","presentation:scale","presentation:spotlight","presentation:captured","comment:added","comment:edited","comment:deleted","comment:failed","comment:resolved","comment:unresolved","comment:threadOpened","comment:threadClosed","comment:indexLoaded","presence:published","presence:joined","presence:updated","presence:left","presence:failed","presence:lockRefused","diff:changed","diff:swapped","timeline:attached","timeline:detached","timeline:seek","timeline:seeking","annotation:changed","validation:failed","validation:cleared","export:progress","export:request","export:done","shortcuts:opened","shortcuts:closed","print:before","print:after","beforeEdit","beforeSort","beforeFilter","beforeColumnMove","beforeColumnResize","beforeColumnHide","beforeSelect","beforeRowAdd","beforeDelete","beforeRowMove","beforeGroup","beforeRowReceive","edit:cancelled","sort:cancelled","filter:cancelled","columnMove:cancelled","columnResize:cancelled","columnHide:cancelled","selection:cancelled","rowAdd:cancelled","delete:cancelled","rowMove:cancelled","group:cancelled","rowReceive:cancelled"]),K=Object.freeze({sort:(i,p)=>i.sort.set(p||[]),filters:(i,p)=>i.filters.set(p||null),quickFilter:(i,p)=>{if(p&&typeof p=="object"){i.filters.quick(p.text||"",{mode:p.mode});return}i.filters.quick(typeof p=="string"?p:"")},selectedKeys:(i,p)=>i.selection.set(Array.isArray(p)?p:[])});function T(i){return`on${String(i).split(":").map(k=>k.charAt(0).toUpperCase()+k.slice(1)).join("")}`}function L(i){return String(i).replace(/:/g,"-")}const q=Object.freeze({"row-key":"rowKey","row-height":"rowHeight","header-height":"headerHeight","auto-height":"autoHeight"});function B(i){return Object.hasOwn(q,i)?q[i]:i}const x=Object.freeze(Object.fromEntries(X.map(i=>[T(i),i])));function R(i){return Object.hasOwn(x,i)}function f(i){const p={},k={},N={};for(const[O,D]of Object.entries(i||{})){if(R(O)){N[O]=D;continue}if(Object.hasOwn(K,O)){k[O]=D;continue}p[O]=D}return{config:p,imperative:k,handlers:N}}function a(i){const p=i.createGrid;if(typeof p!="function")throw new TypeError("createGridController needs createGrid; pass it in from the grid package.");const k=f(i.props||{}),N=p(i.element,{...k.config});let O=k.handlers,D=k.config,M={};const _=W=>{if(!W||typeof W.type!="string")return;const C=O[T(W.type)];typeof C=="function"&&C(W)},F=N.on("*",_);for(const[W,C]of Object.entries(k.imperative))C!==void 0&&(K[W](N,C),M[W]=C);let $=!1;return{grid:N,update(W){if($)return;const C=f(W||{});O=C.handlers;const H={};for(const[j,V]of Object.entries(C.config))Object.is(D[j],V)||(H[j]=V);for(const j of Object.keys(D))Object.hasOwn(C.config,j)||(H[j]=void 0);Object.keys(H).length&&N.setAll(H),D=C.config;for(const[j,V]of Object.entries(K)){const A=C.imperative[j];Object.is(M[j],A)||A===void 0&&!Object.hasOwn(M,j)||(V(N,A),M[j]=A)}},destroy(){$||($=!0,F(),N.destroy())}}}}),ne("packages/modules/react/viewers.js",function(r,Y){"use strict";Object.defineProperty(r,"VIEWER_EVENTS",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"VIEWER_APPLY",{enumerable:!0,get:function(){return L}}),Object.defineProperty(r,"VIEWER_BULK_UPDATE",{enumerable:!0,get:function(){return q}}),Object.defineProperty(r,"viewerHandlerName",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"partitionViewerProps",{enumerable:!0,get:function(){return R}}),Object.defineProperty(r,"createViewerController",{enumerable:!0,get:function(){return f}});const K=Y("packages/core/src/internal/util.js").warnOnce,T=Object.freeze({kpi:Object.freeze(["tile:click","tile:dblclick","tile:contextmenu","node:toggle","change","tile:status"]),kanban:Object.freeze(["card:click","card:dblclick","card:contextmenu","card:move","card:reverted","card:confirmed","selection:changed","column:collapse","card:add","drag:start","drag:end","swimlane:collapse","swimlane:reorder","column:reorder","filter:changed","sprint:changed","epic:changed","card:expand","card:drill","card:edit","card:sla","beforeMove","beforeAdd","beforeEdit","beforeLaneReorder","beforeColumnReorder","beforeColumnChange","move:cancelled","add:cancelled","edit:cancelled","laneReorder:cancelled","columnReorder:cancelled","columnChange:cancelled"]),tabs:Object.freeze(["beforeTabChange","tab:changed","tabChange:cancelled"]),chart:Object.freeze(["click","hover","leave","draw","legend"]),gantt:Object.freeze(["schedule","error"]),layout:Object.freeze(["layout:changed","window:moved","window:resized","window:closed","beforeWindowClose","windowClose:cancelled"]),router:Object.freeze(["metrics"])}),L=Object.freeze({kpi:Object.freeze({rows:(a,i)=>a.setRows(Array.isArray(i)?i:[])}),kanban:Object.freeze({rows:(a,i)=>a.setRows(Array.isArray(i)?i:[]),quickFilter:(a,i)=>a.setQuickFilter(typeof i=="string"?i:""),sprint:(a,i)=>a.setSprint(i),epic:(a,i)=>a.setEpic(i),loading:(a,i)=>a.setLoading(!!i),error:(a,i)=>a.setError(i??null)}),gantt:Object.freeze({tasks:(a,i)=>a.setTasks(Array.isArray(i)?i:[]),dependencies:(a,i)=>a.setDependencies(Array.isArray(i)?i:[])}),tabs:Object.freeze({active:(a,i)=>{typeof i=="string"&&a.activate(i)}}),chart:Object.freeze({}),layout:Object.freeze({})}),q=Object.freeze({chart:"update"});function B(a){return`on${String(a).split(":").map(p=>p.charAt(0).toUpperCase()+p.slice(1)).join("")}`}const x=Object.freeze(Object.fromEntries(Object.entries(T).map(([a,i])=>[a,Object.freeze(Object.fromEntries(i.map(p=>[B(p),p])))])));function R(a,i){const p=x[a]||{},k=L[a]||{},N={},O={},D={};for(const[M,_]of Object.entries(i||{})){if(Object.hasOwn(p,M)){D[M]=_;continue}if(Object.hasOwn(k,M)){O[M]=_,N[M]=_;continue}N[M]=_}return{config:N,live:O,handlers:D}}function f(a){const i=String(a.viewer),p=a.mount,k=a.name||i;if(typeof p!="function")throw new TypeError(`createViewerController needs a mount factory for "${i}"; pass the module's own factory in, e.g. { createKPI } from lattice-grid/modules/kpi.`);const N=R(i,a.props||{}),O=p(a.element,{...N.config});if(!O||typeof O!="object")throw new TypeError(`the ${k} factory returned no instance; nothing can be driven.`);let D=N.handlers,M=N.config;const _={...N.live},F=[];if(typeof O.on=="function")for(const H of T[i]||[]){const j=B(H),V=O.on(H,A=>{const I=D[j];typeof I=="function"&&I(A)});typeof V=="function"&&F.push(V)}const $=q[i],W=L[i]||{};let C=!1;return{instance:O,update(H){if(C)return;const j=R(i,H||{});D=j.handlers;const V={};for(const[I,Z]of Object.entries(j.config))Object.is(M[I],Z)||(V[I]=Z);if(M=j.config,!Object.keys(V).length)return;const A=[];for(const I of Object.keys(V)){const Z=W[I];if(Z){Z(O,V[I]),_[I]=V[I];continue}$&&typeof O[$]=="function"||A.push(I)}if($&&typeof O[$]=="function"){const I={};for(const Z of Object.keys(V))W[Z]||(I[Z]=V[Z]);Object.keys(I).length&&O[$](I)}A.length&&K(`react.viewer.${i}.mountOnly.${A.join(".")}`,`${k}: ${A.map(I=>`\`${I}\``).join(", ")} changed, but ${k} takes ${A.length===1?"it":"them"} only when the viewer is created. Nothing was applied and the viewer was NOT rebuilt — rebuilding it silently would throw away scroll position, selection and expansion. Give the component a \`key\` that changes when this must take effect, so the rebuild is yours and visible, or drive the instance through the ref.`)},destroy(){if(!C){C=!0;for(const H of F)try{H()}catch{}F.length=0,typeof O.destroy=="function"&&O.destroy()}}}}}),ne("packages/modules/presets/index.js",function(r,Y){"use strict";Object.defineProperty(r,"themeFromMui",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return x}});const K=Y("packages/core/src/internal/util.js").warnOnce;function T(R,f){if(typeof R!="string")return R;const a=R.trim().match(/^#([0-9a-f]{6})$/i);if(!a)return R;const i=a[1],p=parseInt(i.slice(0,2),16),k=parseInt(i.slice(2,4),16),N=parseInt(i.slice(4,6),16);return`rgba(${p}, ${k}, ${N}, ${f})`}function L(R){const f=R.palette,a=f.mode==="dark";return{"--lattice-background":f.background.default,"--lattice-surface":f.background.paper,"--lattice-surface-alt":a?"#2a2a2a":f.grey[50],"--lattice-border-color":f.divider,"--lattice-border-strong":a?f.grey[600]:f.grey[400],"--lattice-foreground":f.text.primary,"--lattice-foreground-muted":f.text.secondary,"--lattice-header-foreground":f.text.primary,"--lattice-accent":f.primary.main,"--lattice-accent-contrast":f.primary.contrastText,"--lattice-link-color":f.primary.main,"--lattice-selected-background":T(f.primary.main,.12),"--lattice-hovered-background":T(f.text.primary,.06),"--lattice-focus-color":f.primary.main,"--lattice-variant-danger-solid":f.error.main,"--lattice-variant-danger-fill":T(f.error.main,.12),"--lattice-variant-warning-solid":f.warning.main,"--lattice-variant-warning-fill":T(f.warning.main,.12),"--lattice-variant-success-solid":f.success.main,"--lattice-variant-success-fill":T(f.success.main,.12),"--lattice-variant-info-solid":f.info.main,"--lattice-variant-info-fill":T(f.info.main,.12),"--lattice-radius":`${R.shape.borderRadius}px`,"--lattice-font-family":R.typography.fontFamily,"--lattice-font-size":`${R.typography.body2.fontSize}`,"--lattice-header-font-weight":String(R.typography.fontWeightMedium)}}function q(R){return`.lattice {
7
7
  ${Object.entries(R).map(([a,i])=>` ${a}: ${i};`).join(`
8
8
  `)}
9
9
  }
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Lattice Grid 1.80.0, svelte module
2
+ * Lattice Grid 1.81.0, svelte module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
6
- (function(be){"use strict";var le=Object.create(null),fe=Object.create(null);function te(r,U){le[r]=U}function de(r){var U=fe[r];if(U)return U;var Q=Object.create(null);fe[r]=Q;var q=le[r];if(!q)throw new Error("[lattice] missing module: "+r);return q(Q,de),Q}te("packages/core/src/internal/util.js",function(r,U){"use strict";Object.defineProperty(r,"VERSION",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"reportedWarnings",{enumerable:!0,get:function(){return i}}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return R}}),Object.defineProperty(r,"infoOnce",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"resetWarnings",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"fail",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"invariant",{enumerable:!0,get:function(){return L}}),Object.defineProperty(r,"DEV",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"isObject",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"isFunction",{enumerable:!0,get:function(){return $}}),Object.defineProperty(r,"isNil",{enumerable:!0,get:function(){return F}}),Object.defineProperty(r,"isBlank",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"isCtor",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"pathGetter",{enumerable:!0,get:function(){return z}}),Object.defineProperty(r,"pathSetter",{enumerable:!0,get:function(){return S}}),Object.defineProperty(r,"getPath",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"setPath",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"humanise",{enumerable:!0,get:function(){return ee}}),Object.defineProperty(r,"escapeHtml",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"titleCase",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"expand",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(r,"toArray",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"merge",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"mergeRow",{enumerable:!0,get:function(){return l}}),Object.defineProperty(r,"Lru",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"collator",{enumerable:!0,get:function(){return m}}),Object.defineProperty(r,"defaultCompare",{enumerable:!0,get:function(){return s}}),Object.defineProperty(r,"now",{enumerable:!0,get:function(){return w}}),Object.defineProperty(r,"nextFrame",{enumerable:!0,get:function(){return I}}),Object.defineProperty(r,"cancelFrame",{enumerable:!0,get:function(){return h}}),Object.defineProperty(r,"frameBatched",{enumerable:!0,get:function(){return g}}),Object.defineProperty(r,"settleDebounce",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"whenIdle",{enumerable:!0,get:function(){return y}}),Object.defineProperty(r,"uid",{enumerable:!0,get:function(){return G}});const Q="1.80.0";async function q(){return Q}const T="1.80.0",D=new Set,K=2e3;function Y(e){if(D.add(e),D.size>K){const t=D.values().next().value;t!==void 0&&D.delete(t)}}const X=[],k=500;function d(e,t,n){X.push({key:e,level:t,message:n.map(f=>typeof f=="string"?f:a(f)).join(" "),at:Date.now()}),X.length>k&&X.shift()}function a(e){if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}function i(){return X.map(e=>({...e}))}function p(e){if(e.length===0||typeof e[0]!="string")return e;const t=e[0].replace(/^\[lattice\]\s*/,"");return t===e[0]?e:[t,...e.slice(1)]}function R(e,...t){if(D.has(e))return;Y(e);const n=p(t);d(e,"warn",n),console.warn("[lattice]",...n)}function N(e,...t){if(D.has(e))return;Y(e);const n=p(t);d(e,"info",n),console.info("[lattice]",...n)}function O(){D.clear(),X.length=0}function V(e,t){const n=new Error(`[lattice] ${e}`);throw t!==void 0&&(n.cause=t),n}function L(e,t){e||V(t)}const x=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})();function M(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function $(e){return typeof e=="function"}function F(e){return e==null}function C(e){return e==null||e===""}function W(e){return typeof e!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(e))?!0:!!(e.prototype&&Object.getOwnPropertyNames(e.prototype).length>1)}const j=new Map;function z(e){let t=j.get(e);if(t)return t;if(!e.includes("."))t=n=>n?.[e];else{const n=e.split("."),f=n.length;t=Z=>{let J=Z;for(let H=0;H<f;H++){if(J==null)return;J=J[n[H]]}return J}}return j.set(e,t),t}const A=new Map;function S(e){let t=A.get(e);if(t)return t;if(!e.includes("."))t=(n,f)=>{n!=null&&(n[e]=f)};else{const n=e.split("."),f=n.length-1;t=(Z,J)=>{let H=Z;for(let _=0;_<f;_++){if(H==null)return;const se=n[_];H[se]==null&&(H[se]={}),H=H[se]}H!=null&&(H[n[f]]=J)}}return A.set(e,t),t}function B(e,t){return z(t)(e)}function ie(e,t,n){S(t)(e,n)}function ee(e){return e?(e.includes(".")?e.slice(e.lastIndexOf(".")+1):e).replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/\s+/g," ").trim().replace(/^./,n=>n.toUpperCase()):""}const ne={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function oe(e){const t=e==null?"":String(e);return/[&<>"']/.test(t)?t.replace(/[&<>"']/g,n=>ne[n]):t}function ce(e){return String(e).replace(/\w\S*/g,t=>t[0].toUpperCase()+t.slice(1).toLowerCase())}function ae(e,t,n){if(e!==void 0)return e===!0?{enabled:!0,...n}:e===!1?{enabled:!1}:M(e)?e:{[t]:e,enabled:!0}}function ue(e){return e==null?[]:Array.isArray(e)?e:[e]}const o=Object.freeze(new Set(["__proto__","constructor","prototype"]));function b(e,t){if(!M(e))return M(t)?{...t}:t;if(!M(t))return t===void 0?e:t;const n={...e};for(const f of Object.keys(t)){if(o.has(f))continue;const Z=t[f];Z!==void 0&&(n[f]=M(Z)&&M(n[f])?b(n[f],Z):Z)}return n}function l(e,t){if(!M(e)||!M(t)||e===t)return t;const n=Object.create(Object.getPrototypeOf(e));return Object.assign(n,e,t),n}class u{#n;#e=new Map;#t;constructor(t=256,n=null){this.#n=t,this.#t=n}get size(){return this.#e.size}get max(){return this.#n}set max(t){this.#n=t,this.#r()}has(t){return this.#e.has(t)}get(t){const n=this.#e;if(!n.has(t))return;const f=n.get(t);return n.delete(t),n.set(t,f),f}peek(t){return this.#e.get(t)}set(t,n){const f=this.#e;return f.has(t)&&f.delete(t),f.set(t,n),this.#r(),n}delete(t){const n=this.#e.get(t);return this.#e.delete(t)&&this.#t&&this.#t(n,t),n}clear(){if(this.#t)for(const[t,n]of this.#e)this.#t(n,t);this.#e.clear()}keys(){return this.#e.keys()}values(){return this.#e.values()}#r(){const t=this.#e;for(;t.size>this.#n;){const n=t.keys().next().value,f=t.get(n);t.delete(n),this.#t&&this.#t(f,n)}}}const c=new Map;function m(e,t){const n=`${e||""}|${t?JSON.stringify(t):""}`;let f=c.get(n);return f||(f=new Intl.Collator(e||void 0,{numeric:!0,sensitivity:"variant",...t}),c.set(n,f)),f}function s(e,t){if(e===t)return 0;if(e==null)return 1;if(t==null)return-1;if(typeof e=="number"&&typeof t=="number")return Number.isNaN(e)?Number.isNaN(t)?0:1:Number.isNaN(t)||e<t?-1:e>t?1:0;const n=String(e),f=String(t);return n<f?-1:n>f?1:0}function w(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}const P=typeof requestAnimationFrame=="function";function I(e){return P?requestAnimationFrame(e):setTimeout(()=>e(w()),16)}function h(e){e!=null&&(P?cancelAnimationFrame(e):clearTimeout(e))}function g(e){let t=null,n=null;const f=()=>{t=null;const J=n;n=null,e(...J||[])},Z=(...J)=>{n=J,t===null&&(t=I(f))};return Z.cancel=()=>{h(t),t=null,n=null},Z.flush=()=>{t!==null&&(h(t),f())},Z}function v(e,t){let n=null,f=null;const Z=()=>{if(n=null,f===null)return;const _=f;f=null,e(..._),J()},J=()=>{n=setTimeout(Z,t),typeof n?.unref=="function"&&n.unref()},H=(..._)=>{n===null?(e(..._),J()):(f=_,clearTimeout(n),J())};return H.flush=()=>{if(n!==null&&clearTimeout(n),n=null,f===null)return;const _=f;f=null,e(..._)},H.cancel=()=>{n!==null&&clearTimeout(n),n=null,f=null},H.pending=()=>n!==null||f!==null,H}function y(e,t=50){return typeof requestIdleCallback=="function"?requestIdleCallback(e,{timeout:t}):setTimeout(()=>e({timeRemaining:()=>0,didTimeout:!0}),1)}let E=0;function G(e="l"){return`${e}${(++E).toString(36)}`}}),te("packages/modules/shared/adapter.js",function(r,U){"use strict";Object.defineProperty(r,"EVENT_NAMES",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(r,"handlerName",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"dashedName",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"CONFIG_KEY_ALIASES",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"aliasConfigKey",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"isHandlerProp",{enumerable:!0,get:function(){return k}}),Object.defineProperty(r,"partition",{enumerable:!0,get:function(){return d}}),Object.defineProperty(r,"createGridController",{enumerable:!0,get:function(){return a}});const Q=Object.freeze(["ready","destroy","render:first","render:done","config:changed","licence:changed","model:changed","rows:changed","rows:queued","rows:deferred","rows:paused","rows:resumed","row:received","row:sent","row:copied","row:moved","source:error","source:total","stream:chunk","stream:end","stream:evicted","rowDrag:started","rowDrag:moved","rowDrag:left","rowDrag:ended","cell:changed","cell:pending","cell:confirmed","cell:reverted","cell:conflict","cell:clicked","cell:dblclicked","cell:contextmenu","cell:mouseover","cell:mouseout","cell:mousedown","cell:mouseup","cell:edit:start","cell:edit:end","row:edit:start","row:edit:end","row:clicked","row:dblclicked","row:pending","row:confirmed","row:reverted","row:conflict","form:opened","form:closed","form:saved","form:error","sort:changed","filter:changed","group:toggled","facet:computed","facet:filtered","facet:expanded","facet:failed","column:moved","column:resized","column:visible","column:pinned","column:grouped","column:pivoted","column:filter:open","column:profile:open","column:menu:open","columns:changed","columns:tagged","columngroup:changed","header:contextmenu","pivot:drill","selection:changed","range:changed","clipboard:copy","page:changed","scroll","scroll:end","size:changed","detail:toggled","detail:cell:edit:start","detail:cell:edit:end","detail:row:edit:start","detail:row:edit:end","detail:cell:changed","toolpanel:focus","highlight:changed","find:changed","tree:loading","tree:loaded","tree:loadFailed","tree:loadAborted","state:changed","state:reset","history:changed","history:applied","views:changed","view:applied","view:saved","view:removed","view:renamed","view:default","formatting:changed","redaction:changed","permissions:changed","presentation:changed","presentation:started","presentation:ended","presentation:view","presentation:scale","presentation:spotlight","presentation:captured","comment:added","comment:edited","comment:deleted","comment:failed","comment:resolved","comment:unresolved","comment:threadOpened","comment:threadClosed","comment:indexLoaded","presence:published","presence:joined","presence:updated","presence:left","presence:failed","presence:lockRefused","diff:changed","diff:swapped","timeline:attached","timeline:detached","timeline:seek","timeline:seeking","annotation:changed","validation:failed","validation:cleared","export:progress","export:request","export:done","shortcuts:opened","shortcuts:closed","print:before","print:after","beforeEdit","beforeSort","beforeFilter","beforeColumnMove","beforeColumnResize","beforeColumnHide","beforeSelect","beforeRowAdd","beforeDelete","beforeRowMove","beforeGroup","beforeRowReceive","edit:cancelled","sort:cancelled","filter:cancelled","columnMove:cancelled","columnResize:cancelled","columnHide:cancelled","selection:cancelled","rowAdd:cancelled","delete:cancelled","rowMove:cancelled","group:cancelled","rowReceive:cancelled"]),q=Object.freeze({sort:(i,p)=>i.sort.set(p||[]),filters:(i,p)=>i.filters.set(p||null),quickFilter:(i,p)=>{if(p&&typeof p=="object"){i.filters.quick(p.text||"",{mode:p.mode});return}i.filters.quick(typeof p=="string"?p:"")},selectedKeys:(i,p)=>i.selection.set(Array.isArray(p)?p:[])});function T(i){return`on${String(i).split(":").map(R=>R.charAt(0).toUpperCase()+R.slice(1)).join("")}`}function D(i){return String(i).replace(/:/g,"-")}const K=Object.freeze({"row-key":"rowKey","row-height":"rowHeight","header-height":"headerHeight","auto-height":"autoHeight"});function Y(i){return Object.hasOwn(K,i)?K[i]:i}const X=Object.freeze(Object.fromEntries(Q.map(i=>[T(i),i])));function k(i){return Object.hasOwn(X,i)}function d(i){const p={},R={},N={};for(const[O,V]of Object.entries(i||{})){if(k(O)){N[O]=V;continue}if(Object.hasOwn(q,O)){R[O]=V;continue}p[O]=V}return{config:p,imperative:R,handlers:N}}function a(i){const p=i.createGrid;if(typeof p!="function")throw new TypeError("createGridController needs createGrid; pass it in from the grid package.");const R=d(i.props||{}),N=p(i.element,{...R.config});let O=R.handlers,V=R.config,L={};const x=F=>{if(!F||typeof F.type!="string")return;const C=O[T(F.type)];typeof C=="function"&&C(F)},M=N.on("*",x);for(const[F,C]of Object.entries(R.imperative))C!==void 0&&(q[F](N,C),L[F]=C);let $=!1;return{grid:N,update(F){if($)return;const C=d(F||{});O=C.handlers;const W={};for(const[j,z]of Object.entries(C.config))Object.is(V[j],z)||(W[j]=z);for(const j of Object.keys(V))Object.hasOwn(C.config,j)||(W[j]=void 0);Object.keys(W).length&&N.setAll(W),V=C.config;for(const[j,z]of Object.entries(q)){const A=C.imperative[j];Object.is(L[j],A)||A===void 0&&!Object.hasOwn(L,j)||(z(N,A),L[j]=A)}},destroy(){$||($=!0,M(),N.destroy())}}}}),te("packages/modules/react/viewers.js",function(r,U){"use strict";Object.defineProperty(r,"VIEWER_EVENTS",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"VIEWER_APPLY",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"VIEWER_BULK_UPDATE",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"viewerHandlerName",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"partitionViewerProps",{enumerable:!0,get:function(){return k}}),Object.defineProperty(r,"createViewerController",{enumerable:!0,get:function(){return d}});const q=U("packages/core/src/internal/util.js").warnOnce,T=Object.freeze({kpi:Object.freeze(["tile:click","tile:dblclick","tile:contextmenu","node:toggle","change","tile:status"]),kanban:Object.freeze(["card:click","card:dblclick","card:contextmenu","card:move","card:reverted","card:confirmed","selection:changed","column:collapse","card:add","drag:start","drag:end","swimlane:collapse","swimlane:reorder","column:reorder","filter:changed","sprint:changed","epic:changed","card:expand","card:drill","card:edit","card:sla","beforeMove","beforeAdd","beforeEdit","beforeLaneReorder","beforeColumnReorder","beforeColumnChange","move:cancelled","add:cancelled","edit:cancelled","laneReorder:cancelled","columnReorder:cancelled","columnChange:cancelled"]),tabs:Object.freeze(["beforeTabChange","tab:changed","tabChange:cancelled"]),chart:Object.freeze(["click","hover","leave","draw","legend"]),gantt:Object.freeze(["schedule","error"]),layout:Object.freeze(["layout:changed","window:moved","window:resized","window:closed","beforeWindowClose","windowClose:cancelled"]),router:Object.freeze(["metrics"])}),D=Object.freeze({kpi:Object.freeze({rows:(a,i)=>a.setRows(Array.isArray(i)?i:[])}),kanban:Object.freeze({rows:(a,i)=>a.setRows(Array.isArray(i)?i:[]),quickFilter:(a,i)=>a.setQuickFilter(typeof i=="string"?i:""),sprint:(a,i)=>a.setSprint(i),epic:(a,i)=>a.setEpic(i),loading:(a,i)=>a.setLoading(!!i),error:(a,i)=>a.setError(i??null)}),gantt:Object.freeze({tasks:(a,i)=>a.setTasks(Array.isArray(i)?i:[]),dependencies:(a,i)=>a.setDependencies(Array.isArray(i)?i:[])}),tabs:Object.freeze({active:(a,i)=>{typeof i=="string"&&a.activate(i)}}),chart:Object.freeze({}),layout:Object.freeze({})}),K=Object.freeze({chart:"update"});function Y(a){return`on${String(a).split(":").map(p=>p.charAt(0).toUpperCase()+p.slice(1)).join("")}`}const X=Object.freeze(Object.fromEntries(Object.entries(T).map(([a,i])=>[a,Object.freeze(Object.fromEntries(i.map(p=>[Y(p),p])))])));function k(a,i){const p=X[a]||{},R=D[a]||{},N={},O={},V={};for(const[L,x]of Object.entries(i||{})){if(Object.hasOwn(p,L)){V[L]=x;continue}if(Object.hasOwn(R,L)){O[L]=x,N[L]=x;continue}N[L]=x}return{config:N,live:O,handlers:V}}function d(a){const i=String(a.viewer),p=a.mount,R=a.name||i;if(typeof p!="function")throw new TypeError(`createViewerController needs a mount factory for "${i}"; pass the module's own factory in, e.g. { createKPI } from lattice-grid/modules/kpi.`);const N=k(i,a.props||{}),O=p(a.element,{...N.config});if(!O||typeof O!="object")throw new TypeError(`the ${R} factory returned no instance; nothing can be driven.`);let V=N.handlers,L=N.config;const x={...N.live},M=[];if(typeof O.on=="function")for(const W of T[i]||[]){const j=Y(W),z=O.on(W,A=>{const S=V[j];typeof S=="function"&&S(A)});typeof z=="function"&&M.push(z)}const $=K[i],F=D[i]||{};let C=!1;return{instance:O,update(W){if(C)return;const j=k(i,W||{});V=j.handlers;const z={};for(const[S,B]of Object.entries(j.config))Object.is(L[S],B)||(z[S]=B);if(L=j.config,!Object.keys(z).length)return;const A=[];for(const S of Object.keys(z)){const B=F[S];if(B){B(O,z[S]),x[S]=z[S];continue}$&&typeof O[$]=="function"||A.push(S)}if($&&typeof O[$]=="function"){const S={};for(const B of Object.keys(z))F[B]||(S[B]=z[B]);Object.keys(S).length&&O[$](S)}A.length&&q(`react.viewer.${i}.mountOnly.${A.join(".")}`,`${R}: ${A.map(S=>`\`${S}\``).join(", ")} changed, but ${R} takes ${A.length===1?"it":"them"} only when the viewer is created. Nothing was applied and the viewer was NOT rebuilt — rebuilding it silently would throw away scroll position, selection and expansion. Give the component a \`key\` that changes when this must take effect, so the rebuild is yours and visible, or drive the instance through the ref.`)},destroy(){if(!C){C=!0;for(const W of M)try{W()}catch{}M.length=0,typeof O.destroy=="function"&&O.destroy()}}}}}),te("packages/modules/presets/index.js",function(r,U){"use strict";Object.defineProperty(r,"themeFromMui",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return X}});const q=U("packages/core/src/internal/util.js").warnOnce;function T(k,d){if(typeof k!="string")return k;const a=k.trim().match(/^#([0-9a-f]{6})$/i);if(!a)return k;const i=a[1],p=parseInt(i.slice(0,2),16),R=parseInt(i.slice(2,4),16),N=parseInt(i.slice(4,6),16);return`rgba(${p}, ${R}, ${N}, ${d})`}function D(k){const d=k.palette,a=d.mode==="dark";return{"--lattice-background":d.background.default,"--lattice-surface":d.background.paper,"--lattice-surface-alt":a?"#2a2a2a":d.grey[50],"--lattice-border-color":d.divider,"--lattice-border-strong":a?d.grey[600]:d.grey[400],"--lattice-foreground":d.text.primary,"--lattice-foreground-muted":d.text.secondary,"--lattice-header-foreground":d.text.primary,"--lattice-accent":d.primary.main,"--lattice-accent-contrast":d.primary.contrastText,"--lattice-link-color":d.primary.main,"--lattice-selected-background":T(d.primary.main,.12),"--lattice-hovered-background":T(d.text.primary,.06),"--lattice-focus-color":d.primary.main,"--lattice-variant-danger-solid":d.error.main,"--lattice-variant-danger-fill":T(d.error.main,.12),"--lattice-variant-warning-solid":d.warning.main,"--lattice-variant-warning-fill":T(d.warning.main,.12),"--lattice-variant-success-solid":d.success.main,"--lattice-variant-success-fill":T(d.success.main,.12),"--lattice-variant-info-solid":d.info.main,"--lattice-variant-info-fill":T(d.info.main,.12),"--lattice-radius":`${k.shape.borderRadius}px`,"--lattice-font-family":k.typography.fontFamily,"--lattice-font-size":`${k.typography.body2.fontSize}`,"--lattice-header-font-weight":String(k.typography.fontWeightMedium)}}function K(k){return`.lattice {
6
+ (function(be){"use strict";var le=Object.create(null),fe=Object.create(null);function te(r,U){le[r]=U}function de(r){var U=fe[r];if(U)return U;var Q=Object.create(null);fe[r]=Q;var q=le[r];if(!q)throw new Error("[lattice] missing module: "+r);return q(Q,de),Q}te("packages/core/src/internal/util.js",function(r,U){"use strict";Object.defineProperty(r,"VERSION",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"reportedWarnings",{enumerable:!0,get:function(){return i}}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return R}}),Object.defineProperty(r,"infoOnce",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"resetWarnings",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"fail",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"invariant",{enumerable:!0,get:function(){return L}}),Object.defineProperty(r,"DEV",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"isObject",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"isFunction",{enumerable:!0,get:function(){return $}}),Object.defineProperty(r,"isNil",{enumerable:!0,get:function(){return F}}),Object.defineProperty(r,"isBlank",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"isCtor",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"pathGetter",{enumerable:!0,get:function(){return z}}),Object.defineProperty(r,"pathSetter",{enumerable:!0,get:function(){return S}}),Object.defineProperty(r,"getPath",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"setPath",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"humanise",{enumerable:!0,get:function(){return ee}}),Object.defineProperty(r,"escapeHtml",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"titleCase",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"expand",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(r,"toArray",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"merge",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"mergeRow",{enumerable:!0,get:function(){return l}}),Object.defineProperty(r,"Lru",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"collator",{enumerable:!0,get:function(){return m}}),Object.defineProperty(r,"defaultCompare",{enumerable:!0,get:function(){return s}}),Object.defineProperty(r,"now",{enumerable:!0,get:function(){return w}}),Object.defineProperty(r,"nextFrame",{enumerable:!0,get:function(){return I}}),Object.defineProperty(r,"cancelFrame",{enumerable:!0,get:function(){return h}}),Object.defineProperty(r,"frameBatched",{enumerable:!0,get:function(){return g}}),Object.defineProperty(r,"settleDebounce",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"whenIdle",{enumerable:!0,get:function(){return y}}),Object.defineProperty(r,"uid",{enumerable:!0,get:function(){return G}});const Q="1.81.0";async function q(){return Q}const T="1.81.0",D=new Set,K=2e3;function Y(e){if(D.add(e),D.size>K){const t=D.values().next().value;t!==void 0&&D.delete(t)}}const X=[],k=500;function d(e,t,n){X.push({key:e,level:t,message:n.map(f=>typeof f=="string"?f:a(f)).join(" "),at:Date.now()}),X.length>k&&X.shift()}function a(e){if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}function i(){return X.map(e=>({...e}))}function p(e){if(e.length===0||typeof e[0]!="string")return e;const t=e[0].replace(/^\[lattice\]\s*/,"");return t===e[0]?e:[t,...e.slice(1)]}function R(e,...t){if(D.has(e))return;Y(e);const n=p(t);d(e,"warn",n),console.warn("[lattice]",...n)}function N(e,...t){if(D.has(e))return;Y(e);const n=p(t);d(e,"info",n),console.info("[lattice]",...n)}function O(){D.clear(),X.length=0}function V(e,t){const n=new Error(`[lattice] ${e}`);throw t!==void 0&&(n.cause=t),n}function L(e,t){e||V(t)}const x=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})();function M(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function $(e){return typeof e=="function"}function F(e){return e==null}function C(e){return e==null||e===""}function W(e){return typeof e!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(e))?!0:!!(e.prototype&&Object.getOwnPropertyNames(e.prototype).length>1)}const j=new Map;function z(e){let t=j.get(e);if(t)return t;if(!e.includes("."))t=n=>n?.[e];else{const n=e.split("."),f=n.length;t=Z=>{let J=Z;for(let H=0;H<f;H++){if(J==null)return;J=J[n[H]]}return J}}return j.set(e,t),t}const A=new Map;function S(e){let t=A.get(e);if(t)return t;if(!e.includes("."))t=(n,f)=>{n!=null&&(n[e]=f)};else{const n=e.split("."),f=n.length-1;t=(Z,J)=>{let H=Z;for(let _=0;_<f;_++){if(H==null)return;const se=n[_];H[se]==null&&(H[se]={}),H=H[se]}H!=null&&(H[n[f]]=J)}}return A.set(e,t),t}function B(e,t){return z(t)(e)}function ie(e,t,n){S(t)(e,n)}function ee(e){return e?(e.includes(".")?e.slice(e.lastIndexOf(".")+1):e).replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/\s+/g," ").trim().replace(/^./,n=>n.toUpperCase()):""}const ne={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function oe(e){const t=e==null?"":String(e);return/[&<>"']/.test(t)?t.replace(/[&<>"']/g,n=>ne[n]):t}function ce(e){return String(e).replace(/\w\S*/g,t=>t[0].toUpperCase()+t.slice(1).toLowerCase())}function ae(e,t,n){if(e!==void 0)return e===!0?{enabled:!0,...n}:e===!1?{enabled:!1}:M(e)?e:{[t]:e,enabled:!0}}function ue(e){return e==null?[]:Array.isArray(e)?e:[e]}const o=Object.freeze(new Set(["__proto__","constructor","prototype"]));function b(e,t){if(!M(e))return M(t)?{...t}:t;if(!M(t))return t===void 0?e:t;const n={...e};for(const f of Object.keys(t)){if(o.has(f))continue;const Z=t[f];Z!==void 0&&(n[f]=M(Z)&&M(n[f])?b(n[f],Z):Z)}return n}function l(e,t){if(!M(e)||!M(t)||e===t)return t;const n=Object.create(Object.getPrototypeOf(e));return Object.assign(n,e,t),n}class u{#n;#e=new Map;#t;constructor(t=256,n=null){this.#n=t,this.#t=n}get size(){return this.#e.size}get max(){return this.#n}set max(t){this.#n=t,this.#r()}has(t){return this.#e.has(t)}get(t){const n=this.#e;if(!n.has(t))return;const f=n.get(t);return n.delete(t),n.set(t,f),f}peek(t){return this.#e.get(t)}set(t,n){const f=this.#e;return f.has(t)&&f.delete(t),f.set(t,n),this.#r(),n}delete(t){const n=this.#e.get(t);return this.#e.delete(t)&&this.#t&&this.#t(n,t),n}clear(){if(this.#t)for(const[t,n]of this.#e)this.#t(n,t);this.#e.clear()}keys(){return this.#e.keys()}values(){return this.#e.values()}#r(){const t=this.#e;for(;t.size>this.#n;){const n=t.keys().next().value,f=t.get(n);t.delete(n),this.#t&&this.#t(f,n)}}}const c=new Map;function m(e,t){const n=`${e||""}|${t?JSON.stringify(t):""}`;let f=c.get(n);return f||(f=new Intl.Collator(e||void 0,{numeric:!0,sensitivity:"variant",...t}),c.set(n,f)),f}function s(e,t){if(e===t)return 0;if(e==null)return 1;if(t==null)return-1;if(typeof e=="number"&&typeof t=="number")return Number.isNaN(e)?Number.isNaN(t)?0:1:Number.isNaN(t)||e<t?-1:e>t?1:0;const n=String(e),f=String(t);return n<f?-1:n>f?1:0}function w(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}const P=typeof requestAnimationFrame=="function";function I(e){return P?requestAnimationFrame(e):setTimeout(()=>e(w()),16)}function h(e){e!=null&&(P?cancelAnimationFrame(e):clearTimeout(e))}function g(e){let t=null,n=null;const f=()=>{t=null;const J=n;n=null,e(...J||[])},Z=(...J)=>{n=J,t===null&&(t=I(f))};return Z.cancel=()=>{h(t),t=null,n=null},Z.flush=()=>{t!==null&&(h(t),f())},Z}function v(e,t){let n=null,f=null;const Z=()=>{if(n=null,f===null)return;const _=f;f=null,e(..._),J()},J=()=>{n=setTimeout(Z,t),typeof n?.unref=="function"&&n.unref()},H=(..._)=>{n===null?(e(..._),J()):(f=_,clearTimeout(n),J())};return H.flush=()=>{if(n!==null&&clearTimeout(n),n=null,f===null)return;const _=f;f=null,e(..._)},H.cancel=()=>{n!==null&&clearTimeout(n),n=null,f=null},H.pending=()=>n!==null||f!==null,H}function y(e,t=50){return typeof requestIdleCallback=="function"?requestIdleCallback(e,{timeout:t}):setTimeout(()=>e({timeRemaining:()=>0,didTimeout:!0}),1)}let E=0;function G(e="l"){return`${e}${(++E).toString(36)}`}}),te("packages/modules/shared/adapter.js",function(r,U){"use strict";Object.defineProperty(r,"EVENT_NAMES",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(r,"handlerName",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"dashedName",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"CONFIG_KEY_ALIASES",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"aliasConfigKey",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"isHandlerProp",{enumerable:!0,get:function(){return k}}),Object.defineProperty(r,"partition",{enumerable:!0,get:function(){return d}}),Object.defineProperty(r,"createGridController",{enumerable:!0,get:function(){return a}});const Q=Object.freeze(["ready","destroy","render:first","render:done","config:changed","licence:changed","model:changed","rows:changed","rows:queued","rows:deferred","rows:paused","rows:resumed","row:received","row:sent","row:copied","row:moved","source:error","source:total","stream:chunk","stream:end","stream:evicted","rowDrag:started","rowDrag:moved","rowDrag:left","rowDrag:ended","cell:changed","cell:pending","cell:confirmed","cell:reverted","cell:conflict","cell:clicked","cell:dblclicked","cell:contextmenu","cell:mouseover","cell:mouseout","cell:mousedown","cell:mouseup","cell:edit:start","cell:edit:end","row:edit:start","row:edit:end","row:clicked","row:dblclicked","row:pending","row:confirmed","row:reverted","row:conflict","form:opened","form:closed","form:saved","form:error","sort:changed","filter:changed","group:toggled","facet:computed","facet:filtered","facet:expanded","facet:failed","column:moved","column:resized","column:visible","column:pinned","column:grouped","column:pivoted","column:filter:open","column:profile:open","column:menu:open","columns:changed","columns:tagged","columngroup:changed","header:contextmenu","pivot:drill","selection:changed","range:changed","clipboard:copy","page:changed","scroll","scroll:end","size:changed","detail:toggled","detail:cell:edit:start","detail:cell:edit:end","detail:row:edit:start","detail:row:edit:end","detail:cell:changed","toolpanel:focus","highlight:changed","find:changed","tree:loading","tree:loaded","tree:loadFailed","tree:loadAborted","state:changed","state:reset","history:changed","history:applied","views:changed","view:applied","view:saved","view:removed","view:renamed","view:default","formatting:changed","redaction:changed","permissions:changed","presentation:changed","presentation:started","presentation:ended","presentation:view","presentation:scale","presentation:spotlight","presentation:captured","comment:added","comment:edited","comment:deleted","comment:failed","comment:resolved","comment:unresolved","comment:threadOpened","comment:threadClosed","comment:indexLoaded","presence:published","presence:joined","presence:updated","presence:left","presence:failed","presence:lockRefused","diff:changed","diff:swapped","timeline:attached","timeline:detached","timeline:seek","timeline:seeking","annotation:changed","validation:failed","validation:cleared","export:progress","export:request","export:done","shortcuts:opened","shortcuts:closed","print:before","print:after","beforeEdit","beforeSort","beforeFilter","beforeColumnMove","beforeColumnResize","beforeColumnHide","beforeSelect","beforeRowAdd","beforeDelete","beforeRowMove","beforeGroup","beforeRowReceive","edit:cancelled","sort:cancelled","filter:cancelled","columnMove:cancelled","columnResize:cancelled","columnHide:cancelled","selection:cancelled","rowAdd:cancelled","delete:cancelled","rowMove:cancelled","group:cancelled","rowReceive:cancelled"]),q=Object.freeze({sort:(i,p)=>i.sort.set(p||[]),filters:(i,p)=>i.filters.set(p||null),quickFilter:(i,p)=>{if(p&&typeof p=="object"){i.filters.quick(p.text||"",{mode:p.mode});return}i.filters.quick(typeof p=="string"?p:"")},selectedKeys:(i,p)=>i.selection.set(Array.isArray(p)?p:[])});function T(i){return`on${String(i).split(":").map(R=>R.charAt(0).toUpperCase()+R.slice(1)).join("")}`}function D(i){return String(i).replace(/:/g,"-")}const K=Object.freeze({"row-key":"rowKey","row-height":"rowHeight","header-height":"headerHeight","auto-height":"autoHeight"});function Y(i){return Object.hasOwn(K,i)?K[i]:i}const X=Object.freeze(Object.fromEntries(Q.map(i=>[T(i),i])));function k(i){return Object.hasOwn(X,i)}function d(i){const p={},R={},N={};for(const[O,V]of Object.entries(i||{})){if(k(O)){N[O]=V;continue}if(Object.hasOwn(q,O)){R[O]=V;continue}p[O]=V}return{config:p,imperative:R,handlers:N}}function a(i){const p=i.createGrid;if(typeof p!="function")throw new TypeError("createGridController needs createGrid; pass it in from the grid package.");const R=d(i.props||{}),N=p(i.element,{...R.config});let O=R.handlers,V=R.config,L={};const x=F=>{if(!F||typeof F.type!="string")return;const C=O[T(F.type)];typeof C=="function"&&C(F)},M=N.on("*",x);for(const[F,C]of Object.entries(R.imperative))C!==void 0&&(q[F](N,C),L[F]=C);let $=!1;return{grid:N,update(F){if($)return;const C=d(F||{});O=C.handlers;const W={};for(const[j,z]of Object.entries(C.config))Object.is(V[j],z)||(W[j]=z);for(const j of Object.keys(V))Object.hasOwn(C.config,j)||(W[j]=void 0);Object.keys(W).length&&N.setAll(W),V=C.config;for(const[j,z]of Object.entries(q)){const A=C.imperative[j];Object.is(L[j],A)||A===void 0&&!Object.hasOwn(L,j)||(z(N,A),L[j]=A)}},destroy(){$||($=!0,M(),N.destroy())}}}}),te("packages/modules/react/viewers.js",function(r,U){"use strict";Object.defineProperty(r,"VIEWER_EVENTS",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"VIEWER_APPLY",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"VIEWER_BULK_UPDATE",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"viewerHandlerName",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"partitionViewerProps",{enumerable:!0,get:function(){return k}}),Object.defineProperty(r,"createViewerController",{enumerable:!0,get:function(){return d}});const q=U("packages/core/src/internal/util.js").warnOnce,T=Object.freeze({kpi:Object.freeze(["tile:click","tile:dblclick","tile:contextmenu","node:toggle","change","tile:status"]),kanban:Object.freeze(["card:click","card:dblclick","card:contextmenu","card:move","card:reverted","card:confirmed","selection:changed","column:collapse","card:add","drag:start","drag:end","swimlane:collapse","swimlane:reorder","column:reorder","filter:changed","sprint:changed","epic:changed","card:expand","card:drill","card:edit","card:sla","beforeMove","beforeAdd","beforeEdit","beforeLaneReorder","beforeColumnReorder","beforeColumnChange","move:cancelled","add:cancelled","edit:cancelled","laneReorder:cancelled","columnReorder:cancelled","columnChange:cancelled"]),tabs:Object.freeze(["beforeTabChange","tab:changed","tabChange:cancelled"]),chart:Object.freeze(["click","hover","leave","draw","legend"]),gantt:Object.freeze(["schedule","error"]),layout:Object.freeze(["layout:changed","window:moved","window:resized","window:closed","beforeWindowClose","windowClose:cancelled"]),router:Object.freeze(["metrics"])}),D=Object.freeze({kpi:Object.freeze({rows:(a,i)=>a.setRows(Array.isArray(i)?i:[])}),kanban:Object.freeze({rows:(a,i)=>a.setRows(Array.isArray(i)?i:[]),quickFilter:(a,i)=>a.setQuickFilter(typeof i=="string"?i:""),sprint:(a,i)=>a.setSprint(i),epic:(a,i)=>a.setEpic(i),loading:(a,i)=>a.setLoading(!!i),error:(a,i)=>a.setError(i??null)}),gantt:Object.freeze({tasks:(a,i)=>a.setTasks(Array.isArray(i)?i:[]),dependencies:(a,i)=>a.setDependencies(Array.isArray(i)?i:[])}),tabs:Object.freeze({active:(a,i)=>{typeof i=="string"&&a.activate(i)}}),chart:Object.freeze({}),layout:Object.freeze({})}),K=Object.freeze({chart:"update"});function Y(a){return`on${String(a).split(":").map(p=>p.charAt(0).toUpperCase()+p.slice(1)).join("")}`}const X=Object.freeze(Object.fromEntries(Object.entries(T).map(([a,i])=>[a,Object.freeze(Object.fromEntries(i.map(p=>[Y(p),p])))])));function k(a,i){const p=X[a]||{},R=D[a]||{},N={},O={},V={};for(const[L,x]of Object.entries(i||{})){if(Object.hasOwn(p,L)){V[L]=x;continue}if(Object.hasOwn(R,L)){O[L]=x,N[L]=x;continue}N[L]=x}return{config:N,live:O,handlers:V}}function d(a){const i=String(a.viewer),p=a.mount,R=a.name||i;if(typeof p!="function")throw new TypeError(`createViewerController needs a mount factory for "${i}"; pass the module's own factory in, e.g. { createKPI } from lattice-grid/modules/kpi.`);const N=k(i,a.props||{}),O=p(a.element,{...N.config});if(!O||typeof O!="object")throw new TypeError(`the ${R} factory returned no instance; nothing can be driven.`);let V=N.handlers,L=N.config;const x={...N.live},M=[];if(typeof O.on=="function")for(const W of T[i]||[]){const j=Y(W),z=O.on(W,A=>{const S=V[j];typeof S=="function"&&S(A)});typeof z=="function"&&M.push(z)}const $=K[i],F=D[i]||{};let C=!1;return{instance:O,update(W){if(C)return;const j=k(i,W||{});V=j.handlers;const z={};for(const[S,B]of Object.entries(j.config))Object.is(L[S],B)||(z[S]=B);if(L=j.config,!Object.keys(z).length)return;const A=[];for(const S of Object.keys(z)){const B=F[S];if(B){B(O,z[S]),x[S]=z[S];continue}$&&typeof O[$]=="function"||A.push(S)}if($&&typeof O[$]=="function"){const S={};for(const B of Object.keys(z))F[B]||(S[B]=z[B]);Object.keys(S).length&&O[$](S)}A.length&&q(`react.viewer.${i}.mountOnly.${A.join(".")}`,`${R}: ${A.map(S=>`\`${S}\``).join(", ")} changed, but ${R} takes ${A.length===1?"it":"them"} only when the viewer is created. Nothing was applied and the viewer was NOT rebuilt — rebuilding it silently would throw away scroll position, selection and expansion. Give the component a \`key\` that changes when this must take effect, so the rebuild is yours and visible, or drive the instance through the ref.`)},destroy(){if(!C){C=!0;for(const W of M)try{W()}catch{}M.length=0,typeof O.destroy=="function"&&O.destroy()}}}}}),te("packages/modules/presets/index.js",function(r,U){"use strict";Object.defineProperty(r,"themeFromMui",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return X}});const q=U("packages/core/src/internal/util.js").warnOnce;function T(k,d){if(typeof k!="string")return k;const a=k.trim().match(/^#([0-9a-f]{6})$/i);if(!a)return k;const i=a[1],p=parseInt(i.slice(0,2),16),R=parseInt(i.slice(2,4),16),N=parseInt(i.slice(4,6),16);return`rgba(${p}, ${R}, ${N}, ${d})`}function D(k){const d=k.palette,a=d.mode==="dark";return{"--lattice-background":d.background.default,"--lattice-surface":d.background.paper,"--lattice-surface-alt":a?"#2a2a2a":d.grey[50],"--lattice-border-color":d.divider,"--lattice-border-strong":a?d.grey[600]:d.grey[400],"--lattice-foreground":d.text.primary,"--lattice-foreground-muted":d.text.secondary,"--lattice-header-foreground":d.text.primary,"--lattice-accent":d.primary.main,"--lattice-accent-contrast":d.primary.contrastText,"--lattice-link-color":d.primary.main,"--lattice-selected-background":T(d.primary.main,.12),"--lattice-hovered-background":T(d.text.primary,.06),"--lattice-focus-color":d.primary.main,"--lattice-variant-danger-solid":d.error.main,"--lattice-variant-danger-fill":T(d.error.main,.12),"--lattice-variant-warning-solid":d.warning.main,"--lattice-variant-warning-fill":T(d.warning.main,.12),"--lattice-variant-success-solid":d.success.main,"--lattice-variant-success-fill":T(d.success.main,.12),"--lattice-variant-info-solid":d.info.main,"--lattice-variant-info-fill":T(d.info.main,.12),"--lattice-radius":`${k.shape.borderRadius}px`,"--lattice-font-family":k.typography.fontFamily,"--lattice-font-size":`${k.typography.body2.fontSize}`,"--lattice-header-font-weight":String(k.typography.fontWeightMedium)}}function K(k){return`.lattice {
7
7
  ${Object.entries(k).map(([a,i])=>` ${a}: ${i};`).join(`
8
8
  `)}
9
9
  }