@toolbox-web/grid 2.5.0 → 2.7.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 (74) hide show
  1. package/README.md +15 -3
  2. package/all.d.ts +1 -0
  3. package/all.js +2 -2
  4. package/all.js.map +1 -1
  5. package/index.js +1 -1
  6. package/index.js.map +1 -1
  7. package/lib/core/internal/aria.d.ts +4 -0
  8. package/lib/core/types.d.ts +90 -31
  9. package/lib/features/sticky-rows.d.ts +9 -0
  10. package/lib/features/sticky-rows.js +2 -0
  11. package/lib/features/sticky-rows.js.map +1 -0
  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 +1 -1
  15. package/lib/plugins/context-menu/index.js.map +1 -1
  16. package/lib/plugins/editing/index.js.map +1 -1
  17. package/lib/plugins/export/index.js.map +1 -1
  18. package/lib/plugins/filtering/index.js.map +1 -1
  19. package/lib/plugins/grouping-columns/index.js.map +1 -1
  20. package/lib/plugins/grouping-rows/GroupingRowsPlugin.d.ts +15 -0
  21. package/lib/plugins/grouping-rows/index.js +2 -2
  22. package/lib/plugins/grouping-rows/index.js.map +1 -1
  23. package/lib/plugins/master-detail/index.js.map +1 -1
  24. package/lib/plugins/multi-sort/index.js.map +1 -1
  25. package/lib/plugins/pinned-columns/index.js.map +1 -1
  26. package/lib/plugins/pinned-rows/PinnedRowsPlugin.d.ts +28 -4
  27. package/lib/plugins/pinned-rows/index.d.ts +3 -2
  28. package/lib/plugins/pinned-rows/index.js +1 -1
  29. package/lib/plugins/pinned-rows/index.js.map +1 -1
  30. package/lib/plugins/pinned-rows/pinned-rows.d.ts +29 -1
  31. package/lib/plugins/pinned-rows/types.d.ts +96 -9
  32. package/lib/plugins/pivot/index.js.map +1 -1
  33. package/lib/plugins/print/index.js.map +1 -1
  34. package/lib/plugins/reorder-columns/index.js.map +1 -1
  35. package/lib/plugins/reorder-rows/index.js.map +1 -1
  36. package/lib/plugins/responsive/index.js +1 -1
  37. package/lib/plugins/responsive/index.js.map +1 -1
  38. package/lib/plugins/row-drag-drop/index.js.map +1 -1
  39. package/lib/plugins/row-drag-drop/types.d.ts +7 -0
  40. package/lib/plugins/selection/index.js.map +1 -1
  41. package/lib/plugins/server-side/index.js.map +1 -1
  42. package/lib/plugins/sticky-rows/StickyRowsPlugin.d.ts +114 -0
  43. package/lib/plugins/sticky-rows/index.d.ts +7 -0
  44. package/lib/plugins/sticky-rows/index.js +2 -0
  45. package/lib/plugins/sticky-rows/index.js.map +1 -0
  46. package/lib/plugins/sticky-rows/types.d.ts +67 -0
  47. package/lib/plugins/tooltip/index.js.map +1 -1
  48. package/lib/plugins/tree/index.js +1 -1
  49. package/lib/plugins/tree/index.js.map +1 -1
  50. package/lib/plugins/tree/types.d.ts +4 -0
  51. package/lib/plugins/undo-redo/index.js.map +1 -1
  52. package/lib/plugins/visibility/VisibilityPlugin.d.ts +0 -11
  53. package/lib/plugins/visibility/index.d.ts +1 -2
  54. package/lib/plugins/visibility/index.js.map +1 -1
  55. package/lib/plugins/visibility/types.d.ts +32 -0
  56. package/package.json +1 -1
  57. package/public.d.ts +28 -67
  58. package/umd/grid.all.umd.js +1 -1
  59. package/umd/grid.all.umd.js.map +1 -1
  60. package/umd/grid.umd.js +1 -1
  61. package/umd/grid.umd.js.map +1 -1
  62. package/umd/plugins/context-menu.umd.js +1 -1
  63. package/umd/plugins/context-menu.umd.js.map +1 -1
  64. package/umd/plugins/grouping-rows.umd.js +1 -1
  65. package/umd/plugins/grouping-rows.umd.js.map +1 -1
  66. package/umd/plugins/pinned-rows.umd.js +1 -1
  67. package/umd/plugins/pinned-rows.umd.js.map +1 -1
  68. package/umd/plugins/responsive.umd.js +1 -1
  69. package/umd/plugins/responsive.umd.js.map +1 -1
  70. package/umd/plugins/sticky-rows.umd.js +2 -0
  71. package/umd/plugins/sticky-rows.umd.js.map +1 -0
  72. package/umd/plugins/tree.umd.js +1 -1
  73. package/umd/plugins/tree.umd.js.map +1 -1
  74. package/umd/plugins/visibility.umd.js.map +1 -1
@@ -33,7 +33,10 @@ import { AggregationRowConfig, PinnedRowsConfig, PinnedRowsContext, PinnedRowsPa
33
33
  * @example Status Bar with Aggregation
34
34
  * ```ts
35
35
  * import '@toolbox-web/grid';
36
- * import { PinnedRowsPlugin } from '@toolbox-web/grid/plugins/pinned-rows';
36
+ * import {
37
+ * PinnedRowsPlugin,
38
+ * rowCountPanel,
39
+ * } from '@toolbox-web/grid/plugins/pinned-rows';
37
40
  *
38
41
  * grid.gridConfig = {
39
42
  * columns: [
@@ -43,14 +46,14 @@ import { AggregationRowConfig, PinnedRowsConfig, PinnedRowsContext, PinnedRowsPa
43
46
  * ],
44
47
  * plugins: [
45
48
  * new PinnedRowsPlugin({
46
- * position: 'bottom',
47
- * showRowCount: true,
48
- * aggregationRows: [
49
+ * slots: [
49
50
  * {
50
51
  * id: 'totals',
52
+ * position: 'bottom',
51
53
  * aggregators: { quantity: 'sum', price: 'sum' },
52
54
  * cells: { product: 'Totals:' },
53
55
  * },
56
+ * { id: 'count', position: 'bottom', render: rowCountPanel() },
54
57
  * ],
55
58
  * }),
56
59
  * ],
@@ -73,11 +76,32 @@ export declare class PinnedRowsPlugin extends BaseGridPlugin<PinnedRowsConfig> {
73
76
  private topAggregationContainer;
74
77
  private bottomAggregationContainer;
75
78
  private footerWrapper;
79
+ /** Slot-mode wrapper: holds top slot rows when `config.slots` is provided. */
80
+ private headerWrapper;
81
+ /** Tracks whether the last render used slot mode, so we can clean up the
82
+ * opposite mode's DOM if the user toggles between APIs at runtime. */
83
+ private lastModeWasSlots;
76
84
  /** @internal */
77
85
  detach(): void;
78
86
  /** @internal */
79
87
  afterRender(): void;
88
+ /**
89
+ * Slot-driven render path: iterates `config.slots` in declared order and emits
90
+ * one DOM row per slot inside `.tbw-header-pinned` (top) or `.tbw-footer` (bottom).
91
+ * The slot order in the array is preserved as the visual top→bottom order
92
+ * within each area.
93
+ */
94
+ private renderSlotMode;
95
+ /**
96
+ * Replaces the contents of a top/bottom wrapper with one DOM row per slot,
97
+ * in array order. Drops slots that emit nothing (panel slot whose renderers
98
+ * all returned null).
99
+ */
100
+ private populateSlotWrapper;
101
+ private renderLegacyMode;
80
102
  private cleanup;
103
+ /** Detach only the legacy-mode DOM (used when switching legacy → slot mode). */
104
+ private detachLegacyOnly;
81
105
  private cleanupFooter;
82
106
  private getSelectionState;
83
107
  private getFilterState;
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Pinned Rows Plugin Entry Point
3
- * Re-exports plugin class and types for tree-shakeable imports.
3
+ * Re-exports plugin class, types, and built-in panel renderers for tree-shakeable imports.
4
4
  *
5
5
  * @module Plugins/Pinned Rows
6
6
  */
7
+ export { filteredCountPanel, rowCountPanel, selectedCountPanel } from './pinned-rows';
7
8
  export { PinnedRowsPlugin } from './PinnedRowsPlugin';
8
- export type { AggregationRowConfig, AggregatorConfig, AggregatorDefinition, AggregatorFormatter, PinnedRowsConfig, PinnedRowsContext, PinnedRowsPanel, PinnedRowsPosition, } from './types';
9
+ export type { AggregationRowConfig, AggregationSlot, AggregatorConfig, AggregatorDefinition, AggregatorFormatter, PanelRender, PanelSlot, PanelZone, PinnedRowSlot, PinnedRowsConfig, PinnedRowsContext, PinnedRowsPanel, PinnedRowsPosition, ZonedPanelRender, } from './types';
@@ -1,2 +1,2 @@
1
- function t(t,e){return`[tbw-grid${t?`#${t}`:""}${e?`:${e}`:""}]`}function e(e,n,o,r){return`${t(o,r)} ${e}: ${n}\n\n → More info: ${function(t){return`https://toolboxjs.com/grid/errors#${t.toLowerCase()}`}(e)}`}const n="__otorp__|__retteGenifed__|__retteSenifed__|rotcurtsnoc|wodniw|sihTlabolg|labolg|ssecorp|noitcnuF|tropmi|lave|tcelfeR|yxorP|rorrE|stnemugra|tnemucod|noitacol|eikooc|egarotSlacol|egarotSnoisses|BDdexedni|hctef|tseuqeRpttHLMX|tekcoSbeW|rekroW|rekroWderahS|rekroWecivreS|renepo|tnerap|pot|semarf|fles".split("|").map(t=>t.split("").reverse().join(""));new RegExp(`__(proto|defineGetter|defineSetter)|${n.slice(3).join("|")}|this\\b`);const o=new Set("script|iframe|object|embed|form|input|button|textarea|select|link|meta|base|style|template|slot|portal|frame|frameset|applet|noscript|noembed|plaintext|xmp|listing".split("|")),r=/^on\w+$/i,i=new Set("href|src|action|formaction|data|srcdoc|xlink:href|poster|srcset".split("|")),s=/^\s*(javascript|vbscript|data|blob):/i;function a(t){if(!t||"string"!=typeof t)return"";if(-1===t.indexOf("<"))return t;const e=document.createElement("template");return e.innerHTML=t,function(t){const e=[],n=t.querySelectorAll("*");for(const a of n){const t=a.tagName.toLowerCase();if(o.has(t)){e.push(a);continue}if("svg"===t||"http://www.w3.org/2000/svg"===a.namespaceURI){if(Array.from(a.attributes).some(t=>r.test(t.name)||"href"===t.name||"xlink:href"===t.name)){e.push(a);continue}}const n=[];for(const e of a.attributes){const t=e.name.toLowerCase();r.test(t)?n.push(e.name):(i.has(t)&&s.test(e.value)||"style"===t&&/expression\s*\(|javascript:|behavior\s*:/i.test(e.value))&&n.push(e.name)}n.forEach(t=>a.removeAttribute(t))}e.forEach(t=>t.remove())}(e.content),e.innerHTML}const l={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:"",filterActive:"",print:"🖨️"};class g{static dependencies;static manifest;aliases;version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#t;get defaultConfig(){return{}}constructor(t={}){this.userConfig=t}mergeConfigsFrom(t){if(0===t.length)return;const n={...this.userConfig},o={};for(const e of Object.keys(n))o[e]=this;for(const r of t){const t=r.userConfig;for(const[i,s]of Object.entries(t)){if(void 0===s)continue;if(!(i in n)){n[i]=s,o[i]=r;continue}if(n[i]===s)continue;const t=o[i]?.constructor.name??this.constructor.name,a=r.constructor.name,l=e("TBW025",`Cannot merge plugin configs for "${this.name}": conflicting value for "${i}" supplied by both ${t} and ${a}. Pass the option on a single instance, or remove the duplicate.`,void 0,this.name);throw new Error(l)}}Object.assign(this.userConfig,n)}attach(t){this.#t?.abort(),this.#t=new AbortController,this.grid=t,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#t?.abort(),this.#t=void 0}getPlugin(t){return this.grid?.getPlugin(t)}emit(t,e){this.grid?.dispatchEvent?.(new CustomEvent(t,{detail:e,bubbles:!0}))}emitCancelable(t,e){const n=new CustomEvent(t,{detail:e,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(n),n.defaultPrevented}on(t,e){this.grid?._pluginManager?.subscribe(this,t,e)}off(t){this.grid?._pluginManager?.unsubscribe(this,t)}emitPluginEvent(t,e){this.grid?._pluginManager?.emitPluginEvent(t,e)}broadcast(t,e){this.emitPluginEvent(t,e),this.emit(t,e)}requestRender(){this.grid?.requestRender?.()}requestColumnsRender(){this.grid?.requestColumnsRender?.()}requestRenderWithFocus(){this.grid?.requestRenderWithFocus?.()}requestAfterRender(){this.grid?.requestAfterRender?.()}requestVirtualRefresh(){this.grid?.requestVirtualRefresh?.()}get rows(){return this.grid?.rows??[]}get sourceRows(){return this.grid?.sourceRows??[]}get columns(){return this.grid?.columns??[]}get visibleColumns(){return this.grid?._visibleColumns??[]}get gridElement(){return this.grid?._hostElement}get disconnectSignal(){return this.#t?.signal??this.grid?.disconnectSignal}get gridIcons(){const t=this.grid?.gridConfig?.icons??{};return{...l,...t}}get isAnimationEnabled(){const t=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===t||"off"===t)return!1;if(!0===t||"on"===t)return!0;const e=this.gridElement;if(e){return"0"!==getComputedStyle(e).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const t=this.gridElement;if(t){const e=getComputedStyle(t).getPropertyValue("--tbw-animation-duration").trim(),n=parseInt(e,10);if(!isNaN(n))return n}return 200}setIcon(t,e,n){t.dataset.icon=e.replace(/([A-Z])/g,"-$1").toLowerCase(),"collapse"===e?t.dataset.expanded="":"expand"===e&&delete t.dataset.expanded;const o=this.#e(e,n);void 0!==o?"string"==typeof o?t.innerHTML=a(o):o instanceof HTMLElement&&(t.innerHTML="",t.appendChild(o.cloneNode(!0))):t.innerHTML=""}#e(t,e){return void 0!==e?e:this.grid?.gridConfig?.icons?.[t]}updateSortIndicator(t,e){t.querySelector('[part~="sort-indicator"], .sort-indicator')?.remove();const n=document.createElement("span");n.setAttribute("part","sort-indicator"),n.className="sort-indicator",e?(t.setAttribute("aria-sort","asc"===e?"ascending":"descending"),t.setAttribute("data-sort",e),this.setIcon(n,"asc"===e?"sortAsc":"sortDesc")):(t.setAttribute("aria-sort","none"),t.removeAttribute("data-sort"),this.setIcon(n,"sortNone"));const o=t.querySelector(".tbw-filter-btn")??t.querySelector(".resize-handle");return o?t.insertBefore(n,o):t.appendChild(n),n}warn(n,o){void 0!==o?console.warn(e(n,o,this.gridElement.id,this.name)):console.warn(`${t(this.gridElement.id,this.name)} ${n}`)}throwDiagnostic(t,n){throw new Error(e(t,n,this.gridElement.id,this.name))}}const c=/* @__PURE__ */new WeakMap;function d(t,e,n){return n?.valueAccessor?function(t,e,n=-1){if(!e.valueAccessor)return t?.[e.field];if("object"!=typeof t||null===t)return e.valueAccessor({row:t,column:e,rowIndex:n});const o=e.field;let r=c.get(t);if(r){if(r.has(o))return r.get(o)}else r=/* @__PURE__ */new Map,c.set(t,r);const i=e.valueAccessor({row:t,column:e,rowIndex:n});return r.set(o,i),i}(t,n):t?.[e]}function u(t){return null==t||""===t||"number"==typeof t&&isNaN(t)}const h={sum:(t,e,n)=>{let o=0;for(let r=0;r<t.length;r++){const i=d(t[r],e,n);if(u(i))continue;const s=Number(i);isNaN(s)||(o+=s)}return o},avg:(t,e,n)=>{if(!t.length)return 0;let o=0,r=0;for(let i=0;i<t.length;i++){const s=d(t[i],e,n);if(u(s))continue;const a=Number(s);isNaN(a)||(o+=a,r++)}return r>0?o/r:0},count:t=>t.length,min:(t,e,n)=>{if(!t.length)return 0;let o=1/0;for(let r=0;r<t.length;r++){const i=d(t[r],e,n);if(u(i))continue;const s=Number(i);isNaN(s)||s<o&&(o=s)}return o===1/0?0:o},max:(t,e,n)=>{if(!t.length)return 0;let o=-1/0;for(let r=0;r<t.length;r++){const i=d(t[r],e,n);if(u(i))continue;const s=Number(i);isNaN(s)||s>o&&(o=s)}return o===-1/0?0:o},first:(t,e,n)=>t[0]?d(t[0],e,n):void 0,last:(t,e,n)=>t.length?d(t[t.length-1],e,n):void 0},f=/* @__PURE__ */new Map,p={register(t,e){f.set(t,e)},unregister(t){f.delete(t)},get(t){if(void 0!==t)return"function"==typeof t?t:f.get(t)??h[t]},run(t,e,n,o){const r=this.get(t);return r?r(e,n,o):void 0},has:t=>f.has(t)||t in h,list:()=>[...Object.keys(h),...f.keys()]};function m(t,e){const n=document.createElement("div");n.className="tbw-pinned-rows",n.setAttribute("role","presentation"),n.setAttribute("aria-live","polite");const o=document.createElement("div");o.className="tbw-pinned-rows-left";const r=document.createElement("div");r.className="tbw-pinned-rows-center";const i=document.createElement("div");if(i.className="tbw-pinned-rows-right",!1!==t.showRowCount){const t=document.createElement("span");t.className="tbw-status-panel tbw-status-panel-row-count",t.textContent=`Total: ${e.totalRows} rows`,o.appendChild(t)}if(t.showFilteredCount&&e.filteredRows!==e.totalRows){const t=document.createElement("span");t.className="tbw-status-panel tbw-status-panel-filtered-count",t.textContent=`Filtered: ${e.filteredRows}`,o.appendChild(t)}if(t.showSelectedCount&&e.selectedRows>0){const t=document.createElement("span");t.className="tbw-status-panel tbw-status-panel-selected-count",t.textContent=`Selected: ${e.selectedRows}`,i.appendChild(t)}if(t.customPanels)for(const s of t.customPanels){const t=A(s,e);switch(s.position){case"left":o.appendChild(t);break;case"center":r.appendChild(t);break;case"right":i.appendChild(t)}}return n.appendChild(o),n.appendChild(r),n.appendChild(i),n}function b(t){const e=document.createElement("div");return e.className=`tbw-aggregation-rows tbw-aggregation-rows-${t}`,e.setAttribute("role","presentation"),e}function w(t,e,n,o,r=!1){t.innerHTML="";for(const i of e){const e=document.createElement("div");e.className="tbw-aggregation-row",e.setAttribute("role","presentation"),i.id&&e.setAttribute("data-aggregation-id",i.id);i.fullWidth??r?v(e,i,n,o):C(e,i,n,o),t.appendChild(e)}}function v(t,e,n,o){const r=document.createElement("div");r.className="tbw-aggregation-cell tbw-aggregation-cell-full",r.style.gridColumn="1 / -1";const i="function"==typeof e.label?e.label(o,n):e.label;if(i){const t=document.createElement("span");t.className="tbw-aggregation-label",t.textContent=i,r.appendChild(t)}const s=function(t,e,n){const o=t.aggregators&&Object.keys(t.aggregators).length>0,r=t.cells&&Object.keys(t.cells).length>0;if(!o&&!r)return null;const i=document.createElement("span");i.className="tbw-aggregation-aggregates";for(const s of e){const{value:e,formatter:o}=E(t,s,n);if(null!=e){const t=document.createElement("span");t.className="tbw-aggregation-aggregate",t.setAttribute("data-field",s.field);const n=s.header??s.field,r=o?o(e,s.field,s):String(e);t.textContent=`${n}: ${r}`,i.appendChild(t)}}return i.children.length>0?i:null}(e,n,o);s&&r.appendChild(s),t.appendChild(r)}function C(t,e,n,o){for(const i of n){const n=document.createElement("div");n.className="tbw-aggregation-cell",n.setAttribute("data-field",i.field);const{value:r,formatter:s}=E(e,i,o);n.textContent=null!=r?s?s(r,i.field,i):String(r):"",t.appendChild(n)}const r="function"==typeof e.label?e.label(o,n):e.label;if(r){const e=document.createElement("span");e.className="tbw-aggregation-label",e.textContent=r,t.appendChild(e)}}function E(t,e,n){let o,r;const i=t.aggregators?.[e.field];if(i)if("object"==typeof(s=i)&&null!==s&&"aggFunc"in s){const t=p.get(i.aggFunc);t&&(o=t(n,e.field,e)),r=i.formatter}else{const t=p.get(i);t&&(o=t(n,e.field,e))}else if(t.cells&&Object.prototype.hasOwnProperty.call(t.cells,e.field)){const r=t.cells[e.field];o="function"==typeof r?r(n,e.field,e):r}var s;return{value:o,formatter:r}}function A(t,e){const n=document.createElement("div");n.className="tbw-status-panel tbw-status-panel-custom",n.id=`status-panel-${t.id}`;const o=t.render(e);return"string"==typeof o?n.innerHTML=o:n.appendChild(o),n}function y(t,e,n,o,r){const i=n?.sourceRows,s=n?.rows,a=Array.isArray(i)?i.length:t.length,l=Array.isArray(s)?s.length:t.length,g=a>0?a:l;return{totalRows:g,filteredRows:r?.cachedResult?.length??(l<a?l:g),selectedRows:o?.selected?.size??0,columns:e,rows:t,grid:n}}class R extends g{name="pinnedRows";styles="@layer tbw-plugins{.tbw-scroll-area{container-type:inline-size}.tbw-footer{flex-shrink:0;z-index:var(--tbw-z-layer-pinned-rows, 20);background:var(--tbw-color-panel-bg);min-width:fit-content}.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;position:sticky;left:0;min-width:0;width:100cqi}.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);position:relative;background:inherit}.tbw-aggregation-row>.tbw-aggregation-label{position:sticky;left:0;grid-row:1;grid-column:1;display:flex;align-items:center;padding:var(--tbw-cell-padding, .125rem .5rem);background:inherit;z-index:1;pointer-events:none}.tbw-aggregation-row>.tbw-aggregation-cell:first-child{grid-column:1;grid-row:1}.tbw-aggregation-cell:not(:empty){position:relative;z-index:2;background:inherit}.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}}";get defaultConfig(){return{position:"bottom",showRowCount:!0,showSelectedCount:!0,showFilteredCount:!0}}infoBarElement=null;topAggregationContainer=null;bottomAggregationContainer=null;footerWrapper=null;detach(){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)}afterRender(){const t=this.gridElement;if(!t)return;const e=t.querySelector(".tbw-scroll-area")??t.querySelector(".tbw-grid-content")??t.querySelector(".tbw-grid-root");if(!e)return;this.footerWrapper&&!e.contains(this.footerWrapper)&&(this.footerWrapper=null,this.bottomAggregationContainer=null,this.infoBarElement=null),this.topAggregationContainer&&!e.contains(this.topAggregationContainer)&&(this.topAggregationContainer=null),this.infoBarElement&&!e.contains(this.infoBarElement)&&(this.infoBarElement=null);const n=this.getSelectionState(),o=this.getFilterState(),r=y(this.sourceRows,this.columns,this.gridElement,n,o),i=this.config.aggregationRows||[],s=i.filter(t=>"top"===t.position),a=i.filter(t=>"top"!==t.position);if(s.length>0){if(!this.topAggregationContainer){this.topAggregationContainer=b("top");const n=t.querySelector(".header");n&&n.nextSibling?e.insertBefore(this.topAggregationContainer,n.nextSibling):e.appendChild(this.topAggregationContainer)}w(this.topAggregationContainer,s,this.visibleColumns,this.sourceRows,this.config.fullWidth)}else this.topAggregationContainer&&(this.topAggregationContainer.remove(),this.topAggregationContainer=null);const l=!1!==this.config.showRowCount||this.config.showSelectedCount&&r.selectedRows>0||this.config.showFilteredCount&&r.filteredRows!==r.totalRows||this.config.customPanels&&this.config.customPanels.length>0,g=l&&"top"!==this.config.position,c=a.length>0||g;if(l&&"top"===this.config.position)if(this.infoBarElement){const t=m(this.config,r);this.infoBarElement.replaceWith(t),this.infoBarElement=t}else this.infoBarElement=m(this.config,r),e.insertBefore(this.infoBarElement,e.firstChild);else"top"===this.config.position&&this.infoBarElement&&(this.infoBarElement.remove(),this.infoBarElement=null);c?(this.footerWrapper||(this.footerWrapper=document.createElement("div"),this.footerWrapper.className="tbw-footer",e.appendChild(this.footerWrapper)),this.footerWrapper.innerHTML="",a.length>0&&(this.bottomAggregationContainer||(this.bottomAggregationContainer=b("bottom")),this.footerWrapper.appendChild(this.bottomAggregationContainer),w(this.bottomAggregationContainer,a,this.visibleColumns,this.sourceRows,this.config.fullWidth)),g&&(this.infoBarElement=m(this.config,r),this.footerWrapper.appendChild(this.infoBarElement))):this.cleanupFooter()}cleanup(){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)}cleanupFooter(){this.footerWrapper&&(this.footerWrapper.remove(),this.footerWrapper=null),this.bottomAggregationContainer&&(this.bottomAggregationContainer.remove(),this.bottomAggregationContainer=null),this.infoBarElement&&"top"!==this.config.position&&(this.infoBarElement.remove(),this.infoBarElement=null)}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}getFilterState(){try{return this.grid?.getPluginState?.("filtering")??null}catch{return null}}refresh(){this.requestRender()}getContext(){const t=this.getSelectionState(),e=this.getFilterState();return y(this.rows,this.columns,this.gridElement,t,e)}addPanel(t){this.config.customPanels||(this.config.customPanels=[]),this.config.customPanels.push(t),this.requestRender()}removePanel(t){this.config.customPanels&&(this.config.customPanels=this.config.customPanels.filter(e=>e.id!==t),this.requestRender())}addAggregationRow(t){this.config.aggregationRows||(this.config.aggregationRows=[]),this.config.aggregationRows.push(t),this.requestRender()}removeAggregationRow(t){this.config.aggregationRows&&(this.config.aggregationRows=this.config.aggregationRows.filter(e=>e.id!==t),this.requestRender())}}export{R as PinnedRowsPlugin};
1
+ const t=/* @__PURE__ */new WeakMap;function e(e,n,r){return r?.valueAccessor?function(e,n,r=-1){if(!n.valueAccessor)return e?.[n.field];if("object"!=typeof e||null===e)return n.valueAccessor({row:e,column:n,rowIndex:r});const o=n.field;let i=t.get(e);if(i){if(i.has(o))return i.get(o)}else i=/* @__PURE__ */new Map,t.set(e,i);const s=n.valueAccessor({row:e,column:n,rowIndex:r});return i.set(o,s),s}(e,r):e?.[n]}function n(t){return null==t||""===t||"number"==typeof t&&isNaN(t)}const r={sum:(t,r,o)=>{let i=0;for(let s=0;s<t.length;s++){const a=e(t[s],r,o);if(n(a))continue;const l=Number(a);isNaN(l)||(i+=l)}return i},avg:(t,r,o)=>{if(!t.length)return 0;let i=0,s=0;for(let a=0;a<t.length;a++){const l=e(t[a],r,o);if(n(l))continue;const c=Number(l);isNaN(c)||(i+=c,s++)}return s>0?i/s:0},count:t=>t.length,min:(t,r,o)=>{if(!t.length)return 0;let i=1/0;for(let s=0;s<t.length;s++){const a=e(t[s],r,o);if(n(a))continue;const l=Number(a);isNaN(l)||l<i&&(i=l)}return i===1/0?0:i},max:(t,r,o)=>{if(!t.length)return 0;let i=-1/0;for(let s=0;s<t.length;s++){const a=e(t[s],r,o);if(n(a))continue;const l=Number(a);isNaN(l)||l>i&&(i=l)}return i===-1/0?0:i},first:(t,n,r)=>t[0]?e(t[0],n,r):void 0,last:(t,n,r)=>t.length?e(t[t.length-1],n,r):void 0},o=/* @__PURE__ */new Map,i={register(t,e){o.set(t,e)},unregister(t){o.delete(t)},get(t){if(void 0!==t)return"function"==typeof t?t:o.get(t)??r[t]},run(t,e,n,r){const o=this.get(t);return o?o(e,n,r):void 0},has:t=>o.has(t)||t in r,list:()=>[...Object.keys(r),...o.keys()]},s="__otorp__|__retteGenifed__|__retteSenifed__|rotcurtsnoc|wodniw|sihTlabolg|labolg|ssecorp|noitcnuF|tropmi|lave|tcelfeR|yxorP|rorrE|stnemugra|tnemucod|noitacol|eikooc|egarotSlacol|egarotSnoisses|BDdexedni|hctef|tseuqeRpttHLMX|tekcoSbeW|rekroW|rekroWderahS|rekroWecivreS|renepo|tnerap|pot|semarf|fles".split("|").map(t=>t.split("").reverse().join(""));new RegExp(`__(proto|defineGetter|defineSetter)|${s.slice(3).join("|")}|this\\b`);const a=new Set("script|iframe|object|embed|form|input|button|textarea|select|link|meta|base|style|template|slot|portal|frame|frameset|applet|noscript|noembed|plaintext|xmp|listing".split("|")),l=/^on\w+$/i,c=new Set("href|src|action|formaction|data|srcdoc|xlink:href|poster|srcset".split("|")),g=/^\s*(javascript|vbscript|data|blob):/i;function d(t){if(!t||"string"!=typeof t)return"";if(-1===t.indexOf("<"))return t;const e=document.createElement("template");return e.innerHTML=t,function(t){const e=[],n=t.querySelectorAll("*");for(const r of n){const t=r.tagName.toLowerCase();if(a.has(t)){e.push(r);continue}if("svg"===t||"http://www.w3.org/2000/svg"===r.namespaceURI){if(Array.from(r.attributes).some(t=>l.test(t.name)||"href"===t.name||"xlink:href"===t.name)){e.push(r);continue}}const n=[];for(const e of r.attributes){const t=e.name.toLowerCase();l.test(t)?n.push(e.name):(c.has(t)&&g.test(e.value)||"style"===t&&/expression\s*\(|javascript:|behavior\s*:/i.test(e.value))&&n.push(e.name)}n.forEach(t=>r.removeAttribute(t))}e.forEach(t=>t.remove())}(e.content),e.innerHTML}function p(t,e){const n=document.createElement("div");n.className="tbw-pinned-rows",n.setAttribute("role","presentation"),n.setAttribute("aria-live","polite");const r=document.createElement("div");r.className="tbw-pinned-rows-left";const o=document.createElement("div");o.className="tbw-pinned-rows-center";const i=document.createElement("div");if(i.className="tbw-pinned-rows-right",!1!==t.showRowCount){const t=document.createElement("span");t.className="tbw-status-panel tbw-status-panel-row-count",t.textContent=`Total: ${e.totalRows} rows`,r.appendChild(t)}if(t.showFilteredCount&&e.filteredRows!==e.totalRows){const t=document.createElement("span");t.className="tbw-status-panel tbw-status-panel-filtered-count",t.textContent=`Filtered: ${e.filteredRows}`,r.appendChild(t)}if(t.showSelectedCount&&e.selectedRows>0){const t=document.createElement("span");t.className="tbw-status-panel tbw-status-panel-selected-count",t.textContent=`Selected: ${e.selectedRows}`,i.appendChild(t)}if(t.customPanels)for(const s of t.customPanels){const t=b(s,e);switch(s.position){case"left":r.appendChild(t);break;case"center":o.appendChild(t);break;case"right":i.appendChild(t)}}return n.appendChild(r),n.appendChild(o),n.appendChild(i),n}function h(t){const e=document.createElement("div");return e.className=`tbw-aggregation-rows tbw-aggregation-rows-${t}`,e.setAttribute("role","presentation"),e}function u(t,e,n,r,o=!1){t.innerHTML="";for(const i of e){const e=document.createElement("div");e.className="tbw-aggregation-row",e.setAttribute("role","presentation"),i.id&&e.setAttribute("data-aggregation-id",i.id);i.fullWidth??o?f(e,i,n,r):m(e,i,n,r),t.appendChild(e)}}function f(t,e,n,r){const o=document.createElement("div");o.className="tbw-aggregation-cell tbw-aggregation-cell-full",o.style.gridColumn="1 / -1";const i="function"==typeof e.label?e.label(r,n):e.label;if(i){const t=document.createElement("span");t.className="tbw-aggregation-label",t.textContent=i,o.appendChild(t)}const s=function(t,e,n){const r=t.aggregators&&Object.keys(t.aggregators).length>0,o=t.cells&&Object.keys(t.cells).length>0;if(!r&&!o)return null;const i=document.createElement("span");i.className="tbw-aggregation-aggregates";for(const s of e){const{value:e,formatter:r}=w(t,s,n);if(null!=e){const t=document.createElement("span");t.className="tbw-aggregation-aggregate",t.setAttribute("data-field",s.field);const n=s.header??s.field,o=r?r(e,s.field,s):String(e);t.textContent=`${n}: ${o}`,i.appendChild(t)}}return i.children.length>0?i:null}(e,n,r);s&&o.appendChild(s),t.appendChild(o)}function m(t,e,n,r){for(const i of n){const n=document.createElement("div");n.className="tbw-aggregation-cell",n.setAttribute("data-field",i.field);const{value:o,formatter:s}=w(e,i,r);n.textContent=null!=o?s?s(o,i.field,i):String(o):"",t.appendChild(n)}const o="function"==typeof e.label?e.label(r,n):e.label;if(o){const e=document.createElement("span");e.className="tbw-aggregation-label",e.textContent=o,t.appendChild(e)}}function w(t,e,n){let r,o;const s=t.aggregators?.[e.field];if(s)if("object"==typeof(a=s)&&null!==a&&"aggFunc"in a){const t=i.get(s.aggFunc);t&&(r=t(n,e.field,e)),o=s.formatter}else{const t=i.get(s);t&&(r=t(n,e.field,e))}else if(t.cells&&Object.prototype.hasOwnProperty.call(t.cells,e.field)){const o=t.cells[e.field];r="function"==typeof o?o(n,e.field,e):o}var a;return{value:r,formatter:o}}function b(t,e){const n=document.createElement("div");n.className="tbw-status-panel tbw-status-panel-custom",n.id=`status-panel-${t.id}`;const r=t.render(e);return"string"==typeof r?n.innerHTML=d(r):n.appendChild(r),n}function v(t,e,n,r,o){const i=n?.sourceRows,s=n?.rows,a=Array.isArray(i)?i.length:t.length,l=Array.isArray(s)?s.length:t.length,c=a>0?a:l;return{totalRows:c,filteredRows:o?.cachedResult?.length??(l<a?l:c),selectedRows:r?.selected?.size??0,columns:e,rows:t,grid:n}}function C(){return t=>{const e=document.createElement("span");return e.className="tbw-status-panel tbw-status-panel-row-count",e.textContent=`Total: ${t.totalRows} rows`,e}}function E(){return t=>{if(t.selectedRows<=0)return null;const e=document.createElement("span");return e.className="tbw-status-panel tbw-status-panel-selected-count",e.textContent=`Selected: ${t.selectedRows}`,e}}function A(){return t=>{if(t.filteredRows===t.totalRows)return null;const e=document.createElement("span");return e.className="tbw-status-panel tbw-status-panel-filtered-count",e.textContent=`Filtered: ${t.filteredRows}`,e}}function W(t){const e=document.createElement("div");return e.className="tbw-status-panel tbw-status-panel-custom",e.appendChild(t),e}function y(t,e){const n=document.createElement("div");n.className="tbw-pinned-rows",n.setAttribute("role","presentation"),n.setAttribute("aria-live","polite"),t.id&&n.setAttribute("data-pinned-row-id",t.id);const r=document.createElement("div");r.className="tbw-pinned-rows-left";const o=document.createElement("div");o.className="tbw-pinned-rows-center";const i=document.createElement("div");i.className="tbw-pinned-rows-right";const s={left:r,center:o,right:i},a=Array.isArray(t.render)?t.render:[{zone:"left",render:t.render}];for(const l of a){const t=l.zone??"left",n=l.render(e);if(null==n)continue;const r=n.classList?.contains("tbw-status-panel");s[t].appendChild(r?n:W(n))}return 0===r.children.length&&0===o.children.length&&0===i.children.length?null:(n.appendChild(r),n.appendChild(o),n.appendChild(i),n)}function R(t,e,n,r,o=!1){const i=h(e);return u(i,[t],n,r,o),i}function x(t,e){return`[tbw-grid${t?`#${t}`:""}${e?`:${e}`:""}]`}function S(t,e,n,r){return`${x(n,r)} ${t}: ${e}\n\n → More info: ${function(t){return`https://toolboxjs.com/grid/errors#${t.toLowerCase()}`}(t)}`}const N={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:"",filterActive:"",print:"🖨️"};class B{static dependencies;static manifest;aliases;version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#t;get defaultConfig(){return{}}constructor(t={}){this.userConfig=t}mergeConfigsFrom(t){if(0===t.length)return;const e={...this.userConfig},n={};for(const r of Object.keys(e))n[r]=this;for(const r of t){const t=r.userConfig;for(const[o,i]of Object.entries(t)){if(void 0===i)continue;if(!(o in e)){e[o]=i,n[o]=r;continue}if(e[o]===i)continue;const t=n[o]?.constructor.name??this.constructor.name,s=r.constructor.name,a=S("TBW025",`Cannot merge plugin configs for "${this.name}": conflicting value for "${o}" supplied by both ${t} and ${s}. Pass the option on a single instance, or remove the duplicate.`,void 0,this.name);throw new Error(a)}}Object.assign(this.userConfig,e)}attach(t){this.#t?.abort(),this.#t=new AbortController,this.grid=t,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#t?.abort(),this.#t=void 0}getPlugin(t){return this.grid?.getPlugin(t)}emit(t,e){this.grid?.dispatchEvent?.(new CustomEvent(t,{detail:e,bubbles:!0}))}emitCancelable(t,e){const n=new CustomEvent(t,{detail:e,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(n),n.defaultPrevented}on(t,e){this.grid?._pluginManager?.subscribe(this,t,e)}off(t){this.grid?._pluginManager?.unsubscribe(this,t)}emitPluginEvent(t,e){this.grid?._pluginManager?.emitPluginEvent(t,e)}broadcast(t,e){this.emitPluginEvent(t,e),this.emit(t,e)}requestRender(){this.grid?.requestRender?.()}requestColumnsRender(){this.grid?.requestColumnsRender?.()}requestRenderWithFocus(){this.grid?.requestRenderWithFocus?.()}requestAfterRender(){this.grid?.requestAfterRender?.()}requestVirtualRefresh(){this.grid?.requestVirtualRefresh?.()}get rows(){return this.grid?.rows??[]}get sourceRows(){return this.grid?.sourceRows??[]}get columns(){return this.grid?.columns??[]}get visibleColumns(){return this.grid?._visibleColumns??[]}get gridElement(){return this.grid?._hostElement}get disconnectSignal(){return this.#t?.signal??this.grid?.disconnectSignal}get gridIcons(){const t=this.grid?.gridConfig?.icons??{};return{...N,...t}}get isAnimationEnabled(){const t=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===t||"off"===t)return!1;if(!0===t||"on"===t)return!0;const e=this.gridElement;if(e){return"0"!==getComputedStyle(e).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const t=this.gridElement;if(t){const e=getComputedStyle(t).getPropertyValue("--tbw-animation-duration").trim(),n=parseInt(e,10);if(!isNaN(n))return n}return 200}setIcon(t,e,n){t.dataset.icon=e.replace(/([A-Z])/g,"-$1").toLowerCase(),"collapse"===e?t.dataset.expanded="":"expand"===e&&delete t.dataset.expanded;const r=this.#e(e,n);void 0!==r?"string"==typeof r?t.innerHTML=d(r):r instanceof HTMLElement&&(t.innerHTML="",t.appendChild(r.cloneNode(!0))):t.innerHTML=""}#e(t,e){return void 0!==e?e:this.grid?.gridConfig?.icons?.[t]}updateSortIndicator(t,e){t.querySelector('[part~="sort-indicator"], .sort-indicator')?.remove();const n=document.createElement("span");n.setAttribute("part","sort-indicator"),n.className="sort-indicator",e?(t.setAttribute("aria-sort","asc"===e?"ascending":"descending"),t.setAttribute("data-sort",e),this.setIcon(n,"asc"===e?"sortAsc":"sortDesc")):(t.setAttribute("aria-sort","none"),t.removeAttribute("data-sort"),this.setIcon(n,"sortNone"));const r=t.querySelector(".tbw-filter-btn")??t.querySelector(".resize-handle");return r?t.insertBefore(n,r):t.appendChild(n),n}warn(t,e){void 0!==e?console.warn(S(t,e,this.gridElement.id,this.name)):console.warn(`${x(this.gridElement.id,this.name)} ${t}`)}throwDiagnostic(t,e){throw new Error(S(t,e,this.gridElement.id,this.name))}}class _ extends B{name="pinnedRows";styles="@layer tbw-plugins{.tbw-scroll-area{container-type:inline-size}.tbw-footer,.tbw-header-pinned{flex-shrink:0;z-index:var(--tbw-z-layer-pinned-rows, 20);background:var(--tbw-color-panel-bg);min-width:fit-content}.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;position:sticky;left:0;min-width:0;width:100cqi}.tbw-pinned-rows+.tbw-pinned-rows{border-top:0}.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);position:relative;background:inherit}.tbw-aggregation-row>.tbw-aggregation-label{position:sticky;left:0;grid-row:1;grid-column:1;display:flex;align-items:center;padding:var(--tbw-cell-padding, .125rem .5rem);background:inherit;z-index:1;pointer-events:none}.tbw-aggregation-row>.tbw-aggregation-cell:first-child{grid-column:1;grid-row:1}.tbw-aggregation-cell:not(:empty){position:relative;z-index:2;background:inherit}.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}}";get defaultConfig(){return{position:"bottom",showRowCount:!0,showSelectedCount:!0,showFilteredCount:!0}}infoBarElement=null;topAggregationContainer=null;bottomAggregationContainer=null;footerWrapper=null;headerWrapper=null;lastModeWasSlots=!1;detach(){this.cleanup()}afterRender(){const t=this.gridElement;if(!t)return;const e=t.querySelector(".tbw-scroll-area")??t.querySelector(".tbw-grid-content")??t.querySelector(".tbw-grid-root");if(!e)return;this.footerWrapper&&!e.contains(this.footerWrapper)&&(this.footerWrapper=null,this.bottomAggregationContainer=null,this.infoBarElement=null),this.topAggregationContainer&&!e.contains(this.topAggregationContainer)&&(this.topAggregationContainer=null),this.infoBarElement&&!e.contains(this.infoBarElement)&&(this.infoBarElement=null),this.headerWrapper&&!e.contains(this.headerWrapper)&&(this.headerWrapper=null);const n=this.getSelectionState(),r=this.getFilterState(),o=v(this.sourceRows,this.columns,this.gridElement,n,r);this.config.slots?this.renderSlotMode(e,t,o):this.renderLegacyMode(e,t,o)}renderSlotMode(t,e,n){this.lastModeWasSlots||this.detachLegacyOnly(),this.lastModeWasSlots=!0;const r=this.config.slots??[],o=r.filter(t=>"top"===t.position),i=r.filter(t=>"top"!==t.position);o.length>0?(this.headerWrapper||(this.headerWrapper=document.createElement("div"),this.headerWrapper.className="tbw-header-pinned",t.insertBefore(this.headerWrapper,t.firstChild)),this.populateSlotWrapper(this.headerWrapper,o,"top",n)):this.headerWrapper&&(this.headerWrapper.remove(),this.headerWrapper=null),i.length>0?(this.footerWrapper||(this.footerWrapper=document.createElement("div"),this.footerWrapper.className="tbw-footer",t.appendChild(this.footerWrapper)),this.populateSlotWrapper(this.footerWrapper,i,"bottom",n)):this.footerWrapper&&(this.footerWrapper.remove(),this.footerWrapper=null)}populateSlotWrapper(t,e,n,r){t.innerHTML="";for(const o of e){const e="render"in o&&null!=o.render?y(o,r):R(o,n,this.visibleColumns,this.sourceRows,this.config.fullWidth);e&&t.appendChild(e)}}renderLegacyMode(t,e,n){this.lastModeWasSlots&&(this.headerWrapper&&(this.headerWrapper.remove(),this.headerWrapper=null),this.footerWrapper&&(this.footerWrapper.remove(),this.footerWrapper=null),this.bottomAggregationContainer=null,this.infoBarElement=null),this.lastModeWasSlots=!1;const r=this.config.aggregationRows||[],o=r.filter(t=>"top"===t.position),i=r.filter(t=>"top"!==t.position);o.length>0?(this.topAggregationContainer||(this.topAggregationContainer=h("top"),t.insertBefore(this.topAggregationContainer,t.firstChild)),u(this.topAggregationContainer,o,this.visibleColumns,this.sourceRows,this.config.fullWidth)):this.topAggregationContainer&&(this.topAggregationContainer.remove(),this.topAggregationContainer=null);const s=!1!==this.config.showRowCount||this.config.showSelectedCount&&n.selectedRows>0||this.config.showFilteredCount&&n.filteredRows!==n.totalRows||this.config.customPanels&&this.config.customPanels.length>0,a=s&&"top"!==this.config.position,l=i.length>0||a;if(s&&"top"===this.config.position)if(this.infoBarElement){const t=p(this.config,n);this.infoBarElement.replaceWith(t),this.infoBarElement=t}else this.infoBarElement=p(this.config,n),t.insertBefore(this.infoBarElement,t.firstChild);else"top"===this.config.position&&this.infoBarElement&&(this.infoBarElement.remove(),this.infoBarElement=null);l?(this.footerWrapper||(this.footerWrapper=document.createElement("div"),this.footerWrapper.className="tbw-footer",t.appendChild(this.footerWrapper)),this.footerWrapper.innerHTML="",i.length>0&&(this.bottomAggregationContainer||(this.bottomAggregationContainer=h("bottom")),this.footerWrapper.appendChild(this.bottomAggregationContainer),u(this.bottomAggregationContainer,i,this.visibleColumns,this.sourceRows,this.config.fullWidth)),a&&(this.infoBarElement=p(this.config,n),this.footerWrapper.appendChild(this.infoBarElement))):this.cleanupFooter()}cleanup(){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),this.headerWrapper&&(this.headerWrapper.remove(),this.headerWrapper=null)}detachLegacyOnly(){this.topAggregationContainer&&(this.topAggregationContainer.remove(),this.topAggregationContainer=null),this.bottomAggregationContainer&&(this.bottomAggregationContainer.remove(),this.bottomAggregationContainer=null),this.footerWrapper&&(this.footerWrapper.remove(),this.footerWrapper=null),this.infoBarElement&&(this.infoBarElement.remove(),this.infoBarElement=null)}cleanupFooter(){this.footerWrapper&&(this.footerWrapper.remove(),this.footerWrapper=null),this.bottomAggregationContainer&&(this.bottomAggregationContainer.remove(),this.bottomAggregationContainer=null),this.infoBarElement&&"top"!==this.config.position&&(this.infoBarElement.remove(),this.infoBarElement=null)}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}getFilterState(){try{return this.grid?.getPluginState?.("filtering")??null}catch{return null}}refresh(){this.requestRender()}getContext(){const t=this.getSelectionState(),e=this.getFilterState();return v(this.rows,this.columns,this.gridElement,t,e)}addPanel(t){this.config.customPanels||(this.config.customPanels=[]),this.config.customPanels.push(t),this.requestRender()}removePanel(t){this.config.customPanels&&(this.config.customPanels=this.config.customPanels.filter(e=>e.id!==t),this.requestRender())}addAggregationRow(t){this.config.aggregationRows||(this.config.aggregationRows=[]),this.config.aggregationRows.push(t),this.requestRender()}removeAggregationRow(t){this.config.aggregationRows&&(this.config.aggregationRows=this.config.aggregationRows.filter(e=>e.id!==t),this.requestRender())}}export{_ as PinnedRowsPlugin,A as filteredCountPanel,C as rowCountPanel,E as selectedCountPanel};
2
2
  //# sourceMappingURL=index.js.map