@toolbox-web/grid 1.17.0 → 1.19.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 (66) hide show
  1. package/README.md +126 -41
  2. package/all.js +1065 -933
  3. package/all.js.map +1 -1
  4. package/index.js +39 -33
  5. package/index.js.map +1 -1
  6. package/lib/core/grid.d.ts +12 -2
  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/internal/keyboard.d.ts.map +1 -1
  10. package/lib/core/types.d.ts +34 -1
  11. package/lib/core/types.d.ts.map +1 -1
  12. package/lib/plugins/clipboard/index.js.map +1 -1
  13. package/lib/plugins/column-virtualization/index.js.map +1 -1
  14. package/lib/plugins/context-menu/index.js.map +1 -1
  15. package/lib/plugins/editing/EditingPlugin.d.ts.map +1 -1
  16. package/lib/plugins/editing/index.js +155 -145
  17. package/lib/plugins/editing/index.js.map +1 -1
  18. package/lib/plugins/export/index.js.map +1 -1
  19. package/lib/plugins/filtering/FilteringPlugin.d.ts +31 -0
  20. package/lib/plugins/filtering/FilteringPlugin.d.ts.map +1 -1
  21. package/lib/plugins/filtering/filter-model.d.ts +30 -3
  22. package/lib/plugins/filtering/filter-model.d.ts.map +1 -1
  23. package/lib/plugins/filtering/index.d.ts +1 -0
  24. package/lib/plugins/filtering/index.d.ts.map +1 -1
  25. package/lib/plugins/filtering/index.js +471 -361
  26. package/lib/plugins/filtering/index.js.map +1 -1
  27. package/lib/plugins/filtering/types.d.ts +32 -0
  28. package/lib/plugins/filtering/types.d.ts.map +1 -1
  29. package/lib/plugins/grouping-columns/index.js.map +1 -1
  30. package/lib/plugins/grouping-rows/index.js.map +1 -1
  31. package/lib/plugins/master-detail/index.js.map +1 -1
  32. package/lib/plugins/multi-sort/MultiSortPlugin.d.ts +4 -0
  33. package/lib/plugins/multi-sort/MultiSortPlugin.d.ts.map +1 -1
  34. package/lib/plugins/multi-sort/index.js +49 -39
  35. package/lib/plugins/multi-sort/index.js.map +1 -1
  36. package/lib/plugins/pinned-columns/index.js.map +1 -1
  37. package/lib/plugins/pinned-rows/index.js.map +1 -1
  38. package/lib/plugins/pivot/index.js.map +1 -1
  39. package/lib/plugins/print/index.js.map +1 -1
  40. package/lib/plugins/reorder/index.js +81 -78
  41. package/lib/plugins/reorder/index.js.map +1 -1
  42. package/lib/plugins/responsive/index.js +58 -55
  43. package/lib/plugins/responsive/index.js.map +1 -1
  44. package/lib/plugins/row-reorder/index.js +5 -2
  45. package/lib/plugins/row-reorder/index.js.map +1 -1
  46. package/lib/plugins/selection/SelectionPlugin.d.ts +18 -0
  47. package/lib/plugins/selection/SelectionPlugin.d.ts.map +1 -1
  48. package/lib/plugins/selection/index.js +110 -71
  49. package/lib/plugins/selection/index.js.map +1 -1
  50. package/lib/plugins/server-side/index.js.map +1 -1
  51. package/lib/plugins/tree/index.js.map +1 -1
  52. package/lib/plugins/undo-redo/index.js.map +1 -1
  53. package/lib/plugins/visibility/index.js.map +1 -1
  54. package/package.json +1 -1
  55. package/umd/grid.all.umd.js +29 -29
  56. package/umd/grid.all.umd.js.map +1 -1
  57. package/umd/grid.umd.js +2 -2
  58. package/umd/grid.umd.js.map +1 -1
  59. package/umd/plugins/editing.umd.js +1 -1
  60. package/umd/plugins/editing.umd.js.map +1 -1
  61. package/umd/plugins/filtering.umd.js +1 -1
  62. package/umd/plugins/filtering.umd.js.map +1 -1
  63. package/umd/plugins/multi-sort.umd.js +1 -1
  64. package/umd/plugins/multi-sort.umd.js.map +1 -1
  65. package/umd/plugins/selection.umd.js +2 -2
  66. package/umd/plugins/selection.umd.js.map +1 -1
package/all.js CHANGED
@@ -1,5 +1,5 @@
1
- import { BaseGridPlugin as I, DEFAULT_GRID_ICONS as vt, F as G, e as M, s as yt, c as xt, runAggregator as se, a as st, b as at, g as te, r as Ct, getAggregator as Re, getValueAggregator as Et, d as Se, f as ke } from "./index.js";
2
- import { DEFAULT_ANIMATION_CONFIG as jn, DGEvents as Un, DataGridElement as Yn, FitModeEnum as Xn, GridCSSVars as Qn, GridClasses as Zn, GridDataAttrs as Jn, DataGridElement as er, GridSelectors as tr, PLUGIN_QUERIES as ir, PluginEvents as nr, PluginManager as rr, RenderPhase as or, builtInSort as sr, createGrid as ar, defaultComparator as lr, queryGrid as dr } from "./index.js";
1
+ import { BaseGridPlugin as F, DEFAULT_GRID_ICONS as yt, F as G, e as q, s as xt, c as Ct, runAggregator as ae, a as at, b as lt, g as te, r as Et, getAggregator as Se, getValueAggregator as Rt, d as ke, f as Ae } from "./index.js";
2
+ import { DEFAULT_ANIMATION_CONFIG as Yn, DGEvents as Xn, DataGridElement as Qn, FitModeEnum as Zn, GridCSSVars as Jn, GridClasses as er, GridDataAttrs as tr, DataGridElement as ir, GridSelectors as nr, PLUGIN_QUERIES as rr, PluginEvents as or, PluginManager as sr, RenderPhase as ar, builtInSort as lr, createGrid as dr, defaultComparator as cr, queryGrid as ur } from "./index.js";
3
3
  function ie(a, e, t = !0) {
4
4
  let i = a;
5
5
  if (t && (i = i.filter((n) => !n.hidden && !n.field.startsWith("__") && n.meta?.utility !== !0)), e?.length) {
@@ -8,13 +8,13 @@ function ie(a, e, t = !0) {
8
8
  }
9
9
  return i;
10
10
  }
11
- function pe(a, e) {
11
+ function me(a, e) {
12
12
  return e?.length ? [...e].sort((t, i) => t - i).map((t) => a[t]).filter((t) => t != null) : a;
13
13
  }
14
- function Rt(a) {
14
+ function St(a) {
15
15
  return a == null ? "" : a instanceof Date ? a.toISOString() : typeof a == "object" ? JSON.stringify(a) : String(a);
16
16
  }
17
- async function St(a) {
17
+ async function kt(a) {
18
18
  try {
19
19
  return await navigator.clipboard.writeText(a), !0;
20
20
  } catch (e) {
@@ -25,7 +25,7 @@ async function St(a) {
25
25
  return document.body.removeChild(t), i;
26
26
  }
27
27
  }
28
- function Ae(a, e) {
28
+ function _e(a, e) {
29
29
  const t = e.delimiter ?? " ", i = e.newline ?? `
30
30
  `, n = a.replace(/\r\n/g, `
31
31
  `).replace(/\r/g, `
@@ -37,14 +37,14 @@ function Ae(a, e) {
37
37
  }
38
38
  return o.push(s), (o.length > 1 || o.some((d) => d.trim() !== "")) && r.push(o), r;
39
39
  }
40
- async function kt() {
40
+ async function At() {
41
41
  try {
42
42
  return await navigator.clipboard.readText();
43
43
  } catch {
44
44
  return "";
45
45
  }
46
46
  }
47
- function At(a, e) {
47
+ function _t(a, e) {
48
48
  const { rows: t, target: i, fields: n } = a;
49
49
  if (!i) return;
50
50
  const r = e.rows, o = e.effectiveConfig.columns ?? [], s = o.map((u) => u.field), l = /* @__PURE__ */ new Map();
@@ -69,7 +69,7 @@ function At(a, e) {
69
69
  }
70
70
  }), e.rows = d;
71
71
  }
72
- class _n extends I {
72
+ class In extends F {
73
73
  static dependencies = [
74
74
  { name: "selection", required: !1, reason: "Enables copy/paste of selected cells instead of entire grid" }
75
75
  ];
@@ -96,9 +96,9 @@ class _n extends I {
96
96
  return (e.ctrlKey || e.metaKey) && e.key === "c" ? (e.preventDefault(), this.#t(e.target), !0) : !1;
97
97
  }
98
98
  #t(e) {
99
- const t = this.#r();
99
+ const t = this.#s();
100
100
  if (t && t.ranges.length === 0) {
101
- const i = this.#s(e);
101
+ const i = this.#r(e);
102
102
  if (!i) return;
103
103
  const n = this.columns[i.col];
104
104
  if (!n) return;
@@ -111,10 +111,10 @@ class _n extends I {
111
111
  const t = e.clipboardData?.getData("text/plain");
112
112
  if (!t) return;
113
113
  e.preventDefault();
114
- const i = Ae(t, this.config), n = this.#r(), r = n?.ranges?.[0], o = r?.from.row ?? 0, s = 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[s], h = u ? { row: o, col: s, field: u.field, bounds: d } : null, f = [], g = i[0]?.length ?? 0;
114
+ const i = _e(t, this.config), n = this.#s(), r = n?.ranges?.[0], o = r?.from.row ?? 0, s = 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[s], h = u ? { row: o, col: s, field: u.field, bounds: d } : null, f = [], g = i[0]?.length ?? 0;
115
115
  for (let m = 0; m < g && s + m <= c; m++) {
116
- const v = this.columns[s + m];
117
- v && !v.hidden && f.push(v.field);
116
+ const x = this.columns[s + m];
117
+ x && !x.hidden && f.push(x.field);
118
118
  }
119
119
  const p = { rows: i, text: t, target: h, fields: f };
120
120
  this.emit("paste", p), this.#o(p);
@@ -123,13 +123,13 @@ class _n extends I {
123
123
  if (!this.grid) return;
124
124
  const { pasteHandler: t } = this.config;
125
125
  if (t === null) return;
126
- (t ?? At)(e, this.grid);
126
+ (t ?? _t)(e, this.grid);
127
127
  }
128
- #r() {
128
+ #s() {
129
129
  return this.grid?.query("getSelection")?.[0];
130
130
  }
131
131
  #i(e) {
132
- const t = this.#r();
132
+ const t = this.#s();
133
133
  let i;
134
134
  if (e?.columns)
135
135
  i = ie(this.columns, e.columns);
@@ -140,7 +140,7 @@ class _n extends I {
140
140
  i = ie(this.columns);
141
141
  let n;
142
142
  if (e?.rowIndices)
143
- n = pe(this.rows, e.rowIndices);
143
+ n = me(this.rows, e.rowIndices);
144
144
  else if (t?.ranges.length) {
145
145
  const r = t.ranges[t.ranges.length - 1], o = Math.min(r.from.row, r.to.row), s = Math.max(r.from.row, r.to.row);
146
146
  n = [];
@@ -159,13 +159,13 @@ class _n extends I {
159
159
  for (const d of t) {
160
160
  const c = e.map((u) => {
161
161
  const h = d[u.field];
162
- return s ? s(h, u.field, d) : Rt(h);
162
+ return s ? s(h, u.field, d) : St(h);
163
163
  });
164
164
  l.push(c.join(n));
165
165
  }
166
166
  return l.join(r);
167
167
  }
168
- #s(e) {
168
+ #r(e) {
169
169
  const t = e.closest("[data-field-cache]");
170
170
  if (!t) return null;
171
171
  const i = t.dataset.fieldCache, n = t.dataset.row;
@@ -184,7 +184,7 @@ class _n extends I {
184
184
  if (t.length === 0 || i.length === 0)
185
185
  return "";
186
186
  const n = this.#n(t, i, e);
187
- return await St(n), this.lastCopied = { text: n, timestamp: Date.now() }, this.emit("copy", {
187
+ return await kt(n), this.lastCopied = { text: n, timestamp: Date.now() }, this.emit("copy", {
188
188
  text: n,
189
189
  rowCount: i.length,
190
190
  columnCount: t.length
@@ -194,40 +194,40 @@ class _n extends I {
194
194
  return e.length === 0 ? "" : this.copy({ ...t, rowIndices: e });
195
195
  }
196
196
  async paste() {
197
- const e = await kt();
198
- return e ? Ae(e, this.config) : null;
197
+ const e = await At();
198
+ return e ? _e(e, this.config) : null;
199
199
  }
200
200
  getLastCopied() {
201
201
  return this.lastCopied;
202
202
  }
203
203
  }
204
- const _e = 100;
205
- function ve(a) {
204
+ const Le = 100;
205
+ function ye(a) {
206
206
  if (a == null)
207
- return _e;
207
+ return Le;
208
208
  if (typeof a == "number")
209
209
  return a;
210
210
  const e = parseFloat(a);
211
- return isNaN(e) ? _e : e;
211
+ return isNaN(e) ? Le : e;
212
212
  }
213
- function Le(a) {
214
- return a.map((e) => ve(e.width));
213
+ function Ie(a) {
214
+ return a.map((e) => ye(e.width));
215
215
  }
216
216
  function Te(a) {
217
217
  const e = [];
218
218
  let t = 0;
219
219
  for (const i of a)
220
- e.push(t), t += ve(i.width);
220
+ e.push(t), t += ye(i.width);
221
221
  return e;
222
222
  }
223
- function Ie(a) {
224
- return a.reduce((e, t) => e + ve(t.width), 0);
223
+ function Fe(a) {
224
+ return a.reduce((e, t) => e + ye(t.width), 0);
225
225
  }
226
- function _t(a, e, t, i, n) {
226
+ function Lt(a, e, t, i, n) {
227
227
  const r = t.length;
228
228
  if (r === 0)
229
229
  return { startCol: 0, endCol: 0, visibleColumns: [] };
230
- let o = Lt(a, t, i);
230
+ let o = It(a, t, i);
231
231
  o = Math.max(0, o - n);
232
232
  const s = a + e;
233
233
  let l = o;
@@ -244,7 +244,7 @@ function _t(a, e, t, i, n) {
244
244
  d.push(c);
245
245
  return { startCol: o, endCol: l, visibleColumns: d };
246
246
  }
247
- function Lt(a, e, t) {
247
+ function It(a, e, t) {
248
248
  let i = 0, n = e.length - 1;
249
249
  for (; i < n; ) {
250
250
  const r = Math.floor((i + n) / 2);
@@ -255,7 +255,7 @@ function Lt(a, e, t) {
255
255
  function Tt(a, e, t) {
256
256
  return t ? a > e : !1;
257
257
  }
258
- class Ln extends I {
258
+ class Tn extends F {
259
259
  name = "columnVirtualization";
260
260
  get defaultConfig() {
261
261
  return {
@@ -275,7 +275,7 @@ class Ln extends I {
275
275
  attach(e) {
276
276
  super.attach(e);
277
277
  const t = this.columns;
278
- this.columnWidths = Le(t), this.columnOffsets = Te(t), this.totalWidth = Ie(t), this.endCol = t.length - 1;
278
+ this.columnWidths = Ie(t), this.columnOffsets = Te(t), this.totalWidth = Fe(t), this.endCol = t.length - 1;
279
279
  }
280
280
  detach() {
281
281
  this.#t(), this.columnWidths = [], this.columnOffsets = [], this.originalColumns = [], this.isVirtualized = !1, this.startCol = 0, this.endCol = 0, this.scrollLeft = 0, this.totalWidth = 0;
@@ -293,7 +293,7 @@ class Ln extends I {
293
293
  r && (r.style.minWidth = "");
294
294
  }
295
295
  processColumns(e) {
296
- (this.originalColumns.length === 0 || e.length >= this.originalColumns.length) && (this.originalColumns = e, this.columnWidths = Le(e), this.columnOffsets = Te(e), this.totalWidth = Ie(e));
296
+ (this.originalColumns.length === 0 || e.length >= this.originalColumns.length) && (this.originalColumns = e, this.columnWidths = Ie(e), this.columnOffsets = Te(e), this.totalWidth = Fe(e));
297
297
  const i = this.originalColumns, n = Tt(
298
298
  i.length,
299
299
  this.config.threshold ?? 30,
@@ -301,7 +301,7 @@ class Ln extends I {
301
301
  );
302
302
  if (this.isVirtualized = n ?? !1, !n)
303
303
  return this.startCol = 0, this.endCol = i.length - 1, [...i];
304
- const r = this.grid.clientWidth || 800, o = _t(
304
+ const r = this.grid.clientWidth || 800, o = Lt(
305
305
  this.scrollLeft,
306
306
  r,
307
307
  this.columnOffsets,
@@ -343,20 +343,20 @@ class Ln extends I {
343
343
  return this.totalWidth;
344
344
  }
345
345
  }
346
- const ae = "@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 kbd{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}}";
347
- function me(a, e) {
346
+ const le = "@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 kbd{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}}";
347
+ function be(a, e) {
348
348
  return (typeof a == "function" ? a(e) : a).filter((i) => !(i.hidden === !0 || typeof i.hidden == "function" && i.hidden(e)));
349
349
  }
350
- function Fe(a) {
350
+ function Pe(a) {
351
351
  const e = [];
352
352
  for (const t of a)
353
353
  t.separator && (e.length === 0 || e[e.length - 1].separator) || e.push(t);
354
354
  return e.length > 0 && e[e.length - 1].separator && e.pop(), e;
355
355
  }
356
- function It(a, e) {
356
+ function Ft(a, e) {
357
357
  return a.disabled === !0 ? !0 : typeof a.disabled == "function" ? a.disabled(e) : !1;
358
358
  }
359
- function be(a, e, t, i = vt.submenuArrow) {
359
+ function we(a, e, t, i = yt.submenuArrow) {
360
360
  const n = document.createElement("div");
361
361
  n.className = "tbw-context-menu", n.setAttribute("role", "menu");
362
362
  const r = a.some((o) => !o.separator && o.icon);
@@ -368,7 +368,7 @@ function be(a, e, t, i = vt.submenuArrow) {
368
368
  }
369
369
  const s = document.createElement("div");
370
370
  s.className = "tbw-context-menu-item", o.cssClass && s.classList.add(o.cssClass), s.setAttribute("role", "menuitem"), s.setAttribute("data-id", o.id);
371
- const l = It(o, e);
371
+ const l = Ft(o, e);
372
372
  if (l && (s.classList.add("disabled"), s.setAttribute("aria-disabled", "true")), o.icon) {
373
373
  const c = document.createElement("span");
374
374
  c.className = "tbw-context-menu-icon", c.innerHTML = o.icon, s.appendChild(c);
@@ -395,7 +395,7 @@ function be(a, e, t, i = vt.submenuArrow) {
395
395
  const c = document.createElement("span");
396
396
  c.className = "tbw-context-menu-arrow", typeof i == "string" ? c.innerHTML = i : i instanceof HTMLElement && c.appendChild(i.cloneNode(!0)), s.appendChild(c), s.addEventListener("mouseenter", () => {
397
397
  if (s.querySelector(".tbw-context-menu") || !o.subMenu) return;
398
- const h = me(o.subMenu, e), f = be(h, e, t, i);
398
+ const h = be(o.subMenu, e), f = we(h, e, t, i);
399
399
  f.classList.add("tbw-context-submenu"), f.style.position = "absolute", f.style.left = "100%", f.style.top = "0", s.style.position = "relative", s.appendChild(f);
400
400
  }), s.addEventListener("mouseleave", () => {
401
401
  const u = s.querySelector(".tbw-context-menu");
@@ -408,15 +408,15 @@ function be(a, e, t, i = vt.submenuArrow) {
408
408
  }
409
409
  return n;
410
410
  }
411
- function Pe(a, e, t) {
411
+ function Me(a, e, t) {
412
412
  a.style.position = "fixed", a.style.left = `${e}px`, a.style.top = `${t}px`, a.style.visibility = "hidden", a.style.zIndex = "10000";
413
413
  const i = a.getBoundingClientRect(), n = window.innerWidth, r = window.innerHeight;
414
414
  let o = e, s = t;
415
415
  e + i.width > n && (o = e - i.width), t + i.height > r && (s = t - i.height), o = Math.max(0, o), s = Math.max(0, s), a.style.left = `${o}px`, a.style.top = `${s}px`, a.style.visibility = "visible";
416
416
  }
417
417
  const De = "getContextMenuItems";
418
- let V = null, $ = null, K = null, le = 0;
419
- const de = [
418
+ let V = null, $ = null, K = null, de = 0;
419
+ const ce = [
420
420
  {
421
421
  id: "copy",
422
422
  name: "Copy",
@@ -434,7 +434,7 @@ const de = [
434
434
  }
435
435
  }
436
436
  ];
437
- class lt extends I {
437
+ class dt extends F {
438
438
  static manifest = {
439
439
  queries: [
440
440
  {
@@ -446,7 +446,7 @@ class lt extends I {
446
446
  name = "contextMenu";
447
447
  get defaultConfig() {
448
448
  return {
449
- items: de
449
+ items: ce
450
450
  };
451
451
  }
452
452
  isOpen = !1;
@@ -454,7 +454,7 @@ class lt extends I {
454
454
  params = null;
455
455
  menuElement = null;
456
456
  attach(e) {
457
- super.attach(e), this.installGlobalHandlers(), le++;
457
+ super.attach(e), this.installGlobalHandlers(), de++;
458
458
  }
459
459
  detach() {
460
460
  this.menuElement && (this.menuElement.remove(), this.menuElement = null), this.isOpen = !1, this.params = null, this.uninstallGlobalHandlers();
@@ -504,7 +504,7 @@ class lt extends I {
504
504
  if (!t) return;
505
505
  const i = getComputedStyle(t), n = [], r = i.getPropertyValue("color-scheme").trim();
506
506
  r && n.push(`color-scheme: ${r}`);
507
- for (const o of lt.CSS_VARS_TO_COPY) {
507
+ for (const o of dt.CSS_VARS_TO_COPY) {
508
508
  const s = i.getPropertyValue(o).trim();
509
509
  s && n.push(`${o}: ${s}`);
510
510
  }
@@ -514,14 +514,14 @@ class lt extends I {
514
514
  }
515
515
  }
516
516
  installGlobalHandlers() {
517
- !K && typeof document < "u" && typeof ae == "string" && ae && (K = document.createElement("style"), K.id = "tbw-context-menu-styles", K.textContent = ae, document.head.appendChild(K)), V || (V = () => {
517
+ !K && typeof document < "u" && typeof le == "string" && le && (K = document.createElement("style"), K.id = "tbw-context-menu-styles", K.textContent = le, document.head.appendChild(K)), V || (V = () => {
518
518
  document.querySelectorAll(".tbw-context-menu").forEach((t) => t.remove());
519
519
  }, document.addEventListener("click", V)), $ || ($ = (e) => {
520
520
  e.key === "Escape" && document.querySelectorAll(".tbw-context-menu").forEach((i) => i.remove());
521
521
  }, document.addEventListener("keydown", $));
522
522
  }
523
523
  uninstallGlobalHandlers() {
524
- le--, !(le > 0) && (V && (document.removeEventListener("click", V), V = null), $ && (document.removeEventListener("keydown", $), $ = null), K && (K.remove(), K = null));
524
+ de--, !(de > 0) && (V && (document.removeEventListener("click", V), V = null), $ && (document.removeEventListener("keydown", $), $ = null), K && (K.remove(), K = null));
525
525
  }
526
526
  collectPluginItems(e) {
527
527
  if (!this.grid) return [];
@@ -601,19 +601,19 @@ class lt extends I {
601
601
  return;
602
602
  this.params = l, this.position = { x: n.clientX, y: n.clientY };
603
603
  const d = this.collectPluginItems(l);
604
- let c = me(this.config.items ?? de, l);
604
+ let c = be(this.config.items ?? ce, l);
605
605
  if (d.length > 0) {
606
606
  const u = this.convertPluginItems(d);
607
607
  c.length > 0 && u.length > 0 ? c = [...c, { id: "__plugin-sep", name: "", separator: !0 }, ...u] : c = [...c, ...u];
608
608
  }
609
- c = Fe(c), c.length && (this.menuElement && this.menuElement.remove(), this.menuElement = be(
609
+ c = Pe(c), c.length && (this.menuElement && this.menuElement.remove(), this.menuElement = we(
610
610
  c,
611
611
  l,
612
612
  (u) => {
613
613
  u.action && u.action(l), this.menuElement?.remove(), this.menuElement = null, this.isOpen = !1;
614
614
  },
615
615
  this.gridIcons.submenuArrow
616
- ), document.body.appendChild(this.menuElement), this.copyGridStyles(this.menuElement), Pe(this.menuElement, n.clientX, n.clientY), this.isOpen = !0, this.emit("context-menu-open", { params: l, items: c }));
616
+ ), document.body.appendChild(this.menuElement), this.copyGridStyles(this.menuElement), Me(this.menuElement, n.clientX, n.clientY), this.isOpen = !0, this.emit("context-menu-open", { params: l, items: c }));
617
617
  }));
618
618
  }
619
619
  showMenu(e, t, i) {
@@ -628,19 +628,19 @@ class lt extends I {
628
628
  event: i.event ?? new MouseEvent("contextmenu"),
629
629
  selectedRows: i.selectedRows ?? []
630
630
  }, r = this.collectPluginItems(n);
631
- let o = me(this.config.items ?? de, n);
631
+ let o = be(this.config.items ?? ce, n);
632
632
  if (r.length > 0) {
633
633
  const s = this.convertPluginItems(r);
634
634
  o.length > 0 && s.length > 0 ? o = [...o, { id: "__plugin-sep", name: "", separator: !0 }, ...s] : o = [...o, ...s];
635
635
  }
636
- o = Fe(o), this.menuElement && this.menuElement.remove(), this.menuElement = be(
636
+ o = Pe(o), this.menuElement && this.menuElement.remove(), this.menuElement = we(
637
637
  o,
638
638
  n,
639
639
  (s) => {
640
640
  s.action && s.action(n), this.menuElement?.remove(), this.menuElement = null, this.isOpen = !1;
641
641
  },
642
642
  this.gridIcons.submenuArrow
643
- ), document.body.appendChild(this.menuElement), this.copyGridStyles(this.menuElement), Pe(this.menuElement, e, t), this.isOpen = !0;
643
+ ), document.body.appendChild(this.menuElement), this.copyGridStyles(this.menuElement), Me(this.menuElement, e, t), this.isOpen = !0;
644
644
  }
645
645
  hideMenu() {
646
646
  this.menuElement && (this.menuElement.remove(), this.menuElement = null, this.isOpen = !1);
@@ -649,8 +649,8 @@ class lt extends I {
649
649
  return this.isOpen;
650
650
  }
651
651
  }
652
- const Ft = "@layer tbw-plugins{tbw-grid{--tbw-editing-bg: var(--tbw-color-selection);--tbw-editing-row-bg: var(--tbw-editing-bg);--tbw-editing-border: var(--tbw-border-input, 1px solid var(--tbw-color-border-strong));--tbw-padding-editing-input: var(--tbw-cell-padding-input, 2px 6px);--tbw-font-size-editor: inherit;--tbw-editing-row-outline-color: var(--tbw-color-accent);--tbw-editing-row-outline-width: 1px;&:not(.tbw-grid-mode) .data-grid-row:has(.editing){background:var(--tbw-editing-row-bg);outline:var(--tbw-editing-row-outline-width) solid var(--tbw-editing-row-outline-color);outline-offset:calc(-1 * var(--tbw-editing-row-outline-width))}.data-grid-row>.cell.editing{overflow:hidden;padding:0;display:flex;min-height:calc(var(--tbw-row-height) + 2px);align-items:center;justify-content:center}.data-grid-row>.cell.editing input:not([type=checkbox]),.data-grid-row>.cell.editing select,.data-grid-row>.cell.editing textarea{width:100%;height:100%;flex:1 1 auto;min-width:0;border:var(--tbw-editing-border);padding:var(--tbw-padding-editing-input);font-size:var(--tbw-font-size-editor)}.tbw-editor-host{display:contents}--tbw-invalid-bg: light-dark(#fef2f2, #450a0a);--tbw-invalid-border-color: light-dark(#ef4444, #f87171);.data-grid-row>.cell[data-invalid=true]{background:var(--tbw-invalid-bg);outline:1px solid var(--tbw-invalid-border-color);outline-offset:-1px}}}";
653
- function Pt(a) {
652
+ const Pt = "@layer tbw-plugins{tbw-grid{--tbw-editing-bg: var(--tbw-color-selection);--tbw-editing-row-bg: var(--tbw-editing-bg);--tbw-editing-border: var(--tbw-border-input, 1px solid var(--tbw-color-border-strong));--tbw-padding-editing-input: var(--tbw-cell-padding-input, 2px 6px);--tbw-font-size-editor: inherit;--tbw-editing-row-outline-color: var(--tbw-color-accent);--tbw-editing-row-outline-width: 1px;&:not(.tbw-grid-mode) .data-grid-row:has(.editing){background:var(--tbw-editing-row-bg);outline:var(--tbw-editing-row-outline-width) solid var(--tbw-editing-row-outline-color);outline-offset:calc(-1 * var(--tbw-editing-row-outline-width))}.data-grid-row>.cell.editing{overflow:hidden;padding:0;display:flex;min-height:calc(var(--tbw-row-height) + 2px);align-items:center;justify-content:center}.data-grid-row>.cell.editing input:not([type=checkbox]),.data-grid-row>.cell.editing select,.data-grid-row>.cell.editing textarea{width:100%;height:100%;flex:1 1 auto;min-width:0;border:var(--tbw-editing-border);padding:var(--tbw-padding-editing-input);font-size:var(--tbw-font-size-editor)}.tbw-editor-host{display:contents}--tbw-invalid-bg: light-dark(#fef2f2, #450a0a);--tbw-invalid-border-color: light-dark(#ef4444, #f87171);.data-grid-row>.cell[data-invalid=true]{background:var(--tbw-invalid-bg);outline:1px solid var(--tbw-invalid-border-color);outline-offset:-1px}}}";
653
+ function Mt(a) {
654
654
  const e = a.options;
655
655
  return e ? typeof e == "function" ? e() : e : [];
656
656
  }
@@ -664,13 +664,13 @@ function Dt(a) {
664
664
  }), i;
665
665
  };
666
666
  }
667
- function Mt() {
667
+ function qt() {
668
668
  return (a) => {
669
669
  const e = document.createElement("input");
670
670
  return e.type = "checkbox", e.checked = !!a.value, e.addEventListener("change", () => a.commit(e.checked)), e;
671
671
  };
672
672
  }
673
- function qt(a) {
673
+ function Nt(a) {
674
674
  return (e) => {
675
675
  const t = a.editorParams, i = document.createElement("input");
676
676
  i.type = "date", e.value instanceof Date ? i.valueAsDate = e.value : typeof e.value == "string" && e.value && (i.value = e.value.split("T")[0]), t?.min && (i.min = t.min), t?.max && (i.max = t.max), t?.placeholder && (i.placeholder = t.placeholder);
@@ -682,14 +682,14 @@ function qt(a) {
682
682
  }), i;
683
683
  };
684
684
  }
685
- function Nt(a) {
685
+ function Ht(a) {
686
686
  return (e) => {
687
687
  const t = a.editorParams, i = document.createElement("select");
688
688
  if (a.multi && (i.multiple = !0), t?.includeEmpty) {
689
689
  const o = document.createElement("option");
690
690
  o.value = "", o.textContent = t.emptyLabel ?? "", i.appendChild(o);
691
691
  }
692
- Pt(a).forEach((o) => {
692
+ Mt(a).forEach((o) => {
693
693
  const s = document.createElement("option");
694
694
  s.value = String(o.value), s.textContent = o.label, (a.multi && Array.isArray(e.value) && e.value.includes(o.value) || !a.multi && e.value === o.value) && (s.selected = !0), i.appendChild(s);
695
695
  });
@@ -705,7 +705,7 @@ function Nt(a) {
705
705
  }), i;
706
706
  };
707
707
  }
708
- function Ht(a) {
708
+ function Gt(a) {
709
709
  return (e) => {
710
710
  const t = a.editorParams, i = document.createElement("input");
711
711
  i.type = "text", i.value = e.value != null ? String(e.value) : "", t?.maxLength !== void 0 && (i.maxLength = t.maxLength), t?.pattern && (i.pattern = t.pattern), t?.placeholder && (i.placeholder = t.placeholder);
@@ -718,21 +718,21 @@ function Ht(a) {
718
718
  }), i;
719
719
  };
720
720
  }
721
- function Gt(a) {
721
+ function Kt(a) {
722
722
  switch (a.type) {
723
723
  case "number":
724
724
  return Dt(a);
725
725
  case "boolean":
726
- return Mt();
726
+ return qt();
727
727
  case "date":
728
- return qt(a);
729
- case "select":
730
728
  return Nt(a);
731
- default:
729
+ case "select":
732
730
  return Ht(a);
731
+ default:
732
+ return Gt(a);
733
733
  }
734
734
  }
735
- function Kt(a, e) {
735
+ function zt(a, e) {
736
736
  if (e.editor) return e.editor;
737
737
  if (e.__editorTemplate) return "template";
738
738
  if (!e.type) return;
@@ -749,25 +749,25 @@ function Kt(a, e) {
749
749
  function Z(a) {
750
750
  return !(typeof a != "string" || a === "__proto__" || a === "constructor" || a === "prototype");
751
751
  }
752
- function zt(a) {
752
+ function Ot(a) {
753
753
  const e = (a.__editingCellCount ?? 0) + 1;
754
754
  a.__editingCellCount = e, a.setAttribute("data-has-editing", "");
755
755
  }
756
- function Ot(a) {
756
+ function Bt(a) {
757
757
  a.__editingCellCount = 0, a.removeAttribute("data-has-editing");
758
758
  }
759
759
  function Y(a, e, t) {
760
760
  return a instanceof HTMLInputElement ? a.type === "checkbox" ? a.checked : a.type === "number" ? a.value === "" ? null : Number(a.value) : a.type === "date" ? typeof t == "string" ? a.value : a.valueAsDate : typeof t == "number" ? a.value === "" ? null : Number(a.value) : t == null && a.value === "" || typeof t == "string" && a.value === t.replace(/[\n\r]/g, "") ? t : a.value : e?.type === "number" && a.value !== "" || typeof t == "number" && a.value !== "" ? Number(a.value) : t == null && a.value === "" ? t : a.value;
761
761
  }
762
- function Me(a) {
762
+ function qe(a) {
763
763
  }
764
- function Bt(a, e, t, i) {
764
+ function Vt(a, e, t, i) {
765
765
  const n = a.querySelector("input,textarea,select");
766
766
  n && (n.addEventListener("blur", () => {
767
767
  t(Y(n, e, i));
768
768
  }), n instanceof HTMLInputElement && n.type === "checkbox" ? n.addEventListener("change", () => t(n.checked)) : n instanceof HTMLSelectElement && n.addEventListener("change", () => t(Y(n, e, i))));
769
769
  }
770
- class Tn extends I {
770
+ class Fn extends F {
771
771
  static manifest = {
772
772
  ownedProperties: [
773
773
  {
@@ -801,7 +801,7 @@ class Tn extends I {
801
801
  ]
802
802
  };
803
803
  name = "editing";
804
- styles = Ft;
804
+ styles = Pt;
805
805
  get defaultConfig() {
806
806
  return {
807
807
  mode: "row",
@@ -812,17 +812,19 @@ class Tn extends I {
812
812
  return this.config.mode === "grid";
813
813
  }
814
814
  #e = -1;
815
- #o = -1;
816
- #r = /* @__PURE__ */ new Map();
817
- #i = /* @__PURE__ */ new Set();
818
- #n = /* @__PURE__ */ new Set();
819
- #s = /* @__PURE__ */ new Map();
820
- #u = !1;
821
- #h = -1;
815
+ #o;
816
+ #s;
817
+ #i = -1;
818
+ #n = /* @__PURE__ */ new Map();
819
+ #r = /* @__PURE__ */ new Set();
820
+ #l = /* @__PURE__ */ new Set();
821
+ #f = /* @__PURE__ */ new Map();
822
+ #b = !1;
823
+ #p = -1;
822
824
  #a = /* @__PURE__ */ new Map();
823
- #l = !1;
825
+ #c = !1;
826
+ #d = !1;
824
827
  #g = !1;
825
- #m = !1;
826
828
  attach(e) {
827
829
  super.attach(e);
828
830
  const t = this.disconnectSignal, i = e;
@@ -840,7 +842,7 @@ class Tn extends I {
840
842
  if (!this.#t && n.key === "Escape" && this.#e !== -1) {
841
843
  if (this.config.onBeforeEditClose && this.config.onBeforeEditClose(n) === !1)
842
844
  return;
843
- this.#d(this.#e, !0);
845
+ this.#h(this.#e, !0);
844
846
  }
845
847
  },
846
848
  { capture: !0, signal: t }
@@ -850,7 +852,7 @@ class Tn extends I {
850
852
  if (this.#t || this.#e === -1) return;
851
853
  const r = i.findRenderedRowElement?.(this.#e);
852
854
  !r || (n.composedPath && n.composedPath() || []).includes(r) || this.config.onBeforeEditClose && this.config.onBeforeEditClose(n) === !1 || queueMicrotask(() => {
853
- this.#e !== -1 && this.#d(this.#e, !1);
855
+ this.#e !== -1 && this.#h(this.#e, !1);
854
856
  });
855
857
  },
856
858
  { signal: t }
@@ -859,7 +861,7 @@ class Tn extends I {
859
861
  (n) => {
860
862
  const r = n.detail;
861
863
  if (r.source === "user") return;
862
- const o = `${r.rowIndex}:${r.field}`, s = this.#s.get(o);
864
+ const o = `${r.rowIndex}:${r.field}`, s = this.#f.get(o);
863
865
  s && s(r.newValue);
864
866
  },
865
867
  { signal: t }
@@ -868,11 +870,11 @@ class Tn extends I {
868
870
  (n) => {
869
871
  const r = n.target;
870
872
  if (r.matches(G)) {
871
- if (this.#g) {
873
+ if (this.#d) {
872
874
  r.blur(), this.gridElement.focus();
873
875
  return;
874
876
  }
875
- this.#l = !0;
877
+ this.#c = !0;
876
878
  }
877
879
  },
878
880
  { signal: t }
@@ -880,31 +882,31 @@ class Tn extends I {
880
882
  "focusout",
881
883
  (n) => {
882
884
  const r = n.relatedTarget;
883
- (!r || !this.gridElement.contains(r) || !r.matches(G)) && (this.#l = !1);
885
+ (!r || !this.gridElement.contains(r) || !r.matches(G)) && (this.#c = !1);
884
886
  },
885
887
  { signal: t }
886
888
  ), this.gridElement.addEventListener(
887
889
  "keydown",
888
890
  (n) => {
889
- if (n.key === "Escape" && this.#l) {
891
+ if (n.key === "Escape" && this.#c) {
890
892
  if (this.config.onBeforeEditClose && this.config.onBeforeEditClose(n) === !1)
891
893
  return;
892
894
  const r = document.activeElement;
893
- r && this.gridElement.contains(r) && (r.blur(), this.gridElement.focus()), this.#l = !1, this.#g = !0, n.preventDefault(), n.stopPropagation();
895
+ r && this.gridElement.contains(r) && (r.blur(), this.gridElement.focus()), this.#c = !1, this.#d = !0, n.preventDefault(), n.stopPropagation();
894
896
  }
895
897
  },
896
898
  { capture: !0, signal: t }
897
899
  ), this.gridElement.addEventListener(
898
900
  "mousedown",
899
901
  (n) => {
900
- n.target.matches(G) && (this.#g = !1);
902
+ n.target.matches(G) && (this.#d = !1);
901
903
  },
902
904
  { signal: t }
903
905
  ));
904
906
  }
905
907
  detach() {
906
908
  const e = this.gridElement;
907
- e._isGridEditMode = !1, this.gridElement.classList.remove("tbw-grid-mode"), this.#e = -1, this.#o = -1, this.#r.clear(), this.#i.clear(), this.#n.clear(), this.#s.clear(), this.#l = !1, this.#g = !1, this.#m = !1, super.detach();
909
+ e._isGridEditMode = !1, this.gridElement.classList.remove("tbw-grid-mode"), this.#e = -1, this.#o = void 0, this.#s = void 0, this.#i = -1, this.#n.clear(), this.#r.clear(), this.#l.clear(), this.#f.clear(), this.#c = !1, this.#d = !1, this.#g = !1, super.detach();
908
910
  }
909
911
  handleQuery(e) {
910
912
  if (e.type === "isEditing")
@@ -922,30 +924,30 @@ class Tn extends I {
922
924
  onKeyDown(e) {
923
925
  const t = this.grid;
924
926
  if (e.key === "Escape") {
925
- if (this.#t && this.#l) {
927
+ if (this.#t && this.#c) {
926
928
  if (this.config.onBeforeEditClose && this.config.onBeforeEditClose(e) === !1)
927
929
  return !0;
928
930
  const i = document.activeElement;
929
- return i && this.gridElement.contains(i) && i.blur(), this.#l = !1, this.requestAfterRender(), !0;
931
+ return i && this.gridElement.contains(i) && i.blur(), this.#c = !1, this.requestAfterRender(), !0;
930
932
  }
931
933
  if (this.#e !== -1 && !this.#t)
932
- return this.config.onBeforeEditClose && this.config.onBeforeEditClose(e) === !1 || this.#d(this.#e, !0), !0;
934
+ return this.config.onBeforeEditClose && this.config.onBeforeEditClose(e) === !1 || this.#h(this.#e, !0), !0;
933
935
  }
934
- if (this.#t && !this.#l && (e.key === "ArrowUp" || e.key === "ArrowDown" || e.key === "ArrowLeft" || e.key === "ArrowRight"))
936
+ if (this.#t && !this.#c && (e.key === "ArrowUp" || e.key === "ArrowDown" || e.key === "ArrowLeft" || e.key === "ArrowRight"))
935
937
  return !1;
936
- if (this.#t && this.#l && (e.key === "ArrowUp" || e.key === "ArrowDown"))
938
+ if (this.#t && this.#c && (e.key === "ArrowUp" || e.key === "ArrowDown"))
937
939
  return !0;
938
940
  if ((e.key === "ArrowUp" || e.key === "ArrowDown") && this.#e !== -1 && !this.#t) {
939
941
  if (this.config.onBeforeEditClose && this.config.onBeforeEditClose(e) === !1)
940
942
  return !0;
941
943
  const i = t._rows.length - 1, n = this.#e;
942
- return this.#d(n, !1), e.key === "ArrowDown" ? t._focusRow = Math.min(i, t._focusRow + 1) : t._focusRow = Math.max(0, t._focusRow - 1), e.preventDefault(), M(t), this.requestAfterRender(), !0;
944
+ return this.#h(n, !1), e.key === "ArrowDown" ? t._focusRow = Math.min(i, t._focusRow + 1) : t._focusRow = Math.max(0, t._focusRow - 1), e.preventDefault(), q(t), this.requestAfterRender(), !0;
943
945
  }
944
946
  if (e.key === "Tab" && (this.#e !== -1 || this.#t)) {
945
- if (e.preventDefault(), this.#m)
946
- return this.#d(this.#e, !1), !0;
947
+ if (e.preventDefault(), this.#g)
948
+ return this.#h(this.#e, !1), !0;
947
949
  const i = !e.shiftKey;
948
- return this.#p(i), !0;
950
+ return this.#C(i), !0;
949
951
  }
950
952
  if (e.key === " " || e.key === "Spacebar") {
951
953
  if (this.#e !== -1)
@@ -957,15 +959,15 @@ class Tn extends I {
957
959
  const s = r.field;
958
960
  if (Z(s)) {
959
961
  const d = !o[s];
960
- return this.#v(i, r, d, o), e.preventDefault(), this.requestRender(), !0;
962
+ return this.#E(i, r, d, o), e.preventDefault(), this.requestRender(), !0;
961
963
  }
962
964
  }
963
965
  }
964
966
  return !1;
965
967
  }
966
968
  if (e.key === "Enter" && !e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) {
967
- if (this.#t && !this.#l)
968
- return this.#f(), !0;
969
+ if (this.#t && !this.#c)
970
+ return this.#x(), !0;
969
971
  if (this.#e !== -1)
970
972
  return !!(this.config.onBeforeEditClose && this.config.onBeforeEditClose(e) === !1);
971
973
  const i = this.config.editOn ?? t.effectiveConfig?.editOn;
@@ -1025,83 +1027,83 @@ class Tn extends I {
1025
1027
  }
1026
1028
  afterRender() {
1027
1029
  const e = this.grid;
1028
- if (this.#u && (this.#u = !1, this.#E(e)), this.#h !== -1) {
1029
- const t = this.#h;
1030
- this.#h = -1, e.animateRow?.(t, "change");
1030
+ if (this.#b && (this.#b = !1, this.#S(e)), this.#p !== -1) {
1031
+ const t = this.#p;
1032
+ this.#p = -1, e.animateRow?.(t, "change");
1031
1033
  }
1032
- if (!this.#t && this.#n.size !== 0)
1033
- for (const t of this.#n) {
1034
+ if (!this.#t && this.#l.size !== 0)
1035
+ for (const t of this.#l) {
1034
1036
  const [i, n] = t.split(":"), r = parseInt(i, 10), o = parseInt(n, 10), s = e.findRenderedRowElement?.(r);
1035
1037
  if (!s) continue;
1036
1038
  const l = s.querySelector(`.cell[data-col="${o}"]`);
1037
1039
  if (!l || l.classList.contains("editing")) continue;
1038
1040
  const d = e._rows[r], c = e._visibleColumns[o];
1039
- d && c && this.#x(d, r, c, o, l, !0);
1041
+ d && c && this.#v(d, r, c, o, l, !0);
1040
1042
  }
1041
1043
  }
1042
1044
  afterCellRender(e) {
1043
1045
  if (!this.#t) return;
1044
1046
  const { row: t, rowIndex: i, column: n, colIndex: r, cellElement: o } = e;
1045
- n.editable && (o.classList.contains("editing") || this.#x(t, i, n, r, o, !0));
1047
+ n.editable && (o.classList.contains("editing") || this.#v(t, i, n, r, o, !0));
1046
1048
  }
1047
1049
  onScrollRender() {
1048
1050
  this.afterRender();
1049
1051
  }
1050
1052
  get changedRows() {
1051
1053
  const e = [];
1052
- for (const t of this.#i) {
1054
+ for (const t of this.#r) {
1053
1055
  const i = this.grid.getRow(t);
1054
1056
  i && e.push(i);
1055
1057
  }
1056
1058
  return e;
1057
1059
  }
1058
1060
  get changedRowIds() {
1059
- return Array.from(this.#i);
1061
+ return Array.from(this.#r);
1060
1062
  }
1061
1063
  get activeEditRow() {
1062
1064
  return this.#e;
1063
1065
  }
1064
1066
  get activeEditCol() {
1065
- return this.#o;
1067
+ return this.#i;
1066
1068
  }
1067
1069
  isRowEditing(e) {
1068
1070
  return this.#e === e;
1069
1071
  }
1070
1072
  isCellEditing(e, t) {
1071
- return this.#n.has(`${e}:${t}`);
1073
+ return this.#l.has(`${e}:${t}`);
1072
1074
  }
1073
1075
  isRowChanged(e) {
1074
1076
  const t = this.grid, i = t._rows[e];
1075
1077
  if (!i) return !1;
1076
1078
  try {
1077
1079
  const n = t.getRowId?.(i);
1078
- return n ? this.#i.has(n) : !1;
1080
+ return n ? this.#r.has(n) : !1;
1079
1081
  } catch {
1080
1082
  return !1;
1081
1083
  }
1082
1084
  }
1083
1085
  isRowChangedById(e) {
1084
- return this.#i.has(e);
1086
+ return this.#r.has(e);
1085
1087
  }
1086
1088
  setInvalid(e, t, i = "") {
1087
1089
  let n = this.#a.get(e);
1088
- n || (n = /* @__PURE__ */ new Map(), this.#a.set(e, n)), n.set(t, i), this.#c(e, t, !0);
1090
+ n || (n = /* @__PURE__ */ new Map(), this.#a.set(e, n)), n.set(t, i), this.#u(e, t, !0);
1089
1091
  }
1090
1092
  clearInvalid(e, t) {
1091
1093
  const i = this.#a.get(e);
1092
- i && (i.delete(t), i.size === 0 && this.#a.delete(e)), this.#c(e, t, !1);
1094
+ i && (i.delete(t), i.size === 0 && this.#a.delete(e)), this.#u(e, t, !1);
1093
1095
  }
1094
1096
  clearRowInvalid(e) {
1095
1097
  const t = this.#a.get(e);
1096
1098
  if (t) {
1097
1099
  const i = Array.from(t.keys());
1098
- this.#a.delete(e), i.forEach((n) => this.#c(e, n, !1));
1100
+ this.#a.delete(e), i.forEach((n) => this.#u(e, n, !1));
1099
1101
  }
1100
1102
  }
1101
1103
  clearAllInvalid() {
1102
1104
  const e = Array.from(this.#a.entries());
1103
1105
  this.#a.clear(), e.forEach(([t, i]) => {
1104
- i.forEach((n, r) => this.#c(t, r, !1));
1106
+ i.forEach((n, r) => this.#u(t, r, !1));
1105
1107
  });
1106
1108
  }
1107
1109
  isCellInvalid(e, t) {
@@ -1117,7 +1119,7 @@ class Tn extends I {
1117
1119
  getInvalidFields(e) {
1118
1120
  return new Map(this.#a.get(e) ?? []);
1119
1121
  }
1120
- #c(e, t, i) {
1122
+ #u(e, t, i) {
1121
1123
  const n = this.grid, r = n._visibleColumns?.findIndex((c) => c.field === t);
1122
1124
  if (r === -1 || r === void 0) return;
1123
1125
  const s = n._rows?.findIndex((c) => {
@@ -1139,26 +1141,26 @@ class Tn extends I {
1139
1141
  }
1140
1142
  resetChangedRows(e) {
1141
1143
  const t = this.changedRows, i = this.changedRowIds;
1142
- this.#i.clear(), this.#b(), e || this.emit("changed-rows-reset", { rows: t, ids: i }), this.grid._rowPool?.forEach((r) => r.classList.remove("changed"));
1144
+ this.#r.clear(), this.#w(), e || this.emit("changed-rows-reset", { rows: t, ids: i }), this.grid._rowPool?.forEach((r) => r.classList.remove("changed"));
1143
1145
  }
1144
1146
  beginCellEdit(e, t) {
1145
1147
  const i = this.grid, n = i._visibleColumns.findIndex((l) => l.field === t);
1146
1148
  if (n === -1 || !i._visibleColumns[n]?.editable) return;
1147
1149
  const s = i.findRenderedRowElement?.(e)?.querySelector(`.cell[data-col="${n}"]`);
1148
- s && (this.#m = !0, this.#w(e, n, s));
1150
+ s && (this.#g = !0, this.#m(e, n, s));
1149
1151
  }
1150
1152
  beginBulkEdit(e) {
1151
1153
  const t = this.grid;
1152
1154
  if ((this.config.editOn ?? t.effectiveConfig?.editOn) === !1 || !t._columns?.some((s) => s.editable)) return;
1153
1155
  const r = t.findRenderedRowElement?.(e);
1154
1156
  if (!r) return;
1155
- this.#m = !1;
1157
+ this.#g = !1;
1156
1158
  const o = t._rows[e];
1157
1159
  this.#y(e, o), Array.from(r.children).forEach((s, l) => {
1158
1160
  const d = t._visibleColumns[l];
1159
1161
  if (d?.editable) {
1160
1162
  const c = s;
1161
- c.classList.contains("editing") || this.#x(o, e, d, l, c, !0);
1163
+ c.classList.contains("editing") || this.#v(o, e, d, l, c, !0);
1162
1164
  }
1163
1165
  }), setTimeout(() => {
1164
1166
  let s = r.querySelector(`.cell[data-col="${t._focusCol}"]`);
@@ -1172,113 +1174,115 @@ class Tn extends I {
1172
1174
  }, 0);
1173
1175
  }
1174
1176
  commitActiveRowEdit() {
1175
- this.#e !== -1 && this.#d(this.#e, !1);
1177
+ this.#e !== -1 && this.#h(this.#e, !1);
1176
1178
  }
1177
1179
  cancelActiveRowEdit() {
1178
- this.#e !== -1 && this.#d(this.#e, !0);
1180
+ this.#e !== -1 && this.#h(this.#e, !0);
1179
1181
  }
1180
- #w(e, t, i) {
1182
+ #m(e, t, i) {
1181
1183
  const n = this.grid, r = n._rows[e], o = n._visibleColumns[t];
1182
- !r || !o?.editable || i.classList.contains("editing") || (this.#e !== e && this.#y(e, r), this.#o = t, this.#x(r, e, o, t, i, !1));
1184
+ !r || !o?.editable || i.classList.contains("editing") || (this.#e !== e && this.#y(e, r), this.#i = t, this.#v(r, e, o, t, i, !1));
1183
1185
  }
1184
- #f() {
1186
+ #x() {
1185
1187
  const e = this.grid, t = e._focusRow, i = e._focusCol;
1186
1188
  if (t < 0 || i < 0) return;
1187
1189
  const r = e.findRenderedRowElement?.(t)?.querySelector(`.cell[data-col="${i}"]`);
1188
1190
  if (r?.classList.contains("editing")) {
1189
1191
  const o = r.querySelector(G);
1190
- o && (this.#g = !1, o.focus(), this.#l = !0, o instanceof HTMLInputElement && (o.type === "text" || o.type === "number") && o.select());
1192
+ o && (this.#d = !1, o.focus(), this.#c = !0, o instanceof HTMLInputElement && (o.type === "text" || o.type === "number") && o.select());
1191
1193
  }
1192
1194
  }
1193
- #p(e) {
1195
+ #C(e) {
1194
1196
  const t = this.grid, i = t._rows, n = this.#t ? t._focusRow : this.#e, r = t._visibleColumns.map((d, c) => d.editable ? c : -1).filter((d) => d >= 0);
1195
1197
  if (r.length === 0) return;
1196
1198
  const s = r.indexOf(t._focusCol) + (e ? 1 : -1);
1197
1199
  if (s >= 0 && s < r.length) {
1198
1200
  t._focusCol = r[s];
1199
1201
  const c = t.findRenderedRowElement?.(n)?.querySelector(`.cell[data-col="${r[s]}"]`);
1200
- c?.classList.contains("editing") && c.querySelector(G)?.focus({ preventScroll: !0 }), M(t, { forceHorizontalScroll: !0 });
1202
+ c?.classList.contains("editing") && c.querySelector(G)?.focus({ preventScroll: !0 }), q(t, { forceHorizontalScroll: !0 });
1201
1203
  return;
1202
1204
  }
1203
1205
  const l = n + (e ? 1 : -1);
1204
- l >= 0 && l < i.length && (this.#t ? (t._focusRow = l, t._focusCol = e ? r[0] : r[r.length - 1], M(t, { forceHorizontalScroll: !0 }), this.requestAfterRender(), setTimeout(() => {
1206
+ l >= 0 && l < i.length && (this.#t ? (t._focusRow = l, t._focusCol = e ? r[0] : r[r.length - 1], q(t, { forceHorizontalScroll: !0 }), this.requestAfterRender(), setTimeout(() => {
1205
1207
  const c = t.findRenderedRowElement?.(l)?.querySelector(`.cell[data-col="${t._focusCol}"]`);
1206
1208
  c?.classList.contains("editing") && c.querySelector(G)?.focus({ preventScroll: !0 });
1207
- }, 0)) : (this.#d(n, !1), t._focusRow = l, t._focusCol = e ? r[0] : r[r.length - 1], this.beginBulkEdit(l), M(t, { forceHorizontalScroll: !0 })));
1209
+ }, 0)) : (this.#h(n, !1), t._focusRow = l, t._focusCol = e ? r[0] : r[r.length - 1], this.beginBulkEdit(l), q(t, { forceHorizontalScroll: !0 })));
1208
1210
  }
1209
- #b() {
1211
+ #w() {
1210
1212
  const e = this.grid;
1211
- e._activeEditRows = this.#e, e._rowEditSnapshots = this.#r;
1213
+ e._activeEditRows = this.#e, e._rowEditSnapshots = this.#n;
1212
1214
  }
1213
1215
  #y(e, t) {
1214
- if (this.#e !== e && (this.#r.set(e, { ...t }), this.#e = e, this.#b(), !this.#t)) {
1216
+ if (this.#e !== e) {
1217
+ this.#n.set(e, { ...t }), this.#e = e, this.#s = t;
1215
1218
  const i = this.grid;
1216
- let n = "";
1217
1219
  try {
1218
- n = i.getRowId?.(t) ?? "";
1220
+ this.#o = i.getRowId?.(t) ?? void 0;
1219
1221
  } catch {
1222
+ this.#o = void 0;
1220
1223
  }
1221
- this.emit("edit-open", {
1224
+ this.#w(), this.#t || this.emit("edit-open", {
1222
1225
  rowIndex: e,
1223
- rowId: n,
1226
+ rowId: this.#o ?? "",
1224
1227
  row: t
1225
1228
  });
1226
1229
  }
1227
1230
  }
1228
- #d(e, t) {
1231
+ #h(e, t) {
1229
1232
  if (this.#e !== e) return;
1230
- const i = this.grid, n = this.#r.get(e), r = i._rows[e], o = i.findRenderedRowElement?.(e);
1231
- let s;
1232
- if (r)
1233
+ const i = this.grid, n = this.#n.get(e), r = i.findRenderedRowElement?.(e);
1234
+ let o = this.#o;
1235
+ const l = (o ? i._getRowEntry(o) : void 0)?.row ?? this.#s ?? i._rows[e];
1236
+ if (!o && l)
1233
1237
  try {
1234
- s = i.getRowId?.(r);
1238
+ o = i.getRowId?.(l);
1235
1239
  } catch {
1236
1240
  }
1237
- if (!t && o && r && o.querySelectorAll(".cell.editing").forEach((d) => {
1238
- const c = Number(d.getAttribute("data-col"));
1239
- if (isNaN(c)) return;
1240
- const u = i._visibleColumns[c];
1241
- if (!u || d.hasAttribute("data-editor-managed"))
1241
+ if (!t && r && l && r.querySelectorAll(".cell.editing").forEach((c) => {
1242
+ const u = Number(c.getAttribute("data-col"));
1243
+ if (isNaN(u)) return;
1244
+ const h = i._visibleColumns[u];
1245
+ if (!h || c.hasAttribute("data-editor-managed"))
1242
1246
  return;
1243
- const h = d.querySelector("input,textarea,select");
1244
- if (h) {
1245
- const f = u.field, g = r[f], p = Y(h, u, g);
1246
- g !== p && this.#v(e, u, p, r);
1247
+ const f = c.querySelector("input,textarea,select");
1248
+ if (f) {
1249
+ const g = h.field, p = l[g], m = Y(f, h, p);
1250
+ p !== m && this.#E(e, h, m, l);
1247
1251
  }
1248
- }), t && n && r)
1249
- Object.keys(n).forEach((l) => {
1250
- r[l] = n[l];
1251
- }), s && (this.#i.delete(s), this.clearRowInvalid(s));
1252
- else if (!t && r) {
1253
- const l = this.#C(n, r), d = s ? this.#i.has(s) : l, c = this.emitCancelable("row-commit", {
1252
+ }), t && n && l)
1253
+ Object.keys(n).forEach((d) => {
1254
+ l[d] = n[d];
1255
+ }), o && (this.#r.delete(o), this.clearRowInvalid(o));
1256
+ else if (!t && l) {
1257
+ const d = this.#k(n, l), c = o ? this.#r.has(o) : d, u = this.emitCancelable("row-commit", {
1254
1258
  rowIndex: e,
1255
- rowId: s ?? "",
1256
- row: r,
1259
+ rowId: o ?? "",
1260
+ row: l,
1257
1261
  oldValue: n,
1258
- newValue: r,
1259
- changed: d,
1262
+ newValue: l,
1263
+ changed: c,
1260
1264
  changedRows: this.changedRows,
1261
1265
  changedRowIds: this.changedRowIds
1262
1266
  });
1263
- c && n ? (Object.keys(n).forEach((u) => {
1264
- r[u] = n[u];
1265
- }), s && (this.#i.delete(s), this.clearRowInvalid(s))) : !c && l && this.isAnimationEnabled && (this.#h = e);
1266
- }
1267
- this.#r.delete(e), this.#e = -1, this.#o = -1, this.#m = !1, this.#b();
1268
- for (const l of this.#n)
1269
- l.startsWith(`${e}:`) && this.#n.delete(l);
1270
- for (const l of this.#s.keys())
1271
- l.startsWith(`${e}:`) && this.#s.delete(l);
1272
- o && (o.querySelectorAll(".cell.editing").forEach((l) => {
1273
- l.classList.remove("editing"), Ot(l.parentElement);
1274
- }), this.requestRender()), this.#u = !0, o || (this.#E(i), this.#u = !1), !this.#t && r && this.emit("edit-close", {
1267
+ u && n ? (Object.keys(n).forEach((h) => {
1268
+ l[h] = n[h];
1269
+ }), o && (this.#r.delete(o), this.clearRowInvalid(o))) : !u && d && this.isAnimationEnabled && (this.#p = e);
1270
+ }
1271
+ this.#n.delete(e), this.#e = -1, this.#o = void 0, this.#s = void 0, this.#i = -1, this.#g = !1, this.#w();
1272
+ for (const d of this.#l)
1273
+ d.startsWith(`${e}:`) && this.#l.delete(d);
1274
+ for (const d of this.#f.keys())
1275
+ d.startsWith(`${e}:`) && this.#f.delete(d);
1276
+ this.#b = !0, r ? (r.querySelectorAll(".cell.editing").forEach((d) => {
1277
+ d.classList.remove("editing"), Bt(d.parentElement);
1278
+ }), i.refreshVirtualWindow(!0)) : (this.#S(i), this.#b = !1), !this.#t && l && this.emit("edit-close", {
1275
1279
  rowIndex: e,
1276
- rowId: s ?? "",
1277
- row: r,
1280
+ rowId: o ?? "",
1281
+ row: l,
1278
1282
  reverted: t
1279
1283
  });
1280
1284
  }
1281
- #v(e, t, i, n) {
1285
+ #E(e, t, i, n) {
1282
1286
  const r = t.field;
1283
1287
  if (!Z(r)) return;
1284
1288
  const o = n[r];
@@ -1289,7 +1293,7 @@ class Tn extends I {
1289
1293
  l = this.grid.getRowId(n);
1290
1294
  } catch {
1291
1295
  }
1292
- const d = l ? !this.#i.has(l) : !0, c = l ? (p) => this.grid.updateRow(l, p, "cascade") : Me;
1296
+ const d = l ? !this.#r.has(l) : !0, c = l ? (p) => this.grid.updateRow(l, p, "cascade") : qe;
1293
1297
  let u = !1;
1294
1298
  const h = l ? (p) => {
1295
1299
  u = !0, this.setInvalid(l, r, p ?? "");
@@ -1308,7 +1312,7 @@ class Tn extends I {
1308
1312
  updateRow: c,
1309
1313
  setInvalid: h
1310
1314
  })) return;
1311
- l && !u && this.isCellInvalid(l, r) && this.clearInvalid(l, r), n[r] = i, l && this.#i.add(l), this.#b(), this.emitPluginEvent("cell-edit-committed", {
1315
+ l && !u && this.isCellInvalid(l, r) && this.clearInvalid(l, r), n[r] = i, l && this.#r.add(l), this.#w(), this.emitPluginEvent("cell-edit-committed", {
1312
1316
  rowIndex: e,
1313
1317
  field: r,
1314
1318
  oldValue: o,
@@ -1317,26 +1321,26 @@ class Tn extends I {
1317
1321
  const g = s.findRenderedRowElement?.(e);
1318
1322
  g && g.classList.add("changed");
1319
1323
  }
1320
- #x(e, t, i, n, r, o) {
1324
+ #v(e, t, i, n, r, o) {
1321
1325
  if (!i.editable || r.classList.contains("editing")) return;
1322
1326
  let s;
1323
1327
  try {
1324
1328
  s = this.grid.getRowId(e);
1325
1329
  } catch {
1326
1330
  }
1327
- const l = s ? (b) => this.grid.updateRow(s, b, "cascade") : Me, d = Z(i.field) ? e[i.field] : void 0;
1328
- r.classList.add("editing"), this.#n.add(`${t}:${n}`);
1331
+ const l = s ? (b) => this.grid.updateRow(s, b, "cascade") : qe, d = Z(i.field) ? e[i.field] : void 0;
1332
+ r.classList.add("editing"), this.#l.add(`${t}:${n}`);
1329
1333
  const c = r.parentElement;
1330
- c && zt(c);
1334
+ c && Ot(c);
1331
1335
  let u = !1;
1332
1336
  const h = (b) => {
1333
1337
  if (u || !this.#t && this.#e === -1) return;
1334
- const w = this.grid._rows[t] ?? e;
1335
- this.#v(t, i, b, w);
1338
+ const w = this.grid, I = s ? w._getRowEntry(s) : void 0, R = I?.row ?? e, T = I?.index ?? t;
1339
+ this.#E(T, i, b, R);
1336
1340
  }, f = () => {
1337
1341
  if (u = !0, Z(i.field)) {
1338
- const b = this.grid._rows[t] ?? e;
1339
- b[i.field] = d;
1342
+ const b = this.grid, I = (s ? b._getRowEntry(s) : void 0)?.row ?? e;
1343
+ I[i.field] = d;
1340
1344
  }
1341
1345
  }, g = document.createElement("div");
1342
1346
  g.className = "tbw-editor-host", r.innerHTML = "", r.appendChild(g), g.addEventListener("keydown", (b) => {
@@ -1349,7 +1353,7 @@ class Tn extends I {
1349
1353
  }
1350
1354
  if (this.config.onBeforeEditClose && this.config.onBeforeEditClose(b) === !1)
1351
1355
  return;
1352
- b.stopPropagation(), b.preventDefault(), u = !0, this.#d(t, !1);
1356
+ b.stopPropagation(), b.preventDefault(), u = !0, this.#h(t, !1);
1353
1357
  }
1354
1358
  if (b.key === "Escape") {
1355
1359
  if (this.#t) {
@@ -1358,75 +1362,75 @@ class Tn extends I {
1358
1362
  }
1359
1363
  if (this.config.onBeforeEditClose && this.config.onBeforeEditClose(b) === !1)
1360
1364
  return;
1361
- b.stopPropagation(), b.preventDefault(), f(), this.#d(t, !0);
1365
+ b.stopPropagation(), b.preventDefault(), f(), this.#h(t, !0);
1362
1366
  }
1363
1367
  });
1364
- const p = i, m = p.__editorTemplate, v = Kt(this.grid, p) ?? Gt(i), R = d, P = `${t}:${i.field}`, D = [];
1365
- this.#s.set(P, (b) => {
1368
+ const p = i, m = p.__editorTemplate, x = zt(this.grid, p) ?? Kt(i), E = d, P = `${t}:${i.field}`, D = [];
1369
+ this.#f.set(P, (b) => {
1366
1370
  for (const w of D) w(b);
1367
1371
  });
1368
- const A = (b) => {
1372
+ const _ = (b) => {
1369
1373
  D.push(b);
1370
1374
  };
1371
- if (v === "template" && m)
1372
- this.#R(g, p, e, d, h, f, o, t), A((b) => {
1375
+ if (x === "template" && m)
1376
+ this.#R(g, p, e, d, h, f, o, t), _((b) => {
1373
1377
  const w = g.querySelector(
1374
1378
  "input,textarea,select"
1375
1379
  );
1376
1380
  w && (w instanceof HTMLInputElement && w.type === "checkbox" ? w.checked = !!b : w.value = String(b ?? ""));
1377
1381
  });
1378
- else if (typeof v == "string") {
1379
- const b = document.createElement(v);
1380
- b.value = R, b.addEventListener("change", () => h(b.value)), A((w) => {
1382
+ else if (typeof x == "string") {
1383
+ const b = document.createElement(x);
1384
+ b.value = E, b.addEventListener("change", () => h(b.value)), _((w) => {
1381
1385
  b.value = w;
1382
1386
  }), g.appendChild(b), o || queueMicrotask(() => {
1383
1387
  g.querySelector(G)?.focus({ preventScroll: !0 });
1384
1388
  });
1385
- } else if (typeof v == "function") {
1389
+ } else if (typeof x == "function") {
1386
1390
  const b = {
1387
1391
  row: e,
1388
1392
  rowId: s ?? "",
1389
- value: R,
1393
+ value: E,
1390
1394
  field: i.field,
1391
1395
  column: i,
1392
1396
  commit: h,
1393
1397
  cancel: f,
1394
1398
  updateRow: l,
1395
- onValueChange: A
1396
- }, w = v(b);
1397
- typeof w == "string" ? (g.innerHTML = w, Bt(g, i, h, d), A((F) => {
1398
- const S = g.querySelector(
1399
+ onValueChange: _
1400
+ }, w = x(b);
1401
+ typeof w == "string" ? (g.innerHTML = w, Vt(g, i, h, d), _((I) => {
1402
+ const R = g.querySelector(
1399
1403
  "input,textarea,select"
1400
1404
  );
1401
- S && (S instanceof HTMLInputElement && S.type === "checkbox" ? S.checked = !!F : S.value = String(F ?? ""));
1402
- })) : w instanceof Node && (g.appendChild(w), w instanceof HTMLInputElement || w instanceof HTMLSelectElement || w instanceof HTMLTextAreaElement ? A((S) => {
1403
- w instanceof HTMLInputElement && w.type === "checkbox" ? w.checked = !!S : w.value = String(S ?? "");
1405
+ R && (R instanceof HTMLInputElement && R.type === "checkbox" ? R.checked = !!I : R.value = String(I ?? ""));
1406
+ })) : w instanceof Node && (g.appendChild(w), w instanceof HTMLInputElement || w instanceof HTMLSelectElement || w instanceof HTMLTextAreaElement ? _((R) => {
1407
+ w instanceof HTMLInputElement && w.type === "checkbox" ? w.checked = !!R : w.value = String(R ?? "");
1404
1408
  }) : r.setAttribute("data-editor-managed", "")), o || queueMicrotask(() => {
1405
1409
  g.querySelector(G)?.focus({ preventScroll: !0 });
1406
1410
  });
1407
- } else if (v && typeof v == "object") {
1411
+ } else if (x && typeof x == "object") {
1408
1412
  const b = document.createElement("div");
1409
1413
  b.setAttribute("data-external-editor", ""), b.setAttribute("data-field", i.field), g.appendChild(b), r.setAttribute("data-editor-managed", "");
1410
1414
  const w = {
1411
1415
  row: e,
1412
1416
  rowId: s ?? "",
1413
- value: R,
1417
+ value: E,
1414
1418
  field: i.field,
1415
1419
  column: i,
1416
1420
  commit: h,
1417
1421
  cancel: f,
1418
1422
  updateRow: l,
1419
- onValueChange: A
1423
+ onValueChange: _
1420
1424
  };
1421
- if (v.mount)
1425
+ if (x.mount)
1422
1426
  try {
1423
- v.mount({ placeholder: b, context: w, spec: v });
1424
- } catch (F) {
1425
- console.warn(`[tbw-grid] External editor mount error for column '${i.field}':`, F);
1427
+ x.mount({ placeholder: b, context: w, spec: x });
1428
+ } catch (I) {
1429
+ console.warn(`[tbw-grid] External editor mount error for column '${i.field}':`, I);
1426
1430
  }
1427
1431
  else
1428
1432
  this.grid.dispatchEvent(
1429
- new CustomEvent("mount-external-editor", { detail: { placeholder: b, spec: v, context: w } })
1433
+ new CustomEvent("mount-external-editor", { detail: { placeholder: b, spec: x, context: w } })
1430
1434
  );
1431
1435
  }
1432
1436
  }
@@ -1461,18 +1465,18 @@ class Tn extends I {
1461
1465
  if (p.key === "Enter") {
1462
1466
  if (this.config.onBeforeEditClose && this.config.onBeforeEditClose(p) === !1)
1463
1467
  return;
1464
- p.stopPropagation(), p.preventDefault(), f = !0, r(Y(h, t, n)), this.#d(l, !1);
1468
+ p.stopPropagation(), p.preventDefault(), f = !0, r(Y(h, t, n)), this.#h(l, !1);
1465
1469
  }
1466
1470
  if (p.key === "Escape") {
1467
1471
  if (this.config.onBeforeEditClose && this.config.onBeforeEditClose(p) === !1)
1468
1472
  return;
1469
- p.stopPropagation(), p.preventDefault(), o(), this.#d(l, !0);
1473
+ p.stopPropagation(), p.preventDefault(), o(), this.#h(l, !0);
1470
1474
  }
1471
1475
  }), h instanceof HTMLInputElement && h.type === "checkbox" && h.addEventListener("change", () => r(h.checked)), s || setTimeout(() => h.focus({ preventScroll: !0 }), 0);
1472
1476
  }
1473
1477
  e.appendChild(c);
1474
1478
  }
1475
- #C(e, t) {
1479
+ #k(e, t) {
1476
1480
  if (!e) return !1;
1477
1481
  const i = e, n = t, r = /* @__PURE__ */ new Set([...Object.keys(i), ...Object.keys(n)]);
1478
1482
  for (const o of r)
@@ -1480,7 +1484,7 @@ class Tn extends I {
1480
1484
  return !0;
1481
1485
  return !1;
1482
1486
  }
1483
- #E(e) {
1487
+ #S(e) {
1484
1488
  queueMicrotask(() => {
1485
1489
  try {
1486
1490
  const t = e._focusRow, i = e._focusCol, n = e.findRenderedRowElement?.(t);
@@ -1496,7 +1500,7 @@ class Tn extends I {
1496
1500
  });
1497
1501
  }
1498
1502
  }
1499
- function qe(a, e = !0) {
1503
+ function Ne(a, e = !0) {
1500
1504
  if (a == null) return "";
1501
1505
  if (a instanceof Date) return a.toISOString();
1502
1506
  if (typeof a == "object") return JSON.stringify(a);
@@ -1504,37 +1508,37 @@ function qe(a, e = !0) {
1504
1508
  return e && (t.includes(",") || t.includes('"') || t.includes(`
1505
1509
  `) || t.includes("\r")) ? `"${t.replace(/"/g, '""')}"` : t;
1506
1510
  }
1507
- function Vt(a, e, t, i = {}) {
1511
+ function $t(a, e, t, i = {}) {
1508
1512
  const n = i.delimiter ?? ",", r = i.newline ?? `
1509
1513
  `, o = [], s = i.bom ? "\uFEFF" : "";
1510
1514
  if (t.includeHeaders !== !1) {
1511
1515
  const l = e.map((d) => {
1512
1516
  const c = d.header || d.field, u = t.processHeader ? t.processHeader(c, d.field) : c;
1513
- return qe(u);
1517
+ return Ne(u);
1514
1518
  });
1515
1519
  o.push(l.join(n));
1516
1520
  }
1517
1521
  for (const l of a) {
1518
1522
  const d = e.map((c) => {
1519
1523
  let u = l[c.field];
1520
- return t.processCell && (u = t.processCell(u, c.field, l)), qe(u);
1524
+ return t.processCell && (u = t.processCell(u, c.field, l)), Ne(u);
1521
1525
  });
1522
1526
  o.push(d.join(n));
1523
1527
  }
1524
1528
  return s + o.join(r);
1525
1529
  }
1526
- function ye(a, e) {
1530
+ function xe(a, e) {
1527
1531
  const t = URL.createObjectURL(a), i = document.createElement("a");
1528
1532
  i.href = t, i.download = e, i.style.display = "none", document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(t);
1529
1533
  }
1530
- function $t(a, e) {
1534
+ function Wt(a, e) {
1531
1535
  const t = new Blob([a], { type: "text/csv;charset=utf-8;" });
1532
- ye(t, e);
1536
+ xe(t, e);
1533
1537
  }
1534
- function Ne(a) {
1538
+ function He(a) {
1535
1539
  return a.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
1536
1540
  }
1537
- function Wt(a, e, t) {
1541
+ function jt(a, e, t) {
1538
1542
  let i = `<?xml version="1.0" encoding="UTF-8"?>
1539
1543
  <?mso-application progid="Excel.Sheet"?>
1540
1544
  <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
@@ -1546,7 +1550,7 @@ function Wt(a, e, t) {
1546
1550
  <Row>`;
1547
1551
  for (const n of e) {
1548
1552
  const r = n.header || n.field, o = t.processHeader ? t.processHeader(r, n.field) : r;
1549
- i += `<Cell><Data ss:Type="String">${Ne(o)}</Data></Cell>`;
1553
+ i += `<Cell><Data ss:Type="String">${He(o)}</Data></Cell>`;
1550
1554
  }
1551
1555
  i += "</Row>";
1552
1556
  }
@@ -1557,7 +1561,7 @@ function Wt(a, e, t) {
1557
1561
  let o = n[r.field];
1558
1562
  t.processCell && (o = t.processCell(o, r.field, n));
1559
1563
  let s = "String", l = "";
1560
- o == null ? l = "" : typeof o == "number" && !isNaN(o) ? (s = "Number", l = String(o)) : o instanceof Date ? (s = "DateTime", l = o.toISOString()) : l = Ne(String(o)), i += `<Cell><Data ss:Type="${s}">${l}</Data></Cell>`;
1564
+ o == null ? l = "" : typeof o == "number" && !isNaN(o) ? (s = "Number", l = String(o)) : o instanceof Date ? (s = "DateTime", l = o.toISOString()) : l = He(String(o)), i += `<Cell><Data ss:Type="${s}">${l}</Data></Cell>`;
1561
1565
  }
1562
1566
  i += "</Row>";
1563
1567
  }
@@ -1566,13 +1570,13 @@ function Wt(a, e, t) {
1566
1570
  </Worksheet>
1567
1571
  </Workbook>`, i;
1568
1572
  }
1569
- function jt(a, e) {
1573
+ function Ut(a, e) {
1570
1574
  const t = e.endsWith(".xls") ? e : `${e}.xls`, i = new Blob([a], {
1571
1575
  type: "application/vnd.ms-excel;charset=utf-8;"
1572
1576
  });
1573
- ye(i, t);
1577
+ xe(i, t);
1574
1578
  }
1575
- class In extends I {
1579
+ class Pn extends F {
1576
1580
  name = "export";
1577
1581
  get defaultConfig() {
1578
1582
  return {
@@ -1596,10 +1600,10 @@ class In extends I {
1596
1600
  }, r = ie(this.columns, t?.columns, i.onlyVisible);
1597
1601
  let o;
1598
1602
  if (t?.rowIndices)
1599
- o = pe(this.rows, t.rowIndices);
1603
+ o = me(this.rows, t.rowIndices);
1600
1604
  else if (i.onlySelected) {
1601
1605
  const l = this.getSelectionState();
1602
- l?.selected?.size ? o = pe(this.rows, [...l.selected]) : o = [...this.rows];
1606
+ l?.selected?.size ? o = me(this.rows, [...l.selected]) : o = [...this.rows];
1603
1607
  } else
1604
1608
  o = [...this.rows];
1605
1609
  this.isExportingFlag = !0;
@@ -1607,13 +1611,13 @@ class In extends I {
1607
1611
  try {
1608
1612
  switch (e) {
1609
1613
  case "csv": {
1610
- const l = Vt(o, r, n, { bom: !0 });
1611
- s = s.endsWith(".csv") ? s : `${s}.csv`, $t(l, s);
1614
+ const l = $t(o, r, n, { bom: !0 });
1615
+ s = s.endsWith(".csv") ? s : `${s}.csv`, Wt(l, s);
1612
1616
  break;
1613
1617
  }
1614
1618
  case "excel": {
1615
- const l = Wt(o, r, n);
1616
- s = s.endsWith(".xls") ? s : `${s}.xls`, jt(l, s);
1619
+ const l = jt(o, r, n);
1620
+ s = s.endsWith(".xls") ? s : `${s}.xls`, Ut(l, s);
1617
1621
  break;
1618
1622
  }
1619
1623
  case "json": {
@@ -1627,7 +1631,7 @@ class In extends I {
1627
1631
  }), d = JSON.stringify(l, null, 2);
1628
1632
  s = s.endsWith(".json") ? s : `${s}.json`;
1629
1633
  const c = new Blob([d], { type: "application/json" });
1630
- ye(c, s);
1634
+ xe(c, s);
1631
1635
  break;
1632
1636
  }
1633
1637
  }
@@ -1664,81 +1668,75 @@ class In extends I {
1664
1668
  return this.lastExportInfo;
1665
1669
  }
1666
1670
  }
1667
- const dt = "__tbw_expander", Ut = 32;
1668
- function oe(a) {
1669
- return a.field === dt;
1670
- }
1671
- function W(a) {
1672
- return a.meta?.utility === !0;
1673
- }
1674
- function Yt(a) {
1675
- return a.find(oe);
1676
- }
1677
- function Xt(a) {
1678
- return {
1679
- field: dt,
1680
- header: "",
1681
- width: Ut,
1682
- resizable: !1,
1683
- sortable: !1,
1684
- filterable: !1,
1685
- meta: {
1686
- lockPosition: !0,
1687
- suppressMovable: !0,
1688
- expanderColumn: !0,
1689
- expanderPlugin: a,
1690
- utility: !0
1691
- }
1692
- };
1693
- }
1694
- function N(a) {
1671
+ const re = "(Blank)";
1672
+ function H(a) {
1695
1673
  if (a instanceof Date) return a.getTime();
1696
1674
  const e = Number(a);
1697
1675
  return isNaN(e) ? new Date(a).getTime() : e;
1698
1676
  }
1699
- function Qt(a, e, t = !1) {
1700
- const i = a[e.field];
1677
+ function Yt(a, e, t = !1, i) {
1678
+ const n = a[e.field];
1701
1679
  if (e.operator === "blank")
1702
- return i == null || i === "";
1680
+ return n == null || n === "";
1703
1681
  if (e.operator === "notBlank")
1704
- return i != null && i !== "";
1682
+ return n != null && n !== "";
1683
+ if (i && (e.operator === "notIn" || e.operator === "in")) {
1684
+ const l = i(n, a), d = Array.isArray(l) ? l : l != null ? [l] : [];
1685
+ if (e.operator === "notIn") {
1686
+ const c = e.value;
1687
+ return Array.isArray(c) ? d.length === 0 ? !c.includes(re) : !d.some((u) => c.includes(u)) : !0;
1688
+ }
1689
+ if (e.operator === "in") {
1690
+ const c = e.value;
1691
+ return Array.isArray(c) ? d.length === 0 ? c.includes(re) : d.some((u) => c.includes(u)) : !1;
1692
+ }
1693
+ }
1705
1694
  if (e.operator === "notIn")
1706
- return i == null ? !0 : Array.isArray(e.value) && !e.value.includes(i);
1695
+ return n == null ? !0 : Array.isArray(e.value) && !e.value.includes(n);
1707
1696
  if (e.operator === "in")
1708
- return Array.isArray(e.value) && e.value.includes(i);
1709
- if (i == null) return !1;
1710
- const n = String(i), r = t ? n : n.toLowerCase(), o = t ? String(e.value) : String(e.value).toLowerCase();
1697
+ return Array.isArray(e.value) && e.value.includes(n);
1698
+ if (n == null) return !1;
1699
+ const r = String(n), o = t ? r : r.toLowerCase(), s = t ? String(e.value) : String(e.value).toLowerCase();
1711
1700
  switch (e.operator) {
1712
1701
  case "contains":
1713
- return r.includes(o);
1702
+ return o.includes(s);
1714
1703
  case "notContains":
1715
- return !r.includes(o);
1704
+ return !o.includes(s);
1716
1705
  case "equals":
1717
- return r === o;
1706
+ return o === s;
1718
1707
  case "notEquals":
1719
- return r !== o;
1708
+ return o !== s;
1720
1709
  case "startsWith":
1721
- return r.startsWith(o);
1710
+ return o.startsWith(s);
1722
1711
  case "endsWith":
1723
- return r.endsWith(o);
1712
+ return o.endsWith(s);
1724
1713
  case "lessThan":
1725
- return N(i) < N(e.value);
1714
+ return H(n) < H(e.value);
1726
1715
  case "lessThanOrEqual":
1727
- return N(i) <= N(e.value);
1716
+ return H(n) <= H(e.value);
1728
1717
  case "greaterThan":
1729
- return N(i) > N(e.value);
1718
+ return H(n) > H(e.value);
1730
1719
  case "greaterThanOrEqual":
1731
- return N(i) >= N(e.value);
1720
+ return H(n) >= H(e.value);
1732
1721
  case "between":
1733
- return N(i) >= N(e.value) && N(i) <= N(e.valueTo);
1722
+ return H(n) >= H(e.value) && H(n) <= H(e.valueTo);
1734
1723
  default:
1735
1724
  return !0;
1736
1725
  }
1737
1726
  }
1738
- function Zt(a, e, t = !1) {
1739
- return e.length ? a.filter((i) => e.every((n) => Qt(i, n, t))) : a;
1727
+ function Xt(a, e, t = !1, i) {
1728
+ return e.length ? a.filter(
1729
+ (n) => e.every(
1730
+ (r) => Yt(
1731
+ n,
1732
+ r,
1733
+ t,
1734
+ i?.get(r.field)
1735
+ )
1736
+ )
1737
+ ) : a;
1740
1738
  }
1741
- function Jt(a) {
1739
+ function Qt(a) {
1742
1740
  return JSON.stringify(
1743
1741
  a.map((e) => ({
1744
1742
  field: e.field,
@@ -1748,16 +1746,77 @@ function Jt(a) {
1748
1746
  }))
1749
1747
  );
1750
1748
  }
1751
- function He(a, e) {
1752
- const t = /* @__PURE__ */ new Set();
1753
- for (const i of a) {
1754
- const n = i[e];
1755
- n != null && t.add(n);
1749
+ function Ge(a, e, t) {
1750
+ const i = /* @__PURE__ */ new Set();
1751
+ let n = !1;
1752
+ for (const r of a) {
1753
+ const o = r[e];
1754
+ if (t) {
1755
+ const s = t(o, r);
1756
+ if (Array.isArray(s)) {
1757
+ s.length === 0 && (n = !0);
1758
+ for (const l of s)
1759
+ l != null && i.add(l);
1760
+ } else s != null ? i.add(s) : n = !0;
1761
+ } else
1762
+ o != null && i.add(o);
1756
1763
  }
1757
- return [...t].sort((i, n) => typeof i == "number" && typeof n == "number" ? i - n : String(i).localeCompare(String(n)));
1764
+ return t && n && i.add(re), [...i].sort((r, o) => typeof r == "number" && typeof o == "number" ? r - o : String(r).localeCompare(String(o)));
1765
+ }
1766
+ function Zt(a, e) {
1767
+ const t = /* @__PURE__ */ new Map();
1768
+ for (const { field: n, filterValue: r } of e)
1769
+ t.set(n, { values: /* @__PURE__ */ new Set(), hasBlank: !1, hasExtractor: !!r });
1770
+ for (const n of a)
1771
+ for (const { field: r, filterValue: o } of e) {
1772
+ const s = t.get(r), l = n[r];
1773
+ if (o) {
1774
+ const d = o(l, n);
1775
+ if (Array.isArray(d)) {
1776
+ d.length === 0 && (s.hasBlank = !0);
1777
+ for (const c of d)
1778
+ c != null && s.values.add(c);
1779
+ } else d != null ? s.values.add(d) : s.hasBlank = !0;
1780
+ } else
1781
+ l != null && s.values.add(l);
1782
+ }
1783
+ const i = /* @__PURE__ */ new Map();
1784
+ for (const [n, { values: r, hasBlank: o, hasExtractor: s }] of t)
1785
+ s && o && r.add(re), i.set(
1786
+ n,
1787
+ [...r].sort((l, d) => typeof l == "number" && typeof d == "number" ? l - d : String(l).localeCompare(String(d)))
1788
+ );
1789
+ return i;
1790
+ }
1791
+ const ct = "__tbw_expander", Jt = 32;
1792
+ function se(a) {
1793
+ return a.field === ct;
1794
+ }
1795
+ function W(a) {
1796
+ return a.meta?.utility === !0;
1797
+ }
1798
+ function ei(a) {
1799
+ return a.find(se);
1800
+ }
1801
+ function ti(a) {
1802
+ return {
1803
+ field: ct,
1804
+ header: "",
1805
+ width: Jt,
1806
+ resizable: !1,
1807
+ sortable: !1,
1808
+ filterable: !1,
1809
+ meta: {
1810
+ lockPosition: !0,
1811
+ suppressMovable: !0,
1812
+ expanderColumn: !0,
1813
+ expanderPlugin: a,
1814
+ utility: !0
1815
+ }
1816
+ };
1758
1817
  }
1759
- const ei = '@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}}}', ti = "@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-actions .tbw-filter-value-item{flex:1}.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-blank-option{display:flex;align-items:center;gap:var(--tbw-spacing-sm, .375rem);padding:var(--tbw-spacing-xs, .25rem) 0;margin-bottom:var(--tbw-spacing-xs, .25rem);font-size:var(--tbw-font-size-sm, .8125rem);cursor:pointer;user-select:none}.tbw-filter-blank-checkbox{accent-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));margin:0;cursor:pointer}.tbw-filter-date-range.tbw-filter-disabled{opacity:.4;pointer-events:none}.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)}}";
1760
- class z extends I {
1818
+ const ii = '@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}}}', ni = "@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-actions .tbw-filter-value-item{flex:1}.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-blank-option{display:flex;align-items:center;gap:var(--tbw-spacing-sm, .375rem);padding:var(--tbw-spacing-xs, .25rem) 0;margin-bottom:var(--tbw-spacing-xs, .25rem);font-size:var(--tbw-font-size-sm, .8125rem);cursor:pointer;user-select:none}.tbw-filter-blank-checkbox{accent-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));margin:0;cursor:pointer}.tbw-filter-date-range.tbw-filter-disabled{opacity:.4;pointer-events:none}.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)}}";
1819
+ class z extends F {
1761
1820
  static manifest = {
1762
1821
  events: [
1763
1822
  {
@@ -1773,7 +1832,7 @@ class z extends I {
1773
1832
  ]
1774
1833
  };
1775
1834
  name = "filtering";
1776
- styles = ei;
1835
+ styles = ii;
1777
1836
  get defaultConfig() {
1778
1837
  return {
1779
1838
  debounceMs: 300,
@@ -1788,6 +1847,14 @@ class z extends I {
1788
1847
  isColumnFilterable(e) {
1789
1848
  return this.isFilteringEnabled() ? e.filterable !== !1 : !1;
1790
1849
  }
1850
+ getFilterValues() {
1851
+ const e = this.grid.effectiveConfig?.columns;
1852
+ if (!e) return;
1853
+ let t;
1854
+ for (const i of e)
1855
+ i.field && i.filterValue && (t || (t = /* @__PURE__ */ new Map()), t.set(i.field, i.filterValue));
1856
+ return t;
1857
+ }
1791
1858
  filters = /* @__PURE__ */ new Map();
1792
1859
  cachedResult = null;
1793
1860
  cacheKey = null;
@@ -1813,6 +1880,21 @@ class z extends I {
1813
1880
  }
1814
1881
  return z.DEFAULT_LIST_ITEM_HEIGHT;
1815
1882
  }
1883
+ computeSelected() {
1884
+ const e = [];
1885
+ for (const [n, r] of this.filters) {
1886
+ if (r.type !== "set" || r.operator !== "notIn") continue;
1887
+ const o = this.grid.effectiveConfig?.columns?.find((s) => s.field === n);
1888
+ e.push({ field: n, filterValue: o?.filterValue });
1889
+ }
1890
+ if (e.length === 0) return {};
1891
+ const t = Zt(this.sourceRows, e), i = {};
1892
+ for (const { field: n } of e) {
1893
+ const r = this.excludedValues.get(n), o = t.get(n) ?? [];
1894
+ i[n] = r ? o.filter((s) => !r.has(s)) : o;
1895
+ }
1896
+ return i;
1897
+ }
1816
1898
  syncExcludedValues(e, t) {
1817
1899
  t ? t.type === "set" && t.operator === "notIn" && Array.isArray(t.value) ? this.excludedValues.set(e, new Set(t.value)) : t.type === "set" && this.excludedValues.delete(e) : this.excludedValues.delete(e);
1818
1900
  }
@@ -1850,7 +1932,7 @@ class z extends I {
1850
1932
  if (!t.length) return [...e];
1851
1933
  if (this.config.filterHandler)
1852
1934
  return this.cachedResult ? this.cachedResult : [...e];
1853
- const i = Jt(t), n = {
1935
+ const i = Qt(t), n = {
1854
1936
  len: e.length,
1855
1937
  first: e[0],
1856
1938
  mid: e[Math.floor(e.length / 2)],
@@ -1858,7 +1940,12 @@ class z extends I {
1858
1940
  }, r = this.cachedInputSpot != null && n.len === this.cachedInputSpot.len && n.first === this.cachedInputSpot.first && n.mid === this.cachedInputSpot.mid && n.last === this.cachedInputSpot.last;
1859
1941
  if (this.cacheKey === i && this.cachedResult && r)
1860
1942
  return this.cachedResult;
1861
- const o = Zt([...e], t, this.config.caseSensitive);
1943
+ const o = Xt(
1944
+ [...e],
1945
+ t,
1946
+ this.config.caseSensitive,
1947
+ this.getFilterValues()
1948
+ );
1862
1949
  return this.cachedResult = o, this.cacheKey = i, this.cachedInputSpot = n, o;
1863
1950
  }
1864
1951
  afterRender() {
@@ -1899,7 +1986,8 @@ class z extends I {
1899
1986
  }
1900
1987
  this.cachedResult = null, this.cacheKey = null, this.cachedInputSpot = null, this.emit("filter-change", {
1901
1988
  filters: [...this.filters.values()],
1902
- filteredRowCount: 0
1989
+ filteredRowCount: 0,
1990
+ selected: this.computeSelected()
1903
1991
  }), this.emitPluginEvent("filter-applied", { filters: [...this.filters.values()] }), this.requestRender();
1904
1992
  }
1905
1993
  getFilter(e) {
@@ -1917,7 +2005,8 @@ class z extends I {
1917
2005
  this.filters.set(t.field, t), this.syncExcludedValues(t.field, t);
1918
2006
  this.cachedResult = null, this.cacheKey = null, this.cachedInputSpot = null, this.emit("filter-change", {
1919
2007
  filters: [...this.filters.values()],
1920
- filteredRowCount: 0
2008
+ filteredRowCount: 0,
2009
+ selected: this.computeSelected()
1921
2010
  }), this.emitPluginEvent("filter-applied", { filters: [...this.filters.values()] }), this.requestRender();
1922
2011
  }
1923
2012
  clearAllFilters() {
@@ -1936,7 +2025,8 @@ class z extends I {
1936
2025
  return this.getFilters();
1937
2026
  }
1938
2027
  getUniqueValues(e) {
1939
- return He(this.sourceRows, e);
2028
+ const i = this.grid.effectiveConfig?.columns?.find((n) => n.field === e)?.filterValue;
2029
+ return Ge(this.sourceRows, e, i);
1940
2030
  }
1941
2031
  copyGridThemeContext(e) {
1942
2032
  const t = this.gridElement;
@@ -1953,7 +2043,7 @@ class z extends I {
1953
2043
  return;
1954
2044
  }
1955
2045
  const e = document.createElement("style");
1956
- e.id = "tbw-filter-panel-styles", e.textContent = ti, document.head.appendChild(e), this.globalStylesInjected = !0;
2046
+ e.id = "tbw-filter-panel-styles", e.textContent = ni, document.head.appendChild(e), this.globalStylesInjected = !0;
1957
2047
  }
1958
2048
  toggleFilterPanel(e, t, i) {
1959
2049
  if (this.openPanelField === e) {
@@ -1968,7 +2058,7 @@ class z extends I {
1968
2058
  });
1969
2059
  return;
1970
2060
  }
1971
- const r = He(this.sourceRows, e);
2061
+ const r = Ge(this.sourceRows, e, t.filterValue);
1972
2062
  document.body.appendChild(n), this.positionPanel(n, i), this.renderPanelContent(e, t, n, r), this.setupPanelCloseHandler(n, i);
1973
2063
  }
1974
2064
  renderPanelContent(e, t, i, n) {
@@ -2036,227 +2126,236 @@ class z extends I {
2036
2126
  });
2037
2127
  }
2038
2128
  renderDefaultFilterPanel(e, t, i, n) {
2039
- const { field: r } = t, o = this.getListItemHeight(), s = document.createElement("div");
2040
- s.className = "tbw-filter-search";
2041
- const l = document.createElement("input");
2042
- l.type = "text", l.placeholder = "Search...", l.className = "tbw-filter-search-input", l.value = this.searchText.get(r) ?? "", s.appendChild(l), e.appendChild(s);
2129
+ const { field: r, column: o } = t, s = this.getListItemHeight(), l = (v) => {
2130
+ if (v == null) return "(Blank)";
2131
+ if (o.format && !o.filterValue) {
2132
+ const C = o.format(v, void 0);
2133
+ if (C) return C;
2134
+ }
2135
+ return String(v);
2136
+ };
2137
+ i = i.slice().sort((v, C) => l(v).localeCompare(l(C)));
2043
2138
  const d = document.createElement("div");
2044
- d.className = "tbw-filter-actions";
2045
- const c = document.createElement("label");
2046
- c.className = "tbw-filter-value-item", c.style.padding = "0", c.style.margin = "0";
2047
- const u = document.createElement("input");
2048
- u.type = "checkbox", u.className = "tbw-filter-checkbox";
2049
- const h = document.createElement("span");
2050
- h.textContent = "Select All", c.appendChild(u), c.appendChild(h), d.appendChild(c);
2051
- const f = () => {
2052
- const y = [...v.values()], _ = y.every((x) => x), L = y.every((x) => !x);
2053
- u.checked = _, u.indeterminate = !_ && !L;
2139
+ d.className = "tbw-filter-search";
2140
+ const c = document.createElement("input");
2141
+ c.type = "text", c.placeholder = "Search...", c.className = "tbw-filter-search-input", c.value = this.searchText.get(r) ?? "", d.appendChild(c), e.appendChild(d);
2142
+ const u = document.createElement("div");
2143
+ u.className = "tbw-filter-actions";
2144
+ const h = document.createElement("label");
2145
+ h.className = "tbw-filter-value-item", h.style.padding = "0", h.style.margin = "0";
2146
+ const f = document.createElement("input");
2147
+ f.type = "checkbox", f.className = "tbw-filter-checkbox";
2148
+ const g = document.createElement("span");
2149
+ g.textContent = "Select All", h.appendChild(f), h.appendChild(g), u.appendChild(h);
2150
+ const p = () => {
2151
+ const v = [...P.values()], C = v.every((S) => S), L = v.every((S) => !S);
2152
+ f.checked = C, f.indeterminate = !C && !L;
2054
2153
  };
2055
- u.addEventListener("change", () => {
2056
- const y = u.checked;
2057
- for (const _ of v.keys())
2058
- v.set(_, y);
2059
- f(), D();
2060
- }), e.appendChild(d);
2061
- const g = document.createElement("div");
2062
- g.className = "tbw-filter-values";
2063
- const p = document.createElement("div");
2064
- p.className = "tbw-filter-values-spacer", g.appendChild(p);
2154
+ f.addEventListener("change", () => {
2155
+ const v = f.checked;
2156
+ for (const C of P.keys())
2157
+ P.set(C, v);
2158
+ p(), b();
2159
+ }), e.appendChild(u);
2065
2160
  const m = document.createElement("div");
2066
- m.className = "tbw-filter-values-content", g.appendChild(m);
2067
- const v = /* @__PURE__ */ new Map();
2068
- i.forEach((y) => {
2069
- const _ = y == null ? "__null__" : String(y);
2070
- v.set(_, !n.has(y));
2071
- }), f();
2072
- let R = [];
2073
- const P = (y, _) => {
2074
- const L = y == null ? "(Blank)" : String(y), x = y == null ? "__null__" : String(y), C = document.createElement("label");
2075
- C.className = "tbw-filter-value-item", C.style.position = "absolute", C.style.top = `calc(var(--tbw-filter-item-height, 28px) * ${_})`, C.style.left = "0", C.style.right = "0", C.style.boxSizing = "border-box";
2076
- const T = document.createElement("input");
2077
- T.type = "checkbox", T.className = "tbw-filter-checkbox", T.checked = v.get(x) ?? !0, T.dataset.value = x, T.addEventListener("change", () => {
2078
- v.set(x, T.checked), f();
2161
+ m.className = "tbw-filter-values";
2162
+ const x = document.createElement("div");
2163
+ x.className = "tbw-filter-values-spacer", m.appendChild(x);
2164
+ const E = document.createElement("div");
2165
+ E.className = "tbw-filter-values-content", m.appendChild(E);
2166
+ const P = /* @__PURE__ */ new Map();
2167
+ i.forEach((v) => {
2168
+ const C = v == null ? "__null__" : String(v);
2169
+ P.set(C, !n.has(v));
2170
+ }), p();
2171
+ let D = [];
2172
+ const _ = (v, C) => {
2173
+ const L = l(v), S = v == null ? "__null__" : String(v), k = document.createElement("label");
2174
+ k.className = "tbw-filter-value-item", k.style.position = "absolute", k.style.top = `calc(var(--tbw-filter-item-height, 28px) * ${C})`, k.style.left = "0", k.style.right = "0", k.style.boxSizing = "border-box";
2175
+ const M = document.createElement("input");
2176
+ M.type = "checkbox", M.className = "tbw-filter-checkbox", M.checked = P.get(S) ?? !0, M.dataset.value = S, M.addEventListener("change", () => {
2177
+ P.set(S, M.checked), p();
2079
2178
  });
2080
- const q = document.createElement("span");
2081
- return q.textContent = L, C.appendChild(T), C.appendChild(q), C;
2082
- }, D = () => {
2083
- const y = R.length, _ = g.clientHeight, L = g.scrollTop;
2084
- if (p.style.height = `${y * o}px`, yt(y, z.LIST_BYPASS_THRESHOLD / 3)) {
2085
- m.innerHTML = "", m.style.transform = "translateY(0px)", R.forEach((C, T) => {
2086
- m.appendChild(P(C, T));
2179
+ const y = document.createElement("span");
2180
+ return y.textContent = L, k.appendChild(M), k.appendChild(y), k;
2181
+ }, b = () => {
2182
+ const v = D.length, C = m.clientHeight, L = m.scrollTop;
2183
+ if (x.style.height = `${v * s}px`, xt(v, z.LIST_BYPASS_THRESHOLD / 3)) {
2184
+ E.innerHTML = "", E.style.transform = "translateY(0px)", D.forEach((k, M) => {
2185
+ E.appendChild(_(k, M));
2087
2186
  });
2088
2187
  return;
2089
2188
  }
2090
- const x = xt({
2091
- totalRows: y,
2092
- viewportHeight: _,
2189
+ const S = Ct({
2190
+ totalRows: v,
2191
+ viewportHeight: C,
2093
2192
  scrollTop: L,
2094
- rowHeight: o,
2193
+ rowHeight: s,
2095
2194
  overscan: z.LIST_OVERSCAN
2096
2195
  });
2097
- m.style.transform = `translateY(${x.offsetY}px)`, m.innerHTML = "";
2098
- for (let C = x.start; C < x.end; C++)
2099
- m.appendChild(P(R[C], C - x.start));
2100
- }, A = (y) => {
2101
- const _ = this.config.caseSensitive ?? !1, L = _ ? y : y.toLowerCase();
2102
- if (R = i.filter((x) => {
2103
- const C = x == null ? "(Blank)" : String(x), T = _ ? C : C.toLowerCase();
2104
- return !y || T.includes(L);
2105
- }), R.length === 0) {
2106
- p.style.height = "0px", m.innerHTML = "";
2107
- const x = document.createElement("div");
2108
- x.className = "tbw-filter-no-match", x.textContent = "No matching values", m.appendChild(x);
2196
+ E.style.transform = `translateY(${S.offsetY}px)`, E.innerHTML = "";
2197
+ for (let k = S.start; k < S.end; k++)
2198
+ E.appendChild(_(D[k], k - S.start));
2199
+ }, w = (v) => {
2200
+ const C = this.config.caseSensitive ?? !1, L = C ? v : v.toLowerCase();
2201
+ if (D = i.filter((S) => {
2202
+ const k = l(S), M = C ? k : k.toLowerCase();
2203
+ return !v || M.includes(L);
2204
+ }), D.length === 0) {
2205
+ x.style.height = "0px", E.innerHTML = "";
2206
+ const S = document.createElement("div");
2207
+ S.className = "tbw-filter-no-match", S.textContent = "No matching values", E.appendChild(S);
2109
2208
  return;
2110
2209
  }
2111
- D();
2210
+ b();
2112
2211
  };
2113
- g.addEventListener(
2212
+ m.addEventListener(
2114
2213
  "scroll",
2115
2214
  () => {
2116
- R.length > 0 && D();
2215
+ D.length > 0 && b();
2117
2216
  },
2118
2217
  { passive: !0 }
2119
- ), A(l.value), e.appendChild(g);
2120
- let b;
2121
- l.addEventListener("input", () => {
2122
- clearTimeout(b), b = setTimeout(() => {
2123
- this.searchText.set(r, l.value), A(l.value);
2218
+ ), w(c.value), e.appendChild(m);
2219
+ let I;
2220
+ c.addEventListener("input", () => {
2221
+ clearTimeout(I), I = setTimeout(() => {
2222
+ this.searchText.set(r, c.value), w(c.value);
2124
2223
  }, this.config.debounceMs ?? 150);
2125
2224
  });
2126
- const w = document.createElement("div");
2127
- w.className = "tbw-filter-buttons";
2128
- const F = document.createElement("button");
2129
- F.className = "tbw-filter-apply-btn", F.textContent = "Apply", F.addEventListener("click", () => {
2130
- const y = [];
2131
- for (const [_, L] of v)
2225
+ const R = document.createElement("div");
2226
+ R.className = "tbw-filter-buttons";
2227
+ const T = document.createElement("button");
2228
+ T.className = "tbw-filter-apply-btn", T.textContent = "Apply", T.addEventListener("click", () => {
2229
+ const v = [];
2230
+ for (const [C, L] of P)
2132
2231
  if (!L)
2133
- if (_ === "__null__")
2134
- y.push(null);
2232
+ if (C === "__null__")
2233
+ v.push(null);
2135
2234
  else {
2136
- const x = i.find((C) => String(C) === _);
2137
- y.push(x !== void 0 ? x : _);
2235
+ const S = i.find((k) => String(k) === C);
2236
+ v.push(S !== void 0 ? S : C);
2138
2237
  }
2139
- t.applySetFilter(y);
2140
- }), w.appendChild(F);
2141
- const S = document.createElement("button");
2142
- S.className = "tbw-filter-clear-btn", S.textContent = "Clear Filter", S.addEventListener("click", () => {
2238
+ t.applySetFilter(v);
2239
+ }), R.appendChild(T);
2240
+ const N = document.createElement("button");
2241
+ N.className = "tbw-filter-clear-btn", N.textContent = "Clear Filter", N.addEventListener("click", () => {
2143
2242
  t.clearFilter();
2144
- }), w.appendChild(S), e.appendChild(w);
2243
+ }), R.appendChild(N), e.appendChild(R);
2145
2244
  }
2146
2245
  renderNumberFilterPanel(e, t, i) {
2147
- const { field: n, column: r } = t, o = r.filterParams, s = r.editorParams, l = (k, B) => {
2148
- if (typeof k == "number") return k;
2149
- if (typeof k == "string") {
2150
- const Q = parseFloat(k);
2246
+ const { field: n, column: r } = t, o = r.filterParams, s = r.editorParams, l = (A, B) => {
2247
+ if (typeof A == "number") return A;
2248
+ if (typeof A == "string") {
2249
+ const Q = parseFloat(A);
2151
2250
  return isNaN(Q) ? B : Q;
2152
2251
  }
2153
2252
  return B;
2154
- }, 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 ?? s?.min, c), f = l(o?.max ?? s?.max, u), g = o?.step ?? s?.step ?? 1, p = this.filters.get(n);
2155
- let m = h, v = f;
2156
- p?.operator === "between" ? (m = l(p.value, h), v = l(p.valueTo, f)) : p?.operator === "greaterThanOrEqual" ? m = l(p.value, h) : p?.operator === "lessThanOrEqual" && (v = l(p.value, f));
2157
- const R = document.createElement("div");
2158
- R.className = "tbw-filter-range-inputs";
2253
+ }, d = i.filter((A) => typeof A == "number" && !isNaN(A)), c = d.length > 0 ? Math.min(...d) : 0, u = d.length > 0 ? Math.max(...d) : 100, h = l(o?.min ?? s?.min, c), f = l(o?.max ?? s?.max, u), g = o?.step ?? s?.step ?? 1, p = this.filters.get(n);
2254
+ let m = h, x = f;
2255
+ p?.operator === "between" ? (m = l(p.value, h), x = l(p.valueTo, f)) : p?.operator === "greaterThanOrEqual" ? m = l(p.value, h) : p?.operator === "lessThanOrEqual" && (x = l(p.value, f));
2256
+ const E = document.createElement("div");
2257
+ E.className = "tbw-filter-range-inputs";
2159
2258
  const P = document.createElement("div");
2160
2259
  P.className = "tbw-filter-range-group";
2161
2260
  const D = document.createElement("label");
2162
2261
  D.textContent = "Min", D.className = "tbw-filter-range-label";
2163
- const A = document.createElement("input");
2164
- A.type = "number", A.className = "tbw-filter-range-input", A.min = String(h), A.max = String(f), A.step = String(g), A.value = String(m), P.appendChild(D), P.appendChild(A), R.appendChild(P);
2262
+ const _ = document.createElement("input");
2263
+ _.type = "number", _.className = "tbw-filter-range-input", _.min = String(h), _.max = String(f), _.step = String(g), _.value = String(m), P.appendChild(D), P.appendChild(_), E.appendChild(P);
2165
2264
  const b = document.createElement("span");
2166
- b.className = "tbw-filter-range-separator", b.textContent = "–", R.appendChild(b);
2265
+ b.className = "tbw-filter-range-separator", b.textContent = "–", E.appendChild(b);
2167
2266
  const w = document.createElement("div");
2168
2267
  w.className = "tbw-filter-range-group";
2169
- const F = document.createElement("label");
2170
- F.textContent = "Max", F.className = "tbw-filter-range-label";
2171
- const S = document.createElement("input");
2172
- S.type = "number", S.className = "tbw-filter-range-input", S.min = String(h), S.max = String(f), S.step = String(g), S.value = String(v), w.appendChild(F), w.appendChild(S), R.appendChild(w), e.appendChild(R);
2173
- const y = document.createElement("div");
2174
- y.className = "tbw-filter-range-slider";
2175
- const _ = document.createElement("div");
2176
- _.className = "tbw-filter-range-track";
2177
- const L = document.createElement("div");
2178
- L.className = "tbw-filter-range-fill";
2179
- const x = document.createElement("input");
2180
- x.type = "range", x.className = "tbw-filter-range-thumb tbw-filter-range-thumb-min", x.min = String(h), x.max = String(f), x.step = String(g), x.value = String(m);
2268
+ const I = document.createElement("label");
2269
+ I.textContent = "Max", I.className = "tbw-filter-range-label";
2270
+ const R = document.createElement("input");
2271
+ R.type = "number", R.className = "tbw-filter-range-input", R.min = String(h), R.max = String(f), R.step = String(g), R.value = String(x), w.appendChild(I), w.appendChild(R), E.appendChild(w), e.appendChild(E);
2272
+ const T = document.createElement("div");
2273
+ T.className = "tbw-filter-range-slider";
2274
+ const N = document.createElement("div");
2275
+ N.className = "tbw-filter-range-track";
2276
+ const v = document.createElement("div");
2277
+ v.className = "tbw-filter-range-fill";
2181
2278
  const C = document.createElement("input");
2182
- C.type = "range", C.className = "tbw-filter-range-thumb tbw-filter-range-thumb-max", C.min = String(h), C.max = String(f), C.step = String(g), C.value = String(v), y.appendChild(_), y.appendChild(L), y.appendChild(x), y.appendChild(C), e.appendChild(y);
2183
- const T = () => {
2184
- const k = parseFloat(x.value), B = parseFloat(C.value), Q = f - h, Ee = (k - h) / Q * 100, wt = (B - h) / Q * 100;
2185
- L.style.left = `${Ee}%`, L.style.width = `${wt - Ee}%`;
2279
+ C.type = "range", C.className = "tbw-filter-range-thumb tbw-filter-range-thumb-min", C.min = String(h), C.max = String(f), C.step = String(g), C.value = String(m);
2280
+ const L = document.createElement("input");
2281
+ L.type = "range", L.className = "tbw-filter-range-thumb tbw-filter-range-thumb-max", L.min = String(h), L.max = String(f), L.step = String(g), L.value = String(x), T.appendChild(N), T.appendChild(v), T.appendChild(C), T.appendChild(L), e.appendChild(T);
2282
+ const S = () => {
2283
+ const A = parseFloat(C.value), B = parseFloat(L.value), Q = f - h, Re = (A - h) / Q * 100, vt = (B - h) / Q * 100;
2284
+ v.style.left = `${Re}%`, v.style.width = `${vt - Re}%`;
2186
2285
  };
2187
- x.addEventListener("input", () => {
2188
- const k = Math.min(parseFloat(x.value), parseFloat(C.value));
2189
- x.value = String(k), A.value = String(k), T();
2190
- }), C.addEventListener("input", () => {
2191
- const k = Math.max(parseFloat(C.value), parseFloat(x.value));
2192
- C.value = String(k), S.value = String(k), T();
2193
- }), A.addEventListener("input", () => {
2194
- let k = parseFloat(A.value) || h;
2195
- k = Math.max(h, Math.min(k, parseFloat(S.value))), x.value = String(k), T();
2196
- }), S.addEventListener("input", () => {
2197
- let k = parseFloat(S.value) || f;
2198
- k = Math.min(f, Math.max(k, parseFloat(A.value))), C.value = String(k), T();
2199
- }), T();
2200
- const q = document.createElement("div");
2201
- q.className = "tbw-filter-buttons";
2202
- const H = document.createElement("button");
2203
- H.className = "tbw-filter-apply-btn", H.textContent = "Apply", H.addEventListener("click", () => {
2204
- const k = parseFloat(A.value), B = parseFloat(S.value);
2205
- t.applyTextFilter("between", k, B);
2206
- }), q.appendChild(H);
2207
- const E = document.createElement("button");
2208
- E.className = "tbw-filter-clear-btn", E.textContent = "Clear Filter", E.addEventListener("click", () => {
2286
+ C.addEventListener("input", () => {
2287
+ const A = Math.min(parseFloat(C.value), parseFloat(L.value));
2288
+ C.value = String(A), _.value = String(A), S();
2289
+ }), L.addEventListener("input", () => {
2290
+ const A = Math.max(parseFloat(L.value), parseFloat(C.value));
2291
+ L.value = String(A), R.value = String(A), S();
2292
+ }), _.addEventListener("input", () => {
2293
+ let A = parseFloat(_.value) || h;
2294
+ A = Math.max(h, Math.min(A, parseFloat(R.value))), C.value = String(A), S();
2295
+ }), R.addEventListener("input", () => {
2296
+ let A = parseFloat(R.value) || f;
2297
+ A = Math.min(f, Math.max(A, parseFloat(_.value))), L.value = String(A), S();
2298
+ }), S();
2299
+ const k = document.createElement("div");
2300
+ k.className = "tbw-filter-buttons";
2301
+ const M = document.createElement("button");
2302
+ M.className = "tbw-filter-apply-btn", M.textContent = "Apply", M.addEventListener("click", () => {
2303
+ const A = parseFloat(_.value), B = parseFloat(R.value);
2304
+ t.applyTextFilter("between", A, B);
2305
+ }), k.appendChild(M);
2306
+ const y = document.createElement("button");
2307
+ y.className = "tbw-filter-clear-btn", y.textContent = "Clear Filter", y.addEventListener("click", () => {
2209
2308
  t.clearFilter();
2210
- }), q.appendChild(E), e.appendChild(q);
2309
+ }), k.appendChild(y), e.appendChild(k);
2211
2310
  }
2212
2311
  renderDateFilterPanel(e, t, i) {
2213
- const { field: n, column: r } = t, o = r.filterParams, s = r.editorParams, l = i.filter((E) => E instanceof Date || typeof E == "string" && !isNaN(Date.parse(E))).map((E) => E instanceof Date ? E : new Date(E)).filter((E) => !isNaN(E.getTime())), d = l.length > 0 ? new Date(Math.min(...l.map((E) => E.getTime()))) : null, c = l.length > 0 ? new Date(Math.max(...l.map((E) => E.getTime()))) : null, u = (E) => E ? E.toISOString().split("T")[0] : "", h = (E) => E ? typeof E == "string" ? E : typeof E == "number" ? u(new Date(E)) : "" : "", f = h(o?.min) || h(s?.min) || u(d), g = h(o?.max) || h(s?.max) || u(c), p = this.filters.get(n);
2214
- let m = "", v = "";
2215
- const R = p?.operator === "blank";
2216
- p?.operator === "between" ? (m = h(p.value) || "", v = h(p.valueTo) || "") : p?.operator === "greaterThanOrEqual" ? m = h(p.value) || "" : p?.operator === "lessThanOrEqual" && (v = h(p.value) || "");
2312
+ const { field: n, column: r } = t, o = r.filterParams, s = r.editorParams, l = i.filter((y) => y instanceof Date || typeof y == "string" && !isNaN(Date.parse(y))).map((y) => y instanceof Date ? y : new Date(y)).filter((y) => !isNaN(y.getTime())), d = l.length > 0 ? new Date(Math.min(...l.map((y) => y.getTime()))) : null, c = l.length > 0 ? new Date(Math.max(...l.map((y) => y.getTime()))) : null, u = (y) => y ? y.toISOString().split("T")[0] : "", h = (y) => y ? typeof y == "string" ? y : typeof y == "number" ? u(new Date(y)) : "" : "", f = h(o?.min) || h(s?.min) || u(d), g = h(o?.max) || h(s?.max) || u(c), p = this.filters.get(n);
2313
+ let m = "", x = "";
2314
+ const E = p?.operator === "blank";
2315
+ p?.operator === "between" ? (m = h(p.value) || "", x = h(p.valueTo) || "") : p?.operator === "greaterThanOrEqual" ? m = h(p.value) || "" : p?.operator === "lessThanOrEqual" && (x = h(p.value) || "");
2217
2316
  const P = document.createElement("div");
2218
2317
  P.className = "tbw-filter-date-range";
2219
2318
  const D = document.createElement("div");
2220
2319
  D.className = "tbw-filter-date-group";
2221
- const A = document.createElement("label");
2222
- A.textContent = "From", A.className = "tbw-filter-range-label";
2320
+ const _ = document.createElement("label");
2321
+ _.textContent = "From", _.className = "tbw-filter-range-label";
2223
2322
  const b = document.createElement("input");
2224
- b.type = "date", b.className = "tbw-filter-date-input", f && (b.min = f), g && (b.max = g), b.value = m, D.appendChild(A), D.appendChild(b), P.appendChild(D);
2323
+ b.type = "date", b.className = "tbw-filter-date-input", f && (b.min = f), g && (b.max = g), b.value = m, D.appendChild(_), D.appendChild(b), P.appendChild(D);
2225
2324
  const w = document.createElement("span");
2226
2325
  w.className = "tbw-filter-range-separator", w.textContent = "–", P.appendChild(w);
2227
- const F = document.createElement("div");
2228
- F.className = "tbw-filter-date-group";
2229
- const S = document.createElement("label");
2230
- S.textContent = "To", S.className = "tbw-filter-range-label";
2231
- const y = document.createElement("input");
2232
- y.type = "date", y.className = "tbw-filter-date-input", f && (y.min = f), g && (y.max = g), y.value = v, F.appendChild(S), F.appendChild(y), P.appendChild(F), e.appendChild(P);
2233
- const _ = document.createElement("label");
2234
- _.className = "tbw-filter-blank-option";
2235
- const L = document.createElement("input");
2236
- L.type = "checkbox", L.className = "tbw-filter-blank-checkbox", L.checked = R;
2237
- const x = document.createTextNode("Show only blank");
2238
- _.appendChild(L), _.appendChild(x);
2239
- const C = (E) => {
2240
- b.disabled = E, y.disabled = E, P.classList.toggle("tbw-filter-disabled", E);
2326
+ const I = document.createElement("div");
2327
+ I.className = "tbw-filter-date-group";
2328
+ const R = document.createElement("label");
2329
+ R.textContent = "To", R.className = "tbw-filter-range-label";
2330
+ const T = document.createElement("input");
2331
+ T.type = "date", T.className = "tbw-filter-date-input", f && (T.min = f), g && (T.max = g), T.value = x, I.appendChild(R), I.appendChild(T), P.appendChild(I), e.appendChild(P);
2332
+ const N = document.createElement("label");
2333
+ N.className = "tbw-filter-blank-option";
2334
+ const v = document.createElement("input");
2335
+ v.type = "checkbox", v.className = "tbw-filter-blank-checkbox", v.checked = E;
2336
+ const C = document.createTextNode("Show only blank");
2337
+ N.appendChild(v), N.appendChild(C);
2338
+ const L = (y) => {
2339
+ b.disabled = y, T.disabled = y, P.classList.toggle("tbw-filter-disabled", y);
2241
2340
  };
2242
- C(R), L.addEventListener("change", () => {
2243
- C(L.checked);
2244
- }), e.appendChild(_);
2245
- const T = document.createElement("div");
2246
- T.className = "tbw-filter-buttons";
2247
- const q = document.createElement("button");
2248
- q.className = "tbw-filter-apply-btn", q.textContent = "Apply", q.addEventListener("click", () => {
2249
- if (L.checked) {
2341
+ L(E), v.addEventListener("change", () => {
2342
+ L(v.checked);
2343
+ }), e.appendChild(N);
2344
+ const S = document.createElement("div");
2345
+ S.className = "tbw-filter-buttons";
2346
+ const k = document.createElement("button");
2347
+ k.className = "tbw-filter-apply-btn", k.textContent = "Apply", k.addEventListener("click", () => {
2348
+ if (v.checked) {
2250
2349
  t.applyTextFilter("blank", "");
2251
2350
  return;
2252
2351
  }
2253
- const E = b.value, k = y.value;
2254
- E && k ? t.applyTextFilter("between", E, k) : E ? t.applyTextFilter("greaterThanOrEqual", E) : k ? t.applyTextFilter("lessThanOrEqual", k) : t.clearFilter();
2255
- }), T.appendChild(q);
2256
- const H = document.createElement("button");
2257
- H.className = "tbw-filter-clear-btn", H.textContent = "Clear Filter", H.addEventListener("click", () => {
2352
+ const y = b.value, A = T.value;
2353
+ y && A ? t.applyTextFilter("between", y, A) : y ? t.applyTextFilter("greaterThanOrEqual", y) : A ? t.applyTextFilter("lessThanOrEqual", A) : t.clearFilter();
2354
+ }), S.appendChild(k);
2355
+ const M = document.createElement("button");
2356
+ M.className = "tbw-filter-clear-btn", M.textContent = "Clear Filter", M.addEventListener("click", () => {
2258
2357
  t.clearFilter();
2259
- }), T.appendChild(H), e.appendChild(T);
2358
+ }), S.appendChild(M), e.appendChild(S);
2260
2359
  }
2261
2360
  applySetFilter(e, t) {
2262
2361
  this.excludedValues.set(e, new Set(t)), t.length === 0 ? this.filters.delete(e) : this.filters.set(e, {
@@ -2284,7 +2383,8 @@ class z extends I {
2284
2383
  const i = this.config.filterHandler(e, this.sourceRows), n = (r) => {
2285
2384
  t.removeAttribute("aria-busy"), this.cachedResult = r, this.grid.rows = r, this.emit("filter-change", {
2286
2385
  filters: e,
2287
- filteredRowCount: r.length
2386
+ filteredRowCount: r.length,
2387
+ selected: this.computeSelected()
2288
2388
  }), this.emitPluginEvent("filter-applied", { filters: e }), this.requestRender();
2289
2389
  };
2290
2390
  i && typeof i.then == "function" ? i.then(n) : n(i);
@@ -2292,7 +2392,8 @@ class z extends I {
2292
2392
  }
2293
2393
  this.emit("filter-change", {
2294
2394
  filters: e,
2295
- filteredRowCount: 0
2395
+ filteredRowCount: 0,
2396
+ selected: this.computeSelected()
2296
2397
  }), this.emitPluginEvent("filter-applied", { filters: e }), this.requestRender();
2297
2398
  }
2298
2399
  getColumnState(e) {
@@ -2322,7 +2423,7 @@ class z extends I {
2322
2423
  this.filters.set(e, i), this.cachedResult = null, this.cacheKey = null, this.cachedInputSpot = null;
2323
2424
  }
2324
2425
  }
2325
- function Ge(a) {
2426
+ function Ke(a) {
2326
2427
  if (!a.length) return [];
2327
2428
  const e = /* @__PURE__ */ new Map(), t = [], i = (o, s) => {
2328
2429
  if (!s.length) return;
@@ -2357,7 +2458,7 @@ function Ge(a) {
2357
2458
  }, e.set(d, c), t.push(c)), c.columns.push(o);
2358
2459
  }), n.length && i(r, n), t.length === 1 && t[0].implicit && t[0].columns.length === a.length ? [] : t;
2359
2460
  }
2360
- function ii(a, e, t) {
2461
+ function ri(a, e, t) {
2361
2462
  if (!e.length || !a) return;
2362
2463
  const i = /* @__PURE__ */ new Map();
2363
2464
  for (const r of e)
@@ -2373,7 +2474,7 @@ function ii(a, e, t) {
2373
2474
  s && s.classList.add("group-end");
2374
2475
  }
2375
2476
  }
2376
- function ni(a, e) {
2477
+ function oi(a, e) {
2377
2478
  if (a.length === 0) return null;
2378
2479
  const t = document.createElement("div");
2379
2480
  t.className = "header-group-row", t.setAttribute("role", "row");
@@ -2385,11 +2486,11 @@ function ni(a, e) {
2385
2486
  }
2386
2487
  return t;
2387
2488
  }
2388
- function ri(a) {
2489
+ function si(a) {
2389
2490
  return a.some((e) => e.group != null);
2390
2491
  }
2391
- const oi = "@layer tbw-plugins{.header-group-row{display:grid;grid-auto-flow:column;background:var(--tbw-grouping-columns-header-bg, var(--tbw-color-header-bg));border-bottom:1px solid var(--tbw-grouping-columns-border, var(--tbw-color-border))}.header-group-cell{display:flex;align-items:center;justify-content:center;padding:var(--tbw-button-padding-sm, .25rem .5rem);font-weight:600;font-size:var(--tbw-font-size-sm, .9em);text-transform:uppercase;letter-spacing:.5px;border-right:2px solid var(--tbw-grouping-columns-separator, var(--tbw-color-border-strong, var(--tbw-color-border)))}.header-group-cell:last-child{border-right:none}.header-row .cell.grouped{border-top:none}.header-row .cell.group-end{border-right:2px solid var(--tbw-grouping-columns-separator, var(--tbw-color-border-strong, var(--tbw-color-border)))}.header-row .cell.group-end:last-child{border-right:none}.rows .cell.group-end{border-right:2px solid var(--tbw-grouping-columns-separator, var(--tbw-color-border-strong, var(--tbw-color-border)))}.rows .cell.group-end:last-child{border-right:none}.header-group-row.no-borders{border-bottom:none}.header-group-row.no-borders .header-group-cell{border-right:none}.header-row.no-group-borders .cell.group-end{border-right:1px solid var(--tbw-color-border)}}";
2392
- class Fn extends I {
2492
+ const ai = "@layer tbw-plugins{.header-group-row{display:grid;grid-auto-flow:column;background:var(--tbw-grouping-columns-header-bg, var(--tbw-color-header-bg));border-bottom:1px solid var(--tbw-grouping-columns-border, var(--tbw-color-border))}.header-group-cell{display:flex;align-items:center;justify-content:center;padding:var(--tbw-button-padding-sm, .25rem .5rem);font-weight:600;font-size:var(--tbw-font-size-sm, .9em);text-transform:uppercase;letter-spacing:.5px;border-right:2px solid var(--tbw-grouping-columns-separator, var(--tbw-color-border-strong, var(--tbw-color-border)))}.header-group-cell:last-child{border-right:none}.header-row .cell.grouped{border-top:none}.header-row .cell.group-end{border-right:2px solid var(--tbw-grouping-columns-separator, var(--tbw-color-border-strong, var(--tbw-color-border)))}.header-row .cell.group-end:last-child{border-right:none}.rows .cell.group-end{border-right:2px solid var(--tbw-grouping-columns-separator, var(--tbw-color-border-strong, var(--tbw-color-border)))}.rows .cell.group-end:last-child{border-right:none}.header-group-row.no-borders{border-bottom:none}.header-group-row.no-borders .header-group-cell{border-right:none}.header-row.no-group-borders .cell.group-end{border-right:1px solid var(--tbw-color-border)}}";
2493
+ class Mn extends F {
2393
2494
  static manifest = {
2394
2495
  ownedProperties: [
2395
2496
  {
@@ -2407,7 +2508,7 @@ class Fn extends I {
2407
2508
  queries: [{ type: "getColumnGrouping", description: "Returns column group metadata for the visibility panel" }]
2408
2509
  };
2409
2510
  name = "groupingColumns";
2410
- styles = oi;
2511
+ styles = ai;
2411
2512
  get defaultConfig() {
2412
2513
  return {
2413
2514
  showGroupBorders: !0,
@@ -2439,7 +2540,7 @@ class Fn extends I {
2439
2540
  };
2440
2541
  #o(e) {
2441
2542
  this.#t.clear();
2442
- const t = this.#r(e);
2543
+ const t = this.#s(e);
2443
2544
  for (const i of this.groups) {
2444
2545
  const n = new Set(i.columns.map((r) => r.field));
2445
2546
  for (let r = e.length - 1; r >= 0; r--)
@@ -2450,7 +2551,7 @@ class Fn extends I {
2450
2551
  }
2451
2552
  }
2452
2553
  }
2453
- #r(e) {
2554
+ #s(e) {
2454
2555
  if (this.groups.length === 0) return null;
2455
2556
  for (let t = e.length - 1; t >= 0; t--) {
2456
2557
  const i = e[t];
@@ -2478,9 +2579,9 @@ class Fn extends I {
2478
2579
  }
2479
2580
  handleQuery(e) {
2480
2581
  if (e.type === "getColumnGrouping")
2481
- return this.#s();
2582
+ return this.#r();
2482
2583
  }
2483
- #s() {
2584
+ #r() {
2484
2585
  let e;
2485
2586
  const t = this.grid?.gridConfig?.columnGroups;
2486
2587
  if (t && Array.isArray(t) && t.length > 0)
@@ -2522,7 +2623,7 @@ class Fn extends I {
2522
2623
  if (t?.columnGroups && Array.isArray(t.columnGroups) && t.columnGroups.length > 0)
2523
2624
  return !0;
2524
2625
  const i = t?.columns;
2525
- return Array.isArray(i) ? ri(i) : !1;
2626
+ return Array.isArray(i) ? si(i) : !1;
2526
2627
  }
2527
2628
  processColumns(e) {
2528
2629
  const t = this.grid?.gridConfig?.columnGroups;
@@ -2538,7 +2639,7 @@ class Fn extends I {
2538
2639
  });
2539
2640
  } else
2540
2641
  i = [...e];
2541
- const n = Ge(i);
2642
+ const n = Ke(i);
2542
2643
  if (n.length === 0)
2543
2644
  return this.isActive = !1, this.groups = [], i;
2544
2645
  this.isActive = !0, this.groups = n, this.#t.clear();
@@ -2558,21 +2659,21 @@ class Fn extends I {
2558
2659
  if (!e) return;
2559
2660
  const t = e.querySelector(".header-group-row");
2560
2661
  t && t.remove();
2561
- const i = this.visibleColumns, n = Ge(i);
2662
+ const i = this.visibleColumns, n = Ke(i);
2562
2663
  if (n.length === 0) return;
2563
2664
  this.#t.clear();
2564
2665
  for (let s = 0; s < n.length; s++) {
2565
2666
  const l = n[s], d = l.columns[l.columns.length - 1];
2566
2667
  d?.field && s < n.length - 1 && this.#t.add(d.field);
2567
2668
  }
2568
- const r = ni(n, i);
2669
+ const r = oi(n, i);
2569
2670
  if (r) {
2570
2671
  r.classList.toggle("no-borders", !this.config.showGroupBorders);
2571
2672
  const s = e.querySelector(".header-row");
2572
2673
  s ? e.insertBefore(r, s) : e.appendChild(r);
2573
2674
  }
2574
2675
  const o = e.querySelector(".header-row");
2575
- o && (o.classList.toggle("no-group-borders", !this.config.showGroupBorders), ii(o, n));
2676
+ o && (o.classList.toggle("no-group-borders", !this.config.showGroupBorders), ri(o, n));
2576
2677
  }
2577
2678
  afterCellRender(e) {
2578
2679
  !this.isActive || !this.config.showGroupBorders || e.cellElement.classList.toggle("group-end", this.#t.has(e.column.field));
@@ -2591,7 +2692,7 @@ class Fn extends I {
2591
2692
  this.requestRender();
2592
2693
  }
2593
2694
  }
2594
- function Ke({ rows: a, config: e, expanded: t, initialExpanded: i }) {
2695
+ function ze({ rows: a, config: e, expanded: t, initialExpanded: i }) {
2595
2696
  const n = e.groupOn;
2596
2697
  if (typeof n != "function")
2597
2698
  return [];
@@ -2624,20 +2725,20 @@ function Ke({ rows: a, config: e, expanded: t, initialExpanded: i }) {
2624
2725
  };
2625
2726
  return l(r), s;
2626
2727
  }
2627
- function si(a, e) {
2728
+ function li(a, e) {
2628
2729
  const t = new Set(a);
2629
2730
  return t.has(e) ? t.delete(e) : t.add(e), t;
2630
2731
  }
2631
- function ai(a) {
2732
+ function di(a) {
2632
2733
  const e = /* @__PURE__ */ new Set();
2633
2734
  for (const t of a)
2634
2735
  t.kind === "group" && e.add(t.key);
2635
2736
  return e;
2636
2737
  }
2637
- function li() {
2738
+ function ci() {
2638
2739
  return /* @__PURE__ */ new Set();
2639
2740
  }
2640
- function di(a, e) {
2741
+ function ui(a, e) {
2641
2742
  if (a === !0)
2642
2743
  return new Set(e);
2643
2744
  if (a === !1 || a == null)
@@ -2648,14 +2749,14 @@ function di(a, e) {
2648
2749
  }
2649
2750
  return typeof a == "string" ? /* @__PURE__ */ new Set([a]) : Array.isArray(a) ? new Set(a) : /* @__PURE__ */ new Set();
2650
2751
  }
2651
- function ci(a) {
2752
+ function hi(a) {
2652
2753
  return a.filter((e) => e.kind === "group").map((e) => e.key);
2653
2754
  }
2654
- function ui(a) {
2755
+ function fi(a) {
2655
2756
  return a.kind !== "group" ? 0 : a.rows.length;
2656
2757
  }
2657
- const hi = "@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}}}";
2658
- class Pn extends I {
2758
+ const gi = "@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}}}";
2759
+ class Dn extends F {
2659
2760
  static manifest = {
2660
2761
  events: [
2661
2762
  {
@@ -2682,7 +2783,7 @@ class Pn extends I {
2682
2783
  ]
2683
2784
  };
2684
2785
  name = "groupingRows";
2685
- styles = hi;
2786
+ styles = gi;
2686
2787
  get defaultConfig() {
2687
2788
  return {
2688
2789
  defaultExpanded: !1,
@@ -2720,7 +2821,7 @@ class Pn extends I {
2720
2821
  const t = this.config;
2721
2822
  if (typeof t.groupOn != "function")
2722
2823
  return this.isActive = !1, this.flattenedRows = [], [...e];
2723
- const i = Ke({
2824
+ const i = ze({
2724
2825
  rows: [...e],
2725
2826
  config: t,
2726
2827
  expanded: /* @__PURE__ */ new Set()
@@ -2729,10 +2830,10 @@ class Pn extends I {
2729
2830
  return this.isActive = !1, this.flattenedRows = [], [...e];
2730
2831
  let n;
2731
2832
  if (!this.hasAppliedDefaultExpanded && this.expandedKeys.size === 0 && t.defaultExpanded !== !1) {
2732
- const s = ci(i);
2733
- n = di(t.defaultExpanded ?? !1, s), n.size > 0 && (this.expandedKeys = new Set(n), this.hasAppliedDefaultExpanded = !0);
2833
+ const s = hi(i);
2834
+ n = ui(t.defaultExpanded ?? !1, s), n.size > 0 && (this.expandedKeys = new Set(n), this.hasAppliedDefaultExpanded = !0);
2734
2835
  }
2735
- const r = Ke({
2836
+ const r = ze({
2736
2837
  rows: [...e],
2737
2838
  config: t,
2738
2839
  expanded: this.expandedKeys,
@@ -2752,7 +2853,7 @@ class Pn extends I {
2752
2853
  __groupDepth: s.depth,
2753
2854
  __groupRows: s.rows,
2754
2855
  __groupExpanded: s.expanded,
2755
- __groupRowCount: ui(s),
2856
+ __groupRowCount: fi(s),
2756
2857
  __rowCacheKey: `group:${s.key}`
2757
2858
  } : s.row);
2758
2859
  }
@@ -2825,7 +2926,7 @@ class Pn extends I {
2825
2926
  const c = document.createElement("span");
2826
2927
  c.className = "group-aggregates";
2827
2928
  for (const [u, h] of d) {
2828
- const f = this.columns.find((p) => p.field === u), g = se(h, o, u, f);
2929
+ const f = this.columns.find((p) => p.field === u), g = ae(h, o, u, f);
2829
2930
  if (g != null) {
2830
2931
  const p = document.createElement("span");
2831
2932
  p.className = "group-aggregate", p.setAttribute("data-field", u);
@@ -2843,14 +2944,14 @@ class Pn extends I {
2843
2944
  let c = !1;
2844
2945
  o.forEach((u, h) => {
2845
2946
  const f = document.createElement("div");
2846
- if (f.className = "cell group-cell", f.setAttribute("data-col", String(h)), f.setAttribute("role", "gridcell"), oe(u)) {
2947
+ if (f.className = "cell group-cell", f.setAttribute("data-col", String(h)), f.setAttribute("role", "gridcell"), se(u)) {
2847
2948
  f.setAttribute("data-field", u.field), t.appendChild(f);
2848
2949
  return;
2849
2950
  }
2850
2951
  if (c) {
2851
2952
  const g = r[u.field];
2852
2953
  if (g) {
2853
- const p = se(g, s, u.field, u);
2954
+ const p = ae(g, s, u.field, u);
2854
2955
  f.textContent = p != null ? String(p) : "";
2855
2956
  } else
2856
2957
  f.textContent = "";
@@ -2858,7 +2959,7 @@ class Pn extends I {
2858
2959
  c = !0, f.appendChild(this.createToggleButton(e.__groupExpanded, i));
2859
2960
  const g = document.createElement("span"), p = r[u.field];
2860
2961
  if (p) {
2861
- const m = se(p, s, u.field, u);
2962
+ const m = ae(p, s, u.field, u);
2862
2963
  g.textContent = m != null ? String(m) : String(e.__groupValue);
2863
2964
  } else
2864
2965
  g.textContent = this.getGroupLabelText(e.__groupValue, e.__groupDepth || 0, e.__groupKey);
@@ -2871,10 +2972,10 @@ class Pn extends I {
2871
2972
  });
2872
2973
  }
2873
2974
  expandAll() {
2874
- this.expandedKeys = ai(this.flattenedRows), this.emitPluginEvent("grouping-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
2975
+ this.expandedKeys = di(this.flattenedRows), this.emitPluginEvent("grouping-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
2875
2976
  }
2876
2977
  collapseAll() {
2877
- this.expandedKeys = li(), this.emitPluginEvent("grouping-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
2978
+ this.expandedKeys = ci(), this.emitPluginEvent("grouping-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
2878
2979
  }
2879
2980
  toggle(e) {
2880
2981
  const t = !this.expandedKeys.has(e), i = this.config, n = this.flattenedRows.find((r) => r.kind === "group" && r.key === e);
@@ -2889,7 +2990,7 @@ class Pn extends I {
2889
2990
  }
2890
2991
  r.add(e), this.expandedKeys = r;
2891
2992
  } else
2892
- this.expandedKeys = si(this.expandedKeys, e);
2993
+ this.expandedKeys = li(this.expandedKeys, e);
2893
2994
  this.emit("group-toggle", {
2894
2995
  key: e,
2895
2996
  expanded: this.expandedKeys.has(e),
@@ -2939,22 +3040,22 @@ class Pn extends I {
2939
3040
  this.config.groupOn = e, this.requestRender();
2940
3041
  }
2941
3042
  }
2942
- function ze(a, e) {
3043
+ function Oe(a, e) {
2943
3044
  const t = new Set(a);
2944
3045
  return t.has(e) ? t.delete(e) : t.add(e), t;
2945
3046
  }
2946
- function fi(a, e) {
3047
+ function pi(a, e) {
2947
3048
  const t = new Set(a);
2948
3049
  return t.add(e), t;
2949
3050
  }
2950
- function gi(a, e) {
3051
+ function mi(a, e) {
2951
3052
  const t = new Set(a);
2952
3053
  return t.delete(e), t;
2953
3054
  }
2954
- function pi(a, e) {
3055
+ function bi(a, e) {
2955
3056
  return a.has(e);
2956
3057
  }
2957
- function mi(a, e, t, i) {
3058
+ function wi(a, e, t, i) {
2958
3059
  const n = document.createElement("div");
2959
3060
  n.className = "master-detail-row", n.setAttribute("data-detail-for", String(e)), n.setAttribute("role", "row");
2960
3061
  const r = document.createElement("div");
@@ -2962,10 +3063,10 @@ function mi(a, e, t, i) {
2962
3063
  const o = t(a, e);
2963
3064
  return typeof o == "string" ? r.innerHTML = o : o instanceof HTMLElement && r.appendChild(o), n.appendChild(r), n;
2964
3065
  }
2965
- const bi = "@layer tbw-plugins{tbw-grid{.cell[data-field=__tbw_expander]{border-right:none!important;padding:0;display:flex;align-items:center;justify-content:center}.header-row .cell[data-field=__tbw_expander]{display:none}.header-row .cell[data-field=__tbw_expander]+.cell{grid-column:1 / 3}.master-detail-expander{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.master-detail-toggle{cursor:pointer;opacity:.7;user-select:none;display:inline-flex;align-items:center;justify-content:center}.master-detail-toggle:hover{opacity:1}.master-detail-row{grid-column:1 / -1;display:grid;background:var(--tbw-master-detail-bg, var(--tbw-color-row-alt));border-bottom:1px solid var(--tbw-master-detail-border, var(--tbw-color-border));overflow:hidden}.master-detail-cell{padding:var(--tbw-detail-padding, var(--tbw-spacing-xl, 1rem));overflow:auto}.master-detail-row.tbw-expanding{animation:tbw-detail-expand var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}.master-detail-row.tbw-collapsing{animation:tbw-detail-collapse var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}}@keyframes tbw-detail-expand{0%{opacity:0;max-height:0;padding-top:0;padding-bottom:0}to{opacity:1;max-height:var(--tbw-detail-max-height, 31.25rem);padding-top:var(--tbw-detail-padding, var(--tbw-spacing-xl, 1rem));padding-bottom:var(--tbw-detail-padding, var(--tbw-spacing-xl, 1rem))}}@keyframes tbw-detail-collapse{0%{opacity:1;max-height:var(--tbw-detail-max-height, 31.25rem)}to{opacity:0;max-height:0}}}";
2966
- class ct extends I {
3066
+ const vi = "@layer tbw-plugins{tbw-grid{.cell[data-field=__tbw_expander]{border-right:none!important;padding:0;display:flex;align-items:center;justify-content:center}.header-row .cell[data-field=__tbw_expander]{display:none}.header-row .cell[data-field=__tbw_expander]+.cell{grid-column:1 / 3}.master-detail-expander{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.master-detail-toggle{cursor:pointer;opacity:.7;user-select:none;display:inline-flex;align-items:center;justify-content:center}.master-detail-toggle:hover{opacity:1}.master-detail-row{grid-column:1 / -1;display:grid;background:var(--tbw-master-detail-bg, var(--tbw-color-row-alt));border-bottom:1px solid var(--tbw-master-detail-border, var(--tbw-color-border));overflow:hidden}.master-detail-cell{padding:var(--tbw-detail-padding, var(--tbw-spacing-xl, 1rem));overflow:auto}.master-detail-row.tbw-expanding{animation:tbw-detail-expand var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}.master-detail-row.tbw-collapsing{animation:tbw-detail-collapse var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}}@keyframes tbw-detail-expand{0%{opacity:0;max-height:0;padding-top:0;padding-bottom:0}to{opacity:1;max-height:var(--tbw-detail-max-height, 31.25rem);padding-top:var(--tbw-detail-padding, var(--tbw-spacing-xl, 1rem));padding-bottom:var(--tbw-detail-padding, var(--tbw-spacing-xl, 1rem))}}@keyframes tbw-detail-collapse{0%{opacity:1;max-height:var(--tbw-detail-max-height, 31.25rem)}to{opacity:0;max-height:0}}}";
3067
+ class ut extends F {
2967
3068
  name = "masterDetail";
2968
- styles = bi;
3069
+ styles = vi;
2969
3070
  get defaultConfig() {
2970
3071
  return {
2971
3072
  detailHeight: "auto",
@@ -2994,8 +3095,8 @@ class ct extends I {
2994
3095
  n !== null && (d.animation = n === "false" ? !1 : n), r !== null && (d.showExpandColumn = r !== "false"), o !== null && (d.expandOnRowClick = o === "true"), s !== null && (d.collapseOnClickOutside = s === "true"), l !== null && (d.detailHeight = l === "auto" ? "auto" : parseInt(l, 10));
2995
3096
  const c = t.innerHTML.trim();
2996
3097
  c && !this.config.detailRenderer && (d.detailRenderer = (u, h) => {
2997
- const f = st(c, { value: u, row: u });
2998
- return at(f);
3098
+ const f = at(c, { value: u, row: u });
3099
+ return lt(f);
2999
3100
  }), Object.keys(d).length > 0 && (this.config = { ...this.config, ...d });
3000
3101
  }
3001
3102
  get animationStyle() {
@@ -3042,10 +3143,10 @@ class ct extends I {
3042
3143
  return this.measuredDetailHeights.set(e, r), r;
3043
3144
  }
3044
3145
  const i = this.measuredDetailHeights.get(e);
3045
- return i && i > 0 ? i : typeof this.config?.detailHeight == "number" ? this.config.detailHeight : ct.DEFAULT_DETAIL_HEIGHT;
3146
+ return i && i > 0 ? i : typeof this.config?.detailHeight == "number" ? this.config.detailHeight : ut.DEFAULT_DETAIL_HEIGHT;
3046
3147
  }
3047
3148
  toggleAndEmit(e, t) {
3048
- this.expandedRows = ze(this.expandedRows, e);
3149
+ this.expandedRows = Oe(this.expandedRows, e);
3049
3150
  const i = this.expandedRows.has(e);
3050
3151
  i && this.rowsToAnimate.add(e), this.emit("detail-expand", {
3051
3152
  rowIndex: t,
@@ -3060,9 +3161,9 @@ class ct extends I {
3060
3161
  if (!(this.config.showExpandColumn === !0 || this.config.showExpandColumn !== !1 && !!this.config.detailRenderer))
3061
3162
  return [...e];
3062
3163
  const i = [...e];
3063
- if (Yt(i))
3164
+ if (ei(i))
3064
3165
  return i;
3065
- const r = Xt(this.name);
3166
+ const r = ti(this.name);
3066
3167
  return r.viewRenderer = (o) => {
3067
3168
  const { row: s } = o, l = this.expandedRows.has(s), d = document.createElement("span");
3068
3169
  d.className = "master-detail-expander expander-cell";
@@ -3082,7 +3183,7 @@ class ct extends I {
3082
3183
  onKeyDown(e) {
3083
3184
  if (e.key !== " ") return;
3084
3185
  const t = this.grid._focusCol, i = this.grid._focusRow, n = this.columns[t];
3085
- if (!n || !oe(n)) return;
3186
+ if (!n || !se(n)) return;
3086
3187
  const r = this.rows[i];
3087
3188
  if (r)
3088
3189
  return e.preventDefault(), this.toggleAndEmit(r, i), this.requestRenderWithFocus(), !0;
@@ -3123,7 +3224,7 @@ class ct extends I {
3123
3224
  f.previousElementSibling !== u && u.after(f);
3124
3225
  continue;
3125
3226
  }
3126
- const g = mi(h, c, this.config.detailRenderer, o);
3227
+ const g = wi(h, c, this.config.detailRenderer, o);
3127
3228
  typeof this.config.detailHeight == "number" && (g.style.height = `${this.config.detailHeight}px`), u.after(g), this.detailElements.set(h, g);
3128
3229
  const p = this.rowsToAnimate.has(h);
3129
3230
  p && this.rowsToAnimate.delete(h), p && this.animateExpand(g, h, c) || requestAnimationFrame(() => {
@@ -3178,19 +3279,19 @@ class ct extends I {
3178
3279
  }
3179
3280
  expand(e) {
3180
3281
  const t = this.rows[e];
3181
- t && (this.rowsToAnimate.add(t), this.expandedRows = fi(this.expandedRows, t), this.requestRender());
3282
+ t && (this.rowsToAnimate.add(t), this.expandedRows = pi(this.expandedRows, t), this.requestRender());
3182
3283
  }
3183
3284
  collapse(e) {
3184
3285
  const t = this.rows[e];
3185
- t && (this.expandedRows = gi(this.expandedRows, t), this.requestRender());
3286
+ t && (this.expandedRows = mi(this.expandedRows, t), this.requestRender());
3186
3287
  }
3187
3288
  toggle(e) {
3188
3289
  const t = this.rows[e];
3189
- t && (this.expandedRows = ze(this.expandedRows, t), this.expandedRows.has(t) && this.rowsToAnimate.add(t), this.requestRender());
3290
+ t && (this.expandedRows = Oe(this.expandedRows, t), this.expandedRows.has(t) && this.rowsToAnimate.add(t), this.requestRender());
3190
3291
  }
3191
3292
  isExpanded(e) {
3192
3293
  const t = this.rows[e];
3193
- return t ? pi(this.expandedRows, t) : !1;
3294
+ return t ? bi(this.expandedRows, t) : !1;
3194
3295
  }
3195
3296
  expandAll() {
3196
3297
  for (const e of this.rows)
@@ -3220,34 +3321,34 @@ class ct extends I {
3220
3321
  }
3221
3322
  }
3222
3323
  }
3223
- function wi(a, e, t) {
3324
+ function yi(a, e, t) {
3224
3325
  return e.length ? [...a].sort((i, n) => {
3225
3326
  for (const r of e) {
3226
- const s = t.find((u) => u.field === r.field)?.sortComparator ?? vi, l = i[r.field], d = n[r.field], c = s(l, d, i, n);
3327
+ const s = t.find((u) => u.field === r.field)?.sortComparator ?? xi, l = i[r.field], d = n[r.field], c = s(l, d, i, n);
3227
3328
  if (c !== 0)
3228
3329
  return r.direction === "asc" ? c : -c;
3229
3330
  }
3230
3331
  return 0;
3231
3332
  }) : [...a];
3232
3333
  }
3233
- function vi(a, e) {
3334
+ function xi(a, e) {
3234
3335
  return a == null && e == null ? 0 : a == null ? 1 : e == null ? -1 : typeof a == "number" && typeof e == "number" ? a - e : a instanceof Date && e instanceof Date ? a.getTime() - e.getTime() : typeof a == "boolean" && typeof e == "boolean" ? a === e ? 0 : a ? -1 : 1 : String(a).localeCompare(String(e));
3235
3336
  }
3236
- function yi(a, e, t, i) {
3337
+ function Ci(a, e, t, i) {
3237
3338
  const n = a.find((r) => r.field === e);
3238
3339
  return t ? n ? n.direction === "asc" ? a.map((r) => r.field === e ? { ...r, direction: "desc" } : r) : a.filter((r) => r.field !== e) : a.length < i ? [...a, { field: e, direction: "asc" }] : a : n?.direction === "asc" ? [{ field: e, direction: "desc" }] : n?.direction === "desc" ? [] : [{ field: e, direction: "asc" }];
3239
3340
  }
3240
- function Oe(a, e) {
3341
+ function Be(a, e) {
3241
3342
  const t = a.findIndex((i) => i.field === e);
3242
3343
  return t >= 0 ? t + 1 : void 0;
3243
3344
  }
3244
- function Be(a, e) {
3345
+ function Ve(a, e) {
3245
3346
  return a.find((t) => t.field === e)?.direction;
3246
3347
  }
3247
- const xi = '@layer tbw-plugins{.header-cell[data-sort=asc]:after{content:"↑";margin-left:var(--tbw-spacing-xs, .25em);opacity:.8}.header-cell[data-sort=desc]:after{content:"↓";margin-left:var(--tbw-spacing-xs, .25em);opacity:.8}.sort-indicator{margin-left:var(--tbw-spacing-xs, .25em);opacity:.8}.sort-index{font-size:var(--tbw-font-size-2xs, .7em);background:var(--tbw-multi-sort-badge-bg, var(--tbw-color-panel-bg));color:var(--tbw-multi-sort-badge-color, var(--tbw-color-fg));border-radius:50%;width:var(--tbw-multi-sort-badge-size, 1em);height:var(--tbw-multi-sort-badge-size, 1em);display:inline-flex;align-items:center;justify-content:center;margin-left:var(--tbw-spacing-xs, .125em);font-weight:600}}';
3248
- class Dn extends I {
3348
+ const Ei = '@layer tbw-plugins{.header-cell[data-sort=asc]:after{content:"↑";margin-left:var(--tbw-spacing-xs, .25em);opacity:.8}.header-cell[data-sort=desc]:after{content:"↓";margin-left:var(--tbw-spacing-xs, .25em);opacity:.8}.sort-indicator{margin-left:var(--tbw-spacing-xs, .25em);opacity:.8}.sort-index{font-size:var(--tbw-font-size-2xs, .7em);background:var(--tbw-multi-sort-badge-bg, var(--tbw-color-panel-bg));color:var(--tbw-multi-sort-badge-color, var(--tbw-color-fg));border-radius:50%;width:var(--tbw-multi-sort-badge-size, 1em);height:var(--tbw-multi-sort-badge-size, 1em);display:inline-flex;align-items:center;justify-content:center;margin-left:var(--tbw-spacing-xs, .125em);font-weight:600}}';
3349
+ class qn extends F {
3249
3350
  name = "multiSort";
3250
- styles = xi;
3351
+ styles = Ei;
3251
3352
  get defaultConfig() {
3252
3353
  return {
3253
3354
  maxSortColumns: 3,
@@ -3255,16 +3356,23 @@ class Dn extends I {
3255
3356
  };
3256
3357
  }
3257
3358
  sortModel = [];
3359
+ cachedSortResult = null;
3258
3360
  detach() {
3259
- this.sortModel = [];
3361
+ this.sortModel = [], this.cachedSortResult = null;
3260
3362
  }
3261
3363
  processRows(e) {
3262
- return this.sortModel.length === 0 ? [...e] : wi([...e], this.sortModel, [...this.columns]);
3364
+ if (this.sortModel.length === 0)
3365
+ return this.cachedSortResult = null, [...e];
3366
+ const t = this.gridElement;
3367
+ if (t && !t._isGridEditMode && typeof t._activeEditRows == "number" && t._activeEditRows !== -1 && this.cachedSortResult && this.cachedSortResult.length === e.length)
3368
+ return [...this.cachedSortResult];
3369
+ const i = yi([...e], this.sortModel, [...this.columns]);
3370
+ return this.cachedSortResult = i, i;
3263
3371
  }
3264
3372
  onHeaderClick(e) {
3265
3373
  if (!this.columns.find((r) => r.field === e.field)?.sortable) return !1;
3266
3374
  const i = e.originalEvent.shiftKey, n = this.config.maxSortColumns ?? 3;
3267
- return this.sortModel = yi(this.sortModel, e.field, i, n), this.emit("sort-change", { sortModel: [...this.sortModel] }), this.requestRender(), !0;
3375
+ return this.sortModel = Ci(this.sortModel, e.field, i, n), this.emit("sort-change", { sortModel: [...this.sortModel] }), this.requestRender(), this.grid?.requestStateChange?.(), !0;
3268
3376
  }
3269
3377
  afterRender() {
3270
3378
  const e = this.gridElement;
@@ -3273,7 +3381,7 @@ class Dn extends I {
3273
3381
  e.querySelectorAll(".header-row .cell[data-field]").forEach((n) => {
3274
3382
  const r = n.getAttribute("data-field");
3275
3383
  if (!r) return;
3276
- const o = Oe(this.sortModel, r), s = Be(this.sortModel, r);
3384
+ const o = Be(this.sortModel, r), s = Ve(this.sortModel, r);
3277
3385
  if (n.querySelector(".sort-index")?.remove(), s) {
3278
3386
  n.querySelector('[part~="sort-indicator"], .sort-indicator')?.remove(), n.setAttribute("data-sort", s);
3279
3387
  const c = document.createElement("span");
@@ -3291,16 +3399,16 @@ class Dn extends I {
3291
3399
  return [...this.sortModel];
3292
3400
  }
3293
3401
  setSortModel(e) {
3294
- this.sortModel = [...e], this.emit("sort-change", { sortModel: [...e] }), this.requestRender();
3402
+ this.sortModel = [...e], this.emit("sort-change", { sortModel: [...e] }), this.requestRender(), this.grid?.requestStateChange?.();
3295
3403
  }
3296
3404
  clearSort() {
3297
- this.sortModel = [], this.emit("sort-change", { sortModel: [] }), this.requestRender();
3405
+ this.sortModel = [], this.emit("sort-change", { sortModel: [] }), this.requestRender(), this.grid?.requestStateChange?.();
3298
3406
  }
3299
3407
  getSortIndex(e) {
3300
- return Oe(this.sortModel, e);
3408
+ return Be(this.sortModel, e);
3301
3409
  }
3302
3410
  getSortDirection(e) {
3303
- return Be(this.sortModel, e);
3411
+ return Ve(this.sortModel, e);
3304
3412
  }
3305
3413
  getColumnState(e) {
3306
3414
  const t = this.sortModel.findIndex((n) => n.field === e);
@@ -3326,33 +3434,33 @@ class Dn extends I {
3326
3434
  function O(a) {
3327
3435
  return a.pinned ?? a.sticky ?? a.meta?.pinned ?? a.meta?.sticky;
3328
3436
  }
3329
- function xe(a, e) {
3330
- return Ct(a, e);
3331
- }
3332
- function ut(a, e) {
3333
- const t = O(a);
3334
- return t ? xe(t, e) === "left" : !1;
3437
+ function Ce(a, e) {
3438
+ return Et(a, e);
3335
3439
  }
3336
3440
  function ht(a, e) {
3337
3441
  const t = O(a);
3338
- return t ? xe(t, e) === "right" : !1;
3442
+ return t ? Ce(t, e) === "left" : !1;
3339
3443
  }
3340
- function Ci(a, e = "ltr") {
3341
- return a.filter((t) => ut(t, e));
3444
+ function ft(a, e) {
3445
+ const t = O(a);
3446
+ return t ? Ce(t, e) === "right" : !1;
3342
3447
  }
3343
- function Ei(a, e = "ltr") {
3448
+ function Ri(a, e = "ltr") {
3344
3449
  return a.filter((t) => ht(t, e));
3345
3450
  }
3346
- function ce(a) {
3451
+ function Si(a, e = "ltr") {
3452
+ return a.filter((t) => ft(t, e));
3453
+ }
3454
+ function ue(a) {
3347
3455
  return a.some((e) => O(e) != null);
3348
3456
  }
3349
- function Ve(a, e) {
3457
+ function $e(a, e) {
3350
3458
  const t = Array.from(a.querySelectorAll(".header-row .cell"));
3351
3459
  if (!t.length) return;
3352
3460
  const i = te(a);
3353
3461
  let n = 0;
3354
3462
  for (const o of e)
3355
- if (ut(o, i)) {
3463
+ if (ht(o, i)) {
3356
3464
  const s = t.find((l) => l.getAttribute("data-field") === o.field);
3357
3465
  s && (s.classList.add("sticky-left"), s.style.position = "sticky", s.style.left = n + "px", a.querySelectorAll(`.data-grid-row .cell[data-field="${o.field}"]`).forEach((l) => {
3358
3466
  l.classList.add("sticky-left"), l.style.position = "sticky", l.style.left = n + "px";
@@ -3360,28 +3468,28 @@ function Ve(a, e) {
3360
3468
  }
3361
3469
  let r = 0;
3362
3470
  for (const o of [...e].reverse())
3363
- if (ht(o, i)) {
3471
+ if (ft(o, i)) {
3364
3472
  const s = t.find((l) => l.getAttribute("data-field") === o.field);
3365
3473
  s && (s.classList.add("sticky-right"), s.style.position = "sticky", s.style.right = r + "px", a.querySelectorAll(`.data-grid-row .cell[data-field="${o.field}"]`).forEach((l) => {
3366
3474
  l.classList.add("sticky-right"), l.style.position = "sticky", l.style.right = r + "px";
3367
3475
  }), r += s.offsetWidth);
3368
3476
  }
3369
3477
  }
3370
- function Ri(a, e = "ltr") {
3478
+ function ki(a, e = "ltr") {
3371
3479
  const t = [], i = [], n = [];
3372
3480
  for (const r of a) {
3373
3481
  const o = O(r);
3374
- o ? xe(o, e) === "left" ? t.push(r) : n.push(r) : i.push(r);
3482
+ o ? Ce(o, e) === "left" ? t.push(r) : n.push(r) : i.push(r);
3375
3483
  }
3376
3484
  return [...t, ...i, ...n];
3377
3485
  }
3378
- function $e(a) {
3486
+ function We(a) {
3379
3487
  a.querySelectorAll(".sticky-left, .sticky-right").forEach((t) => {
3380
3488
  t.classList.remove("sticky-left", "sticky-right"), t.style.position = "", t.style.left = "", t.style.right = "";
3381
3489
  });
3382
3490
  }
3383
- const We = "canMoveColumn";
3384
- class Mn extends I {
3491
+ const je = "canMoveColumn";
3492
+ class Nn extends F {
3385
3493
  static manifest = {
3386
3494
  ownedProperties: [
3387
3495
  {
@@ -3405,7 +3513,7 @@ class Mn extends I {
3405
3513
  ],
3406
3514
  queries: [
3407
3515
  {
3408
- type: We,
3516
+ type: je,
3409
3517
  description: "Prevents pinned (sticky) columns from being moved/reordered"
3410
3518
  },
3411
3519
  {
@@ -3431,29 +3539,29 @@ class Mn extends I {
3431
3539
  }
3432
3540
  static detect(e, t) {
3433
3541
  const i = t?.columns;
3434
- return Array.isArray(i) ? ce(i) : !1;
3542
+ return Array.isArray(i) ? ue(i) : !1;
3435
3543
  }
3436
3544
  processColumns(e) {
3437
3545
  const t = [...e];
3438
- if (this.isApplied = ce(t), !this.isApplied) return t;
3546
+ if (this.isApplied = ue(t), !this.isApplied) return t;
3439
3547
  const i = this.gridElement, n = i ? te(i) : "ltr";
3440
- return Ri(t, n);
3548
+ return ki(t, n);
3441
3549
  }
3442
3550
  afterRender() {
3443
3551
  if (!this.isApplied)
3444
3552
  return;
3445
3553
  const e = this.grid, t = [...this.columns];
3446
- if (!ce(t)) {
3447
- $e(e), this.isApplied = !1;
3554
+ if (!ue(t)) {
3555
+ We(e), this.isApplied = !1;
3448
3556
  return;
3449
3557
  }
3450
3558
  queueMicrotask(() => {
3451
- Ve(e, t);
3559
+ $e(e, t);
3452
3560
  });
3453
3561
  }
3454
3562
  handleQuery(e) {
3455
3563
  switch (e.type) {
3456
- case We: {
3564
+ case je: {
3457
3565
  const t = e.context;
3458
3566
  return O(t) != null ? !1 : void 0;
3459
3567
  }
@@ -3529,18 +3637,18 @@ class Mn extends I {
3529
3637
  }
3530
3638
  refreshStickyOffsets() {
3531
3639
  const e = [...this.columns];
3532
- Ve(this.grid, e);
3640
+ $e(this.grid, e);
3533
3641
  }
3534
3642
  getLeftPinnedColumns() {
3535
3643
  const e = [...this.columns], t = te(this.grid);
3536
- return Ci(e, t);
3644
+ return Ri(e, t);
3537
3645
  }
3538
3646
  getRightPinnedColumns() {
3539
3647
  const e = [...this.columns], t = te(this.grid);
3540
- return Ei(e, t);
3648
+ return Si(e, t);
3541
3649
  }
3542
3650
  clearStickyPositions() {
3543
- $e(this.grid);
3651
+ We(this.grid);
3544
3652
  }
3545
3653
  getHorizontalScrollOffsets(e, t) {
3546
3654
  if (!this.isApplied)
@@ -3561,10 +3669,10 @@ class Mn extends I {
3561
3669
  return { left: i, right: n, skipScroll: r };
3562
3670
  }
3563
3671
  }
3564
- function Si(a) {
3672
+ function Ai(a) {
3565
3673
  return typeof a == "object" && a !== null && "aggFunc" in a;
3566
3674
  }
3567
- function ue(a, e) {
3675
+ function he(a, e) {
3568
3676
  const t = document.createElement("div");
3569
3677
  t.className = "tbw-pinned-rows", t.setAttribute("role", "presentation"), t.setAttribute("aria-live", "polite");
3570
3678
  const i = document.createElement("div");
@@ -3586,7 +3694,7 @@ function ue(a, e) {
3586
3694
  }
3587
3695
  if (a.customPanels)
3588
3696
  for (const o of a.customPanels) {
3589
- const s = Li(o, e);
3697
+ const s = Ti(o, e);
3590
3698
  switch (o.position) {
3591
3699
  case "left":
3592
3700
  i.appendChild(s);
@@ -3601,18 +3709,18 @@ function ue(a, e) {
3601
3709
  }
3602
3710
  return t.appendChild(i), t.appendChild(n), t.appendChild(r), t;
3603
3711
  }
3604
- function je(a) {
3712
+ function Ue(a) {
3605
3713
  const e = document.createElement("div");
3606
3714
  return e.className = `tbw-aggregation-rows tbw-aggregation-rows-${a}`, e.setAttribute("role", "presentation"), e;
3607
3715
  }
3608
- function Ue(a, e, t, i, n = !1) {
3716
+ function Ye(a, e, t, i, n = !1) {
3609
3717
  a.innerHTML = "";
3610
3718
  for (const r of e) {
3611
3719
  const o = document.createElement("div");
3612
- o.className = "tbw-aggregation-row", o.setAttribute("role", "presentation"), r.id && o.setAttribute("data-aggregation-id", r.id), r.fullWidth ?? n ? ki(o, r, t, i) : Ai(o, r, t, i), a.appendChild(o);
3720
+ o.className = "tbw-aggregation-row", o.setAttribute("role", "presentation"), r.id && o.setAttribute("data-aggregation-id", r.id), r.fullWidth ?? n ? _i(o, r, t, i) : Li(o, r, t, i), a.appendChild(o);
3613
3721
  }
3614
3722
  }
3615
- function ki(a, e, t, i) {
3723
+ function _i(a, e, t, i) {
3616
3724
  const n = document.createElement("div");
3617
3725
  n.className = "tbw-aggregation-cell tbw-aggregation-cell-full", n.style.gridColumn = "1 / -1";
3618
3726
  const r = typeof e.label == "function" ? e.label(i, t) : e.label;
@@ -3620,26 +3728,26 @@ function ki(a, e, t, i) {
3620
3728
  const s = document.createElement("span");
3621
3729
  s.className = "tbw-aggregation-label", s.textContent = r, n.appendChild(s);
3622
3730
  }
3623
- const o = _i(e, t, i);
3731
+ const o = Ii(e, t, i);
3624
3732
  o && n.appendChild(o), a.appendChild(n);
3625
3733
  }
3626
- function Ai(a, e, t, i) {
3734
+ function Li(a, e, t, i) {
3627
3735
  for (const n of t) {
3628
3736
  const r = document.createElement("div");
3629
3737
  r.className = "tbw-aggregation-cell", r.setAttribute("data-field", n.field);
3630
- const { value: o, formatter: s } = ft(e, n, i);
3738
+ const { value: o, formatter: s } = gt(e, n, i);
3631
3739
  o != null ? r.textContent = s ? s(o, n.field, n) : String(o) : r.textContent = "", a.appendChild(r);
3632
3740
  }
3633
3741
  }
3634
- function ft(a, e, t) {
3742
+ function gt(a, e, t) {
3635
3743
  let i, n;
3636
3744
  const r = a.aggregators?.[e.field];
3637
3745
  if (r)
3638
- if (Si(r)) {
3639
- const o = Re(r.aggFunc);
3746
+ if (Ai(r)) {
3747
+ const o = Se(r.aggFunc);
3640
3748
  o && (i = o(t, e.field, e)), n = r.formatter;
3641
3749
  } else {
3642
- const o = Re(r);
3750
+ const o = Se(r);
3643
3751
  o && (i = o(t, e.field, e));
3644
3752
  }
3645
3753
  else if (a.cells && Object.prototype.hasOwnProperty.call(a.cells, e.field)) {
@@ -3648,13 +3756,13 @@ function ft(a, e, t) {
3648
3756
  }
3649
3757
  return { value: i, formatter: n };
3650
3758
  }
3651
- function _i(a, e, t) {
3759
+ function Ii(a, e, t) {
3652
3760
  const i = a.aggregators && Object.keys(a.aggregators).length > 0, n = a.cells && Object.keys(a.cells).length > 0;
3653
3761
  if (!i && !n) return null;
3654
3762
  const r = document.createElement("span");
3655
3763
  r.className = "tbw-aggregation-aggregates";
3656
3764
  for (const o of e) {
3657
- const { value: s, formatter: l } = ft(a, o, t);
3765
+ const { value: s, formatter: l } = gt(a, o, t);
3658
3766
  if (s != null) {
3659
3767
  const d = document.createElement("span");
3660
3768
  d.className = "tbw-aggregation-aggregate", d.setAttribute("data-field", o.field);
@@ -3664,13 +3772,13 @@ function _i(a, e, t) {
3664
3772
  }
3665
3773
  return r.children.length > 0 ? r : null;
3666
3774
  }
3667
- function Li(a, e) {
3775
+ function Ti(a, e) {
3668
3776
  const t = document.createElement("div");
3669
3777
  t.className = "tbw-status-panel tbw-status-panel-custom", t.id = `status-panel-${a.id}`;
3670
3778
  const i = a.render(e);
3671
3779
  return typeof i == "string" ? t.innerHTML = i : t.appendChild(i), t;
3672
3780
  }
3673
- function Ye(a, e, t, i, n) {
3781
+ function Xe(a, e, t, i, n) {
3674
3782
  return {
3675
3783
  totalRows: a.length,
3676
3784
  filteredRows: n?.cachedResult?.length ?? a.length,
@@ -3680,10 +3788,10 @@ function Ye(a, e, t, i, n) {
3680
3788
  grid: t
3681
3789
  };
3682
3790
  }
3683
- const Ti = "@layer tbw-plugins{.tbw-footer{flex-shrink:0;z-index:var(--tbw-z-layer-pinned-rows, 20);background:var(--tbw-color-panel-bg)}.tbw-pinned-rows{display:flex;align-items:center;justify-content:space-between;padding:var(--tbw-button-padding, var(--tbw-spacing-md, .5rem) var(--tbw-spacing-lg, .75rem));background:var(--tbw-pinned-rows-bg, var(--tbw-color-panel-bg));border-top:1px solid var(--tbw-pinned-rows-border, var(--tbw-color-border));font-size:var(--tbw-font-size-xs, .75rem);color:var(--tbw-pinned-rows-color, var(--tbw-color-fg-muted));min-height:32px;box-sizing:border-box;min-width:fit-content}.tbw-pinned-rows-left,.tbw-pinned-rows-center,.tbw-pinned-rows-right{display:flex;align-items:center;gap:var(--tbw-spacing-xl, 1rem)}.tbw-pinned-rows-left{justify-content:flex-start}.tbw-pinned-rows-center{justify-content:center;flex:1}.tbw-pinned-rows-right{justify-content:flex-end}.tbw-status-panel{white-space:nowrap}.tbw-aggregation-rows{min-width:fit-content;background:var(--tbw-aggregation-bg, var(--tbw-color-header-bg))}.tbw-aggregation-rows-top{border-bottom:1px solid var(--tbw-aggregation-border, var(--tbw-color-border))}.tbw-aggregation-rows-bottom{border-top:1px solid var(--tbw-aggregation-border, var(--tbw-color-border))}.tbw-aggregation-row{display:grid;grid-template-columns:var(--tbw-column-template);font-size:var(--tbw-aggregation-font-size, .8em);font-weight:var(--tbw-aggregation-font-weight, 600)}.tbw-aggregation-cell{padding:var(--tbw-cell-padding, .125rem .5rem);min-height:var(--tbw-row-height, 1.75rem);display:block;align-items:center;align-content:center;border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;text-overflow:ellipsis;white-space:var(--tbw-cell-white-space, nowrap)}.tbw-aggregation-cell:last-child{border-right:0}.tbw-aggregation-cell-full{grid-column:1 / -1;border-right:0;display:flex;align-items:center;gap:var(--tbw-spacing-lg, .75rem)}.tbw-aggregation-label{white-space:nowrap}.tbw-aggregation-aggregates{display:flex;align-items:center;gap:var(--tbw-spacing-lg, .75rem);font-weight:400;opacity:.85}.tbw-aggregation-aggregate{white-space:nowrap}}";
3684
- class qn extends I {
3791
+ const Fi = "@layer tbw-plugins{.tbw-footer{flex-shrink:0;z-index:var(--tbw-z-layer-pinned-rows, 20);background:var(--tbw-color-panel-bg)}.tbw-pinned-rows{display:flex;align-items:center;justify-content:space-between;padding:var(--tbw-button-padding, var(--tbw-spacing-md, .5rem) var(--tbw-spacing-lg, .75rem));background:var(--tbw-pinned-rows-bg, var(--tbw-color-panel-bg));border-top:1px solid var(--tbw-pinned-rows-border, var(--tbw-color-border));font-size:var(--tbw-font-size-xs, .75rem);color:var(--tbw-pinned-rows-color, var(--tbw-color-fg-muted));min-height:32px;box-sizing:border-box;min-width:fit-content}.tbw-pinned-rows-left,.tbw-pinned-rows-center,.tbw-pinned-rows-right{display:flex;align-items:center;gap:var(--tbw-spacing-xl, 1rem)}.tbw-pinned-rows-left{justify-content:flex-start}.tbw-pinned-rows-center{justify-content:center;flex:1}.tbw-pinned-rows-right{justify-content:flex-end}.tbw-status-panel{white-space:nowrap}.tbw-aggregation-rows{min-width:fit-content;background:var(--tbw-aggregation-bg, var(--tbw-color-header-bg))}.tbw-aggregation-rows-top{border-bottom:1px solid var(--tbw-aggregation-border, var(--tbw-color-border))}.tbw-aggregation-rows-bottom{border-top:1px solid var(--tbw-aggregation-border, var(--tbw-color-border))}.tbw-aggregation-row{display:grid;grid-template-columns:var(--tbw-column-template);font-size:var(--tbw-aggregation-font-size, .8em);font-weight:var(--tbw-aggregation-font-weight, 600)}.tbw-aggregation-cell{padding:var(--tbw-cell-padding, .125rem .5rem);min-height:var(--tbw-row-height, 1.75rem);display:block;align-items:center;align-content:center;border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;text-overflow:ellipsis;white-space:var(--tbw-cell-white-space, nowrap)}.tbw-aggregation-cell:last-child{border-right:0}.tbw-aggregation-cell-full{grid-column:1 / -1;border-right:0;display:flex;align-items:center;gap:var(--tbw-spacing-lg, .75rem)}.tbw-aggregation-label{white-space:nowrap}.tbw-aggregation-aggregates{display:flex;align-items:center;gap:var(--tbw-spacing-lg, .75rem);font-weight:400;opacity:.85}.tbw-aggregation-aggregate{white-space:nowrap}}";
3792
+ class Hn extends F {
3685
3793
  name = "pinnedRows";
3686
- styles = Ti;
3794
+ styles = Fi;
3687
3795
  get defaultConfig() {
3688
3796
  return {
3689
3797
  position: "bottom",
@@ -3705,7 +3813,7 @@ class qn extends I {
3705
3813
  const t = e.querySelector(".tbw-scroll-area") ?? e.querySelector(".tbw-grid-content") ?? e.children[0];
3706
3814
  if (!t) return;
3707
3815
  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);
3708
- const i = this.getSelectionState(), n = this.getFilterState(), r = Ye(
3816
+ const i = this.getSelectionState(), n = this.getFilterState(), r = Xe(
3709
3817
  this.sourceRows,
3710
3818
  this.columns,
3711
3819
  this.grid,
@@ -3714,11 +3822,11 @@ class qn extends I {
3714
3822
  ), o = this.config.aggregationRows || [], s = o.filter((h) => h.position === "top"), l = o.filter((h) => h.position !== "top");
3715
3823
  if (s.length > 0) {
3716
3824
  if (!this.topAggregationContainer) {
3717
- this.topAggregationContainer = je("top");
3825
+ this.topAggregationContainer = Ue("top");
3718
3826
  const h = e.querySelector(".header");
3719
3827
  h && h.nextSibling ? t.insertBefore(this.topAggregationContainer, h.nextSibling) : t.appendChild(this.topAggregationContainer);
3720
3828
  }
3721
- Ue(
3829
+ Ye(
3722
3830
  this.topAggregationContainer,
3723
3831
  s,
3724
3832
  this.visibleColumns,
@@ -3729,19 +3837,19 @@ class qn extends I {
3729
3837
  const d = this.config.showRowCount !== !1 || this.config.showSelectedCount && r.selectedRows > 0 || this.config.showFilteredCount && r.filteredRows !== r.totalRows || this.config.customPanels && this.config.customPanels.length > 0, c = d && this.config.position !== "top", u = l.length > 0 || c;
3730
3838
  if (d && this.config.position === "top")
3731
3839
  if (!this.infoBarElement)
3732
- this.infoBarElement = ue(this.config, r), t.insertBefore(this.infoBarElement, t.firstChild);
3840
+ this.infoBarElement = he(this.config, r), t.insertBefore(this.infoBarElement, t.firstChild);
3733
3841
  else {
3734
- const h = ue(this.config, r);
3842
+ const h = he(this.config, r);
3735
3843
  this.infoBarElement.replaceWith(h), this.infoBarElement = h;
3736
3844
  }
3737
3845
  else this.config.position === "top" && this.infoBarElement && (this.infoBarElement.remove(), this.infoBarElement = null);
3738
- u ? (this.footerWrapper || (this.footerWrapper = document.createElement("div"), this.footerWrapper.className = "tbw-footer", t.appendChild(this.footerWrapper)), this.footerWrapper.innerHTML = "", l.length > 0 && (this.bottomAggregationContainer || (this.bottomAggregationContainer = je("bottom")), this.footerWrapper.appendChild(this.bottomAggregationContainer), Ue(
3846
+ u ? (this.footerWrapper || (this.footerWrapper = document.createElement("div"), this.footerWrapper.className = "tbw-footer", t.appendChild(this.footerWrapper)), this.footerWrapper.innerHTML = "", l.length > 0 && (this.bottomAggregationContainer || (this.bottomAggregationContainer = Ue("bottom")), this.footerWrapper.appendChild(this.bottomAggregationContainer), Ye(
3739
3847
  this.bottomAggregationContainer,
3740
3848
  l,
3741
3849
  this.visibleColumns,
3742
3850
  this.sourceRows,
3743
3851
  this.config.fullWidth
3744
- )), c && (this.infoBarElement = ue(this.config, r), this.footerWrapper.appendChild(this.infoBarElement))) : this.cleanupFooter();
3852
+ )), c && (this.infoBarElement = he(this.config, r), this.footerWrapper.appendChild(this.infoBarElement))) : this.cleanupFooter();
3745
3853
  }
3746
3854
  cleanup() {
3747
3855
  this.infoBarElement && (this.infoBarElement.remove(), this.infoBarElement = null), this.topAggregationContainer && (this.topAggregationContainer.remove(), this.topAggregationContainer = null), this.bottomAggregationContainer && (this.bottomAggregationContainer.remove(), this.bottomAggregationContainer = null), this.footerWrapper && (this.footerWrapper.remove(), this.footerWrapper = null);
@@ -3768,7 +3876,7 @@ class qn extends I {
3768
3876
  }
3769
3877
  getContext() {
3770
3878
  const e = this.getSelectionState(), t = this.getFilterState();
3771
- return Ye(
3879
+ return Xe(
3772
3880
  this.rows,
3773
3881
  this.columns,
3774
3882
  this.grid,
@@ -3789,16 +3897,16 @@ class qn extends I {
3789
3897
  this.config.aggregationRows && (this.config.aggregationRows = this.config.aggregationRows.filter((t) => t.id !== e), this.requestRender());
3790
3898
  }
3791
3899
  }
3792
- const Ii = Et;
3793
- function Fi(a) {
3900
+ const Pi = Rt;
3901
+ function Mi(a) {
3794
3902
  const e = [];
3795
3903
  return !a.rowGroupFields?.length && !a.columnGroupFields?.length && e.push("At least one row or column group field is required"), a.valueFields?.length || e.push("At least one value field is required"), e;
3796
3904
  }
3797
- function Ce(a, e) {
3905
+ function Ee(a, e) {
3798
3906
  return [...a, e].join("|");
3799
3907
  }
3800
- function Pi(a, e) {
3801
- const t = e.rowGroupFields ?? [], i = e.columnGroupFields ?? [], n = e.valueFields ?? [], r = Di(a, i), o = gt(
3908
+ function Di(a, e) {
3909
+ const t = e.rowGroupFields ?? [], i = e.columnGroupFields ?? [], n = e.valueFields ?? [], r = qi(a, i), o = pt(
3802
3910
  a,
3803
3911
  t,
3804
3912
  i,
@@ -3806,7 +3914,7 @@ function Pi(a, e) {
3806
3914
  n,
3807
3915
  0,
3808
3916
  ""
3809
- ), s = qi(o, r, n), l = Object.values(s).reduce((d, c) => d + c, 0);
3917
+ ), s = Hi(o, r, n), l = Object.values(s).reduce((d, c) => d + c, 0);
3810
3918
  return {
3811
3919
  rows: o,
3812
3920
  columnKeys: r,
@@ -3814,7 +3922,7 @@ function Pi(a, e) {
3814
3922
  grandTotal: l
3815
3923
  };
3816
3924
  }
3817
- function Di(a, e) {
3925
+ function qi(a, e) {
3818
3926
  if (e.length === 0) return ["value"];
3819
3927
  const t = /* @__PURE__ */ new Set();
3820
3928
  for (const i of a) {
@@ -3823,7 +3931,7 @@ function Di(a, e) {
3823
3931
  }
3824
3932
  return [...t].sort();
3825
3933
  }
3826
- function Mi(a, e) {
3934
+ function Ni(a, e) {
3827
3935
  const t = /* @__PURE__ */ new Map();
3828
3936
  for (const i of a) {
3829
3937
  const n = String(i[e] ?? ""), r = t.get(n);
@@ -3831,10 +3939,10 @@ function Mi(a, e) {
3831
3939
  }
3832
3940
  return t;
3833
3941
  }
3834
- function gt(a, e, t, i, n, r, o) {
3942
+ function pt(a, e, t, i, n, r, o) {
3835
3943
  const s = [];
3836
3944
  if (e.length === 0) {
3837
- const h = Xe(a, t, i, n), f = Qe(h);
3945
+ const h = Qe(a, t, i, n), f = Ze(h);
3838
3946
  return s.push({
3839
3947
  rowKey: o || "all",
3840
3948
  rowLabel: o || "All",
@@ -3845,11 +3953,11 @@ function gt(a, e, t, i, n, r, o) {
3845
3953
  rowCount: a.length
3846
3954
  }), s;
3847
3955
  }
3848
- const l = e[0], d = e.slice(1), c = d.length > 0, u = Mi(a, l);
3956
+ const l = e[0], d = e.slice(1), c = d.length > 0, u = Ni(a, l);
3849
3957
  for (const [h, f] of u) {
3850
- const g = o ? `${o}|${h}` : h, p = Xe(f, t, i, n), m = Qe(p);
3851
- let v;
3852
- c && (v = gt(
3958
+ const g = o ? `${o}|${h}` : h, p = Qe(f, t, i, n), m = Ze(p);
3959
+ let x;
3960
+ c && (x = pt(
3853
3961
  f,
3854
3962
  d,
3855
3963
  t,
@@ -3864,42 +3972,42 @@ function gt(a, e, t, i, n, r, o) {
3864
3972
  values: p,
3865
3973
  total: m,
3866
3974
  isGroup: c,
3867
- children: v,
3975
+ children: x,
3868
3976
  rowCount: f.length
3869
3977
  });
3870
3978
  }
3871
3979
  return s;
3872
3980
  }
3873
- function Xe(a, e, t, i) {
3981
+ function Qe(a, e, t, i) {
3874
3982
  const n = {};
3875
3983
  for (const r of t)
3876
3984
  for (const o of i) {
3877
- const l = (e.length > 0 ? a.filter((h) => e.map((f) => String(h[f] ?? "")).join("|") === r) : a).map((h) => Number(h[o.field]) || 0), d = Ii(o.aggFunc), c = l.length > 0 ? d(l) : null, u = Ce([r], o.field);
3985
+ const l = (e.length > 0 ? a.filter((h) => e.map((f) => String(h[f] ?? "")).join("|") === r) : a).map((h) => Number(h[o.field]) || 0), d = Pi(o.aggFunc), c = l.length > 0 ? d(l) : null, u = Ee([r], o.field);
3878
3986
  n[u] = c;
3879
3987
  }
3880
3988
  return n;
3881
3989
  }
3882
- function Qe(a) {
3990
+ function Ze(a) {
3883
3991
  let e = 0;
3884
3992
  for (const t of Object.values(a))
3885
3993
  e += t ?? 0;
3886
3994
  return e;
3887
3995
  }
3888
- function qi(a, e, t) {
3996
+ function Hi(a, e, t) {
3889
3997
  const i = {};
3890
3998
  function n(r) {
3891
3999
  for (const o of r)
3892
4000
  if (!o.isGroup || !o.children?.length)
3893
4001
  for (const s of e)
3894
4002
  for (const l of t) {
3895
- const d = Ce([s], l.field);
4003
+ const d = Ee([s], l.field);
3896
4004
  i[d] = (i[d] ?? 0) + (o.values[d] ?? 0);
3897
4005
  }
3898
4006
  else o.children && n(o.children);
3899
4007
  }
3900
4008
  return n(a), i;
3901
4009
  }
3902
- function Ni(a, e, t = !0) {
4010
+ function Gi(a, e, t = !0) {
3903
4011
  const i = [];
3904
4012
  function n(r) {
3905
4013
  i.push(r);
@@ -3912,7 +4020,7 @@ function Ni(a, e, t = !0) {
3912
4020
  n(r);
3913
4021
  return i;
3914
4022
  }
3915
- function Hi(a) {
4023
+ function Ki(a) {
3916
4024
  const e = [];
3917
4025
  function t(i) {
3918
4026
  if (i.isGroup && e.push(i.rowKey), i.children)
@@ -3923,10 +4031,10 @@ function Hi(a) {
3923
4031
  t(i);
3924
4032
  return e;
3925
4033
  }
3926
- const Gi = ["sum", "avg", "count", "min", "max", "first", "last"];
3927
- function Ki(a, e, t, i) {
4034
+ const zi = ["sum", "avg", "count", "min", "max", "first", "last"];
4035
+ function Oi(a, e, t, i) {
3928
4036
  const n = new AbortController(), r = { config: e, callbacks: i, signal: n.signal }, o = document.createElement("div");
3929
- return o.className = "tbw-pivot-panel", o.appendChild(J("Options", () => $i(t, r))), o.appendChild(J("Row Groups", () => Ze("rowGroups", r))), o.appendChild(J("Column Groups", () => Ze("columnGroups", r))), o.appendChild(J("Values", () => Oi(r))), o.appendChild(J("Available Fields", () => Vi(r))), a.appendChild(o), () => {
4037
+ return o.className = "tbw-pivot-panel", o.appendChild(J("Options", () => ji(t, r))), o.appendChild(J("Row Groups", () => Je("rowGroups", r))), o.appendChild(J("Column Groups", () => Je("columnGroups", r))), o.appendChild(J("Values", () => Vi(r))), o.appendChild(J("Available Fields", () => Wi(r))), a.appendChild(o), () => {
3930
4038
  n.abort(), o.remove();
3931
4039
  };
3932
4040
  }
@@ -3938,7 +4046,7 @@ function J(a, e) {
3938
4046
  const n = document.createElement("div");
3939
4047
  return n.className = "tbw-pivot-section-content", n.appendChild(e()), t.appendChild(i), t.appendChild(n), t;
3940
4048
  }
3941
- function Ze(a, e) {
4049
+ function Je(a, e) {
3942
4050
  const { config: t, callbacks: i, signal: n } = e, r = document.createElement("div");
3943
4051
  r.className = "tbw-pivot-drop-zone", r.setAttribute("data-zone", a);
3944
4052
  const o = a === "rowGroups" ? t.rowGroupFields ?? [] : t.columnGroupFields ?? [];
@@ -3947,7 +4055,7 @@ function Ze(a, e) {
3947
4055
  s.className = "tbw-pivot-placeholder", s.textContent = "Drag fields here or click to add", r.appendChild(s);
3948
4056
  } else
3949
4057
  for (const s of o)
3950
- r.appendChild(zi(s, a, e));
4058
+ r.appendChild(Bi(s, a, e));
3951
4059
  return r.addEventListener(
3952
4060
  "dragover",
3953
4061
  (s) => {
@@ -3970,7 +4078,7 @@ function Ze(a, e) {
3970
4078
  { signal: n }
3971
4079
  ), r;
3972
4080
  }
3973
- function zi(a, e, t) {
4081
+ function Bi(a, e, t) {
3974
4082
  const { callbacks: i, signal: n } = t, r = document.createElement("div");
3975
4083
  r.className = "tbw-pivot-field-chip", r.draggable = !0;
3976
4084
  const o = i.getAvailableFields().find((d) => d.field === a), s = document.createElement("span");
@@ -3996,7 +4104,7 @@ function zi(a, e, t) {
3996
4104
  { signal: n }
3997
4105
  ), r;
3998
4106
  }
3999
- function Oi(a) {
4107
+ function Vi(a) {
4000
4108
  const { config: e, callbacks: t, signal: i } = a, n = document.createElement("div");
4001
4109
  n.className = "tbw-pivot-drop-zone tbw-pivot-values-zone", n.setAttribute("data-zone", "values");
4002
4110
  const r = e.valueFields ?? [];
@@ -4005,7 +4113,7 @@ function Oi(a) {
4005
4113
  o.className = "tbw-pivot-placeholder", o.textContent = "Drag numeric fields here for aggregation", n.appendChild(o);
4006
4114
  } else
4007
4115
  for (const o of r)
4008
- n.appendChild(Bi(o, a));
4116
+ n.appendChild($i(o, a));
4009
4117
  return n.addEventListener(
4010
4118
  "dragover",
4011
4119
  (o) => {
@@ -4028,7 +4136,7 @@ function Oi(a) {
4028
4136
  { signal: i }
4029
4137
  ), n;
4030
4138
  }
4031
- function Bi(a, e) {
4139
+ function $i(a, e) {
4032
4140
  const { callbacks: t, signal: i } = e, n = document.createElement("div");
4033
4141
  n.className = "tbw-pivot-field-chip tbw-pivot-value-chip";
4034
4142
  const r = t.getAvailableFields().find((c) => c.field === a.field), o = document.createElement("div");
@@ -4037,7 +4145,7 @@ function Bi(a, e) {
4037
4145
  s.className = "tbw-pivot-chip-label", s.textContent = r?.header ?? a.field;
4038
4146
  const l = document.createElement("select");
4039
4147
  l.className = "tbw-pivot-agg-select", l.title = "Aggregation function";
4040
- for (const c of Gi) {
4148
+ for (const c of zi) {
4041
4149
  const u = document.createElement("option");
4042
4150
  u.value = c, u.textContent = c.toUpperCase(), u.selected = c === a.aggFunc, l.appendChild(u);
4043
4151
  }
@@ -4057,7 +4165,7 @@ function Bi(a, e) {
4057
4165
  { signal: i }
4058
4166
  ), o.appendChild(s), o.appendChild(l), n.appendChild(o), n.appendChild(d), n;
4059
4167
  }
4060
- function Vi(a) {
4168
+ function Wi(a) {
4061
4169
  const { config: e, callbacks: t, signal: i } = a, n = document.createElement("div");
4062
4170
  n.className = "tbw-pivot-available-fields";
4063
4171
  const r = t.getAvailableFields(), o = /* @__PURE__ */ new Set([
@@ -4087,10 +4195,10 @@ function Vi(a) {
4087
4195
  }
4088
4196
  return n;
4089
4197
  }
4090
- function $i(a, e) {
4198
+ function ji(a, e) {
4091
4199
  const { config: t, callbacks: i, signal: n } = e, r = document.createElement("div");
4092
4200
  return r.className = "tbw-pivot-options", r.appendChild(
4093
- he(
4201
+ fe(
4094
4202
  "Enable Pivot View",
4095
4203
  a,
4096
4204
  (o) => {
@@ -4099,7 +4207,7 @@ function $i(a, e) {
4099
4207
  n
4100
4208
  )
4101
4209
  ), r.appendChild(
4102
- he(
4210
+ fe(
4103
4211
  "Show Row Totals",
4104
4212
  t.showTotals ?? !0,
4105
4213
  (o) => {
@@ -4108,7 +4216,7 @@ function $i(a, e) {
4108
4216
  n
4109
4217
  )
4110
4218
  ), r.appendChild(
4111
- he(
4219
+ fe(
4112
4220
  "Show Grand Total",
4113
4221
  t.showGrandTotal ?? !0,
4114
4222
  (o) => {
@@ -4118,7 +4226,7 @@ function $i(a, e) {
4118
4226
  )
4119
4227
  ), r;
4120
4228
  }
4121
- function he(a, e, t, i) {
4229
+ function fe(a, e, t, i) {
4122
4230
  const n = document.createElement("label");
4123
4231
  n.className = "tbw-pivot-checkbox";
4124
4232
  const r = document.createElement("input");
@@ -4126,7 +4234,7 @@ function he(a, e, t, i) {
4126
4234
  const o = document.createElement("span");
4127
4235
  return o.textContent = a, n.appendChild(r), n.appendChild(o), n;
4128
4236
  }
4129
- function Wi(a, e, t) {
4237
+ function Ui(a, e, t) {
4130
4238
  return e.className = "data-grid-row pivot-group-row", e.setAttribute("data-pivot-depth", String(a.__pivotDepth ?? 0)), e.setAttribute("data-pivot-key", String(a.__pivotRowKey ?? "")), e.setAttribute("role", "row"), e.innerHTML = "", t.columns.forEach((i, n) => {
4131
4239
  const r = document.createElement("div");
4132
4240
  if (r.className = "cell", r.setAttribute("data-col", String(n)), r.setAttribute("data-row", String(t.rowIndex)), r.setAttribute("role", "gridcell"), n === 0) {
@@ -4147,7 +4255,7 @@ function Wi(a, e, t) {
4147
4255
  e.appendChild(r);
4148
4256
  }), !0;
4149
4257
  }
4150
- function ji(a, e, t, i) {
4258
+ function Yi(a, e, t, i) {
4151
4259
  return e.className = "data-grid-row pivot-leaf-row", e.setAttribute("data-pivot-depth", String(a.__pivotDepth ?? 0)), e.setAttribute("data-pivot-key", String(a.__pivotRowKey ?? "")), e.innerHTML = "", t.forEach((n, r) => {
4152
4260
  const o = document.createElement("div");
4153
4261
  if (o.className = "cell", o.setAttribute("data-col", String(r)), o.setAttribute("data-row", String(i)), o.setAttribute("role", "gridcell"), r === 0) {
@@ -4162,7 +4270,7 @@ function ji(a, e, t, i) {
4162
4270
  e.appendChild(o);
4163
4271
  }), !0;
4164
4272
  }
4165
- function Ui(a, e, t) {
4273
+ function Xi(a, e, t) {
4166
4274
  return e.className = "pivot-grand-total-row", e.setAttribute("role", "presentation"), e.innerHTML = "", t.forEach((i, n) => {
4167
4275
  const r = document.createElement("div");
4168
4276
  if (r.className = "cell", r.setAttribute("data-col", String(n)), n === 0) {
@@ -4175,10 +4283,10 @@ function Ui(a, e, t) {
4175
4283
  e.appendChild(r);
4176
4284
  }), !0;
4177
4285
  }
4178
- const Yi = '@layer tbw-plugins{.pivot-group-row{display:grid;grid-template-columns:var(--tbw-column-template);font-weight:600;background:var(--tbw-pivot-group-bg, var(--tbw-color-row-alt));min-height:var(--tbw-row-height);border-bottom:var(--tbw-row-divider)}.pivot-group-row:hover{background:var(--tbw-pivot-group-hover, var(--tbw-color-row-hover))}.pivot-leaf-row{display:grid;grid-template-columns:var(--tbw-column-template);background:var(--tbw-pivot-leaf-bg, var(--tbw-color-bg));min-height:var(--tbw-row-height);border-bottom:var(--tbw-row-divider)}.pivot-grand-total-row{display:grid;grid-template-columns:var(--tbw-column-template);font-weight:700;background:var(--tbw-pivot-grand-total-bg, var(--tbw-color-header-bg));min-height:var(--tbw-row-height);border-top:2px solid var(--tbw-color-border-strong)}.pivot-grand-total-row>.cell{display:flex;align-items:center;padding:var(--tbw-cell-padding);border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;min-width:0}.pivot-grand-total-row>.cell:last-child{border-right:0}.pivot-grand-total-footer{position:sticky;bottom:0;z-index:var(--tbw-z-layer-pinned-rows, 20);background:var(--tbw-pivot-grand-total-bg, var(--tbw-color-header-bg));min-width:fit-content}.pivot-group-row>.cell,.pivot-leaf-row>.cell{display:flex;align-items:center;padding:var(--tbw-cell-padding);border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;min-width:0}.pivot-group-row>.cell:last-child,.pivot-leaf-row>.cell:last-child{border-right:0}.pivot-toggle{display:inline-flex;align-items:center;justify-content:center;width:var(--tbw-pivot-toggle-size, var(--tbw-toggle-size, 1.25em));height:var(--tbw-pivot-toggle-size, var(--tbw-toggle-size, 1.25em));margin-right:var(--tbw-spacing-sm, .375em);border:none;background:transparent;cursor:pointer;color:var(--tbw-pivot-toggle-color, var(--tbw-color-fg-muted));border-radius:var(--tbw-border-radius);transition:background var(--tbw-transition-duration, .12s) var(--tbw-transition-ease, ease),color var(--tbw-transition-duration, .12s) var(--tbw-transition-ease, ease)}.pivot-toggle:hover{background:var(--tbw-pivot-toggle-hover-bg, var(--tbw-color-row-hover));color:var(--tbw-pivot-toggle-hover-color, var(--tbw-color-fg))}.pivot-toggle:focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}.pivot-label{font-weight:inherit}.pivot-count{color:var(--tbw-pivot-count-color, var(--tbw-color-fg-muted));font-size:.9em;font-weight:400}.pivot-total-row{font-weight:700;border-top:2px solid var(--tbw-pivot-border, var(--tbw-color-border-strong))}[data-pivot-depth="1"]{--tbw-pivot-depth: 1}[data-pivot-depth="2"]{--tbw-pivot-depth: 2}[data-pivot-depth="3"]{--tbw-pivot-depth: 3}[data-pivot-depth="4"]{--tbw-pivot-depth: 4}.tbw-pivot-panel{display:flex;flex-direction:column;gap:var(--tbw-panel-padding, var(--tbw-spacing-lg, .75rem));padding:var(--tbw-panel-padding, var(--tbw-spacing-lg, .75rem));height:100%;overflow-y:auto;font-size:var(--tbw-font-size-sm, .8125rem)}.tbw-pivot-section{border:1px solid var(--tbw-pivot-border, var(--tbw-color-border));border-radius:var(--tbw-border-radius);background:var(--tbw-pivot-section-bg, var(--tbw-color-bg))}.tbw-pivot-section-header{padding:var(--tbw-button-padding, var(--tbw-spacing-md, .5rem) var(--tbw-spacing-lg, .75rem));font-weight:600;background:var(--tbw-pivot-header-bg, var(--tbw-color-header-bg));border-bottom:1px solid var(--tbw-pivot-border, var(--tbw-color-border));border-radius:var(--tbw-border-radius) var(--tbw-border-radius) 0 0}.tbw-pivot-section-content{padding:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-pivot-toggle-wrapper{display:flex;align-items:center}.tbw-pivot-toggle-label{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));cursor:pointer}.tbw-pivot-toggle-label input{width:var(--tbw-icon-size, 1rem);height:var(--tbw-icon-size, 1rem);cursor:pointer}.tbw-pivot-drop-zone{min-height:60px;padding:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));border:2px dashed var(--tbw-pivot-drop-border, var(--tbw-color-border));border-radius:var(--tbw-border-radius);background:var(--tbw-pivot-drop-bg, var(--tbw-color-row-alt));display:flex;flex-wrap:wrap;gap:var(--tbw-spacing-sm, .375rem);align-content:flex-start;transition:all .15s ease}.tbw-pivot-drop-zone.drag-over{border-color:var(--tbw-color-accent);background:var(--tbw-pivot-drop-active, var(--tbw-focus-background))}.tbw-pivot-placeholder{color:var(--tbw-color-fg-muted);font-style:italic;padding:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));text-align:center;width:100%}.tbw-pivot-field-chip{display:inline-flex;align-items:center;gap:var(--tbw-spacing-sm, .375rem);padding:var(--tbw-button-padding-sm, var(--tbw-spacing-xs, .25rem) var(--tbw-spacing-md, .5rem));background:var(--tbw-pivot-chip-bg, var(--tbw-color-header-bg));border:1px solid var(--tbw-pivot-chip-border, var(--tbw-color-border));border-radius:var(--tbw-border-radius);cursor:grab;font-size:var(--tbw-font-size-xs, .75rem);transition:all .15s ease}.tbw-pivot-field-chip:hover{background:var(--tbw-pivot-chip-hover, var(--tbw-color-row-hover));border-color:var(--tbw-color-accent)}.tbw-pivot-field-chip.available{background:var(--tbw-color-bg)}.tbw-pivot-field-chip.dragging{opacity:.5;cursor:grabbing}.tbw-pivot-chip-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}.tbw-pivot-chip-remove{display:flex;align-items:center;justify-content:center;width:var(--tbw-icon-size, 1rem);height:var(--tbw-icon-size, 1rem);padding:0;border:none;background:transparent;color:var(--tbw-color-fg-muted);font-size:var(--tbw-font-size-sm, .875rem);font-weight:700;cursor:pointer;border-radius:50%;transition:all .15s ease}.tbw-pivot-chip-remove:hover{background:var(--tbw-pivot-chip-remove-hover-bg, var(--tbw-color-accent));color:var(--tbw-pivot-chip-remove-hover-fg, var(--tbw-color-accent-fg))}.tbw-pivot-value-chip{padding:var(--tbw-button-padding-sm, var(--tbw-spacing-xs, .25rem) var(--tbw-spacing-md, .5rem))}.tbw-pivot-value-label-wrapper{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));flex:1;min-width:0}.tbw-pivot-agg-select{padding:var(--tbw-spacing-xs, .125rem) var(--tbw-spacing-xs, .25rem);font-size:var(--tbw-font-size-xs, .6875rem);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);background:var(--tbw-color-bg);cursor:pointer}.tbw-pivot-available-fields{display:flex;flex-wrap:wrap;gap:var(--tbw-spacing-sm, .375rem);min-height:40px}.tbw-pivot-options{display:flex;flex-direction:column;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-pivot-checkbox{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));cursor:pointer}.tbw-pivot-checkbox input{width:var(--tbw-icon-size-sm, .875rem);height:var(--tbw-icon-size-sm, .875rem);cursor:pointer}.pivot-group-row.tbw-pivot-slide-in,.pivot-leaf-row.tbw-pivot-slide-in{animation:tbw-pivot-slide-in var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}@keyframes tbw-pivot-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.pivot-group-row.tbw-pivot-fade-in,.pivot-leaf-row.tbw-pivot-fade-in{animation:tbw-pivot-fade-in var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}@keyframes tbw-pivot-fade-in{0%{opacity:0}to{opacity:1}}}';
4179
- class j extends I {
4286
+ const Qi = '@layer tbw-plugins{.pivot-group-row{display:grid;grid-template-columns:var(--tbw-column-template);font-weight:600;background:var(--tbw-pivot-group-bg, var(--tbw-color-row-alt));min-height:var(--tbw-row-height);border-bottom:var(--tbw-row-divider)}.pivot-group-row:hover{background:var(--tbw-pivot-group-hover, var(--tbw-color-row-hover))}.pivot-leaf-row{display:grid;grid-template-columns:var(--tbw-column-template);background:var(--tbw-pivot-leaf-bg, var(--tbw-color-bg));min-height:var(--tbw-row-height);border-bottom:var(--tbw-row-divider)}.pivot-grand-total-row{display:grid;grid-template-columns:var(--tbw-column-template);font-weight:700;background:var(--tbw-pivot-grand-total-bg, var(--tbw-color-header-bg));min-height:var(--tbw-row-height);border-top:2px solid var(--tbw-color-border-strong)}.pivot-grand-total-row>.cell{display:flex;align-items:center;padding:var(--tbw-cell-padding);border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;min-width:0}.pivot-grand-total-row>.cell:last-child{border-right:0}.pivot-grand-total-footer{position:sticky;bottom:0;z-index:var(--tbw-z-layer-pinned-rows, 20);background:var(--tbw-pivot-grand-total-bg, var(--tbw-color-header-bg));min-width:fit-content}.pivot-group-row>.cell,.pivot-leaf-row>.cell{display:flex;align-items:center;padding:var(--tbw-cell-padding);border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;min-width:0}.pivot-group-row>.cell:last-child,.pivot-leaf-row>.cell:last-child{border-right:0}.pivot-toggle{display:inline-flex;align-items:center;justify-content:center;width:var(--tbw-pivot-toggle-size, var(--tbw-toggle-size, 1.25em));height:var(--tbw-pivot-toggle-size, var(--tbw-toggle-size, 1.25em));margin-right:var(--tbw-spacing-sm, .375em);border:none;background:transparent;cursor:pointer;color:var(--tbw-pivot-toggle-color, var(--tbw-color-fg-muted));border-radius:var(--tbw-border-radius);transition:background var(--tbw-transition-duration, .12s) var(--tbw-transition-ease, ease),color var(--tbw-transition-duration, .12s) var(--tbw-transition-ease, ease)}.pivot-toggle:hover{background:var(--tbw-pivot-toggle-hover-bg, var(--tbw-color-row-hover));color:var(--tbw-pivot-toggle-hover-color, var(--tbw-color-fg))}.pivot-toggle:focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}.pivot-label{font-weight:inherit}.pivot-count{color:var(--tbw-pivot-count-color, var(--tbw-color-fg-muted));font-size:.9em;font-weight:400}.pivot-total-row{font-weight:700;border-top:2px solid var(--tbw-pivot-border, var(--tbw-color-border-strong))}[data-pivot-depth="1"]{--tbw-pivot-depth: 1}[data-pivot-depth="2"]{--tbw-pivot-depth: 2}[data-pivot-depth="3"]{--tbw-pivot-depth: 3}[data-pivot-depth="4"]{--tbw-pivot-depth: 4}.tbw-pivot-panel{display:flex;flex-direction:column;gap:var(--tbw-panel-padding, var(--tbw-spacing-lg, .75rem));padding:var(--tbw-panel-padding, var(--tbw-spacing-lg, .75rem));height:100%;overflow-y:auto;font-size:var(--tbw-font-size-sm, .8125rem)}.tbw-pivot-section{border:1px solid var(--tbw-pivot-border, var(--tbw-color-border));border-radius:var(--tbw-border-radius);background:var(--tbw-pivot-section-bg, var(--tbw-color-bg))}.tbw-pivot-section-header{padding:var(--tbw-button-padding, var(--tbw-spacing-md, .5rem) var(--tbw-spacing-lg, .75rem));font-weight:600;background:var(--tbw-pivot-header-bg, var(--tbw-color-header-bg));border-bottom:1px solid var(--tbw-pivot-border, var(--tbw-color-border));border-radius:var(--tbw-border-radius) var(--tbw-border-radius) 0 0}.tbw-pivot-section-content{padding:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-pivot-toggle-wrapper{display:flex;align-items:center}.tbw-pivot-toggle-label{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));cursor:pointer}.tbw-pivot-toggle-label input{width:var(--tbw-icon-size, 1rem);height:var(--tbw-icon-size, 1rem);cursor:pointer}.tbw-pivot-drop-zone{min-height:60px;padding:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));border:2px dashed var(--tbw-pivot-drop-border, var(--tbw-color-border));border-radius:var(--tbw-border-radius);background:var(--tbw-pivot-drop-bg, var(--tbw-color-row-alt));display:flex;flex-wrap:wrap;gap:var(--tbw-spacing-sm, .375rem);align-content:flex-start;transition:all .15s ease}.tbw-pivot-drop-zone.drag-over{border-color:var(--tbw-color-accent);background:var(--tbw-pivot-drop-active, var(--tbw-focus-background))}.tbw-pivot-placeholder{color:var(--tbw-color-fg-muted);font-style:italic;padding:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));text-align:center;width:100%}.tbw-pivot-field-chip{display:inline-flex;align-items:center;gap:var(--tbw-spacing-sm, .375rem);padding:var(--tbw-button-padding-sm, var(--tbw-spacing-xs, .25rem) var(--tbw-spacing-md, .5rem));background:var(--tbw-pivot-chip-bg, var(--tbw-color-header-bg));border:1px solid var(--tbw-pivot-chip-border, var(--tbw-color-border));border-radius:var(--tbw-border-radius);cursor:grab;font-size:var(--tbw-font-size-xs, .75rem);transition:all .15s ease}.tbw-pivot-field-chip:hover{background:var(--tbw-pivot-chip-hover, var(--tbw-color-row-hover));border-color:var(--tbw-color-accent)}.tbw-pivot-field-chip.available{background:var(--tbw-color-bg)}.tbw-pivot-field-chip.dragging{opacity:.5;cursor:grabbing}.tbw-pivot-chip-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}.tbw-pivot-chip-remove{display:flex;align-items:center;justify-content:center;width:var(--tbw-icon-size, 1rem);height:var(--tbw-icon-size, 1rem);padding:0;border:none;background:transparent;color:var(--tbw-color-fg-muted);font-size:var(--tbw-font-size-sm, .875rem);font-weight:700;cursor:pointer;border-radius:50%;transition:all .15s ease}.tbw-pivot-chip-remove:hover{background:var(--tbw-pivot-chip-remove-hover-bg, var(--tbw-color-accent));color:var(--tbw-pivot-chip-remove-hover-fg, var(--tbw-color-accent-fg))}.tbw-pivot-value-chip{padding:var(--tbw-button-padding-sm, var(--tbw-spacing-xs, .25rem) var(--tbw-spacing-md, .5rem))}.tbw-pivot-value-label-wrapper{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));flex:1;min-width:0}.tbw-pivot-agg-select{padding:var(--tbw-spacing-xs, .125rem) var(--tbw-spacing-xs, .25rem);font-size:var(--tbw-font-size-xs, .6875rem);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);background:var(--tbw-color-bg);cursor:pointer}.tbw-pivot-available-fields{display:flex;flex-wrap:wrap;gap:var(--tbw-spacing-sm, .375rem);min-height:40px}.tbw-pivot-options{display:flex;flex-direction:column;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-pivot-checkbox{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));cursor:pointer}.tbw-pivot-checkbox input{width:var(--tbw-icon-size-sm, .875rem);height:var(--tbw-icon-size-sm, .875rem);cursor:pointer}.pivot-group-row.tbw-pivot-slide-in,.pivot-leaf-row.tbw-pivot-slide-in{animation:tbw-pivot-slide-in var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}@keyframes tbw-pivot-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.pivot-group-row.tbw-pivot-fade-in,.pivot-leaf-row.tbw-pivot-fade-in{animation:tbw-pivot-fade-in var(--tbw-animation-duration, .2s) var(--tbw-animation-easing, ease-out) forwards}@keyframes tbw-pivot-fade-in{0%{opacity:0}to{opacity:1}}}';
4287
+ class j extends F {
4180
4288
  name = "pivot";
4181
- styles = Yi;
4289
+ styles = Qi;
4182
4290
  static PANEL_ID = "pivot";
4183
4291
  get defaultConfig() {
4184
4292
  return {
@@ -4224,11 +4332,11 @@ class j extends I {
4224
4332
  processRows(e) {
4225
4333
  if (!this.hasInitialized && this.config.active !== !1 && this.hasValidPivotConfig() && (this.hasInitialized = !0, this.isActive = !0), !this.isActive)
4226
4334
  return [...e];
4227
- const t = Fi(this.config);
4335
+ const t = Mi(this.config);
4228
4336
  if (t.length > 0)
4229
4337
  return this.warn(`Config errors: ${t.join(", ")}`), [...e];
4230
- this.buildFieldHeaderMap(), this.defaultExpanded = this.config.defaultExpanded ?? !0, this.pivotResult = Pi(e, this.config), this.expandedKeys.size === 0 && this.defaultExpanded && !this.userHasToggledExpand && this.expandAllKeys();
4231
- const i = this.config.indentWidth ?? 20, n = Ni(
4338
+ this.buildFieldHeaderMap(), this.defaultExpanded = this.config.defaultExpanded ?? !0, this.pivotResult = Di(e, this.config), this.expandedKeys.size === 0 && this.defaultExpanded && !this.userHasToggledExpand && this.expandAllKeys();
4339
+ const i = this.config.indentWidth ?? 20, n = Gi(
4232
4340
  this.pivotResult.rows,
4233
4341
  this.expandedKeys,
4234
4342
  this.defaultExpanded
@@ -4263,7 +4371,7 @@ class j extends I {
4263
4371
  });
4264
4372
  for (const n of this.pivotResult.columnKeys)
4265
4373
  for (const r of this.config.valueFields ?? []) {
4266
- const o = Ce([n], r.field), s = r.header || this.fieldHeaderMap.get(r.field) || r.field;
4374
+ const o = Ee([n], r.field), s = r.header || this.fieldHeaderMap.get(r.field) || r.field;
4267
4375
  t.push({
4268
4376
  field: o,
4269
4377
  header: `${n} - ${s} (${r.aggFunc})`,
@@ -4280,13 +4388,13 @@ class j extends I {
4280
4388
  }
4281
4389
  renderRow(e, t, i) {
4282
4390
  const n = e;
4283
- return n.__pivotRowKey && n.__pivotHasChildren ? Wi(n, t, {
4391
+ return n.__pivotRowKey && n.__pivotHasChildren ? Ui(n, t, {
4284
4392
  columns: this.gridColumns,
4285
4393
  rowIndex: i,
4286
4394
  onToggle: (r) => this.toggle(r),
4287
4395
  resolveIcon: (r) => this.resolveIcon(r),
4288
4396
  setIcon: (r, o) => this.setIcon(r, o)
4289
- }) : n.__pivotRowKey !== void 0 && this.isActive ? ji(n, t, this.gridColumns, i) : (this.cleanupPivotStyling(t), !1);
4397
+ }) : n.__pivotRowKey !== void 0 && this.isActive ? Yi(n, t, this.gridColumns, i) : (this.cleanupPivotStyling(t), !1);
4290
4398
  }
4291
4399
  cleanupPivotStyling(e) {
4292
4400
  (e.classList.contains("pivot-group-row") || e.classList.contains("pivot-leaf-row") || e.classList.contains("pivot-grand-total-row")) && (e.classList.remove("pivot-group-row", "pivot-leaf-row", "pivot-grand-total-row"), e.classList.add("data-grid-row"), e.removeAttribute("data-pivot-depth"), e.innerHTML = "");
@@ -4324,7 +4432,7 @@ class j extends I {
4324
4432
  __pivotTotal: this.pivotResult.grandTotal,
4325
4433
  ...this.pivotResult.totals
4326
4434
  };
4327
- Ui(i, this.grandTotalFooter, this.gridColumns);
4435
+ Xi(i, this.grandTotalFooter, this.gridColumns);
4328
4436
  }
4329
4437
  cleanupGrandTotalFooter() {
4330
4438
  this.grandTotalFooter && (this.grandTotalFooter.remove(), this.grandTotalFooter = null);
@@ -4346,7 +4454,7 @@ class j extends I {
4346
4454
  }
4347
4455
  expandAllKeys() {
4348
4456
  if (!this.pivotResult) return;
4349
- const e = Hi(this.pivotResult.rows);
4457
+ const e = Ki(this.pivotResult.rows);
4350
4458
  for (const t of e)
4351
4459
  this.expandedKeys.add(t);
4352
4460
  }
@@ -4431,7 +4539,7 @@ class j extends I {
4431
4539
  },
4432
4540
  getAvailableFields: () => this.getAvailableFields()
4433
4541
  };
4434
- return Ki(e, this.config, this.isActive, t);
4542
+ return Oi(e, this.config, this.isActive, t);
4435
4543
  }
4436
4544
  refreshPanel() {
4437
4545
  this.panelContainer && (this.panelContainer.innerHTML = "", this.renderPanel(this.panelContainer));
@@ -4465,7 +4573,7 @@ class j extends I {
4465
4573
  }
4466
4574
  }
4467
4575
  const ne = "tbw-print-isolation-style";
4468
- function Xi(a, e) {
4576
+ function Zi(a, e) {
4469
4577
  const t = document.createElement("style");
4470
4578
  return t.id = ne, t.textContent = `
4471
4579
  /* Print isolation: hide everything except the target grid */
@@ -4539,12 +4647,12 @@ function Xi(a, e) {
4539
4647
  }
4540
4648
  `, t;
4541
4649
  }
4542
- async function Qi(a, e = {}) {
4650
+ async function Ji(a, e = {}) {
4543
4651
  const { orientation: t = "landscape" } = e, i = a.id;
4544
4652
  document.querySelectorAll(`#${CSS.escape(i)}`).length > 1 && console.warn(
4545
4653
  `[tbw-grid:print] Multiple elements found with id="${i}". Print isolation may not work correctly. Ensure each grid has a unique ID.`
4546
4654
  ), document.getElementById(ne)?.remove();
4547
- const r = Xi(i, t);
4655
+ const r = Zi(i, t);
4548
4656
  return document.head.appendChild(r), new Promise((o) => {
4549
4657
  const s = () => {
4550
4658
  window.removeEventListener("afterprint", s), document.getElementById(ne)?.remove(), o();
@@ -4554,7 +4662,7 @@ async function Qi(a, e = {}) {
4554
4662
  }, 5e3);
4555
4663
  });
4556
4664
  }
4557
- const Zi = ".tbw-print-header,.tbw-print-footer{display:none}@media print{tbw-grid{overflow:visible!important;height:auto!important;border:none!important;border-radius:0!important;color-scheme:light only;-webkit-print-color-adjust:exact;print-color-adjust:exact}tbw-grid .tbw-grid-content{overflow:visible!important;height:auto!important;max-height:none!important}tbw-grid .tbw-scroll-area{overflow:visible!important;height:auto!important;max-height:none!important}tbw-grid .rows-body{overflow:visible!important;height:auto!important;max-height:none!important}tbw-grid .rows-container,tbw-grid .rows-viewport,tbw-grid .rows{overflow:visible!important;height:auto!important;max-height:none!important;transform:none!important}tbw-grid .rows-viewport .rows{position:static!important}tbw-grid .resize-handle,tbw-grid [part=sort-indicator],tbw-grid .tbw-filter-btn,tbw-grid .tool-panel,tbw-grid .tool-panel-content,tbw-grid .tbw-shell-header,tbw-grid .shell-toolbar,tbw-grid .tool-panel-toggle,tbw-grid [data-print-hide],tbw-grid .expander-cell,tbw-grid .tree-toggle,tbw-grid .context-menu,tbw-grid .faux-vscroll{display:none!important}tbw-grid .tbw-print-header{display:flex;justify-content:space-between;align-items:baseline;padding:var(--tbw-spacing-md, .5em) 0;margin-bottom:var(--tbw-spacing-md, .5em);border-bottom:2px solid var(--tbw-print-border, var(--tbw-color-border-strong));font-family:inherit}.tbw-print-header-title{font-size:1.25em;font-weight:700}.tbw-print-header-timestamp{font-size:var(--tbw-font-size-sm, .875em);color:var(--tbw-print-muted, var(--tbw-color-fg-muted))}tbw-grid .tbw-print-footer{display:block;margin-top:var(--tbw-spacing-md, .5em);padding-top:var(--tbw-spacing-md, .5em);border-top:1px solid var(--tbw-print-border, var(--tbw-color-border));font-size:var(--tbw-font-size-xs, .75em);color:var(--tbw-print-muted, var(--tbw-color-fg-muted));text-align:end}tbw-grid .data-grid-row{break-inside:avoid;page-break-inside:avoid}tbw-grid .cell{border:1px solid var(--tbw-print-cell-border, var(--tbw-color-border))!important}tbw-grid .header-row,tbw-grid .data-grid-row{padding-inline-end:1px}tbw-grid .data-grid-row:hover,tbw-grid .cell:hover{background:inherit!important}@page{margin:1cm}tbw-grid.print-landscape{@page{size:landscape}}tbw-grid.print-portrait{@page{size:portrait}}}", Ji = {
4665
+ const en = ".tbw-print-header,.tbw-print-footer{display:none}@media print{tbw-grid{overflow:visible!important;height:auto!important;border:none!important;border-radius:0!important;color-scheme:light only;-webkit-print-color-adjust:exact;print-color-adjust:exact}tbw-grid .tbw-grid-content{overflow:visible!important;height:auto!important;max-height:none!important}tbw-grid .tbw-scroll-area{overflow:visible!important;height:auto!important;max-height:none!important}tbw-grid .rows-body{overflow:visible!important;height:auto!important;max-height:none!important}tbw-grid .rows-container,tbw-grid .rows-viewport,tbw-grid .rows{overflow:visible!important;height:auto!important;max-height:none!important;transform:none!important}tbw-grid .rows-viewport .rows{position:static!important}tbw-grid .resize-handle,tbw-grid [part=sort-indicator],tbw-grid .tbw-filter-btn,tbw-grid .tool-panel,tbw-grid .tool-panel-content,tbw-grid .tbw-shell-header,tbw-grid .shell-toolbar,tbw-grid .tool-panel-toggle,tbw-grid [data-print-hide],tbw-grid .expander-cell,tbw-grid .tree-toggle,tbw-grid .context-menu,tbw-grid .faux-vscroll{display:none!important}tbw-grid .tbw-print-header{display:flex;justify-content:space-between;align-items:baseline;padding:var(--tbw-spacing-md, .5em) 0;margin-bottom:var(--tbw-spacing-md, .5em);border-bottom:2px solid var(--tbw-print-border, var(--tbw-color-border-strong));font-family:inherit}.tbw-print-header-title{font-size:1.25em;font-weight:700}.tbw-print-header-timestamp{font-size:var(--tbw-font-size-sm, .875em);color:var(--tbw-print-muted, var(--tbw-color-fg-muted))}tbw-grid .tbw-print-footer{display:block;margin-top:var(--tbw-spacing-md, .5em);padding-top:var(--tbw-spacing-md, .5em);border-top:1px solid var(--tbw-print-border, var(--tbw-color-border));font-size:var(--tbw-font-size-xs, .75em);color:var(--tbw-print-muted, var(--tbw-color-fg-muted));text-align:end}tbw-grid .data-grid-row{break-inside:avoid;page-break-inside:avoid}tbw-grid .cell{border:1px solid var(--tbw-print-cell-border, var(--tbw-color-border))!important}tbw-grid .header-row,tbw-grid .data-grid-row{padding-inline-end:1px}tbw-grid .data-grid-row:hover,tbw-grid .cell:hover{background:inherit!important}@page{margin:1cm}tbw-grid.print-landscape{@page{size:landscape}}tbw-grid.print-portrait{@page{size:portrait}}}", tn = {
4558
4666
  button: !1,
4559
4667
  orientation: "landscape",
4560
4668
  warnThreshold: 500,
@@ -4564,18 +4672,18 @@ const Zi = ".tbw-print-header,.tbw-print-footer{display:none}@media print{tbw-gr
4564
4672
  title: "",
4565
4673
  isolate: !1
4566
4674
  };
4567
- class Nn extends I {
4675
+ class Gn extends F {
4568
4676
  name = "print";
4569
4677
  version = "1.0.0";
4570
- styles = Zi;
4678
+ styles = en;
4571
4679
  #t = !1;
4572
4680
  #e = null;
4573
4681
  #o = null;
4574
- #r = null;
4682
+ #s = null;
4575
4683
  #i = null;
4576
4684
  #n = null;
4577
- #s = null;
4578
- get #u() {
4685
+ #r = null;
4686
+ get #l() {
4579
4687
  return this.grid;
4580
4688
  }
4581
4689
  isPrinting() {
@@ -4591,7 +4699,7 @@ class Nn extends I {
4591
4699
  console.warn("[PrintPlugin] Grid not available");
4592
4700
  return;
4593
4701
  }
4594
- const i = { ...Ji, ...this.config, ...e }, r = this.rows.length;
4702
+ const i = { ...tn, ...this.config, ...e }, r = this.rows.length;
4595
4703
  let o = r, s = !1;
4596
4704
  if (i.warnThreshold > 0 && r > i.warnThreshold) {
4597
4705
  const d = i.maxRows > 0 ? `
@@ -4612,10 +4720,10 @@ Click OK to continue, or Cancel to abort.`
4612
4720
  originalRowCount: r
4613
4721
  });
4614
4722
  try {
4615
- const d = this.#u;
4723
+ const d = this.#l;
4616
4724
  this.#o = {
4617
4725
  bypassThreshold: d._virtualization?.bypassThreshold ?? 24
4618
- }, this.#m(), s && (this.#r = this.sourceRows, this.grid.rows = this.sourceRows.slice(0, o), await new Promise((c) => setTimeout(c, 50))), (i.includeTitle || i.includeTimestamp) && this.#h(i), await this.#a(), await new Promise((c) => requestAnimationFrame(c)), await new Promise((c) => requestAnimationFrame(c)), t.classList.add(`print-${i.orientation}`), await new Promise((c) => requestAnimationFrame(c)), await new Promise((c) => requestAnimationFrame(c)), i.isolate ? await this.#g(i) : await this.#l(), this.emit("print-complete", {
4726
+ }, this.#c(), s && (this.#s = this.sourceRows, this.grid.rows = this.sourceRows.slice(0, o), await new Promise((c) => setTimeout(c, 50))), (i.includeTitle || i.includeTimestamp) && this.#f(i), await this.#b(), await new Promise((c) => requestAnimationFrame(c)), await new Promise((c) => requestAnimationFrame(c)), t.classList.add(`print-${i.orientation}`), await new Promise((c) => requestAnimationFrame(c)), await new Promise((c) => requestAnimationFrame(c)), i.isolate ? await this.#a(i) : await this.#p(), this.emit("print-complete", {
4619
4727
  success: !0,
4620
4728
  rowCount: o,
4621
4729
  duration: Math.round(performance.now() - l)
@@ -4627,10 +4735,10 @@ Click OK to continue, or Cancel to abort.`
4627
4735
  duration: Math.round(performance.now() - l)
4628
4736
  });
4629
4737
  } finally {
4630
- this.#w(), this.#t = !1;
4738
+ this.#g(), this.#t = !1;
4631
4739
  }
4632
4740
  }
4633
- #h(e) {
4741
+ #f(e) {
4634
4742
  const t = this.gridElement;
4635
4743
  if (t) {
4636
4744
  if (this.#i = document.createElement("div"), this.#i.className = "tbw-print-header", e.includeTitle) {
@@ -4644,13 +4752,13 @@ Click OK to continue, or Cancel to abort.`
4644
4752
  t.insertBefore(this.#i, t.firstChild), this.#n = document.createElement("div"), this.#n.className = "tbw-print-footer", this.#n.textContent = `Page generated from ${window.location.hostname}`, t.appendChild(this.#n);
4645
4753
  }
4646
4754
  }
4647
- async #a() {
4648
- const e = this.#u;
4755
+ async #b() {
4756
+ const e = this.#l;
4649
4757
  if (!e._virtualization) return;
4650
4758
  const t = this.rows.length;
4651
4759
  e._virtualization.bypassThreshold = t + 100, e.refreshVirtualWindow(!0), await new Promise((i) => setTimeout(i, 100));
4652
4760
  }
4653
- async #l() {
4761
+ async #p() {
4654
4762
  return new Promise((e) => {
4655
4763
  const t = () => {
4656
4764
  window.removeEventListener("afterprint", t), e();
@@ -4660,13 +4768,13 @@ Click OK to continue, or Cancel to abort.`
4660
4768
  }, 1e3);
4661
4769
  });
4662
4770
  }
4663
- async #g(e) {
4771
+ async #a(e) {
4664
4772
  const t = this.gridElement;
4665
- t && await Qi(t, {
4773
+ t && await Ji(t, {
4666
4774
  orientation: e.orientation
4667
4775
  });
4668
4776
  }
4669
- #m() {
4777
+ #c() {
4670
4778
  const e = this.columns;
4671
4779
  if (e) {
4672
4780
  this.#e = /* @__PURE__ */ new Map();
@@ -4674,26 +4782,26 @@ Click OK to continue, or Cancel to abort.`
4674
4782
  t.printHidden && t.field && (this.#e.set(t.field, !t.hidden), this.grid.setColumnVisible(t.field, !1));
4675
4783
  }
4676
4784
  }
4677
- #c() {
4785
+ #d() {
4678
4786
  if (this.#e) {
4679
4787
  for (const [e, t] of this.#e)
4680
4788
  this.grid.setColumnVisible(e, t);
4681
4789
  this.#e = null;
4682
4790
  }
4683
4791
  }
4684
- #w() {
4792
+ #g() {
4685
4793
  const e = this.gridElement;
4686
4794
  if (!e) return;
4687
- this.#c(), e.classList.remove("print-portrait", "print-landscape"), this.#s !== null && (e.style.transform = "", e.style.transformOrigin = "", e.style.width = "", this.#s = null), this.#i && (this.#i.remove(), this.#i = null), this.#n && (this.#n.remove(), this.#n = null);
4688
- const t = this.#u;
4689
- this.#o && t._virtualization && (t._virtualization.bypassThreshold = this.#o.bypassThreshold, t.refreshVirtualWindow(!0), this.#o = null), this.#r !== null && (this.grid.rows = this.#r, this.#r = null);
4795
+ this.#d(), e.classList.remove("print-portrait", "print-landscape"), this.#r !== null && (e.style.transform = "", e.style.transformOrigin = "", e.style.width = "", this.#r = null), this.#i && (this.#i.remove(), this.#i = null), this.#n && (this.#n.remove(), this.#n = null);
4796
+ const t = this.#l;
4797
+ this.#o && t._virtualization && (t._virtualization.bypassThreshold = this.#o.bypassThreshold, t.refreshVirtualWindow(!0), this.#o = null), this.#s !== null && (this.grid.rows = this.#s, this.#s = null);
4690
4798
  }
4691
4799
  afterRender() {
4692
- this.config?.button && !this.#f && (this.#p(), this.#f = !0);
4800
+ this.config?.button && !this.#u && (this.#m(), this.#u = !0);
4693
4801
  }
4694
- #f = !1;
4695
- #p() {
4696
- this.#u.registerToolbarContent?.({
4802
+ #u = !1;
4803
+ #m() {
4804
+ this.#l.registerToolbarContent?.({
4697
4805
  id: "print-button",
4698
4806
  order: 900,
4699
4807
  render: (t) => {
@@ -4711,19 +4819,19 @@ Click OK to continue, or Cancel to abort.`
4711
4819
  });
4712
4820
  }
4713
4821
  }
4714
- function en(a) {
4822
+ function nn(a) {
4715
4823
  const e = a.meta ?? {};
4716
4824
  return e.lockPosition !== !0 && e.suppressMovable !== !0;
4717
4825
  }
4718
- function Je(a, e, t) {
4826
+ function et(a, e, t) {
4719
4827
  if (e === t || e < 0 || e >= a.length || t < 0 || t > a.length) return a;
4720
4828
  const i = [...a], [n] = i.splice(e, 1);
4721
4829
  return i.splice(t, 0, n), i;
4722
4830
  }
4723
- const tn = '@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}}';
4724
- class Hn extends I {
4831
+ const rn = '@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}}';
4832
+ class Kn extends F {
4725
4833
  name = "reorder";
4726
- styles = tn;
4834
+ styles = rn;
4727
4835
  get defaultConfig() {
4728
4836
  return {
4729
4837
  animation: "flip"
@@ -4740,7 +4848,7 @@ class Hn extends I {
4740
4848
  draggedIndex = null;
4741
4849
  dropIndex = null;
4742
4850
  canMoveColumnWithPlugins(e) {
4743
- return !e || !en(e) ? !1 : !this.grid.query("canMoveColumn", e).includes(!1);
4851
+ return !e || !nn(e) ? !1 : !this.grid.query("canMoveColumn", e).includes(!1);
4744
4852
  }
4745
4853
  clearDragClasses() {
4746
4854
  this.gridElement?.querySelectorAll(".header-row > .cell").forEach((e) => {
@@ -4787,7 +4895,7 @@ class Hn extends I {
4787
4895
  const l = this.draggedField, d = this.draggedIndex, c = this.dropIndex;
4788
4896
  if (!this.isDragging || l === null || d === null || c === null)
4789
4897
  return;
4790
- const u = c > d ? c - 1 : c, h = this.getColumnOrder(), f = Je(h, d, u), g = {
4898
+ const u = c > d ? c - 1 : c, h = this.getColumnOrder(), f = et(h, d, u), g = {
4791
4899
  field: l,
4792
4900
  fromIndex: d,
4793
4901
  toIndex: u,
@@ -4810,7 +4918,7 @@ class Hn extends I {
4810
4918
  if (l < 0 || l >= o.length) return;
4811
4919
  const d = n.find((c) => c.field === o[l]);
4812
4920
  if (this.canMoveColumnWithPlugins(d))
4813
- return this.moveColumn(r.field, l), t._focusCol = l, M(this.grid), e.preventDefault(), e.stopPropagation(), !0;
4921
+ return this.moveColumn(r.field, l), t._focusCol = l, q(this.grid), e.preventDefault(), e.stopPropagation(), !0;
4814
4922
  }
4815
4923
  getColumnOrder() {
4816
4924
  return this.grid.getColumnOrder();
@@ -4818,7 +4926,7 @@ class Hn extends I {
4818
4926
  moveColumn(e, t) {
4819
4927
  const i = this.getColumnOrder(), n = i.indexOf(e);
4820
4928
  if (n === -1) return;
4821
- const r = Je(i, n, t);
4929
+ const r = et(i, n, t);
4822
4930
  this.emitCancelable("column-move", {
4823
4931
  field: e,
4824
4932
  fromIndex: n,
@@ -4913,11 +5021,11 @@ class Hn extends I {
4913
5021
  this.grid.requestStateChange?.();
4914
5022
  }
4915
5023
  }
4916
- const nn = '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-inline-start: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;inset-inline-start: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-inline-end: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-inline-end: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}}';
4917
- class Gn extends I {
5024
+ const on = '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-inline-start: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;inset-inline-start: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-inline-end: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-inline-end: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}}';
5025
+ class zn extends F {
4918
5026
  name = "responsive";
4919
5027
  version = "1.0.0";
4920
- styles = nn;
5028
+ styles = on;
4921
5029
  static manifest = {
4922
5030
  incompatibleWith: [
4923
5031
  {
@@ -4935,24 +5043,24 @@ class Gn extends I {
4935
5043
  #t;
4936
5044
  #e = !1;
4937
5045
  #o;
4938
- #r = !1;
5046
+ #s = !1;
4939
5047
  #i = 0;
4940
5048
  #n = /* @__PURE__ */ new Set();
4941
- #s = /* @__PURE__ */ new Set();
4942
- #u = null;
4943
- #h = [];
5049
+ #r = /* @__PURE__ */ new Set();
5050
+ #l = null;
5051
+ #f = [];
4944
5052
  isResponsive() {
4945
5053
  return this.#e;
4946
5054
  }
4947
5055
  setResponsive(e) {
4948
- e !== this.#e && (this.#e = e, this.#w(), this.emit("responsive-change", {
5056
+ e !== this.#e && (this.#e = e, this.#g(), this.emit("responsive-change", {
4949
5057
  isResponsive: e,
4950
5058
  width: this.#i,
4951
5059
  breakpoint: this.config.breakpoint ?? 0
4952
5060
  }));
4953
5061
  }
4954
5062
  setBreakpoint(e) {
4955
- this.config.breakpoint = e, this.#g(this.#i);
5063
+ this.config.breakpoint = e, this.#a(this.#i);
4956
5064
  }
4957
5065
  setCardRenderer(e) {
4958
5066
  this.config.cardRenderer = e, this.#e && this.requestRender();
@@ -4961,17 +5069,17 @@ class Gn extends I {
4961
5069
  return this.#i;
4962
5070
  }
4963
5071
  getActiveBreakpoint() {
4964
- return this.#u;
5072
+ return this.#l;
4965
5073
  }
4966
5074
  attach(e) {
4967
- super.attach(e), this.#a(), this.#l(this.config.hiddenColumns), this.config.breakpoints?.length && (this.#h = [...this.config.breakpoints].sort((t, i) => i.maxWidth - t.maxWidth)), this.#t = new ResizeObserver((t) => {
5075
+ super.attach(e), this.#b(), this.#p(this.config.hiddenColumns), this.config.breakpoints?.length && (this.#f = [...this.config.breakpoints].sort((t, i) => i.maxWidth - t.maxWidth)), this.#t = new ResizeObserver((t) => {
4968
5076
  const i = t[0]?.contentRect.width ?? 0;
4969
5077
  this.#i = i, clearTimeout(this.#o), this.#o = setTimeout(() => {
4970
- this.#g(i);
5078
+ this.#a(i);
4971
5079
  }, this.config.debounceMs ?? 100);
4972
5080
  }), this.#t.observe(this.gridElement);
4973
5081
  }
4974
- #a() {
5082
+ #b() {
4975
5083
  const e = this.grid;
4976
5084
  if (!e || typeof e.querySelector != "function") return;
4977
5085
  const t = e.querySelector("tbw-grid-responsive-card");
@@ -4992,14 +5100,14 @@ class Gn extends I {
4992
5100
  }
4993
5101
  const c = t.innerHTML.trim();
4994
5102
  c && !this.config.cardRenderer && !i.__frameworkAdapter?.parseResponsiveCardElement && (d.cardRenderer = (u) => {
4995
- const h = st(c, { value: u, row: u }), f = at(h), g = document.createElement("div");
5103
+ const h = at(c, { value: u, row: u }), f = lt(h), g = document.createElement("div");
4996
5104
  return g.className = "tbw-responsive-card-content", g.innerHTML = f, g;
4997
5105
  }), Object.keys(d).length > 0 && (this.config = { ...this.config, ...d });
4998
5106
  }
4999
- #l(e) {
5000
- if (this.#n.clear(), this.#s.clear(), !!e)
5107
+ #p(e) {
5108
+ if (this.#n.clear(), this.#r.clear(), !!e)
5001
5109
  for (const t of e)
5002
- typeof t == "string" ? this.#n.add(t) : t.showValue ? this.#s.add(t.field) : this.#n.add(t.field);
5110
+ typeof t == "string" ? this.#n.add(t) : t.showValue ? this.#r.add(t.field) : this.#n.add(t.field);
5003
5111
  }
5004
5112
  detach() {
5005
5113
  this.#t?.disconnect(), this.#t = void 0, clearTimeout(this.#o), this.#o = void 0, this.gridElement && this.gridElement.removeAttribute("data-responsive"), super.detach();
@@ -5009,62 +5117,62 @@ class Gn extends I {
5009
5117
  return this.#e;
5010
5118
  }
5011
5119
  afterRender() {
5012
- if (this.#E(), !(this.#h.length > 0 ? this.#u !== null : this.#e))
5120
+ if (this.#R(), !(this.#f.length > 0 ? this.#l !== null : this.#e))
5013
5121
  return;
5014
- const t = this.#n.size > 0, i = this.#s.size > 0;
5122
+ const t = this.#n.size > 0, i = this.#r.size > 0;
5015
5123
  if (!t && !i)
5016
5124
  return;
5017
5125
  const n = this.gridElement.querySelectorAll(".cell[data-field]");
5018
5126
  for (const r of n) {
5019
5127
  const o = r.getAttribute("data-field");
5020
- o && (this.#n.has(o) ? (r.setAttribute("data-responsive-hidden", ""), r.removeAttribute("data-responsive-value-only")) : this.#s.has(o) ? (r.setAttribute("data-responsive-value-only", ""), r.removeAttribute("data-responsive-hidden")) : (r.removeAttribute("data-responsive-hidden"), r.removeAttribute("data-responsive-value-only")));
5128
+ o && (this.#n.has(o) ? (r.setAttribute("data-responsive-hidden", ""), r.removeAttribute("data-responsive-value-only")) : this.#r.has(o) ? (r.setAttribute("data-responsive-value-only", ""), r.removeAttribute("data-responsive-hidden")) : (r.removeAttribute("data-responsive-hidden"), r.removeAttribute("data-responsive-value-only")));
5021
5129
  }
5022
5130
  }
5023
- #g(e) {
5024
- if (this.#h.length > 0) {
5025
- this.#m(e);
5131
+ #a(e) {
5132
+ if (this.#f.length > 0) {
5133
+ this.#c(e);
5026
5134
  return;
5027
5135
  }
5028
5136
  const t = this.config.breakpoint ?? 0;
5029
- t === 0 && !this.#r && (this.#r = !0, console.warn(
5137
+ t === 0 && !this.#s && (this.#s = !0, console.warn(
5030
5138
  "[tbw-grid:ResponsivePlugin] No breakpoint configured. Responsive mode is disabled. Set a breakpoint based on your grid's column count."
5031
5139
  ));
5032
5140
  const i = t > 0 && e < t;
5033
- i !== this.#e && (this.#e = i, this.#w(), this.emit("responsive-change", {
5141
+ i !== this.#e && (this.#e = i, this.#g(), this.emit("responsive-change", {
5034
5142
  isResponsive: i,
5035
5143
  width: e,
5036
5144
  breakpoint: t
5037
5145
  }), this.requestRender());
5038
5146
  }
5039
- #m(e) {
5147
+ #c(e) {
5040
5148
  let t = null;
5041
- for (const n of this.#h)
5149
+ for (const n of this.#f)
5042
5150
  e <= n.maxWidth && (t = n);
5043
- if (t !== this.#u) {
5044
- this.#u = t, t?.hiddenColumns ? this.#l(t.hiddenColumns) : this.#l(this.config.hiddenColumns);
5151
+ if (t !== this.#l) {
5152
+ this.#l = t, t?.hiddenColumns ? this.#p(t.hiddenColumns) : this.#p(this.config.hiddenColumns);
5045
5153
  const n = t?.cardLayout === !0;
5046
- n !== this.#e && (this.#e = n, this.#w()), this.emit("responsive-change", {
5154
+ n !== this.#e && (this.#e = n, this.#g()), this.emit("responsive-change", {
5047
5155
  isResponsive: this.#e,
5048
5156
  width: e,
5049
5157
  breakpoint: t?.maxWidth ?? 0
5050
5158
  }), this.requestRender();
5051
5159
  }
5052
5160
  }
5053
- #c;
5054
- #w() {
5161
+ #d;
5162
+ #g() {
5055
5163
  this.gridElement.toggleAttribute("data-responsive", this.#e);
5056
5164
  const e = this.config.animate !== !1;
5057
5165
  this.gridElement.toggleAttribute("data-responsive-animate", e), this.config.animationDuration && this.gridElement.style.setProperty("--tbw-responsive-duration", `${this.config.animationDuration}ms`);
5058
5166
  const t = this.grid;
5059
5167
  if (this.#e) {
5060
- t._virtualization && (this.#c = t._virtualization.rowHeight);
5168
+ t._virtualization && (this.#d = t._virtualization.rowHeight);
5061
5169
  const i = this.gridElement.querySelector(".tbw-scroll-area");
5062
5170
  i && (i.scrollLeft = 0);
5063
5171
  } else {
5064
5172
  const i = this.gridElement.querySelectorAll(".data-grid-row");
5065
5173
  for (const n of i)
5066
5174
  n.style.height = "", n.classList.remove("responsive-card");
5067
- this.#c && this.#c > 0 && t._virtualization && (t._virtualization.rowHeight = this.#c, this.#c = void 0), this.#f = void 0, this.#p = void 0, this.#b = void 0;
5175
+ this.#d && this.#d > 0 && t._virtualization && (t._virtualization.rowHeight = this.#d, this.#d = void 0), this.#u = void 0, this.#m = void 0, this.#x = void 0;
5068
5176
  }
5069
5177
  }
5070
5178
  renderRow(e, t, i) {
@@ -5083,61 +5191,61 @@ class Gn extends I {
5083
5191
  switch (e.key) {
5084
5192
  case "ArrowDown":
5085
5193
  if (this.grid._focusCol < i)
5086
- return this.grid._focusCol += 1, e.preventDefault(), M(this.grid), !0;
5194
+ return this.grid._focusCol += 1, e.preventDefault(), q(this.grid), !0;
5087
5195
  if (this.grid._focusRow < t)
5088
- return this.grid._focusRow += 1, this.grid._focusCol = 0, e.preventDefault(), M(this.grid), !0;
5196
+ return this.grid._focusRow += 1, this.grid._focusCol = 0, e.preventDefault(), q(this.grid), !0;
5089
5197
  break;
5090
5198
  case "ArrowUp":
5091
5199
  if (this.grid._focusCol > 0)
5092
- return this.grid._focusCol -= 1, e.preventDefault(), M(this.grid), !0;
5200
+ return this.grid._focusCol -= 1, e.preventDefault(), q(this.grid), !0;
5093
5201
  if (this.grid._focusRow > 0)
5094
- return this.grid._focusRow -= 1, this.grid._focusCol = i, e.preventDefault(), M(this.grid), !0;
5202
+ return this.grid._focusRow -= 1, this.grid._focusCol = i, e.preventDefault(), q(this.grid), !0;
5095
5203
  break;
5096
5204
  case "ArrowRight":
5097
5205
  if (this.grid._focusRow < t)
5098
- return this.grid._focusRow += 1, e.preventDefault(), M(this.grid), !0;
5206
+ return this.grid._focusRow += 1, e.preventDefault(), q(this.grid), !0;
5099
5207
  break;
5100
5208
  case "ArrowLeft":
5101
5209
  if (this.grid._focusRow > 0)
5102
- return this.grid._focusRow -= 1, e.preventDefault(), M(this.grid), !0;
5210
+ return this.grid._focusRow -= 1, e.preventDefault(), q(this.grid), !0;
5103
5211
  break;
5104
5212
  }
5105
5213
  return !1;
5106
5214
  }
5107
- #f;
5108
- #p;
5109
- #b;
5110
- #y() {
5111
- if (this.#f && this.#f > 0)
5112
- return this.#f;
5215
+ #u;
5216
+ #m;
5217
+ #x;
5218
+ #C() {
5219
+ if (this.#u && this.#u > 0)
5220
+ return this.#u;
5113
5221
  const e = this.config.cardRowHeight;
5114
5222
  return typeof e == "number" && e > 0 ? e : 80;
5115
5223
  }
5116
- #d() {
5117
- return this.#p && this.#p > 0 ? this.#p : this.#c ?? 28;
5224
+ #w() {
5225
+ return this.#m && this.#m > 0 ? this.#m : this.#d ?? 28;
5118
5226
  }
5119
- #v() {
5227
+ #y() {
5120
5228
  for (const e of this.rows)
5121
5229
  if (e.__isGroupRow)
5122
5230
  return !0;
5123
5231
  return !1;
5124
5232
  }
5125
- #x() {
5233
+ #h() {
5126
5234
  let e = 0, t = 0;
5127
5235
  for (const i of this.rows)
5128
5236
  i.__isGroupRow ? e++ : t++;
5129
5237
  return { groupCount: e, cardCount: t };
5130
5238
  }
5131
5239
  getExtraHeight() {
5132
- if (!this.#e || !this.config.cardRenderer || !this.#v())
5240
+ if (!this.#e || !this.config.cardRenderer || !this.#y())
5133
5241
  return 0;
5134
- const e = this.#c ?? 28, t = this.#d(), i = this.#y(), { groupCount: n, cardCount: r } = this.#x(), o = n * Math.max(0, t - e), s = r * Math.max(0, i - e);
5242
+ const e = this.#d ?? 28, t = this.#w(), i = this.#C(), { groupCount: n, cardCount: r } = this.#h(), o = n * Math.max(0, t - e), s = r * Math.max(0, i - e);
5135
5243
  return o + s;
5136
5244
  }
5137
5245
  getExtraHeightBefore(e) {
5138
- if (!this.#e || !this.config.cardRenderer || !this.#v())
5246
+ if (!this.#e || !this.config.cardRenderer || !this.#y())
5139
5247
  return 0;
5140
- const t = this.#c ?? 28, i = this.#d(), n = this.#y(), r = Math.max(0, i - t), o = Math.max(0, n - t);
5248
+ const t = this.#d ?? 28, i = this.#w(), n = this.#C(), r = Math.max(0, i - t), o = Math.max(0, n - t);
5141
5249
  let s = 0, l = 0;
5142
5250
  const d = this.rows, c = Math.min(e, d.length);
5143
5251
  for (let u = 0; u < c; u++)
@@ -5146,41 +5254,41 @@ class Gn extends I {
5146
5254
  }
5147
5255
  getRowHeight(e, t) {
5148
5256
  if (!(!this.#e || !this.config.cardRenderer))
5149
- return e.__isGroupRow ? this.#d() : this.#y();
5257
+ return e.__isGroupRow ? this.#w() : this.#C();
5150
5258
  }
5151
- #R() {
5259
+ #E() {
5152
5260
  let e = 0;
5153
5261
  for (const t of this.rows)
5154
5262
  t.__isGroupRow || e++;
5155
5263
  return e;
5156
5264
  }
5157
- #C = !1;
5158
- #E() {
5265
+ #v = !1;
5266
+ #R() {
5159
5267
  if (!this.#e || !this.config.cardRenderer)
5160
5268
  return;
5161
5269
  let e = !1;
5162
- const t = this.grid, i = this.#v(), n = this.#R();
5163
- if (n !== this.#b && (this.#b = n, e = !0), i) {
5270
+ const t = this.grid, i = this.#y(), n = this.#E();
5271
+ if (n !== this.#x && (this.#x = n, e = !0), i) {
5164
5272
  const o = this.gridElement.querySelector(".data-grid-row.group-row");
5165
5273
  if (o) {
5166
5274
  const s = o.getBoundingClientRect().height;
5167
- s > 0 && s !== this.#p && (this.#p = s, e = !0);
5275
+ s > 0 && s !== this.#m && (this.#m = s, e = !0);
5168
5276
  }
5169
5277
  }
5170
5278
  const r = this.gridElement.querySelector(".data-grid-row.responsive-card");
5171
5279
  if (r) {
5172
5280
  const o = r.getBoundingClientRect().height;
5173
- o > 0 && o !== this.#f && (this.#f = o, e = !0, !i && t._virtualization && (t._virtualization.rowHeight = o));
5281
+ o > 0 && o !== this.#u && (this.#u = o, e = !0, !i && t._virtualization && (t._virtualization.rowHeight = o));
5174
5282
  }
5175
- e && !this.#C && (this.#C = !0, queueMicrotask(() => {
5176
- this.#C = !1, this.grid && this.#e && this.grid.refreshVirtualWindow?.(!0, !0);
5283
+ e && !this.#v && (this.#v = !0, queueMicrotask(() => {
5284
+ this.#v = !1, this.grid && this.#e && this.grid.refreshVirtualWindow?.(!0, !0);
5177
5285
  }));
5178
5286
  }
5179
5287
  }
5180
- const rn = '@layer tbw-plugins{[data-field=__tbw_row_drag]{display:flex;align-items:center;justify-content:center}.dg-row-drag-handle{display:flex;align-items:center;justify-content:center;min-width:1em;min-height:1em;cursor:grab;user-select:none;color:var(--tbw-row-reorder-handle-color, var(--tbw-color-fg-muted));transition:color var(--tbw-transition-duration, .12s) var(--tbw-transition-ease, ease);font-size:var(--tbw-font-size, 1em);letter-spacing:-2px;&:hover{color:var(--tbw-row-reorder-handle-hover, var(--tbw-color-fg))}&:active{cursor:grabbing}}.data-grid-row.dragging{opacity:.6}.data-grid-row.drop-target{position:relative;&.drop-before:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background-color:var(--tbw-row-reorder-indicator, var(--tbw-color-accent));z-index:10}&.drop-after:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--tbw-row-reorder-indicator, var(--tbw-color-accent));z-index:10}}.data-grid-row.keyboard-moving{background-color:var(--tbw-row-reorder-moving-bg, var(--tbw-focus-background));box-shadow:0 0 0 1px var(--tbw-row-reorder-moving-border, var(--tbw-color-accent)) inset}.data-grid-row.flip-animating{transition:transform var(--tbw-animation-duration, .2s) ease-out;will-change:transform;z-index:1}}', on = "__tbw_row_drag";
5181
- class Kn extends I {
5288
+ const sn = '@layer tbw-plugins{[data-field=__tbw_row_drag]{display:flex;align-items:center;justify-content:center}.dg-row-drag-handle{display:flex;align-items:center;justify-content:center;min-width:1em;min-height:1em;cursor:grab;user-select:none;color:var(--tbw-row-reorder-handle-color, var(--tbw-color-fg-muted));transition:color var(--tbw-transition-duration, .12s) var(--tbw-transition-ease, ease);font-size:var(--tbw-font-size, 1em);letter-spacing:-2px;&:hover{color:var(--tbw-row-reorder-handle-hover, var(--tbw-color-fg))}&:active{cursor:grabbing}}.data-grid-row.dragging{opacity:.6}.data-grid-row.drop-target{position:relative;&.drop-before:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background-color:var(--tbw-row-reorder-indicator, var(--tbw-color-accent));z-index:10}&.drop-after:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--tbw-row-reorder-indicator, var(--tbw-color-accent));z-index:10}}.data-grid-row.keyboard-moving{background-color:var(--tbw-row-reorder-moving-bg, var(--tbw-focus-background));box-shadow:0 0 0 1px var(--tbw-row-reorder-moving-border, var(--tbw-color-accent)) inset}.data-grid-row.flip-animating{transition:transform var(--tbw-animation-duration, .2s) ease-out;will-change:transform;z-index:1}}', an = "__tbw_row_drag";
5289
+ class On extends F {
5182
5290
  name = "rowReorder";
5183
- styles = rn;
5291
+ styles = sn;
5184
5292
  get defaultConfig() {
5185
5293
  return {
5186
5294
  enableKeyboard: !0,
@@ -5207,7 +5315,7 @@ class Kn extends I {
5207
5315
  if (!this.config.showDragHandle)
5208
5316
  return [...e];
5209
5317
  const t = {
5210
- field: on,
5318
+ field: an,
5211
5319
  header: "",
5212
5320
  width: this.config.dragHandleWidth ?? 40,
5213
5321
  resizable: !1,
@@ -5301,7 +5409,7 @@ class Kn extends I {
5301
5409
  row: e
5302
5410
  }, this.lastFocusCol = r;
5303
5411
  const o = this.grid, s = [...o._rows ?? this.sourceRows], [l] = s.splice(t, 1);
5304
- s.splice(i, 0, l), o._rows = s, o._focusRow = i, o._focusCol = r, o.refreshVirtualWindow(!0), M(o), this.clearDebounceTimer(), this.debounceTimer = setTimeout(() => {
5412
+ s.splice(i, 0, l), o._rows = s, o._focusRow = i, o._focusCol = r, o.refreshVirtualWindow(!0), q(o), this.clearDebounceTimer(), this.debounceTimer = setTimeout(() => {
5305
5413
  this.flushPendingMove();
5306
5414
  }, this.config.debounceMs ?? 300);
5307
5415
  }
@@ -5320,7 +5428,7 @@ class Kn extends I {
5320
5428
  const o = [...this.sourceRows], [s] = o.splice(t, 1);
5321
5429
  o.splice(e, 0, s);
5322
5430
  const l = this.grid;
5323
- l._rows = o, l._focusRow = e, l._focusCol = this.lastFocusCol, l.refreshVirtualWindow(!0), M(l);
5431
+ l._rows = o, l._focusRow = e, l._focusCol = this.lastFocusCol, l.refreshVirtualWindow(!0), q(l);
5324
5432
  }
5325
5433
  }
5326
5434
  executeMove(e, t, i, n) {
@@ -5398,38 +5506,38 @@ function X(a) {
5398
5506
  endCol: Math.max(a.startCol, a.endCol)
5399
5507
  };
5400
5508
  }
5401
- function sn(a) {
5509
+ function ln(a) {
5402
5510
  const e = X(a);
5403
5511
  return {
5404
5512
  from: { row: e.startRow, col: e.startCol },
5405
5513
  to: { row: e.endRow, col: e.endCol }
5406
5514
  };
5407
5515
  }
5408
- function pt(a) {
5409
- return a.map(sn);
5516
+ function mt(a) {
5517
+ return a.map(ln);
5410
5518
  }
5411
- function an(a, e, t) {
5519
+ function dn(a, e, t) {
5412
5520
  const i = X(t);
5413
5521
  return a >= i.startRow && a <= i.endRow && e >= i.startCol && e <= i.endCol;
5414
5522
  }
5415
- function ln(a, e, t) {
5416
- return t.some((i) => an(a, e, i));
5523
+ function cn(a, e, t) {
5524
+ return t.some((i) => dn(a, e, i));
5417
5525
  }
5418
- function dn(a) {
5526
+ function un(a) {
5419
5527
  const e = [], t = X(a);
5420
5528
  for (let i = t.startRow; i <= t.endRow; i++)
5421
5529
  for (let n = t.startCol; n <= t.endCol; n++)
5422
5530
  e.push({ row: i, col: n });
5423
5531
  return e;
5424
5532
  }
5425
- function cn(a) {
5533
+ function hn(a) {
5426
5534
  const e = /* @__PURE__ */ new Map();
5427
5535
  for (const t of a)
5428
- for (const i of dn(t))
5536
+ for (const i of un(t))
5429
5537
  e.set(`${i.row},${i.col}`, i);
5430
5538
  return [...e.values()];
5431
5539
  }
5432
- function fe(a, e) {
5540
+ function ge(a, e) {
5433
5541
  return {
5434
5542
  startRow: a.row,
5435
5543
  startCol: a.col,
@@ -5441,8 +5549,8 @@ function ee(a, e) {
5441
5549
  const t = X(a), i = X(e);
5442
5550
  return t.startRow === i.startRow && t.startCol === i.startCol && t.endRow === i.endRow && t.endCol === i.endCol;
5443
5551
  }
5444
- const un = '@layer tbw-plugins{tbw-grid{&.selecting .data-grid-row>.cell{user-select:none}&:has(.selection){user-select:none}.data-grid-row.row-focus{background-color:var(--tbw-focus-background, rgba(from var(--tbw-color-accent) r g b / 12%));outline:none;position:relative;&:after{content:"";position:absolute;inset:0;pointer-events:none;border-width:0;border-style:var(--tbw-selection-border-style, var(--tbw-border-style));border-color:var(--tbw-range-border-color, var(--tbw-color-accent));border-top-width:var(--tbw-selection-border-width, var(--tbw-border-width));border-bottom-width:var(--tbw-selection-border-width, var(--tbw-border-width));z-index:1}+.data-grid-row.row-focus:after{border-top-width:0}&:has(+.data-grid-row.row-focus):after{border-bottom-width:0}}&[data-selection-mode=row] .cell-focus,&[data-selection-mode=row] .row-focus,&[data-selection-mode=range] .cell-focus{outline:none}.data-grid-row>.cell.selected{background-color:var(--tbw-range-selection-bg);position:relative;&:after{content:"";position:absolute;inset:0;pointer-events:none;border:0 var(--tbw-selection-border-style, var(--tbw-border-style)) var(--tbw-range-border-color);z-index:1}&.top:after{border-top-width:var(--tbw-selection-border-width, var(--tbw-border-width))}&.bottom:after{border-bottom-width:var(--tbw-selection-border-width, var(--tbw-border-width))}&.first:after{border-left-width:var(--tbw-selection-border-width, var(--tbw-border-width))}&.last:after{border-right-width:var(--tbw-selection-border-width, var(--tbw-border-width))}}.data-grid-row[data-selectable=false]{cursor:not-allowed;opacity:.6;&.row-focus{background-color:var(--tbw-color-row-alt)}}.data-grid-row>.cell[data-selectable=false]{cursor:not-allowed;opacity:.6;&.selected{background-color:var(--tbw-selection-warning-bg, rgba(from var(--tbw-color-error) r g b / 50%))}}.tbw-selection-summary{font-size:var(--tbw-font-size-sm, .8125rem);color:var(--tbw-color-fg-muted);white-space:nowrap}.data-grid-row>.cell[data-field=__tbw_checkbox],.header-row>.cell[data-field=__tbw_checkbox]{text-align:center;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}.tbw-select-row-checkbox{pointer-events:none;margin:0;cursor:pointer}.tbw-checkbox-header{display:flex;justify-content:center;align-items:center;height:100%}.tbw-select-all-checkbox{margin:0;cursor:pointer}}}', et = "__tbw_checkbox";
5445
- function hn(a, e, t) {
5552
+ const fn = '@layer tbw-plugins{tbw-grid{&.selecting .data-grid-row>.cell{user-select:none}&:has(.selection){user-select:none}.data-grid-row.row-focus{background-color:var(--tbw-focus-background, rgba(from var(--tbw-color-accent) r g b / 12%));outline:none;position:relative;&:after{content:"";position:absolute;inset:0;pointer-events:none;border-width:0;border-style:var(--tbw-selection-border-style, var(--tbw-border-style));border-color:var(--tbw-range-border-color, var(--tbw-color-accent));border-top-width:var(--tbw-selection-border-width, var(--tbw-border-width));border-bottom-width:var(--tbw-selection-border-width, var(--tbw-border-width));z-index:1}+.data-grid-row.row-focus:after{border-top-width:0}&:has(+.data-grid-row.row-focus):after{border-bottom-width:0}}&[data-selection-mode=row] .cell-focus,&[data-selection-mode=row] .row-focus,&[data-selection-mode=range] .cell-focus{outline:none}.data-grid-row>.cell.selected{background-color:var(--tbw-range-selection-bg);position:relative;&:after{content:"";position:absolute;inset:0;pointer-events:none;border:0 var(--tbw-selection-border-style, var(--tbw-border-style)) var(--tbw-range-border-color);z-index:1}&.top:after{border-top-width:var(--tbw-selection-border-width, var(--tbw-border-width))}&.bottom:after{border-bottom-width:var(--tbw-selection-border-width, var(--tbw-border-width))}&.first:after{border-left-width:var(--tbw-selection-border-width, var(--tbw-border-width))}&.last:after{border-right-width:var(--tbw-selection-border-width, var(--tbw-border-width))}}.data-grid-row[data-selectable=false]{cursor:not-allowed;opacity:.6;&.row-focus{background-color:var(--tbw-color-row-alt)}}.data-grid-row>.cell[data-selectable=false]{cursor:not-allowed;opacity:.6;&.selected{background-color:var(--tbw-selection-warning-bg, rgba(from var(--tbw-color-error) r g b / 50%))}}.tbw-selection-summary{font-size:var(--tbw-font-size-sm, .8125rem);color:var(--tbw-color-fg-muted);white-space:nowrap}.data-grid-row>.cell[data-field=__tbw_checkbox],.header-row>.cell[data-field=__tbw_checkbox]{text-align:center;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}.tbw-select-row-checkbox{pointer-events:none;margin:0;cursor:pointer}.tbw-checkbox-header{display:flex;justify-content:center;align-items:center;height:100%}.tbw-select-all-checkbox{margin:0;cursor:pointer}}}', tt = "__tbw_checkbox";
5553
+ function gn(a, e, t) {
5446
5554
  if (a === "cell" && e.selectedCell)
5447
5555
  return {
5448
5556
  mode: a,
@@ -5460,14 +5568,15 @@ function hn(a, e, t) {
5460
5568
  i[s] === o + 1 ? o = i[s] : (n.push({ from: { row: r, col: 0 }, to: { row: o, col: t - 1 } }), r = i[s], o = r);
5461
5569
  return n.push({ from: { row: r, col: 0 }, to: { row: o, col: t - 1 } }), { mode: a, ranges: n };
5462
5570
  }
5463
- return a === "range" && e.ranges.length > 0 ? { mode: a, ranges: pt(e.ranges) } : { mode: a, ranges: [] };
5571
+ return a === "range" && e.ranges.length > 0 ? { mode: a, ranges: mt(e.ranges) } : { mode: a, ranges: [] };
5464
5572
  }
5465
- class zn extends I {
5573
+ class Bn extends F {
5466
5574
  static manifest = {
5467
5575
  queries: [
5468
5576
  { type: "getSelection", description: "Get the current selection state" },
5469
5577
  { type: "selectRows", description: "Select specific rows by index (row mode only)" },
5470
- { type: "getSelectedRowIndices", description: "Get sorted array of selected row indices" }
5578
+ { type: "getSelectedRowIndices", description: "Get sorted array of selected row indices" },
5579
+ { type: "getSelectedRows", description: "Get actual row objects for the current selection (works in all modes)" }
5471
5580
  ],
5472
5581
  configRules: [
5473
5582
  {
@@ -5481,7 +5590,7 @@ class zn extends I {
5481
5590
  ]
5482
5591
  };
5483
5592
  name = "selection";
5484
- styles = un;
5593
+ styles = fn;
5485
5594
  get defaultConfig() {
5486
5595
  return {
5487
5596
  mode: "cell",
@@ -5526,6 +5635,8 @@ class zn extends I {
5526
5635
  return this.getSelection();
5527
5636
  if (e.type === "getSelectedRowIndices")
5528
5637
  return this.getSelectedRowIndices();
5638
+ if (e.type === "getSelectedRows")
5639
+ return this.getSelectedRows();
5529
5640
  if (e.type === "selectRows")
5530
5641
  return this.selectRows(e.context), !0;
5531
5642
  }
@@ -5570,7 +5681,7 @@ class zn extends I {
5570
5681
  return !1;
5571
5682
  const d = n.shiftKey, c = n.ctrlKey || n.metaKey;
5572
5683
  if (d && this.cellAnchor) {
5573
- const u = fe(this.cellAnchor, { row: t, col: i }), h = this.ranges.length > 0 ? this.ranges[this.ranges.length - 1] : null;
5684
+ const u = ge(this.cellAnchor, { row: t, col: i }), h = this.ranges.length > 0 ? this.ranges[this.ranges.length - 1] : null;
5574
5685
  if (h && ee(h, u))
5575
5686
  return !1;
5576
5687
  c ? this.ranges.length > 0 ? this.ranges[this.ranges.length - 1] = u : this.ranges.push(u) : this.ranges = [u], this.activeRange = u;
@@ -5653,7 +5764,7 @@ class zn extends I {
5653
5764
  const o = this.columns.findIndex((s) => !W(s));
5654
5765
  o >= 0 && (t = o);
5655
5766
  }
5656
- const n = fe(this.cellAnchor, { row: e.rowIndex, col: t }), r = this.ranges.length > 0 ? this.ranges[this.ranges.length - 1] : null;
5767
+ const n = ge(this.cellAnchor, { row: e.rowIndex, col: t }), r = this.ranges.length > 0 ? this.ranges[this.ranges.length - 1] : null;
5657
5768
  return r && ee(r, n) || (this.ranges.length > 0 ? this.ranges[this.ranges.length - 1] = n : this.ranges.push(n), this.activeRange = n, this.emit("selection-change", this.#i()), this.requestAfterRender()), !0;
5658
5769
  }
5659
5770
  onCellMouseUp(e) {
@@ -5662,16 +5773,16 @@ class zn extends I {
5662
5773
  }
5663
5774
  processColumns(e) {
5664
5775
  if (this.config.checkbox && this.config.mode === "row") {
5665
- if (e.some((r) => r.field === et))
5776
+ if (e.some((r) => r.field === tt))
5666
5777
  return e;
5667
- const t = this.#t(), i = e.findIndex(oe), n = i >= 0 ? i + 1 : 0;
5778
+ const t = this.#t(), i = e.findIndex(se), n = i >= 0 ? i + 1 : 0;
5668
5779
  return [...e.slice(0, n), t, ...e.slice(n)];
5669
5780
  }
5670
5781
  return e;
5671
5782
  }
5672
5783
  #t() {
5673
5784
  return {
5674
- field: et,
5785
+ field: tt,
5675
5786
  header: "",
5676
5787
  width: 32,
5677
5788
  resizable: !1,
@@ -5704,7 +5815,7 @@ class zn extends I {
5704
5815
  }
5705
5816
  #e(e) {
5706
5817
  e.querySelectorAll(".tbw-select-row-checkbox").forEach((n) => {
5707
- const r = n.closest(".cell"), o = r ? Se(r) : -1;
5818
+ const r = n.closest(".cell"), o = r ? ke(r) : -1;
5708
5819
  o >= 0 && (n.checked = this.selected.has(o));
5709
5820
  });
5710
5821
  const i = e.querySelector(".tbw-select-all-checkbox");
@@ -5740,7 +5851,7 @@ class zn extends I {
5740
5851
  }
5741
5852
  }
5742
5853
  }
5743
- #r() {
5854
+ #s() {
5744
5855
  const e = this.gridElement;
5745
5856
  if (!e) return;
5746
5857
  const { mode: t } = this.config, i = !!this.config.isSelectable;
@@ -5750,14 +5861,14 @@ class zn extends I {
5750
5861
  const r = e.querySelectorAll(".data-grid-row");
5751
5862
  if (r.forEach((o) => {
5752
5863
  o.classList.remove("selected", "row-focus"), i && o.removeAttribute("data-selectable");
5753
- }), t === "row" && (ke(e), r.forEach((o) => {
5754
- const s = o.querySelector(".cell[data-row]"), l = Se(s);
5864
+ }), t === "row" && (Ae(e), r.forEach((o) => {
5865
+ const s = o.querySelector(".cell[data-row]"), l = ke(s);
5755
5866
  l >= 0 && (i && !this.isRowSelectable(l) && o.setAttribute("data-selectable", "false"), this.selected.has(l) && o.classList.add("selected", "row-focus"));
5756
5867
  }), this.config.checkbox && this.#e(e)), (t === "cell" || t === "range") && i && e.querySelectorAll(".cell[data-row][data-col]").forEach((s) => {
5757
5868
  const l = parseInt(s.getAttribute("data-row") ?? "-1", 10), d = parseInt(s.getAttribute("data-col") ?? "-1", 10);
5758
5869
  l >= 0 && d >= 0 && (this.isCellSelectable(l, d) || s.setAttribute("data-selectable", "false"));
5759
5870
  }), t === "range" && this.ranges.length > 0) {
5760
- ke(e);
5871
+ Ae(e);
5761
5872
  const o = this.ranges.map(X), s = (d, c) => {
5762
5873
  for (const u of o)
5763
5874
  if (d >= u.startRow && d <= u.endRow && c >= u.startCol && c <= u.endCol)
@@ -5785,15 +5896,15 @@ class zn extends I {
5785
5896
  this.pendingKeyboardUpdate = null;
5786
5897
  const r = this.grid._focusRow, o = this.grid._focusCol;
5787
5898
  if (n && this.cellAnchor) {
5788
- const s = fe(this.cellAnchor, { row: r, col: o });
5899
+ const s = ge(this.cellAnchor, { row: r, col: o });
5789
5900
  this.ranges = [s], this.activeRange = s;
5790
5901
  } else n || (this.ranges = [], this.activeRange = null, this.cellAnchor = { row: r, col: o });
5791
5902
  this.emit("selection-change", this.#i());
5792
5903
  }
5793
- this.#o(i), this.grid.setAttribute("data-selection-mode", i), t && t.classList.toggle("selecting", this.isDragging), this.#r();
5904
+ this.#o(i), this.grid.setAttribute("data-selection-mode", i), t && t.classList.toggle("selecting", this.isDragging), this.#s();
5794
5905
  }
5795
5906
  onScrollRender() {
5796
- this.isSelectionEnabled() && this.#r();
5907
+ this.isSelectionEnabled() && this.#s();
5797
5908
  }
5798
5909
  getSelection() {
5799
5910
  return {
@@ -5803,10 +5914,10 @@ class zn extends I {
5803
5914
  };
5804
5915
  }
5805
5916
  getSelectedCells() {
5806
- return cn(this.ranges);
5917
+ return hn(this.ranges);
5807
5918
  }
5808
5919
  isCellSelected(e, t) {
5809
- return ln(e, t, this.ranges);
5920
+ return cn(e, t, this.ranges);
5810
5921
  }
5811
5922
  selectAll() {
5812
5923
  const { mode: e } = this.config;
@@ -5839,6 +5950,25 @@ class zn extends I {
5839
5950
  getSelectedRowIndices() {
5840
5951
  return [...this.selected].sort((e, t) => e - t);
5841
5952
  }
5953
+ getSelectedRows() {
5954
+ const { mode: e } = this.config, t = this.rows;
5955
+ if (e === "row")
5956
+ return this.getSelectedRowIndices().filter((i) => i >= 0 && i < t.length).map((i) => t[i]);
5957
+ if (e === "cell" && this.selectedCell) {
5958
+ const { row: i } = this.selectedCell;
5959
+ return i >= 0 && i < t.length ? [t[i]] : [];
5960
+ }
5961
+ if (e === "range" && this.ranges.length > 0) {
5962
+ const i = /* @__PURE__ */ new Set();
5963
+ for (const n of this.ranges) {
5964
+ const r = Math.max(0, Math.min(n.startRow, n.endRow)), o = Math.min(t.length - 1, Math.max(n.startRow, n.endRow));
5965
+ for (let s = r; s <= o; s++)
5966
+ i.add(s);
5967
+ }
5968
+ return [...i].sort((n, r) => n - r).map((n) => t[n]);
5969
+ }
5970
+ return [];
5971
+ }
5842
5972
  clearSelection() {
5843
5973
  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();
5844
5974
  }
@@ -5850,11 +5980,11 @@ class zn extends I {
5850
5980
  endCol: t.to.col
5851
5981
  })), this.activeRange = this.ranges.length > 0 ? this.ranges[this.ranges.length - 1] : null, this.emit("selection-change", {
5852
5982
  mode: this.config.mode,
5853
- ranges: pt(this.ranges)
5983
+ ranges: mt(this.ranges)
5854
5984
  }), this.requestAfterRender();
5855
5985
  }
5856
5986
  #i() {
5857
- return hn(
5987
+ return gn(
5858
5988
  this.config.mode,
5859
5989
  {
5860
5990
  selectedCell: this.selectedCell,
@@ -5865,23 +5995,23 @@ class zn extends I {
5865
5995
  );
5866
5996
  }
5867
5997
  }
5868
- function re(a, e) {
5998
+ function oe(a, e) {
5869
5999
  return Math.floor(a / e);
5870
6000
  }
5871
- function fn(a, e) {
6001
+ function pn(a, e) {
5872
6002
  return {
5873
6003
  start: a * e,
5874
6004
  end: (a + 1) * e
5875
6005
  };
5876
6006
  }
5877
- function gn(a, e, t) {
5878
- const i = re(a, t), n = re(e - 1, t), r = [];
6007
+ function mn(a, e, t) {
6008
+ const i = oe(a, t), n = oe(e - 1, t), r = [];
5879
6009
  for (let o = i; o <= n; o++)
5880
6010
  r.push(o);
5881
6011
  return r;
5882
6012
  }
5883
- async function tt(a, e, t, i) {
5884
- const n = fn(e, t);
6013
+ async function it(a, e, t, i) {
6014
+ const n = pn(e, t);
5885
6015
  return a.getRows({
5886
6016
  startRow: n.start,
5887
6017
  endRow: n.end,
@@ -5889,14 +6019,14 @@ async function tt(a, e, t, i) {
5889
6019
  filterModel: i.filterModel
5890
6020
  });
5891
6021
  }
5892
- function pn(a, e, t) {
5893
- const i = re(a, e), n = t.get(i);
6022
+ function bn(a, e, t) {
6023
+ const i = oe(a, e), n = t.get(i);
5894
6024
  if (!n) return;
5895
6025
  const r = a % e;
5896
6026
  return n[r];
5897
6027
  }
5898
- const mn = 100;
5899
- class On extends I {
6028
+ const wn = 100;
6029
+ class Vn extends F {
5900
6030
  name = "serverSide";
5901
6031
  get defaultConfig() {
5902
6032
  return {
@@ -5916,12 +6046,12 @@ class On extends I {
5916
6046
  }
5917
6047
  loadRequiredBlocks() {
5918
6048
  if (!this.dataSource) return;
5919
- const e = this.grid, t = this.config.cacheBlockSize ?? 100, i = { startRow: e._virtualization.start, endRow: e._virtualization.end }, n = gn(i.startRow, i.endRow, t);
6049
+ const e = this.grid, t = this.config.cacheBlockSize ?? 100, i = { startRow: e._virtualization.start, endRow: e._virtualization.end }, n = mn(i.startRow, i.endRow, t);
5920
6050
  for (const r of n)
5921
6051
  if (!(this.loadedBlocks.has(r) || this.loadingBlocks.has(r))) {
5922
6052
  if (this.loadingBlocks.size >= (this.config.maxConcurrentRequests ?? 2))
5923
6053
  break;
5924
- this.loadingBlocks.add(r), tt(this.dataSource, r, t, {}).then((o) => {
6054
+ this.loadingBlocks.add(r), it(this.dataSource, r, t, {}).then((o) => {
5925
6055
  this.loadedBlocks.set(r, o.rows), this.totalRowCount = o.totalRowCount, this.loadingBlocks.delete(r), this.requestRender(), this.loadRequiredBlocks();
5926
6056
  }).catch(() => {
5927
6057
  this.loadingBlocks.delete(r);
@@ -5932,7 +6062,7 @@ class On extends I {
5932
6062
  if (!this.dataSource) return [...e];
5933
6063
  const t = [];
5934
6064
  for (let i = 0; i < this.totalRowCount; i++) {
5935
- const n = pn(i, this.config.cacheBlockSize ?? 100, this.loadedBlocks);
6065
+ const n = bn(i, this.config.cacheBlockSize ?? 100, this.loadedBlocks);
5936
6066
  t.push(n ?? { __loading: !0, __index: i });
5937
6067
  }
5938
6068
  return t;
@@ -5940,12 +6070,12 @@ class On extends I {
5940
6070
  onScroll(e) {
5941
6071
  this.dataSource && (this.loadRequiredBlocks(), this.scrollDebounceTimer && clearTimeout(this.scrollDebounceTimer), this.scrollDebounceTimer = setTimeout(() => {
5942
6072
  this.loadRequiredBlocks();
5943
- }, mn));
6073
+ }, wn));
5944
6074
  }
5945
6075
  setDataSource(e) {
5946
6076
  this.dataSource = e, this.loadedBlocks.clear(), this.loadingBlocks.clear();
5947
6077
  const t = this.config.cacheBlockSize ?? 100;
5948
- tt(e, 0, t, {}).then((i) => {
6078
+ it(e, 0, t, {}).then((i) => {
5949
6079
  this.loadedBlocks.set(0, i.rows), this.totalRowCount = i.totalRowCount, this.requestRender();
5950
6080
  });
5951
6081
  }
@@ -5959,59 +6089,59 @@ class On extends I {
5959
6089
  return this.totalRowCount;
5960
6090
  }
5961
6091
  isRowLoaded(e) {
5962
- const t = this.config.cacheBlockSize ?? 100, i = re(e, t);
6092
+ const t = this.config.cacheBlockSize ?? 100, i = oe(e, t);
5963
6093
  return this.loadedBlocks.has(i);
5964
6094
  }
5965
6095
  getLoadedBlockCount() {
5966
6096
  return this.loadedBlocks.size;
5967
6097
  }
5968
6098
  }
5969
- function mt(a, e, t) {
6099
+ function bt(a, e, t) {
5970
6100
  return a.id !== void 0 ? String(a.id) : t ? `${t}-${e}` : String(e);
5971
6101
  }
5972
- function ge(a, e) {
6102
+ function pe(a, e) {
5973
6103
  const t = new Set(a);
5974
6104
  return t.has(e) ? t.delete(e) : t.add(e), t;
5975
6105
  }
5976
- function we(a, e, t = null, i = 0) {
6106
+ function ve(a, e, t = null, i = 0) {
5977
6107
  const n = e.childrenField ?? "children", r = /* @__PURE__ */ new Set();
5978
6108
  for (let o = 0; o < a.length; o++) {
5979
- const s = a[o], l = mt(s, o, t), d = s[n];
6109
+ const s = a[o], l = bt(s, o, t), d = s[n];
5980
6110
  if (Array.isArray(d) && d.length > 0) {
5981
6111
  r.add(l);
5982
- const c = we(d, e, l, i + 1);
6112
+ const c = ve(d, e, l, i + 1);
5983
6113
  for (const u of c) r.add(u);
5984
6114
  }
5985
6115
  }
5986
6116
  return r;
5987
6117
  }
5988
- function bn() {
6118
+ function vn() {
5989
6119
  return /* @__PURE__ */ new Set();
5990
6120
  }
5991
- function bt(a, e, t, i = null, n = 0) {
6121
+ function wt(a, e, t, i = null, n = 0) {
5992
6122
  const r = t.childrenField ?? "children";
5993
6123
  for (let o = 0; o < a.length; o++) {
5994
- const s = a[o], l = mt(s, o, i);
6124
+ const s = a[o], l = bt(s, o, i);
5995
6125
  if (l === e)
5996
6126
  return [l];
5997
6127
  const d = s[r];
5998
6128
  if (Array.isArray(d) && d.length > 0) {
5999
- const c = bt(d, e, t, l, n + 1);
6129
+ const c = wt(d, e, t, l, n + 1);
6000
6130
  if (c)
6001
6131
  return [l, ...c];
6002
6132
  }
6003
6133
  }
6004
6134
  return null;
6005
6135
  }
6006
- function wn(a, e, t, i) {
6007
- const n = bt(a, e, t);
6136
+ function yn(a, e, t, i) {
6137
+ const n = wt(a, e, t);
6008
6138
  if (!n) return i;
6009
6139
  const r = new Set(i);
6010
6140
  for (let o = 0; o < n.length - 1; o++)
6011
6141
  r.add(n[o]);
6012
6142
  return r;
6013
6143
  }
6014
- function it(a, e = "children") {
6144
+ function nt(a, e = "children") {
6015
6145
  if (!Array.isArray(a) || a.length === 0) return !1;
6016
6146
  for (const t of a) {
6017
6147
  if (!t) continue;
@@ -6021,7 +6151,7 @@ function it(a, e = "children") {
6021
6151
  }
6022
6152
  return !1;
6023
6153
  }
6024
- function vn(a) {
6154
+ function xn(a) {
6025
6155
  if (!Array.isArray(a) || a.length === 0) return null;
6026
6156
  const e = ["children", "items", "nodes", "subRows", "nested"];
6027
6157
  for (const t of a)
@@ -6033,8 +6163,8 @@ function vn(a) {
6033
6163
  }
6034
6164
  return null;
6035
6165
  }
6036
- const yn = "@layer tbw-plugins{tbw-grid{.cell[data-field=__tbw_expander]{border-inline-end: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-inline-start: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}}}";
6037
- class Bn extends I {
6166
+ const Cn = "@layer tbw-plugins{tbw-grid{.cell[data-field=__tbw_expander]{border-inline-end: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-inline-start: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}}}";
6167
+ class $n extends F {
6038
6168
  static manifest = {
6039
6169
  events: [
6040
6170
  {
@@ -6050,7 +6180,7 @@ class Bn extends I {
6050
6180
  ]
6051
6181
  };
6052
6182
  name = "tree";
6053
- styles = yn;
6183
+ styles = Cn;
6054
6184
  get defaultConfig() {
6055
6185
  return {
6056
6186
  childrenField: "children",
@@ -6083,15 +6213,15 @@ class Bn extends I {
6083
6213
  }
6084
6214
  detect(e) {
6085
6215
  if (!this.config.autoDetect) return !1;
6086
- const t = e, i = this.config.childrenField ?? vn(t) ?? "children";
6087
- return it(t, i);
6216
+ const t = e, i = this.config.childrenField ?? xn(t) ?? "children";
6217
+ return nt(t, i);
6088
6218
  }
6089
6219
  processRows(e) {
6090
6220
  const t = this.config.childrenField ?? "children", i = e;
6091
- if (!it(i, t))
6221
+ if (!nt(i, t))
6092
6222
  return this.flattenedRows = [], this.rowKeyMap.clear(), this.previousVisibleKeys.clear(), [...e];
6093
6223
  let n = this.withStableKeys(i);
6094
- this.sortState && (n = this.sortTree(n, this.sortState.field, this.sortState.direction)), this.config.defaultExpanded && !this.initialExpansionDone && (this.expandedKeys = we(n, this.config), this.initialExpansionDone = !0), this.flattenedRows = this.flattenTree(n, this.expandedKeys), this.rowKeyMap.clear(), this.keysToAnimate.clear();
6224
+ this.sortState && (n = this.sortTree(n, this.sortState.field, this.sortState.direction)), this.config.defaultExpanded && !this.initialExpansionDone && (this.expandedKeys = ve(n, this.config), this.initialExpansionDone = !0), this.flattenedRows = this.flattenTree(n, this.expandedKeys), this.rowKeyMap.clear(), this.keysToAnimate.clear();
6095
6225
  const r = /* @__PURE__ */ new Set();
6096
6226
  for (const o of this.flattenedRows)
6097
6227
  this.rowKeyMap.set(o.key, o), r.add(o.key), !this.previousVisibleKeys.has(o.key) && o.depth > 0 && this.keysToAnimate.add(o.key);
@@ -6147,19 +6277,19 @@ class Bn extends I {
6147
6277
  const { row: c, value: u } = d, { showExpandIcons: h = !0, indentWidth: f } = r(), g = c, p = g.__treeDepth ?? 0, m = document.createElement("span");
6148
6278
  if (m.className = "tree-cell-wrapper", m.style.setProperty("--tbw-tree-depth", String(p)), f !== void 0 && m.style.setProperty("--tbw-tree-indent-width", `${f}px`), h)
6149
6279
  if (g.__treeHasChildren) {
6150
- const R = document.createElement("span");
6151
- R.className = `tree-toggle${g.__treeExpanded ? " expanded" : ""}`, o(R, s(g.__treeExpanded ? "collapse" : "expand")), R.setAttribute("data-tree-key", String(g.__treeKey ?? "")), m.appendChild(R);
6280
+ const E = document.createElement("span");
6281
+ E.className = `tree-toggle${g.__treeExpanded ? " expanded" : ""}`, o(E, s(g.__treeExpanded ? "collapse" : "expand")), E.setAttribute("data-tree-key", String(g.__treeKey ?? "")), m.appendChild(E);
6152
6282
  } else {
6153
- const R = document.createElement("span");
6154
- R.className = "tree-spacer", m.appendChild(R);
6283
+ const E = document.createElement("span");
6284
+ E.className = "tree-spacer", m.appendChild(E);
6155
6285
  }
6156
- const v = document.createElement("span");
6157
- if (v.className = "tree-content", n) {
6158
- const R = n(d);
6159
- R instanceof Node ? v.appendChild(R) : typeof R == "string" && (v.innerHTML = R);
6286
+ const x = document.createElement("span");
6287
+ if (x.className = "tree-content", n) {
6288
+ const E = n(d);
6289
+ E instanceof Node ? x.appendChild(E) : typeof E == "string" && (x.innerHTML = E);
6160
6290
  } else
6161
- v.textContent = u != null ? String(u) : "";
6162
- return m.appendChild(v), m;
6291
+ x.textContent = u != null ? String(u) : "";
6292
+ return m.appendChild(x), m;
6163
6293
  };
6164
6294
  return t[0] = { ...i, viewRenderer: l }, t;
6165
6295
  }
@@ -6169,7 +6299,7 @@ class Bn extends I {
6169
6299
  const i = t.getAttribute("data-tree-key");
6170
6300
  if (!i) return !1;
6171
6301
  const n = this.rowKeyMap.get(i);
6172
- return n ? (this.expandedKeys = ge(this.expandedKeys, i), this.emit("tree-expand", {
6302
+ return n ? (this.expandedKeys = pe(this.expandedKeys, i), this.emit("tree-expand", {
6173
6303
  key: i,
6174
6304
  row: n.data,
6175
6305
  expanded: this.expandedKeys.has(i),
@@ -6180,7 +6310,7 @@ class Bn extends I {
6180
6310
  if (e.key !== " ") return;
6181
6311
  const t = this.grid._focusRow, i = this.flattenedRows[t];
6182
6312
  if (i?.hasChildren)
6183
- return e.preventDefault(), this.expandedKeys = ge(this.expandedKeys, i.key), this.emit("tree-expand", {
6313
+ return e.preventDefault(), this.expandedKeys = pe(this.expandedKeys, i.key), this.emit("tree-expand", {
6184
6314
  key: i.key,
6185
6315
  row: i.data,
6186
6316
  expanded: this.expandedKeys.has(i.key),
@@ -6213,13 +6343,13 @@ class Bn extends I {
6213
6343
  this.expandedKeys.delete(e), this.requestRender();
6214
6344
  }
6215
6345
  toggle(e) {
6216
- this.expandedKeys = ge(this.expandedKeys, e), this.emitPluginEvent("tree-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
6346
+ this.expandedKeys = pe(this.expandedKeys, e), this.emitPluginEvent("tree-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
6217
6347
  }
6218
6348
  expandAll() {
6219
- this.expandedKeys = we(this.rows, this.config), this.emitPluginEvent("tree-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
6349
+ this.expandedKeys = ve(this.rows, this.config), this.emitPluginEvent("tree-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
6220
6350
  }
6221
6351
  collapseAll() {
6222
- this.expandedKeys = bn(), this.emitPluginEvent("tree-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
6352
+ this.expandedKeys = vn(), this.emitPluginEvent("tree-state-change", { expandedKeys: [...this.expandedKeys] }), this.requestRender();
6223
6353
  }
6224
6354
  isExpanded(e) {
6225
6355
  return this.expandedKeys.has(e);
@@ -6234,10 +6364,10 @@ class Bn extends I {
6234
6364
  return this.rowKeyMap.get(e)?.data;
6235
6365
  }
6236
6366
  expandToKey(e) {
6237
- this.expandedKeys = wn(this.rows, e, this.config, this.expandedKeys), this.requestRender();
6367
+ this.expandedKeys = yn(this.rows, e, this.config, this.expandedKeys), this.requestRender();
6238
6368
  }
6239
6369
  }
6240
- function xn(a, e, t) {
6370
+ function En(a, e, t) {
6241
6371
  const i = [...a.undoStack, e];
6242
6372
  for (; i.length > t; )
6243
6373
  i.shift();
@@ -6246,7 +6376,7 @@ function xn(a, e, t) {
6246
6376
  redoStack: []
6247
6377
  };
6248
6378
  }
6249
- function nt(a) {
6379
+ function rt(a) {
6250
6380
  if (a.undoStack.length === 0)
6251
6381
  return { newState: a, action: null };
6252
6382
  const e = [...a.undoStack], t = e.pop();
@@ -6258,7 +6388,7 @@ function nt(a) {
6258
6388
  action: t
6259
6389
  } : { newState: a, action: null };
6260
6390
  }
6261
- function rt(a) {
6391
+ function ot(a) {
6262
6392
  if (a.redoStack.length === 0)
6263
6393
  return { newState: a, action: null };
6264
6394
  const e = [...a.redoStack], t = e.pop();
@@ -6270,16 +6400,16 @@ function rt(a) {
6270
6400
  action: t
6271
6401
  } : { newState: a, action: null };
6272
6402
  }
6273
- function Cn(a) {
6403
+ function Rn(a) {
6274
6404
  return a.undoStack.length > 0;
6275
6405
  }
6276
- function En(a) {
6406
+ function Sn(a) {
6277
6407
  return a.redoStack.length > 0;
6278
6408
  }
6279
- function Rn() {
6409
+ function kn() {
6280
6410
  return { undoStack: [], redoStack: [] };
6281
6411
  }
6282
- function Sn(a, e, t, i) {
6412
+ function An(a, e, t, i) {
6283
6413
  return {
6284
6414
  type: "cell-edit",
6285
6415
  rowIndex: a,
@@ -6289,7 +6419,7 @@ function Sn(a, e, t, i) {
6289
6419
  timestamp: Date.now()
6290
6420
  };
6291
6421
  }
6292
- class Vn extends I {
6422
+ class Wn extends F {
6293
6423
  static dependencies = [
6294
6424
  { name: "editing", required: !0, reason: "UndoRedoPlugin tracks cell edit history" }
6295
6425
  ];
@@ -6315,7 +6445,7 @@ class Vn extends I {
6315
6445
  onKeyDown(e) {
6316
6446
  const t = (e.ctrlKey || e.metaKey) && e.key === "z" && !e.shiftKey, i = (e.ctrlKey || e.metaKey) && (e.key === "y" || e.key === "z" && e.shiftKey);
6317
6447
  if (t) {
6318
- const n = nt({ undoStack: this.undoStack, redoStack: this.redoStack });
6448
+ const n = rt({ undoStack: this.undoStack, redoStack: this.redoStack });
6319
6449
  if (n.action) {
6320
6450
  const r = this.rows;
6321
6451
  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", {
@@ -6326,7 +6456,7 @@ class Vn extends I {
6326
6456
  return !0;
6327
6457
  }
6328
6458
  if (i) {
6329
- const n = rt({ undoStack: this.undoStack, redoStack: this.redoStack });
6459
+ const n = ot({ undoStack: this.undoStack, redoStack: this.redoStack });
6330
6460
  if (n.action) {
6331
6461
  const r = this.rows;
6332
6462
  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", {
@@ -6339,7 +6469,7 @@ class Vn extends I {
6339
6469
  return !1;
6340
6470
  }
6341
6471
  recordEdit(e, t, i, n) {
6342
- const r = Sn(e, t, i, n), o = xn(
6472
+ const r = An(e, t, i, n), o = En(
6343
6473
  { undoStack: this.undoStack, redoStack: this.redoStack },
6344
6474
  r,
6345
6475
  this.config.maxHistorySize ?? 100
@@ -6347,7 +6477,7 @@ class Vn extends I {
6347
6477
  this.undoStack = o.undoStack, this.redoStack = o.redoStack;
6348
6478
  }
6349
6479
  undo() {
6350
- const e = nt({ undoStack: this.undoStack, redoStack: this.redoStack });
6480
+ const e = rt({ undoStack: this.undoStack, redoStack: this.redoStack });
6351
6481
  if (e.action) {
6352
6482
  const t = this.rows;
6353
6483
  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();
@@ -6355,7 +6485,7 @@ class Vn extends I {
6355
6485
  return e.action;
6356
6486
  }
6357
6487
  redo() {
6358
- const e = rt({ undoStack: this.undoStack, redoStack: this.redoStack });
6488
+ const e = ot({ undoStack: this.undoStack, redoStack: this.redoStack });
6359
6489
  if (e.action) {
6360
6490
  const t = this.rows;
6361
6491
  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();
@@ -6363,13 +6493,13 @@ class Vn extends I {
6363
6493
  return e.action;
6364
6494
  }
6365
6495
  canUndo() {
6366
- return Cn({ undoStack: this.undoStack, redoStack: this.redoStack });
6496
+ return Rn({ undoStack: this.undoStack, redoStack: this.redoStack });
6367
6497
  }
6368
6498
  canRedo() {
6369
- return En({ undoStack: this.undoStack, redoStack: this.redoStack });
6499
+ return Sn({ undoStack: this.undoStack, redoStack: this.redoStack });
6370
6500
  }
6371
6501
  clearHistory() {
6372
- const e = Rn();
6502
+ const e = kn();
6373
6503
  this.undoStack = e.undoStack, this.redoStack = e.redoStack;
6374
6504
  }
6375
6505
  getUndoStack() {
@@ -6379,12 +6509,12 @@ class Vn extends I {
6379
6509
  return [...this.redoStack];
6380
6510
  }
6381
6511
  }
6382
- const kn = '@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))}.tbw-visibility-group-header{display:flex;align-items:center;padding:var(--tbw-menu-item-padding, .375rem .25rem);font-size:var(--tbw-font-size-sm, .8125rem);font-weight:600;color:var(--tbw-color-fg);border-bottom:1px solid var(--tbw-color-border);margin-top:var(--tbw-spacing-sm, .25rem);position:relative}.tbw-visibility-group-header:first-child{margin-top:0}.tbw-visibility-group-header .tbw-visibility-label{gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-visibility-group-header.reorderable{cursor:grab}.tbw-visibility-group-header.reorderable:hover{background:var(--tbw-visibility-hover, var(--tbw-color-row-hover))}.tbw-visibility-group-header .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-group-header.reorderable:hover .tbw-visibility-handle{color:var(--tbw-color-fg)}.tbw-visibility-group-header.dragging{opacity:.5;cursor:grabbing}.tbw-visibility-group-header.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-group-header.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-row--grouped{padding-left:calc(var(--tbw-panel-padding, var(--tbw-spacing-md, .5rem)) + .75rem)}}';
6383
- function ot(a) {
6512
+ const _n = '@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))}.tbw-visibility-group-header{display:flex;align-items:center;padding:var(--tbw-menu-item-padding, .375rem .25rem);font-size:var(--tbw-font-size-sm, .8125rem);font-weight:600;color:var(--tbw-color-fg);border-bottom:1px solid var(--tbw-color-border);margin-top:var(--tbw-spacing-sm, .25rem);position:relative}.tbw-visibility-group-header:first-child{margin-top:0}.tbw-visibility-group-header .tbw-visibility-label{gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-visibility-group-header.reorderable{cursor:grab}.tbw-visibility-group-header.reorderable:hover{background:var(--tbw-visibility-hover, var(--tbw-color-row-hover))}.tbw-visibility-group-header .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-group-header.reorderable:hover .tbw-visibility-handle{color:var(--tbw-color-fg)}.tbw-visibility-group-header.dragging{opacity:.5;cursor:grabbing}.tbw-visibility-group-header.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-group-header.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-row--grouped{padding-left:calc(var(--tbw-panel-padding, var(--tbw-spacing-md, .5rem)) + .75rem)}}';
6513
+ function st(a) {
6384
6514
  const e = a.meta ?? {};
6385
6515
  return e.lockPosition !== !0 && e.suppressMovable !== !0;
6386
6516
  }
6387
- class U extends I {
6517
+ class U extends F {
6388
6518
  static dependencies = [
6389
6519
  { name: "reorder", required: !1, reason: "Enables drag-to-reorder columns in visibility panel" }
6390
6520
  ];
@@ -6398,7 +6528,7 @@ class U extends I {
6398
6528
  };
6399
6529
  name = "visibility";
6400
6530
  static PANEL_ID = "columns";
6401
- styles = kn;
6531
+ styles = _n;
6402
6532
  get defaultConfig() {
6403
6533
  return {
6404
6534
  allowHideAll: !1
@@ -6572,7 +6702,7 @@ class U extends I {
6572
6702
  }
6573
6703
  createColumnRow(e, t, i, n) {
6574
6704
  const r = e.header || e.field, o = document.createElement("div");
6575
- o.className = e.lockVisible ? "tbw-visibility-row locked" : "tbw-visibility-row", o.setAttribute("data-field", e.field), o.setAttribute("data-index", String(t)), i && ot(e) && (o.draggable = !0, o.classList.add("reorderable"), this.setupDragListeners(o, e.field, t, n));
6705
+ o.className = e.lockVisible ? "tbw-visibility-row locked" : "tbw-visibility-row", o.setAttribute("data-field", e.field), o.setAttribute("data-index", String(t)), i && st(e) && (o.draggable = !0, o.classList.add("reorderable"), this.setupDragListeners(o, e.field, t, n));
6576
6706
  const s = document.createElement("label");
6577
6707
  s.className = "tbw-visibility-label";
6578
6708
  const l = document.createElement("input");
@@ -6580,7 +6710,7 @@ class U extends I {
6580
6710
  this.grid.toggleColumnVisibility(e.field), setTimeout(() => this.rebuildToggles(n), 0);
6581
6711
  });
6582
6712
  const d = document.createElement("span");
6583
- if (d.textContent = r, s.appendChild(l), s.appendChild(d), i && ot(e)) {
6713
+ if (d.textContent = r, s.appendChild(l), s.appendChild(d), i && st(e)) {
6584
6714
  const c = document.createElement("span");
6585
6715
  c.className = "tbw-visibility-handle", this.setIcon(c, this.resolveIcon("dragHandle")), c.title = "Drag to reorder", o.appendChild(c);
6586
6716
  }
@@ -6656,50 +6786,52 @@ class U extends I {
6656
6786
  }
6657
6787
  }
6658
6788
  export {
6659
- I as BaseGridPlugin,
6660
- _n as ClipboardPlugin,
6661
- Ln as ColumnVirtualizationPlugin,
6662
- lt as ContextMenuPlugin,
6663
- jn as DEFAULT_ANIMATION_CONFIG,
6664
- vt as DEFAULT_GRID_ICONS,
6665
- Un as DGEvents,
6666
- Yn as DataGridElement,
6667
- Tn as EditingPlugin,
6668
- In as ExportPlugin,
6789
+ re as BLANK_FILTER_VALUE,
6790
+ F as BaseGridPlugin,
6791
+ In as ClipboardPlugin,
6792
+ Tn as ColumnVirtualizationPlugin,
6793
+ dt as ContextMenuPlugin,
6794
+ Yn as DEFAULT_ANIMATION_CONFIG,
6795
+ yt as DEFAULT_GRID_ICONS,
6796
+ Xn as DGEvents,
6797
+ Qn as DataGridElement,
6798
+ Fn as EditingPlugin,
6799
+ Pn as ExportPlugin,
6669
6800
  z as FilteringPlugin,
6670
- Xn as FitModeEnum,
6671
- Qn as GridCSSVars,
6672
- Zn as GridClasses,
6673
- Jn as GridDataAttrs,
6674
- er as GridElement,
6675
- tr as GridSelectors,
6676
- Fn as GroupingColumnsPlugin,
6677
- Pn as GroupingRowsPlugin,
6678
- ct as MasterDetailPlugin,
6679
- Dn as MultiSortPlugin,
6680
- ir as PLUGIN_QUERIES,
6681
- Mn as PinnedColumnsPlugin,
6682
- qn as PinnedRowsPlugin,
6801
+ Zn as FitModeEnum,
6802
+ Jn as GridCSSVars,
6803
+ er as GridClasses,
6804
+ tr as GridDataAttrs,
6805
+ ir as GridElement,
6806
+ nr as GridSelectors,
6807
+ Mn as GroupingColumnsPlugin,
6808
+ Dn as GroupingRowsPlugin,
6809
+ ut as MasterDetailPlugin,
6810
+ qn as MultiSortPlugin,
6811
+ rr as PLUGIN_QUERIES,
6812
+ Nn as PinnedColumnsPlugin,
6813
+ Hn as PinnedRowsPlugin,
6683
6814
  j as PivotPlugin,
6684
- nr as PluginEvents,
6685
- rr as PluginManager,
6686
- Nn as PrintPlugin,
6687
- on as ROW_DRAG_HANDLE_FIELD,
6688
- or as RenderPhase,
6689
- Hn as ReorderPlugin,
6690
- Gn as ResponsivePlugin,
6691
- Kn as RowReorderPlugin,
6692
- zn as SelectionPlugin,
6693
- On as ServerSidePlugin,
6694
- Bn as TreePlugin,
6695
- Vn as UndoRedoPlugin,
6815
+ or as PluginEvents,
6816
+ sr as PluginManager,
6817
+ Gn as PrintPlugin,
6818
+ an as ROW_DRAG_HANDLE_FIELD,
6819
+ ar as RenderPhase,
6820
+ Kn as ReorderPlugin,
6821
+ zn as ResponsivePlugin,
6822
+ On as RowReorderPlugin,
6823
+ Bn as SelectionPlugin,
6824
+ Vn as ServerSidePlugin,
6825
+ $n as TreePlugin,
6826
+ Wn as UndoRedoPlugin,
6696
6827
  U as VisibilityPlugin,
6697
- sr as builtInSort,
6698
- ar as createGrid,
6699
- lr as defaultComparator,
6700
- Gt as defaultEditorFor,
6701
- At as defaultPasteHandler,
6702
- Qi as printGridIsolated,
6703
- dr as queryGrid
6828
+ lr as builtInSort,
6829
+ dr as createGrid,
6830
+ cr as defaultComparator,
6831
+ Kt as defaultEditorFor,
6832
+ _t as defaultPasteHandler,
6833
+ Zt as getUniqueValuesBatch,
6834
+ Ji as printGridIsolated,
6835
+ ur as queryGrid
6704
6836
  };
6705
6837
  //# sourceMappingURL=all.js.map