@toolbox-web/grid 1.6.2 → 1.8.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 (114) hide show
  1. package/README.md +51 -15
  2. package/all.js +267 -158
  3. package/all.js.map +1 -1
  4. package/index.js +866 -722
  5. package/index.js.map +1 -1
  6. package/lib/core/grid.d.ts +68 -1
  7. package/lib/core/grid.d.ts.map +1 -1
  8. package/lib/core/internal/header.d.ts.map +1 -1
  9. package/lib/core/plugin/base-plugin.d.ts +182 -1
  10. package/lib/core/plugin/base-plugin.d.ts.map +1 -1
  11. package/lib/core/plugin/index.d.ts +1 -1
  12. package/lib/core/plugin/index.d.ts.map +1 -1
  13. package/lib/core/plugin/plugin-manager.d.ts +56 -1
  14. package/lib/core/plugin/plugin-manager.d.ts.map +1 -1
  15. package/lib/core/plugin/types.d.ts +36 -0
  16. package/lib/core/plugin/types.d.ts.map +1 -1
  17. package/lib/core/types.d.ts +1349 -31
  18. package/lib/core/types.d.ts.map +1 -1
  19. package/lib/plugins/clipboard/ClipboardPlugin.d.ts.map +1 -1
  20. package/lib/plugins/clipboard/index.js +140 -87
  21. package/lib/plugins/clipboard/index.js.map +1 -1
  22. package/lib/plugins/column-virtualization/index.js +64 -7
  23. package/lib/plugins/column-virtualization/index.js.map +1 -1
  24. package/lib/plugins/context-menu/ContextMenuPlugin.d.ts.map +1 -1
  25. package/lib/plugins/context-menu/index.js +123 -65
  26. package/lib/plugins/context-menu/index.js.map +1 -1
  27. package/lib/plugins/editing/EditingPlugin.d.ts +6 -1
  28. package/lib/plugins/editing/EditingPlugin.d.ts.map +1 -1
  29. package/lib/plugins/editing/index.js +95 -13
  30. package/lib/plugins/editing/index.js.map +1 -1
  31. package/lib/plugins/export/index.js +91 -34
  32. package/lib/plugins/export/index.js.map +1 -1
  33. package/lib/plugins/filtering/FilteringPlugin.d.ts +6 -1
  34. package/lib/plugins/filtering/FilteringPlugin.d.ts.map +1 -1
  35. package/lib/plugins/filtering/index.js +192 -123
  36. package/lib/plugins/filtering/index.js.map +1 -1
  37. package/lib/plugins/grouping-columns/index.js +57 -0
  38. package/lib/plugins/grouping-columns/index.js.map +1 -1
  39. package/lib/plugins/grouping-rows/GroupingRowsPlugin.d.ts +7 -2
  40. package/lib/plugins/grouping-rows/GroupingRowsPlugin.d.ts.map +1 -1
  41. package/lib/plugins/grouping-rows/index.js +142 -60
  42. package/lib/plugins/grouping-rows/index.js.map +1 -1
  43. package/lib/plugins/master-detail/index.js +69 -12
  44. package/lib/plugins/master-detail/index.js.map +1 -1
  45. package/lib/plugins/multi-sort/index.js +70 -13
  46. package/lib/plugins/multi-sort/index.js.map +1 -1
  47. package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts +3 -3
  48. package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts.map +1 -1
  49. package/lib/plugins/pinned-columns/index.js +106 -36
  50. package/lib/plugins/pinned-columns/index.js.map +1 -1
  51. package/lib/plugins/pinned-rows/index.js +57 -0
  52. package/lib/plugins/pinned-rows/index.js.map +1 -1
  53. package/lib/plugins/pivot/index.js +57 -0
  54. package/lib/plugins/pivot/index.js.map +1 -1
  55. package/lib/plugins/print/PrintPlugin.d.ts.map +1 -1
  56. package/lib/plugins/print/index.js +58 -1
  57. package/lib/plugins/print/index.js.map +1 -1
  58. package/lib/plugins/reorder/ReorderPlugin.d.ts.map +1 -1
  59. package/lib/plugins/reorder/column-drag.d.ts +2 -2
  60. package/lib/plugins/reorder/index.js +68 -17
  61. package/lib/plugins/reorder/index.js.map +1 -1
  62. package/lib/plugins/responsive/ResponsivePlugin.d.ts +6 -1
  63. package/lib/plugins/responsive/ResponsivePlugin.d.ts.map +1 -1
  64. package/lib/plugins/responsive/index.js +125 -54
  65. package/lib/plugins/responsive/index.js.map +1 -1
  66. package/lib/plugins/row-reorder/index.js +169 -112
  67. package/lib/plugins/row-reorder/index.js.map +1 -1
  68. package/lib/plugins/selection/SelectionPlugin.d.ts +14 -2
  69. package/lib/plugins/selection/SelectionPlugin.d.ts.map +1 -1
  70. package/lib/plugins/selection/index.js +84 -7
  71. package/lib/plugins/selection/index.js.map +1 -1
  72. package/lib/plugins/server-side/index.js +79 -22
  73. package/lib/plugins/server-side/index.js.map +1 -1
  74. package/lib/plugins/tree/TreePlugin.d.ts +7 -1
  75. package/lib/plugins/tree/TreePlugin.d.ts.map +1 -1
  76. package/lib/plugins/tree/index.js +140 -58
  77. package/lib/plugins/tree/index.js.map +1 -1
  78. package/lib/plugins/undo-redo/UndoRedoPlugin.d.ts +6 -1
  79. package/lib/plugins/undo-redo/UndoRedoPlugin.d.ts.map +1 -1
  80. package/lib/plugins/undo-redo/index.js +79 -10
  81. package/lib/plugins/undo-redo/index.js.map +1 -1
  82. package/lib/plugins/visibility/index.js +57 -0
  83. package/lib/plugins/visibility/index.js.map +1 -1
  84. package/package.json +1 -1
  85. package/public.d.ts +80 -2
  86. package/public.d.ts.map +1 -1
  87. package/umd/grid.all.umd.js +25 -25
  88. package/umd/grid.all.umd.js.map +1 -1
  89. package/umd/grid.umd.js +15 -15
  90. package/umd/grid.umd.js.map +1 -1
  91. package/umd/plugins/clipboard.umd.js +5 -5
  92. package/umd/plugins/clipboard.umd.js.map +1 -1
  93. package/umd/plugins/context-menu.umd.js +1 -1
  94. package/umd/plugins/context-menu.umd.js.map +1 -1
  95. package/umd/plugins/editing.umd.js +1 -1
  96. package/umd/plugins/editing.umd.js.map +1 -1
  97. package/umd/plugins/filtering.umd.js +1 -1
  98. package/umd/plugins/filtering.umd.js.map +1 -1
  99. package/umd/plugins/grouping-rows.umd.js +2 -2
  100. package/umd/plugins/grouping-rows.umd.js.map +1 -1
  101. package/umd/plugins/pinned-columns.umd.js +1 -1
  102. package/umd/plugins/pinned-columns.umd.js.map +1 -1
  103. package/umd/plugins/print.umd.js +1 -1
  104. package/umd/plugins/print.umd.js.map +1 -1
  105. package/umd/plugins/reorder.umd.js +1 -1
  106. package/umd/plugins/reorder.umd.js.map +1 -1
  107. package/umd/plugins/responsive.umd.js +1 -1
  108. package/umd/plugins/responsive.umd.js.map +1 -1
  109. package/umd/plugins/selection.umd.js +2 -2
  110. package/umd/plugins/selection.umd.js.map +1 -1
  111. package/umd/plugins/tree.umd.js +1 -1
  112. package/umd/plugins/tree.umd.js.map +1 -1
  113. package/umd/plugins/undo-redo.umd.js +1 -1
  114. package/umd/plugins/undo-redo.umd.js.map +1 -1
package/all.js CHANGED
@@ -1,8 +1,8 @@
1
- import { BaseGridPlugin as A, DEFAULT_GRID_ICONS as st, a as at, runAggregator as ee, e as lt, s as dt, PLUGIN_QUERIES as Ze, getAggregator as ve, getValueAggregator as ct, b as D, c as ye, g as ut } from "./index.js";
2
- import { DEFAULT_ANIMATION_CONFIG as Ln, DGEvents as Fn, DataGridElement as In, FitModeEnum as Pn, GridCSSVars as Dn, GridClasses as Mn, GridDataAttrs as Nn, DataGridElement as qn, GridSelectors as Hn, PluginEvents as zn, PluginManager as Kn, RenderPhase as On, builtInSort as Gn, createGrid as Bn, defaultComparator as Vn, queryGrid as Wn } from "./index.js";
3
- const Je = "__tbw_expander", ht = 32;
1
+ import { BaseGridPlugin as A, DEFAULT_GRID_ICONS as st, a as at, runAggregator as ee, e as lt, s as dt, getAggregator as ve, getValueAggregator as ct, b as D, c as ye, g as ut } from "./index.js";
2
+ import { DEFAULT_ANIMATION_CONFIG as Ln, DGEvents as Fn, DataGridElement as In, FitModeEnum as Pn, GridCSSVars as Dn, GridClasses as Mn, GridDataAttrs as Nn, DataGridElement as qn, GridSelectors as Kn, PLUGIN_QUERIES as Hn, PluginEvents as zn, PluginManager as On, RenderPhase as Gn, builtInSort as Bn, createGrid as Vn, defaultComparator as Wn, queryGrid as $n } from "./index.js";
3
+ const Qe = "__tbw_expander", ht = 32;
4
4
  function fe(s) {
5
- return s.field === Je;
5
+ return s.field === Qe;
6
6
  }
7
7
  function q(s) {
8
8
  return s.meta?.utility === !0;
@@ -12,7 +12,7 @@ function gt(s) {
12
12
  }
13
13
  function ft(s) {
14
14
  return {
15
- field: Je,
15
+ field: Qe,
16
16
  header: "",
17
17
  width: ht,
18
18
  resizable: !1,
@@ -110,34 +110,34 @@ class un extends A {
110
110
  return (e.ctrlKey || e.metaKey) && e.key === "c" ? (this.#e(e.target), !0) : !1;
111
111
  }
112
112
  #e(e) {
113
- const t = this.#n(), i = t?.getSelection(), n = this.columns.length - 1, r = this.rows.length - 1;
114
- let o;
115
- if (i && i.ranges.length > 0) {
116
- const { mode: l, ranges: d } = i, c = d[d.length - 1];
117
- l === "row" ? o = {
118
- startRow: c.from.row,
113
+ const t = this.#n(), i = this.columns.length - 1, n = this.rows.length - 1;
114
+ let r;
115
+ if (t && t.ranges.length > 0) {
116
+ const { mode: a, ranges: l } = t, d = l[l.length - 1];
117
+ a === "row" ? r = {
118
+ startRow: d.from.row,
119
119
  startCol: 0,
120
- endRow: c.to.row,
121
- endCol: n
122
- } : o = {
123
- startRow: c.from.row,
124
- startCol: c.from.col,
125
- endRow: c.to.row,
126
- endCol: c.to.col
120
+ endRow: d.to.row,
121
+ endCol: i
122
+ } : r = {
123
+ startRow: d.from.row,
124
+ startCol: d.from.col,
125
+ endRow: d.to.row,
126
+ endCol: d.to.col
127
127
  };
128
128
  } else if (!t)
129
- o = { startRow: 0, startCol: 0, endRow: r, endCol: n };
129
+ r = { startRow: 0, startCol: 0, endRow: n, endCol: i };
130
130
  else {
131
- const l = this.#r(e);
132
- if (!l) return;
133
- o = { startRow: l.row, startCol: l.col, endRow: l.row, endCol: l.col };
131
+ const a = this.#r(e);
132
+ if (!a) return;
133
+ r = { startRow: a.row, startCol: a.col, endRow: a.row, endCol: a.col };
134
134
  }
135
- const a = this.#i(o);
136
- te(a.text).then(() => {
137
- this.lastCopied = { text: a.text, timestamp: Date.now() }, this.emit("copy", {
138
- text: a.text,
139
- rowCount: a.rowCount,
140
- columnCount: a.columnCount
135
+ const o = this.#i(r);
136
+ te(o.text).then(() => {
137
+ this.lastCopied = { text: o.text, timestamp: Date.now() }, this.emit("copy", {
138
+ text: o.text,
139
+ rowCount: o.rowCount,
140
+ columnCount: o.columnCount
141
141
  });
142
142
  });
143
143
  }
@@ -145,13 +145,13 @@ class un extends A {
145
145
  const t = e.clipboardData?.getData("text/plain");
146
146
  if (!t) return;
147
147
  e.preventDefault();
148
- const i = xe(t, this.config), r = this.#n()?.getSelection(), o = r?.ranges?.[0], a = o?.from.row ?? 0, l = o?.from.col ?? 0, c = o && (r?.mode === "range" || r?.mode === "row") && (o.from.row !== o.to.row || o.from.col !== o.to.col) ? { endRow: o.to.row, endCol: o.to.col } : null, u = c?.endCol ?? this.columns.length - 1, h = this.columns[l], g = h ? { row: a, col: l, field: h.field, bounds: c } : null, f = [], p = i[0]?.length ?? 0;
149
- for (let b = 0; b < p && l + b <= u; b++) {
150
- const v = this.columns[l + b];
151
- v && !v.hidden && f.push(v.field);
148
+ const i = xe(t, this.config), n = this.#n(), r = n?.ranges?.[0], o = r?.from.row ?? 0, a = r?.from.col ?? 0, d = r && (n?.mode === "range" || n?.mode === "row") && (r.from.row !== r.to.row || r.from.col !== r.to.col) ? { endRow: r.to.row, endCol: r.to.col } : null, c = d?.endCol ?? this.columns.length - 1, u = this.columns[a], h = u ? { row: o, col: a, field: u.field, bounds: d } : null, g = [], f = i[0]?.length ?? 0;
149
+ for (let w = 0; w < f && a + w <= c; w++) {
150
+ const b = this.columns[a + w];
151
+ b && !b.hidden && g.push(b.field);
152
152
  }
153
- const w = { rows: i, text: t, target: g, fields: f };
154
- this.emit("paste", w), this.#o(w);
153
+ const p = { rows: i, text: t, target: h, fields: g };
154
+ this.emit("paste", p), this.#o(p);
155
155
  }
156
156
  #o(e) {
157
157
  if (!this.grid) return;
@@ -160,12 +160,7 @@ class un extends A {
160
160
  (t ?? mt)(e, this.grid);
161
161
  }
162
162
  #n() {
163
- try {
164
- const e = this.grid?.getPluginByName("selection");
165
- if (e)
166
- return e;
167
- } catch {
168
- }
163
+ return this.grid?.query("getSelection", void 0)?.[0];
169
164
  }
170
165
  #i(e) {
171
166
  const { startRow: t, startCol: i, endRow: n, endCol: r } = e, o = Math.min(t, n), a = Math.max(t, n), l = Math.min(i, r), d = Math.max(i, r), c = this.config.delimiter ?? " ", u = this.config.newline ?? `
@@ -200,19 +195,19 @@ class un extends A {
200
195
  return o === -1 ? null : { row: r, col: o };
201
196
  }
202
197
  async copy() {
203
- const t = this.#n()?.getSelection(), i = this.columns.length - 1;
204
- let n = { startRow: 0, startCol: 0, endRow: this.rows.length - 1, endCol: i };
205
- if (t && t.ranges.length > 0) {
206
- const o = t.ranges[t.ranges.length - 1];
207
- t.mode === "row" ? n = { startRow: o.from.row, startCol: 0, endRow: o.to.row, endCol: i } : n = {
208
- startRow: o.from.row,
209
- startCol: o.from.col,
210
- endRow: o.to.row,
211
- endCol: o.to.col
198
+ const e = this.#n(), t = this.columns.length - 1;
199
+ let i = { startRow: 0, startCol: 0, endRow: this.rows.length - 1, endCol: t };
200
+ if (e && e.ranges.length > 0) {
201
+ const r = e.ranges[e.ranges.length - 1];
202
+ e.mode === "row" ? i = { startRow: r.from.row, startCol: 0, endRow: r.to.row, endCol: t } : i = {
203
+ startRow: r.from.row,
204
+ startCol: r.from.col,
205
+ endRow: r.to.row,
206
+ endCol: r.to.col
212
207
  };
213
208
  }
214
- const r = this.#i(n);
215
- return await te(r.text), this.lastCopied = { text: r.text, timestamp: Date.now() }, r.text;
209
+ const n = this.#i(i);
210
+ return await te(n.text), this.lastCopied = { text: n.text, timestamp: Date.now() }, n.text;
216
211
  }
217
212
  async copyRows(e) {
218
213
  if (e.length === 0) return "";
@@ -354,7 +349,7 @@ class hn extends A {
354
349
  return this.totalWidth;
355
350
  }
356
351
  }
357
- const ie = "@layer tbw-plugins{.tbw-context-menu{position:fixed;background:var(--tbw-context-menu-bg, var(--tbw-color-panel-bg));color:var(--tbw-context-menu-fg, var(--tbw-color-fg));border:1px solid var(--tbw-context-menu-border, var(--tbw-color-border));border-radius:var(--tbw-context-menu-radius, var(--tbw-border-radius));box-shadow:0 2px 10px var(--tbw-context-menu-shadow, var(--tbw-color-shadow));min-width:var(--tbw-context-menu-min-width, var(--tbw-menu-min-width));padding:var(--tbw-spacing-xs) 0;z-index:10000;font-size:var(--tbw-context-menu-font-size, var(--tbw-font-size-sm));font-family:var(--tbw-context-menu-font-family, var(--tbw-font-family))}.tbw-context-menu-item{display:flex;align-items:center;padding:var(--tbw-context-menu-item-padding, var(--tbw-menu-item-padding));cursor:pointer;gap:var(--tbw-context-menu-item-gap, var(--tbw-menu-item-gap))}.tbw-context-menu-item:hover:not(.disabled){background:var(--tbw-context-menu-hover, var(--tbw-color-row-hover))}.tbw-context-menu-item.disabled{opacity:.5;cursor:default}.tbw-context-menu-item.danger{color:var(--tbw-context-menu-danger, var(--tbw-color-danger))}.tbw-context-menu-icon{width:var(--tbw-context-menu-icon-size, var(--tbw-icon-size));text-align:center}.tbw-context-menu-label{flex:1}.tbw-context-menu-shortcut{color:var(--tbw-context-menu-muted, var(--tbw-color-fg-muted));font-size:var(--tbw-context-menu-shortcut-size, var(--tbw-font-size-xs))}.tbw-context-menu-arrow{font-size:var(--tbw-context-menu-arrow-size, var(--tbw-font-size-2xs));color:var(--tbw-context-menu-muted, var(--tbw-color-fg-muted))}.tbw-context-menu-separator{height:1px;background:var(--tbw-context-menu-border, var(--tbw-color-border));margin:var(--tbw-spacing-xs) 0}}";
352
+ const ie = "@layer tbw-plugins{.tbw-context-menu{position:fixed;background:var(--tbw-context-menu-bg, var(--tbw-color-panel-bg));color:var(--tbw-context-menu-fg, var(--tbw-color-fg));border:1px solid var(--tbw-context-menu-border, var(--tbw-color-border));border-radius:var(--tbw-context-menu-radius, var(--tbw-border-radius));box-shadow:var(--tbw-context-menu-shadow, 0 2px 10px var(--tbw-color-shadow));min-width:var(--tbw-context-menu-min-width, var(--tbw-menu-min-width));padding:var(--tbw-spacing-xs) 0;z-index:10000;font-size:var(--tbw-context-menu-font-size, var(--tbw-font-size-sm));font-family:var(--tbw-context-menu-font-family, var(--tbw-font-family))}.tbw-context-menu-item{display:flex;align-items:center;padding:var(--tbw-context-menu-item-padding, var(--tbw-menu-item-padding));cursor:pointer;gap:var(--tbw-context-menu-item-gap, var(--tbw-menu-item-gap))}.tbw-context-menu-item:hover:not(.disabled){background:var(--tbw-context-menu-hover, var(--tbw-color-row-hover))}.tbw-context-menu-item.disabled{opacity:.5;cursor:default}.tbw-context-menu-item.danger{color:var(--tbw-context-menu-danger, var(--tbw-color-danger))}.tbw-context-menu-icon{width:var(--tbw-context-menu-icon-size, var(--tbw-icon-size));text-align:center}.tbw-context-menu-label{flex:1}.tbw-context-menu-shortcut{color:var(--tbw-context-menu-muted, var(--tbw-color-fg-muted));font-size:var(--tbw-context-menu-shortcut-size, var(--tbw-font-size-xs))}.tbw-context-menu-arrow{font-size:var(--tbw-context-menu-arrow-size, var(--tbw-font-size-2xs));color:var(--tbw-context-menu-muted, var(--tbw-color-fg-muted))}.tbw-context-menu-separator{height:1px;background:var(--tbw-context-menu-border, var(--tbw-color-border));margin:var(--tbw-spacing-xs) 0}}";
358
353
  function ue(s, e) {
359
354
  return (typeof s == "function" ? s(e) : s).filter((i) => !(i.hidden === !0 || typeof i.hidden == "function" && i.hidden(e)));
360
355
  }
@@ -405,7 +400,7 @@ function ke(s, e, t) {
405
400
  let o = e, a = t;
406
401
  e + i.width > n && (o = e - i.width), t + i.height > r && (a = t - i.height), o = Math.max(0, o), a = Math.max(0, a), s.style.left = `${o}px`, s.style.top = `${a}px`, s.style.visibility = "visible";
407
402
  }
408
- let K = null, O = null, M = null, ne = 0;
403
+ let z = null, O = null, M = null, ne = 0;
409
404
  const re = [
410
405
  {
411
406
  id: "copy",
@@ -424,7 +419,7 @@ const re = [
424
419
  }
425
420
  }
426
421
  ];
427
- class Qe extends A {
422
+ class Je extends A {
428
423
  name = "contextMenu";
429
424
  get defaultConfig() {
430
425
  return {
@@ -479,25 +474,26 @@ class Qe extends A {
479
474
  copyGridStyles(e) {
480
475
  const t = this.gridElement;
481
476
  if (!t) return;
482
- const i = getComputedStyle(t), n = [];
483
- for (const r of Qe.CSS_VARS_TO_COPY) {
484
- const o = i.getPropertyValue(r).trim();
485
- o && n.push(`${r}: ${o}`);
477
+ const i = getComputedStyle(t), n = [], r = i.getPropertyValue("color-scheme").trim();
478
+ r && n.push(`color-scheme: ${r}`);
479
+ for (const o of Je.CSS_VARS_TO_COPY) {
480
+ const a = i.getPropertyValue(o).trim();
481
+ a && n.push(`${o}: ${a}`);
486
482
  }
487
483
  if (n.length > 0) {
488
- const r = e.getAttribute("style") || "";
489
- e.setAttribute("style", r + n.join("; ") + ";");
484
+ const o = e.getAttribute("style") || "";
485
+ e.setAttribute("style", o + n.join("; ") + ";");
490
486
  }
491
487
  }
492
488
  installGlobalHandlers() {
493
- !M && typeof document < "u" && typeof ie == "string" && ie && (M = document.createElement("style"), M.id = "tbw-context-menu-styles", M.textContent = ie, document.head.appendChild(M)), K || (K = () => {
489
+ !M && typeof document < "u" && typeof ie == "string" && ie && (M = document.createElement("style"), M.id = "tbw-context-menu-styles", M.textContent = ie, document.head.appendChild(M)), z || (z = () => {
494
490
  document.querySelectorAll(".tbw-context-menu").forEach((t) => t.remove());
495
- }, document.addEventListener("click", K)), O || (O = (e) => {
491
+ }, document.addEventListener("click", z)), O || (O = (e) => {
496
492
  e.key === "Escape" && document.querySelectorAll(".tbw-context-menu").forEach((i) => i.remove());
497
493
  }, document.addEventListener("keydown", O));
498
494
  }
499
495
  uninstallGlobalHandlers() {
500
- ne--, !(ne > 0) && (K && (document.removeEventListener("click", K), K = null), O && (document.removeEventListener("keydown", O), O = null), M && (M.remove(), M = null));
496
+ ne--, !(ne > 0) && (z && (document.removeEventListener("click", z), z = null), O && (document.removeEventListener("keydown", O), O = null), M && (M.remove(), M = null));
501
497
  }
502
498
  afterRender() {
503
499
  const e = this.gridElement;
@@ -702,6 +698,18 @@ class gn extends A {
702
698
  level: "column",
703
699
  description: 'the "editorParams" column property'
704
700
  }
701
+ ],
702
+ events: [
703
+ {
704
+ type: "cell-edit-committed",
705
+ description: "Emitted when a cell edit is committed (for plugin-to-plugin coordination)"
706
+ }
707
+ ],
708
+ queries: [
709
+ {
710
+ type: "isEditing",
711
+ description: "Returns whether any cell is currently being edited"
712
+ }
705
713
  ]
706
714
  };
707
715
  name = "editing";
@@ -749,6 +757,10 @@ class gn extends A {
749
757
  detach() {
750
758
  this.#e = -1, this.#t = -1, this.#o.clear(), this.#n.clear(), this.#i.clear(), super.detach();
751
759
  }
760
+ handleQuery(e) {
761
+ if (e.type === "isEditing")
762
+ return this.#e !== -1;
763
+ }
752
764
  onCellClick(e) {
753
765
  const t = this.grid, i = this.config.editOn ?? t.effectiveConfig?.editOn;
754
766
  if (i === !1 || i === "manual" || i !== "click" && i !== "dblclick") return !1;
@@ -989,7 +1001,12 @@ class gn extends A {
989
1001
  firstTimeForRow: d,
990
1002
  updateRow: c
991
1003
  })) return;
992
- n[r] = i, l && this.#n.add(l), this.#a();
1004
+ n[r] = i, l && this.#n.add(l), this.#a(), this.emitPluginEvent("cell-edit-committed", {
1005
+ rowIndex: e,
1006
+ field: r,
1007
+ oldValue: o,
1008
+ newValue: i
1009
+ });
993
1010
  const h = a.findRenderedRowElement?.(e);
994
1011
  h && (h.classList.add("changed"), at(h, "change"));
995
1012
  }
@@ -1291,10 +1308,10 @@ function qt(s) {
1291
1308
  totalHeight: e * n
1292
1309
  };
1293
1310
  }
1294
- function Ht(s, e) {
1311
+ function Kt(s, e) {
1295
1312
  return s <= e;
1296
1313
  }
1297
- function zt(s, e, t = !1) {
1314
+ function Ht(s, e, t = !1) {
1298
1315
  const i = s[e.field];
1299
1316
  if (e.operator === "blank")
1300
1317
  return i == null || i === "";
@@ -1333,8 +1350,8 @@ function zt(s, e, t = !1) {
1333
1350
  return !0;
1334
1351
  }
1335
1352
  }
1336
- function Kt(s, e, t = !1) {
1337
- return e.length ? s.filter((i) => e.every((n) => zt(i, n, t))) : s;
1353
+ function zt(s, e, t = !1) {
1354
+ return e.length ? s.filter((i) => e.every((n) => Ht(i, n, t))) : s;
1338
1355
  }
1339
1356
  function Ot(s) {
1340
1357
  return JSON.stringify(
@@ -1356,6 +1373,14 @@ function Le(s, e) {
1356
1373
  }
1357
1374
  const Gt = '@layer tbw-plugins{tbw-grid{.tbw-quick-filter-input{flex:1;max-width:300px;height:var(--tbw-input-height, 1.75rem);padding:var(--tbw-input-padding, 0 .5rem);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);background:var(--tbw-color-bg);color:var(--tbw-color-fg);font-size:var(--tbw-font-size-sm, .8125rem);&:focus{outline:none;border-color:var(--tbw-color-accent)}}.header-cell.filtered:before{content:"";position:absolute;top:var(--tbw-spacing-xs, .25rem);right:var(--tbw-spacing-xs, .25rem);width:var(--tbw-indicator-size, .375rem);height:var(--tbw-indicator-size, .375rem);background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border-radius:50%}.tbw-filter-btn{display:var(--tbw-filter-btn-display, inline-flex);visibility:var(--tbw-filter-btn-visibility, visible);align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;padding:2px;margin-left:var(--tbw-spacing-xs, .25rem);opacity:.4;transition:opacity .15s,visibility 0s,display 0s allow-discrete;color:inherit;vertical-align:middle;transition-behavior:allow-discrete;&:hover,&.active{opacity:1;visibility:visible;display:inline-flex}&.active{color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6))}}.header-row .cell:hover .tbw-filter-btn,.header-row .cell.filtered .tbw-filter-btn{display:inline-flex;visibility:visible}}}', Bt = "@layer tbw-plugins{.tbw-filter-panel{position:fixed;background:var(--tbw-filter-panel-bg, var(--tbw-color-panel-bg, light-dark(#eeeeee, #222222)));color:var(--tbw-filter-panel-fg, var(--tbw-color-fg, light-dark(#222222, #eeeeee)));border:1px solid var(--tbw-filter-panel-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-filter-panel-radius, var(--tbw-border-radius, .25rem));box-shadow:0 4px 16px var(--tbw-filter-panel-shadow, var(--tbw-color-shadow, light-dark(rgba(0, 0, 0, .1), rgba(0, 0, 0, .3))));padding:var(--tbw-panel-padding, var(--tbw-spacing-lg, .75rem));z-index:10000;min-width:200px;max-width:280px;max-height:350px;display:flex;flex-direction:column;font-family:var(--tbw-font-family, system-ui, sans-serif);font-size:var(--tbw-font-size, .8125rem);transform-origin:top center}.tbw-filter-panel.tbw-filter-panel-above{transform-origin:bottom center}.tbw-filter-panel.tbw-filter-panel-animated{animation:tbw-filter-panel-enter var(--tbw-animation-duration, .15s) var(--tbw-animation-easing, ease-out)}.tbw-filter-panel.tbw-filter-panel-above.tbw-filter-panel-animated{animation:tbw-filter-panel-enter-above var(--tbw-animation-duration, .15s) var(--tbw-animation-easing, ease-out)}@keyframes tbw-filter-panel-enter{0%{opacity:0;transform:scaleY(.3) translateY(-10px)}to{opacity:1;transform:scaleY(1) translateY(0)}}@keyframes tbw-filter-panel-enter-above{0%{opacity:0;transform:scaleY(.3) translateY(10px)}to{opacity:1;transform:scaleY(1) translateY(0)}}@supports (anchor-name: --test){.tbw-filter-panel{position-anchor:--tbw-filter-anchor;top:anchor(bottom);left:anchor(left);margin-top:4px;position-try-fallbacks:flip-inline,flip-block,flip-block flip-inline}}.tbw-filter-search{margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));min-height:var(--tbw-filter-item-height, 28px)}.tbw-filter-search-input{height:var(--tbw-filter-item-height, 28px);width:100%;padding:var(--tbw-filter-search-padding, var(--tbw-spacing-sm, .375rem) var(--tbw-spacing-md, .5rem));background:var(--tbw-filter-input-bg, var(--tbw-color-bg, transparent));color:inherit;border:1px solid var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-filter-input-radius, var(--tbw-border-radius, .25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-search-input:focus{outline:none;border-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6)) r g b / 15%)}.tbw-filter-actions{display:flex;padding:var(--tbw-button-padding-sm, .25rem .125rem);margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));border-bottom:1px solid var(--tbw-filter-divider, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));min-height:var(--tbw-filter-item-height, 28px)}.tbw-filter-action-btn{background:transparent;border:none;color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));cursor:pointer;font-size:var(--tbw-font-size-xs, .75rem);padding:2px 0}.tbw-filter-action-btn:hover{text-decoration:underline}.tbw-filter-values{flex:1;overflow-y:auto;margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));max-height:180px;position:relative}.tbw-filter-values-spacer{width:1px}.tbw-filter-values-content{position:absolute;top:0;left:0;right:0}.tbw-filter-value-item{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));padding:var(--tbw-button-padding-sm, .25rem .125rem);cursor:pointer;border-radius:3px;height:var(--tbw-filter-item-height, 28px)}.tbw-filter-value-item:hover{background:var(--tbw-filter-hover, var(--tbw-color-row-hover, light-dark(#f0f6ff, #1c1c1c)))}.tbw-filter-checkbox{margin:0;cursor:pointer;accent-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6))}.tbw-filter-no-match{color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)));padding:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem)) 0;text-align:center;font-style:italic}.tbw-filter-buttons{display:flex;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));padding-top:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));border-top:1px solid var(--tbw-filter-divider, var(--tbw-color-border, light-dark(#d0d0d4, #454545)))}.tbw-filter-apply-btn{flex:1;padding:var(--tbw-filter-btn-padding, var(--tbw-button-padding, .375rem .75rem));background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));color:var(--tbw-filter-accent-fg, var(--tbw-color-accent-fg, light-dark(#ffffff, #000000)));border:none;border-radius:var(--tbw-border-radius, .25rem);cursor:pointer;font-size:var(--tbw-font-size-sm, .8125rem);font-weight:var(--tbw-filter-btn-font-weight, 500);min-height:var(--tbw-filter-btn-min-height, auto)}.tbw-filter-apply-btn:hover{filter:brightness(.9)}.tbw-filter-clear-btn{flex:1;padding:var(--tbw-filter-btn-padding, var(--tbw-button-padding, .375rem .75rem));background:transparent;color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)));border:1px solid var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-border-radius, .25rem);cursor:pointer;font-size:var(--tbw-font-size-sm, .8125rem);font-weight:var(--tbw-filter-btn-font-weight, 500);min-height:var(--tbw-filter-btn-min-height, auto)}.tbw-filter-clear-btn:hover{background:var(--tbw-filter-hover, var(--tbw-color-row-hover, light-dark(#f0f6ff, #1c1c1c)))}.tbw-filter-range-inputs,.tbw-filter-date-range{display:flex;align-items:flex-end;gap:var(--tbw-spacing-sm, .375rem);margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-filter-range-group,.tbw-filter-date-group{display:flex;flex-direction:column;gap:var(--tbw-spacing-xs, .25rem);flex:1}.tbw-filter-range-label{font-size:var(--tbw-font-size-xs, .75rem);color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)))}.tbw-filter-range-input,.tbw-filter-date-input{width:100%;height:var(--tbw-filter-item-height, 28px);padding:var(--tbw-spacing-xs, .25rem) var(--tbw-spacing-sm, .375rem);background:var(--tbw-filter-input-bg, var(--tbw-color-bg, transparent));color:inherit;border:1px solid var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-filter-input-radius, var(--tbw-border-radius, .25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-range-input:focus,.tbw-filter-date-input:focus{outline:none;border-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6)) r g b / 15%)}.tbw-filter-range-separator{color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)));padding-bottom:var(--tbw-spacing-xs, .25rem)}.tbw-filter-range-slider{position:relative;height:24px;margin:var(--tbw-spacing-md, .5rem) 0 var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-filter-range-track{position:absolute;top:50%;left:0;right:0;height:4px;background:var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:2px;transform:translateY(-50%)}.tbw-filter-range-fill{position:absolute;top:50%;height:4px;background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border-radius:2px;transform:translateY(-50%)}.tbw-filter-range-thumb{position:absolute;top:0;width:100%;height:100%;background:none;pointer-events:none;-webkit-appearance:none;appearance:none}.tbw-filter-range-thumb::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border:2px solid var(--tbw-filter-panel-bg, var(--tbw-color-panel-bg, light-dark(#eeeeee, #222222)));border-radius:50%;cursor:pointer;pointer-events:all;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-moz-range-thumb{width:16px;height:16px;background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border:2px solid var(--tbw-filter-panel-bg, var(--tbw-color-panel-bg, light-dark(#eeeeee, #222222)));border-radius:50%;cursor:pointer;pointer-events:all;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-webkit-slider-thumb:hover{transform:scale(1.1)}.tbw-filter-range-thumb::-moz-range-thumb:hover{transform:scale(1.1)}}";
1358
1375
  class N extends A {
1376
+ static manifest = {
1377
+ events: [
1378
+ {
1379
+ type: "filter-applied",
1380
+ description: "Emitted when filter criteria change. Subscribers can react to row visibility changes."
1381
+ }
1382
+ ]
1383
+ };
1359
1384
  name = "filtering";
1360
1385
  styles = Gt;
1361
1386
  get defaultConfig() {
@@ -1413,7 +1438,7 @@ class N extends A {
1413
1438
  const i = Ot(t);
1414
1439
  if (this.cacheKey === i && this.cachedResult)
1415
1440
  return this.cachedResult;
1416
- const n = Kt([...e], t, this.config.caseSensitive);
1441
+ const n = zt([...e], t, this.config.caseSensitive);
1417
1442
  return this.cachedResult = n, this.cacheKey = i, n;
1418
1443
  }
1419
1444
  afterRender() {
@@ -1455,7 +1480,7 @@ class N extends A {
1455
1480
  this.cachedResult = null, this.cacheKey = null, this.emit("filter-change", {
1456
1481
  filters: [...this.filters.values()],
1457
1482
  filteredRowCount: 0
1458
- }), this.requestRender();
1483
+ }), this.emitPluginEvent("filter-applied", { filters: [...this.filters.values()] }), this.requestRender();
1459
1484
  }
1460
1485
  getFilter(e) {
1461
1486
  return this.filters.get(e);
@@ -1473,7 +1498,7 @@ class N extends A {
1473
1498
  this.cachedResult = null, this.cacheKey = null, this.emit("filter-change", {
1474
1499
  filters: [...this.filters.values()],
1475
1500
  filteredRowCount: 0
1476
- }), this.requestRender();
1501
+ }), this.emitPluginEvent("filter-applied", { filters: [...this.filters.values()] }), this.requestRender();
1477
1502
  }
1478
1503
  clearAllFilters() {
1479
1504
  this.filters.clear(), this.excludedValues.clear(), this.searchText.clear(), this.applyFiltersInternal();
@@ -1632,11 +1657,11 @@ class N extends A {
1632
1657
  L.type = "checkbox", L.className = "tbw-filter-checkbox", L.checked = b.get(m) ?? !0, L.dataset.value = m, L.addEventListener("change", () => {
1633
1658
  b.set(m, L.checked), g();
1634
1659
  });
1635
- const H = document.createElement("span");
1636
- return H.textContent = T, y.appendChild(L), y.appendChild(H), y;
1660
+ const K = document.createElement("span");
1661
+ return K.textContent = T, y.appendChild(L), y.appendChild(K), y;
1637
1662
  }, _ = () => {
1638
1663
  const x = v.length, S = f.clientHeight, T = f.scrollTop;
1639
- if (p.style.height = `${x * o}px`, Ht(x, N.LIST_BYPASS_THRESHOLD / 3)) {
1664
+ if (p.style.height = `${x * o}px`, Kt(x, N.LIST_BYPASS_THRESHOLD / 3)) {
1640
1665
  w.innerHTML = "", w.style.transform = "translateY(0px)", v.forEach((y, L) => {
1641
1666
  w.appendChild(C(y, L));
1642
1667
  });
@@ -1699,13 +1724,13 @@ class N extends A {
1699
1724
  }), F.appendChild(R), e.appendChild(F);
1700
1725
  }
1701
1726
  renderNumberFilterPanel(e, t, i) {
1702
- const { field: n, column: r } = t, o = r.filterParams, a = r.editorParams, l = (k, z) => {
1727
+ const { field: n, column: r } = t, o = r.filterParams, a = r.editorParams, l = (k, H) => {
1703
1728
  if (typeof k == "number") return k;
1704
1729
  if (typeof k == "string") {
1705
1730
  const W = parseFloat(k);
1706
- return isNaN(W) ? z : W;
1731
+ return isNaN(W) ? H : W;
1707
1732
  }
1708
- return z;
1733
+ return H;
1709
1734
  }, d = i.filter((k) => typeof k == "number" && !isNaN(k)), c = d.length > 0 ? Math.min(...d) : 0, u = d.length > 0 ? Math.max(...d) : 100, h = l(o?.min ?? a?.min, c), g = l(o?.max ?? a?.max, u), f = o?.step ?? a?.step ?? 1, p = this.filters.get(n);
1710
1735
  let w = h, b = g;
1711
1736
  p?.operator === "between" ? (w = l(p.value, h), b = l(p.valueTo, g)) : p?.operator === "greaterThanOrEqual" ? w = l(p.value, h) : p?.operator === "lessThanOrEqual" && (b = l(p.value, g));
@@ -1736,7 +1761,7 @@ class N extends A {
1736
1761
  const y = document.createElement("input");
1737
1762
  y.type = "range", y.className = "tbw-filter-range-thumb tbw-filter-range-thumb-max", y.min = String(h), y.max = String(g), y.step = String(f), y.value = String(b), x.appendChild(S), x.appendChild(T), x.appendChild(m), x.appendChild(y), e.appendChild(x);
1738
1763
  const L = () => {
1739
- const k = parseFloat(m.value), z = parseFloat(y.value), W = g - h, be = (k - h) / W * 100, ot = (z - h) / W * 100;
1764
+ const k = parseFloat(m.value), H = parseFloat(y.value), W = g - h, be = (k - h) / W * 100, ot = (H - h) / W * 100;
1740
1765
  T.style.left = `${be}%`, T.style.width = `${ot - be}%`;
1741
1766
  };
1742
1767
  m.addEventListener("input", () => {
@@ -1752,17 +1777,17 @@ class N extends A {
1752
1777
  let k = parseFloat(R.value) || g;
1753
1778
  k = Math.min(g, Math.max(k, parseFloat(E.value))), y.value = String(k), L();
1754
1779
  }), L();
1755
- const H = document.createElement("div");
1756
- H.className = "tbw-filter-buttons";
1780
+ const K = document.createElement("div");
1781
+ K.className = "tbw-filter-buttons";
1757
1782
  const Y = document.createElement("button");
1758
1783
  Y.className = "tbw-filter-apply-btn", Y.textContent = "Apply", Y.addEventListener("click", () => {
1759
- const k = parseFloat(E.value), z = parseFloat(R.value);
1760
- t.applyTextFilter("between", k, z);
1761
- }), H.appendChild(Y);
1784
+ const k = parseFloat(E.value), H = parseFloat(R.value);
1785
+ t.applyTextFilter("between", k, H);
1786
+ }), K.appendChild(Y);
1762
1787
  const X = document.createElement("button");
1763
1788
  X.className = "tbw-filter-clear-btn", X.textContent = "Clear Filter", X.addEventListener("click", () => {
1764
1789
  t.clearFilter();
1765
- }), H.appendChild(X), e.appendChild(H);
1790
+ }), K.appendChild(X), e.appendChild(K);
1766
1791
  }
1767
1792
  renderDateFilterPanel(e, t, i) {
1768
1793
  const { field: n, column: r } = t, o = r.filterParams, a = r.editorParams, l = i.filter((m) => m instanceof Date || typeof m == "string" && !isNaN(Date.parse(m))).map((m) => m instanceof Date ? m : new Date(m)).filter((m) => !isNaN(m.getTime())), d = l.length > 0 ? new Date(Math.min(...l.map((m) => m.getTime()))) : null, c = l.length > 0 ? new Date(Math.max(...l.map((m) => m.getTime()))) : null, u = (m) => m ? m.toISOString().split("T")[0] : "", h = (m) => m ? typeof m == "string" ? m : typeof m == "number" ? u(new Date(m)) : "" : "", g = h(o?.min) || h(a?.min) || u(d), f = h(o?.max) || h(a?.max) || u(c), p = this.filters.get(n);
@@ -1823,7 +1848,7 @@ class N extends A {
1823
1848
  t.removeAttribute("aria-busy"), this.cachedResult = r, this.grid.rows = r, this.emit("filter-change", {
1824
1849
  filters: e,
1825
1850
  filteredRowCount: r.length
1826
- }), this.requestRender();
1851
+ }), this.emitPluginEvent("filter-applied", { filters: e }), this.requestRender();
1827
1852
  };
1828
1853
  i && typeof i.then == "function" ? i.then(n) : n(i);
1829
1854
  return;
@@ -1831,7 +1856,7 @@ class N extends A {
1831
1856
  this.emit("filter-change", {
1832
1857
  filters: e,
1833
1858
  filteredRowCount: 0
1834
- }), this.requestRender();
1859
+ }), this.emitPluginEvent("filter-applied", { filters: e }), this.requestRender();
1835
1860
  }
1836
1861
  getColumnState(e) {
1837
1862
  const t = this.filters.get(e);
@@ -2085,15 +2110,27 @@ function Zt(s, e) {
2085
2110
  }
2086
2111
  return typeof s == "string" ? /* @__PURE__ */ new Set([s]) : Array.isArray(s) ? new Set(s) : /* @__PURE__ */ new Set();
2087
2112
  }
2088
- function Jt(s) {
2113
+ function Qt(s) {
2089
2114
  return s.filter((e) => e.kind === "group").map((e) => e.key);
2090
2115
  }
2091
- function Qt(s) {
2116
+ function Jt(s) {
2092
2117
  return s.kind !== "group" ? 0 : s.rows.length;
2093
2118
  }
2094
2119
  const ei = "@layer tbw-plugins{.group-row{display:grid;grid-template-columns:var(--tbw-column-template);background:var(--tbw-grouping-rows-bg, var(--tbw-color-panel-bg));font-weight:500;border-bottom:var(--tbw-row-divider);min-height:var(--tbw-row-height)}.group-row .cell{display:flex;align-items:center;padding:var(--tbw-cell-padding, .125rem .5rem)}.group-row:hover{background:var(--tbw-grouping-rows-bg-hover, var(--tbw-color-row-hover))}.group-toggle{cursor:pointer;user-select:none;display:inline-flex;align-items:center;justify-content:center;width:var(--tbw-toggle-size, 1.25rem);height:var(--tbw-toggle-size, 1.25rem);margin-right:.25rem;background:none;border:0;font:inherit}.group-toggle:hover{background:var(--tbw-grouping-rows-toggle-hover, var(--tbw-color-row-hover));border-radius:var(--tbw-border-radius, .125rem)}.group-label{display:inline-flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.group-count{color:var(--tbw-grouping-rows-count-color, var(--tbw-color-fg-muted));font-size:var(--tbw-font-size-xs, .85em);font-weight:400}.group-aggregates{display:inline-flex;align-items:center;gap:var(--tbw-spacing-lg, 1rem);margin-left:var(--tbw-spacing-lg, 1rem);font-weight:400;font-size:var(--tbw-font-size-sm, .875em);color:var(--tbw-grouping-rows-aggregate-color, var(--tbw-color-fg-muted))}.group-aggregate{white-space:nowrap}.group-row{padding-left:calc(var(--tbw-group-depth, 0) * var(--tbw-group-indent-width, 1.25em))}.data-grid-row.tbw-group-slide-in{animation:tbw-group-slide-in var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}@keyframes tbw-group-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.data-grid-row.tbw-group-fade-in{animation:tbw-group-fade-in var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}@keyframes tbw-group-fade-in{0%{opacity:0}to{opacity:1}}}";
2095
2120
  class mn extends A {
2096
2121
  static manifest = {
2122
+ events: [
2123
+ {
2124
+ type: "grouping-state-change",
2125
+ description: "Emitted when groups are expanded/collapsed. Subscribers can react to row visibility changes."
2126
+ }
2127
+ ],
2128
+ queries: [
2129
+ {
2130
+ type: "canMoveRow",
2131
+ description: "Returns false for group header rows (cannot be reordered)"
2132
+ }
2133
+ ],
2097
2134
  configRules: [
2098
2135
  {
2099
2136
  id: "groupingRows/accordion-defaultExpanded",
@@ -2130,6 +2167,13 @@ class mn extends A {
2130
2167
  detach() {
2131
2168
  this.expandedKeys.clear(), this.flattenedRows = [], this.isActive = !1, this.previousVisibleKeys.clear(), this.keysToAnimate.clear(), this.hasAppliedDefaultExpanded = !1;
2132
2169
  }
2170
+ handleQuery(e) {
2171
+ if (e.type === "canMoveRow") {
2172
+ const t = e.context;
2173
+ if (t && t.__isGroupRow === !0)
2174
+ return !1;
2175
+ }
2176
+ }
2133
2177
  static detect(e, t) {
2134
2178
  return typeof t?.groupOn == "function" || typeof t?.enableRowGrouping == "boolean";
2135
2179
  }
@@ -2146,7 +2190,7 @@ class mn extends A {
2146
2190
  return this.isActive = !1, this.flattenedRows = [], [...e];
2147
2191
  let n;
2148
2192
  if (!this.hasAppliedDefaultExpanded && this.expandedKeys.size === 0 && t.defaultExpanded !== !1) {
2149
- const a = Jt(i);
2193
+ const a = Qt(i);
2150
2194
  n = Zt(t.defaultExpanded ?? !1, a), n.size > 0 && (this.expandedKeys = new Set(n), this.hasAppliedDefaultExpanded = !0);
2151
2195
  }
2152
2196
  const r = Ie({
@@ -2169,7 +2213,7 @@ class mn extends A {
2169
2213
  __groupDepth: a.depth,
2170
2214
  __groupRows: a.rows,
2171
2215
  __groupExpanded: a.expanded,
2172
- __groupRowCount: Qt(a)
2216
+ __groupRowCount: Jt(a)
2173
2217
  } : a.row);
2174
2218
  }
2175
2219
  onCellClick(e) {
@@ -2287,10 +2331,10 @@ class mn extends A {
2287
2331
  });
2288
2332
  }
2289
2333
  expandAll() {
2290
- this.expandedKeys = Yt(this.flattenedRows), this.requestRender();
2334
+ this.expandedKeys = Yt(this.flattenedRows), this.emitPluginEvent("grouping-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
2291
2335
  }
2292
2336
  collapseAll() {
2293
- this.expandedKeys = Xt(), this.requestRender();
2337
+ this.expandedKeys = Xt(), this.emitPluginEvent("grouping-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
2294
2338
  }
2295
2339
  toggle(e) {
2296
2340
  const t = !this.expandedKeys.has(e), i = this.config, n = this.flattenedRows.find((r) => r.kind === "group" && r.key === e);
@@ -2311,6 +2355,8 @@ class mn extends A {
2311
2355
  expanded: this.expandedKeys.has(e),
2312
2356
  value: n?.value,
2313
2357
  depth: n?.depth ?? 0
2358
+ }), this.emitPluginEvent("grouping-state-change", {
2359
+ expandedKeys: [...this.expandedKeys]
2314
2360
  }), this.requestRender();
2315
2361
  }
2316
2362
  isExpanded(e) {
@@ -2729,6 +2775,7 @@ function qe(s) {
2729
2775
  t.classList.remove("sticky-left", "sticky-right"), t.style.position = "", t.style.left = "", t.style.right = "";
2730
2776
  });
2731
2777
  }
2778
+ const Ke = "canMoveColumn";
2732
2779
  class bn extends A {
2733
2780
  static manifest = {
2734
2781
  ownedProperties: [
@@ -2738,6 +2785,16 @@ class bn extends A {
2738
2785
  description: 'the "sticky" column property',
2739
2786
  isUsed: (e) => e === "left" || e === "right"
2740
2787
  }
2788
+ ],
2789
+ queries: [
2790
+ {
2791
+ type: Ke,
2792
+ description: "Prevents pinned (sticky) columns from being moved/reordered"
2793
+ },
2794
+ {
2795
+ type: "getStickyOffsets",
2796
+ description: "Returns the sticky offsets for left/right pinned columns"
2797
+ }
2741
2798
  ]
2742
2799
  };
2743
2800
  name = "pinnedColumns";
@@ -2769,15 +2826,20 @@ class bn extends A {
2769
2826
  Ne(e, t);
2770
2827
  });
2771
2828
  }
2772
- onPluginQuery(e) {
2829
+ handleQuery(e) {
2773
2830
  switch (e.type) {
2774
- case Ze.CAN_MOVE_COLUMN: {
2831
+ case Ke: {
2775
2832
  const t = e.context, i = t.sticky;
2776
2833
  if (i === "left" || i === "right")
2777
2834
  return !1;
2778
2835
  const n = t.meta?.sticky;
2779
2836
  return n === "left" || n === "right" ? !1 : void 0;
2780
2837
  }
2838
+ case "getStickyOffsets":
2839
+ return {
2840
+ left: Object.fromEntries(this.leftOffsets),
2841
+ right: Object.fromEntries(this.rightOffsets)
2842
+ };
2781
2843
  default:
2782
2844
  return;
2783
2845
  }
@@ -2896,7 +2958,7 @@ function gi(s, e) {
2896
2958
  const i = s.render(e);
2897
2959
  return typeof i == "string" ? t.innerHTML = i : t.appendChild(i), t;
2898
2960
  }
2899
- function Ke(s, e, t, i, n) {
2961
+ function Oe(s, e, t, i, n) {
2900
2962
  return {
2901
2963
  totalRows: s.length,
2902
2964
  filteredRows: n?.cachedResult?.length ?? s.length,
@@ -2931,7 +2993,7 @@ class vn extends A {
2931
2993
  const t = e.querySelector(".tbw-scroll-area") ?? e.querySelector(".tbw-grid-content") ?? e.children[0];
2932
2994
  if (!t) return;
2933
2995
  this.footerWrapper && !t.contains(this.footerWrapper) && (this.footerWrapper = null, this.bottomAggregationContainer = null, this.infoBarElement = null), this.topAggregationContainer && !t.contains(this.topAggregationContainer) && (this.topAggregationContainer = null), this.infoBarElement && !t.contains(this.infoBarElement) && (this.infoBarElement = null);
2934
- const i = this.getSelectionState(), n = this.getFilterState(), r = Ke(
2996
+ const i = this.getSelectionState(), n = this.getFilterState(), r = Oe(
2935
2997
  this.rows,
2936
2998
  this.columns,
2937
2999
  this.grid,
@@ -2992,7 +3054,7 @@ class vn extends A {
2992
3054
  }
2993
3055
  getContext() {
2994
3056
  const e = this.getSelectionState(), t = this.getFilterState();
2995
- return Ke(
3057
+ return Oe(
2996
3058
  this.rows,
2997
3059
  this.columns,
2998
3060
  this.grid,
@@ -3058,7 +3120,7 @@ function vi(s, e) {
3058
3120
  function tt(s, e, t, i, n, r, o) {
3059
3121
  const a = [];
3060
3122
  if (e.length === 0) {
3061
- const h = Oe(s, t, i, n), g = Ge(h);
3123
+ const h = Ge(s, t, i, n), g = Be(h);
3062
3124
  return a.push({
3063
3125
  rowKey: o || "all",
3064
3126
  rowLabel: o || "All",
@@ -3071,7 +3133,7 @@ function tt(s, e, t, i, n, r, o) {
3071
3133
  }
3072
3134
  const l = e[0], d = e.slice(1), c = d.length > 0, u = vi(s, l);
3073
3135
  for (const [h, g] of u) {
3074
- const f = o ? `${o}|${h}` : h, p = Oe(g, t, i, n), w = Ge(p);
3136
+ const f = o ? `${o}|${h}` : h, p = Ge(g, t, i, n), w = Be(p);
3075
3137
  let b;
3076
3138
  c && (b = tt(
3077
3139
  g,
@@ -3094,7 +3156,7 @@ function tt(s, e, t, i, n, r, o) {
3094
3156
  }
3095
3157
  return a;
3096
3158
  }
3097
- function Oe(s, e, t, i) {
3159
+ function Ge(s, e, t, i) {
3098
3160
  const n = {};
3099
3161
  for (const r of t)
3100
3162
  for (const o of i) {
@@ -3103,7 +3165,7 @@ function Oe(s, e, t, i) {
3103
3165
  }
3104
3166
  return n;
3105
3167
  }
3106
- function Ge(s) {
3168
+ function Be(s) {
3107
3169
  let e = 0;
3108
3170
  for (const t of Object.values(s))
3109
3171
  e += t ?? 0;
@@ -3150,7 +3212,7 @@ function Ci(s) {
3150
3212
  const Ei = ["sum", "avg", "count", "min", "max", "first", "last"];
3151
3213
  function Ri(s, e, t, i) {
3152
3214
  const n = new AbortController(), r = { config: e, callbacks: i, signal: n.signal }, o = document.createElement("div");
3153
- return o.className = "tbw-pivot-panel", o.appendChild(j("Options", () => Ti(t, r))), o.appendChild(j("Row Groups", () => Be("rowGroups", r))), o.appendChild(j("Column Groups", () => Be("columnGroups", r))), o.appendChild(j("Values", () => ki(r))), o.appendChild(j("Available Fields", () => _i(r))), s.appendChild(o), () => {
3215
+ return o.className = "tbw-pivot-panel", o.appendChild(j("Options", () => Ti(t, r))), o.appendChild(j("Row Groups", () => Ve("rowGroups", r))), o.appendChild(j("Column Groups", () => Ve("columnGroups", r))), o.appendChild(j("Values", () => ki(r))), o.appendChild(j("Available Fields", () => _i(r))), s.appendChild(o), () => {
3154
3216
  n.abort(), o.remove();
3155
3217
  };
3156
3218
  }
@@ -3162,7 +3224,7 @@ function j(s, e) {
3162
3224
  const n = document.createElement("div");
3163
3225
  return n.className = "tbw-pivot-section-content", n.appendChild(e()), t.appendChild(i), t.appendChild(n), t;
3164
3226
  }
3165
- function Be(s, e) {
3227
+ function Ve(s, e) {
3166
3228
  const { config: t, callbacks: i, signal: n } = e, r = document.createElement("div");
3167
3229
  r.className = "tbw-pivot-drop-zone", r.setAttribute("data-zone", s);
3168
3230
  const o = s === "rowGroups" ? t.rowGroupFields ?? [] : t.columnGroupFields ?? [];
@@ -3688,10 +3750,10 @@ class G extends A {
3688
3750
  n >= 0 && (i[n] = { ...i[n], aggFunc: t }, this.config.valueFields = [...i]), this.isActive && this.refresh();
3689
3751
  }
3690
3752
  }
3691
- const J = "tbw-print-isolation-style";
3753
+ const Q = "tbw-print-isolation-style";
3692
3754
  function Di(s, e) {
3693
3755
  const t = document.createElement("style");
3694
- return t.id = J, t.textContent = `
3756
+ return t.id = Q, t.textContent = `
3695
3757
  /* Print isolation: hide everything except the target grid */
3696
3758
  @media print {
3697
3759
  /* Hide all body children by default */
@@ -3767,14 +3829,14 @@ async function Mi(s, e = {}) {
3767
3829
  const { orientation: t = "landscape" } = e, i = s.id;
3768
3830
  document.querySelectorAll(`#${CSS.escape(i)}`).length > 1 && console.warn(
3769
3831
  `[tbw-grid:print] Multiple elements found with id="${i}". Print isolation may not work correctly. Ensure each grid has a unique ID.`
3770
- ), document.getElementById(J)?.remove();
3832
+ ), document.getElementById(Q)?.remove();
3771
3833
  const r = Di(i, t);
3772
3834
  return document.head.appendChild(r), new Promise((o) => {
3773
3835
  const a = () => {
3774
- window.removeEventListener("afterprint", a), document.getElementById(J)?.remove(), o();
3836
+ window.removeEventListener("afterprint", a), document.getElementById(Q)?.remove(), o();
3775
3837
  };
3776
3838
  window.addEventListener("afterprint", a), window.print(), setTimeout(() => {
3777
- window.removeEventListener("afterprint", a), document.getElementById(J)?.remove(), o();
3839
+ window.removeEventListener("afterprint", a), document.getElementById(Q)?.remove(), o();
3778
3840
  }, 5e3);
3779
3841
  });
3780
3842
  }
@@ -3880,7 +3942,7 @@ Click OK to continue, or Cancel to abort.`
3880
3942
  window.removeEventListener("afterprint", t), e();
3881
3943
  };
3882
3944
  window.addEventListener("afterprint", t), window.print(), setTimeout(() => {
3883
- window.removeEventListener("afterprint", t), e();
3945
+ typeof window < "u" && window.removeEventListener("afterprint", t), e();
3884
3946
  }, 1e3);
3885
3947
  });
3886
3948
  }
@@ -3935,19 +3997,19 @@ Click OK to continue, or Cancel to abort.`
3935
3997
  });
3936
3998
  }
3937
3999
  }
3938
- function Hi(s) {
4000
+ function Ki(s) {
3939
4001
  const e = s.meta ?? {};
3940
4002
  return e.lockPosition !== !0 && e.suppressMovable !== !0;
3941
4003
  }
3942
- function Ve(s, e, t) {
4004
+ function We(s, e, t) {
3943
4005
  if (e === t || e < 0 || e >= s.length || t < 0 || t > s.length) return s;
3944
4006
  const i = [...s], [n] = i.splice(e, 1);
3945
4007
  return i.splice(t, 0, n), i;
3946
4008
  }
3947
- const zi = '@layer tbw-plugins{.header-row>.cell[draggable=true]{cursor:grab;position:relative}.header-row>.cell.dragging{opacity:.5;cursor:grabbing}.header-row>.cell.drop-before:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--tbw-reorder-indicator, var(--tbw-color-accent));z-index:1}.header-row>.cell.drop-after:after{content:"";position:absolute;right:0;top:0;bottom:0;width:2px;background:var(--tbw-reorder-indicator, var(--tbw-color-accent));z-index:1}.cell.flip-animating{transition:transform var(--tbw-animation-duration, .2s) ease-out;will-change:transform;z-index:1}@keyframes reorder-fade-in{0%{opacity:0}to{opacity:1}}.cell.fade-animating{animation:reorder-fade-in var(--tbw-animation-duration, .2s) ease-out backwards}}';
4009
+ const Hi = '@layer tbw-plugins{.header-row>.cell[draggable=true]{cursor:grab;position:relative}.header-row>.cell.dragging{opacity:.5;cursor:grabbing}.header-row>.cell.drop-before:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--tbw-reorder-indicator, var(--tbw-color-accent));z-index:1}.header-row>.cell.drop-after:after{content:"";position:absolute;right:0;top:0;bottom:0;width:2px;background:var(--tbw-reorder-indicator, var(--tbw-color-accent));z-index:1}.cell.flip-animating{transition:transform var(--tbw-animation-duration, .2s) ease-out;will-change:transform;z-index:1}@keyframes reorder-fade-in{0%{opacity:0}to{opacity:1}}.cell.fade-animating{animation:reorder-fade-in var(--tbw-animation-duration, .2s) ease-out backwards}}';
3948
4010
  class xn extends A {
3949
4011
  name = "reorder";
3950
- styles = zi;
4012
+ styles = Hi;
3951
4013
  get defaultConfig() {
3952
4014
  return {
3953
4015
  animation: "flip"
@@ -3964,10 +4026,7 @@ class xn extends A {
3964
4026
  draggedIndex = null;
3965
4027
  dropIndex = null;
3966
4028
  canMoveColumnWithPlugins(e) {
3967
- return !e || !Hi(e) ? !1 : !this.grid.queryPlugins({
3968
- type: Ze.CAN_MOVE_COLUMN,
3969
- context: e
3970
- }).includes(!1);
4029
+ return !e || !Ki(e) ? !1 : !this.grid.query("canMoveColumn", e).includes(!1);
3971
4030
  }
3972
4031
  clearDragClasses() {
3973
4032
  this.gridElement?.querySelectorAll(".header-row > .cell").forEach((e) => {
@@ -4014,7 +4073,7 @@ class xn extends A {
4014
4073
  const l = this.draggedField, d = this.draggedIndex, c = this.dropIndex;
4015
4074
  if (!this.isDragging || l === null || d === null || c === null)
4016
4075
  return;
4017
- const u = c > d ? c - 1 : c, h = this.getColumnOrder(), g = Ve(h, d, u), f = {
4076
+ const u = c > d ? c - 1 : c, h = this.getColumnOrder(), g = We(h, d, u), f = {
4018
4077
  field: l,
4019
4078
  fromIndex: d,
4020
4079
  toIndex: u,
@@ -4045,7 +4104,7 @@ class xn extends A {
4045
4104
  moveColumn(e, t) {
4046
4105
  const i = this.getColumnOrder(), n = i.indexOf(e);
4047
4106
  if (n === -1) return;
4048
- const r = Ve(i, n, t);
4107
+ const r = We(i, n, t);
4049
4108
  this.emitCancelable("column-move", {
4050
4109
  field: e,
4051
4110
  fromIndex: n,
@@ -4140,17 +4199,23 @@ class xn extends A {
4140
4199
  this.grid.requestStateChange?.();
4141
4200
  }
4142
4201
  }
4143
- const Ki = 'tbw-grid[data-responsive-animate]{.data-grid-row,.data-grid-row>.cell{transition:opacity var(--tbw-responsive-duration, .2s) ease-out,transform var(--tbw-responsive-duration, .2s) ease-out}}tbw-grid[data-responsive][data-responsive-animate]{.data-grid-row{animation:responsive-card-enter var(--tbw-responsive-duration, .2s) ease-out}}@keyframes responsive-card-enter{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}tbw-grid[data-responsive]{.header{display:none!important}.footer-row{display:none}.tbw-scroll-area{overflow-x:hidden;min-width:0!important}.rows-body-wrapper{min-width:0!important}.data-grid-row:not(.group-row){display:block!important;grid-template-columns:none!important;padding:var(--tbw-cell-padding);padding-left:var(--tbw-spacing-xl);border-bottom:1px solid var(--tbw-color-border);min-height:auto!important;height:auto!important;contain:none!important;content-visibility:visible!important;background:var(--tbw-color-bg);position:relative;&:nth-child(2n){background:var(--tbw-color-row-alt)}&:hover{background:var(--tbw-color-row-hover)}&[aria-selected=true]{background:var(--tbw-color-selection);&:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--tbw-color-accent)}}}.data-grid-row:not(.group-row)>.cell{display:flex!important;justify-content:space-between;align-items:center;padding:var(--tbw-spacing-xs) var(--tbw-spacing-md);width:100%!important;min-width:0!important;min-height:auto!important;height:auto!important;line-height:1.5!important;position:static!important;left:auto!important;right:auto!important;border:none!important;border-bottom:none!important;border-right:none!important;background:transparent!important;white-space:normal!important;overflow:visible!important;&:before{content:attr(data-header) ": ";font-weight:600;color:var(--tbw-color-header-fg);flex-shrink:0;margin-right:var(--tbw-spacing-md);min-width:100px}&:after{content:none}}.cell[data-utility]{display:none!important}}tbw-grid[data-responsive] .cell[data-responsive-hidden]{display:none!important}tbw-grid[data-responsive] .cell[data-responsive-value-only]{&:before{display:none!important}justify-content:flex-start!important;font-weight:500}tbw-grid:not([data-responsive]) .cell[data-responsive-hidden]{display:none!important}tbw-grid[data-responsive]{.tbw-footer,.tbw-pinned-rows,.tbw-aggregation-rows{display:none!important}.tbw-pinned-rows,.tbw-aggregation-rows,.tbw-aggregation-row{min-width:0!important}}tbw-grid[data-responsive] .data-grid-row.responsive-card{display:block!important;padding:var(--tbw-cell-padding);border-bottom:1px solid var(--tbw-color-border);>*{width:100%}.cell:before{display:none}}';
4202
+ const zi = 'tbw-grid[data-responsive-animate]{.data-grid-row,.data-grid-row>.cell{transition:opacity var(--tbw-responsive-duration, .2s) ease-out,transform var(--tbw-responsive-duration, .2s) ease-out}}tbw-grid[data-responsive][data-responsive-animate]{.data-grid-row{animation:responsive-card-enter var(--tbw-responsive-duration, .2s) ease-out}}@keyframes responsive-card-enter{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}tbw-grid[data-responsive]{.header{display:none!important}.footer-row{display:none}.tbw-scroll-area{overflow-x:hidden;min-width:0!important}.rows-body-wrapper{min-width:0!important}.data-grid-row:not(.group-row){display:block!important;grid-template-columns:none!important;padding:var(--tbw-cell-padding);padding-left:var(--tbw-spacing-xl);border-bottom:1px solid var(--tbw-color-border);min-height:auto!important;height:auto!important;contain:none!important;content-visibility:visible!important;background:var(--tbw-color-bg);position:relative;&:nth-child(2n){background:var(--tbw-color-row-alt)}&:hover{background:var(--tbw-color-row-hover)}&[aria-selected=true]{background:var(--tbw-color-selection);&:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--tbw-color-accent)}}}.data-grid-row:not(.group-row)>.cell{display:flex!important;justify-content:space-between;align-items:center;padding:var(--tbw-spacing-xs) var(--tbw-spacing-md);width:100%!important;min-width:0!important;min-height:auto!important;height:auto!important;line-height:1.5!important;position:static!important;left:auto!important;right:auto!important;border:none!important;border-bottom:none!important;border-right:none!important;background:transparent!important;white-space:normal!important;overflow:visible!important;&:before{content:attr(data-header) ": ";font-weight:600;color:var(--tbw-color-header-fg);flex-shrink:0;margin-right:var(--tbw-spacing-md);min-width:100px}&:after{content:none}}.cell[data-utility]{display:none!important}}tbw-grid[data-responsive] .cell[data-responsive-hidden]{display:none!important}tbw-grid[data-responsive] .cell[data-responsive-value-only]{&:before{display:none!important}justify-content:flex-start!important;font-weight:500}tbw-grid:not([data-responsive]) .cell[data-responsive-hidden]{display:none!important}tbw-grid[data-responsive]{.tbw-footer,.tbw-pinned-rows,.tbw-aggregation-rows{display:none!important}.tbw-pinned-rows,.tbw-aggregation-rows,.tbw-aggregation-row{min-width:0!important}}tbw-grid[data-responsive] .data-grid-row.responsive-card{display:block!important;padding:var(--tbw-cell-padding);border-bottom:1px solid var(--tbw-color-border);>*{width:100%}.cell:before{display:none}}';
4144
4203
  class Cn extends A {
4145
4204
  name = "responsive";
4146
4205
  version = "1.0.0";
4147
- styles = Ki;
4206
+ styles = zi;
4148
4207
  static manifest = {
4149
4208
  incompatibleWith: [
4150
4209
  {
4151
4210
  name: "groupingRows",
4152
4211
  reason: "Responsive card layout does not yet support row grouping. The variable row heights (cards vs group headers) cause scroll calculation issues."
4153
4212
  }
4213
+ ],
4214
+ queries: [
4215
+ {
4216
+ type: "isCardMode",
4217
+ description: "Returns whether the grid is currently in responsive card mode"
4218
+ }
4154
4219
  ]
4155
4220
  };
4156
4221
  #e;
@@ -4200,6 +4265,10 @@ class Cn extends A {
4200
4265
  detach() {
4201
4266
  this.#e?.disconnect(), this.#e = void 0, clearTimeout(this.#o), this.#o = void 0, this.gridElement && this.gridElement.removeAttribute("data-responsive"), super.detach();
4202
4267
  }
4268
+ handleQuery(e) {
4269
+ if (e.type === "isCardMode")
4270
+ return this.#t;
4271
+ }
4203
4272
  afterRender() {
4204
4273
  if (this.#E(), !(this.#c.length > 0 ? this.#a !== null : this.#t))
4205
4274
  return;
@@ -4600,7 +4669,7 @@ function Vi(s, e, t) {
4600
4669
  const i = V(t);
4601
4670
  return s >= i.startRow && s <= i.endRow && e >= i.startCol && e <= i.endCol;
4602
4671
  }
4603
- function We(s, e, t) {
4672
+ function $e(s, e, t) {
4604
4673
  return t.some((i) => Vi(s, e, i));
4605
4674
  }
4606
4675
  function Wi(s) {
@@ -4652,6 +4721,7 @@ function Ui(s, e, t) {
4652
4721
  }
4653
4722
  class Rn extends A {
4654
4723
  static manifest = {
4724
+ queries: [{ type: "getSelection", description: "Get the current selection state" }],
4655
4725
  configRules: [
4656
4726
  {
4657
4727
  id: "selection/range-dblclick",
@@ -4698,9 +4768,19 @@ class Rn extends A {
4698
4768
  isCellSelectable(e, t) {
4699
4769
  return this.checkSelectable(e, t);
4700
4770
  }
4771
+ attach(e) {
4772
+ super.attach(e), this.on("filter-applied", () => this.clearSelectionSilent()), this.on("grouping-state-change", () => this.clearSelectionSilent()), this.on("tree-state-change", () => this.clearSelectionSilent());
4773
+ }
4774
+ handleQuery(e) {
4775
+ if (e.type === "getSelection")
4776
+ return this.getSelection();
4777
+ }
4701
4778
  detach() {
4702
4779
  this.selected.clear(), this.ranges = [], this.activeRange = null, this.cellAnchor = null, this.isDragging = !1, this.selectedCell = null, this.pendingKeyboardUpdate = null;
4703
4780
  }
4781
+ clearSelectionSilent() {
4782
+ this.selected.clear(), this.ranges = [], this.activeRange = null, this.cellAnchor = null, this.selectedCell = null, this.lastSelected = null, this.anchor = null, this.requestAfterRender();
4783
+ }
4704
4784
  onCellClick(e) {
4705
4785
  if (!this.isSelectionEnabled()) return !1;
4706
4786
  const { rowIndex: t, colIndex: i, originalEvent: n } = e, { mode: r, triggerOn: o = "click" } = this.config;
@@ -4835,7 +4915,7 @@ class Rn extends A {
4835
4915
  const h = this.columns[u];
4836
4916
  if (h && q(h))
4837
4917
  return;
4838
- if (We(c, u, this.ranges) && (d.classList.add("selected"), o)) {
4918
+ if ($e(c, u, this.ranges) && (d.classList.add("selected"), o)) {
4839
4919
  c === o.startRow && d.classList.add("top"), c === o.endRow && d.classList.add("bottom");
4840
4920
  const f = Math.max(o.startCol, a);
4841
4921
  u === f && d.classList.add("first"), u === o.endCol && d.classList.add("last");
@@ -4875,7 +4955,7 @@ class Rn extends A {
4875
4955
  return $i(this.ranges);
4876
4956
  }
4877
4957
  isCellSelected(e, t) {
4878
- return We(e, t, this.ranges);
4958
+ return $e(e, t, this.ranges);
4879
4959
  }
4880
4960
  clearSelection() {
4881
4961
  this.selectedCell = null, this.selected.clear(), this.anchor = null, this.ranges = [], this.activeRange = null, this.cellAnchor = null, this.emit("selection-change", { mode: this.config.mode, ranges: [] }), this.requestAfterRender();
@@ -4903,7 +4983,7 @@ class Rn extends A {
4903
4983
  );
4904
4984
  }
4905
4985
  }
4906
- function Q(s, e) {
4986
+ function J(s, e) {
4907
4987
  return Math.floor(s / e);
4908
4988
  }
4909
4989
  function Yi(s, e) {
@@ -4913,12 +4993,12 @@ function Yi(s, e) {
4913
4993
  };
4914
4994
  }
4915
4995
  function Xi(s, e, t) {
4916
- const i = Q(s, t), n = Q(e - 1, t), r = [];
4996
+ const i = J(s, t), n = J(e - 1, t), r = [];
4917
4997
  for (let o = i; o <= n; o++)
4918
4998
  r.push(o);
4919
4999
  return r;
4920
5000
  }
4921
- async function $e(s, e, t, i) {
5001
+ async function je(s, e, t, i) {
4922
5002
  const n = Yi(e, t);
4923
5003
  return s.getRows({
4924
5004
  startRow: n.start,
@@ -4928,12 +5008,12 @@ async function $e(s, e, t, i) {
4928
5008
  });
4929
5009
  }
4930
5010
  function Zi(s, e, t) {
4931
- const i = Q(s, e), n = t.get(i);
5011
+ const i = J(s, e), n = t.get(i);
4932
5012
  if (!n) return;
4933
5013
  const r = s % e;
4934
5014
  return n[r];
4935
5015
  }
4936
- const Ji = 100;
5016
+ const Qi = 100;
4937
5017
  class Sn extends A {
4938
5018
  name = "serverSide";
4939
5019
  get defaultConfig() {
@@ -4959,7 +5039,7 @@ class Sn extends A {
4959
5039
  if (!(this.loadedBlocks.has(r) || this.loadingBlocks.has(r))) {
4960
5040
  if (this.loadingBlocks.size >= (this.config.maxConcurrentRequests ?? 2))
4961
5041
  break;
4962
- this.loadingBlocks.add(r), $e(this.dataSource, r, t, {}).then((o) => {
5042
+ this.loadingBlocks.add(r), je(this.dataSource, r, t, {}).then((o) => {
4963
5043
  this.loadedBlocks.set(r, o.rows), this.totalRowCount = o.totalRowCount, this.loadingBlocks.delete(r), this.requestRender(), this.loadRequiredBlocks();
4964
5044
  }).catch(() => {
4965
5045
  this.loadingBlocks.delete(r);
@@ -4978,12 +5058,12 @@ class Sn extends A {
4978
5058
  onScroll(e) {
4979
5059
  this.dataSource && (this.loadRequiredBlocks(), this.scrollDebounceTimer && clearTimeout(this.scrollDebounceTimer), this.scrollDebounceTimer = setTimeout(() => {
4980
5060
  this.loadRequiredBlocks();
4981
- }, Ji));
5061
+ }, Qi));
4982
5062
  }
4983
5063
  setDataSource(e) {
4984
5064
  this.dataSource = e, this.loadedBlocks.clear(), this.loadingBlocks.clear();
4985
5065
  const t = this.config.cacheBlockSize ?? 100;
4986
- $e(e, 0, t, {}).then((i) => {
5066
+ je(e, 0, t, {}).then((i) => {
4987
5067
  this.loadedBlocks.set(0, i.rows), this.totalRowCount = i.totalRowCount, this.requestRender();
4988
5068
  });
4989
5069
  }
@@ -4997,7 +5077,7 @@ class Sn extends A {
4997
5077
  return this.totalRowCount;
4998
5078
  }
4999
5079
  isRowLoaded(e) {
5000
- const t = this.config.cacheBlockSize ?? 100, i = Q(e, t);
5080
+ const t = this.config.cacheBlockSize ?? 100, i = J(e, t);
5001
5081
  return this.loadedBlocks.has(i);
5002
5082
  }
5003
5083
  getLoadedBlockCount() {
@@ -5023,7 +5103,7 @@ function ge(s, e, t = null, i = 0) {
5023
5103
  }
5024
5104
  return r;
5025
5105
  }
5026
- function Qi() {
5106
+ function Ji() {
5027
5107
  return /* @__PURE__ */ new Set();
5028
5108
  }
5029
5109
  function rt(s, e, t, i = null, n = 0) {
@@ -5049,7 +5129,7 @@ function en(s, e, t, i) {
5049
5129
  r.add(n[o]);
5050
5130
  return r;
5051
5131
  }
5052
- function je(s, e = "children") {
5132
+ function Ue(s, e = "children") {
5053
5133
  if (!Array.isArray(s) || s.length === 0) return !1;
5054
5134
  for (const t of s) {
5055
5135
  if (!t) continue;
@@ -5073,6 +5153,20 @@ function tn(s) {
5073
5153
  }
5074
5154
  const nn = "@layer tbw-plugins{tbw-grid{.cell[data-field=__tbw_expander]{border-right:none!important;padding:0;display:flex;align-items:center;justify-content:flex-start}.header-row .cell[data-field=__tbw_expander]{display:none}.header-row .cell[data-field=__tbw_expander]+.cell{grid-column:1 / 3}.tree-cell-wrapper{display:inline-flex;align-items:center;padding-left:calc(var(--tbw-tree-depth, 0) * var(--tbw-tree-indent-width, var(--tbw-tree-toggle-size, 1.25em)))}.tree-expander{display:flex;align-items:center;justify-content:flex-start;width:100%;height:100%;box-sizing:border-box}.tree-toggle{cursor:pointer;user-select:none;display:inline-flex;align-items:center;justify-content:center;width:var(--tbw-tree-toggle-size, 1.25em);height:var(--tbw-tree-toggle-size, 1.25em);flex-shrink:0}.tree-toggle:hover{color:var(--tbw-tree-accent, var(--tbw-color-accent))}.tree-spacer{width:var(--tbw-tree-toggle-size, 1.25em);display:inline-block;flex-shrink:0}.data-grid-row.tbw-tree-slide-in{animation:tbw-tree-slide-in var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}.data-grid-row.tbw-tree-fade-in{animation:tbw-tree-fade-in var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}}@keyframes tbw-tree-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}@keyframes tbw-tree-fade-in{0%{opacity:0}to{opacity:1}}}";
5075
5155
  class kn extends A {
5156
+ static manifest = {
5157
+ events: [
5158
+ {
5159
+ type: "tree-state-change",
5160
+ description: "Emitted when tree expansion state changes (toggle, expand all, collapse all)"
5161
+ }
5162
+ ],
5163
+ queries: [
5164
+ {
5165
+ type: "canMoveRow",
5166
+ description: "Returns false for rows with children (parent nodes cannot be reordered)"
5167
+ }
5168
+ ]
5169
+ };
5076
5170
  name = "tree";
5077
5171
  styles = nn;
5078
5172
  get defaultConfig() {
@@ -5095,17 +5189,24 @@ class kn extends A {
5095
5189
  detach() {
5096
5190
  this.expandedKeys.clear(), this.initialExpansionDone = !1, this.flattenedRows = [], this.rowKeyMap.clear(), this.previousVisibleKeys.clear(), this.keysToAnimate.clear(), this.sortState = null;
5097
5191
  }
5192
+ handleQuery(e) {
5193
+ if (e.type === "canMoveRow") {
5194
+ const t = e.context;
5195
+ if (t && t[this.config.childrenField ?? "children"]?.length > 0)
5196
+ return !1;
5197
+ }
5198
+ }
5098
5199
  get animationStyle() {
5099
5200
  return this.isAnimationEnabled ? this.config.animation ?? "slide" : !1;
5100
5201
  }
5101
5202
  detect(e) {
5102
5203
  if (!this.config.autoDetect) return !1;
5103
5204
  const t = e, i = this.config.childrenField ?? tn(t) ?? "children";
5104
- return je(t, i);
5205
+ return Ue(t, i);
5105
5206
  }
5106
5207
  processRows(e) {
5107
5208
  const t = this.config.childrenField ?? "children", i = e;
5108
- if (!je(i, t))
5209
+ if (!Ue(i, t))
5109
5210
  return this.flattenedRows = [], this.rowKeyMap.clear(), this.previousVisibleKeys.clear(), [...e];
5110
5211
  let n = this.withStableKeys(i);
5111
5212
  this.sortState && (n = this.sortTree(n, this.sortState.field, this.sortState.direction)), this.config.defaultExpanded && !this.initialExpansionDone && (this.expandedKeys = ge(n, this.config), this.initialExpansionDone = !0), this.flattenedRows = this.flattenTree(n, this.expandedKeys), this.rowKeyMap.clear(), this.keysToAnimate.clear();
@@ -5230,13 +5331,13 @@ class kn extends A {
5230
5331
  this.expandedKeys.delete(e), this.requestRender();
5231
5332
  }
5232
5333
  toggle(e) {
5233
- this.expandedKeys = ce(this.expandedKeys, e), this.requestRender();
5334
+ this.expandedKeys = ce(this.expandedKeys, e), this.emitPluginEvent("tree-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
5234
5335
  }
5235
5336
  expandAll() {
5236
- this.expandedKeys = ge(this.rows, this.config), this.requestRender();
5337
+ this.expandedKeys = ge(this.rows, this.config), this.emitPluginEvent("tree-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
5237
5338
  }
5238
5339
  collapseAll() {
5239
- this.expandedKeys = Qi(), this.requestRender();
5340
+ this.expandedKeys = Ji(), this.emitPluginEvent("tree-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
5240
5341
  }
5241
5342
  isExpanded(e) {
5242
5343
  return this.expandedKeys.has(e);
@@ -5263,7 +5364,7 @@ function rn(s, e, t) {
5263
5364
  redoStack: []
5264
5365
  };
5265
5366
  }
5266
- function Ue(s) {
5367
+ function Ye(s) {
5267
5368
  if (s.undoStack.length === 0)
5268
5369
  return { newState: s, action: null };
5269
5370
  const e = [...s.undoStack], t = e.pop();
@@ -5275,7 +5376,7 @@ function Ue(s) {
5275
5376
  action: t
5276
5377
  } : { newState: s, action: null };
5277
5378
  }
5278
- function Ye(s) {
5379
+ function Xe(s) {
5279
5380
  if (s.redoStack.length === 0)
5280
5381
  return { newState: s, action: null };
5281
5382
  const e = [...s.redoStack], t = e.pop();
@@ -5318,13 +5419,21 @@ class An extends A {
5318
5419
  }
5319
5420
  undoStack = [];
5320
5421
  redoStack = [];
5422
+ attach(e) {
5423
+ super.attach(e), this.on(
5424
+ "cell-edit-committed",
5425
+ (t) => {
5426
+ this.recordEdit(t.rowIndex, t.field, t.oldValue, t.newValue);
5427
+ }
5428
+ );
5429
+ }
5321
5430
  detach() {
5322
5431
  this.undoStack = [], this.redoStack = [];
5323
5432
  }
5324
5433
  onKeyDown(e) {
5325
5434
  const t = (e.ctrlKey || e.metaKey) && e.key === "z" && !e.shiftKey, i = (e.ctrlKey || e.metaKey) && (e.key === "y" || e.key === "z" && e.shiftKey);
5326
5435
  if (t) {
5327
- const n = Ue({ undoStack: this.undoStack, redoStack: this.redoStack });
5436
+ const n = Ye({ undoStack: this.undoStack, redoStack: this.redoStack });
5328
5437
  if (n.action) {
5329
5438
  const r = this.rows;
5330
5439
  r[n.action.rowIndex] && (r[n.action.rowIndex][n.action.field] = n.action.oldValue), this.undoStack = n.newState.undoStack, this.redoStack = n.newState.redoStack, this.emit("undo", {
@@ -5335,7 +5444,7 @@ class An extends A {
5335
5444
  return !0;
5336
5445
  }
5337
5446
  if (i) {
5338
- const n = Ye({ undoStack: this.undoStack, redoStack: this.redoStack });
5447
+ const n = Xe({ undoStack: this.undoStack, redoStack: this.redoStack });
5339
5448
  if (n.action) {
5340
5449
  const r = this.rows;
5341
5450
  r[n.action.rowIndex] && (r[n.action.rowIndex][n.action.field] = n.action.newValue), this.undoStack = n.newState.undoStack, this.redoStack = n.newState.redoStack, this.emit("redo", {
@@ -5356,7 +5465,7 @@ class An extends A {
5356
5465
  this.undoStack = o.undoStack, this.redoStack = o.redoStack;
5357
5466
  }
5358
5467
  undo() {
5359
- const e = Ue({ undoStack: this.undoStack, redoStack: this.redoStack });
5468
+ const e = Ye({ undoStack: this.undoStack, redoStack: this.redoStack });
5360
5469
  if (e.action) {
5361
5470
  const t = this.rows;
5362
5471
  t[e.action.rowIndex] && (t[e.action.rowIndex][e.action.field] = e.action.oldValue), this.undoStack = e.newState.undoStack, this.redoStack = e.newState.redoStack, this.requestRender();
@@ -5364,7 +5473,7 @@ class An extends A {
5364
5473
  return e.action;
5365
5474
  }
5366
5475
  redo() {
5367
- const e = Ye({ undoStack: this.undoStack, redoStack: this.redoStack });
5476
+ const e = Xe({ undoStack: this.undoStack, redoStack: this.redoStack });
5368
5477
  if (e.action) {
5369
5478
  const t = this.rows;
5370
5479
  t[e.action.rowIndex] && (t[e.action.rowIndex][e.action.field] = e.action.newValue), this.undoStack = e.newState.undoStack, this.redoStack = e.newState.redoStack, this.requestRender();
@@ -5389,7 +5498,7 @@ class An extends A {
5389
5498
  }
5390
5499
  }
5391
5500
  const dn = '@layer tbw-plugins{.tbw-visibility-content{display:flex;flex-direction:column;height:100%}.tbw-visibility-list{flex:1;overflow-y:auto;padding:var(--tbw-panel-padding, var(--tbw-spacing-md, .5rem))}.tbw-visibility-row{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));padding:var(--tbw-menu-item-padding, .375rem .25rem);cursor:pointer;font-size:var(--tbw-font-size-sm, .8125rem);border-radius:var(--tbw-border-radius, .25rem);position:relative}.tbw-visibility-row:hover{background:var(--tbw-visibility-hover, var(--tbw-color-row-hover))}.tbw-visibility-row input[type=checkbox]{cursor:pointer}.tbw-visibility-row.locked span{color:var(--tbw-color-fg-muted)}.tbw-visibility-handle{cursor:grab;color:var(--tbw-color-fg-muted);font-size:var(--tbw-font-size-2xs, .625rem);letter-spacing:-2px;user-select:none;flex-shrink:0}.tbw-visibility-row.reorderable:hover .tbw-visibility-handle{color:var(--tbw-color-fg)}.tbw-visibility-label{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));flex:1;cursor:pointer}.tbw-visibility-row.dragging{opacity:.5;cursor:grabbing}.tbw-visibility-row.drop-before:before{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:var(--tbw-visibility-indicator, var(--tbw-color-accent))}.tbw-visibility-row.drop-after:after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--tbw-visibility-indicator, var(--tbw-color-accent))}.tbw-visibility-show-all{margin:var(--tbw-panel-padding, var(--tbw-spacing-md, .5rem));padding:var(--tbw-button-padding, .5rem .75rem);border:1px solid var(--tbw-visibility-border, var(--tbw-color-border));border-radius:var(--tbw-border-radius, .25rem);background:var(--tbw-visibility-btn-bg, var(--tbw-color-header-bg));color:var(--tbw-color-fg);cursor:pointer;font-size:var(--tbw-font-size-sm, .8125rem)}.tbw-visibility-show-all:hover{background:var(--tbw-visibility-hover, var(--tbw-color-row-hover))}}';
5392
- function Xe(s) {
5501
+ function Ze(s) {
5393
5502
  const e = s.meta ?? {};
5394
5503
  return e.lockPosition !== !0 && e.suppressMovable !== !0;
5395
5504
  }
@@ -5489,7 +5598,7 @@ class B extends A {
5489
5598
  const i = this.grid.getAllColumns().filter((n) => !n.utility);
5490
5599
  for (let n = 0; n < i.length; n++) {
5491
5600
  const r = i[n], o = r.header || r.field, a = document.createElement("div");
5492
- a.className = r.lockVisible ? "tbw-visibility-row locked" : "tbw-visibility-row", a.setAttribute("data-field", r.field), a.setAttribute("data-index", String(n)), t && Xe(r) && (a.draggable = !0, a.classList.add("reorderable"), this.setupDragListeners(a, r.field, n, e));
5601
+ a.className = r.lockVisible ? "tbw-visibility-row locked" : "tbw-visibility-row", a.setAttribute("data-field", r.field), a.setAttribute("data-index", String(n)), t && Ze(r) && (a.draggable = !0, a.classList.add("reorderable"), this.setupDragListeners(a, r.field, n, e));
5493
5602
  const l = document.createElement("label");
5494
5603
  l.className = "tbw-visibility-label";
5495
5604
  const d = document.createElement("input");
@@ -5497,7 +5606,7 @@ class B extends A {
5497
5606
  this.grid.toggleColumnVisibility(r.field), setTimeout(() => this.rebuildToggles(e), 0);
5498
5607
  });
5499
5608
  const c = document.createElement("span");
5500
- if (c.textContent = o, l.appendChild(d), l.appendChild(c), t && Xe(r)) {
5609
+ if (c.textContent = o, l.appendChild(d), l.appendChild(c), t && Ze(r)) {
5501
5610
  const u = document.createElement("span");
5502
5611
  u.className = "tbw-visibility-handle", this.setIcon(u, this.resolveIcon("dragHandle")), u.title = "Drag to reorder", a.appendChild(u);
5503
5612
  }
@@ -5540,7 +5649,7 @@ export {
5540
5649
  A as BaseGridPlugin,
5541
5650
  un as ClipboardPlugin,
5542
5651
  hn as ColumnVirtualizationPlugin,
5543
- Qe as ContextMenuPlugin,
5652
+ Je as ContextMenuPlugin,
5544
5653
  Ln as DEFAULT_ANIMATION_CONFIG,
5545
5654
  st as DEFAULT_GRID_ICONS,
5546
5655
  Fn as DGEvents,
@@ -5553,20 +5662,20 @@ export {
5553
5662
  Mn as GridClasses,
5554
5663
  Nn as GridDataAttrs,
5555
5664
  qn as GridElement,
5556
- Hn as GridSelectors,
5665
+ Kn as GridSelectors,
5557
5666
  pn as GroupingColumnsPlugin,
5558
5667
  mn as GroupingRowsPlugin,
5559
5668
  et as MasterDetailPlugin,
5560
5669
  wn as MultiSortPlugin,
5561
- Ze as PLUGIN_QUERIES,
5670
+ Hn as PLUGIN_QUERIES,
5562
5671
  bn as PinnedColumnsPlugin,
5563
5672
  vn as PinnedRowsPlugin,
5564
5673
  G as PivotPlugin,
5565
5674
  zn as PluginEvents,
5566
- Kn as PluginManager,
5675
+ On as PluginManager,
5567
5676
  yn as PrintPlugin,
5568
5677
  Gi as ROW_DRAG_HANDLE_FIELD,
5569
- On as RenderPhase,
5678
+ Gn as RenderPhase,
5570
5679
  xn as ReorderPlugin,
5571
5680
  Cn as ResponsivePlugin,
5572
5681
  En as RowReorderPlugin,
@@ -5575,12 +5684,12 @@ export {
5575
5684
  kn as TreePlugin,
5576
5685
  An as UndoRedoPlugin,
5577
5686
  B as VisibilityPlugin,
5578
- Gn as builtInSort,
5579
- Bn as createGrid,
5580
- Vn as defaultComparator,
5687
+ Bn as builtInSort,
5688
+ Vn as createGrid,
5689
+ Wn as defaultComparator,
5581
5690
  _t as defaultEditorFor,
5582
5691
  mt as defaultPasteHandler,
5583
5692
  Mi as printGridIsolated,
5584
- Wn as queryGrid
5693
+ $n as queryGrid
5585
5694
  };
5586
5695
  //# sourceMappingURL=all.js.map