@toolbox-web/grid 1.14.0 → 1.15.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 (82) hide show
  1. package/README.md +5 -1
  2. package/all.js +1888 -1433
  3. package/all.js.map +1 -1
  4. package/index.js +188 -149
  5. package/index.js.map +1 -1
  6. package/lib/core/grid.d.ts.map +1 -1
  7. package/lib/core/internal/loading.d.ts +2 -0
  8. package/lib/core/internal/loading.d.ts.map +1 -1
  9. package/lib/core/internal/rows.d.ts.map +1 -1
  10. package/lib/core/internal/validate-config.d.ts.map +1 -1
  11. package/lib/plugins/column-virtualization/ColumnVirtualizationPlugin.d.ts.map +1 -1
  12. package/lib/plugins/column-virtualization/index.js +1 -1
  13. package/lib/plugins/column-virtualization/index.js.map +1 -1
  14. package/lib/plugins/context-menu/ContextMenuPlugin.d.ts +20 -1
  15. package/lib/plugins/context-menu/ContextMenuPlugin.d.ts.map +1 -1
  16. package/lib/plugins/context-menu/index.d.ts +1 -1
  17. package/lib/plugins/context-menu/index.d.ts.map +1 -1
  18. package/lib/plugins/context-menu/index.js +153 -70
  19. package/lib/plugins/context-menu/index.js.map +1 -1
  20. package/lib/plugins/context-menu/menu.d.ts +7 -0
  21. package/lib/plugins/context-menu/menu.d.ts.map +1 -1
  22. package/lib/plugins/context-menu/types.d.ts +46 -0
  23. package/lib/plugins/context-menu/types.d.ts.map +1 -1
  24. package/lib/plugins/editing/EditingPlugin.d.ts.map +1 -1
  25. package/lib/plugins/editing/index.js +214 -197
  26. package/lib/plugins/editing/index.js.map +1 -1
  27. package/lib/plugins/filtering/FilteringPlugin.d.ts +9 -1
  28. package/lib/plugins/filtering/FilteringPlugin.d.ts.map +1 -1
  29. package/lib/plugins/filtering/filter-model.d.ts.map +1 -1
  30. package/lib/plugins/filtering/index.js +348 -283
  31. package/lib/plugins/filtering/index.js.map +1 -1
  32. package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts +5 -1
  33. package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts.map +1 -1
  34. package/lib/plugins/grouping-columns/index.js +242 -109
  35. package/lib/plugins/grouping-columns/index.js.map +1 -1
  36. package/lib/plugins/grouping-columns/types.d.ts +7 -0
  37. package/lib/plugins/grouping-columns/types.d.ts.map +1 -1
  38. package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts +11 -1
  39. package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts.map +1 -1
  40. package/lib/plugins/pinned-columns/index.d.ts +1 -1
  41. package/lib/plugins/pinned-columns/index.d.ts.map +1 -1
  42. package/lib/plugins/pinned-columns/index.js +174 -79
  43. package/lib/plugins/pinned-columns/index.js.map +1 -1
  44. package/lib/plugins/pinned-columns/pinned-columns.d.ts +23 -4
  45. package/lib/plugins/pinned-columns/pinned-columns.d.ts.map +1 -1
  46. package/lib/plugins/pinned-columns/types.d.ts +21 -9
  47. package/lib/plugins/pinned-columns/types.d.ts.map +1 -1
  48. package/lib/plugins/reorder/index.js.map +1 -1
  49. package/lib/plugins/responsive/index.js.map +1 -1
  50. package/lib/plugins/row-reorder/index.js.map +1 -1
  51. package/lib/plugins/selection/SelectionPlugin.d.ts.map +1 -1
  52. package/lib/plugins/selection/index.js +122 -122
  53. package/lib/plugins/selection/index.js.map +1 -1
  54. package/lib/plugins/visibility/VisibilityPlugin.d.ts +42 -2
  55. package/lib/plugins/visibility/VisibilityPlugin.d.ts.map +1 -1
  56. package/lib/plugins/visibility/index.d.ts +1 -1
  57. package/lib/plugins/visibility/index.d.ts.map +1 -1
  58. package/lib/plugins/visibility/index.js +219 -59
  59. package/lib/plugins/visibility/index.js.map +1 -1
  60. package/lib/plugins/visibility/types.d.ts +25 -0
  61. package/lib/plugins/visibility/types.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/umd/grid.all.umd.js +30 -30
  64. package/umd/grid.all.umd.js.map +1 -1
  65. package/umd/grid.umd.js +4 -4
  66. package/umd/grid.umd.js.map +1 -1
  67. package/umd/plugins/column-virtualization.umd.js +1 -1
  68. package/umd/plugins/column-virtualization.umd.js.map +1 -1
  69. package/umd/plugins/context-menu.umd.js +1 -1
  70. package/umd/plugins/context-menu.umd.js.map +1 -1
  71. package/umd/plugins/editing.umd.js +1 -1
  72. package/umd/plugins/editing.umd.js.map +1 -1
  73. package/umd/plugins/filtering.umd.js +1 -1
  74. package/umd/plugins/filtering.umd.js.map +1 -1
  75. package/umd/plugins/grouping-columns.umd.js +1 -1
  76. package/umd/plugins/grouping-columns.umd.js.map +1 -1
  77. package/umd/plugins/pinned-columns.umd.js +1 -1
  78. package/umd/plugins/pinned-columns.umd.js.map +1 -1
  79. package/umd/plugins/selection.umd.js +2 -2
  80. package/umd/plugins/selection.umd.js.map +1 -1
  81. package/umd/plugins/visibility.umd.js +1 -1
  82. package/umd/plugins/visibility.umd.js.map +1 -1
package/index.js CHANGED
@@ -345,10 +345,10 @@ class Tt {
345
345
  const e = (this.#o.columns?.length ?? 0) > 0;
346
346
  if (!this.#f && e)
347
347
  return;
348
- const i = this.#k();
349
- this.#f = !1, this.#a = i, Object.freeze(this.#a), this.#a.columns && Object.freeze(this.#a.columns), this.#o = this.#T(this.#a), this.#m();
348
+ const i = this.#N();
349
+ this.#f = !1, this.#a = i, Object.freeze(this.#a), this.#a.columns && Object.freeze(this.#a.columns), this.#o = this.#x(this.#a), this.#m();
350
350
  }
351
- #T(e) {
351
+ #x(e) {
352
352
  const i = { ...e };
353
353
  return e.columns && (i.columns = e.columns.map((o) => ({ ...o }))), e.shell && (i.shell = {
354
354
  ...e.shell,
@@ -374,7 +374,7 @@ class Tt {
374
374
  n && (!o.renderer && !o.viewRenderer && n.renderer && (o.renderer = n.renderer), !o.format && n.format && (o.format = n.format), !o.editor && n.editor && (o.editor = n.editor), !o.editorParams && n.editorParams && (o.editorParams = n.editorParams));
375
375
  }
376
376
  }
377
- #k() {
377
+ #N() {
378
378
  const e = this.#l ? { ...this.#l } : {}, i = Array.isArray(e.columns) ? [...e.columns] : [], o = (this.#d ?? []).map((s) => ({
379
379
  ...s
380
380
  }));
@@ -462,7 +462,7 @@ class Tt {
462
462
  l.applyColumnState(a.field, a);
463
463
  }
464
464
  resetState(e) {
465
- this.#C = void 0, this.#r.setSortState(null), this.#o = this.#T(this.#a), this.#m();
465
+ this.#C = void 0, this.#r.setSortState(null), this.#o = this.#x(this.#a), this.#m();
466
466
  for (const i of e)
467
467
  if (i.applyColumnState)
468
468
  for (const o of this.columns)
@@ -707,7 +707,10 @@ function zt(t, e, i, o, n) {
707
707
  h.__epoch = o, h.__rowDataRef = p, h.parentNode !== s && s.appendChild(h);
708
708
  continue;
709
709
  }
710
- const w = h.__epoch, C = h.__rowDataRef, m = h.children.length, S = w === o && m === a, A = C !== p;
710
+ const w = h.__epoch, C = h.__rowDataRef;
711
+ let m = h.children.length;
712
+ m > a && h.lastElementChild?.classList.contains("tbw-row-loading-overlay") && m--;
713
+ const S = w === o && m === a, A = C !== p;
711
714
  let v = !1;
712
715
  if (S && A) {
713
716
  for (let R = 0; R < a; R++)
@@ -865,7 +868,7 @@ function le(t, e, i, o) {
865
868
  }
866
869
  }
867
870
  function V(t, e, i, o) {
868
- e.innerHTML = "";
871
+ e.classList.remove("tbw-row-loading"), e.removeAttribute("aria-busy"), e.innerHTML = "";
869
872
  const n = t._visibleColumns, r = n.length, s = t._focusRow, l = t._focusCol, a = t, c = t._hasAfterCellRenderHook?.() ?? !1, d = document.createDocumentFragment();
870
873
  for (let f = 0; f < r; f++) {
871
874
  const u = n[f], g = Lt();
@@ -1306,7 +1309,15 @@ function jt(t) {
1306
1309
  t?.remove();
1307
1310
  }
1308
1311
  function Kt(t, e) {
1309
- e ? (t.classList.add("tbw-row-loading"), t.setAttribute("aria-busy", "true")) : (t.classList.remove("tbw-row-loading"), t.removeAttribute("aria-busy"));
1312
+ if (e) {
1313
+ if (t.classList.add("tbw-row-loading"), t.setAttribute("aria-busy", "true"), !t.querySelector(".tbw-row-loading-overlay")) {
1314
+ const i = document.createElement("div");
1315
+ i.className = "tbw-row-loading-overlay", i.setAttribute("aria-hidden", "true");
1316
+ const o = document.createElement("div");
1317
+ o.className = "tbw-row-loading-spinner", i.appendChild(o), t.appendChild(i);
1318
+ }
1319
+ } else
1320
+ t.classList.remove("tbw-row-loading"), t.removeAttribute("aria-busy"), t.querySelector(".tbw-row-loading-overlay")?.remove();
1310
1321
  }
1311
1322
  function Qt(t, e) {
1312
1323
  e ? (t.classList.add("tbw-cell-loading"), t.setAttribute("aria-busy", "true")) : (t.classList.remove("tbw-cell-loading"), t.removeAttribute("aria-busy"));
@@ -2149,11 +2160,18 @@ const xi = [
2149
2160
  level: "column",
2150
2161
  description: 'the "group" column property'
2151
2162
  },
2163
+ {
2164
+ property: "pinned",
2165
+ pluginName: "pinnedColumns",
2166
+ level: "column",
2167
+ description: 'the "pinned" column property',
2168
+ isUsed: (t) => t === "left" || t === "right" || t === "start" || t === "end"
2169
+ },
2152
2170
  {
2153
2171
  property: "sticky",
2154
2172
  pluginName: "pinnedColumns",
2155
2173
  level: "column",
2156
- description: 'the "sticky" column property',
2174
+ description: 'the "sticky" column property (deprecated, use "pinned")',
2157
2175
  isUsed: (t) => t === "left" || t === "right" || t === "start" || t === "end"
2158
2176
  }
2159
2177
  ], Hi = [
@@ -2695,7 +2713,7 @@ class oe {
2695
2713
  return e.sort((i, o) => (i.content.order ?? 0) - (o.content.order ?? 0));
2696
2714
  }
2697
2715
  }
2698
- const Ui = "@layer tbw-base{tbw-grid{.tbw-expanding{animation:tbw-expand var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}.tbw-collapsing{animation:tbw-collapse var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}&[data-animation-mode=off]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms;.data-grid-row[data-animating]{animation:none}}}tbw-grid .data-grid-row[data-animating=change]{animation:tbw-row-change var(--tbw-row-change-duration) ease-out}tbw-grid .data-grid-row[data-animating=insert]{animation:tbw-row-insert var(--tbw-row-insert-duration) ease-out;will-change:max-height,opacity}tbw-grid .data-grid-row[data-animating=remove]{animation:tbw-row-remove var(--tbw-row-remove-duration) ease-out forwards;will-change:max-height,opacity,transform;pointer-events:none}}@keyframes tbw-expand{0%{opacity:0;max-height:0;transform:translateY(-8px)}to{opacity:1;max-height:500px;transform:translateY(0)}}@keyframes tbw-collapse{0%{opacity:1;max-height:500px;transform:translateY(0)}to{opacity:0;max-height:0;transform:translateY(-8px)}}@keyframes tbw-row-change{0%{background-color:transparent}20%{background-color:var(--tbw-row-change-color)}to{background-color:transparent}}@keyframes tbw-row-insert{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:var(--tbw-row-height, 28px);overflow:hidden}}@keyframes tbw-row-remove{0%{opacity:1;transform:translateY(0);max-height:var(--tbw-row-height, 28px)}to{opacity:0;max-height:0;transform:translateY(-8px)}}@keyframes tbw-spin{to{transform:rotate(360deg)}}@keyframes tbw-fade-in{0%{opacity:0}to{opacity:1}}", Vi = '@layer tbw-base{tbw-grid{color-scheme:inherit;position:relative;display:block;width:100%;height:100%;min-height:0;contain:content;font-family:var(--tbw-font-family);font-size:var(--tbw-font-size);font-feature-settings:"tnum","lnum";background:var(--tbw-color-bg);color:var(--tbw-color-fg);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);overflow:clip;outline:none;&,*{box-sizing:border-box}.tbw-grid-root{position:relative;display:flex;flex-direction:column;height:100%;&.has-shell{display:flex;flex-direction:column;height:100%}&:has(.selected){user-select:none}}.rows-body-wrapper{flex:1;min-height:0;display:flex;flex-direction:row;width:100%;min-width:fit-content}.rows-body{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:visible}.rows-container{display:flex;flex-direction:row;flex:1;min-height:0;overflow:visible}.rows-viewport{flex:1;min-width:0;position:relative;display:block;overflow:clip;.rows{position:absolute;top:0;left:0;min-width:100%;will-change:transform;z-index:var(--tbw-z-layer-rows, 1)}}.faux-vscroll{position:sticky;inset-inline-end:0;flex-shrink:0;width:auto;overflow-y:auto;overflow-x:hidden;z-index:var(--tbw-z-layer-header, 30)}.faux-vscroll-spacer{width:1px}&[data-has-focus]{.cell-focus,.row-focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}}.sticky-left,.sticky-right{position:sticky;z-index:25}.sticky-left{box-shadow:1px 0 0 var(--tbw-color-border)}.sticky-right{box-shadow:-1px 0 0 var(--tbw-color-border)}}}', Bi = '@layer tbw-base{tbw-grid{.header{display:block;flex-shrink:0;z-index:var(--tbw-z-layer-header, 30);background:var(--tbw-color-header-bg);overflow:visible}.header-group-row{display:grid;grid-template-columns:var(--tbw-column-template);background:var(--tbw-color-header-bg);z-index:var(--tbw-z-layer-header, 30)}.header-group-cell{display:flex;align-items:center;justify-content:flex-start;padding:var(--tbw-cell-padding-header, 2px 8px);color:var(--tbw-color-header-group-fg, var(--tbw-color-header-fg));font-weight:var(--tbw-font-weight-header-group, var(--tbw-font-weight-header));justify-content:var(--tbw-align-header-group, var(--tbw-align-header, flex-start));&:not(:last-child){border-right:2px solid var(--tbw-color-border)}}.header-row{display:grid;grid-template-columns:var(--tbw-column-template);color:var(--tbw-color-header-fg);font-size:var(--tbw-font-size-header);min-height:var(--tbw-header-height);border-bottom:var(--tbw-border-header);z-index:var(--tbw-z-layer-header, 30);text-transform:var(--tbw-header-text-transform);letter-spacing:var(--tbw-header-letter-spacing);>.cell{display:flex;align-items:center;gap:4px;padding:var(--tbw-cell-padding-header, 2px 8px);background-color:var(--tbw-color-header-bg);font-weight:var(--tbw-font-weight-header);border-right:1px solid var(--tbw-color-border-cell);overflow:visible;min-width:0;>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:inherit}>span[part~=sort-indicator]{flex-shrink:0;opacity:.6;color:var(--tbw-sort-indicator-color);display:var(--tbw-sort-indicator-display, inline-flex);visibility:var(--tbw-sort-indicator-visibility, visible);transition:opacity .15s,visibility 0s,display 0s allow-discrete;transition-behavior:allow-discrete}&:hover>span[part~=sort-indicator]{display:inline-flex;visibility:visible}&[aria-sort=ascending]>span[part~=sort-indicator],&[aria-sort=descending]>span[part~=sort-indicator]{display:inline-flex;visibility:visible;opacity:1;color:var(--tbw-sort-indicator-active-color)}&:last-child{border-right:0;.resize-handle{right:0;width:calc(var(--tbw-resize-handle-width) / 2)}}&.grouped.group-end:not(:last-child){border-right:2px solid var(--tbw-color-border)}&.resizable{position:relative}&.sticky-left,&.sticky-right{background:var(--tbw-color-header-bg);z-index:35}}}.sortable{cursor:pointer;user-select:none}.resize-handle{position:absolute;top:0;right:calc(var(--tbw-resize-handle-width) / -2);width:var(--tbw-resize-handle-width);height:100%;cursor:e-resize;user-select:none;touch-action:none;z-index:20;background:var(--tbw-resize-handle-color);transition:background .12s ease;border-radius:var(--tbw-resize-handle-border-radius);&:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);width:var(--tbw-resize-indicator-width, 2px);height:0;background:var(--tbw-resize-indicator-color, var(--tbw-color-accent));opacity:0;pointer-events:none;transition:opacity .12s ease,height 0s .12s;z-index:1000}&:hover{background:var(--tbw-resize-handle-color-hover);&:after{height:100vh;opacity:var(--tbw-resize-indicator-opacity, .6);transition:opacity .12s ease,height 0s}}}}}', Gi = '@layer tbw-base{.tbw-loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:1000;pointer-events:all;animation:tbw-fade-in .15s ease-out}.tbw-spinner{--tbw-spinner-size: 48px;--tbw-spinner-border-width: 3px;--tbw-spinner-color: var(--tbw-color-accent);--tbw-spinner-track-color: var(--tbw-color-border);width:var(--tbw-spinner-size);height:var(--tbw-spinner-size);border:var(--tbw-spinner-border-width) solid var(--tbw-spinner-track-color);border-top-color:var(--tbw-spinner-color);border-radius:50%;animation:tbw-spin .8s linear infinite}.tbw-spinner--large{--tbw-spinner-size: min(48px, calc(100% - 16px) )}.tbw-spinner--small{--tbw-spinner-size: calc(var(--tbw-row-height, 28px) * .6);--tbw-spinner-border-width: 2px}.data-grid-row.tbw-row-loading{position:relative;pointer-events:none;&:before{content:"";position:absolute;inset:0;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:10;animation:tbw-fade-in .15s ease-out}&:after{--_spinner-size: calc(var(--tbw-row-height, 28px) * .6);content:"";position:absolute;left:var(--tbw-spacing-md);top:0;bottom:0;margin:auto 0;width:var(--_spinner-size);height:var(--_spinner-size);border:2px solid var(--tbw-spinner-track-color, var(--tbw-color-border));border-top-color:var(--tbw-spinner-color, var(--tbw-color-accent));border-radius:50%;animation:tbw-spin .8s linear infinite;z-index:11}}.cell.tbw-cell-loading{position:relative;pointer-events:none;&:before{content:"";position:absolute;inset:0;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:10;animation:tbw-fade-in .15s ease-out}&:after{--_spinner-size: calc(var(--tbw-row-height, 28px) * .5);content:"";position:absolute;left:var(--tbw-spacing-sm);top:0;bottom:0;margin:auto 0;width:var(--_spinner-size);height:var(--_spinner-size);border:2px solid var(--tbw-spinner-track-color, var(--tbw-color-border));border-top-color:var(--tbw-spinner-color, var(--tbw-color-accent));border-radius:50%;animation:tbw-spin .8s linear infinite;z-index:11}}}', Xi = "@layer tbw-base{@media(forced-colors:active){tbw-grid{--tbw-color-border: CanvasText;--tbw-color-border-strong: CanvasText;--tbw-color-border-cell: CanvasText;--tbw-color-border-header: CanvasText;--tbw-color-fg: CanvasText;--tbw-color-bg: Canvas;--tbw-color-panel-bg: Canvas;--tbw-color-header-bg: Canvas;--tbw-color-header-fg: CanvasText;--tbw-color-accent: Highlight;--tbw-color-accent-fg: HighlightText;--tbw-color-selection: Highlight;--tbw-color-row-hover: Highlight;--tbw-focus-outline: 2px solid Highlight;--tbw-range-border-color: Highlight;.cell:focus,.cell.active-cell{outline:2px solid Highlight!important;outline-offset:-2px}.data-grid-row[aria-selected=true]{background:Highlight!important;color:HighlightText!important}}}@media(prefers-reduced-motion:reduce){tbw-grid[data-animation-mode=reduced-motion]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms;.data-grid-row[data-animating]{animation:none}}}}", Yi = "@layer tbw-base{tbw-grid{.data-grid-row{display:grid;grid-template-columns:var(--tbw-column-template);contain:layout style;&:nth-child(2n){background:var(--tbw-color-row-alt)}&:hover{background:var(--tbw-color-row-hover)}>.cell{display:block;padding:var(--tbw-cell-padding, 2px 8px);border-bottom:var(--tbw-row-divider);min-height:var(--tbw-row-height);align-content:center;border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;min-width:0;white-space:var(--tbw-cell-white-space, nowrap);text-overflow:ellipsis;>*{overflow:hidden;text-overflow:ellipsis;white-space:inherit;min-width:0}&:last-child{border-right:0}&[data-type=boolean]{text-align:center;input[type=checkbox]{margin:0;width:var(--tbw-checkbox-size);height:var(--tbw-checkbox-size);vertical-align:middle}}&.selected:focus-visible,&:focus-visible:not(.cell-focus){outline:none}&.sticky-left,&.sticky-right{background:var(--tbw-color-panel-bg)}}}.selecting .data-grid-row>.cell{user-select:none}}}", ji = "@layer tbw-base{tbw-grid{.tbw-shell-header{display:flex;align-items:center;gap:8px;min-height:var(--tbw-shell-header-height);padding:0 8px;background:var(--tbw-shell-header-bg);border-bottom:1px solid var(--tbw-shell-header-border);flex-shrink:0}.tbw-shell-title{font-size:var(--tbw-shell-title-font-size);font-weight:var(--tbw-shell-title-font-weight);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tbw-shell-content{flex:1;display:flex;align-items:center;gap:12px;min-width:0;overflow:hidden}.tbw-shell-toolbar{display:flex;align-items:center;gap:var(--tbw-toolbar-button-gap);flex-shrink:0}.tbw-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--tbw-toolbar-button-size);height:var(--tbw-toolbar-button-size);padding:0;border:1px solid transparent;border-radius:var(--tbw-border-radius);background:transparent;color:var(--tbw-color-fg);cursor:pointer;font-size:16px;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease),border-color var(--tbw-transition-duration) var(--tbw-transition-ease);&:hover{background:var(--tbw-color-row-hover)}&:focus-visible{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}&.active{background:var(--tbw-focus-background);border-color:var(--tbw-color-accent)}&:disabled{opacity:.5;cursor:not-allowed}}.tbw-toolbar-separator{width:1px;height:20px;background:var(--tbw-color-border);margin:0 4px}.tbw-shell-body{position:relative;display:flex;flex:1;min-height:0;overflow:visible}.tbw-grid-content{flex:1;min-width:0;min-height:0;display:flex;flex-direction:row;overflow:hidden}.tbw-scroll-area{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow-x:auto;overflow-y:hidden;overflow-anchor:none}}}", Ki = "@layer tbw-base{tbw-grid{.tbw-tool-panel{position:absolute;top:0;bottom:0;right:0;width:0;overflow:hidden;background:var(--tbw-tool-panel-bg);border-left:1px solid var(--tbw-tool-panel-border);transition:width var(--tbw-tool-panel-transition);display:flex;flex-direction:column;z-index:30;box-shadow:-2px 0 8px var(--tbw-color-shadow);&[data-position=left]{right:auto;left:0;border-left:none;border-right:1px solid var(--tbw-tool-panel-border);box-shadow:2px 0 8px var(--tbw-color-shadow)}&.open{width:var(--tbw-tool-panel-width)}}.tbw-tool-panel-resize{position:absolute;top:0;bottom:0;width:6px;cursor:col-resize;background:transparent;z-index:10;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease);&[data-handle-position=left]{left:0}&[data-handle-position=right]{right:0}&:hover,&.resizing{background:var(--tbw-color-accent)}}.tbw-tool-panel-header{display:flex;align-items:center;justify-content:space-between;min-height:var(--tbw-tool-panel-header-height);padding:0 12px;border-bottom:1px solid var(--tbw-tool-panel-border);flex-shrink:0}.tbw-tool-panel-title{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tbw-tool-panel-close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--tbw-border-radius);background:transparent;color:var(--tbw-color-fg-muted);cursor:pointer;font-size:14px;&:hover{background:var(--tbw-color-row-hover);color:var(--tbw-color-fg)}}.tbw-tool-panel-content{flex:1;overflow:auto}.tbw-accordion{display:flex;flex-direction:column;gap:0}.tbw-accordion-section{border-bottom:1px solid var(--tbw-tool-panel-border);&:last-child{border-bottom:none}&.single .tbw-accordion-header{cursor:default;&:hover{background:transparent}}&.expanded{.tbw-accordion-chevron{transform:rotate(90deg)}.tbw-accordion-content{display:block}}}.tbw-accordion-header{display:flex;align-items:center;gap:8px;width:100%;padding:10px 12px;border:none;background:transparent;color:var(--tbw-color-fg);font-size:13px;font-weight:600;text-align:start;cursor:pointer;user-select:none;&:hover{background:var(--tbw-color-row-hover)}}.tbw-accordion-chevron{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:10px;color:var(--tbw-color-fg-muted);transition:transform .15s ease;flex-shrink:0}.tbw-accordion-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:14px;flex-shrink:0}.tbw-accordion-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tbw-accordion-content{display:none}}}", Qi = "@layer tbw-base{tbw-grid{--tbw-base-icon-size: 1em;--tbw-base-radius: .25em;--tbw-font-size: 1em;--tbw-font-size-sm: .9285em;--tbw-font-size-xs: .7857em;--tbw-font-size-2xs: .7142em;--tbw-spacing-xs: .25em;--tbw-spacing-sm: .375em;--tbw-spacing-md: .5em;--tbw-spacing-lg: .75em;--tbw-spacing-xl: 1em;--tbw-icon-size: var(--tbw-base-icon-size);--tbw-icon-size-sm: .875em;--tbw-checkbox-size: var(--tbw-base-icon-size);--tbw-toggle-size: 1.25em;--tbw-border-radius: var(--tbw-base-radius);--tbw-color-bg: transparent;--tbw-color-panel-bg: light-dark(#eeeeee, #222222);--tbw-color-fg: light-dark(#222222, #eeeeee);--tbw-color-fg-muted: light-dark(#555555, #aaaaaa);--tbw-color-accent: light-dark(#3b82f6, #3b82f6);--tbw-color-accent-fg: light-dark(#ffffff, #000000);--tbw-color-success: light-dark(hsl(122, 39%, 40%), hsl(122, 39%, 49%));--tbw-color-warning: light-dark(hsl(38, 92%, 50%), hsl(38, 92%, 50%));--tbw-color-error: light-dark(hsl(0, 65%, 51%), hsl(0, 65%, 55%));--tbw-color-danger: var(--tbw-color-error);--tbw-color-selection: light-dark(#fff7d6, #333333);--tbw-color-row-alt: var(--tbw-color-bg);--tbw-color-row-hover: light-dark(#f0f6ff, #1c1c1c);--tbw-color-header-bg: color-mix(in hsl, var(--tbw-color-panel-bg) 85%, var(--tbw-color-fg));--tbw-color-header-fg: color-mix(in hsl, var(--tbw-color-fg) 75%, var(--tbw-color-panel-bg));--tbw-color-border: light-dark(#d0d0d4, #454545);--tbw-color-border-strong: light-dark(#777777, #666666);--tbw-color-border-cell: var(--tbw-color-border);--tbw-color-border-header: var(--tbw-color-border);--tbw-color-shadow: light-dark(rgba(0, 0, 0, .1), rgba(0, 0, 0, .3));--tbw-font-family: inherit;--tbw-font-size-header: var(--tbw-font-size);--tbw-font-weight-header: bold;--tbw-cell-padding-header: var(--tbw-spacing-xs) var(--tbw-spacing-md);--tbw-cell-padding-v: var(--tbw-spacing-xs);--tbw-cell-padding-h: var(--tbw-spacing-md);--tbw-cell-padding: var(--tbw-cell-padding-v) var(--tbw-cell-padding-h);--tbw-cell-padding-input: var(--tbw-spacing-xs) var(--tbw-spacing-sm);--tbw-row-height: 1.75em;--tbw-header-height: 1.875em;--tbw-cell-white-space: nowrap;--tbw-border-width: 1px;--tbw-border-style: solid;--tbw-border-input: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-strong);--tbw-border-header: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-header);--tbw-row-divider: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-cell);--tbw-row-hover-outline: 0;--tbw-color-active-row-bg: var(--tbw-color-selection);--tbw-active-row-outline: 0;--tbw-focus-outline-width: 2px;--tbw-focus-outline: var(--tbw-focus-outline-width) var(--tbw-border-style) var(--tbw-color-accent);--tbw-focus-outline-offset: -2px;--tbw-focus-background: rgba(from var(--tbw-color-accent) r g b / 12%);--tbw-range-border-color: var(--tbw-color-accent);--tbw-range-selection-bg: rgba(from var(--tbw-range-border-color) r g b / 12%);--tbw-resize-handle-width: var(--tbw-spacing-sm);--tbw-resize-handle-color: transparent;--tbw-resize-handle-color-hover: var(--tbw-color-accent);--tbw-resize-handle-border-radius: 0;--tbw-resize-indicator-width: 2px;--tbw-resize-indicator-color: var(--tbw-color-accent);--tbw-resize-indicator-opacity: .6;--tbw-transition-duration: .12s;--tbw-transition-ease: ease;--tbw-animation-duration: .2s;--tbw-animation-easing: ease-out;--tbw-animation-enabled: 1;--tbw-row-change-duration: .5s;--tbw-row-insert-duration: .3s;--tbw-row-remove-duration: .2s;--tbw-row-change-color: rgba(from var(--tbw-color-accent) r g b / 25%);--tbw-sort-indicator-color: var(--tbw-color-fg-muted);--tbw-sort-indicator-active-color: var(--tbw-color-accent);--tbw-sort-indicator-display: inline-flex;--tbw-sort-indicator-visibility: visible;--tbw-header-text-transform: none;--tbw-header-letter-spacing: normal;--tbw-color-header-separator: var(--tbw-color-border-cell);--tbw-density-scale: 1;--tbw-shell-header-height: 2.75em;--tbw-shell-header-bg: var(--tbw-color-panel-bg);--tbw-shell-header-border: var(--tbw-color-border);--tbw-shell-title-font-size: var(--tbw-font-size);--tbw-shell-title-font-weight: 600;--tbw-tool-panel-width: 17.5em;--tbw-tool-panel-bg: var(--tbw-color-panel-bg);--tbw-tool-panel-border: var(--tbw-color-border);--tbw-tool-panel-header-height: 2.5em;--tbw-tool-panel-transition: var(--tbw-animation-duration) var(--tbw-animation-easing);--tbw-toolbar-button-size: 2em;--tbw-toolbar-button-gap: var(--tbw-spacing-xs);--tbw-panel-padding: var(--tbw-spacing-lg);--tbw-panel-gap: var(--tbw-spacing-md);--tbw-menu-item-padding: var(--tbw-spacing-sm) var(--tbw-spacing-lg);--tbw-menu-item-gap: var(--tbw-spacing-md);--tbw-menu-min-width: 10rem;--tbw-button-padding: var(--tbw-spacing-sm) var(--tbw-spacing-lg);--tbw-button-padding-sm: var(--tbw-spacing-xs) var(--tbw-spacing-md);--tbw-input-height: var(--tbw-row-height);--tbw-input-padding: 0 var(--tbw-spacing-md);--tbw-detail-padding: var(--tbw-spacing-xl);--tbw-detail-max-height: 31.25rem;--tbw-indicator-size: var(--tbw-spacing-sm)}}", Zi = `/**
2716
+ const Ui = "@layer tbw-base{tbw-grid{.tbw-expanding{animation:tbw-expand var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}.tbw-collapsing{animation:tbw-collapse var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}&[data-animation-mode=off]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms;.data-grid-row[data-animating]{animation:none}}}tbw-grid .data-grid-row[data-animating=change]{animation:tbw-row-change var(--tbw-row-change-duration) ease-out}tbw-grid .data-grid-row[data-animating=insert]{animation:tbw-row-insert var(--tbw-row-insert-duration) ease-out;will-change:max-height,opacity}tbw-grid .data-grid-row[data-animating=remove]{animation:tbw-row-remove var(--tbw-row-remove-duration) ease-out forwards;will-change:max-height,opacity,transform;pointer-events:none}}@keyframes tbw-expand{0%{opacity:0;max-height:0;transform:translateY(-8px)}to{opacity:1;max-height:500px;transform:translateY(0)}}@keyframes tbw-collapse{0%{opacity:1;max-height:500px;transform:translateY(0)}to{opacity:0;max-height:0;transform:translateY(-8px)}}@keyframes tbw-row-change{0%{background-color:transparent}20%{background-color:var(--tbw-row-change-color)}to{background-color:transparent}}@keyframes tbw-row-insert{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:var(--tbw-row-height, 28px);overflow:hidden}}@keyframes tbw-row-remove{0%{opacity:1;transform:translateY(0);max-height:var(--tbw-row-height, 28px)}to{opacity:0;max-height:0;transform:translateY(-8px)}}@keyframes tbw-spin{to{transform:rotate(360deg)}}@keyframes tbw-fade-in{0%{opacity:0}to{opacity:1}}", Vi = '@layer tbw-base{tbw-grid{color-scheme:inherit;position:relative;display:block;width:100%;height:100%;min-height:0;contain:content;font-family:var(--tbw-font-family);font-size:var(--tbw-font-size);font-feature-settings:"tnum","lnum";background:var(--tbw-color-bg);color:var(--tbw-color-fg);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);overflow:clip;outline:none;&,*{box-sizing:border-box}.tbw-grid-root{position:relative;display:flex;flex-direction:column;height:100%;&.has-shell{display:flex;flex-direction:column;height:100%}&:has(.selected){user-select:none}}.rows-body-wrapper{flex:1;min-height:0;display:flex;flex-direction:row;width:100%;min-width:fit-content}.rows-body{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:visible}.rows-container{display:flex;flex-direction:row;flex:1;min-height:0;overflow:visible}.rows-viewport{flex:1;min-width:0;position:relative;display:block;overflow:clip;.rows{position:absolute;top:0;left:0;min-width:100%;will-change:transform;z-index:var(--tbw-z-layer-rows, 1)}}.faux-vscroll{position:sticky;inset-inline-end:0;flex-shrink:0;width:auto;overflow-y:auto;overflow-x:hidden;z-index:var(--tbw-z-layer-header, 30)}.faux-vscroll-spacer{width:1px}&[data-has-focus]{.cell-focus,.row-focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}}.sticky-left,.sticky-right{position:sticky;z-index:25}.sticky-left{box-shadow:1px 0 0 var(--tbw-color-border)}.sticky-right{box-shadow:-1px 0 0 var(--tbw-color-border)}}}', Bi = '@layer tbw-base{tbw-grid{.header{display:block;flex-shrink:0;z-index:var(--tbw-z-layer-header, 30);background:var(--tbw-color-header-bg);overflow:visible}.header-group-row{display:grid;grid-template-columns:var(--tbw-column-template);background:var(--tbw-color-header-bg);z-index:var(--tbw-z-layer-header, 30)}.header-group-cell{display:flex;align-items:center;justify-content:flex-start;padding:var(--tbw-cell-padding-header, 2px 8px);color:var(--tbw-color-header-group-fg, var(--tbw-color-header-fg));font-weight:var(--tbw-font-weight-header-group, var(--tbw-font-weight-header));justify-content:var(--tbw-align-header-group, var(--tbw-align-header, flex-start));&:not(:last-child){border-right:2px solid var(--tbw-color-border)}}.header-row{display:grid;grid-template-columns:var(--tbw-column-template);color:var(--tbw-color-header-fg);font-size:var(--tbw-font-size-header);min-height:var(--tbw-header-height);border-bottom:var(--tbw-border-header);z-index:var(--tbw-z-layer-header, 30);text-transform:var(--tbw-header-text-transform);letter-spacing:var(--tbw-header-letter-spacing);>.cell{display:flex;align-items:center;gap:4px;padding:var(--tbw-cell-padding-header, 2px 8px);background-color:var(--tbw-color-header-bg);font-weight:var(--tbw-font-weight-header);border-right:1px solid var(--tbw-color-border-cell);overflow:visible;min-width:0;>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:inherit}>span[part~=sort-indicator]{flex-shrink:0;opacity:.6;color:var(--tbw-sort-indicator-color);display:var(--tbw-sort-indicator-display, inline-flex);visibility:var(--tbw-sort-indicator-visibility, visible);transition:opacity .15s,visibility 0s,display 0s allow-discrete;transition-behavior:allow-discrete}&:hover>span[part~=sort-indicator]{display:inline-flex;visibility:visible}&[aria-sort=ascending]>span[part~=sort-indicator],&[aria-sort=descending]>span[part~=sort-indicator]{display:inline-flex;visibility:visible;opacity:1;color:var(--tbw-sort-indicator-active-color)}&:last-child{border-right:0;.resize-handle{right:0;width:calc(var(--tbw-resize-handle-width) / 2)}}&.grouped.group-end:not(:last-child){border-right:2px solid var(--tbw-color-border)}&.resizable{position:relative}&.sticky-left,&.sticky-right{background:var(--tbw-color-header-bg);z-index:35}}}.sortable{cursor:pointer;user-select:none}.resize-handle{position:absolute;top:0;right:calc(var(--tbw-resize-handle-width) / -2);width:var(--tbw-resize-handle-width);height:100%;cursor:e-resize;user-select:none;touch-action:none;z-index:20;background:var(--tbw-resize-handle-color);transition:background .12s ease;border-radius:var(--tbw-resize-handle-border-radius);&:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);width:var(--tbw-resize-indicator-width, 2px);height:0;background:var(--tbw-resize-indicator-color, var(--tbw-color-accent));opacity:0;pointer-events:none;transition:opacity .12s ease,height 0s .12s;z-index:1000}&:hover{background:var(--tbw-resize-handle-color-hover);&:after{height:100vh;opacity:var(--tbw-resize-indicator-opacity, .6);transition:opacity .12s ease,height 0s}}}}}', Gi = '@layer tbw-base{.tbw-loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:1000;pointer-events:all;animation:tbw-fade-in .15s ease-out}.tbw-spinner{--tbw-spinner-size: 48px;--tbw-spinner-border-width: 3px;--tbw-spinner-color: var(--tbw-color-accent);--tbw-spinner-track-color: var(--tbw-color-border);width:var(--tbw-spinner-size);height:var(--tbw-spinner-size);border:var(--tbw-spinner-border-width) solid var(--tbw-spinner-track-color);border-top-color:var(--tbw-spinner-color);border-radius:50%;animation:tbw-spin .8s linear infinite}.tbw-spinner--large{--tbw-spinner-size: min(48px, calc(100% - 16px) )}.tbw-spinner--small{--tbw-spinner-size: calc(var(--tbw-row-height, 28px) * .6);--tbw-spinner-border-width: 2px}.data-grid-row.tbw-row-loading{position:relative;pointer-events:none}.tbw-row-loading-overlay{position:absolute;inset:0;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:26;animation:tbw-fade-in .15s ease-out;pointer-events:none;display:flex;align-items:center}.tbw-row-loading-spinner{--_spinner-size: calc(var(--tbw-row-height, 28px) * .6);margin-left:var(--tbw-spacing-md);width:var(--_spinner-size);height:var(--_spinner-size);border:2px solid var(--tbw-spinner-track-color, var(--tbw-color-border));border-top-color:var(--tbw-spinner-color, var(--tbw-color-accent));border-radius:50%;animation:tbw-spin .8s linear infinite}.cell.tbw-cell-loading{position:relative;pointer-events:none;&:before{content:"";position:absolute;inset:0;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:26;animation:tbw-fade-in .15s ease-out}&:after{--_spinner-size: calc(var(--tbw-row-height, 28px) * .5);content:"";position:absolute;left:var(--tbw-spacing-sm);top:0;bottom:0;margin:auto 0;width:var(--_spinner-size);height:var(--_spinner-size);border:2px solid var(--tbw-spinner-track-color, var(--tbw-color-border));border-top-color:var(--tbw-spinner-color, var(--tbw-color-accent));border-radius:50%;animation:tbw-spin .8s linear infinite;z-index:27}}}', Xi = "@layer tbw-base{@media(forced-colors:active){tbw-grid{--tbw-color-border: CanvasText;--tbw-color-border-strong: CanvasText;--tbw-color-border-cell: CanvasText;--tbw-color-border-header: CanvasText;--tbw-color-fg: CanvasText;--tbw-color-bg: Canvas;--tbw-color-panel-bg: Canvas;--tbw-color-header-bg: Canvas;--tbw-color-header-fg: CanvasText;--tbw-color-accent: Highlight;--tbw-color-accent-fg: HighlightText;--tbw-color-selection: Highlight;--tbw-color-row-hover: Highlight;--tbw-focus-outline: 2px solid Highlight;--tbw-range-border-color: Highlight;.cell:focus,.cell.active-cell{outline:2px solid Highlight!important;outline-offset:-2px}.data-grid-row[aria-selected=true]{background:Highlight!important;color:HighlightText!important}}}@media(prefers-reduced-motion:reduce){tbw-grid[data-animation-mode=reduced-motion]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms;.data-grid-row[data-animating]{animation:none}}}}", Yi = "@layer tbw-base{tbw-grid{.data-grid-row{display:grid;grid-template-columns:var(--tbw-column-template);contain:layout style;&:nth-child(2n){background:var(--tbw-color-row-alt)}&:hover{background:var(--tbw-color-row-hover)}>.cell{display:block;padding:var(--tbw-cell-padding, 2px 8px);border-bottom:var(--tbw-row-divider);min-height:var(--tbw-row-height);align-content:center;border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;min-width:0;white-space:var(--tbw-cell-white-space, nowrap);text-overflow:ellipsis;>*{overflow:hidden;text-overflow:ellipsis;white-space:inherit;min-width:0}&:last-child{border-right:0}&[data-type=boolean]{text-align:center;input[type=checkbox]{margin:0;width:var(--tbw-checkbox-size);height:var(--tbw-checkbox-size);vertical-align:middle}}&.selected:focus-visible,&:focus-visible:not(.cell-focus){outline:none}&.sticky-left,&.sticky-right{background:var(--tbw-color-panel-bg)}}}.selecting .data-grid-row>.cell{user-select:none}}}", ji = "@layer tbw-base{tbw-grid{.tbw-shell-header{display:flex;align-items:center;gap:8px;min-height:var(--tbw-shell-header-height);padding:0 8px;background:var(--tbw-shell-header-bg);border-bottom:1px solid var(--tbw-shell-header-border);flex-shrink:0}.tbw-shell-title{font-size:var(--tbw-shell-title-font-size);font-weight:var(--tbw-shell-title-font-weight);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tbw-shell-content{flex:1;display:flex;align-items:center;gap:12px;min-width:0;overflow:hidden}.tbw-shell-toolbar{display:flex;align-items:center;gap:var(--tbw-toolbar-button-gap);flex-shrink:0}.tbw-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--tbw-toolbar-button-size);height:var(--tbw-toolbar-button-size);padding:0;border:1px solid transparent;border-radius:var(--tbw-border-radius);background:transparent;color:var(--tbw-color-fg);cursor:pointer;font-size:16px;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease),border-color var(--tbw-transition-duration) var(--tbw-transition-ease);&:hover{background:var(--tbw-color-row-hover)}&:focus-visible{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}&.active{background:var(--tbw-focus-background);border-color:var(--tbw-color-accent)}&:disabled{opacity:.5;cursor:not-allowed}}.tbw-toolbar-separator{width:1px;height:20px;background:var(--tbw-color-border);margin:0 4px}.tbw-shell-body{position:relative;display:flex;flex:1;min-height:0;overflow:visible}.tbw-grid-content{flex:1;min-width:0;min-height:0;display:flex;flex-direction:row;overflow:hidden}.tbw-scroll-area{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow-x:auto;overflow-y:hidden;overflow-anchor:none}}}", Ki = "@layer tbw-base{tbw-grid{.tbw-tool-panel{position:absolute;top:0;bottom:0;right:0;width:0;overflow:hidden;background:var(--tbw-tool-panel-bg);border-left:1px solid var(--tbw-tool-panel-border);transition:width var(--tbw-tool-panel-transition);display:flex;flex-direction:column;z-index:30;box-shadow:-2px 0 8px var(--tbw-color-shadow);&[data-position=left]{right:auto;left:0;border-left:none;border-right:1px solid var(--tbw-tool-panel-border);box-shadow:2px 0 8px var(--tbw-color-shadow)}&.open{width:var(--tbw-tool-panel-width)}}.tbw-tool-panel-resize{position:absolute;top:0;bottom:0;width:6px;cursor:col-resize;background:transparent;z-index:10;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease);&[data-handle-position=left]{left:0}&[data-handle-position=right]{right:0}&:hover,&.resizing{background:var(--tbw-color-accent)}}.tbw-tool-panel-header{display:flex;align-items:center;justify-content:space-between;min-height:var(--tbw-tool-panel-header-height);padding:0 12px;border-bottom:1px solid var(--tbw-tool-panel-border);flex-shrink:0}.tbw-tool-panel-title{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tbw-tool-panel-close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--tbw-border-radius);background:transparent;color:var(--tbw-color-fg-muted);cursor:pointer;font-size:14px;&:hover{background:var(--tbw-color-row-hover);color:var(--tbw-color-fg)}}.tbw-tool-panel-content{flex:1;overflow:auto}.tbw-accordion{display:flex;flex-direction:column;gap:0}.tbw-accordion-section{border-bottom:1px solid var(--tbw-tool-panel-border);&:last-child{border-bottom:none}&.single .tbw-accordion-header{cursor:default;&:hover{background:transparent}}&.expanded{.tbw-accordion-chevron{transform:rotate(90deg)}.tbw-accordion-content{display:block}}}.tbw-accordion-header{display:flex;align-items:center;gap:8px;width:100%;padding:10px 12px;border:none;background:transparent;color:var(--tbw-color-fg);font-size:13px;font-weight:600;text-align:start;cursor:pointer;user-select:none;&:hover{background:var(--tbw-color-row-hover)}}.tbw-accordion-chevron{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:10px;color:var(--tbw-color-fg-muted);transition:transform .15s ease;flex-shrink:0}.tbw-accordion-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:14px;flex-shrink:0}.tbw-accordion-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tbw-accordion-content{display:none}}}", Qi = "@layer tbw-base{tbw-grid{--tbw-base-icon-size: 1em;--tbw-base-radius: .25em;--tbw-font-size: 1em;--tbw-font-size-sm: .9285em;--tbw-font-size-xs: .7857em;--tbw-font-size-2xs: .7142em;--tbw-spacing-xs: .25em;--tbw-spacing-sm: .375em;--tbw-spacing-md: .5em;--tbw-spacing-lg: .75em;--tbw-spacing-xl: 1em;--tbw-icon-size: var(--tbw-base-icon-size);--tbw-icon-size-sm: .875em;--tbw-checkbox-size: var(--tbw-base-icon-size);--tbw-toggle-size: 1.25em;--tbw-border-radius: var(--tbw-base-radius);--tbw-color-bg: transparent;--tbw-color-panel-bg: light-dark(#eeeeee, #222222);--tbw-color-fg: light-dark(#222222, #eeeeee);--tbw-color-fg-muted: light-dark(#555555, #aaaaaa);--tbw-color-accent: light-dark(#3b82f6, #3b82f6);--tbw-color-accent-fg: light-dark(#ffffff, #000000);--tbw-color-success: light-dark(hsl(122, 39%, 40%), hsl(122, 39%, 49%));--tbw-color-warning: light-dark(hsl(38, 92%, 50%), hsl(38, 92%, 50%));--tbw-color-error: light-dark(hsl(0, 65%, 51%), hsl(0, 65%, 55%));--tbw-color-danger: var(--tbw-color-error);--tbw-color-selection: light-dark(#fff7d6, #333333);--tbw-color-row-alt: var(--tbw-color-bg);--tbw-color-row-hover: light-dark(#f0f6ff, #1c1c1c);--tbw-color-header-bg: color-mix(in hsl, var(--tbw-color-panel-bg) 85%, var(--tbw-color-fg));--tbw-color-header-fg: color-mix(in hsl, var(--tbw-color-fg) 75%, var(--tbw-color-panel-bg));--tbw-color-border: light-dark(#d0d0d4, #454545);--tbw-color-border-strong: light-dark(#777777, #666666);--tbw-color-border-cell: var(--tbw-color-border);--tbw-color-border-header: var(--tbw-color-border);--tbw-color-shadow: light-dark(rgba(0, 0, 0, .1), rgba(0, 0, 0, .3));--tbw-font-family: inherit;--tbw-font-size-header: var(--tbw-font-size);--tbw-font-weight-header: bold;--tbw-cell-padding-header: var(--tbw-spacing-xs) var(--tbw-spacing-md);--tbw-cell-padding-v: var(--tbw-spacing-xs);--tbw-cell-padding-h: var(--tbw-spacing-md);--tbw-cell-padding: var(--tbw-cell-padding-v) var(--tbw-cell-padding-h);--tbw-cell-padding-input: var(--tbw-spacing-xs) var(--tbw-spacing-sm);--tbw-row-height: 1.75em;--tbw-header-height: 1.875em;--tbw-cell-white-space: nowrap;--tbw-border-width: 1px;--tbw-border-style: solid;--tbw-border-input: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-strong);--tbw-border-header: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-header);--tbw-row-divider: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-cell);--tbw-row-hover-outline: 0;--tbw-color-active-row-bg: var(--tbw-color-selection);--tbw-active-row-outline: 0;--tbw-focus-outline-width: 2px;--tbw-focus-outline: var(--tbw-focus-outline-width) var(--tbw-border-style) var(--tbw-color-accent);--tbw-focus-outline-offset: -2px;--tbw-focus-background: rgba(from var(--tbw-color-accent) r g b / 12%);--tbw-range-border-color: var(--tbw-color-accent);--tbw-range-selection-bg: rgba(from var(--tbw-range-border-color) r g b / 12%);--tbw-resize-handle-width: var(--tbw-spacing-sm);--tbw-resize-handle-color: transparent;--tbw-resize-handle-color-hover: var(--tbw-color-accent);--tbw-resize-handle-border-radius: 0;--tbw-resize-indicator-width: 2px;--tbw-resize-indicator-color: var(--tbw-color-accent);--tbw-resize-indicator-opacity: .6;--tbw-transition-duration: .12s;--tbw-transition-ease: ease;--tbw-animation-duration: .2s;--tbw-animation-easing: ease-out;--tbw-animation-enabled: 1;--tbw-row-change-duration: .5s;--tbw-row-insert-duration: .3s;--tbw-row-remove-duration: .2s;--tbw-row-change-color: rgba(from var(--tbw-color-accent) r g b / 25%);--tbw-sort-indicator-color: var(--tbw-color-fg-muted);--tbw-sort-indicator-active-color: var(--tbw-color-accent);--tbw-sort-indicator-display: inline-flex;--tbw-sort-indicator-visibility: visible;--tbw-header-text-transform: none;--tbw-header-letter-spacing: normal;--tbw-color-header-separator: var(--tbw-color-border-cell);--tbw-density-scale: 1;--tbw-shell-header-height: 2.75em;--tbw-shell-header-bg: var(--tbw-color-panel-bg);--tbw-shell-header-border: var(--tbw-color-border);--tbw-shell-title-font-size: var(--tbw-font-size);--tbw-shell-title-font-weight: 600;--tbw-tool-panel-width: 17.5em;--tbw-tool-panel-bg: var(--tbw-color-panel-bg);--tbw-tool-panel-border: var(--tbw-color-border);--tbw-tool-panel-header-height: 2.5em;--tbw-tool-panel-transition: var(--tbw-animation-duration) var(--tbw-animation-easing);--tbw-toolbar-button-size: 2em;--tbw-toolbar-button-gap: var(--tbw-spacing-xs);--tbw-panel-padding: var(--tbw-spacing-lg);--tbw-panel-gap: var(--tbw-spacing-md);--tbw-menu-item-padding: var(--tbw-spacing-sm) var(--tbw-spacing-lg);--tbw-menu-item-gap: var(--tbw-spacing-md);--tbw-menu-min-width: 10rem;--tbw-button-padding: var(--tbw-spacing-sm) var(--tbw-spacing-lg);--tbw-button-padding-sm: var(--tbw-spacing-xs) var(--tbw-spacing-md);--tbw-input-height: var(--tbw-row-height);--tbw-input-padding: 0 var(--tbw-spacing-md);--tbw-detail-padding: var(--tbw-spacing-xl);--tbw-detail-max-height: 31.25rem;--tbw-indicator-size: var(--tbw-spacing-sm)}}", Zi = `/**
2699
2717
  * tbw-grid Light DOM Styles
2700
2718
  *
2701
2719
  * This stylesheet uses CSS nesting to scope all styles to the tbw-grid element.
@@ -2726,7 +2744,7 @@ ${Xi}
2726
2744
  `;
2727
2745
  class k extends HTMLElement {
2728
2746
  static tagName = "tbw-grid";
2729
- static version = "1.14.0";
2747
+ static version = "1.15.0";
2730
2748
  static #l = 0;
2731
2749
  static adapters = [];
2732
2750
  static registerAdapter(e) {
@@ -2763,15 +2781,15 @@ class k extends HTMLElement {
2763
2781
  #C = 0;
2764
2782
  #r = null;
2765
2783
  #g = !1;
2766
- #T = !1;
2784
+ #x = !1;
2767
2785
  #m = 0;
2768
2786
  #z;
2769
- #k = yi();
2787
+ #N = yi();
2770
2788
  #b;
2771
2789
  #y;
2772
2790
  #p;
2773
- #E;
2774
- #Z = {
2791
+ #S;
2792
+ #J = {
2775
2793
  scrollTop: 0,
2776
2794
  scrollLeft: 0,
2777
2795
  scrollHeight: 0,
@@ -2781,19 +2799,19 @@ class k extends HTMLElement {
2781
2799
  };
2782
2800
  #e;
2783
2801
  #_;
2784
- #N = !1;
2802
+ #I = !1;
2785
2803
  #D;
2786
2804
  #V;
2787
2805
  #O;
2788
2806
  #t;
2789
2807
  #i = ai();
2790
2808
  #c;
2791
- #I;
2792
- #q = !1;
2793
- #x = /* @__PURE__ */ new Set();
2809
+ #q;
2810
+ #M = !1;
2811
+ #E = /* @__PURE__ */ new Set();
2794
2812
  #H = /* @__PURE__ */ new Map();
2795
2813
  #$;
2796
- #S = /* @__PURE__ */ new Map();
2814
+ #R = /* @__PURE__ */ new Map();
2797
2815
  _rows = [];
2798
2816
  #B = [];
2799
2817
  get _columns() {
@@ -2885,35 +2903,35 @@ class k extends HTMLElement {
2885
2903
  this.#t?.setFitMode(e), i !== e && this.#U("fitMode");
2886
2904
  }
2887
2905
  get loading() {
2888
- return this.#q;
2906
+ return this.#M;
2889
2907
  }
2890
2908
  set loading(e) {
2891
- const i = this.#q;
2892
- this.#q = e, e ? this.setAttribute("loading", "") : this.removeAttribute("loading"), i !== e && this.#Pe();
2909
+ const i = this.#M;
2910
+ this.#M = e, e ? this.setAttribute("loading", "") : this.removeAttribute("loading"), i !== e && this.#he();
2893
2911
  }
2894
2912
  setRowLoading(e, i) {
2895
- const o = this.#x.has(e);
2896
- i ? this.#x.add(e) : this.#x.delete(e), o !== i && this.#de(e, i);
2913
+ const o = this.#E.has(e);
2914
+ i ? this.#E.add(e) : this.#E.delete(e), o !== i && this.#j(e, i);
2897
2915
  }
2898
2916
  setCellLoading(e, i, o) {
2899
2917
  let n = this.#H.get(e);
2900
2918
  const r = n?.has(i) ?? !1;
2901
- o ? (n || (n = /* @__PURE__ */ new Set(), this.#H.set(e, n)), n.add(i)) : (n?.delete(i), n?.size === 0 && this.#H.delete(e)), r !== o && this.#he(e, i, o);
2919
+ o ? (n || (n = /* @__PURE__ */ new Set(), this.#H.set(e, n)), n.add(i)) : (n?.delete(i), n?.size === 0 && this.#H.delete(e)), r !== o && this.#ue(e, i, o);
2902
2920
  }
2903
2921
  isRowLoading(e) {
2904
- return this.#x.has(e);
2922
+ return this.#E.has(e);
2905
2923
  }
2906
2924
  isCellLoading(e, i) {
2907
2925
  return this.#H.get(e)?.has(i) ?? !1;
2908
2926
  }
2909
2927
  clearAllLoading() {
2910
2928
  this.loading = !1;
2911
- for (const e of this.#x)
2912
- this.#de(e, !1);
2913
- this.#x.clear();
2929
+ for (const e of this.#E)
2930
+ this.#j(e, !1);
2931
+ this.#E.clear();
2914
2932
  for (const [e, i] of this.#H)
2915
2933
  for (const o of i)
2916
- this.#he(e, o, !1);
2934
+ this.#ue(e, o, !1);
2917
2935
  this.#H.clear();
2918
2936
  }
2919
2937
  get effectiveConfig() {
@@ -2923,25 +2941,25 @@ class k extends HTMLElement {
2923
2941
  return this.#b || (this.#b = new AbortController()), this.#b.signal;
2924
2942
  }
2925
2943
  constructor() {
2926
- super(), this.#we(), this.#d = new Promise((e) => this.#h = e), this.#s = new Zt({
2944
+ super(), this.#be(), this.#d = new Promise((e) => this.#h = e), this.#s = new Zt({
2927
2945
  mergeConfig: () => {
2928
- this.#t.parseLightDomColumns(this), this.#t.merge(), this.#ee(), Pi(this.#o, this.#e?.getPlugins() ?? []), zi(this.#e?.getPlugins() ?? []), Oi(this.#e?.getPlugins() ?? []), this.#Le(), this.#B = [...this._columns];
2946
+ this.#t.parseLightDomColumns(this), this.#t.merge(), this.#te(), Pi(this.#o, this.#e?.getPlugins() ?? []), zi(this.#e?.getPlugins() ?? []), Oi(this.#e?.getPlugins() ?? []), this.#ze(), this.#B = [...this._columns];
2929
2947
  },
2930
- processColumns: () => this.#Te(),
2931
- processRows: () => this.#xe(),
2948
+ processColumns: () => this.#xe(),
2949
+ processRows: () => this.#Le(),
2932
2950
  renderHeader: () => ie(this),
2933
2951
  updateTemplate: () => U(this),
2934
2952
  renderVirtualWindow: () => this.refreshVirtualWindow(!0, !0),
2935
2953
  afterRender: () => {
2936
2954
  this.#e?.afterRender(), this._virtualization.enabled && this._virtualization.totalHeightEl && queueMicrotask(() => {
2937
2955
  if (!this._virtualization.totalHeightEl) return;
2938
- const i = this.#A(this._rows.length);
2956
+ const i = this.#T(this._rows.length);
2939
2957
  this._virtualization.totalHeightEl.style.height = `${i}px`;
2940
- }), this.#o.fitMode === "fixed" && !this.__didInitialAutoSize && (this.__didInitialAutoSize = !0, Se(this)), this._restoreFocusAfterRender && (this._restoreFocusAfterRender = !1, q(this)), this._virtualization.enabled && !this.#F && this.#ve(), this.#T && (this.#T = !1, requestAnimationFrame(() => {
2958
+ }), this.#o.fitMode === "fixed" && !this.__didInitialAutoSize && (this.__didInitialAutoSize = !0, Se(this)), this._restoreFocusAfterRender && (this._restoreFocusAfterRender = !1, q(this)), this._virtualization.enabled && !this.#F && this.#Ce(), this.#x && (this.#x = !1, requestAnimationFrame(() => {
2941
2959
  requestAnimationFrame(() => {
2942
- this.#me();
2960
+ this.#ve();
2943
2961
  });
2944
- }));
2962
+ })), this.#M && this.#he();
2945
2963
  },
2946
2964
  isConnected: () => this.isConnected && this.#f
2947
2965
  }), this.#s.setInitialReadyResolver(() => this.#h?.()), this.#c = gi(this.#i, {
@@ -2974,7 +2992,7 @@ class k extends HTMLElement {
2974
2992
  setRowHeight: (e) => {
2975
2993
  this._virtualization.rowHeight = e;
2976
2994
  },
2977
- applyAnimationConfig: (e) => this.#He(e),
2995
+ applyAnimationConfig: (e) => this.#Pe(e),
2978
2996
  getShellLightDomTitle: () => this.#i.lightDomTitle,
2979
2997
  getShellToolPanels: () => this.#i.toolPanels,
2980
2998
  getShellHeaderContents: () => this.#i.headerContents,
@@ -2983,7 +3001,7 @@ class k extends HTMLElement {
2983
3001
  getShellHasToolButtonsContainer: () => this.#i.hasToolButtonsContainer
2984
3002
  });
2985
3003
  }
2986
- async #we() {
3004
+ async #be() {
2987
3005
  await Ci(Zi);
2988
3006
  }
2989
3007
  getPlugin(e) {
@@ -3007,7 +3025,7 @@ class k extends HTMLElement {
3007
3025
  requestAfterRender() {
3008
3026
  this.#s.requestPhase(x.STYLE, "plugin:requestAfterRender");
3009
3027
  }
3010
- #J() {
3028
+ #ee() {
3011
3029
  this.#e = new oe(this);
3012
3030
  const e = this.#o?.plugins, i = Array.isArray(e) ? e : [];
3013
3031
  this.#e.attachAll(i);
@@ -3016,7 +3034,7 @@ class k extends HTMLElement {
3016
3034
  const e = this.#e?.getPluginStyles() ?? [];
3017
3035
  mi(e);
3018
3036
  }
3019
- #ee() {
3037
+ #te() {
3020
3038
  const e = this.#o?.plugins, i = Array.isArray(e) ? e : [];
3021
3039
  if (this.#_ === i)
3022
3040
  return;
@@ -3036,17 +3054,17 @@ class k extends HTMLElement {
3036
3054
  const r = this.#i.headerContentCleanups.get(n);
3037
3055
  r && (r(), this.#i.headerContentCleanups.delete(n)), this.#i.headerContents.delete(n);
3038
3056
  }
3039
- this.#J(), this.#W(), this.#_ = i, this.#ne(), this.#te();
3057
+ this.#ee(), this.#W(), this.#_ = i, this.#re(), this.#ie();
3040
3058
  const o = this.#g;
3041
3059
  if (this.#g = this.#e?.getAll().some((n) => n.onScroll) ?? !1, !o && this.#g) {
3042
3060
  const r = this.#n.querySelector(".tbw-grid-content") ?? this.#n.querySelector(".tbw-grid-root");
3043
3061
  this.#G(r);
3044
3062
  }
3045
3063
  }
3046
- #be() {
3064
+ #me() {
3047
3065
  this.#e?.detachAll();
3048
3066
  }
3049
- #te() {
3067
+ #ie() {
3050
3068
  if (!this.#e) return;
3051
3069
  const e = this.#e.getToolPanels();
3052
3070
  for (const { panel: o } of e)
@@ -3055,7 +3073,7 @@ class k extends HTMLElement {
3055
3073
  for (const { content: o } of i)
3056
3074
  this.#i.headerContents.has(o.id) || this.#i.headerContents.set(o.id, o);
3057
3075
  }
3058
- #ie() {
3076
+ #oe() {
3059
3077
  const e = k.getAdapters();
3060
3078
  if (e.length === 0 && !this.__frameworkAdapter) return;
3061
3079
  const i = this.__frameworkAdapter;
@@ -3072,17 +3090,17 @@ class k extends HTMLElement {
3072
3090
  };
3073
3091
  }
3074
3092
  connectedCallback() {
3075
- this.hasAttribute("tabindex") || (this.tabIndex = 0), this.hasAttribute("version") || this.setAttribute("version", k.version), this.id || (this.id = `tbw-grid-${++k.#l}`), this._rows = Array.isArray(this.#a) ? [...this.#a] : [], this.#b && (this.#b.abort(), this.#N = !1), this.#b = new AbortController(), this.#E && (ze(this.#E), this.#E = void 0), this.#M(), this.#t.parseLightDomColumns(this), this.#t.merge(), this.#J();
3093
+ this.hasAttribute("tabindex") || (this.tabIndex = 0), this.hasAttribute("version") || this.setAttribute("version", k.version), this.id || (this.id = `tbw-grid-${++k.#l}`), this._rows = Array.isArray(this.#a) ? [...this.#a] : [], this.#b && (this.#b.abort(), this.#I = !1), this.#b = new AbortController(), this.#S && (ze(this.#S), this.#S = void 0), this.#k(), this.#t.parseLightDomColumns(this), this.#t.merge(), this.#ee();
3076
3094
  const e = this.#o?.plugins;
3077
- this.#_ = Array.isArray(e) ? e : [], this.#te(), this.#u || (this.#Q(), this.#W(), this.#u = !0), this.#oe(), this.#E = Vt(
3095
+ this.#_ = Array.isArray(e) ? e : [], this.#ie(), this.#u || (this.#Z(), this.#W(), this.#u = !0), this.#ne(), this.#S = Vt(
3078
3096
  () => {
3079
- this.#Me();
3097
+ this.#ke();
3080
3098
  },
3081
3099
  { timeout: 100 }
3082
3100
  );
3083
3101
  }
3084
3102
  disconnectedCallback() {
3085
- this.#E && (ze(this.#E), this.#E = void 0), this.#m && (clearTimeout(this.#m), this.#m = 0), this.#be(), fi(this.#i), this.#c.setInitialized(!1), this.#I?.(), this.#I = void 0, rt(this.#k), this.#b && (this.#b.abort(), this.#b = void 0), this.#D?.abort(), this.#D = void 0, this.#N = !1, this._resizeController && this._resizeController.dispose(), this.#y && (this.#y.disconnect(), this.#y = void 0), this.#p && (this.#p.disconnect(), this.#p = void 0, this.#F = !1), X(this), this.#R.clear(), this.#_ = void 0;
3103
+ this.#S && (ze(this.#S), this.#S = void 0), this.#m && (clearTimeout(this.#m), this.#m = 0), this.#me(), fi(this.#i), this.#c.setInitialized(!1), this.#q?.(), this.#q = void 0, rt(this.#N), this.#b && (this.#b.abort(), this.#b = void 0), this.#D?.abort(), this.#D = void 0, this.#I = !1, this._resizeController && this._resizeController.dispose(), this.#y && (this.#y.disconnect(), this.#y = void 0), this.#p && (this.#p.disconnect(), this.#p = void 0, this.#F = !1), X(this), this.#A.clear(), this.#_ = void 0;
3086
3104
  for (const e of this._rowPool)
3087
3105
  e.remove();
3088
3106
  this._rowPool.length = 0, this.__rowsBodyEl = null, this.#f = !1;
@@ -3103,24 +3121,24 @@ class k extends HTMLElement {
3103
3121
  }
3104
3122
  else e === "fit-mode" && (this.fitMode = o);
3105
3123
  }
3106
- #oe() {
3124
+ #ne() {
3107
3125
  const i = this.#n.querySelector(".tbw-grid-content") ?? this.#n.querySelector(".tbw-grid-root");
3108
3126
  if (this._headerRowEl = i?.querySelector(".header-row"), this._virtualization.totalHeightEl = i?.querySelector(".faux-vscroll-spacer"), this._virtualization.viewportEl = i?.querySelector(".rows-viewport"), this._bodyEl = i?.querySelector(".rows"), this.__rowsBodyEl = i?.querySelector(".rows-body"), this.#c.isInitialized) {
3109
3127
  fe(this.#n, this.#i), ce(this.#n, this.#o?.shell, this.#i);
3110
3128
  const n = this.#o?.shell?.toolPanel?.defaultOpen;
3111
3129
  n && this.#i.toolPanels.has(n) && (this.openToolPanel(), this.#i.expandedSections.add(n));
3112
3130
  }
3113
- if (this.setAttribute("data-upgraded", ""), this.#f = !0, this._resizeController = De(this), this.#P(), this.#G(i), this.#N)
3131
+ if (this.setAttribute("data-upgraded", ""), this.#f = !0, this._resizeController = De(this), this.#P(), this.#G(i), this.#I)
3114
3132
  return;
3115
- this.#N = !0;
3133
+ this.#I = !0;
3116
3134
  const o = this.disconnectSignal;
3117
- qt(this, this, this.#n, o), this.#ne(), queueMicrotask(() => this.#Ce()), this.#s.requestPhase(x.FULL, "afterConnect");
3135
+ qt(this, this, this.#n, o), this.#re(), queueMicrotask(() => this.#ye()), this.#s.requestPhase(x.FULL, "afterConnect");
3118
3136
  }
3119
- #ne() {
3137
+ #re() {
3120
3138
  const e = this.#o.rowHeight, i = this.#e.hasRowHeightPlugin();
3121
- typeof e == "function" || i ? this._virtualization.variableHeights || (this._virtualization.variableHeights = !0, this._virtualization.rowHeight = typeof e == "number" && e > 0 ? e : this._virtualization.rowHeight || 28, this.#K(), typeof e != "function" && (this.#T = !0)) : !i && typeof e != "function" && this._virtualization.variableHeights ? (this._virtualization.variableHeights = !1, this._virtualization.positionCache = null) : typeof e == "number" && e > 0 ? (this._virtualization.rowHeight = e, this._virtualization.variableHeights = !1) : requestAnimationFrame(() => this.#re());
3139
+ typeof e == "function" || i ? this._virtualization.variableHeights || (this._virtualization.variableHeights = !0, this._virtualization.rowHeight = typeof e == "number" && e > 0 ? e : this._virtualization.rowHeight || 28, this.#Q(), typeof e != "function" && (this.#x = !0)) : !i && typeof e != "function" && this._virtualization.variableHeights ? (this._virtualization.variableHeights = !1, this._virtualization.positionCache = null) : typeof e == "number" && e > 0 ? (this._virtualization.rowHeight = e, this._virtualization.variableHeights = !1) : requestAnimationFrame(() => this.#se());
3122
3140
  }
3123
- #re() {
3141
+ #se() {
3124
3142
  if (this.#e.hasExtraHeight())
3125
3143
  return;
3126
3144
  const e = this._bodyEl?.querySelector(".data-grid-row");
@@ -3134,7 +3152,7 @@ class k extends HTMLElement {
3134
3152
  const n = e.getBoundingClientRect(), r = Math.max(n.height, o);
3135
3153
  r > 0 && Math.abs(r - this._virtualization.rowHeight) > 1 && (this._virtualization.rowHeight = r, this.#s.requestPhase(x.VIRTUALIZATION, "measureRowHeight"));
3136
3154
  }
3137
- #me() {
3155
+ #ve() {
3138
3156
  const e = this._bodyEl?.querySelector(".data-grid-row");
3139
3157
  if (!e) return;
3140
3158
  const i = e.querySelectorAll(".cell");
@@ -3144,8 +3162,8 @@ class k extends HTMLElement {
3144
3162
  l > o && (o = l);
3145
3163
  });
3146
3164
  const n = e.getBoundingClientRect(), r = Math.max(n.height, o);
3147
- if (r > 0 && (Math.abs(r - this._virtualization.rowHeight) > 1 && (this._virtualization.rowHeight = r), this.#K(), this._virtualization.totalHeightEl)) {
3148
- const l = this.#A(this._rows.length);
3165
+ if (r > 0 && (Math.abs(r - this._virtualization.rowHeight) > 1 && (this._virtualization.rowHeight = r), this.#Q(), this._virtualization.totalHeightEl)) {
3166
+ const l = this.#T(this._rows.length);
3149
3167
  this._virtualization.totalHeightEl.style.height = `${l}px`;
3150
3168
  }
3151
3169
  }
@@ -3173,7 +3191,7 @@ class k extends HTMLElement {
3173
3191
  n.style.transform = `translateY(${g}px)`;
3174
3192
  }
3175
3193
  this.#r = a, this.#C || (this.#C = requestAnimationFrame(() => {
3176
- this.#C = 0, this.#r !== null && (this.#ze(this.#r), this.#r = null);
3194
+ this.#C = 0, this.#r !== null && (this.#De(this.#r), this.#r = null);
3177
3195
  }));
3178
3196
  },
3179
3197
  { passive: !0, signal: i }
@@ -3182,7 +3200,7 @@ class k extends HTMLElement {
3182
3200
  this.#V = r, this._virtualization.scrollAreaEl = r, r && this.#g && r.addEventListener(
3183
3201
  "scroll",
3184
3202
  () => {
3185
- const a = this.#Z;
3203
+ const a = this.#J;
3186
3204
  a.scrollTop = o.scrollTop, a.scrollLeft = r.scrollLeft, a.scrollHeight = o.scrollHeight, a.scrollWidth = r.scrollWidth, a.clientHeight = o.clientHeight, a.clientWidth = r.clientWidth, this.#e?.onScroll(a);
3187
3205
  },
3188
3206
  { passive: !0, signal: i }
@@ -3203,13 +3221,13 @@ class k extends HTMLElement {
3203
3221
  { passive: !1, signal: i }
3204
3222
  ), Ti(
3205
3223
  s,
3206
- this.#k,
3224
+ this.#N,
3207
3225
  { fauxScrollbar: o, scrollArea: l },
3208
3226
  i
3209
3227
  ));
3210
3228
  }
3211
3229
  this._bodyEl && It(this, this._bodyEl, i), this.#y?.disconnect(), this._virtualization.viewportEl && (this.#y = new ResizeObserver(() => {
3212
- this.#ke(), this.#s.requestPhase(x.VIRTUALIZATION, "resize-observer");
3230
+ this.#Ne(), this.#s.requestPhase(x.VIRTUALIZATION, "resize-observer");
3213
3231
  }), this.#y.observe(this._virtualization.viewportEl)), this.#n.addEventListener(
3214
3232
  "focusin",
3215
3233
  () => {
@@ -3226,11 +3244,11 @@ class k extends HTMLElement {
3226
3244
  );
3227
3245
  }
3228
3246
  #F = !1;
3229
- #ve() {
3247
+ #Ce() {
3230
3248
  if (this.#F) return;
3231
3249
  const e = this._bodyEl?.querySelector(".data-grid-row");
3232
3250
  e && (this.#F = !0, this.#p?.disconnect(), this.#p = new ResizeObserver(() => {
3233
- this.#re();
3251
+ this.#se();
3234
3252
  }), this.#p.observe(e));
3235
3253
  }
3236
3254
  addEventListener(e, i, o) {
@@ -3242,7 +3260,7 @@ class k extends HTMLElement {
3242
3260
  #L(e, i) {
3243
3261
  this.dispatchEvent(new CustomEvent(e, { detail: i, bubbles: !0, composed: !0 }));
3244
3262
  }
3245
- #Ce() {
3263
+ #ye() {
3246
3264
  this._bodyEl?.querySelectorAll(".data-grid-row")?.forEach((i, o) => {
3247
3265
  const n = o === this._focusRow;
3248
3266
  i.setAttribute("aria-selected", String(n)), i.querySelectorAll(".cell").forEach((r, s) => {
@@ -3251,9 +3269,9 @@ class k extends HTMLElement {
3251
3269
  });
3252
3270
  }
3253
3271
  #U(e) {
3254
- this.#v[e] = !0, !this.#w && (this.#w = !0, queueMicrotask(() => this.#ye()));
3272
+ this.#v[e] = !0, !this.#w && (this.#w = !0, queueMicrotask(() => this.#_e()));
3255
3273
  }
3256
- #ye() {
3274
+ #_e() {
3257
3275
  if (!this.#w || !this.#f) {
3258
3276
  this.#w = !1;
3259
3277
  return;
@@ -3265,79 +3283,98 @@ class k extends HTMLElement {
3265
3283
  gridConfig: !1,
3266
3284
  fitMode: !1
3267
3285
  }, e.gridConfig) {
3268
- this.#Re(), e.rows && this.#se();
3286
+ this.#Ae(), e.rows && this.#le();
3269
3287
  return;
3270
3288
  }
3271
- e.columns && this.#Ee(), e.rows && this.#se(), e.fitMode && this.#Se();
3289
+ e.columns && this.#Se(), e.rows && this.#le(), e.fitMode && this.#Re();
3272
3290
  }
3273
- #se() {
3291
+ #le() {
3274
3292
  this._rows = Array.isArray(this.#a) ? [...this.#a] : [], this.#X(), this.#s.requestPhase(x.ROWS, "applyRowsUpdate");
3275
3293
  }
3276
3294
  #X() {
3277
- this.#S.clear();
3295
+ this.#R.clear();
3278
3296
  const e = this.#o.getRowId;
3279
3297
  this._rows.forEach((i, o) => {
3280
- const n = this.#le(i, e);
3281
- n !== void 0 && this.#S.set(n, { row: i, index: o });
3298
+ const n = this.#ae(i, e);
3299
+ n !== void 0 && this.#R.set(n, { row: i, index: o });
3282
3300
  });
3283
3301
  }
3284
- #le(e, i) {
3302
+ #ae(e, i) {
3285
3303
  if (i)
3286
3304
  return i(e);
3287
3305
  const o = e;
3288
3306
  if ("id" in o && o.id != null) return String(o.id);
3289
3307
  if ("_id" in o && o._id != null) return String(o._id);
3290
3308
  }
3291
- #_e(e, i) {
3292
- const o = this.#le(e, i);
3309
+ #Ee(e, i) {
3310
+ const o = this.#ae(e, i);
3293
3311
  if (o === void 0)
3294
3312
  throw new Error(
3295
3313
  '[tbw-grid] Cannot determine row ID. Configure getRowId in gridConfig or ensure rows have an "id" property.'
3296
3314
  );
3297
3315
  return o;
3298
3316
  }
3299
- #Ee() {
3317
+ #Se() {
3300
3318
  X(this), this.#t.merge(), this.#P();
3301
3319
  }
3302
- #Se() {
3320
+ #Re() {
3303
3321
  this.#t.merge(), this.#o.fitMode === "fixed" ? (this.__didInitialAutoSize = !1, Se(this)) : (this._columns.forEach((i) => {
3304
3322
  !i.__userResized && i.__autoSized && delete i.width;
3305
3323
  }), U(this));
3306
3324
  }
3307
- #Re() {
3325
+ #Ae() {
3308
3326
  Me(this, this.#i), ke(this, this.#i);
3309
3327
  const e = !!this.#n.querySelector(".has-shell"), i = !!this.#n.querySelector(".tbw-tool-panel"), o = this.#n.querySelectorAll(".tbw-accordion-section").length;
3310
- this.#t.parseLightDomColumns(this), this.#t.merge(), this.#ee(), Ne(this, this.#i, this.#ie()), this.#t.markSourcesChanged(), this.#t.merge();
3328
+ this.#t.parseLightDomColumns(this), this.#t.merge(), this.#te(), Ne(this, this.#i, this.#oe()), this.#t.markSourcesChanged(), this.#t.merge();
3311
3329
  const n = nt(this.#o?.shell), r = (this.#o?.shell?.toolPanels?.length ?? 0) > 0, s = this.#o?.shell?.toolPanels?.length ?? 0;
3312
3330
  if (e !== n || !i && r || i && s !== o) {
3313
- de(this.#i), this.#Q(), this.#W(), this.#oe(), this.#X();
3331
+ de(this.#i), this.#Z(), this.#W(), this.#ne(), this.#X();
3314
3332
  return;
3315
3333
  }
3316
- e && this.#Ae(), this.#X(), this.#s.requestPhase(x.COLUMNS, "applyGridConfigUpdate");
3334
+ e && this.#Te(), this.#X(), this.#s.requestPhase(x.COLUMNS, "applyGridConfigUpdate");
3317
3335
  }
3318
- #Ae() {
3336
+ #Te() {
3319
3337
  const e = this.#n.querySelector(".tbw-shell-header");
3320
3338
  if (!e) return;
3321
3339
  const i = this.#o.shell?.header?.title ?? this.#i.lightDomTitle;
3322
3340
  let o = e.querySelector(".tbw-shell-title");
3323
3341
  i ? (o || (o = document.createElement("h2"), o.className = "tbw-shell-title", o.setAttribute("part", "shell-title"), e.insertBefore(o, e.firstChild)), o.textContent = i) : o && o.remove();
3324
3342
  }
3325
- #Te() {
3343
+ #xe() {
3326
3344
  if (this.#e) {
3327
3345
  const e = this.#B.length > 0 ? this.#B : this._columns, i = e.filter((r) => !r.hidden), o = e.filter((r) => r.hidden), n = this.#e.processColumns([...i]);
3328
3346
  if (n !== i) {
3329
3347
  const r = new Set(n.map((l) => l.field));
3330
- !i.some((l) => r.has(l.field)) && n.length > 0 ? this._columns = [...n, ...o] : this._columns = [...n, ...o];
3348
+ !i.some((l) => r.has(l.field)) && n.length > 0 ? this._columns = [...n, ...o] : this._columns = this.#He(
3349
+ e,
3350
+ n,
3351
+ o
3352
+ );
3331
3353
  } else
3332
3354
  this._columns = [...e];
3333
3355
  }
3334
3356
  }
3335
- #xe() {
3357
+ #He(e, i, o) {
3358
+ if (o.length === 0) return i;
3359
+ const n = /* @__PURE__ */ new Map();
3360
+ for (const a of i)
3361
+ n.set(a.field, a);
3362
+ const r = new Set(e.map((a) => a.field)), s = [];
3363
+ for (const a of i)
3364
+ r.has(a.field) || s.push(a);
3365
+ const l = [];
3366
+ for (const a of e) {
3367
+ const c = n.get(a.field);
3368
+ c ? l.push(c) : a.hidden && l.push(a);
3369
+ }
3370
+ return l.push(...s), l;
3371
+ }
3372
+ #Le() {
3336
3373
  X(this);
3337
3374
  const e = Array.isArray(this.#a) ? [...this.#a] : [], i = this.#e?.processRows(e) ?? e;
3338
- this._rows = i, this._virtualization.variableHeights && this.#K();
3375
+ this._rows = i, this._virtualization.variableHeights && this.#Q();
3339
3376
  }
3340
- #He(e) {
3377
+ #Pe(e) {
3341
3378
  const i = {
3342
3379
  ...ht,
3343
3380
  ...e.animation
@@ -3346,27 +3383,29 @@ class k extends HTMLElement {
3346
3383
  o === !1 || o === "off" ? n = 0 : (o === !0 || o === "on") && (n = 1), this.style.setProperty("--tbw-animation-duration", `${i.duration}ms`), this.style.setProperty("--tbw-animation-easing", i.easing ?? "ease-out"), this.style.setProperty("--tbw-animation-enabled", String(n)), this.dataset.animationMode = typeof o == "boolean" ? o ? "on" : "off" : o;
3347
3384
  }
3348
3385
  #Y(e, i, o = this.__rowRenderEpoch) {
3349
- this.#z || (this.#z = (n, r, s) => this.#e?.renderRow(n, r, s) ?? !1), zt(this, e, i, o, this.#z);
3386
+ if (this.#z || (this.#z = (n, r, s) => this.#e?.renderRow(n, r, s) ?? !1), zt(this, e, i, o, this.#z), this.#E.size > 0)
3387
+ for (const n of this.#E)
3388
+ this.#j(n, !0);
3350
3389
  }
3351
- #ae = lt();
3352
- #ce(e, i) {
3353
- at(this.#ae, this.__rowsBodyEl, this._bodyEl, e, i);
3390
+ #ce = lt();
3391
+ #de(e, i) {
3392
+ at(this.#ce, this.__rowsBodyEl, this._bodyEl, e, i);
3354
3393
  }
3355
- #Le() {
3356
- dt(this.#ae, this.__rowsBodyEl, this.#o, this.#i);
3394
+ #ze() {
3395
+ dt(this.#ce, this.__rowsBodyEl, this.#o, this.#i);
3357
3396
  }
3358
- #Pe() {
3397
+ #he() {
3359
3398
  const e = this.querySelector(".tbw-grid-root");
3360
- e && (this.#q ? (this.#$ || (this.#$ = Xt(this.#o?.loadingRenderer)), Yt(e, this.#$)) : jt(this.#$));
3399
+ e && (this.#M ? (this.#$ || (this.#$ = Xt(this.#o?.loadingRenderer)), Yt(e, this.#$)) : jt(this.#$));
3361
3400
  }
3362
- #de(e, i) {
3363
- const o = this.#S.get(e);
3401
+ #j(e, i) {
3402
+ const o = this.#R.get(e);
3364
3403
  if (!o) return;
3365
3404
  const n = this.findRenderedRowElement?.(o.index);
3366
3405
  n && Kt(n, i);
3367
3406
  }
3368
- #he(e, i, o) {
3369
- const n = this.#S.get(e);
3407
+ #ue(e, i, o) {
3408
+ const n = this.#R.get(e);
3370
3409
  if (!n) return;
3371
3410
  const r = this.findRenderedRowElement?.(n.index);
3372
3411
  if (!r) return;
@@ -3386,16 +3425,16 @@ class k extends HTMLElement {
3386
3425
  this._bodyEl && (this._bodyEl.style.display = "", this._bodyEl.style.gridTemplateColumns = ""), this.#s.requestPhase(x.FULL, "setup");
3387
3426
  }
3388
3427
  }
3389
- #ze(e) {
3428
+ #De(e) {
3390
3429
  let i = 0, o = 0, n = 0, r = 0, s = 0;
3391
3430
  if (this.#g) {
3392
3431
  const a = this._virtualization.container, c = this.#V;
3393
3432
  i = c?.scrollLeft ?? 0, o = a?.scrollHeight ?? 0, n = c?.scrollWidth ?? 0, r = a?.clientHeight ?? 0, s = c?.clientWidth ?? 0;
3394
3433
  }
3395
3434
  if (this.refreshVirtualWindow(!1) && this.#e?.onScrollRender(), this._virtualization.variableHeights && (this.#m && clearTimeout(this.#m), this.#m = window.setTimeout(() => {
3396
- this.#m = 0, this.#ge(this._virtualization.start, this._virtualization.end);
3435
+ this.#m = 0, this.#pe(this._virtualization.start, this._virtualization.end);
3397
3436
  }, 100)), this.#g) {
3398
- const a = this.#Z;
3437
+ const a = this.#J;
3399
3438
  a.scrollTop = e, a.scrollLeft = i, a.scrollHeight = o, a.scrollWidth = n, a.clientHeight = r, a.clientWidth = s, this.#e?.onScroll(a);
3400
3439
  }
3401
3440
  }
@@ -3504,13 +3543,13 @@ class k extends HTMLElement {
3504
3543
  return Object.freeze({ ...this.#o || {} });
3505
3544
  }
3506
3545
  getRowId(e) {
3507
- return this.#_e(e, this.#o.getRowId);
3546
+ return this.#Ee(e, this.#o.getRowId);
3508
3547
  }
3509
3548
  getRow(e) {
3510
- return this.#S.get(e)?.row;
3549
+ return this.#R.get(e)?.row;
3511
3550
  }
3512
3551
  updateRow(e, i, o = "api") {
3513
- const n = this.#S.get(e);
3552
+ const n = this.#R.get(e);
3514
3553
  if (!n)
3515
3554
  throw new Error(
3516
3555
  `[tbw-grid] Row with ID "${e}" not found. Ensure the row exists and getRowId is correctly configured.`
@@ -3536,7 +3575,7 @@ class k extends HTMLElement {
3536
3575
  updateRows(e, i = "api") {
3537
3576
  let o = !1;
3538
3577
  for (const { id: n, changes: r } of e) {
3539
- const s = this.#S.get(n);
3578
+ const s = this.#R.get(n);
3540
3579
  if (!s)
3541
3580
  throw new Error(
3542
3581
  `[tbw-grid] Row with ID "${n}" not found. Ensure the row exists and getRowId is correctly configured.`
@@ -3595,12 +3634,12 @@ class k extends HTMLElement {
3595
3634
  return this.#t.collectState(e);
3596
3635
  }
3597
3636
  set columnState(e) {
3598
- e && (this.#O = e, this.#t.initialColumnState = e, this.#u && this.#De(e));
3637
+ e && (this.#O = e, this.#t.initialColumnState = e, this.#u && this.#Oe(e));
3599
3638
  }
3600
3639
  get columnState() {
3601
3640
  return this.getColumnState();
3602
3641
  }
3603
- #De(e) {
3642
+ #Oe(e) {
3604
3643
  const i = this.#e?.getAll() ?? [];
3605
3644
  this.#t.applyState(e, i), this.#P();
3606
3645
  }
@@ -3661,13 +3700,13 @@ class k extends HTMLElement {
3661
3700
  unregisterToolbarContent(e) {
3662
3701
  this.#c.unregisterToolbarContent(e);
3663
3702
  }
3664
- #j = !1;
3703
+ #K = !1;
3665
3704
  refreshShellHeader() {
3666
- this.#j || (this.#j = !0, queueMicrotask(() => {
3667
- this.#j = !1, this.isConnected && (this.#M(), this.#t.markSourcesChanged(), this.#t.merge(), de(this.#i), this.#Q(), this.#W(), this.#Oe());
3705
+ this.#K || (this.#K = !0, queueMicrotask(() => {
3706
+ this.#K = !1, this.isConnected && (this.#k(), this.#t.markSourcesChanged(), this.#t.merge(), de(this.#i), this.#Z(), this.#W(), this.#Me());
3668
3707
  }));
3669
3708
  }
3670
- #Oe() {
3709
+ #Me() {
3671
3710
  const i = this.#n.querySelector(".tbw-grid-content") ?? this.#n.querySelector(".tbw-grid-root");
3672
3711
  if (this._headerRowEl = i?.querySelector(".header-row"), this._virtualization.totalHeightEl = i?.querySelector(".faux-vscroll-spacer"), this._virtualization.viewportEl = i?.querySelector(".rows-viewport"), this._bodyEl = i?.querySelector(".rows"), this.__rowsBodyEl = i?.querySelector(".rows-body"), this.#c.isInitialized) {
3673
3712
  fe(this.#n, this.#i), ce(this.#n, this.#o?.shell, this.#i);
@@ -3676,27 +3715,27 @@ class k extends HTMLElement {
3676
3715
  }
3677
3716
  this._resizeController = De(this), this.#G(i), this.#s.requestPhase(x.COLUMNS, "shellRefresh");
3678
3717
  }
3679
- #R = /* @__PURE__ */ new Map();
3718
+ #A = /* @__PURE__ */ new Map();
3680
3719
  registerStyles(e, i) {
3681
- let o = this.#R.get(e);
3682
- o || (o = new CSSStyleSheet(), this.#R.set(e, o)), o.replaceSync(i), this.#ue();
3720
+ let o = this.#A.get(e);
3721
+ o || (o = new CSSStyleSheet(), this.#A.set(e, o)), o.replaceSync(i), this.#fe();
3683
3722
  }
3684
3723
  unregisterStyles(e) {
3685
- this.#R.delete(e) && this.#ue();
3724
+ this.#A.delete(e) && this.#fe();
3686
3725
  }
3687
3726
  getRegisteredStyles() {
3688
- return Array.from(this.#R.keys());
3727
+ return Array.from(this.#A.keys());
3689
3728
  }
3690
- #ue() {
3691
- const e = Array.from(this.#R.values()), i = document.adoptedStyleSheets.filter(
3692
- (o) => !Array.from(this.#R.values()).includes(o)
3729
+ #fe() {
3730
+ const e = Array.from(this.#A.values()), i = document.adoptedStyleSheets.filter(
3731
+ (o) => !Array.from(this.#A.values()).includes(o)
3693
3732
  );
3694
3733
  document.adoptedStyleSheets = [...i, ...e];
3695
3734
  }
3696
- #M() {
3697
- Me(this, this.#i), ke(this, this.#i), Ne(this, this.#i, this.#ie());
3735
+ #k() {
3736
+ Me(this, this.#i), ke(this, this.#i), Ne(this, this.#i, this.#oe());
3698
3737
  }
3699
- #fe() {
3738
+ #ge() {
3700
3739
  const e = this.#n.querySelector(".tbw-shell-header");
3701
3740
  if (!e) return;
3702
3741
  de(this.#i);
@@ -3707,14 +3746,14 @@ class k extends HTMLElement {
3707
3746
  ), o = document.createElement("div");
3708
3747
  o.innerHTML = i;
3709
3748
  const n = o.firstElementChild;
3710
- n && (e.replaceWith(n), this.#pe(), ce(this.#n, this.#o?.shell, this.#i));
3749
+ n && (e.replaceWith(n), this.#we(), ce(this.#n, this.#o?.shell, this.#i));
3711
3750
  }
3712
- #Me() {
3751
+ #ke() {
3713
3752
  const e = () => {
3714
3753
  const o = this.#i.lightDomTitle, n = this.#i.hasToolButtonsContainer;
3715
- this.#M();
3754
+ this.#k();
3716
3755
  const r = this.#i.lightDomTitle, s = this.#i.hasToolButtonsContainer;
3717
- (r && !o || s && !n) && (this.#t.markSourcesChanged(), this.#t.merge(), this.#fe());
3756
+ (r && !o || s && !n) && (this.#t.markSourcesChanged(), this.#t.merge(), this.#ge());
3718
3757
  }, i = () => {
3719
3758
  this.__lightDomColumnsCache = void 0, this.#P();
3720
3759
  };
@@ -3723,17 +3762,17 @@ class k extends HTMLElement {
3723
3762
  refreshColumns() {
3724
3763
  this.__lightDomColumnsCache = void 0, X(this), this.#t.parseLightDomColumns(this);
3725
3764
  const e = this.#i.lightDomTitle, i = this.#i.hasToolButtonsContainer;
3726
- this.#M();
3765
+ this.#k();
3727
3766
  const o = this.#i.lightDomTitle, n = this.#i.hasToolButtonsContainer;
3728
- (o && !e || n && !i) && (this.#t.markSourcesChanged(), this.#t.merge(), this.#fe()), this.#s.requestPhase(x.COLUMNS, "refreshColumns");
3767
+ (o && !e || n && !i) && (this.#t.markSourcesChanged(), this.#t.merge(), this.#ge()), this.#s.requestPhase(x.COLUMNS, "refreshColumns");
3729
3768
  }
3730
- #ke() {
3769
+ #Ne() {
3731
3770
  const e = this._virtualization.container, i = this._virtualization.viewportEl ?? e;
3732
3771
  i && (this._virtualization.cachedViewportHeight = i.clientHeight), e && (this._virtualization.cachedFauxHeight = e.clientHeight);
3733
3772
  const o = this._virtualization.scrollAreaEl;
3734
3773
  o && (this._virtualization.cachedScrollAreaHeight = o.clientHeight);
3735
3774
  }
3736
- #A(e, i = !1) {
3775
+ #T(e, i = !1) {
3737
3776
  const o = this._virtualization;
3738
3777
  let n, r, s;
3739
3778
  if (i) {
@@ -3745,7 +3784,7 @@ class k extends HTMLElement {
3745
3784
  let c, d = 0;
3746
3785
  return o.variableHeights && o.positionCache ? c = Ii(o.positionCache) : (c = e * o.rowHeight, d = this.#e?.getExtraHeight() ?? 0), c + l + d + a;
3747
3786
  }
3748
- #K() {
3787
+ #Q() {
3749
3788
  if (!this._virtualization.variableHeights) return;
3750
3789
  const e = this._rows, i = this._virtualization.rowHeight || 28, o = this.#o.rowHeight, n = this.#o.getRowId, r = n ? (l) => n(l) : void 0;
3751
3790
  this._virtualization.positionCache = Ni(
@@ -3777,11 +3816,11 @@ class k extends HTMLElement {
3777
3816
  r === void 0 && (r = this.#e?.getRowHeight?.(n, e)), r === void 0 && (r = this._virtualization.rowHeight);
3778
3817
  const s = o[e];
3779
3818
  if (!(!s || Math.abs(s.height - r) < 1) && (be(o, e, r), this._virtualization.totalHeightEl)) {
3780
- const l = this.#A(this._rows.length);
3819
+ const l = this.#T(this._rows.length);
3781
3820
  this._virtualization.totalHeightEl.style.height = `${l}px`;
3782
3821
  }
3783
3822
  }
3784
- #ge(e, i) {
3823
+ #pe(e, i) {
3785
3824
  if (!this._virtualization.variableHeights || !this._virtualization.positionCache || !this._bodyEl) return;
3786
3825
  const o = this._bodyEl.querySelectorAll(".data-grid-row"), n = this.#o.getRowId, r = Wi(
3787
3826
  {
@@ -3797,7 +3836,7 @@ class k extends HTMLElement {
3797
3836
  o
3798
3837
  );
3799
3838
  if (r.hasChanges && (this._virtualization.measuredCount = r.measuredCount, this._virtualization.averageHeight = r.averageHeight, this._virtualization.totalHeightEl)) {
3800
- const s = this.#A(this._rows.length);
3839
+ const s = this.#T(this._rows.length);
3801
3840
  this._virtualization.totalHeightEl.style.height = `${s}px`;
3802
3841
  }
3803
3842
  }
@@ -3807,7 +3846,7 @@ class k extends HTMLElement {
3807
3846
  if (!this._virtualization.enabled)
3808
3847
  return this.#Y(0, o), i || this.#e?.afterRender(), !0;
3809
3848
  if (this._rows.length <= this._virtualization.bypassThreshold)
3810
- return this._virtualization.start = 0, this._virtualization.end = o, e && (this._bodyEl.style.transform = "translateY(0px)"), this.#Y(0, o, e ? ++this.__rowRenderEpoch : this.__rowRenderEpoch), e && this._virtualization.totalHeightEl && (this._virtualization.totalHeightEl.style.height = `${this.#A(o, !0)}px`), this.#ce(o, this._visibleColumns.length), i || this.#e?.afterRender(), !0;
3849
+ return this._virtualization.start = 0, this._virtualization.end = o, e && (this._bodyEl.style.transform = "translateY(0px)"), this.#Y(0, o, e ? ++this.__rowRenderEpoch : this.__rowRenderEpoch), e && this._virtualization.totalHeightEl && (this._virtualization.totalHeightEl.style.height = `${this.#T(o, !0)}px`), this.#de(o, this._visibleColumns.length), i || this.#e?.afterRender(), !0;
3811
3850
  const n = this._virtualization.container ?? this, r = this._virtualization.viewportEl ?? n, s = e ? this._virtualization.cachedViewportHeight = r.clientHeight : this._virtualization.cachedViewportHeight || (this._virtualization.cachedViewportHeight = r.clientHeight), l = this._virtualization.rowHeight, a = n.scrollTop;
3812
3851
  let c;
3813
3852
  const d = this._virtualization.positionCache;
@@ -3851,7 +3890,7 @@ class k extends HTMLElement {
3851
3890
  if (h === 0 && s > 0)
3852
3891
  return this.#s.requestPhase(x.VIRTUALIZATION, "stale-refs-retry"), !1;
3853
3892
  if (e && this._virtualization.totalHeightEl) {
3854
- const m = this.#A(o);
3893
+ const m = this.#T(o);
3855
3894
  this._virtualization.totalHeightEl.style.height = `${m}px`;
3856
3895
  }
3857
3896
  let w;
@@ -3862,27 +3901,27 @@ class k extends HTMLElement {
3862
3901
  w = c * l + m;
3863
3902
  }
3864
3903
  const C = -(a - w);
3865
- return this._bodyEl.style.transform = `translateY(${C}px)`, this.#Y(c, u, e ? ++this.__rowRenderEpoch : this.__rowRenderEpoch), e && this._virtualization.variableHeights && this.#ge(c, u), this.#ce(o, this._visibleColumns.length), e && !i && (this.#e?.afterRender(), queueMicrotask(() => {
3904
+ return this._bodyEl.style.transform = `translateY(${C}px)`, this.#Y(c, u, e ? ++this.__rowRenderEpoch : this.__rowRenderEpoch), e && this._virtualization.variableHeights && this.#pe(c, u), this.#de(o, this._visibleColumns.length), e && !i && (this.#e?.afterRender(), queueMicrotask(() => {
3866
3905
  if (!this._virtualization.totalHeightEl) return;
3867
- const m = this.#A(o);
3906
+ const m = this.#T(o);
3868
3907
  this._virtualization.cachedFauxHeight === 0 && this._virtualization.cachedViewportHeight > 0 || (this._virtualization.totalHeightEl.style.height = `${m}px`);
3869
3908
  })), !0;
3870
3909
  }
3871
- #Q() {
3872
- this.#M(), this.#t.markSourcesChanged(), this.#t.merge();
3910
+ #Z() {
3911
+ this.#k(), this.#t.markSourcesChanged(), this.#t.merge();
3873
3912
  const e = this.#o?.shell;
3874
3913
  wi(
3875
3914
  this.#n,
3876
3915
  e,
3877
3916
  { isPanelOpen: this.#i.isPanelOpen, expandedSections: this.#i.expandedSections },
3878
3917
  this.#o?.icons
3879
- ) && (this.#pe(), this.#c.setInitialized(!0));
3918
+ ) && (this.#we(), this.#c.setInitialized(!0));
3880
3919
  }
3881
- #pe() {
3920
+ #we() {
3882
3921
  di(this.#n, this.#o?.shell, this.#i, {
3883
3922
  onPanelToggle: () => this.toggleToolPanel(),
3884
3923
  onSectionToggle: (e) => this.toggleToolPanelSection(e)
3885
- }), this.#I?.(), this.#I = hi(this.#n, this.#o?.shell, (e) => {
3924
+ }), this.#q?.(), this.#q = hi(this.#n, this.#o?.shell, (e) => {
3886
3925
  this.style.setProperty("--tbw-tool-panel-width", `${e}px`);
3887
3926
  });
3888
3927
  }
@@ -3896,7 +3935,7 @@ const oo = {
3896
3935
  class no {
3897
3936
  static dependencies;
3898
3937
  static manifest;
3899
- version = "1.14.0";
3938
+ version = "1.15.0";
3900
3939
  styles;
3901
3940
  cellRenderers;
3902
3941
  headerRenderers;