@toolbox-web/grid 2.14.1 → 2.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 (51) hide show
  1. package/all.js +2 -2
  2. package/all.js.map +1 -1
  3. package/index.js +1 -1
  4. package/index.js.map +1 -1
  5. package/lib/core/constants.d.ts +6 -6
  6. package/lib/core/plugin/base-plugin.d.ts +1 -1
  7. package/lib/core/types.d.ts +125 -0
  8. package/lib/plugins/clipboard/index.js.map +1 -1
  9. package/lib/plugins/column-virtualization/index.js.map +1 -1
  10. package/lib/plugins/context-menu/index.js.map +1 -1
  11. package/lib/plugins/editing/index.js +1 -1
  12. package/lib/plugins/editing/index.js.map +1 -1
  13. package/lib/plugins/editing/internal/helpers.d.ts +13 -0
  14. package/lib/plugins/export/index.js.map +1 -1
  15. package/lib/plugins/filtering/FilteringPlugin.d.ts +22 -2
  16. package/lib/plugins/filtering/index.js +1 -1
  17. package/lib/plugins/filtering/index.js.map +1 -1
  18. package/lib/plugins/grouping-columns/index.js.map +1 -1
  19. package/lib/plugins/grouping-rows/index.js.map +1 -1
  20. package/lib/plugins/master-detail/index.js.map +1 -1
  21. package/lib/plugins/multi-sort/index.js.map +1 -1
  22. package/lib/plugins/pinned-columns/index.js.map +1 -1
  23. package/lib/plugins/pinned-rows/PinnedRowsPlugin.d.ts +8 -0
  24. package/lib/plugins/pinned-rows/index.js +1 -1
  25. package/lib/plugins/pinned-rows/index.js.map +1 -1
  26. package/lib/plugins/pinned-rows/pinned-rows.d.ts +7 -1
  27. package/lib/plugins/pivot/index.js.map +1 -1
  28. package/lib/plugins/print/index.js.map +1 -1
  29. package/lib/plugins/reorder-columns/index.js.map +1 -1
  30. package/lib/plugins/reorder-rows/index.js.map +1 -1
  31. package/lib/plugins/responsive/index.js.map +1 -1
  32. package/lib/plugins/row-drag-drop/index.js.map +1 -1
  33. package/lib/plugins/selection/index.js.map +1 -1
  34. package/lib/plugins/server-side/index.js.map +1 -1
  35. package/lib/plugins/sticky-rows/index.js.map +1 -1
  36. package/lib/plugins/tooltip/index.js.map +1 -1
  37. package/lib/plugins/tree/index.js.map +1 -1
  38. package/lib/plugins/undo-redo/index.js.map +1 -1
  39. package/lib/plugins/visibility/index.js.map +1 -1
  40. package/package.json +1 -1
  41. package/public.d.ts +1 -1
  42. package/umd/grid.all.umd.js +1 -1
  43. package/umd/grid.all.umd.js.map +1 -1
  44. package/umd/grid.umd.js +1 -1
  45. package/umd/grid.umd.js.map +1 -1
  46. package/umd/plugins/editing.umd.js +1 -1
  47. package/umd/plugins/editing.umd.js.map +1 -1
  48. package/umd/plugins/filtering.umd.js +1 -1
  49. package/umd/plugins/filtering.umd.js.map +1 -1
  50. package/umd/plugins/pinned-rows.umd.js +1 -1
  51. package/umd/plugins/pinned-rows.umd.js.map +1 -1
package/umd/grid.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TbwGrid={})}(this,function(e){"use strict";const t={STRETCH:"stretch",FIXED:"fixed"},o={sortApplied:(e,t)=>`Sorted by ${e}, ${t}`,sortCleared:()=>"Sort cleared",filterApplied:e=>`Filter applied on ${e}`,filterCleared:e=>`Filter cleared from ${e}`,allFiltersCleared:()=>"All filters cleared",groupExpanded:(e,t)=>`Group ${e} expanded, ${t} rows`,groupCollapsed:e=>`Group ${e} collapsed`,selectionChanged:e=>`${e} rows selected`,columnSelected:e=>`Column ${e} selected`,columnSelectionChanged:e=>`${e} columns selected`,columnSelectionCleared:()=>"Column selection cleared",selectionAxisChanged:e=>"column"===e?"Row selection cleared, column selection active":"Column selection cleared, row selection active",editingStarted:e=>`Editing row ${e+1}`,editingCommitted:e=>`Row ${e+1} saved`,dataLoaded:e=>`${e} rows loaded`},i={mode:"reduced-motion",duration:200,easing:"ease-out"},n={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:"",filterActive:"",print:"🖨️"};function r(e,t){if(!e)return;const o="effectiveConfig"in e?e.effectiveConfig:void 0;if(!1===o?.a11y?.announcements)return;const i=e.querySelector?.(".tbw-sr-only");i&&(i.textContent="",requestAnimationFrame(()=>{i.textContent=t}))}function s(e,t,...i){const n=e&&"effectiveConfig"in e?e.effectiveConfig:void 0,r=n?.a11y?.messages?.[t];return r?r(...i):o[t](...i)}function l(e,t){return`[tbw-grid${e?`#${e}`:""}${t?`:${t}`:""}]`}const a="TBW041",c="TBW061",d="TBW062",h="TBW072";function u(e,t,o,i){return`${l(o,i)} ${e}: ${t}\n\n → More info: ${function(e){return`https://toolboxjs.com/grid/errors#${e.toLowerCase()}`}(e)}`}function g(e,t,o,i){throw new Error(u(e,t,o,i))}function f(e,t,o,i){console.warn(u(e,t,o,i))}function p(e,t,o,i){console.error(u(e,t,o,i))}function w(e,t){if(!(e&&e.length||t&&t.length))return[];if(!e||!e.length)return t||[];if(!t||!t.length)return e;const o={},i=t;for(let s=0;s<i.length;s++){const e=i[s],t=o[e.field];if(t){e.header&&!t.header&&(t.header=e.header),e.type&&!t.type&&(t.type=e.type),e.sortable&&(t.sortable=!0),e.editable&&(t.editable=!0),e.resizable&&(t.resizable=!0),null!=e.width&&null==t.width&&(t.width=e.width),null!=e.minWidth&&null==t.minWidth&&(t.minWidth=e.minWidth),e.__viewTemplate&&(t.__viewTemplate=e.__viewTemplate),e.__editorTemplate&&(t.__editorTemplate=e.__editorTemplate),e.__headerTemplate&&(t.__headerTemplate=e.__headerTemplate);const o=e.renderer||e.viewRenderer,i=t.renderer||t.viewRenderer;o&&!i&&(t.viewRenderer=o,e.renderer&&(t.renderer=o)),e.editor&&!t.editor&&(t.editor=e.editor)}else o[e.field]={...e}}const n=e.map(e=>{const t=o[e.field];if(!t)return e;const i={...e};t.header&&!i.header&&(i.header=t.header),t.type&&!i.type&&(i.type=t.type),i.sortable=e.sortable||t.sortable,!0!==e.resizable&&!0!==t.resizable||(i.resizable=!0),i.editable=e.editable||t.editable,null!=t.width&&null==i.width&&(i.width=t.width),null!=t.minWidth&&null==i.minWidth&&(i.minWidth=t.minWidth),t.__viewTemplate&&(i.__viewTemplate=t.__viewTemplate),t.__editorTemplate&&(i.__editorTemplate=t.__editorTemplate),t.__headerTemplate&&(i.__headerTemplate=t.__headerTemplate);const n=t.renderer||t.viewRenderer,r=i.renderer||i.viewRenderer;return n&&!r&&(i.viewRenderer=n,t.renderer&&(i.renderer=n)),t.editor&&!i.editor&&(i.editor=t.editor),delete o[e.field],i}),r=Object.keys(o);for(let s=0;s<r.length;s++)n.push(o[r[s]]);return n}function b(e,t){try{e.part?.add?.(t)}catch{}const o=e.getAttribute("part");o?o.split(/\s+/).includes(t)||e.setAttribute("part",o+" "+t):e.setAttribute("part",t)}function m(e){const o=e.effectiveConfig?.fitMode||e.fitMode||t.STRETCH;if(o!==t.STRETCH&&o!==t.FIXED)return;if(e.__didInitialAutoSize)return;if(!e.isConnected)return;const i=Array.from(e._headerRowEl?.children||[]);if(!i.length)return;let n=!1;const r=e._visibleColumns;for(let t=0;t<r.length;t++){const o=r[t];if(o.width)continue;const s=i[t];let l=s?s.scrollWidth:0;for(let i=0;i<e._rowPool.length;i++){const o=e._rowPool[i].children[t];if(o){const e=o.scrollWidth;e>l&&(l=e)}}l>0&&(o.width=l+2,o.__autoSized=!0,n=!0)}n&&y(e),e.__didInitialAutoSize=!0}const v=/^(?:\d+(?:\.\d+)?(?:px|%|fr|em|rem|ch|vw|vh|vmin|vmax)|calc\(.+\)|min-content|max-content|minmax\(.+\)|fit-content\(.+\)|auto)$/i;function C(e,t){return"number"==typeof e?`${e}px`:(v.test(e)||f("TBW050",`Column '${t??"?"}' has an invalid CSS width value: '${e}'. Expected a number (px) or a valid CSS unit string (e.g. '30%', '2fr', 'calc(...)').`),e)}function y(e){const o=e.effectiveConfig?.fitMode||e.fitMode||t.STRETCH;e._gridTemplate=o===t.STRETCH?e._visibleColumns.map(e=>{if(null!=e.width)return C(e.width,e.field);const t=e.minWidth;return null!=t?`minmax(${t}px, 1fr)`:"1fr"}).join(" ").trim():e._visibleColumns.map(e=>null!=e.width?C(e.width,e.field):"max-content").join(" "),e.style.setProperty("--tbw-column-template",e._gridTemplate)}const _={ROOT:"tbw-grid-root",HEADER:"header",HEADER_ROW:"header-row",HEADER_CELL:"header-cell",ROWS_VIEWPORT:"rows-viewport",ROWS_SPACER:"rows-spacer",ROWS_CONTAINER:"rows",DATA_ROW:"data-row",GROUP_ROW:"group-row",DATA_CELL:"data-cell",SELECTED:"selected",FOCUSED:"focused",EDITING:"editing",EXPANDED:"expanded",COLLAPSED:"collapsed",DRAGGING:"dragging",RESIZING:"resizing",SORTABLE:"sortable",SORTED_ASC:"sorted-asc",SORTED_DESC:"sorted-desc",HIDDEN:"hidden",STICKY_LEFT:"sticky-left",STICKY_RIGHT:"sticky-right",PINNED_TOP:"pinned-top",PINNED_BOTTOM:"pinned-bottom",TREE_TOGGLE:"tree-toggle",TREE_INDENT:"tree-indent",GROUP_TOGGLE:"group-toggle",GROUP_LABEL:"group-label",GROUP_COUNT:"group-count",RANGE_SELECTION:"range-selection",SELECTION_OVERLAY:"selection-overlay"},R={FIELD:"data-field",GROUP_KEY:"data-group-key"},S={ROOT:`.${_.ROOT}`,HEADER:`.${_.HEADER}`,HEADER_ROW:`.${_.HEADER_ROW}`,HEADER_CELL:`.${_.HEADER_CELL}`,ROWS_VIEWPORT:`.${_.ROWS_VIEWPORT}`,ROWS_CONTAINER:`.${_.ROWS_CONTAINER}`,DATA_ROW:`.${_.DATA_ROW}`,DATA_CELL:`.${_.DATA_CELL}`,GROUP_ROW:`.${_.GROUP_ROW}`,CELL_BY_FIELD:e=>`.${_.DATA_CELL}[${R.FIELD}="${e}"]`,SELECTED_ROWS:`.${_.DATA_ROW}.${_.SELECTED}`,EDITING_CELL:`.${_.DATA_CELL}.${_.EDITING}`},E=/{{\s*([^}]+)\s*}}/g,x="__DG_EMPTY__",A=/^[\w$. '?+\-*/%:()!<>=,&|]+$/,T="__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(e=>e.split("").reverse().join("")),P=new RegExp(`__(proto|defineGetter|defineSetter)|${T.slice(3).join("|")}|this\\b`);const H=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("|")),M=/^on\w+$/i,k=new Set("href|src|action|formaction|data|srcdoc|xlink:href|poster|srcset".split("|")),L=/^\s*(javascript|vbscript|data|blob):/i;function O(e){if(!e||"string"!=typeof e)return"";if(-1===e.indexOf("<"))return e;const t=document.createElement("template");return t.innerHTML=e,function(e){const t=[],o=e.querySelectorAll("*");for(const i of o){const e=i.tagName.toLowerCase();if(H.has(e)){t.push(i);continue}if("svg"===e||"http://www.w3.org/2000/svg"===i.namespaceURI){if(Array.from(i.attributes).some(e=>M.test(e.name)||"href"===e.name||"xlink:href"===e.name)){t.push(i);continue}}const o=[];for(const t of i.attributes){const e=t.name.toLowerCase();M.test(e)?o.push(t.name):(k.has(e)&&L.test(t.value)||"style"===e&&/expression\s*\(|javascript:|behavior\s*:/i.test(t.value))&&o.push(t.name)}o.forEach(e=>i.removeAttribute(e))}t.forEach(e=>e.remove())}(t.content),t.innerHTML}function D(e,t){const o=function(e){const t=[];let o=0;for(;o<e.length;){const i=e[o];if(" "!==i){if(i>="0"&&i<="9"||"."===i&&o+1<e.length&&e[o+1]>="0"&&e[o+1]<="9"){const i=o;for(;o<e.length&&(e[o]>="0"&&e[o]<="9"||"."===e[o]);)o++;t.push({type:"num",v:Number(e.slice(i,o))});continue}if("'"===i){let i="";for(o++;o<e.length&&"'"!==e[o];)i+=e[o++];if(o>=e.length)return null;o++,t.push({type:"str",v:i});continue}if(i>="a"&&i<="z"||i>="A"&&i<="Z"||"_"===i||"$"===i){const i=o;for(;o<e.length&&/[\w$.]/.test(e[o]);)o++;t.push({type:"id",v:e.slice(i,o)});continue}if(o+2<e.length){const i=e.slice(o,o+3);if("==="===i||"!=="===i){t.push({type:"op",v:i}),o+=3;continue}}if(o+1<e.length){const i=e.slice(o,o+2);if("=="===i||"!="===i||"<="===i||">="===i||"&&"===i||"||"===i){t.push({type:"op",v:i}),o+=2;continue}}if(!"+-*/%<>!?:(),".includes(i))return null;t.push({type:"op",v:i}),o++}else o++}return t}(e);if(!o)return;const i=o;let n=0;function r(){return i[n]}function s(){return i[n++]}function l(e,t){const o=r();return!!o&&(o.type===e&&(void 0===t||o.v===t))}function a(){const e=function(){let e=c();for(;l("op","||");)s(),e=e||c();return e}();if(l("op","?")){s();const t=a();if(!l("op",":"))return;s();const o=a();return e?t:o}return e}function c(){let e=d();for(;l("op","&&");)s(),e=e&&d();return e}function d(){let e=h();for(;;){const t=r();if(!t||"op"!==t.type)break;if("==="===t.v)s(),e=e===h();else if("!=="===t.v)s(),e=e!==h();else if("=="===t.v)s(),e=e==h();else{if("!="!==t.v)break;s(),e=e!=h()}}return e}function h(){let e=u();for(;;){const t=r();if(!t||"op"!==t.type)break;if("<"===t.v)s(),e=e<u();else if(">"===t.v)s(),e=e>u();else if("<="===t.v)s(),e=e<=u();else{if(">="!==t.v)break;s(),e=e>=u()}}return e}function u(){let e=g();for(;;){const t=r();if(!t||"op"!==t.type)break;if("+"===t.v)s(),e+=g();else{if("-"!==t.v)break;s(),e-=g()}}return e}function g(){let e=f();for(;;){const t=r();if(!t||"op"!==t.type)break;if("*"===t.v)s(),e*=f();else if("/"===t.v)s(),e/=f();else{if("%"!==t.v)break;s(),e%=f()}}return e}function f(){return l("op","!")?(s(),!f()):p()}function p(){const e=r();if(e){if("num"===e.type)return s(),e.v;if("str"===e.type)return s(),e.v;if("id"===e.type)return s(),function(e){if("value"===e)return t.value;if(e.startsWith("row.")){const o=e.slice(4);return t.row?t.row[o]:void 0}return"row"===e?t.row:void 0}(e.v);if("op"===e.type&&"("===e.v){s();const e=a();return l("op",")")&&s(),e}return"op"===e.type&&"-"===e.v?(s(),-p()):void 0}}const w=a();return n<i.length?void 0:w}function I(e,t){if(!e||-1===e.indexOf("{{"))return e;const o=[],i=e.replace(E,(e,i)=>{const n=function(e,t){if(e=(e||"").trim(),!e)return x;if(z.test(e))return x;if("value"===e)return null==t.value?x:String(t.value);if(e.startsWith("row.")&&!/[()?]/.test(e)&&!e.includes(":")){const o=e.slice(4),i=t.row?t.row[o]:void 0;return null==i?x:String(i)}if(e.length>80)return x;if(!A.test(e)||P.test(e))return x;const o=e.match(/\./g);if(o&&o.length>1)return x;try{const o=D(e,t),i=null==o?"":String(o);return z.test(i)?x:i||x}catch{return x}}(i,t);return o.push({expr:i.trim(),result:n}),n}),n=(r=i)?r.replace(new RegExp(x,"g"),"").replace(/Reflect\.[^<>{}\s]+|\bProxy\b|ownKeys\([^)]*\)/g,""):r;var r;const s=o.length&&o.every(e=>""===e.result||e.result===x);return z.test(e)||s?"":n}const z=/Reflect|Proxy|ownKeys/;function N(e){if(z.test(e.textContent||"")){for(const t of e.childNodes)t.nodeType===Node.TEXT_NODE&&z.test(t.textContent||"")&&(t.textContent="");z.test(e.textContent||"")&&(e.textContent="")}}function q(e){if(z.test(e)){const e=()=>"";return e.__blocked=!0,e}const t=t=>I(e,t);return t.__blocked=!1,t}function F(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}const $=new WeakMap;function W(e,t,o=-1){if(!t.valueAccessor)return e?.[t.field];if("object"!=typeof e||null===e)return t.valueAccessor({row:e,column:t,rowIndex:o});const i=e,n=t.field;let r=$.get(i);if(r){const e=r.get(n);if(void 0!==e)return e.v}else r=new Map,$.set(i,r);const s=t.valueAccessor({row:e,column:t,rowIndex:o});return r.set(n,{v:s}),s}function B(e,t){e&&(t?$.get(e)?.delete(t):$.delete(e))}function V(e,t,o){const i=o.find(e=>e.field===t.field),n=i?.sortComparator,{field:r,direction:s}=t,l=[...e];return n?i?.valueAccessor?l.sort((e,t)=>n(W(e,i),W(t,i),e,t)*s):l.sort((e,t)=>n(e[r],t[r],e,t)*s):i?.valueAccessor?G(l,i,s):U(l,r,s),l}function U(e,t,o){e.sort((e,i)=>{const n=j(e,i);if(0!==n)return n;const r=e[t],s=i[t];return null==r&&null==s?0:null==r?-o:null==s||r>s?o:r<s?-o:0})}function G(e,t,o){e.sort((e,i)=>{const n=j(e,i);if(0!==n)return n;const r=W(e,t),s=W(i,t);return null==r&&null==s?0:null==r?-o:null==s||r>s?o:r<s?-o:0})}function j(e,t){const o=!0===e?.__loading;return o===(!0===t?.__loading)?0:o?1:-1}function Y(e,t,o,i){const n=i.find(e=>e.field===t),r=n?.sortComparator;r?n?.valueAccessor?e.sort((e,t)=>r(W(e,n),W(t,n),e,t)*o):e.sort((e,i)=>r(e[t],i[t],e,i)*o):n?.valueAccessor?G(e,n,o):U(e,t,o)}function X(e,t,o,i){e._rows=t,e.__rowRenderEpoch++;for(let n=0;n<e._rowPool.length;n++)e._rowPool[n].__epoch=-1;re(e),e.refreshVirtualWindow(!0),K(e,o,i)}function K(e,t,o){const i={field:t.field,direction:o};e.dispatchEvent(new CustomEvent("sort-change",{detail:i})),e._pluginManager?.emitPluginEvent?.("sort-change",i),r(e,s(e,0===o?"sortCleared":"sortApplied",t.header??t.field,1===o?"ascending":"descending")),e.requestStateChange?.()}function Z(e){return e._pluginManager?._hasRowStructurePlugins??!1}function Q(e,t){if(e._sortState&&e._sortState.field===t.field)if(1===e._sortState.direction)J(e,t,-1);else{if(e._sortState=null,Z(e))return e._requestSchedulerPhase(4,"sort-clear"),void K(e,t,0);e.__rowRenderEpoch++;for(let t=0;t<e._rowPool.length;t++)e._rowPool[t].__epoch=-1;e._rows=e.__originalOrder.slice(),e.__originalOrder=[],re(e);const o=e._headerRowEl?.querySelectorAll('[role="columnheader"].sortable');if(o)for(let t=0;t<o.length;t++){const i=o[t];i.getAttribute("aria-sort")&&("ascending"!==i.getAttribute("aria-sort")&&"descending"!==i.getAttribute("aria-sort")||e._sortState)||i.setAttribute("aria-sort","none")}e.refreshVirtualWindow(!0),K(e,t,0)}else e._sortState||(e.__originalOrder=e._rows.slice()),J(e,t,1)}function J(e,t,o){if(e._sortState={field:t.field,direction:o},Z(e))return e._requestSchedulerPhase(4,"sort-apply"),void K(e,t,o);const i={field:t.field,direction:o},n=e._columns,r=e.effectiveConfig?.sortHandler??V;if(r===V)return Y(e._rows,i.field,o,n),void X(e,e._rows,t,o);const s=r(e._rows,i,n);s&&"function"==typeof s.then?s.then(i=>{X(e,i,t,o)}):X(e,s,t,o)}function ee(e,t){return!1!==e.effectiveConfig?.sortable&&!0===t.sortable}function te(e,t){return!1!==e.effectiveConfig?.resizable&&!1!==t.resizable}function oe(e,t){const o=document.createElement("span");b(o,"sort-indicator");const i=e._sortState?.field===t.field?e._sortState.direction:0,n=1===i?"sortAsc":-1===i?"sortDesc":"sortNone";o.dataset.icon=F(n);const r=e.icons?.[n];return void 0!==r&&function(e,t){"string"==typeof t?e.innerHTML=O(t):t instanceof HTMLElement&&(e.innerHTML="",e.appendChild(t.cloneNode(!0)))}(o,r),o}function ie(e,t,o){const i=document.createElement("div");return i.className="resize-handle",i.setAttribute("aria-hidden","true"),i.addEventListener("mousedown",i=>{i.stopPropagation(),i.preventDefault(),e._resizeController.start(i,t,o)}),i.addEventListener("dblclick",o=>{o.stopPropagation(),o.preventDefault(),e._resizeController.resetColumn(t)}),i}function ne(e,t,o,i){i.classList.add(_.SORTABLE),i.tabIndex=0;const n=e._sortState?.field===t.field?e._sortState.direction:0;i.setAttribute("aria-sort",0===n?"none":1===n?"ascending":"descending"),i.addEventListener("click",o=>{e._resizeController?.isResizing||e._dispatchHeaderClick?.(o,t,i)||Q(e,t)}),i.addEventListener("keydown",o=>{if("Enter"===o.key||" "===o.key){if(o.preventDefault(),e._dispatchHeaderClick?.(o,t,i))return;Q(e,t)}})}function re(e){e._headerRowEl=e.findHeaderRow();const t=e._headerRowEl;t&&(t.innerHTML="",e._visibleColumns.forEach((o,i)=>{const n=document.createElement("div");n.className="cell",b(n,"header-cell"),n.setAttribute("role","columnheader"),n.setAttribute("aria-colindex",String(i+1)),n.setAttribute("data-field",o.field),n.setAttribute("data-col",String(i)),o.type&&n.setAttribute("data-type",o.type);const r=o.header??o.field,s=e._sortState?.field===o.field?e._sortState.direction:0,l=1===s?"asc":-1===s?"desc":null;if(o.headerRenderer){const t={column:o,value:r,sortState:l,filterActive:!1,cellEl:n,renderSortIcon:()=>ee(e,o)?oe(e,o):null,renderFilterButton:()=>null},s=o.headerRenderer(t);!function(e,t){if(null!=t)if("string"==typeof t){const o=document.createElement("span");for(o.innerHTML=O(t);o.firstChild;)e.appendChild(o.firstChild)}else t instanceof Node&&e.appendChild(t)}(n,s),ee(e,o)&&ne(e,o,0,n),te(e,o)&&(n.classList.add("resizable"),n.appendChild(ie(e,i,n)))}else if(o.headerLabelRenderer){const t={column:o,value:r},s=o.headerLabelRenderer(t),l=document.createElement("span");null==s?l.textContent=r:"string"==typeof s?l.innerHTML=O(s):s instanceof Node&&l.appendChild(s),n.appendChild(l),ee(e,o)&&(ne(e,o,0,n),n.appendChild(oe(e,o))),te(e,o)&&(n.classList.add("resizable"),n.appendChild(ie(e,i,n)))}else if(o.__headerTemplate)Array.from(o.__headerTemplate.childNodes).forEach(e=>n.appendChild(e.cloneNode(!0))),ee(e,o)&&(ne(e,o,0,n),n.appendChild(oe(e,o))),te(e,o)&&(n.classList.add("resizable"),n.appendChild(ie(e,i,n)));else{const t=document.createElement("span");t.textContent=r,n.appendChild(t),ee(e,o)&&(ne(e,o,0,n),n.appendChild(oe(e,o))),te(e,o)&&(n.classList.add("resizable"),n.appendChild(ie(e,i,n)))}t.appendChild(n)}),t.querySelectorAll(`.cell.${_.SORTABLE}`).forEach(e=>{e.getAttribute("aria-sort")||e.setAttribute("aria-sort","none")}),t.children.length>0?(t.setAttribute("role","row"),t.setAttribute("aria-rowindex","1")):(t.removeAttribute("role"),t.removeAttribute("aria-rowindex")))}function se(e,t){const o=e[0]||{},i=Object.keys(o).map(e=>{const t=o[e],i=null==(n=t)?"string":"number"==typeof n?"number":"boolean"==typeof n?"boolean":n instanceof Date||"string"==typeof n&&/\d{4}-\d{2}-\d{2}/.test(n)&&!isNaN(Date.parse(n))?"date":"string";var n;return{field:e,header:e.charAt(0).toUpperCase()+e.slice(1),type:i}}),n={};return i.forEach(e=>{n[e.field]=e.type||"string"}),{columns:i,typeMap:n}}const le={STYLE:1,VIRTUALIZATION:2,HEADER:3,ROWS:4,COLUMNS:5,FULL:6};class ae{#e;#t=0;#o=0;#i=null;#n=null;#r=null;#s=!1;constructor(e){this.#e=e}requestPhase(e,t){e>this.#t&&(this.#t=e),0===this.#o&&(this.#l(),this.#o=requestAnimationFrame(()=>this.#a()))}whenReady(){return this.#i?this.#i:Promise.resolve()}setInitialReadyResolver(e){this.#r=e}cancel(){0!==this.#o&&(cancelAnimationFrame(this.#o),this.#o=0),this.#t=0,this.#n&&(this.#n(),this.#n=null,this.#i=null)}get isPending(){return 0!==this.#t}get pendingPhase(){return this.#t}#l(){this.#i||(this.#i=new Promise(e=>{this.#n=e}))}#a(){if(this.#o=0,!this.#e._schedulerIsConnected)return this.#t=0,void(this.#n&&(this.#n(),this.#n=null,this.#i=null));const e=this.#t;this.#t=0,e>=le.COLUMNS&&this.#e._schedulerMergeConfig(),e>=le.ROWS&&this.#e._schedulerProcessRows(),e>=le.COLUMNS&&(this.#e._schedulerProcessColumns(),this.#e._schedulerUpdateTemplate()),e>=le.HEADER&&this.#e._schedulerRenderHeader(),e>=le.VIRTUALIZATION&&this.#e.refreshVirtualWindow(!0,!0),e>=le.STYLE&&this.#e._schedulerAfterRender(),!this.#s&&this.#r&&(this.#s=!0,this.#r()),this.#n&&(this.#n(),this.#n=null,this.#i=null)}}class ce{#c;#d;#h;#u;#g;#f={};#p={};#w=!0;#b=[];#m;#v;#C;#y;#e;#_;constructor(e){this.#e=e}get original(){return this.#f}get effective(){return this.#p}get columns(){return this.#p.columns??[]}set columns(e){this.#p.columns=e}get lightDomColumnsCache(){return this.#u}set lightDomColumnsCache(e){this.#u=e}get originalColumnNodes(){return this.#g}set originalColumnNodes(e){this.#g=e}get lightDomTitle(){return this.#_}set lightDomTitle(e){this.#_=e}get initialColumnState(){return this.#y}set initialColumnState(e){this.#y=e}get sourcesChanged(){return this.#w}markSourcesChanged(){this.#w=!0}setGridConfig(e){this.#c!==e&&(this.#c=e,this.#w=!0,this.#u=void 0)}getGridConfig(){return this.#c}setColumns(e){this.#d=e,this.#w=!0}getColumns(){return this.#d}setFitMode(e){this.#h=e,this.#w=!0}getFitMode(){return this.#h}merge(){const e=(this.#p.columns?.length??0)>0;if(!this.#w&&e)return;const t=this.#R();this.#w=!1,this.#f=t,Object.freeze(this.#f),this.#f.columns&&Object.freeze(this.#f.columns),this.#p=this.#S(this.#f),this.#E()}#S(e){const t={...e};return e.columns&&(t.columns=e.columns.map(e=>({...e}))),e.shell&&(t.shell={...e.shell,header:e.shell.header?{...e.shell.header}:void 0,toolPanel:e.shell.toolPanel?{...e.shell.toolPanel}:void 0,toolPanels:e.shell.toolPanels?.map(e=>({...e})),headerContents:e.shell.headerContents?.map(e=>({...e}))}),t}#E(){const e=this.#p;if(this.#x(),"number"==typeof e.rowHeight&&e.rowHeight>0&&(this.#e._virtualization.rowHeight=e.rowHeight),"fixed"===e.fitMode){this.columns.forEach(e=>{null==e.width&&(e.width=80)})}this.#e._applyAnimationConfig(e)}#x(){const e=this.#p.typeDefaults;if(!e)return;const t=this.columns;for(const o of t){if(!o.type)continue;const t=e[o.type];t&&(o.renderer||o.viewRenderer||!t.renderer||(o.renderer=t.renderer),!o.format&&t.format&&(o.format=t.format),!o.editor&&t.editor&&(o.editor=t.editor),!o.editorParams&&t.editorParams&&(o.editorParams=t.editorParams))}}#R(){const e=this.#c?{...this.#c}:{},t=Array.isArray(e.columns)?[...e.columns]:[],o=(this.#u??[]).map(e=>({...e}));let i=w(t,o);this.#d&&this.#d.length&&(i=w(this.#d,o));const n=this.#e.sourceRows;if(0===i.length&&n.length){i=se(n).columns}return i.length&&(i.forEach(e=>{void 0===e.sortable&&(e.sortable=!0),void 0===e.resizable&&(e.resizable=!0),void 0===e.__originalWidth&&"number"==typeof e.width&&(e.__originalWidth=e.width)}),i.forEach(e=>{e.__viewTemplate&&!e.__compiledView&&(e.__compiledView=q(e.__viewTemplate.innerHTML)),e.__editorTemplate&&!e.__compiledEditor&&(e.__compiledEditor=q(e.__editorTemplate.innerHTML))}),e.columns=i),this.#h&&(e.fitMode=this.#h),e.fitMode||(e.fitMode="stretch"),this.#A(e),e.columnState&&!this.#y&&(this.#y=e.columnState),e}#A(e){e.shell=e.shell?{...e.shell}:{},e.shell.header=e.shell.header?{...e.shell.header}:{};const t=this.#e._shellState.lightDomTitle;t&&(this.#_=t),this.#_&&!e.shell.header.title&&(e.shell.header.title=this.#_);const o=this.#e._shellState.lightDomHeaderContent;o?.length>0&&(e.shell.header.lightDomContent=o),this.#e._shellState.hasToolButtonsContainer&&(e.shell.header.hasToolButtonsContainer=!0);const i=this.#e._shellState.toolPanels;if(i.size>0){const t=Array.from(i.values());t.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.toolPanels=t}const n=this.#e._shellState.headerContents;if(n.size>0){const t=Array.from(n.values());t.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.headerContents=t}const r=this.#e._shellState.toolbarContents,s=Array.from(r.values()),l=this.#c?.shell?.header?.toolbarContents??[],a=new Set(l.map(e=>e.id)),c=[...l];for(const d of s)a.has(d.id)||c.push(d);c.sort((e,t)=>(e.order??0)-(t.order??0)),e.shell.header.toolbarContents=c}collectState(e){const t=this.columns,o=this.#T();return{columns:t.map((t,i)=>{const n={field:t.field,order:i,visible:!t.hidden},r=t;void 0!==r.__renderedWidth?n.width=r.__renderedWidth:void 0!==t.width&&(n.width="string"==typeof t.width?parseFloat(t.width):t.width);const s=o.get(t.field);s&&(n.sort=s);for(const o of e)if(o.getColumnState){const e=o.getColumnState(t.field);e&&Object.assign(n,e)}return n})}}applyState(e,t){if(!e.columns||0===e.columns.length)return;const o=this.columns,i=new Map(e.columns.map(e=>[e.field,e])),n=o.map(e=>{const t=i.get(e.field);if(!t)return e;const o={...e};return void 0!==t.width&&(o.width=t.width,o.__renderedWidth=t.width),void 0!==t.visible&&(o.hidden=!t.visible),o});n.sort((e,t)=>(i.get(e.field)?.order??1/0)-(i.get(t.field)?.order??1/0)),this.columns=n;const r=e.columns.filter(e=>void 0!==e.sort).sort((e,t)=>(e.sort?.priority??0)-(t.sort?.priority??0));if(r.length>0){const e=r[0];e.sort&&(this.#e._sortState={field:e.field,direction:"asc"===e.sort.direction?1:-1})}else this.#e._sortState=null;for(const s of t)if(s.applyColumnState)for(const t of e.columns)s.applyColumnState(t.field,t)}resetState(e){this.#y=void 0,this.#e._sortState=null,this.#p=this.#S(this.#f),this.#E();for(const t of e)if(t.applyColumnState)for(const e of this.columns)t.applyColumnState(e.field,{field:e.field,order:0,visible:!0});this.requestStateChange(e)}#T(){const e=new Map,t=this.#e._sortState;return t&&e.set(t.field,{direction:1===t.direction?"asc":"desc",priority:0}),e}requestStateChange(e){this.#v&&clearTimeout(this.#v),this.#v=setTimeout(()=>{this.#v=void 0;const t=this.collectState(e);this.#e._emit("column-state-change",t)},100)}setColumnVisible(e,t){const o=this.columns,i=o.find(t=>t.field===e);if(!i)return!1;if(!t&&i.lockVisible)return!1;if(!t){if(0===o.filter(t=>!t.hidden&&t.field!==e).length)return!1}return!!i.hidden!=!t&&(i.hidden=!t,this.#e._emit("column-visibility",{field:e,visible:t,visibleColumns:o.filter(e=>!e.hidden).map(e=>e.field)}),this.#e._clearRowPool(),this.#e._setup(),!0)}toggleColumnVisibility(e){const t=this.columns.find(t=>t.field===e);return!!t&&this.setColumnVisible(e,!!t.hidden)}isColumnVisible(e){const t=this.columns.find(t=>t.field===e);return!!t&&!t.hidden}showAllColumns(){const e=this.columns;e.some(e=>e.hidden)&&(e.forEach(e=>e.hidden=!1),this.#e._emit("column-visibility",{visibleColumns:e.map(e=>e.field)}),this.#e._clearRowPool(),this.#e._setup())}getAllColumns(){return this.columns.map(e=>({field:e.field,header:e.header||e.field,visible:!e.hidden,lockVisible:e.lockVisible,utility:!0===e.utility}))}getColumnOrder(){return this.columns.map(e=>e.field)}setColumnOrder(e){if(!e.length)return;const t=new Map(this.columns.map(e=>[e.field,e])),o=[];for(const i of e){const e=t.get(i);e&&(o.push(e),t.delete(i))}for(const i of t.values())o.push(i);this.columns=o,this.#e._invalidateVisibleColumnsCache(),re(this.#e),y(this.#e),this.#e._requestSchedulerPhase(le.COLUMNS,"configManager")}parseLightDomColumns(e){this.#u||(this.#g=Array.from(e.querySelectorAll("tbw-grid-column")),this.#u=this.#g.length?function(e){return Array.from(e.querySelectorAll("tbw-grid-column")).map(e=>{const t=e.getAttribute("field")||"";if(!t)return null;const o=e.getAttribute("type")||void 0,i={field:t,type:o&&new Set(["number","string","date","boolean","select"]).has(o)?o:void 0,header:e.getAttribute("header")||void 0,sortable:e.hasAttribute("sortable"),editable:e.hasAttribute("editable")},n=e.getAttribute("width");if(n){const e=parseFloat(n);!isNaN(e)&&/^\d+(\.\d+)?$/.test(n.trim())?i.width=e:i.width=n}const r=e.getAttribute("minWidth")||e.getAttribute("min-width");if(r){const e=parseFloat(r);isNaN(e)||(i.minWidth=e)}e.hasAttribute("resizable")&&(i.resizable=!0);const s=e.getAttribute("editor"),l=e.getAttribute("renderer");s&&(i.__editorName=s),l&&(i.__rendererName=l);const a=e.getAttribute("options");a&&(i.options=a.split(",").map(e=>{const[t,o]=e.includes(":")?e.split(":"):[e.trim(),e.trim()];return{value:t.trim(),label:o?.trim()||t.trim()}}));const c=e.querySelector("tbw-grid-column-view"),d=e.querySelector("tbw-grid-column-editor"),h=e.querySelector("tbw-grid-column-header");c&&(i.__viewTemplate=c),d&&(i.__editorTemplate=d),h&&(i.__headerTemplate=h);const u=globalThis.DataGridElement,g=u?.getAdapters?.()??[],f=c??e,p=g.find(e=>e.canHandle(f));if(p){const e=p.createRenderer(f);e&&(i.viewRenderer=e)}const w=d??e,b=g.find(e=>e.canHandle(w));if(b){const e=b.createEditor(w);e&&(i.editor=e)}return i}).filter(e=>!!e)}(e):[])}clearLightDomCache(){this.#u=void 0}#P=new Map;registerLightDomHandler(e,t){this.#P.set(e.toLowerCase(),t)}unregisterLightDomHandler(e){this.#P.delete(e.toLowerCase())}observeLightDOM(e){this.#m&&this.#m.disconnect();const t=new Set,o=()=>{this.#C=void 0;for(const e of t){const t=this.#P.get(e);t?.()}t.clear()};this.#m=new MutationObserver(e=>{for(const o of e){for(const e of o.addedNodes){if(e.nodeType!==Node.ELEMENT_NODE)continue;const o=e.tagName.toLowerCase();this.#P.has(o)&&t.add(o)}if("attributes"===o.type&&o.target.nodeType===Node.ELEMENT_NODE){const e=o.target.tagName.toLowerCase();this.#P.has(e)&&t.add(e)}}t.size>0&&!this.#C&&(this.#C=setTimeout(o,0))}),this.#m.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["title","field","header","width","hidden","id","icon","tooltip","order"]})}onChange(e){this.#b.push(e)}notifyChange(){for(const e of this.#b)e()}dispose(){this.#m?.disconnect(),this.#b=[],this.#v&&clearTimeout(this.#v),this.#C&&(clearTimeout(this.#C),this.#C=void 0)}}function de(e){const t=document.createElement("div");return t.className="tbw-empty-message",t.textContent=e.filteredOut?"No matching rows":"No data to display",t}function he(e,t,o="rows"){const i=document.createElement("div");return i.className="tbw-empty-overlay",i.setAttribute("role","status"),i.setAttribute("aria-live","polite"),i.setAttribute("data-overlay-target",o),i.appendChild(function(e,t){const o=(t??de)(e);if("string"==typeof o){const e=document.createElement("div");return e.className="tbw-empty-message",e.innerHTML=O(o),e}return o}(e,t)),i}function ue(e){e?.remove()}function ge(){if("undefined"!=typeof window&&window.location){const e=window.location.hostname;if("localhost"===e||"127.0.0.1"===e||"::1"===e)return!0}return"undefined"!=typeof process&&"production"!==process.env?.NODE_ENV}function fe(e){return`<span role="checkbox" aria-checked="${e}" aria-label="${e}">${e?"&#x1F5F9;":"&#9744;"}</span>`}function pe(e){if(null==e||""===e)return"";if(e instanceof Date)return isNaN(e.getTime())?"":e.toLocaleDateString();if("number"==typeof e||"string"==typeof e){const t=new Date(e);return isNaN(t.getTime())?"":t.toLocaleDateString()}return""}function we(e){if(!e)return-1;const t=e.getAttribute("data-row");if(t)return parseInt(t,10);const o=e.closest(".data-grid-row");if(!o)return-1;const i=o.parentElement;if(!i)return-1;const n=i.querySelectorAll(":scope > .data-grid-row");for(let r=0;r<n.length;r++)if(n[r]===o)return r;return-1}function be(e){e&&e.querySelectorAll(".cell-focus").forEach(e=>e.classList.remove("cell-focus"))}function me(e){return"rtl"===function(e){try{if("rtl"===getComputedStyle(e).direction)return"rtl"}catch{}try{const t=e.closest?.("[dir]")?.getAttribute("dir");if("rtl"===t)return"rtl"}catch{}return"ltr"}(e)}function ve(e,t){const o=t.renderer||t.viewRenderer;if(o)return o;if(!t.type)return;const i=e.__frameworkAdapter;if(i?.getTypeDefault){const o=i.getTypeDefault(t.type,e._hostElement);if(o?.renderer)return o.renderer}}function Ce(e,t){if(t.format)return t.format;if(!t.type)return;const o=e.__frameworkAdapter;if(o?.getTypeDefault){const i=o.getTypeDefault(t.type,e._hostElement);if(i?.format)return i.format}}const ye='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])';function _e(e){return(e.__editingCellCount??0)>0}function Re(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing");e.querySelectorAll(`.cell.${_.EDITING}`).forEach(e=>e.classList.remove(_.EDITING))}const Se=document.createElement("template");Se.innerHTML='<div class="cell" role="gridcell" part="cell"></div>';const Ee=document.createElement("template");function xe(){return Se.content.firstElementChild.cloneNode(!0)}function Ae(){return Ee.content.firstElementChild.cloneNode(!0)}function Te(e){e.__cellDisplayCache=void 0,e.__cellCacheEpoch=void 0,e.__hasSpecialColumns=void 0}function Pe(e,t,o,i){const n=t.children,r=e._visibleColumns,s=r.length,l=n.length,a=s<l?s:l,h=e._focusRow,u=e._focusCol,g=e._hasAfterCellRenderHook?.()??!1;let p=e.__hasSpecialColumns;if(void 0===p){p=!1;const t=e.__frameworkAdapter;for(let o=0;o<s;o++){const i=r[o];if(i.__viewTemplate||i.__compiledView||i.renderer||i.viewRenderer||i.externalView||i.format||i.cellClass||"date"===i.type||"boolean"===i.type||i.type&&t?.getTypeDefault?.(i.type,e._hostElement)?.renderer||i.type&&t?.getTypeDefault?.(i.type,e._hostElement)?.format){p=!0;break}}e.__hasSpecialColumns=p}const w=String(i);if(p){for(let s=0;s<a;s++){if(r[s].externalView){if(!n[s].querySelector("[data-external-view]"))return void He(e,t,o,i)}}for(let s=0;s<a;s++){const l=r[s],a=n[s];a.getAttribute("data-row")!==w&&a.setAttribute("data-row",w);const p=a.classList.contains(_.EDITING);if(!p){const e=h===i&&u===s;e!==a.classList.contains("cell-focus")&&(a.classList.toggle("cell-focus",e),a.setAttribute("aria-selected",String(e)))}const m=l.cellClass;if(m){const t=a.getAttribute("data-dynamic-classes");if(t){const e=t.split(" ");for(let t=0;t<e.length;t++)e[t]&&a.classList.remove(e[t])}try{const e=m(W(o,l,i),o,l),t="string"==typeof e?e.split(/\s+/):e;if(t&&t.length>0){let e="";for(let o=0;o<t.length;o++){const i=t[o];i&&"string"==typeof i&&(a.classList.add(i),e+=(e?" ":"")+i)}a.setAttribute("data-dynamic-classes",e)}else a.removeAttribute("data-dynamic-classes")}catch(b){f(c,`cellClass callback error for column '${l.field}': ${b}`,e.id),a.removeAttribute("data-dynamic-classes")}}if(p)continue;const v=ve(e,l);if(v){const n=W(o,l,i),r=v({row:o,value:n,field:l.field,column:l,grid:e,cellEl:a});"string"==typeof r?(e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=O(r)):r instanceof Node?r.parentElement!==a&&(e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML="",a.appendChild(r)):null==r&&(e.__frameworkAdapter?.releaseCell?.(a),a.textContent=null==n?"":String(n)),g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:n,cellElement:a,rowElement:t});continue}if(l.__compiledView){const n=W(o,l,i),r=l.__compiledView({row:o,value:n,field:l.field,column:l});l.__compiledView.__blocked?a.textContent="":(a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=O(r),N(a)),g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:n,cellElement:a,rowElement:t});continue}if(l.__viewTemplate){const n=W(o,l,i),r=l.__viewTemplate.innerHTML;/Reflect\.|\bProxy\b|ownKeys\(/.test(r)?a.textContent="":(a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=O(I(r,{row:o,value:n})),N(a)),g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:n,cellElement:a,rowElement:t});continue}if(l.externalView)continue;const C=W(o,l,i);let y;a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a);const R=Ce(e,l);if(R){try{const e=R(C,o);y=null==e?"":String(e)}catch(b){f(d,`Format error in column '${l.field}': ${b}`,e.id),y=null==C?"":String(C)}a.textContent=y}else"date"===l.type?(y=pe(C),a.textContent=y):"boolean"===l.type?a.innerHTML=fe(!!C):(y=null==C?"":String(C),a.textContent=y);g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:C,cellElement:a,rowElement:t})}}else for(let c=0;c<a;c++){const s=n[c];if(s.classList.contains(_.EDITING))continue;s.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(s);const l=r[c],a=W(o,l,i);s.textContent=null==a?"":String(a),s.getAttribute("data-row")!==w&&s.setAttribute("data-row",w);const d=h===i&&u===c;d!==s.classList.contains("cell-focus")&&(s.classList.toggle("cell-focus",d),s.setAttribute("aria-selected",String(d))),g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:c,value:a,cellElement:s,rowElement:t})}}function He(e,t,o,i){t.classList.remove("tbw-row-loading"),t.removeAttribute("aria-busy");const n=e.__frameworkAdapter;if(n?.releaseCell){n.beginBatch?.(e);try{const e=t.children;for(let t=e.length-1;t>=0;t--)n.releaseCell(e[t]);t.innerHTML=""}finally{n.endBatch?.(e)}}else t.innerHTML="";const r=e._visibleColumns,s=r.length,l=e._focusRow,a=e._focusCol,h=e._hasAfterCellRenderHook?.()??!1,u=document.createDocumentFragment();for(let p=0;p<s;p++){const n=r[p],s=xe();s.setAttribute("aria-colindex",String(p+1)),s.setAttribute("data-col",String(p)),s.setAttribute("data-row",String(i)),s.setAttribute("data-field",n.field),s.setAttribute("data-header",n.header??n.field),n.type&&s.setAttribute("data-type",n.type);let w=W(o,n,i);const b=Ce(e,n);if(b)try{w=b(w,o)}catch(g){f(d,`Format error in column '${n.field}': ${g}`,e.id)}const m=n.__compiledView,v=n.__viewTemplate,C=ve(e,n),y=n.externalView;let _=!1;if(C){const t=C({row:o,value:w,field:n.field,column:n,grid:e,cellEl:s});"string"==typeof t?(s.innerHTML=O(t),_=!0):t instanceof Node?t.parentElement!==s&&(s.textContent="",s.appendChild(t)):null==t&&(s.textContent=null==w?"":String(w))}else if(y){const t=y,i=document.createElement("div");i.setAttribute("data-external-view",""),i.setAttribute("data-field",n.field),s.appendChild(i);const r={row:o,value:w,field:n.field,column:n,grid:e};if(t.mount)try{t.mount({placeholder:i,context:r,spec:t})}catch(g){f("TBW063",`External view mount error for column '${n.field}': ${g}`,e.id)}else queueMicrotask(()=>{try{e.dispatchEvent(new CustomEvent("mount-external-view",{bubbles:!0,composed:!0,detail:{placeholder:i,spec:t,context:r}}))}catch(g){f("TBW064",`External view event dispatch error for column '${n.field}': ${g}`,e.id)}});i.setAttribute("data-mounted","")}else if(m){const e=m({row:o,value:w,field:n.field,column:n}),t=m.__blocked;s.innerHTML=t?"":O(e),_=!0,t&&(s.textContent="",s.setAttribute("data-blocked-template",""))}else if(v){const e=v.innerHTML;/Reflect\.|\bProxy\b|ownKeys\(/.test(e)?(s.textContent="",s.setAttribute("data-blocked-template","")):(s.innerHTML=O(I(e,{row:o,value:w})),_=!0)}else b?s.textContent=null==w?"":String(w):"date"===n.type?s.textContent=pe(w):"boolean"===n.type?s.innerHTML=fe(!!w):s.textContent=null==w?"":String(w);if(_){N(s);const e=s.textContent||"";/Proxy|Reflect\.ownKeys/.test(e)&&(s.textContent=e.replace(/Proxy|Reflect\.ownKeys/g,"").trim(),/Proxy|Reflect\.ownKeys/.test(s.textContent||"")&&(s.textContent=""))}s.hasAttribute("data-blocked-template")&&(s.textContent||"").trim().length&&(s.textContent="");("function"==typeof n.editable?n.editable(o):n.editable)?s.tabIndex=0:"boolean"===n.type&&(s.hasAttribute("tabindex")||(s.tabIndex=0)),l===i&&a===p?(s.classList.add("cell-focus"),s.setAttribute("aria-selected","true")):s.setAttribute("aria-selected","false");const R=n.cellClass;if(R)try{const e=R(W(o,n,i),o,n),t="string"==typeof e?e.split(/\s+/):e;if(t&&t.length>0){let e="";for(const o of t)o&&"string"==typeof o&&(s.classList.add(o),e+=(e?" ":"")+o);s.setAttribute("data-dynamic-classes",e)}}catch(g){f(c,`cellClass callback error for column '${n.field}': ${g}`,e.id)}h&&e._afterCellRender?.({row:o,rowIndex:i,column:n,colIndex:p,value:w,cellElement:s,rowElement:t}),u.appendChild(s)}t.appendChild(u)}function Me(e,t,o){if(t.target?.closest(".resize-handle"))return;const i=we(o.querySelector(".cell[data-row]"));if(i<0)return;const n=e._rows[i];if(!n)return;if(e._dispatchRowClick?.(t,i,n,o))return;const r=t.target?.closest(".cell[data-col]");if(r){const o=Number(r.getAttribute("data-col"));if(!isNaN(o)){if(e._dispatchCellClick?.(t,i,o,r))return;const n=e._focusRow!==i||e._focusCol!==o;if(e._focusRow=i,e._focusCol=o,r.classList.contains(_.EDITING)){n&&(be(e._bodyEl??e),r.classList.add("cell-focus"));const o=t.target,i=r.contains(o)&&o.matches(ye)?o:r.querySelector(ye);try{i?.focus({preventScroll:!0})}catch{}return}Be(e)}}}function ke(e,t){return e&&"object"==typeof e?"__rowCacheKey"in e?e.__rowCacheKey:"rowId"in e&&null!=e.rowId?`id:${e.rowId}`:t?`id:${t(e)}`:e:e}function Le(e,t,o){const i=ke(t,o);return"string"==typeof i?e.byKey.get(i):i&&"object"==typeof i?e.byRef.get(i):void 0}function Oe(e,t,o){if(t<0||t>=e.length)return;const i=e[t],n=o-i.height;if(0!==n){i.height=o,i.measured=!0;for(let o=t+1;o<e.length;o++)e[o].offset+=n}}function De(e,t){if(0===e.length)return-1;if(t<=0)return 0;let o=0,i=e.length-1;for(;o<=i;){const n=Math.floor((o+i)/2),r=e[n],s=r.offset+r.height;if(t<r.offset)i=n-1;else{if(!(t>=s))return n;o=n+1}}return Math.max(0,Math.min(o,e.length-1))}function Ie(e,t){const{positionCache:o,heightCache:i,rows:n,start:r,end:s,getPluginHeight:l,getRowId:a}=e;let c=!1;t.forEach(e=>{const t=e.dataset.rowIndex;if(!t)return;const d=parseInt(t,10);if(d<r||d>=s||d>=n.length)return;const h=n[d],u=l?.(h,d);if(void 0!==u){const e=o[d];return void((!e.measured||Math.abs(e.height-u)>1)&&(Oe(o,d,u),c=!0))}const g=e.offsetHeight;if(g>0){const e=o[d];(!e.measured||Math.abs(e.height-g)>1)&&(Oe(o,d,g),function(e,t,o,i){const n=ke(t,i);"string"==typeof n?e.byKey.set(n,o):n&&"object"==typeof n&&e.byRef.set(n,o)}(i,h,g,a),c=!0)}});const d=c?function(e){let t=0;for(const o of e)o.measured&&t++;return t}(o):0,h=c?function(e,t){let o=0,i=0;for(const n of e)n.measured&&(o+=n.height,i++);return i>0?o/i:t}(o,e.defaultHeight):0;return{hasChanges:c,measuredCount:d,averageHeight:h}}Ee.innerHTML='<div class="data-grid-row" role="row" part="row"></div>';const ze=335e5;function Ne(e,t,o=335e5){return{rawContentHeight:e,spacerHeight:Math.min(e,o),viewportHeight:t,capped:e>o}}function qe(e,t){if(!t.capped)return e;const o=t.spacerHeight-t.viewportHeight,i=t.rawContentHeight-t.viewportHeight;if(o<=0||i<=0)return e;const n=e*i/o;return n<0?0:n>i?i:n}function Fe(e,t){if(!t.capped)return e;const o=t.spacerHeight-t.viewportHeight,i=t.rawContentHeight-t.viewportHeight;return o<=0||i<=0?e:e*o/i}function $e(e){"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit()}function We(e){if(!e)return!1;const t=e.tagName;return"INPUT"===t||"SELECT"===t||"TEXTAREA"===t||!!e.isContentEditable}function Be(e,t){if(e._virtualization?.enabled){const{rowHeight:t,container:o,viewportEl:i,scrollMapping:n}=e._virtualization,r=o,s=i?.clientHeight??r?.clientHeight??0;if(r&&s>0){const o=e._focusRow*t,i=n?qe(r.scrollTop,n):r.scrollTop;if(o<i)r.scrollTop=n?Fe(o,n):o;else if(o+t>i+s){const e=o-s+t;r.scrollTop=n?Fe(e,n):e}}}const o=void 0!==e._activeEditRows&&-1!==e._activeEditRows||!!e._isGridEditMode;o||e.refreshVirtualWindow(!1),be(e._bodyEl),Array.from(e._bodyEl.querySelectorAll('[aria-selected="true"]')).forEach(e=>{e.setAttribute("aria-selected","false")});const i=e._focusRow,n=e._virtualization.start??0,r=e._virtualization.end??e._rows.length;if(i>=n&&i<r){const r=e._bodyEl.querySelectorAll(".data-grid-row")[i-n];let s=r?.children[e._focusCol];if(s&&s.classList?.contains("cell")||(s=r?.querySelector(`.cell[data-col="${e._focusCol}"]`)??r?.querySelector(".cell[data-col]")),s){s.classList.add("cell-focus"),s.setAttribute("aria-selected","true");const i=e.querySelector(".tbw-scroll-area");if(i&&s&&(!o||t?.forceHorizontalScroll))if(t?.forceScrollLeft)i.scrollLeft=0;else if(t?.forceScrollRight)i.scrollLeft=i.scrollWidth-i.clientWidth;else{const t=e._getHorizontalScrollOffsets?.(r??void 0,s)??{left:0,right:0};if(!t.skipScroll){const e=s.getBoundingClientRect(),o=i.getBoundingClientRect(),n=e.left-o.left+i.scrollLeft,r=n+e.width,l=i.scrollLeft+t.left,a=i.scrollLeft+i.clientWidth-t.right;n<l?i.scrollLeft=n-t.left:r>a&&(i.scrollLeft=r-i.clientWidth+t.right)}}if(o&&s.classList.contains(_.EDITING)){const e=s.querySelector(ye);if(e&&document.activeElement!==e)try{e.focus({preventScroll:!0})}catch{}}else if(o&&!s.contains(document.activeElement)){s.hasAttribute("tabindex")||s.setAttribute("tabindex","-1");try{s.focus({preventScroll:!0})}catch{}}else if(!o){const t=document.activeElement;t instanceof HTMLElement&&t!==e&&"function"==typeof e.contains&&e.contains(t)&&!t.classList.contains("cell")&&!t.closest(".cell")||t===e||e.focus({preventScroll:!0})}}}}const Ve=new WeakMap;function Ue(e,t){const o=we(t),i=function(e){if(!e)return-1;const t=e.getAttribute("data-col");return t?parseInt(t,10):-1}(t);if(o<0||i<0)return;e._focusRow=o,e._focusCol=i,be(e._bodyEl),t.classList.add("cell-focus"),t.setAttribute("aria-selected","true");const n=t.closest("tbw-grid, [data-tbw-grid]");n&&document.activeElement!==n&&n.focus({preventScroll:!0})}function Ge(e,t,o,i){let n=null;const r=o.composedPath?.();if(n=r&&r.length>0?r[0]:o.target,n&&!t.contains(n)){const e=document.elementFromPoint(o.clientX,o.clientY);e&&(n=e)}const s=n?.closest?.("[data-col]"),l=n?.closest?.(".data-grid-row"),a=n?.closest?.(".header-row");let c,d,h,u,g,f;return s&&(c=parseInt(s.getAttribute("data-row")??"-1",10),d=parseInt(s.getAttribute("data-col")??"-1",10),c>=0&&d>=0&&(h=e._rows[c],f=e._visibleColumns[d],u=f?.field,g=h&&u?h[u]:void 0)),{type:i,row:h,rowIndex:void 0!==c&&c>=0?c:void 0,colIndex:void 0!==d&&d>=0?d:void 0,field:u,value:g,column:f,originalEvent:o,cellElement:s??void 0,rowElement:l??void 0,isHeader:!!a,cell:void 0!==c&&void 0!==d&&c>=0&&d>=0?{row:c,col:d}:void 0}}function je(e,t,o,i){t.addEventListener("keydown",t=>function(e,t){if(e._dispatchKeyDown?.(t))return;const o=e._rows.length-1,i=e._visibleColumns.length-1,n=void 0!==e._activeEditRows&&-1!==e._activeEditRows,r=e._visibleColumns[e._focusCol],s=r?.type,l=t.composedPath?.()??[],a=l.length?l[0]:t.target;if((!a||a===e||a.closest?.(".rows-body"))&&(!We(a)||"Home"!==t.key&&"End"!==t.key)&&!(We(a)&&("ArrowUp"===t.key||"ArrowDown"===t.key)&&"INPUT"===a.tagName&&"number"===a.type||We(a)&&("ArrowLeft"===t.key||"ArrowRight"===t.key)||We(a)&&("Enter"===t.key||"Escape"===t.key)||n&&"select"===s&&("ArrowDown"===t.key||"ArrowUp"===t.key))){switch(t.key){case"Tab":return t.preventDefault(),t.shiftKey?e._focusCol>0?e._focusCol-=1:e._focusRow>0&&(e._activeEditRows===e._focusRow&&$e(e),e._focusRow-=1,e._focusCol=i):e._focusCol<i?e._focusCol+=1:($e(e),e._focusRow<o&&(e._focusRow+=1,e._focusCol=0)),void Be(e);case"ArrowDown":n&&$e(e),e._focusRow=Math.min(o,e._focusRow+1),t.preventDefault();break;case"ArrowUp":n&&$e(e),e._focusRow=Math.max(0,e._focusRow-1),t.preventDefault();break;case"ArrowRight":{const o=me(e);e._focusCol=o?Math.max(0,e._focusCol-1):Math.min(i,e._focusCol+1),t.preventDefault();break}case"ArrowLeft":{const o=me(e);e._focusCol=o?Math.min(i,e._focusCol+1):Math.max(0,e._focusCol-1),t.preventDefault();break}case"Home":return t.ctrlKey||t.metaKey?(n&&$e(e),e._focusRow=0,e._focusCol=0):e._focusCol=0,t.preventDefault(),void Be(e,{forceScrollLeft:!0});case"End":return t.ctrlKey||t.metaKey?(n&&$e(e),e._focusRow=o,e._focusCol=i):e._focusCol=i,t.preventDefault(),void Be(e,{forceScrollRight:!0});case"PageDown":e._focusRow=Math.min(o,e._focusRow+20),t.preventDefault();break;case"PageUp":e._focusRow=Math.max(0,e._focusRow-20),t.preventDefault();break;case"Enter":{const o=e._focusRow,i=e._focusCol,n=e._visibleColumns[i],r=e._rows[o],s=n?.field??"",l=s&&r?r[s]:void 0,a=e.querySelector(`[data-row="${o}"][data-col="${i}"]`),c=new CustomEvent("cell-activate",{cancelable:!0,detail:{rowIndex:o,colIndex:i,column:n,field:s,value:l,row:r,cellEl:a,trigger:"keyboard",originalEvent:t}});if(e.dispatchEvent(c),c.defaultPrevented)return void t.preventDefault();break}default:return}Be(e)}}(e,t),{signal:i}),o.addEventListener("mousedown",t=>function(e,t,o){const i=Ge(e,t,o,"mousedown");e._dispatchCellMouseDown?.(i)&&Ve.set(e,!0)}(e,o,t),{signal:i}),document.addEventListener("mousemove",t=>function(e,t,o){if(!Ve.get(e))return;const i=Ge(e,t,o,"mousemove");e._dispatchCellMouseMove?.(i)}(e,o,t),{signal:i}),document.addEventListener("mouseup",t=>function(e,t,o){if(!Ve.get(e))return;const i=Ge(e,t,o,"mouseup");e._dispatchCellMouseUp?.(i),Ve.set(e,!1)}(e,o,t),{signal:i})}let Ye;class Xe{#e;#H=new Set;#M=new Map;#k=null;#L=null;constructor(e){this.#e=e,this.#O()}focusCell(e,t){const o=this.#e,i=o._rows.length-1;if(i<0)return;let n;if("string"==typeof t){if(n=o._visibleColumns.findIndex(e=>e.field===t),n<0)return}else n=t;const r=o._visibleColumns.length-1;r<0||(o._focusRow=Math.max(0,Math.min(e,i)),o._focusCol=Math.max(0,Math.min(n,r)),Be(o))}get focusedCell(){const e=this.#e;if(0===e._rows.length||0===e._visibleColumns.length)return null;const t=e._visibleColumns[e._focusCol];return{rowIndex:e._focusRow,colIndex:e._focusCol,field:t?.field??""}}scrollToRow(e,t){const o=this.#e._virtualization;if(!o.enabled)return;const i=o.container;if(!i)return;const n=this.#e._rows.length;if(0===n)return;const r=Math.max(0,Math.min(e,n-1)),s=t?.align??"nearest",l=t?.behavior??"instant";let a,c;const d=o.positionCache;o.variableHeights&&d&&d.length>r?(a=d[r].offset,c=d[r].height):(a=r*o.rowHeight,c=o.rowHeight);const h=o.viewportEl?.clientHeight??i.clientHeight??0;if(h<=0)return;const u=i.scrollTop,g=a+c,f=u+h;let p;switch(s){case"start":p=a;break;case"center":p=a-h/2+c/2;break;case"end":p=g-h;break;default:if(a>=u&&g<=f)return;p=a<u?a:g-h}p=Math.max(0,p);const w=Fe(p,o.scrollMapping);"smooth"===l?i.scrollTo({top:w,behavior:"smooth"}):i.scrollTop=w}scrollToRowById(e,t){const o=this.#e._getRowEntry(e);o&&this.scrollToRow(o.index,t)}registerExternalFocusContainer(e){if(this.#H.has(e))return;this.#H.add(e);const t=new AbortController,o=t.signal,i=this.#e;e.addEventListener("focusin",e=>{i.dataset.hasFocus="",this.#D(e.target)},{signal:o}),e.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&this.containsFocus(t)||delete i.dataset.hasFocus,null===t&&this.#I()},{signal:o}),this.#M.set(e,()=>t.abort())}unregisterExternalFocusContainer(e){this.#H.delete(e);const t=this.#M.get(e);t&&(t(),this.#M.delete(e))}containsFocus(e){const t=e??document.activeElement;return!!t&&(!!this.#e.contains(t)||this.isInExternalFocusContainer(t))}isInExternalFocusContainer(e){for(const t of this.#H)if(t.contains(e))return!0;return!1}#O(){const e=this.#e,t=new AbortController,o=t.signal;e.addEventListener("focusin",e=>this.#D(e.target),{signal:o,capture:!0}),e.addEventListener("focusout",e=>{null===e.relatedTarget&&this.#I()},{signal:o}),this.#L=()=>t.abort()}#D(e){if(!(e instanceof HTMLElement))return;if(e===this.#e)return;const t=e.closest?.(".cell");t&&!t.classList.contains("editing")||this.isInExternalFocusContainer(e)||(this.#k=e)}#I(){queueMicrotask(()=>{if(!this.#e.isConnected)return;document.activeElement===document.body&&this.restoreLastFocus()})}restoreLastFocus(){const e=this.#k;if(!e)return!1;if(!e.isConnected)return this.#k=null,!1;if(e===document.activeElement)return!0;try{e.focus({preventScroll:!0})}catch{return!1}return document.activeElement===e}get lastFocusedElement(){return this.#k?.isConnected?this.#k:null}destroy(){for(const e of this.#M.values())e();this.#M.clear(),this.#H.clear(),this.#L?.(),this.#L=null,this.#k=null}}const Ke="function"==typeof requestIdleCallback;function Ze(e){Ke?cancelIdleCallback(e):clearTimeout(e)}function Qe(e,t){if(t){const o=t({size:e});if("string"==typeof o){const e=document.createElement("div");return e.innerHTML=o,e}return o}return function(e){const t=document.createElement("div");return t.className=`tbw-spinner tbw-spinner--${e}`,t.setAttribute("role","progressbar"),t.setAttribute("aria-label","Loading"),t}(e)}function Je(e){let t=null,o=null,i=null,n=null;const r=i=>{if(!t)return;const n=i.clientX-t.startX,r=Math.max(40,t.startWidth+n),s=e._visibleColumns[t.colIndex];s.width=r,s.__userResized=!0,s.__renderedWidth=r,null==o&&(o=requestAnimationFrame(()=>{o=null,e.updateTemplate?.()})),e.dispatchEvent(new CustomEvent("column-resize",{detail:{field:s.field,width:r}}))};let s=!1;const l=()=>{const o=null!==t;o&&(s=!0,requestAnimationFrame(()=>{s=!1})),window.removeEventListener("mousemove",r),window.removeEventListener("mouseup",l),null!==i&&(document.documentElement.style.cursor=i,i=null),null!==n&&(document.body.style.userSelect=n,n=null),t=null,o&&e.requestStateChange&&e.requestStateChange()};return{get isResizing(){return null!==t||s},start(o,s,a){o.preventDefault();const c=e._headerRowEl??e.findHeaderRow?.();c&&function(t,o){const i=o.querySelectorAll(".cell");for(let n=0;n<e._visibleColumns.length;n++){if(n===t)continue;const o=e._visibleColumns[n];if(null==o.width&&!o.__userResized){const e=i[n],t=e?.getBoundingClientRect().width;t&&(o.width=Math.round(t),o.__userResized=!0,o.__renderedWidth=o.width)}}}(s,c);const d=e._visibleColumns[s],h="number"==typeof d?.width?d.width:void 0,u=d?.__renderedWidth??h??a.getBoundingClientRect().width;t={startX:o.clientX,colIndex:s,startWidth:u},window.addEventListener("mousemove",r),window.addEventListener("mouseup",l),null===i&&(i=document.documentElement.style.cursor),document.documentElement.style.cursor="e-resize",null===n&&(n=document.body.style.userSelect),document.body.style.userSelect="none"},resetColumn(t){const o=e._visibleColumns[t];o&&(o.__userResized=!1,o.__renderedWidth=void 0,o.width=o.__originalWidth,e.updateTemplate?.(),e.requestStateChange?.(),e.dispatchEvent(new CustomEvent("column-resize-reset",{detail:{field:o.field,width:o.width}})))},dispose(){l()}}}const et="data-animating",tt={change:"--tbw-row-change-duration",insert:"--tbw-row-insert-duration",remove:"--tbw-row-remove-duration"},ot={change:500,insert:300,remove:200};function it(e,t){const o=tt[t],i=getComputedStyle(e).getPropertyValue(o);if(i){const e=function(e){const t=e.trim().toLowerCase();return t.endsWith("ms")?parseFloat(t):t.endsWith("s")?1e3*parseFloat(t):parseFloat(t)}(i);if(!isNaN(e)&&e>0)return e}return ot[t]}function nt(e,t,o){if(t<0)return Promise.resolve(!1);const i=e.findRenderedRowElement?.(t);return i?new Promise(e=>{!function(e,t,o){e.removeAttribute(et),e.offsetWidth,e.setAttribute(et,t);const i=it(e,t);setTimeout(()=>{"remove"!==t&&e.removeAttribute(et),o?.()},i)}(i,o,()=>e(!0))}):Promise.resolve(!1)}function rt(e,t){if(t)return t(e);const o=e;return"id"in o&&null!=o.id?String(o.id):"_id"in o&&null!=o._id?String(o._id):void 0}function st(e,t,o){const i=rt(e,o);return void 0===i&&g("TBW040",'Cannot determine row ID. Configure getRowId in gridConfig or ensure rows have an "id" property.',t),i}class lt{#e;constructor(e){this.#e=e}resolveRowId(e){return st(e,this.#e.id,this.#e.effectiveConfig?.getRowId)}getRow(e){return this.#e._getRowEntry(e)?.row}getRowEntry(e){return this.#e._getRowEntry(e)}updateRow(e,t,o="api"){const i=this.#e,n=i._getRowEntry(e);n||g(a,`Row with ID "${e}" not found. Ensure the row exists and getRowId is correctly configured.`,i.id);const{row:r,index:s}=n,l=[];for(const[a,c]of Object.entries(t)){const e=r[a];e!==c&&(l.push({field:a,oldValue:e,newValue:c}),r[a]=c,B(r,a))}for(const{field:a,oldValue:c,newValue:d}of l)i.dispatchEvent(new CustomEvent("cell-change",{detail:{row:r,rowId:e,rowIndex:s,field:a,oldValue:c,newValue:d,changes:t,source:o},bubbles:!0,composed:!0}));l.length>0&&(Te(i),i._requestSchedulerPhase(le.VIRTUALIZATION,"updateRow"),i._emitDataChange())}updateRows(e,t="api"){const o=this.#e;let i=!1;for(const{id:n,changes:r}of e){const e=o._getRowEntry(n);e||g(a,`Row with ID "${n}" not found. Ensure the row exists and getRowId is correctly configured.`,o.id);const{row:s,index:l}=e;for(const[a,c]of Object.entries(r)){const e=s[a];e!==c&&(i=!0,s[a]=c,B(s,a),o.dispatchEvent(new CustomEvent("cell-change",{detail:{row:s,rowId:n,rowIndex:l,field:a,oldValue:e,newValue:c,changes:r,source:t},bubbles:!0,composed:!0})))}}i&&(Te(o),o._requestSchedulerPhase(le.VIRTUALIZATION,"updateRows"),o._emitDataChange())}async insertRow(e,t,o=!0){const i=this.#e,n=Math.max(0,Math.min(e,i._rows.length));i.sourceRows=[...i.sourceRows,t];const r=[...i._rows];r.splice(n,0,t),i._rows=r,i._sortState&&(i.__originalOrder=[...i.__originalOrder,t]),Te(i),i._rebuildRowIdMap(),i.__rowRenderEpoch++;for(let s=0;s<i._rowPool.length;s++)i._rowPool[s].__epoch=-1;i.refreshVirtualWindow(!0),i._emitPluginEvent("row-inserted",{row:t,index:n}),i._emitDataChange(),o&&(await new Promise(e=>requestAnimationFrame(()=>e())),await nt(i,n,"insert"))}async removeRow(e,t=!0){const o=this.#e,i=o._rows[e];if(!i)return;t&&await nt(o,e,"remove");const n=o._rows.indexOf(i);if(n<0)return i;const r=[...o._rows];r.splice(n,1),o._rows=r;const s=o.sourceRows.indexOf(i);if(s>=0){const e=[...o.sourceRows];e.splice(s,1),o.sourceRows=e}if(o._sortState){const e=o.__originalOrder.indexOf(i);if(e>=0){const t=[...o.__originalOrder];t.splice(e,1),o.__originalOrder=t}}Te(o),o._rebuildRowIdMap(),o.__rowRenderEpoch++;for(let l=0;l<o._rowPool.length;l++)o._rowPool[l].__epoch=-1;return o.refreshVirtualWindow(!0),o._emitDataChange(),t&&requestAnimationFrame(()=>{const e=o.querySelectorAll('[data-animating="remove"]');for(let t=0;t<e.length;t++)e[t].removeAttribute("data-animating")}),i}async applyTransaction(e,t=!0){const o=this.#e,i={added:[],updated:[],removed:[]};if(e.remove?.length)for(const{id:l}of e.remove){const e=o._getRowEntry(l);if(!e)continue;const{row:n}=e;if(t){const e=o._rows.indexOf(n);e>=0&&await nt(o,e,"remove")}const r=o._rows.indexOf(n);if(r<0){i.removed.push(n);continue}const s=[...o._rows];s.splice(r,1),o._rows=s;const a=o.sourceRows.indexOf(n);if(a>=0){const e=[...o.sourceRows];e.splice(a,1),o.sourceRows=e}if(o._sortState){const e=o.__originalOrder.indexOf(n);if(e>=0){const t=[...o.__originalOrder];t.splice(e,1),o.__originalOrder=t}}i.removed.push(n)}const n=new Set(e.remove?.map(e=>e.id));if(e.update?.length)for(const{id:l,changes:a}of e.update){if(n.has(l))continue;const e=o._getRowEntry(l);if(!e)continue;const{row:t,index:r}=e;let s=!1;for(const[i,n]of Object.entries(a)){const e=t[i];e!==n&&(s=!0,t[i]=n,B(t,i),o.dispatchEvent(new CustomEvent("cell-change",{detail:{row:t,rowId:l,rowIndex:r,field:i,oldValue:e,newValue:n,changes:a,source:"api"},bubbles:!0,composed:!0})))}s&&i.updated.push(t)}if(e.add?.length)for(const l of e.add){o.sourceRows=[...o.sourceRows,l];const e=[...o._rows];e.push(l),o._rows=e,o._sortState&&(o.__originalOrder=[...o.__originalOrder,l]),i.added.push(l)}const r=i.added.length>0||i.removed.length>0,s=i.updated.length>0;if(r){Te(o),o._rebuildRowIdMap(),o.__rowRenderEpoch++;for(let e=0;e<o._rowPool.length;e++)o._rowPool[e].__epoch=-1;o.refreshVirtualWindow(!0)}else s&&(Te(o),o._requestSchedulerPhase(le.VIRTUALIZATION,"applyTransaction"));if((r||s)&&o._emitDataChange(),t&&i.added.length>0){await new Promise(e=>requestAnimationFrame(()=>e()));for(const e of i.added){const t=o._rows.indexOf(e);t>=0&&await nt(o,t,"insert")}}if(t&&i.updated.length>0)for(const l of i.updated){const e=o._rows.indexOf(l);e>=0&&await nt(o,e,"change")}return t&&i.removed.length>0&&requestAnimationFrame(()=>{const e=o.querySelectorAll('[data-animating="remove"]');for(let t=0;t<e.length;t++)e[t].removeAttribute("data-animating")}),i}#z=null;#N=[];#q=null;applyTransactionAsync(e){return this.#z||(this.#z={add:[],update:[],remove:[]}),e.add&&this.#z.add.push(...e.add),e.update&&this.#z.update.push(...e.update),e.remove&&this.#z.remove.push(...e.remove),new Promise(e=>{this.#N.push(e),null===this.#q&&(this.#q=requestAnimationFrame(()=>{this.#q=null;const e=this.#z,t=this.#N;this.#z=null,this.#N=[],this.applyTransaction(e,!1).then(e=>{for(const o of t)o(e)})}))})}}function at(e,t){if(t)for(const o in t){const i=t[o];null!=i&&e.setAttribute(o,i)}}function ct(e,t,o){const i=document.createElement(e);return at(i,t),i}function dt(e,t){const o=document.createElement("div");return e&&(o.className=e),at(o,t),o}function ht(e,t,o){const i=document.createElement("button");return i.type="button",e&&(i.className=e),at(i,t),i}const ut=document.createElement("template");function gt(){return ut.content.cloneNode(!0)}function ft(e){const t=document.createDocumentFragment(),o=dt(e.hasShell?`${_.ROOT} has-shell`:_.ROOT);if(e.hasShell&&e.shellHeader&&e.shellBody)o.appendChild(e.shellHeader),o.appendChild(e.shellBody);else{const e=dt("tbw-grid-content");e.appendChild(gt()),o.appendChild(e)}return t.appendChild(o),t}function pt(e){const t=dt("tbw-shell-header",{part:"shell-header",role:"presentation"});if(e.title){const o=dt("tbw-shell-title");o.textContent=e.title,t.appendChild(o)}const o=dt("tbw-shell-content",{part:"shell-content",role:"presentation","data-light-dom-header-content":""});t.appendChild(o);const i=dt("tbw-shell-toolbar",{part:"shell-toolbar",role:"presentation"});for(const s of e.configButtons)s.hasRender&&i.appendChild(dt("tbw-toolbar-content-slot",{"data-toolbar-content":s.id}));for(const s of e.apiButtons)s.hasRender&&i.appendChild(dt("tbw-toolbar-content-slot",{"data-toolbar-content":s.id}));const n=e.configButtons.some(e=>e.hasRender)||e.apiButtons.some(e=>e.hasRender),r=e.hasPanels&&!1!==e.showToggle;if(n&&r&&i.appendChild(dt("tbw-toolbar-separator")),r){const t=ht(e.isPanelOpen?"tbw-toolbar-btn active":"tbw-toolbar-btn",{"data-panel-toggle":"",title:"Settings","aria-label":"Toggle settings panel","aria-pressed":String(e.isPanelOpen),"aria-controls":"tbw-tool-panel"});t.dataset.icon="tool-panel",void 0!==e.toolPanelIcon&&(t.innerHTML=O(e.toolPanelIcon)),i.appendChild(t)}return t.appendChild(i),t}function wt(e){const t=dt("tbw-shell-body",{"data-mode":e.mode??"overlay"}),o=e.panels.length>0,i=1===e.panels.length,n=dt("tbw-grid-content");n.appendChild(gt());let r=null;if(o){r=ct("aside",{class:e.isPanelOpen?"tbw-tool-panel open":"tbw-tool-panel",part:"tool-panel","data-position":e.position,role:"presentation",id:"tbw-tool-panel"});const t="left"===e.position?"right":"left";r.appendChild(dt("tbw-tool-panel-resize",{"data-resize-handle":"","data-handle-position":t,"aria-hidden":"true"}));const o=dt("tbw-tool-panel-content",{role:"presentation"}),n=dt("tbw-accordion");for(const r of e.panels){const t=dt(`tbw-accordion-section${r.isExpanded?" expanded":""}${i?" single":""}`,{"data-section":r.id}),o=ht("tbw-accordion-header",{"aria-expanded":String(r.isExpanded),"aria-controls":`tbw-section-${r.id}`});if(i&&o.setAttribute("aria-disabled","true"),r.icon){const e=ct("span",{class:"tbw-accordion-icon"});e.innerHTML=O(r.icon),o.appendChild(e)}const s=ct("span",{class:"tbw-accordion-title"});if(s.textContent=r.title,o.appendChild(s),!i){const t=ct("span",{class:"tbw-accordion-chevron","data-icon":"expand"});void 0!==e.expandIcon&&(t.innerHTML=O(e.expandIcon)),o.appendChild(t)}t.appendChild(o),t.appendChild(dt("tbw-accordion-content",{id:`tbw-section-${r.id}`,role:"presentation"})),n.appendChild(t)}o.appendChild(n),r.appendChild(o)}return"left"===e.position&&r?(t.appendChild(r),t.appendChild(n)):(t.appendChild(n),r&&t.appendChild(r)),t}function bt(e){return e?"string"==typeof e?O(e):e.outerHTML:""}function mt(e){return!!e?.header?.title||(!!e?.header?.toolbarContents?.length||(!!e?.toolPanels?.length||(!!e?.headerContents?.length||(!!e?.header?.lightDomContent?.length||!!e?.header?.hasToolButtonsContainer))))}function vt(e,t){const o=e.querySelector("tbw-grid-header");if(!o)return;if(!t.lightDomTitle){const e=o.getAttribute("title");e&&(t.lightDomTitle=e)}const i=o.querySelectorAll("tbw-grid-header-content");i.length>0&&0===t.lightDomHeaderContent.length&&(t.lightDomHeaderContent=Array.from(i)),o.style.display="none"}function Ct(e,t,o){const i=e.querySelector(":scope > tbw-grid-tool-buttons");if(!i)return;t.hasToolButtonsContainer=!0;const n="light-dom-toolbar-content";if(t.lightDomToolbarContentIds.has(n))return;const r={id:n,order:0,render:e=>{for(;i.firstChild;)e.appendChild(i.firstChild);return()=>{for(;e.firstChild;)i.appendChild(e.firstChild)}}};t.toolbarContents.set(n,r),t.lightDomToolbarContentIds.add(n),i.style.display="none"}function yt(e,t,o){e.querySelectorAll(":scope > tbw-grid-tool-panel").forEach(e=>{const i=e,n=i.getAttribute("id"),r=i.getAttribute("title");if(!n||!r)return void f("TBW070",`Tool panel missing required id or title attribute: id="${n??""}", title="${r??""}"`);const s=i.getAttribute("icon")??void 0,l=i.getAttribute("tooltip")??void 0,a=parseInt(i.getAttribute("order")??"100",10);let c;const d=o?.(i);if(d)c=d;else{const e=O(i.innerHTML.trim());c=t=>{const o=document.createElement("div");return o.innerHTML=e,t.appendChild(o),()=>o.remove()}}const h=t.toolPanels.get(n);if(h){if(d){const e=!t.adapterBoundToolPanelIds.has(n),o=h.order!==a||h.icon!==s||h.tooltip!==l;if(h.render=c,h.order=a,h.icon=s,h.tooltip=l,t.adapterBoundToolPanelIds.add(n),e||o){const e=t.panelCleanups.get(n);e&&(e(),t.panelCleanups.delete(n))}}return}const u={id:n,title:r,icon:s,tooltip:l,order:a,render:c};t.toolPanels.set(n,u),t.lightDomToolPanelIds.add(n),d&&t.adapterBoundToolPanelIds.add(n),i.style.display="none"})}function _t(e,t,o){const i=t?.header?.toolbarContents??[],n=[...o.toolbarContents.values()],r=new Set(i.map(e=>e.id)),s=[...i];for(const l of n)r.has(l.id)||s.push(l);for(const l of s){if(o.toolbarContentCleanups.has(l.id))continue;if(!l.render)continue;const t=e.querySelector(`[data-toolbar-content="${l.id}"]`);if(!t)continue;const i=l.render(t);i&&o.toolbarContentCleanups.set(l.id,i)}}function Rt(e,t){const o=t.lightDomHeaderContent.length>0&&!t.lightDomContentMoved,i=t.headerContents.size>0;if(!o&&!i)return;const n=e.querySelector(".tbw-shell-content");if(!n)return;if(o){for(const e of t.lightDomHeaderContent)e.style.display="",n.appendChild(e);t.lightDomContentMoved=!0}const r=[...t.headerContents.values()].sort((e,t)=>(e.order??100)-(t.order??100));for(const s of r){const e=t.headerContentCleanups.get(s.id);e&&(e(),t.headerContentCleanups.delete(s.id));let o=n.querySelector(`[data-header-content="${s.id}"]`);o||(o=document.createElement("div"),o.setAttribute("data-header-content",s.id),n.appendChild(o));const i=s.render(o);i&&t.headerContentCleanups.set(s.id,i)}}function St(e,t,o){if(t.isPanelOpen)for(const[i,n]of t.toolPanels){const o=t.expandedSections.has(i),r=e.querySelector(`[data-section="${i}"]`),s=r?.querySelector(".tbw-accordion-content");if(!r||!s)continue;r.classList.toggle("expanded",o);const l=r.querySelector(".tbw-accordion-header");if(l&&l.setAttribute("aria-expanded",String(o)),o){if(0===s.children.length){const e=n.render(s);e&&t.panelCleanups.set(i,e)}}else{const e=t.panelCleanups.get(i);e&&(e(),t.panelCleanups.delete(i)),s.innerHTML=""}}}function Et(e,t){const o=e.querySelector("[data-panel-toggle]");o&&(o.classList.toggle("active",t.isPanelOpen),o.setAttribute("aria-pressed",String(t.isPanelOpen)))}function xt(e,t){const o=e.querySelector(".tbw-tool-panel");o&&(o.classList.toggle("open",t.isPanelOpen),t.isPanelOpen||(o.style.width=""))}function At(e){for(const t of e.toolbarContentCleanups.values())t();e.toolbarContentCleanups.clear();for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.headerContentCleanups.values())t();e.headerContentCleanups.clear(),e.lightDomContentMoved=!1}function Tt(e,t,o){const i=void 0!==o?.toolPanel?bt(o.toolPanel):void 0,n=void 0!==o?.expand?bt(o.expand):void 0,r=void 0!==o?.collapse?bt(o.collapse):void 0,s=[...e.header?.toolbarContents??[]].sort((e,t)=>(e.order??0)-(t.order??0)),l=[...e.toolPanels??[]].sort((e,t)=>(e.order??100)-(t.order??100));return{headerOptions:{title:e.header?.title??void 0,hasPanels:l.length>0,isPanelOpen:t.isPanelOpen,toolPanelIcon:i,showToggle:!1!==e.header?.toolPanelToggle&&!0!==e.toolPanel?.locked,configButtons:s.map(e=>({id:e.id,hasElement:!1,hasRender:!!e.render})),apiButtons:[]},bodyOptions:{position:e.toolPanel?.position??"right",mode:e.toolPanel?.mode??"overlay",isPanelOpen:t.isPanelOpen,expandIcon:n,collapseIcon:r,panels:l.map(e=>({id:e.id,title:e.title,icon:bt(e.icon),isExpanded:t.expandedSections.has(e.id)}))}}}function Pt(e,t,o,i){const n=mt(t),r=[];for(let s=e.firstChild;s;s=s.nextSibling)1===s.nodeType&&s.classList.contains(_.ROOT)||r.push(s);e.replaceChildren();for(const s of r)e.appendChild(s);if(n){const{headerOptions:n,bodyOptions:r}=Tt(t,o,i),s=ft({hasShell:!0,shellHeader:pt(n),shellBody:wt(r)});e.appendChild(s)}else{const t=ft({hasShell:!1});e.appendChild(t)}return n}function Ht(e,t,o){const i=e.querySelector(`[data-section="${t}"]`);i&&i.classList.toggle("expanded",o)}ut.innerHTML='\n <div class="tbw-scroll-area">\n <div class="rows-body-wrapper">\n <div class="rows-body" role="grid">\n <div class="header" role="rowgroup">\n <div class="header-row" role="row" part="header-row"></div>\n </div>\n <div class="rows-container" role="presentation">\n <div class="rows-viewport" role="presentation">\n <div class="rows"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="faux-vscroll">\n <div class="faux-vscroll-spacer"></div>\n </div>\n <div class="tbw-sr-only" aria-live="polite" aria-atomic="true"></div>\n';const Mt="tbw-grid-styles";let kt="";const Lt=new Map;function Ot(){const e=function(){const e=Xt.activeTag;return e===Xt.tagName?Mt:`${Mt}-${e}`}();let t=document.getElementById(e);return t||(t=document.createElement("style"),t.id=e,t.setAttribute("data-tbw-grid","true"),document.head.appendChild(t)),t}function Dt(e){const t=Xt.activeTag;return t===Xt.tagName?e:e.replace(new RegExp("(?<![-\\w])tbw-grid(?![-\\w])","g"),t)}function It(){const e=Ot(),t=Array.from(Lt.values()).join("\n");e.textContent=`${kt}\n\n/* Plugin Styles */\n${t}`}async function zt(e){if(kt)return;if("string"==typeof e&&e.length>0)return kt=Dt(e),void It();await new Promise(e=>setTimeout(e,50));const t=function(){try{for(const e of Array.from(document.styleSheets))try{const t=Array.from(e.cssRules||[]).map(e=>e.cssText).join("\n");if(t.includes(".tbw-grid-root")&&t.includes("tbw-grid"))return t}catch{continue}}catch(e){f("TBW120",`Failed to extract grid.css from document stylesheets: ${e}`)}return null}();t?(kt=Dt(t),It()):"undefined"!=typeof process&&"test"===process.env?.NODE_ENV||f("TBW121",`Could not find grid.css in document.styleSheets. Grid styling will not work. Available stylesheets: ${Array.from(document.styleSheets).map(e=>e.href||"(inline)").join(", ")}`)}function Nt(e){e.startY=null,e.startX=null,e.lastY=null,e.lastX=null,e.lastTime=null,e.locked=!1}function qt(e){e.momentumRaf&&(cancelAnimationFrame(e.momentumRaf),e.momentumRaf=0)}function Ft(e,t){if(null!==e.lastTime){performance.now()-e.lastTime>60&&(e.velocityY=0,e.velocityX=0)}(Math.abs(e.velocityY)>.1||Math.abs(e.velocityX)>.1)&&function(e,t){const o=.95,i=1;let n=performance.now();const r=()=>{const s=performance.now(),l=s-n;n=s;const a=l/16,c=Math.pow(o,a);e.velocityY*=c,e.velocityX*=c;const d=16*e.velocityY,h=16*e.velocityX,u=Math.abs(d)>=i,g=Math.abs(h)>=i;u&&(t.fauxScrollbar.scrollTop+=d),g&&t.scrollArea&&(t.scrollArea.scrollLeft+=h),e.momentumRaf=u||g?requestAnimationFrame(r):0};e.momentumRaf=requestAnimationFrame(r)}(e,t),Nt(e)}function $t(e,t,o,i){e.addEventListener("pointerdown",o=>{"touch"===o.pointerType&&null===t.activePointerId&&(t.activePointerId=o.pointerId,e.setPointerCapture(o.pointerId),function(e,t,o){qt(o),o.startY=t,o.startX=e,o.lastY=t,o.lastX=e,o.lastTime=performance.now(),o.velocityY=0,o.velocityX=0,o.locked=!1}(o.clientX,o.clientY,t))},{passive:!0,signal:i}),e.addEventListener("pointermove",e=>{if(e.pointerId!==t.activePointerId)return;const i=function(e,t,o,i){if(null===o.lastY||null===o.lastX)return!1;const n=performance.now(),r=o.lastY-t,s=o.lastX-e;if(null!==o.lastTime){const e=n-o.lastTime;e>0&&(o.velocityY=r/e,o.velocityX=s/e)}if(o.lastY=t,o.lastX=e,o.lastTime=n,o.locked){const{scrollTop:e,scrollHeight:t,clientHeight:o}=i.fauxScrollbar;if(r>0&&e<t-o||r<0&&e>0?i.fauxScrollbar.scrollTop+=r:0!==r&&window.scrollBy(0,r),i.scrollArea){const{scrollLeft:e,scrollWidth:t,clientWidth:o}=i.scrollArea;s>0&&e<t-o||s<0&&e>0?i.scrollArea.scrollLeft+=s:0!==s&&window.scrollBy(s,0)}return!0}const l=null!==o.startY?Math.abs(o.startY-t):0,a=null!==o.startX?Math.abs(o.startX-e):0;if(l<3&&a<3)return!1;const c=l>=a,{scrollHeight:d,clientHeight:h}=i.fauxScrollbar,u=d-h>0;let g=!1;if(i.scrollArea){const{scrollWidth:e,clientWidth:t}=i.scrollArea;g=e-t>0}return!!(c&&u||!c&&g)&&(o.locked=!0,i.fauxScrollbar.scrollTop+=r,i.scrollArea&&(i.scrollArea.scrollLeft+=s),!0)}(e.clientX,e.clientY,t,o);i&&e.preventDefault()},{passive:!1,signal:i}),e.addEventListener("pointerup",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Ft(t,o))},{passive:!0,signal:i}),e.addEventListener("pointercancel",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Nt(t))},{passive:!0,signal:i}),e.addEventListener("lostpointercapture",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Nt(t))},{passive:!0,signal:i})}const Wt=[{property:"editable",pluginName:"editing",level:"column",description:"",isUsed:e=>!0===e||"function"==typeof e},{property:"editor",pluginName:"editing",level:"column",description:""},{property:"editorParams",pluginName:"editing",level:"column",description:""},{property:"group",pluginName:"groupingColumns",level:"column",description:""},{property:"pinned",pluginName:"pinnedColumns",level:"column",description:"",isUsed:e=>"left"===e||"right"===e||"start"===e||"end"===e}],Bt=[{property:"rowEditable",pluginName:"editing",level:"config",description:"",isUsed:e=>"function"==typeof e},{property:"columnGroups",pluginName:"groupingColumns",level:"config",description:"",isUsed:e=>Array.isArray(e)&&e.length>0}];function Vt(e){return`import { ${Ut(e)}Plugin } from '@toolbox-web/grid/plugins/${t=e,t.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}';`;var t}function Ut(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Gt(e,t){return e.some(e=>e.name===t)}class jt{#e;state;constructor(e,t){this.#e=e,this.state={enabled:!0,rowHeight:28,bypassThreshold:24,start:0,end:0,container:null,viewportEl:null,totalHeightEl:null,positionCache:null,heightCache:{byKey:new Map,byRef:new WeakMap},averageHeight:28,measuredCount:0,variableHeights:!1,cachedViewportHeight:0,cachedFauxHeight:0,cachedScrollAreaHeight:0,scrollAreaEl:null,scrollMapping:{rawContentHeight:0,spacerHeight:0,viewportHeight:0,capped:!1},...t}}updateCachedGeometry(){const e=this.state,t=e.container,o=e.viewportEl??t;o&&(e.cachedViewportHeight=o.clientHeight),t&&(e.cachedFauxHeight=t.clientHeight);const i=e.scrollAreaEl;i&&(e.cachedScrollAreaHeight=i.clientHeight)}calculateTotalSpacerHeight(e,t=!1){const o=this.state;let i,n,r;if(t){const e=o.container??this.#e._hostElement,t=o.viewportEl??e,s=o.scrollAreaEl;i=e?.clientHeight??0,n=t?.clientHeight??0,r=s?s.clientHeight:i,o.cachedFauxHeight=i,o.cachedViewportHeight=n,o.cachedScrollAreaHeight=r}else i=o.cachedFauxHeight,n=o.cachedViewportHeight,r=o.cachedScrollAreaHeight||i;const s=r-n,l=Math.max(0,i-r);let a;return a=o.variableHeights&&o.positionCache?function(e){if(0===e.length)return 0;const t=e[e.length-1];return t.offset+t.height}(o.positionCache):e*o.rowHeight,o.scrollMapping=Ne(a,n),o.scrollMapping.spacerHeight+s+l}initializePositionCache(){const e=this.state;if(!e.variableHeights)return;const t=this.#e,o=t._rows,i=e.rowHeight||28,n=t.effectiveConfig?.rowHeight,r=t.effectiveConfig?.getRowId,s=r?e=>r(e):void 0;e.positionCache=function(e,t,o,i,n){const r=new Array(e.length);let s=0;for(let l=0;l<e.length;l++){const a=e[l];let c=n?.(a,l),d=void 0!==c;void 0===c&&(c=Le(t,a,i.rowId),d=void 0!==c),void 0===c&&(c=o,d=!1),r[l]={offset:s,height:c,measured:d},s+=c}return r}(o,e.heightCache,i,{rowId:s},(e,o)=>{const i=t._getPluginRowHeight(e,o);if(void 0!==i)return i;if(n){const t=n(e,o);if(void 0!==t&&t>0)return t}});const l=function(e,t,o,i){let n=0,r=0;for(let s=0;s<e.length;s++){const o=e[s];if(o.measured){const e=i?.(t[s],s);void 0===e&&(r+=o.height,n++)}}return{measuredCount:n,averageHeight:n>0?r/n:o}}(e.positionCache,o,i,(e,o)=>t._getPluginRowHeight(e,o));e.measuredCount=l.measuredCount,l.measuredCount>0&&(e.averageHeight=l.averageHeight)}invalidateRowHeight(e,t){const o=this.state;if(!o.variableHeights)return;if(!o.positionCache)return;const i=this.#e._rows;if(e<0||e>=i.length)return;const n=i[e];let r=t;void 0===r&&(r=this.#e._getPluginRowHeight(n,e)),void 0===r&&(r=o.rowHeight);const s=o.positionCache[e];if(s&&!(Math.abs(s.height-r)<1)&&(Oe(o.positionCache,e,r),o.totalHeightEl)){const e=this.calculateTotalSpacerHeight(i.length);o.totalHeightEl.style.height=`${e}px`}}measureRenderedRowHeights(e,t){const o=this.state;if(!o.variableHeights)return;if(!o.positionCache)return;const i=this.#e,n=i._bodyEl;if(!n)return;const r=n.querySelectorAll(".data-grid-row"),s=i.effectiveConfig?.getRowId,l=i._rows,a=Ie({positionCache:o.positionCache,heightCache:o.heightCache,rows:l,defaultHeight:o.rowHeight,start:e,end:t,getPluginHeight:(e,t)=>i._getPluginRowHeight(e,t),getRowId:s?e=>s(e):void 0},r);if(a.hasChanges&&(o.measuredCount=a.measuredCount,o.averageHeight=a.averageHeight,o.totalHeightEl)){const e=this.calculateTotalSpacerHeight(l.length);o.totalHeightEl.style.height=`${e}px`}}refreshVirtualWindow(e=!1,t=!1){const o=this.state,i=this.#e,n=i._bodyEl;if(!n)return!1;const r=i._rows.length;if(!o.enabled)return i._renderVisibleRows(0,r),t||i._afterPluginRender(),!0;if(r<=o.bypassThreshold)return o.start=0,o.end=r,e&&(n.style.transform="translateY(0px)"),i._renderVisibleRows(0,r,i.__rowRenderEpoch),e&&o.variableHeights&&this.initializePositionCache(),e&&o.totalHeightEl&&(o.totalHeightEl.style.height=`${this.calculateTotalSpacerHeight(r,!0)}px`),i._updateAriaCounts(r,i._visibleColumns.length),t||i._afterPluginRender(),!0;const s=o.container,l=o.viewportEl??s,a=e?o.cachedViewportHeight=l.clientHeight:o.cachedViewportHeight||(o.cachedViewportHeight=l.clientHeight),c=o.rowHeight,d=qe(s.scrollTop,o.scrollMapping);let h;e&&o.variableHeights&&this.initializePositionCache();const u=o.positionCache;o.variableHeights&&u&&u.length>0?(h=De(u,d),-1===h&&(h=0)):h=Math.floor(d/c),h-=h%2,h<0&&(h=0),r>0&&h>r-1&&(h=r-1);const g=i._adjustPluginVirtualStart(h,d,c);let f;if(void 0!==g&&g<h&&(h=g,h-=h%2,h<0&&(h=0)),o.variableHeights&&u&&u.length>0){const e=a+3*c;let t=0;for(f=h;f<r&&t<e;)t+=u[f].height,f++;const o=Math.ceil(a/c)+3;f-h<o&&(f=Math.min(h+o,r))}else{f=h+(Math.ceil(a/c)+3)}f>r&&(f=r);const p=o.start,w=o.end;if(!e&&h===p&&f===w)return!1;o.start=h,o.end=f;const b=e?o.cachedFauxHeight=s.clientHeight:o.cachedFauxHeight||(o.cachedFauxHeight=s.clientHeight);if(e){const e=o.scrollAreaEl;e&&(o.cachedScrollAreaHeight=e.clientHeight)}if(0===b&&a>0)return i._requestSchedulerPhase(le.VIRTUALIZATION,"stale-refs-retry"),!1;if(e&&o.totalHeightEl){const e=this.calculateTotalSpacerHeight(r);o.totalHeightEl.style.height=`${e}px`}let m;m=o.variableHeights&&u&&u[h]?u[h].offset:h*c;const v=-(d-m);return n.style.transform=`translateY(${v}px)`,i._renderVisibleRows(h,f,i.__rowRenderEpoch),e&&o.variableHeights&&this.measureRenderedRowHeights(h,f),i._updateAriaCounts(r,i._visibleColumns.length),e&&!t&&(i._afterPluginRender(),queueMicrotask(()=>{if(!o.totalHeightEl)return;const e=this.calculateTotalSpacerHeight(r);0===o.cachedFauxHeight&&o.cachedViewportHeight>0||(o.totalHeightEl.style.height=`${e}px`)})),!0}}class Yt{constructor(e){this.grid=e}plugins=[];getPlugins(){return this.plugins}pluginMap=new Map;cellRenderers=new Map;headerRenderers=new Map;cellEditors=new Map;_hasAfterCellRender=!1;_hasAfterRowRender=!1;_hasProcessRows=!1;_hasRowStructurePlugins=!1;#F=new Map;eventListeners=new Map;queryHandlers=new Map;attachAll(e){const t=this.#$(e);for(const o of t)this.attach(o)}#$(e){if(e.length<2)return e;const t=new Map,o=new Map,i=[];for(const n of e){const e=n.constructor,r=t.get(e);if(!r){t.set(e,n),i.push(n);continue}const s=o.get(r)??[];s.push(n),o.set(r,s)}if(0===o.size)return i;for(const[n,r]of o)n.mergeConfigsFrom(r);return i}attach(e){if(function(e,t,o){const i=e.name,n=e.constructor.dependencies??[];for(const r of n){const e=r.name,n=r.required??!0,s=r.reason;if(!t.some(t=>t.name===e)){const t=s??`${Ut(i)}Plugin requires ${Ut(e)}Plugin`,r=Vt(e);n&&g("TBW020",`Plugin dependency error:\n\n${t}.\n\n → Add the plugin to your gridConfig.plugins array BEFORE ${Ut(i)}Plugin:\n ${r}\n plugins: [new ${Ut(e)}Plugin(), new ${Ut(i)}Plugin()]`,o)}}}(e,this.plugins,this.grid.getAttribute("id")??void 0),this.pluginMap.set(e.constructor,e),this.plugins.push(e),e.cellRenderers)for(const[t,o]of Object.entries(e.cellRenderers))this.cellRenderers.set(t,o);if(e.headerRenderers)for(const[t,o]of Object.entries(e.headerRenderers))this.headerRenderers.set(t,o);if(e.cellEditors)for(const[t,o]of Object.entries(e.cellEditors))this.cellEditors.set(t,o);this.registerQueryHandlers(e),e.attach(this.grid),this.#W();for(const t of this.plugins)t!==e&&t.onPluginAttached&&t.onPluginAttached(e.name,e)}registerQueryHandlers(e){const t=e.constructor.manifest;if(t?.queries)for(const o of t.queries){let t=this.queryHandlers.get(o.type);t||(t=new Set,this.queryHandlers.set(o.type,t)),t.add(e)}}unregisterQueryHandlers(e){for(const[t,o]of this.queryHandlers)o.delete(e),0===o.size&&this.queryHandlers.delete(t)}detachAll(){for(const e of this.plugins)for(const t of this.plugins)t!==e&&t.onPluginDetached&&t.onPluginDetached(e.name);for(let e=this.plugins.length-1;e>=0;e--){const t=this.plugins[e];this.unsubscribeAll(t),this.unregisterQueryHandlers(t),t.detach()}this.plugins=[],this.pluginMap.clear(),this.cellRenderers.clear(),this.headerRenderers.clear(),this.cellEditors.clear(),this.eventListeners.clear(),this.queryHandlers.clear(),this._hasAfterCellRender=!1,this._hasAfterRowRender=!1,this._hasProcessRows=!1,this.#F.clear()}getPlugin(e){return this.pluginMap.get(e)}getPluginByName(e){return this.plugins.find(t=>t.name===e||t.aliases?.includes(e))}hasPlugin(e){return this.pluginMap.has(e)}getAll(){return this.plugins}getRegisteredPluginNames(){return this.plugins.map(e=>e.name)}getCellRenderer(e){return this.cellRenderers.get(e)}getHeaderRenderer(e){return this.headerRenderers.get(e)}getCellEditor(e){return this.cellEditors.get(e)}getPluginStyles(){return this.plugins.filter(e=>e.styles).map(e=>({name:e.name,styles:e.styles}))}processRows(e){if(!this._hasProcessRows)return e;let t=e;for(const o of this.#B("processRows")){const e=o.processRows(t);e!==t&&(t=e)}return t}processColumns(e){let t=[...e];for(const o of this.#B("processColumns"))t=o.processColumns(t);return t}beforeRender(){for(const e of this.plugins)e.beforeRender?.()}afterRender(){for(const e of this.#B("afterRender"))e.afterRender()}afterCellRender(e){for(const t of this.#B("afterCellRender"))t.afterCellRender(e)}hasAfterCellRenderHook(){return this._hasAfterCellRender}afterRowRender(e){for(const t of this.#B("afterRowRender"))t.afterRowRender(e)}hasAfterRowRenderHook(){return this._hasAfterRowRender}#W(){this._hasAfterCellRender=this.plugins.some(e=>"function"==typeof e.afterCellRender),this._hasAfterRowRender=this.plugins.some(e=>"function"==typeof e.afterRowRender),this._hasProcessRows=this.plugins.some(e=>"function"==typeof e.processRows),this._hasRowStructurePlugins=this.plugins.some(e=>!0===e.constructor.manifest?.modifiesRowStructure),this.#F.clear()}#B(e){let t=this.#F.get(e);if(t)return t;t=this.plugins.filter(t=>e in t&&"function"==typeof t[e]);const o=t=>{const o=t.constructor.manifest?.hookPriority;if(!o)return 0;return o[e]??0};return t.some(e=>0!==o(e))&&t.sort((e,t)=>o(e)-o(t)),this.#F.set(e,t),t}onScrollRender(){for(const e of this.#B("onScrollRender"))e.onScrollRender()}getRowHeight(e,t){for(const o of this.plugins)if("function"==typeof o.getRowHeight){const i=o.getRowHeight(e,t);if(void 0!==i)return i}}hasRowHeightPlugin(){for(const e of this.plugins)if("function"==typeof e.getRowHeight)return!0;return!1}adjustVirtualStart(e,t,o){let i=e;for(const n of this.plugins)if("function"==typeof n.adjustVirtualStart){const r=n.adjustVirtualStart(e,t,o);r<i&&(i=r)}return i}renderRow(e,t,o){for(const i of this.plugins)if(i.renderRow?.(e,t,o))return!0;return!1}queryPlugins(e){const t=[],o=this.queryHandlers.get(e.type);if(o&&o.size>0){for(const i of o){const o=i.handleQuery?.(e);void 0!==o&&t.push(o)}return t}for(const i of this.plugins){const o=i.handleQuery?.(e);void 0!==o&&t.push(o)}return t}subscribe(e,t,o){let i=this.eventListeners.get(t);i||(i=new Map,this.eventListeners.set(t,i)),i.set(e,o)}unsubscribe(e,t){const o=this.eventListeners.get(t);o&&(o.delete(e),0===o.size&&this.eventListeners.delete(t))}unsubscribeAll(e){for(const[t,o]of this.eventListeners)o.delete(e),0===o.size&&this.eventListeners.delete(t)}emitPluginEvent(e,t){const o=this.eventListeners.get(e);if(o)for(const n of o.values())try{n(t)}catch(i){p("TBW024",`Error in plugin event handler for "${e}": ${i}`,this.grid.getAttribute("id")??void 0)}}onKeyDown(e){for(const t of this.#B("onKeyDown"))if(t.onKeyDown(e))return!0;return!1}onCellClick(e){for(const t of this.#B("onCellClick"))if(t.onCellClick(e))return!0;return!1}onRowClick(e){for(const t of this.#B("onRowClick"))if(t.onRowClick(e))return!0;return!1}onHeaderClick(e){for(const t of this.#B("onHeaderClick"))if(t.onHeaderClick(e))return!0;return!1}onScroll(e){for(const t of this.#B("onScroll"))t.onScroll(e)}onCellMouseDown(e){for(const t of this.#B("onCellMouseDown"))if(t.onCellMouseDown(e))return!0;return!1}onCellMouseMove(e){for(const t of this.#B("onCellMouseMove"))if(t.onCellMouseMove(e))return!0;return!1}onCellMouseUp(e){for(const t of this.#B("onCellMouseUp"))if(t.onCellMouseUp(e))return!0;return!1}getHorizontalScrollOffsets(e,t){let o=0,i=0,n=!1;for(const r of this.plugins){const s=r.getHorizontalScrollOffsets?.(e,t);s&&(o+=s.left,i+=s.right,s.skipScroll&&(n=!0))}return{left:o,right:i,skipScroll:n}}getToolPanels(){const e=[];for(const t of this.plugins){const o=t.getToolPanel?.();o&&e.push({plugin:t,panel:o})}return e.sort((e,t)=>(e.panel.order??0)-(t.panel.order??0))}getHeaderContents(){const e=[];for(const t of this.plugins){const o=t.getHeaderContent?.();o&&e.push({plugin:t,content:o})}return e.sort((e,t)=>(e.content.order??0)-(t.content.order??0))}}class Xt extends HTMLElement{static tagName="tbw-grid";static version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";static activeTag="tbw-grid";static#V=0;static adapters=[];static registerAdapter(e){this.adapters.push(e)}static getAdapters(){return this.adapters}static clearAdapters(){this.adapters=[]}static get observedAttributes(){return["rows","columns","grid-config","fit-mode","loading"]}get#U(){return this}#G=!1;#i;#n;#j=[];get#p(){return this.#Y?.effective??{}}#X=!1;#K=!1;#Z={rows:!1,columns:!1,gridConfig:!1,fitMode:!1};#Q;#J=0;#ee=null;#te=!1;#oe=!1;#ie=0;#ne;#re={startY:null,startX:null,lastY:null,lastX:null,lastTime:null,velocityY:0,velocityX:0,momentumRaf:0,locked:!1,activePointerId:null};#se;#le;#ae;#ce;#de={scrollTop:0,scrollLeft:0,scrollHeight:0,scrollWidth:0,clientHeight:0,clientWidth:0};#he;#ue;#ge;#fe;#pe;#we;get _pluginManager(){return this.#he}#be=!1;#me;#ve;#y;#Y;#Ce=function(){return{toolPanels:new Map,headerContents:new Map,toolbarContents:new Map,hasToolButtonsContainer:!1,lightDomHeaderContent:[],lightDomTitle:null,lightDomToolPanelIds:new Set,adapterBoundToolPanelIds:new Set,lightDomToolbarContentIds:new Set,apiToolPanelIds:new Set,apiHeaderContentIds:new Set,isPanelOpen:!1,expandedSections:new Set,headerContentCleanups:new Map,panelCleanups:new Map,toolbarContentCleanups:new Map,lightDomContentMoved:!1}}();#ye;#_e;#Re;#Se=!1;#Ee=new Set;#xe=new Map;#Ae;#Te={};#Pe=new Map;#He=!1;_rows=[];#Me=[];get _columns(){return this.#p.columns??[]}set _columns(e){this.#p.columns=e,this.#ke=void 0}#ke;get _visibleColumns(){return this.#ke??=this._columns.filter(e=>!e.hidden)}_invalidateVisibleColumnsCache(){this.#ke=void 0}_headerRowEl;_bodyEl;_rowPool=[];_resizeController;get _virtualization(){return this.#fe.state}set _virtualization(e){Object.assign(this.#fe.state,e)}_focusRow=0;_focusCol=0;_restoreFocusAfterRender=!1;_sortState=null;_gridTemplate="";__rowRenderEpoch=0;__didInitialAutoSize=!1;get __lightDomColumnsCache(){return this.#Y?.lightDomColumnsCache}set __lightDomColumnsCache(e){this.#Y&&(this.#Y.lightDomColumnsCache=e)}get __originalColumnNodes(){return this.#Y?.originalColumnNodes}set __originalColumnNodes(e){this.#Y&&(this.#Y.originalColumnNodes=e)}__originalOrder=[];__frameworkAdapter;__rowsBodyEl=null;get rows(){return this._rows}set rows(e){const t=Array.isArray(e)?e:[],o=this.#j;this.#j=t,o!==t&&this.#Le("rows")}get sourceRows(){return this.#j}set sourceRows(e){this.#j=Array.isArray(e)?e:[]}get columns(){return[...this._columns]}set columns(e){const t=this.#Y?.getColumns();this.#Y?.setColumns(e),t!==e&&this.#Le("columns")}get gridConfig(){return this.#p}set gridConfig(e){e&&this.__frameworkAdapter?.processConfig&&(e=this.__frameworkAdapter.processConfig(e));const t=this.#Y?.getGridConfig();this.#Y?.setGridConfig(e),t!==e&&(this.#Y.clearLightDomCache(),this.#Le("gridConfig"))}get fitMode(){return this.#p.fitMode??"stretch"}set fitMode(e){const t=this.#Y?.getFitMode();this.#Y?.setFitMode(e),t!==e&&this.#Le("fitMode")}get loading(){return this.#Se}set loading(e){const t=this.#Se;this.#Se=e,t!==e&&(e?(this.setAttribute("loading",""),this.setAttribute("aria-busy","true")):(this.removeAttribute("loading"),this.removeAttribute("aria-busy")),this.#Oe(),this.#De())}setRowLoading(e,t){const o=this.#Ee.has(e);t?this.#Ee.add(e):this.#Ee.delete(e),o!==t&&this.#Ie(e,t)}setCellLoading(e,t,o){let i=this.#xe.get(e);const n=i?.has(t)??!1;o?(i||(i=new Set,this.#xe.set(e,i)),i.add(t)):(i?.delete(t),0===i?.size&&this.#xe.delete(e)),n!==o&&this.#ze(e,t,o)}isRowLoading(e){return this.#Ee.has(e)}isCellLoading(e,t){return this.#xe.get(e)?.has(t)??!1}clearAllLoading(){this.loading=!1;for(const e of this.#Ee)this.#Ie(e,!1);this.#Ee.clear();for(const[e,t]of this.#xe)for(const o of t)this.#ze(e,o,!1);this.#xe.clear()}get effectiveConfig(){return this.#p}get disconnectSignal(){return this.#se||(this.#se=new AbortController),this.#se.signal}constructor(){super(),this.#Ne(),this.#i=new Promise(e=>this.#n=e),this.#fe=new jt(this),this.#pe=new Xe(this),this.#we=new lt(this),this.#Q=new ae(this),this.#Q.setInitialReadyResolver(()=>this.#n?.()),this.#ye=function(e,t){let o=!1;const i={get isInitialized(){return o},setInitialized(e){o=e},get isPanelOpen(){return e.isPanelOpen},get expandedSections(){return[...e.expandedSections]},openToolPanel(o){if(0===e.toolPanels.size)return void f("TBW071","No tool panels registered",t.id);let n;if(void 0!==o&&(e.toolPanels.has(o)?n=o:f(h,`Tool panel "${o}" not found`,t.id)),e.isPanelOpen&&n&&e.expandedSections.has(n))return;if(e.isPanelOpen&&n&&!e.expandedSections.has(n))return void i.toggleToolPanelSection(n);if(e.isPanelOpen)return;if(e.isPanelOpen=!0,0===e.expandedSections.size&&e.toolPanels.size>0)if(n)e.expandedSections.add(n);else{const o=t.effectiveConfig?.shell?.toolPanel?.defaultOpen;if(o&&e.toolPanels.has(o))e.expandedSections.add(o);else{const t=[...e.toolPanels.values()].sort((e,t)=>(e.order??100)-(t.order??100))[0];t&&e.expandedSections.add(t.id)}}else if(n&&!e.expandedSections.has(n)){for(const t of[...e.expandedSections])e.expandedSections.delete(t);e.expandedSections.add(n)}const r=t._renderRoot;Et(r,e),xt(r,e),St(r,e,t._accordionIcons),t._emit("tool-panel-open",{sections:i.expandedSections})},closeToolPanel(){if(!e.isPanelOpen)return;if(t.effectiveConfig?.shell?.toolPanel?.locked)return;for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.toolPanels.values())t.onClose?.();e.isPanelOpen=!1;const o=t._renderRoot;Et(o,e),xt(o,e),t._emit("tool-panel-close",{})},toggleToolPanel(){e.isPanelOpen?i.closeToolPanel():i.openToolPanel()},toggleToolPanelSection(o){const i=e.toolPanels.get(o);if(!i)return void f(h,`Tool panel section "${o}" not found`,t.id);if(1===e.toolPanels.size)return;const n=t._renderRoot,r=e.expandedSections.has(o);if(r){const t=e.panelCleanups.get(o);t&&(t(),e.panelCleanups.delete(o)),i.onClose?.(),e.expandedSections.delete(o),Ht(n,o,!1)}else{for(const[t,i]of e.toolPanels)if(t!==o&&e.expandedSections.has(t)){const o=e.panelCleanups.get(t);o&&(o(),e.panelCleanups.delete(t)),i.onClose?.(),e.expandedSections.delete(t),Ht(n,t,!1);const r=n.querySelector(`[data-section="${t}"] .tbw-accordion-content`);r&&(r.innerHTML="")}e.expandedSections.add(o),Ht(n,o,!0),function(e,t,o){const i=t.toolPanels.get(o);if(!i?.render)return;const n=e.querySelector(`[data-section="${o}"] .tbw-accordion-content`);if(!n)return;const r=i.render(n);r&&t.panelCleanups.set(o,r)}(n,e,o)}t._emit("tool-panel-section-toggle",{id:o,expanded:!r})},getToolPanels:()=>[...e.toolPanels.values()],registerToolPanel(i){e.toolPanels.has(i.id)?f("TBW073",`Tool panel "${i.id}" already registered`,t.id):(e.toolPanels.set(i.id,i),o&&t.refreshShellHeader?.())},unregisterToolPanel(i){if(e.expandedSections.has(i)){const t=e.panelCleanups.get(i);t&&(t(),e.panelCleanups.delete(i)),e.expandedSections.delete(i)}e.toolPanels.delete(i),o&&t.refreshShellHeader?.()},getHeaderContents:()=>[...e.headerContents.values()],registerHeaderContent(i){e.headerContents.has(i.id)?f("TBW074",`Header content "${i.id}" already registered`,t.id):(e.headerContents.set(i.id,i),o&&Rt(t._renderRoot,e))},unregisterHeaderContent(o){const i=e.headerContentCleanups.get(o);i&&(i(),e.headerContentCleanups.delete(o));const n=e.headerContents.get(o);n?.onDestroy?.(),e.headerContents.delete(o);const r=t._renderRoot.querySelector(`[data-header-content="${o}"]`);r?.remove()},getToolbarContents:()=>[...e.toolbarContents.values()].sort((e,t)=>(e.order??0)-(t.order??0)),registerToolbarContent(i){e.toolbarContents.has(i.id)?f("TBW075",`Toolbar content "${i.id}" already registered`,t.id):(e.toolbarContents.set(i.id,i),o&&t.refreshShellHeader?.())},unregisterToolbarContent(i){const n=e.toolbarContentCleanups.get(i);n&&(n(),e.toolbarContentCleanups.delete(i));const r=e.toolbarContents.get(i);r?.onDestroy&&r.onDestroy(),e.toolbarContents.delete(i),o&&t.refreshShellHeader?.()}};return i}(this.#Ce,this),this.#Y=new ce(this)}async#Ne(){await zt('@layer tbw-base, tbw-plugins, tbw-theme;\n\n@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-column-selection-bg: rgba(from var(--tbw-color-accent) r g b / 12%);--tbw-resize-handle-width: 2px;--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);--tbw-icon-expand: "▶";--tbw-icon-collapse: "▼";--tbw-icon-sort-asc: "▲";--tbw-icon-sort-desc: "▼";--tbw-icon-sort-none: "⇅";--tbw-icon-submenu-arrow: "▶";--tbw-icon-drag-handle: "⋮⋮";--tbw-icon-tool-panel: "☰";--tbw-icon-filter: "";--tbw-icon-filter-active: "";--tbw-icon-print: "🖨️";--tbw-icon-expand-mask: none;--tbw-icon-collapse-mask: none;--tbw-icon-sort-asc-mask: none;--tbw-icon-sort-desc-mask: none;--tbw-icon-sort-none-mask: none;--tbw-icon-submenu-arrow-mask: none;--tbw-icon-drag-handle-mask: none;--tbw-icon-tool-panel-mask: none;--tbw-icon-filter-mask: url("data:image/svg+xml,%3Csvg viewBox=\'0 0 16 16\' width=\'12\' height=\'12\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath fill=\'currentColor\' d=\'M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z\'/%3E%3C/svg%3E");--tbw-icon-filter-active-mask: var(--tbw-icon-filter-mask);--tbw-icon-print-mask: none}}\n@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}tbw-grid,tbw-grid *{box-sizing:border-box}tbw-grid .tbw-grid-root{position:relative;display:flex;flex-direction:column;height:100%}tbw-grid .tbw-grid-root.has-shell{display:flex;flex-direction:column;height:100%}tbw-grid .tbw-grid-root:has(.selected){-webkit-user-select:none;user-select:none}tbw-grid .rows-body-wrapper{flex:1;min-height:0;display:flex;flex-direction:row;width:100%;min-width:fit-content}tbw-grid .rows-body{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:visible}tbw-grid .rows-container{display:flex;flex-direction:row;flex:1;min-height:0;overflow:visible;position:relative}tbw-grid .rows-viewport{flex:1;min-width:0;position:relative;display:block;overflow:clip;touch-action:none}tbw-grid .rows-viewport .rows{position:absolute;top:0;left:0;min-width:100%;will-change:transform;z-index:var(--tbw-z-layer-rows, 1)}tbw-grid .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);touch-action:none}tbw-grid .faux-vscroll-spacer{width:1px}tbw-grid .tbw-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}tbw-grid[data-has-focus] .cell-focus,tbw-grid[data-has-focus] .row-focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}tbw-grid .sticky-left,tbw-grid .sticky-right{position:sticky;z-index:25}tbw-grid .sticky-left{box-shadow:1px 0 0 var(--tbw-color-border)}tbw-grid .sticky-right{box-shadow:-1px 0 0 var(--tbw-color-border)}}\n@layer tbw-base{tbw-grid [data-icon=expand]:empty:before{content:var(--tbw-icon-expand)}tbw-grid [data-icon=collapse]:empty:before{content:var(--tbw-icon-collapse)}tbw-grid [data-icon=sort-asc]:empty:before{content:var(--tbw-icon-sort-asc)}tbw-grid [data-icon=sort-desc]:empty:before{content:var(--tbw-icon-sort-desc)}tbw-grid [data-icon=sort-none]:empty:before{content:var(--tbw-icon-sort-none)}tbw-grid [data-icon=submenu-arrow]:empty:before{content:var(--tbw-icon-submenu-arrow)}tbw-grid [data-icon=drag-handle]:empty:before{content:var(--tbw-icon-drag-handle)}tbw-grid [data-icon=tool-panel]:empty:before{content:var(--tbw-icon-tool-panel)}tbw-grid [data-icon=print]:empty:before{content:var(--tbw-icon-print)}tbw-grid [data-icon=filter]:empty:before{content:var(--tbw-icon-filter)}tbw-grid [data-icon=filter-active]:empty:before{content:var(--tbw-icon-filter-active)}tbw-grid [data-icon]:empty:before{display:inline-block;vertical-align:middle;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}tbw-grid [data-icon=expand]:empty:before{-webkit-mask-image:var(--tbw-icon-expand-mask);mask-image:var(--tbw-icon-expand-mask)}tbw-grid [data-icon=collapse]:empty:before{-webkit-mask-image:var(--tbw-icon-collapse-mask);mask-image:var(--tbw-icon-collapse-mask)}tbw-grid [data-icon=sort-asc]:empty:before{-webkit-mask-image:var(--tbw-icon-sort-asc-mask);mask-image:var(--tbw-icon-sort-asc-mask)}tbw-grid [data-icon=sort-desc]:empty:before{-webkit-mask-image:var(--tbw-icon-sort-desc-mask);mask-image:var(--tbw-icon-sort-desc-mask)}tbw-grid [data-icon=sort-none]:empty:before{-webkit-mask-image:var(--tbw-icon-sort-none-mask);mask-image:var(--tbw-icon-sort-none-mask)}tbw-grid [data-icon=submenu-arrow]:empty:before{-webkit-mask-image:var(--tbw-icon-submenu-arrow-mask);mask-image:var(--tbw-icon-submenu-arrow-mask)}tbw-grid [data-icon=drag-handle]:empty:before{-webkit-mask-image:var(--tbw-icon-drag-handle-mask);mask-image:var(--tbw-icon-drag-handle-mask)}tbw-grid [data-icon=tool-panel]:empty:before{-webkit-mask-image:var(--tbw-icon-tool-panel-mask);mask-image:var(--tbw-icon-tool-panel-mask)}tbw-grid [data-icon=print]:empty:before{-webkit-mask-image:var(--tbw-icon-print-mask);mask-image:var(--tbw-icon-print-mask)}tbw-grid [data-icon=filter]:empty:before,tbw-grid [data-icon=filter-active]:empty:before{width:var(--tbw-icon-size, 1em);height:var(--tbw-icon-size, 1em);background:currentColor}tbw-grid [data-icon=filter]:empty:before{-webkit-mask-image:var(--tbw-icon-filter-mask);mask-image:var(--tbw-icon-filter-mask)}tbw-grid [data-icon=filter-active]:empty:before{-webkit-mask-image:var(--tbw-icon-filter-active-mask);mask-image:var(--tbw-icon-filter-active-mask)}.tbw-context-menu [data-icon]:empty:before{display:inline-block;width:1em;height:1em;vertical-align:middle}.tbw-context-menu [data-icon=submenu-arrow]:empty:before{content:var(--tbw-icon-submenu-arrow, "▶")}}\n@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}tbw-grid .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)}tbw-grid .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))}tbw-grid .header-group-cell:not(:last-child){border-right:2px solid var(--tbw-color-border)}tbw-grid .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)}tbw-grid .header-row>.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}tbw-grid .header-row>.cell>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:inherit}tbw-grid .header-row>.cell>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}tbw-grid .header-row>.cell:hover>span[part~=sort-indicator]{display:inline-flex;visibility:visible}tbw-grid .header-row>.cell[aria-sort=ascending]>span[part~=sort-indicator],tbw-grid .header-row>.cell[aria-sort=descending]>span[part~=sort-indicator]{display:inline-flex;visibility:visible;opacity:1;color:var(--tbw-sort-indicator-active-color)}tbw-grid .header-row>.cell:last-child{border-right:0}tbw-grid .header-row>.cell:last-child .resize-handle{right:0;width:calc(var(--tbw-resize-hit-area, 18px) / 2)}tbw-grid .header-row>.cell.grouped.group-end:not(:last-child){border-right:2px solid var(--tbw-color-border)}tbw-grid .header-row>.cell.resizable{position:relative}tbw-grid .header-row>.cell.sticky-left,tbw-grid .header-row>.cell.sticky-right{background:var(--tbw-color-header-bg);z-index:35}tbw-grid .header-group-row>.header-group-cell.sticky-left,tbw-grid .header-group-row>.header-group-cell.sticky-right{background:var(--tbw-color-header-bg);z-index:35}tbw-grid .sortable{cursor:pointer;-webkit-user-select:none;user-select:none}tbw-grid .resize-handle{position:absolute;top:0;right:calc(var(--tbw-resize-hit-area, 18px) / -2);width:var(--tbw-resize-hit-area, 18px);height:100%;cursor:e-resize;-webkit-user-select:none;user-select:none;touch-action:none;z-index:20;background:transparent}tbw-grid .resize-handle:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:var(--tbw-resize-handle-width);height:100%;background:var(--tbw-resize-handle-color);border-radius:var(--tbw-resize-handle-border-radius);transition:background .12s ease}tbw-grid .resize-handle:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);width:var(--tbw-resize-handle-width);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}tbw-grid .resize-handle:hover:before{background:var(--tbw-resize-handle-color-hover)}tbw-grid .resize-handle:hover:after{height:100vh;opacity:var(--tbw-resize-indicator-opacity, .6);transition:opacity .12s ease,height 0s}}\n@layer tbw-base{tbw-grid .data-grid-row{display:grid;grid-template-columns:var(--tbw-column-template);contain:layout style}tbw-grid .data-grid-row:nth-child(2n){background:var(--tbw-color-row-alt)}@media(hover:hover){tbw-grid .data-grid-row:hover{background:var(--tbw-color-row-hover)}}tbw-grid .data-grid-row>.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}tbw-grid .data-grid-row>.cell>*{overflow:hidden;text-overflow:ellipsis;white-space:inherit;min-width:0}tbw-grid .data-grid-row>.cell:last-child{border-right:0}tbw-grid .data-grid-row>.cell[data-type=boolean]{text-align:center}tbw-grid .data-grid-row>.cell[data-type=boolean] input[type=checkbox]{margin:0;width:var(--tbw-checkbox-size);height:var(--tbw-checkbox-size);vertical-align:middle}tbw-grid .data-grid-row>.cell.selected:focus-visible,tbw-grid .data-grid-row>.cell:focus-visible:not(.cell-focus){outline:none}tbw-grid .data-grid-row>.cell.sticky-left,tbw-grid .data-grid-row>.cell.sticky-right{background:var(--tbw-color-panel-bg)}tbw-grid .selecting .data-grid-row>.cell{-webkit-user-select:none;user-select:none}}\n@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-grid .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-grid .tbw-shell-content{flex:1;display:flex;align-items:center;gap:12px;min-width:0;overflow:hidden}tbw-grid .tbw-shell-toolbar{display:flex;align-items:center;gap:var(--tbw-toolbar-button-gap);flex-shrink:0}tbw-grid .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)}tbw-grid .tbw-toolbar-btn:hover{background:var(--tbw-color-row-hover)}tbw-grid .tbw-toolbar-btn:focus-visible{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}tbw-grid .tbw-toolbar-btn.active{background:var(--tbw-focus-background);border-color:var(--tbw-color-accent)}tbw-grid .tbw-toolbar-btn:disabled{opacity:.5;cursor:not-allowed}tbw-grid .tbw-toolbar-separator{width:1px;height:20px;background:var(--tbw-color-border);margin:0 4px}tbw-grid .tbw-shell-body{position:relative;display:flex;flex:1;min-height:0;overflow:visible}tbw-grid .tbw-grid-content{flex:1;min-width:0;min-height:0;display:flex;flex-direction:row;overflow:hidden;touch-action:none}tbw-grid .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}}\n@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:var(--tbw-z-layer-toolpanel, 31);box-shadow:-2px 0 8px var(--tbw-color-shadow)}tbw-grid .tbw-tool-panel[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)}tbw-grid .tbw-tool-panel.open{width:var(--tbw-tool-panel-width)}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel{position:relative;inset:auto;flex-shrink:0;box-shadow:none;z-index:auto;border-left:none;border-right:none}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel.open{border-left:1px solid var(--tbw-tool-panel-border)}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel[data-position=left].open{border-left:none;border-right:1px solid var(--tbw-tool-panel-border)}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel-resize{display:none}tbw-grid .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)}tbw-grid .tbw-tool-panel-resize[data-handle-position=left]{left:0}tbw-grid .tbw-tool-panel-resize[data-handle-position=right]{right:0}tbw-grid .tbw-tool-panel-resize:hover,tbw-grid .tbw-tool-panel-resize.resizing{background:var(--tbw-color-accent)}tbw-grid .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-grid .tbw-tool-panel-title{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}tbw-grid .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}tbw-grid .tbw-tool-panel-close:hover{background:var(--tbw-color-row-hover);color:var(--tbw-color-fg)}tbw-grid .tbw-tool-panel-content{flex:1;overflow:auto}tbw-grid .tbw-accordion{display:flex;flex-direction:column;gap:0}tbw-grid .tbw-accordion-section{border-bottom:1px solid var(--tbw-tool-panel-border)}tbw-grid .tbw-accordion-section:last-child{border-bottom:none}tbw-grid .tbw-accordion-section.single .tbw-accordion-header{cursor:default}tbw-grid .tbw-accordion-section.single .tbw-accordion-header:hover{background:transparent}tbw-grid .tbw-accordion-section.expanded .tbw-accordion-chevron{transform:rotate(90deg)}tbw-grid .tbw-accordion-section.expanded .tbw-accordion-content{display:block}tbw-grid .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;-webkit-user-select:none;user-select:none}tbw-grid .tbw-accordion-header:hover{background:var(--tbw-color-row-hover)}tbw-grid .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-grid .tbw-accordion-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:14px;flex-shrink:0}tbw-grid .tbw-accordion-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}tbw-grid .tbw-accordion-content{display:none}}\n@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}.cell.tbw-cell-loading: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}.cell.tbw-cell-loading: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}}\n@layer tbw-base{.tbw-empty-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:var(--tbw-spacing-md, 12px);text-align:center;background:light-dark(rgba(255,255,255,.6),rgba(0,0,0,.4));color:var(--tbw-color-text-secondary, var(--tbw-color-text));z-index:999;pointer-events:all;animation:tbw-fade-in .15s ease-out}.tbw-empty-message{font-family:var(--tbw-font-family, inherit);font-size:var(--tbw-font-size-md, 14px);line-height:1.4;max-width:480px;-webkit-user-select:text;user-select:text}}\n@layer tbw-base{tbw-grid .tbw-expanding{animation:tbw-expand var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}tbw-grid .tbw-collapsing{animation:tbw-collapse var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}tbw-grid[data-animation-mode=off]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms}tbw-grid[data-animation-mode=off] .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}}\n@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}tbw-grid .cell:focus,tbw-grid .cell.active-cell{outline:2px solid Highlight!important;outline-offset:-2px}tbw-grid .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}tbw-grid[data-animation-mode=reduced-motion] .data-grid-row[data-animating]{animation:none}}}\n')}getPlugin(e){return this.#he?.getPlugin(e)}getPluginByName(e){return this.#he?.getPluginByName(e)}requestRender(){this.#Q.requestPhase(le.ROWS,"plugin:requestRender")}requestColumnsRender(){this.#Q.requestPhase(le.COLUMNS,"plugin:requestColumnsRender")}requestRenderWithFocus(){this._restoreFocusAfterRender=!0,this.#Q.requestPhase(le.ROWS,"plugin:requestRenderWithFocus")}updateTemplate(){y(this)}requestAfterRender(){this.#Q.requestPhase(le.STYLE,"plugin:requestAfterRender")}requestVirtualRefresh(){this._virtualization.start=-1,this.refreshVirtualWindow(!1)}#qe(){this.#he=new Yt(this);const e=this.#p?.plugins,t=Array.isArray(e)?e:[],o=this.#p?.features;let i,n=[];if(o&&Ye&&(n=Ye(o)),0===n.length)i=t;else if(0===t.length)i=n;else{const e=new Set(t.map(e=>e.name));i=[...n.filter(t=>!e.has(t.name)),...t]}this.#he.attachAll(i)}#Fe(){!function(e){let t=!1;for(const{name:o,styles:i}of e)Lt.has(o)||(Lt.set(o,Dt(i)),t=!0);t&&It()}(this.#he?.getPluginStyles()??[])}#$e(){const e=this.#p?.plugins,t=Array.isArray(e)?e:[],o=this.#p?.features??void 0,i=o!==this.#ge;if((this.#ue===t||void 0!==this.#ue&&this.#ue.length===t.length&&this.#ue.every((e,o)=>e===t[o]))&&!i)return void(this.#ue=t);this.#he&&this.#he.detachAll();for(const r of this.#Ce.toolPanels.keys()){const e=this.#Ce.lightDomToolPanelIds.has(r),t=this.#Ce.apiToolPanelIds.has(r);if(!e&&!t){const e=this.#Ce.panelCleanups.get(r);e&&(e(),this.#Ce.panelCleanups.delete(r)),this.#Ce.toolPanels.delete(r)}}for(const r of this.#Ce.headerContents.keys()){if(this.#Ce.apiHeaderContentIds.has(r))continue;const e=this.#Ce.headerContentCleanups.get(r);e&&(e(),this.#Ce.headerContentCleanups.delete(r)),this.#Ce.headerContents.delete(r)}this.#qe(),this.#Fe(),this.#ue=t,this.#ge=o,this.#We(),this.#Be();const n=this.#te;if(this.#te=this.#he?.getAll().some(e=>e.onScroll)??!1,!n&&this.#te){const e=this.#U.querySelector(".tbw-grid-content")??this.#U.querySelector(".tbw-grid-root");this.#Ve(e)}}#Ue(){this.#he?.detachAll()}#Be(){if(!this.#he)return;const e=this.#he.getToolPanels();for(const{panel:o}of e)this.#Ce.toolPanels.has(o.id)||this.#Ce.toolPanels.set(o.id,o);const t=this.#he.getHeaderContents();for(const{content:o}of t)this.#Ce.headerContents.has(o.id)||this.#Ce.headerContents.set(o.id,o)}#Ge(){const e=Xt.getAdapters();if(0===e.length&&!this.__frameworkAdapter)return;const t=this.__frameworkAdapter;return o=>{if(t?.createToolPanelRenderer){const e=t.createToolPanelRenderer(o);if(e)return e}for(const t of e)if(t.createToolPanelRenderer){const e=t.createToolPanelRenderer(o);if(e)return e}}}connectedCallback(){this.hasAttribute("tabindex")||(this.tabIndex=0),this.hasAttribute("version")||this.setAttribute("version",Xt.version),this.hasAttribute("data-tbw-grid")||this.setAttribute("data-tbw-grid",""),this.id||(this.id="tbw-grid-"+ ++Xt.#V),this._rows=Array.isArray(this.#j)?[...this.#j]:[],this.#se&&(this.#se.abort(),this.#be=!1),this.#se=new AbortController,this.#ce&&(Ze(this.#ce),this.#ce=void 0),this.#je(),this.#Y.parseLightDomColumns(this),this.#Y.merge(),this.#qe();const e=this.#p?.plugins;var t,o;this.#ue=Array.isArray(e)?e:[],this.#ge=this.#p?.features??void 0,this.#Be(),this.#G||(this.#Ye(),this.#Fe(),this.#G=!0),this.#Xe(),this.#ce=(t=()=>{this.#Ke()},o={timeout:100},Ke?requestIdleCallback(t,o):window.setTimeout(()=>{const e=Date.now();t({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-e))})},1))}disconnectedCallback(){this.#ce&&(Ze(this.#ce),this.#ce=void 0),this.#ie&&(clearTimeout(this.#ie),this.#ie=0),this.#Ue(),function(e){for(const t of e.headerContentCleanups.values())t();e.headerContentCleanups.clear();for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.toolbarContentCleanups.values())t();e.toolbarContentCleanups.clear();for(const t of e.toolbarContents.values())t.onDestroy?.();if(e.isPanelOpen)for(const t of e.expandedSections){const o=e.toolPanels.get(t);o?.onClose?.()}e.isPanelOpen=!1,e.expandedSections.clear(),e.toolPanels.clear(),e.headerContents.clear(),e.toolbarContents.clear(),e.lightDomHeaderContent=[],e.lightDomToolPanelIds.clear(),e.adapterBoundToolPanelIds.clear(),e.lightDomToolbarContentIds.clear(),e.lightDomContentMoved=!1}(this.#Ce),this.#ye.setInitialized(!1),this.#_e?.(),this.#_e=void 0,this.#Re?.(),this.#Re=void 0,qt(this.#re),this.#se&&(this.#se.abort(),this.#se=void 0),this.#me?.abort(),this.#me=void 0,this.#be=!1,this._resizeController&&this._resizeController.dispose(),this.#le&&(this.#le.disconnect(),this.#le=void 0),this.#ae&&(this.#ae.disconnect(),this.#ae=void 0,this.#Ze=!1,this.#Qe=0),Te(this),this.#Je.clear(),this._virtualization.heightCache?.byKey.clear(),this.#ue=void 0,this.#ge=void 0;for(let e=0;e<this._rowPool.length;e++)this._rowPool[e].remove();this._rowPool.length=0,this.__rowsBodyEl=null,this.#X=!1}attributeChangedCallback(e,t,o){if("loading"===e){const e=null!==o&&"false"!==o;return void(this.loading!==e&&(this.loading=e))}if(t!==o&&o&&"null"!==o&&"undefined"!==o)if("rows"===e||"columns"===e||"grid-config"===e)try{const t=JSON.parse(o);"rows"===e?this.rows=t:"columns"===e?this.columns=t:"grid-config"===e&&(this.gridConfig=t)}catch{f("TBW130",`Invalid JSON for '${e}' attribute: ${o}`,this.id)}else"fit-mode"===e&&(this.fitMode=o)}#Xe(){const e=this.#U.querySelector(".tbw-grid-content")??this.#U.querySelector(".tbw-grid-root");if(this._headerRowEl=e?.querySelector(".header-row"),this._virtualization.totalHeightEl=e?.querySelector(".faux-vscroll-spacer"),this._virtualization.viewportEl=e?.querySelector(".rows-viewport"),this._bodyEl=e?.querySelector(".rows"),this.__rowsBodyEl=e?.querySelector(".rows-body"),this.#ye.isInitialized){Rt(this.#U,this.#Ce),_t(this.#U,this.#p?.shell,this.#Ce);const e=this.#p?.shell?.toolPanel,t=e?.defaultOpen;t&&this.#Ce.toolPanels.has(t)&&this.#Ce.expandedSections.add(t);const o=!0===e?.locked||"open"===e?.initialState||void 0===e?.initialState&&void 0!==t&&this.#Ce.toolPanels.has(t);!this.#Ce.isPanelOpen&&this.#Ce.toolPanels.size>0&&o&&this.openToolPanel(),this.#Ce.isPanelOpen&&(xt(this.#U,this.#Ce),St(this.#U,this.#Ce,(this.#p,this.#p)),Et(this.#U,this.#Ce))}if(this.setAttribute("data-upgraded",""),this.#X=!0,this._resizeController=Je(this),this.#et(),this.#Ve(e),this.#be)return;this.#be=!0;const t=this.disconnectSignal;je(this,this,this.#U,t),this.#We(),queueMicrotask(()=>this.#tt()),this.#Q.requestPhase(le.FULL,"afterConnect")}#We(){const e=this.#p.rowHeight,t=this.#he.hasRowHeightPlugin();"function"==typeof e||t?this._virtualization.variableHeights||(this._virtualization.variableHeights=!0,this._virtualization.rowHeight="number"==typeof e&&e>0?e:this._virtualization.rowHeight||28,this.#fe.initializePositionCache(),"function"!=typeof e&&(this.#oe=!0)):!t&&"function"!=typeof e&&this._virtualization.variableHeights?(this._virtualization.variableHeights=!1,this._virtualization.positionCache=null):"number"==typeof e&&e>0?(this._virtualization.rowHeight=e,this._virtualization.variableHeights=!1):requestAnimationFrame(()=>this.#ot())}#ot(){if(this.#he.hasRowHeightPlugin())return;const e=this.#p.rowHeight;if("number"==typeof e&&e>0)return;const t=this._bodyEl?.querySelector(".data-grid-row");if(!t)return;if(t.style.getPropertyValue("--tbw-row-height"))return;const o=this.#it(),i=t.querySelectorAll(".cell");let n=0;i.forEach(e=>{const t=e.offsetHeight;t>n&&(n=t)});const r=t.getBoundingClientRect(),s=Math.max(r.height,n),l=this._virtualization.rowHeight,a=this.#Qe,c=o>0&&a>0&&Math.abs(o-a)>1,d=o>0&&0===a,h=s>0&&s-l>1;if(o>0&&(this.#Qe=o),c||d||h){const e=c||d?Math.max(o,s):s;Math.abs(e-l)>1&&(this._virtualization.rowHeight=e,this.#Q.requestPhase(le.VIRTUALIZATION,"measureRowHeight"))}}#it(){const e=getComputedStyle(this).getPropertyValue("--tbw-row-height").trim();if(!e)return 0;if(e.endsWith("px"))return parseFloat(e)||0;const t=this._bodyEl?.querySelector('.data-grid-row:not([style*="--tbw-row-height"]) > .cell');if(!t)return 0;const o=parseFloat(getComputedStyle(t).minHeight);return o>0?o:0}#nt(){const e=this._bodyEl?.querySelector(".data-grid-row");if(!e)return;const t=e.querySelectorAll(".cell");let o=0;t.forEach(e=>{const t=e.offsetHeight;t>o&&(o=t)});const i=e.getBoundingClientRect(),n=Math.max(i.height,o);if(n>0){if(Math.abs(n-this._virtualization.rowHeight)>1&&(this._virtualization.rowHeight=n),this.#fe.initializePositionCache(),this._virtualization.totalHeightEl){const e=this.#fe.calculateTotalSpacerHeight(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`}}}#Ve(e){this.#me?.abort(),this.#me=new AbortController;const t=this.#me.signal,o=e?.querySelector(".faux-vscroll"),i=e?.querySelector(".rows");if(this._virtualization.container=o??this,this.#te=this.#he?.getAll().some(e=>e.onScroll)??!1,o&&i){o.addEventListener("scroll",()=>{if(!this._virtualization.enabled&&!this.#te)return;const e=o.scrollTop,t=qe(e,this._virtualization.scrollMapping),n=this._virtualization.rowHeight;if(this._rows.length<=this._virtualization.bypassThreshold)i.style.transform=`translateY(${-e}px)`;else{const e=this._virtualization.positionCache;let o,r;if(this._virtualization.variableHeights&&e&&e.length>0){o=De(e,t),-1===o&&(o=0);const i=o-o%2;r=e[i]?.offset??i*n}else{o=Math.floor(t/n);r=(o-o%2)*n}const s=-(t-r);i.style.transform=`translateY(${s}px)`}this.#ee=e,this.#J||(this.#J=requestAnimationFrame(()=>{this.#J=0,null!==this.#ee&&(this.#rt(this.#ee),this.#ee=null)}))},{passive:!0,signal:t});const e=this.#U.querySelector(".tbw-scroll-area");this.#ve=e,this._virtualization.scrollAreaEl=e,e&&this.#te&&e.addEventListener("scroll",()=>{const t=this.#de;t.scrollTop=o.scrollTop,t.scrollLeft=e.scrollLeft,t.scrollHeight=o.scrollHeight,t.scrollWidth=e.scrollWidth,t.clientHeight=o.clientHeight,t.clientWidth=e.clientWidth,this.#he?.onScroll(t)},{passive:!0,signal:t});const n=this.#U.querySelector(".tbw-grid-content"),r=this.#ve;n&&(n.addEventListener("wheel",e=>{try{if(n.querySelector("select:open"))return}catch{}const t=e.shiftKey||Math.abs(e.deltaX)>Math.abs(e.deltaY);if(t&&r){const t=e.shiftKey?e.deltaY:e.deltaX,{scrollLeft:o,scrollWidth:i,clientWidth:n}=r;(t>0&&o<i-n||t<0&&o>0)&&(e.preventDefault(),r.scrollLeft+=t)}else if(!t){const{scrollTop:t,scrollHeight:i,clientHeight:n}=o;(e.deltaY>0&&t<i-n||e.deltaY<0&&t>0)&&(e.preventDefault(),o.scrollTop+=e.deltaY)}},{passive:!1,signal:t}),$t(n,this.#re,{fauxScrollbar:o,scrollArea:r},t))}var n,r,s;this._bodyEl&&(n=this,r=this._bodyEl,s=t,r.addEventListener("mousedown",e=>{const t=e.target.closest(".cell[data-col]");if(!t)return;if(t.classList.contains(_.EDITING))return;const o=e.target;o.draggable||o.closest('[draggable="true"]')||e.preventDefault(),Ue(n,t)},{signal:s}),r.addEventListener("click",e=>{const t=e.target.closest(".data-grid-row");if(t&&Me(n,e,t),!document.activeElement?.closest(`.cell.${_.EDITING}`)){const t=e.target.closest("tbw-grid, [data-tbw-grid]");t&&t.focus({preventScroll:!0})}},{signal:s}),r.addEventListener("dblclick",e=>{const t=e.target.closest(".data-grid-row");t&&Me(n,e,t)},{signal:s})),this.#le?.disconnect(),this._virtualization.viewportEl&&(this.#le=new ResizeObserver(()=>{this.#st(),this.#Q.requestPhase(le.VIRTUALIZATION,"resize-observer")}),this.#le.observe(this._virtualization.viewportEl)),this.#U.addEventListener("focusin",()=>{this.dataset.hasFocus=""},{signal:t}),this.#U.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&(this.#U.contains(t)||this.#pe.isInExternalFocusContainer(t))||delete this.dataset.hasFocus},{signal:t})}#Ze=!1;#Qe=0;#lt(){if(this.#Ze)return;const e=this._bodyEl?.querySelector(".data-grid-row");e&&(this.#Ze=!0,this.#ae?.disconnect(),this.#ae=new ResizeObserver(()=>{this.#ot()}),this.#ae.observe(e))}addEventListener(e,t,o){super.addEventListener(e,t,o)}removeEventListener(e,t,o){super.removeEventListener(e,t,o)}on(e,t){const o=e=>{t(e.detail,e)};return this.addEventListener(e,o),()=>this.removeEventListener(e,o)}#at(e,t){this.#X&&this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}_emitDataChange(){this.#at("data-change",{rowCount:this._rows.length,sourceRowCount:this.#j.length}),function(e,t,o){if(o===t.lastAnnouncedSourceCount)return;const i=t.lastAnnouncedSourceCount;t.lastAnnouncedSourceCount=o,0===o&&i<0||r(e,s(e,"dataLoaded",o))}(this,this.#ct,this.#j.length)}#tt(){const e=this._bodyEl?.querySelectorAll(".data-grid-row");e?.forEach((e,t)=>{const o=t===this._focusRow;e.setAttribute("aria-selected",String(o)),e.querySelectorAll(".cell").forEach((e,t)=>{e.setAttribute("aria-selected",String(o&&t===this._focusCol))})})}#Le(e){this.#Z[e]=!0,this.#K||(this.#K=!0,queueMicrotask(()=>this.#dt()))}#dt(){if(!this.#K||!this.#X)return void(this.#K=!1);const e=this.#Z;if(this.#K=!1,this.#Z={rows:!1,columns:!1,gridConfig:!1,fitMode:!1},e.gridConfig)return this.#ht(),void(e.rows&&this.#ut());e.columns&&this.#gt(),e.rows&&this.#ut(),e.fitMode&&this.#ft()}#ut(){this._rows=Array.isArray(this.#j)?[...this.#j]:[],this.#He=!0,this.#Q.requestPhase(le.ROWS,"applyRowsUpdate")}#pt(){this.#He&&this._rebuildRowIdMap()}_rebuildRowIdMap(){this.#He=!1,this.#Pe.clear();const e=this.#p.getRowId;for(let t=0;t<this._rows.length;t++){const o=rt(this._rows[t],e);void 0!==o&&this.#Pe.set(o,{row:this._rows[t],index:t})}}#gt(){Te(this),this.#Y.merge(),this.#et()}#ft(){this.#Y.merge();if("fixed"===this.#p.fitMode)this.__didInitialAutoSize=!1,m(this);else{for(let e=0;e<this._columns.length;e++){const t=this._columns[e];!t.__userResized&&t.__autoSized&&delete t.width}y(this)}}#ht(){vt(this,this.#Ce),Ct(this,this.#Ce);const e=!!this.#U.querySelector(".has-shell"),t=!!this.#U.querySelector(".tbw-tool-panel"),o=this.#U.querySelectorAll(".tbw-accordion-section").length,i=this.#U.querySelector(".tbw-tool-panel")?.dataset.position??"right";this.#Y.parseLightDomColumns(this),this.#Y.merge(),this.#$e(),this.#We(),yt(this,this.#Ce,this.#Ge()),this.#Y.markSourcesChanged(),this.#Y.merge();const n=this.#Y.initialColumnState;if(n){this.#Y.initialColumnState=void 0,this.#y=void 0;const e=this.#he?.getAll()??[];this.#Y.applyState(n,e)}const r=mt(this.#p?.shell),s=(this.#p?.shell?.toolPanels?.length??0)>0,l=this.#p?.shell?.toolPanels?.length??0,a=this.#p?.shell?.toolPanel?.position??"right";if(e!==r||!t&&s||t&&l!==o||t&&i!==a)return At(this.#Ce),this.#Ye(),this.#Fe(),this.#Xe(),void this._rebuildRowIdMap();e&&this.#wt(),this.#Ce.isPanelOpen&&St(this.#U,this.#Ce,(this.#p,this.#p)),this._rebuildRowIdMap(),this.#Q.requestPhase(le.COLUMNS,"applyGridConfigUpdate")}#wt(){const e=this.#U.querySelector(".tbw-shell-header");if(!e)return;const t=this.#p.shell?.header?.title??this.#Ce.lightDomTitle;let o=e.querySelector(".tbw-shell-title");t?(o||(o=document.createElement("h2"),o.className="tbw-shell-title",o.setAttribute("part","shell-title"),e.insertBefore(o,e.firstChild)),o.textContent=t):o&&o.remove()}#bt(){if(this.__rowRenderEpoch++,this.#he){const e=this.#Me.length>0?this.#Me:this._columns,t=e.filter(e=>!e.hidden),o=e.filter(e=>e.hidden),i=this.#he.processColumns([...t]);if(i!==t){const n=new Set(i.map(e=>e.field));!t.some(e=>n.has(e.field))&&i.length>0?this._columns=[...i,...o]:this._columns=this.#mt(e,i,o)}else this._columns=[...e]}}#mt(e,t,o){if(0===o.length)return t;const i=new Map;for(const l of t)i.set(l.field,l);const n=new Set(e.map(e=>e.field)),r=[];for(const l of t)n.has(l.field)||r.push(l);const s=[];for(const l of e){const e=i.get(l.field);e?s.push(e):l.hidden&&s.push(l)}return s.push(...r),s}#vt(){Te(this);const e=this.#j;if(!Array.isArray(e))return this._rows=[],this._rebuildRowIdMap(),this._virtualization.variableHeights&&this.#fe.initializePositionCache(),void this._emitDataChange();if(!this._sortState&&this.#p.initialSort){const{field:e,direction:t}=this.#p.initialSort;this._columns.find(t=>t.field===e)&&(this._sortState={field:e,direction:"desc"===t?-1:1})}this._sortState&&(this.__originalOrder=this._rows);const t=function(e,t,o=!1){if(!e._sortState)return t;const i=e.effectiveConfig?.sortHandler??V;if(i===V)return o||(e.__originalOrder=t.slice()),Y(t,e._sortState.field,e._sortState.direction,e._columns),t;o||(e.__originalOrder=t);const n=i(t,e._sortState,e._columns);return n&&"function"==typeof n.then?t:n}(this,this._sortState?[...e]:e,!0),o=this.#he?.processRows(t)??t;this._rows=o,this.#He=!0,this._emitDataChange()}_renderVisibleRows(e,t,o=this.__rowRenderEpoch){if(this.#ne||(this.#ne=(e,t,o)=>this.#he?.renderRow(e,t,o)??!1),function(e,t,o,i,n){const r=Math.max(0,o-t),s=e._bodyEl,l=e._visibleColumns,a=l.length;let c=e.__cachedHeaderRowCount;for(void 0===c&&(c=e.querySelector(".header-group-row")?2:1,e.__cachedHeaderRowCount=c);e._rowPool.length<r;){const t=Ae();e._rowPool.push(t)}if(e._rowPool.length>r){const t=e.__frameworkAdapter,o=t?.releaseCell;t?.beginBatch?.(e);try{for(let i=r;i<e._rowPool.length;i++){const n=e._rowPool[i];if(o){const e=n.children;for(let i=0;i<e.length;i++){const n=e[i];n.firstElementChild&&o.call(t,n)}}n.parentNode===s&&n.remove()}e._rowPool.length=r}finally{t?.endBatch?.(e)}}const d=n&&!1!==e.__hasRenderRowPlugins,h=e._hasAfterRowRenderHook?.()??!1,u=e._virtualization?.variableHeights&&"function"==typeof e.effectiveConfig?.rowHeight?e.effectiveConfig.rowHeight:null;for(let p=0;p<r;p++){const o=t+p,r=e._rows[o],w=e._rowPool[p];if(w.setAttribute("aria-rowindex",String(o+c+1)),d&&n(r,w,o)){w.__epoch=i,w.__rowDataRef=r,w.parentNode!==s&&s.appendChild(w);continue}const b=w.__epoch,m=w.__rowDataRef;let v=w.children.length;v>a&&w.lastElementChild?.classList.contains("tbw-row-loading-overlay")&&v--;const C=b===i&&v===a,y=m!==r,_=!!e._isGridEditMode;let R=!1;if(C&&y)for(let e=0;e<a;e++)if(l[e].externalView&&!w.querySelector(`.cell[data-col="${e}"] [data-external-view]`)){R=!0;break}if(!C||R){const t=_e(w),n=_&&!y||e._activeEditRows===o;t&&!n?(w.__isCustomRow&&(w.className="data-grid-row",w.setAttribute("role","row"),w.__isCustomRow=!1),Re(w),He(e,w,r,o),w.__epoch=i,w.__rowDataRef=r):t&&n?(Pe(e,w,r,o),w.__rowDataRef=r):(w.__isCustomRow&&(w.className="data-grid-row",w.setAttribute("role","row"),w.__isCustomRow=!1),He(e,w,r,o),w.__epoch=i,w.__rowDataRef=r)}else if(y){const t=_e(w),n=e._activeEditRows===o;t&&!n?(Re(w),He(e,w,r,o),w.__epoch=i,w.__rowDataRef=r):(Pe(e,w,r,o),w.__rowDataRef=r)}else{const t=_e(w),n=_||e._activeEditRows===o;t&&!n?(Re(w),He(e,w,r,o),w.__epoch=i,w.__rowDataRef=r):Pe(e,w,r,o)}let S=!1;const E=e._changedRowIdSet;if(E&&E.size>0)try{const t=e.getRowId?.(r);t&&(S=E.has(t))}catch{}S!==w.classList.contains("changed")&&w.classList.toggle("changed",S);const x=e.effectiveConfig?.rowClass;if(x){const t=w.getAttribute("data-dynamic-classes");if(t){const e=t.split(" ");for(let t=0;t<e.length;t++)e[t]&&w.classList.remove(e[t])}try{const e=x(r),t="string"==typeof e?e.split(/\s+/):e;if(t&&t.length>0){let e="";for(let o=0;o<t.length;o++){const i=t[o];i&&"string"==typeof i&&(w.classList.add(i),e+=(e?" ":"")+i)}w.setAttribute("data-dynamic-classes",e)}else w.removeAttribute("data-dynamic-classes")}catch(g){f("TBW060",`rowClass callback error: ${g}`,e.id),w.removeAttribute("data-dynamic-classes")}}if(u){const e=u(r,o);void 0!==e&&e>0?w.style.setProperty("--tbw-row-height",`${e}px`):w.style.removeProperty("--tbw-row-height")}h&&e._afterRowRender?.({row:r,rowIndex:o,rowElement:w}),w.parentNode!==s&&s.appendChild(w)}}(this,e,t,o,this.#ne),this.#Ee.size>0)for(const i of this.#Ee)this.#Ie(i,!0)}#ct={rowCount:-1,colCount:-1,ariaLabel:void 0,ariaLabelledBy:void 0,ariaDescribedBy:void 0,ariaRoleDescription:void 0,lastAnnouncedSourceCount:-1};_updateAriaCounts(e,t){!function(e,t,o,i,n){if(i===e.rowCount&&n===e.colCount)return!1;const r=e.rowCount;e.rowCount=i,e.colCount=n,t&&(t.setAttribute("aria-rowcount",String(i)),t.setAttribute("aria-colcount",String(n))),i!==r&&o&&(i>0?o.setAttribute("role","rowgroup"):o.removeAttribute("role"))}(this.#ct,this.__rowsBodyEl,this._bodyEl,e,t)}_requestSchedulerPhase(e,t){this.#Q.requestPhase(e,t)}_getPluginRowHeight(e,t){return this.#he?.getRowHeight?.(e,t)}_adjustPluginVirtualStart(e,t,o){return this.#he?.adjustVirtualStart(e,t,o)}_afterPluginRender(){this.#he?.afterRender()}_emitPluginEvent(e,t){this.#he?.emitPluginEvent(e,t)}_schedulerMergeConfig(){this.#Y.parseLightDomColumns(this),this.#Y.merge(),this.#$e(),function(e,t,o){const i=Wt,n=Bt,r=new Map;function s(e,t,o,i,n=!1){r.has(e)||r.set(e,{description:t,importHint:o,fields:[],isConfigProperty:n});const s=r.get(e);s.fields.includes(i)||s.fields.push(i)}const l=e.features;function a(e){return!!l&&!1===l[e]}for(const d of n){const o=e[d.property];if((d.isUsed?d.isUsed(o):void 0!==o)&&!Gt(t,d.pluginName)&&!a(d.pluginName)){const e=d.description||`the "${d.property}" ${d.level} property`;s(d.pluginName,e,Vt(d.pluginName),d.property,!0)}}const c=e.columns;if(c&&c.length>0)for(const d of c)for(const e of i){const o=d[e.property];if((e.isUsed?e.isUsed(o):void 0!==o)&&!Gt(t,e.pluginName)&&!a(e.pluginName)){const t=d.field||"<unknown>",o=e.description||`the "${e.property}" ${e.level} property`;s(e.pluginName,o,Vt(e.pluginName),t)}}if(r.size>0){const e=[];for(const[t,{description:o,importHint:i,fields:n,isConfigProperty:s}]of r)if(s)e.push(`Config uses ${o}, but the required plugin is not loaded.\n → Add the plugin to your gridConfig.plugins array:\n ${i}\n plugins: [new ${Ut(t)}Plugin(), ...]`);else{const r=n.slice(0,3).join(", ")+(n.length>3?`, ... (${n.length} total)`:"");e.push(`Column(s) [${r}] use ${o}, but the required plugin is not loaded.\n → Add the plugin to your gridConfig.plugins array:\n ${i}\n plugins: [new ${Ut(t)}Plugin(), ...]`)}g([...r.values()].some(e=>e.isConfigProperty)?"TBW002":"TBW001",`Configuration error:\n\n${e.join("\n\n")}\n\nThis validation helps catch misconfigurations early. The properties listed above require their respective plugins to function.`,o)}}(this.#p,this.#he?.getPlugins()??[],this.id),function(e,t){const o=[],i=[];for(const n of e){const e=n.constructor.manifest;if(e?.configRules)for(const t of e.configRules){const e=n.config;if(t.check(e)){const e=`[${Ut(n.name)}Plugin] Configuration warning: ${t.message}`;"error"===t.severity?o.push(e):i.push(e)}}}if(i.length>0&&ge())for(const n of i)f("TBW004",n,t);o.length>0&&g("TBW003",`Configuration error:\n\n${o.join("\n\n")}`,t)}(this.#he?.getPlugins()??[],this.id),function(e,t){if(!ge())return;const o=new Set(e.map(e=>e.name)),i=new Set;for(const n of e){const e=n.constructor.manifest;if(e?.incompatibleWith)for(const r of e.incompatibleWith)if(o.has(r.name)){const e=[n.name,r.name].sort().join("↔");if(i.has(e))continue;i.add(e),f("TBW022",`${Ut(n.name)}Plugin and ${Ut(r.name)}Plugin are both loaded, but they are currently incompatible.\n\n → ${r.reason}\n\n Consider removing one of these plugins to avoid unexpected behavior.`,t)}}}(this.#he?.getPlugins()??[],this.id),this.#Ct(),this.#Me=[...this._columns]}_schedulerProcessColumns(){this.#bt()}_schedulerProcessRows(){this.#vt()}_schedulerRenderHeader(){re(this)}_schedulerUpdateTemplate(){y(this)}_schedulerAfterRender(){this.#he?.afterRender(),this.#De(),this._virtualization.enabled&&this._virtualization.totalHeightEl&&queueMicrotask(()=>{if(!this._virtualization.totalHeightEl)return;const e=this.#fe.calculateTotalSpacerHeight(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`});"fixed"!==this.#p.fitMode||this.__didInitialAutoSize||(this.__didInitialAutoSize=!0,m(this)),this._restoreFocusAfterRender&&(this._restoreFocusAfterRender=!1,Be(this)),this._virtualization.enabled&&!this.#Ze&&this.#lt(),this.#oe&&(this.#oe=!1,requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.#nt()})})),this.#Se&&this.#Oe()}get _schedulerIsConnected(){return this.isConnected&&this.#X}get _hostElement(){return this}get _renderRoot(){return this.#U}_emit(e,t){this.#at(e,t)}get _accordionIcons(){return{expand:this.#p?.icons?.expand??n.expand,collapse:this.#p?.icons?.collapse??n.collapse}}get _shellState(){return this.#Ce}_clearRowPool(){const e=this.__frameworkAdapter,t=e?.releaseCell;if(t){e?.beginBatch?.(this);try{for(let o=0;o<this._rowPool.length;o++){const i=this._rowPool[o].children;for(let o=0;o<i.length;o++){const n=i[o];n.firstElementChild&&t.call(e,n)}}this._rowPool.length=0,this._bodyEl&&(this._bodyEl.innerHTML="")}finally{e?.endBatch?.(this)}}else this._rowPool.length=0,this._bodyEl&&(this._bodyEl.innerHTML="");this.__rowRenderEpoch++}_setup(){this.#et()}_applyAnimationConfig(e){const t={...i,...e.animation},o=t.mode??"reduced-motion";let n=1;!1===o||"off"===o?n=0:!0!==o&&"on"!==o||(n=1),this.style.setProperty("--tbw-animation-duration",`${t.duration}ms`),this.style.setProperty("--tbw-animation-easing",t.easing??"ease-out"),this.style.setProperty("--tbw-animation-enabled",String(n)),this.dataset.animationMode="boolean"==typeof o?o?"on":"off":o}#Ct(){!function(e,t,o,i){if(!t)return!1;let n=!1;const r=o?.gridAriaLabelledBy,s=r?void 0:function(e,t){const o=e?.gridAriaLabel;return o||(e?.shell?.header?.title??t?.lightDomTitle??void 0)}(o,i);r!==e.ariaLabelledBy&&(e.ariaLabelledBy=r,r?t.setAttribute("aria-labelledby",r):t.removeAttribute("aria-labelledby"),n=!0),s!==e.ariaLabel&&(e.ariaLabel=s,s?t.setAttribute("aria-label",s):t.removeAttribute("aria-label"),n=!0);const l=o?.gridAriaDescribedBy;l!==e.ariaDescribedBy&&(e.ariaDescribedBy=l,l?t.setAttribute("aria-describedby",l):t.removeAttribute("aria-describedby"),n=!0);const a=o?.gridAriaRoleDescription;a!==e.ariaRoleDescription&&(e.ariaRoleDescription=a,a?t.setAttribute("aria-roledescription",a):t.removeAttribute("aria-roledescription"),n=!0)}(this.#ct,this.__rowsBodyEl,this.#p,this.#Ce)}#Oe(){const e=this.querySelector(".tbw-grid-root");var t;e&&(this.#Se?(this.#Ae||(this.#Ae=function(e){const t=document.createElement("div");return t.className="tbw-loading-overlay",t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.appendChild(Qe("large",e)),t}(this.#p?.loadingRenderer)),function(e,t){e.appendChild(t)}(e,this.#Ae)):(t=this.#Ae,t?.remove()))}#De(){!function(e,t,o,i,n,r,s){if(!e)return;if(!function(e,t,o){return!(e||t>0||null===o)}(t,o,n))return ue(s.el),s.el=void 0,s.renderer=void 0,s.target=void 0,s.sourceRows=void 0,void(s.filteredOut=void 0);const l=i.length,a=l>0&&0===o;if(s.el&&s.renderer===n&&s.target===r&&s.sourceRows===i&&s.filteredOut===a)return;const c="grid"===r?e:e.querySelector(".rows-container")??e;ue(s.el),s.el=he({sourceRowCount:l,filteredOut:a},n??void 0,r),function(e,t){e.appendChild(t)}(c,s.el),s.renderer=n,s.target=r,s.sourceRows=i,s.filteredOut=a}(this.querySelector(".tbw-grid-root"),this.#Se,this._rows.length,this.#j,this.#p?.emptyRenderer,this.#p?.emptyOverlay??"rows",this.#Te)}#Ie(e,t){this.#pt();const o=this.#Pe.get(e);if(!o)return;const i=this.findRenderedRowElement?.(o.index);i&&function(e,t){if(t){if(e.classList.add("tbw-row-loading"),e.setAttribute("aria-busy","true"),!e.querySelector(".tbw-row-loading-overlay")){const t=document.createElement("div");t.className="tbw-row-loading-overlay",t.setAttribute("aria-hidden","true");const o=document.createElement("div");o.className="tbw-row-loading-spinner",t.appendChild(o),e.appendChild(t)}}else e.classList.remove("tbw-row-loading"),e.removeAttribute("aria-busy"),e.querySelector(".tbw-row-loading-overlay")?.remove()}(i,t)}#ze(e,t,o){this.#pt();const i=this.#Pe.get(e);if(!i)return;const n=this.findRenderedRowElement?.(i.index);if(!n)return;const r=this._visibleColumns.findIndex(e=>e.field===t);if(r<0)return;const s=n.children[r];s&&function(e,t){t?(e.classList.add("tbw-cell-loading"),e.setAttribute("aria-busy","true")):(e.classList.remove("tbw-cell-loading"),e.removeAttribute("aria-busy"))}(s,o)}#et(){if(this.isConnected&&this._headerRowEl&&this._bodyEl){if(this.#Y.parseLightDomColumns(this),this.#y){const e=this.#y;this.#y=void 0,this.#Y.merge();const t=this.#he?.getAll()??[];this.#Y.applyState(e,t)}this._bodyEl&&(this._bodyEl.style.display="",this._bodyEl.style.gridTemplateColumns=""),this.#Q.requestPhase(le.FULL,"setup")}}#rt(e){const t=this._virtualization.container,o=this.#ve,i=o?.scrollLeft??0,n=t?.scrollHeight??0,r=o?.scrollWidth??0,s=t?.clientHeight??0,l=o?.clientWidth??0;if(this.refreshVirtualWindow(!1)&&this.#he?.onScrollRender(),this._virtualization.variableHeights&&(this.#ie&&clearTimeout(this.#ie),this.#ie=window.setTimeout(()=>{this.#ie=0,this.#fe.measureRenderedRowHeights(this._virtualization.start,this._virtualization.end)},100)),this.#te){const t=this.#de;t.scrollTop=e,t.scrollLeft=i,t.scrollHeight=n,t.scrollWidth=r,t.clientHeight=s,t.clientWidth=l,this.#he?.onScroll(t)}this.#at("tbw-scroll",{scrollTop:e,scrollHeight:n,clientHeight:s,direction:"vertical"})}findHeaderRow(){return this.#U.querySelector(".header-row")}findRenderedRowElement(e){const t=this._virtualization,o=e-t.start;return o>=0&&o<this._rowPool.length&&o<t.end-t.start?this._rowPool[o]:null}_dispatchCellClick(e,t,o,i){const n=this._rows[t],r=this._visibleColumns[o];if(!n||!r)return!1;const s=r.field,l=n[s],a=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,composed:!0,detail:{rowIndex:t,colIndex:o,column:r,field:s,value:l,row:n,cellEl:i,trigger:"pointer",originalEvent:e}});if(this.dispatchEvent(a),a.defaultPrevented)return!0;const c={row:n,rowIndex:t,colIndex:o,column:r,field:s,value:l,cellEl:i,originalEvent:e},d=this.#he?.onCellClick(c)??!1;return this.#at("cell-click",c),d}_dispatchRowClick(e,t,o,i){if(!o)return!1;const n={rowIndex:t,row:o,rowEl:i,originalEvent:e},r=this.#he?.onRowClick(n)??!1;return this.#at("row-click",n),r}_dispatchHeaderClick(e,t,o){if(!t)return!1;const i={colIndex:this._columns.indexOf(t),field:t.field,column:t,headerEl:o,originalEvent:e};return this.#he?.onHeaderClick(i)??!1}_dispatchKeyDown(e){return this.#he?.onKeyDown(e)??!1}_getHorizontalScrollOffsets(e,t){return this.#he?.getHorizontalScrollOffsets(e,t)??{left:0,right:0}}query(e,t){return this.#he?.queryPlugins({type:e,context:t})??[]}_dispatchCellMouseDown(e){return this.#he?.onCellMouseDown(e)??!1}_dispatchCellMouseMove(e){this.#he?.onCellMouseMove(e)}_dispatchCellMouseUp(e){this.#he?.onCellMouseUp(e)}_afterCellRender(e){this.#he?.afterCellRender(e)}_hasAfterCellRenderHook(){return this.#he?.hasAfterCellRenderHook()??!1}_afterRowRender(e){this.#he?.afterRowRender(e)}_hasAfterRowRenderHook(){return this.#he?.hasAfterRowRenderHook()??!1}async ready(){return this.#i}async forceLayout(){return 0===this.#Q.pendingPhase&&this.#Q.requestPhase(le.FULL,"forceLayout"),this.#Q.whenReady()}async getConfig(){return Object.freeze({...this.#p||{}})}getRowId(e){return st(e,this.id,this.#p.getRowId)}getRow(e){return this.#we.getRow(e)}_getRowEntry(e){return this.#pt(),this.#Pe.get(e)}updateRow(e,t,o="api"){this.#we.updateRow(e,t,o)}updateRows(e,t="api"){this.#we.updateRows(e,t)}animateRow(e,t){return nt(this,e,t)}animateRows(e,t){return function(e,t,o){return Promise.all(t.map(t=>nt(e,t,o))).then(e=>e.filter(Boolean).length)}(this,e,t)}animateRowById(e,t){return function(e,t,o){const i=e._rows??[],n=e.getRowId;if(!n)return Promise.resolve(!1);const r=i.findIndex(e=>{if(null==e)return!1;try{return n(e)===t}catch{return!1}});return r<0?Promise.resolve(!1):nt(e,r,o)}(this,e,t)}async insertRow(e,t,o=!0){return this.#we.insertRow(e,t,o)}async removeRow(e,t=!0){return this.#we.removeRow(e,t)}async applyTransaction(e,t=!0){return this.#we.applyTransaction(e,t)}applyTransactionAsync(e){return this.#we.applyTransactionAsync(e)}focusCell(e,t){this.#pe.focusCell(e,t)}get focusedCell(){return this.#pe.focusedCell}scrollToRow(e,t){this.#pe.scrollToRow(e,t)}scrollToRowById(e,t){this.#pe.scrollToRowById(e,t)}setColumnVisible(e,t){const o=this.#Y.setColumnVisible(e,t);return o&&this.requestStateChange(),o}toggleColumnVisibility(e){const t=this.#Y.toggleColumnVisibility(e);return t&&this.requestStateChange(),t}isColumnVisible(e){return this.#Y.isColumnVisible(e)}showAllColumns(){this.#Y.showAllColumns(),this.requestStateChange()}getAllColumns(){return this.#Y.getAllColumns()}setColumnOrder(e){this.#Y.setColumnOrder(e),this.requestStateChange()}getColumnOrder(){return this.#Y.getColumnOrder()}getColumnState(){const e=this.#he?.getAll()??[];return this.#Y.collectState(e)}get columnState(){return this.getColumnState()}applyColumnState(e){e&&(this.#G?this.#yt(e):(this.#y=e,this.#Y.initialColumnState=e))}#yt(e){const t=this._columns,o=this._sortState,i=this.#he?.getAll()??[];this.#Y.applyState(e,i);if(!e.columns.some(e=>void 0!==e.sort)&&this.#_t(t,o))return this.#ke=void 0,y(this),void this.#Q.requestPhase(le.STYLE,"column-width");this.#et()}#_t(e,t){const o=this._columns,i=this._sortState;if(t?.field!==i?.field||t?.direction!==i?.direction)return!1;if(e.length!==o.length)return!1;for(let n=0;n<e.length;n++){const t=e[n],i=o[n];if(t.field!==i.field)return!1;if(!!t.hidden!=!!i.hidden)return!1}return!0}get sortModel(){return this._sortState?{field:this._sortState.field,direction:1===this._sortState.direction?"asc":"desc"}:null}sort(e,t){if(null===e){if(!this._sortState)return;const e=this._sortState.field;this._sortState=null,this.__rowRenderEpoch++;for(let t=0;t<this._rowPool.length;t++)this._rowPool[t].__epoch=-1;return this._rows=this.__originalOrder.slice(),this.__originalOrder=[],re(this),this.refreshVirtualWindow(!0),this.dispatchEvent(new CustomEvent("sort-change",{detail:{field:e,direction:0}})),this._pluginManager?.emitPluginEvent?.("sort-change",{field:e,direction:0}),void this.requestStateChange?.()}const o=this._columns.find(t=>t.field===e);o&&(t?(this._sortState||(this.__originalOrder=this._rows.slice()),J(this,o,"desc"===t?-1:1)):Q(this,o))}requestStateChange(){const e=this.#he?.getAll()??[];this.#Y.requestStateChange(e)}resetColumnState(){this.#y=void 0,this.__originalOrder=[];const e=this.#he?.getAll()??[];this.#Y.resetState(e),this.#Y.merge(),this.#et()}get isToolPanelOpen(){return this.#ye.isPanelOpen}get defaultRowHeight(){return this._virtualization.rowHeight}get expandedToolPanelSections(){return this.#ye.expandedSections}openToolPanel(e){this.#ye.openToolPanel(e)}closeToolPanel(){this.#ye.closeToolPanel()}toggleToolPanel(){this.#ye.toggleToolPanel()}toggleToolPanelSection(e){this.#ye.toggleToolPanelSection(e)}getToolPanels(){return this.#ye.getToolPanels()}registerToolPanel(e){this.#Ce.apiToolPanelIds.add(e.id),this.#ye.registerToolPanel(e)}unregisterToolPanel(e){this.#Ce.apiToolPanelIds.delete(e),this.#ye.unregisterToolPanel(e)}getHeaderContents(){return this.#ye.getHeaderContents()}registerHeaderContent(e){this.#Ce.apiHeaderContentIds.add(e.id),this.#ye.registerHeaderContent(e)}unregisterHeaderContent(e){this.#Ce.apiHeaderContentIds.delete(e),this.#ye.unregisterHeaderContent(e)}getToolbarContents(){return this.#ye.getToolbarContents()}registerToolbarContent(e){this.#ye.registerToolbarContent(e)}unregisterToolbarContent(e){this.#ye.unregisterToolbarContent(e)}#Rt=!1;refreshShellHeader(){this.#Rt||(this.#Rt=!0,queueMicrotask(()=>{if(this.#Rt=!1,!this.isConnected)return;this.#je(),this.#Y.markSourcesChanged(),this.#Y.merge(),At(this.#Ce);(function(e,t,o,i){const n=e.querySelector(`.${_.ROOT}`),r=n?.querySelector(".tbw-grid-content");if(!n||!r)return Pt(e,t,o,i);r.remove();const s=mt(t);if(n.replaceChildren(),s){n.className=`${_.ROOT} has-shell`;const{headerOptions:e,bodyOptions:s}=Tt(t,o,i),l=pt(e),a=wt(s),c=a.querySelector(".tbw-grid-content");c&&c.replaceWith(r),n.appendChild(l),n.appendChild(a)}else n.className=_.ROOT,n.appendChild(r);return s})(this.#U,this.#p?.shell,{isPanelOpen:this.#Ce.isPanelOpen,expandedSections:this.#Ce.expandedSections},this.#p?.icons)&&(this.#St(),this.#ye.setInitialized(!0)),this.#Et()}))}#Et(){const e=this.#U.querySelector(".tbw-grid-content")??this.#U.querySelector(".tbw-grid-root");if(this._headerRowEl=e?.querySelector(".header-row"),this._virtualization.totalHeightEl=e?.querySelector(".faux-vscroll-spacer"),this._virtualization.viewportEl=e?.querySelector(".rows-viewport"),this._bodyEl=e?.querySelector(".rows"),this.__rowsBodyEl=e?.querySelector(".rows-body"),this.#ye.isInitialized){Rt(this.#U,this.#Ce),_t(this.#U,this.#p?.shell,this.#Ce);const e=this.#p?.shell?.toolPanel,t=e?.defaultOpen;t&&this.#Ce.toolPanels.has(t)&&this.#Ce.expandedSections.add(t);const o=!0===e?.locked||"open"===e?.initialState||void 0===e?.initialState&&void 0!==t&&this.#Ce.toolPanels.has(t);!this.#Ce.isPanelOpen&&this.#Ce.toolPanels.size>0&&o&&this.openToolPanel(),this.#Ce.isPanelOpen&&(xt(this.#U,this.#Ce),St(this.#U,this.#Ce,(this.#p,this.#p)),Et(this.#U,this.#Ce))}this._resizeController=Je(this),this.#Ve(e),this.#Q.requestPhase(le.COLUMNS,"shellRefresh")}#Je=new Map;registerStyles(e,t){let o=this.#Je.get(e);o||(o=new CSSStyleSheet,this.#Je.set(e,o)),o.replaceSync(t),this.#xt()}unregisterStyles(e){this.#Je.delete(e)&&this.#xt()}getRegisteredStyles(){return Array.from(this.#Je.keys())}#xt(){const e=Array.from(this.#Je.values()),t=document.adoptedStyleSheets.filter(e=>!Array.from(this.#Je.values()).includes(e));document.adoptedStyleSheets=[...t,...e]}registerExternalFocusContainer(e){this.#pe.registerExternalFocusContainer(e)}unregisterExternalFocusContainer(e){this.#pe.unregisterExternalFocusContainer(e)}containsFocus(e){return this.#pe.containsFocus(e)}get lastFocusedElement(){return this.#pe.lastFocusedElement}restoreLastFocus(){return this.#pe.restoreLastFocus()}#je(){vt(this,this.#Ce),Ct(this,this.#Ce),yt(this,this.#Ce,this.#Ge())}#At(){const e=this.#U.querySelector(".tbw-shell-header");if(!e)return;At(this.#Ce);const t=function(e,t,o){const i=e?.header?.title??t.lightDomTitle??"",n=!!i;let r="";void 0!==o&&(r="string"==typeof o?O(o):o.outerHTML);const s=e?.header?.toolbarContents??[],l=[...t.toolbarContents.values()],a=new Set(s.map(e=>e.id)),c=[...s];for(const m of l)a.has(m.id)||c.push(m);const d=c.length>0,h=t.toolPanels.size>0,u=!0===e?.toolPanel?.locked,g=h&&!1!==e?.header?.toolPanelToggle&&!u,f=d&&g,p=[...c].sort((e,t)=>(e.order??0)-(t.order??0));let w="";for(const m of p)w+=`<div class="tbw-toolbar-content-slot" data-toolbar-content="${m.id}"></div>`;if(f&&(w+='<div class="tbw-toolbar-separator"></div>'),g){const e=t.isPanelOpen;w+=`<button type="button" class="${e?"tbw-toolbar-btn active":"tbw-toolbar-btn"}" data-panel-toggle data-icon="tool-panel" title="Settings" aria-label="Toggle settings panel" aria-pressed="${e}" aria-controls="tbw-tool-panel">${r}</button>`}return`\n <div class="tbw-shell-header" part="shell-header" role="presentation">\n ${n?`<div class="tbw-shell-title">${b=i,b&&"string"==typeof b?b.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"):""}</div>`:""}\n <div class="tbw-shell-content" part="shell-content" role="presentation" data-light-dom-header-content></div>\n <div class="tbw-shell-toolbar" part="shell-toolbar" role="presentation">\n ${w}\n </div>\n </div>\n `;var b}(this.#p.shell,this.#Ce,this.#p.icons?.toolPanel),o=document.createElement("div");o.innerHTML=t;const i=o.firstElementChild;i&&(e.replaceWith(i),this.#St(),_t(this.#U,this.#p?.shell,this.#Ce))}#Ke(){const e=()=>{const e=this.#Ce.lightDomTitle,t=this.#Ce.hasToolButtonsContainer;this.#je();const o=this.#Ce.lightDomTitle,i=this.#Ce.hasToolButtonsContainer;(o&&!e||i&&!t)&&(this.#Y.markSourcesChanged(),this.#Y.merge(),this.#At())},t=()=>{this.__lightDomColumnsCache=void 0,this.#et()};this.#Y.registerLightDomHandler("tbw-grid-header",e),this.#Y.registerLightDomHandler("tbw-grid-tool-buttons",e),this.#Y.registerLightDomHandler("tbw-grid-tool-panel",e),this.#Y.registerLightDomHandler("tbw-grid-column",t),this.#Y.registerLightDomHandler("tbw-grid-detail",t),this.#Y.observeLightDOM(this)}refreshColumns(){this.__lightDomColumnsCache=void 0,Te(this),this.#Y.parseLightDomColumns(this);const e=this.#Ce.lightDomTitle,t=this.#Ce.hasToolButtonsContainer;this.#je();const o=this.#Ce.lightDomTitle,i=this.#Ce.hasToolButtonsContainer;(o&&!e||i&&!t)&&(this.#Y.markSourcesChanged(),this.#Y.merge(),this.#At()),this.#Q.requestPhase(le.COLUMNS,"refreshColumns")}#st(){this.#fe.updateCachedGeometry()}refreshVirtualWindow(e=!1,t=!1){return this.#fe.refreshVirtualWindow(e,t)}invalidateRowHeight(e,t){this.#fe.invalidateRowHeight(e,t)}#Ye(){this.#je(),this.#Y.markSourcesChanged(),this.#Y.merge();const e=this.#p?.shell;Pt(this.#U,e,{isPanelOpen:this.#Ce.isPanelOpen,expandedSections:this.#Ce.expandedSections},this.#p?.icons)&&(this.#St(),this.#ye.setInitialized(!0))}#St(){!function(e,t,o,i){const n=e.querySelector(".tbw-shell-toolbar");n&&n.addEventListener("click",e=>{e.target.closest("[data-panel-toggle]")&&i.onPanelToggle()});const r=e.querySelector(".tbw-accordion");r&&r.addEventListener("click",e=>{const t=e.target.closest(".tbw-accordion-header");if(t){const e=t.closest("[data-section]"),o=e?.getAttribute("data-section");o&&i.onSectionToggle(o)}})}(this.#U,this.#p,this.#Ce,{onPanelToggle:()=>this.toggleToolPanel(),onSectionToggle:e=>this.toggleToolPanelSection(e)}),this.#_e?.(),this.#_e=function(e,t,o){const i=e.querySelector(".tbw-tool-panel"),n=e.querySelector("[data-resize-handle]"),r=e.querySelector(".tbw-shell-body");if(!i||!n||!r)return()=>{};const s=t?.toolPanel?.position??"right";let l=0,a=0,c=0,d=!1;const h=e=>{if(!d)return;e.preventDefault();const t="left"===s?e.clientX-l:l-e.clientX,o=Math.min(c,Math.max(200,a+t));i.style.width=`${o}px`},u=()=>{if(!d)return;d=!1,n.classList.remove("resizing"),i.style.transition="",document.body.style.cursor="",document.body.style.userSelect="";const e=i.getBoundingClientRect().width;o(e),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u)},g=e=>{e.preventDefault(),d=!0,l=e.clientX,a=i.getBoundingClientRect().width,c=r.getBoundingClientRect().width-20,n.classList.add("resizing"),i.style.transition="none",document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",h),document.addEventListener("mouseup",u)};return n.addEventListener("mousedown",g),()=>{n.removeEventListener("mousedown",g),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u)}}(this.#U,this.#p?.shell,e=>{this.style.setProperty("--tbw-tool-panel-width",`${e}px`)}),this.#Re?.(),this.#Re=function(e,t,o,i){if(!t?.toolPanel?.closeOnClickOutside)return()=>{};if("push"===t.toolPanel.mode)return()=>{};const n=e=>{if(!o.isPanelOpen)return;const t=e.target;t&&(t.closest(".tbw-tool-panel")||t.closest("[data-panel-toggle]")||i())};return e.addEventListener("mousedown",n),()=>e.removeEventListener("mousedown",n)}(this,this.#p?.shell,this.#Ce,()=>this.closeToolPanel())}}!function(){const e=Xt.tagName,t=customElements.get(e);if(!t)return customElements.define(e,Xt),void(Xt.activeTag=e);if(t.version===Xt.version)return void(Xt.activeTag=e);const o=`${e}-v${Xt.version.replace(/[^a-zA-Z0-9]+/g,"-").toLowerCase()}`;customElements.get(o)||customElements.define(o,Xt),Xt.activeTag=o}(),globalThis.DataGridElement||(globalThis.DataGridElement=Xt);function Kt(e,t,o){return o?.valueAccessor?W(e,o):e?.[t]}function Zt(e){return null==e||""===e||"number"==typeof e&&isNaN(e)}const Qt={sum:(e,t,o)=>{let i=0;for(let n=0;n<e.length;n++){const r=Kt(e[n],t,o);if(Zt(r))continue;const s=Number(r);isNaN(s)||(i+=s)}return i},avg:(e,t,o)=>{if(!e.length)return 0;let i=0,n=0;for(let r=0;r<e.length;r++){const s=Kt(e[r],t,o);if(Zt(s))continue;const l=Number(s);isNaN(l)||(i+=l,n++)}return n>0?i/n:0},count:e=>e.length,min:(e,t,o)=>{if(!e.length)return 0;let i=1/0;for(let n=0;n<e.length;n++){const r=Kt(e[n],t,o);if(Zt(r))continue;const s=Number(r);isNaN(s)||s<i&&(i=s)}return i===1/0?0:i},max:(e,t,o)=>{if(!e.length)return 0;let i=-1/0;for(let n=0;n<e.length;n++){const r=Kt(e[n],t,o);if(Zt(r))continue;const s=Number(r);isNaN(s)||s>i&&(i=s)}return i===-1/0?0:i},first:(e,t,o)=>e[0]?Kt(e[0],t,o):void 0,last:(e,t,o)=>e.length?Kt(e[e.length-1],t,o):void 0},Jt=new Map,eo={register(e,t){Jt.set(e,t)},unregister(e){Jt.delete(e)},get(e){if(void 0!==e)return"function"==typeof e?e:Jt.get(e)??Qt[e]},run(e,t,o,i){const n=this.get(e);return n?n(t,o,i):void 0},has:e=>Jt.has(e)||e in Qt,list:()=>[...Object.keys(Qt),...Jt.keys()]},to={sum:e=>{let t=0;for(let o=0;o<e.length;o++)t+=e[o];return t},avg:e=>{if(!e.length)return 0;let t=0;for(let o=0;o<e.length;o++)t+=e[o];return t/e.length},count:e=>e.length,min:e=>{if(!e.length)return 0;let t=e[0];for(let o=1;o<e.length;o++)e[o]<t&&(t=e[o]);return t},max:e=>{if(!e.length)return 0;let t=e[0];for(let o=1;o<e.length;o++)e[o]>t&&(t=e[o]);return t},first:e=>e[0]??0,last:e=>e[e.length-1]??0};function oo(e){return to[e]??to.sum}e.BaseGridPlugin=class{static dependencies;static manifest;aliases;version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#Tt;get defaultConfig(){return{}}constructor(e={}){this.userConfig=e}mergeConfigsFrom(e){if(0===e.length)return;const t={...this.userConfig},o={};for(const i of Object.keys(t))o[i]=this;for(const i of e){const e=i.userConfig;for(const[n,r]of Object.entries(e)){if(void 0===r)continue;if(!(n in t)){t[n]=r,o[n]=i;continue}if(t[n]===r)continue;const e=o[n]?.constructor.name??this.constructor.name,s=i.constructor.name,l=u("TBW025",`Cannot merge plugin configs for "${this.name}": conflicting value for "${n}" supplied by both ${e} and ${s}. Pass the option on a single instance, or remove the duplicate.`,void 0,this.name);throw new Error(l)}}Object.assign(this.userConfig,t)}attach(e){this.#Tt?.abort(),this.#Tt=new AbortController,this.grid=e,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#Tt?.abort(),this.#Tt=void 0}getPlugin(e){return this.grid?.getPlugin(e)}emit(e,t){this.grid?.dispatchEvent?.(new CustomEvent(e,{detail:t,bubbles:!0}))}emitCancelable(e,t){const o=new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(o),o.defaultPrevented}on(e,t){this.grid?._pluginManager?.subscribe(this,e,t)}off(e){this.grid?._pluginManager?.unsubscribe(this,e)}emitPluginEvent(e,t){this.grid?._pluginManager?.emitPluginEvent(e,t)}broadcast(e,t){this.emitPluginEvent(e,t),this.emit(e,t)}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.#Tt?.signal??this.grid?.disconnectSignal}get gridIcons(){const e=this.grid?.gridConfig?.icons??{};return{...n,...e}}get isAnimationEnabled(){const e=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===e||"off"===e)return!1;if(!0===e||"on"===e)return!0;const t=this.gridElement;if(t){return"0"!==getComputedStyle(t).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const e=this.gridElement;if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-animation-duration").trim(),o=parseInt(t,10);if(!isNaN(o))return o}return 200}setIcon(e,t,o){e.dataset.icon=F(t),"collapse"===t?e.dataset.expanded="":"expand"===t&&delete e.dataset.expanded;const i=this.#Pt(t,o);void 0!==i?"string"==typeof i?e.innerHTML=O(i):i instanceof HTMLElement&&(e.innerHTML="",e.appendChild(i.cloneNode(!0))):e.innerHTML=""}#Pt(e,t){return void 0!==t?t:this.grid?.gridConfig?.icons?.[e]}updateSortIndicator(e,t){e.querySelector('[part~="sort-indicator"], .sort-indicator')?.remove();const o=document.createElement("span");o.setAttribute("part","sort-indicator"),o.className="sort-indicator",t?(e.setAttribute("aria-sort","asc"===t?"ascending":"descending"),e.setAttribute("data-sort",t),this.setIcon(o,"asc"===t?"sortAsc":"sortDesc")):(e.setAttribute("aria-sort","none"),e.removeAttribute("data-sort"),this.setIcon(o,"sortNone"));const i=e.querySelector(".tbw-filter-btn")??e.querySelector(".resize-handle");return i?e.insertBefore(o,i):e.appendChild(o),o}warn(e,t){void 0!==t?console.warn(u(e,t,this.gridElement.id,this.name)):console.warn(`${l(this.gridElement.id,this.name)} ${e}`)}throwDiagnostic(e,t){throw new Error(u(e,t,this.gridElement.id,this.name))}},e.CORE_CONSUMED_ADAPTER_METHODS=["canHandle","createRenderer","createEditor","processConfig","getTypeDefault","createToolPanelRenderer","parseDetailElement","parseResponsiveCardElement","releaseCell","unmount","beginBatch","endBatch"],e.DEFAULT_A11Y_MESSAGES=o,e.DEFAULT_ANIMATION_CONFIG=i,e.DEFAULT_GRID_ICONS=n,e.DGEvents={CELL_CHANGE:"cell-change",CELL_COMMIT:"cell-commit",ROW_COMMIT:"row-commit",EDIT_OPEN:"edit-open",EDIT_CLOSE:"edit-close",CHANGED_ROWS_RESET:"changed-rows-reset",MOUNT_EXTERNAL_VIEW:"mount-external-view",MOUNT_EXTERNAL_EDITOR:"mount-external-editor",SORT_CHANGE:"sort-change",COLUMN_RESIZE:"column-resize",CELL_ACTIVATE:"cell-activate",GROUP_TOGGLE:"group-toggle",COLUMN_STATE_CHANGE:"column-state-change",DATA_CHANGE:"data-change",TBW_SCROLL:"tbw-scroll"},e.DataGridElement=Xt,e.FitModeEnum=t,e.GridCSSVars={COLOR_BG:"--tbw-color-bg",COLOR_FG:"--tbw-color-fg",COLOR_FG_MUTED:"--tbw-color-fg-muted",COLOR_BORDER:"--tbw-color-border",COLOR_ACCENT:"--tbw-color-accent",COLOR_HEADER_BG:"--tbw-color-header-bg",COLOR_HEADER_FG:"--tbw-color-header-fg",COLOR_SELECTION:"--tbw-color-selection",COLOR_ROW_HOVER:"--tbw-color-row-hover",COLOR_ROW_ALT:"--tbw-color-row-alt",ROW_HEIGHT:"--tbw-row-height",HEADER_HEIGHT:"--tbw-header-height",CELL_PADDING:"--tbw-cell-padding",FONT_FAMILY:"--tbw-font-family",FONT_SIZE:"--tbw-font-size",BORDER_RADIUS:"--tbw-border-radius",FOCUS_OUTLINE:"--tbw-focus-outline"},e.GridClasses=_,e.GridDataAttrs=R,e.GridElement=Xt,e.GridSelectors=S,e.MAX_ELEMENT_HEIGHT_PX=ze,e.PluginEvents={SELECTION_CHANGE:"selection-change",TREE_EXPAND:"tree-expand",TREE_LOAD_START:"tree-load-start",TREE_LOAD_END:"tree-load-end",TREE_LOAD_ERROR:"tree-load-error",FILTER_CHANGE:"filter-change",SORT_MODEL_CHANGE:"sort-model-change",EXPORT_START:"export-start",EXPORT_COMPLETE:"export-complete",CLIPBOARD_COPY:"clipboard-copy",CLIPBOARD_PASTE:"clipboard-paste",CONTEXT_MENU_OPEN:"context-menu-open",CONTEXT_MENU_CLOSE:"context-menu-close",HISTORY_CHANGE:"history-change",SERVER_LOADING:"server-loading",SERVER_ERROR:"server-error",COLUMN_VISIBILITY_CHANGE:"column-visibility-change",COLUMN_REORDER:"column-reorder",DETAIL_EXPAND:"detail-expand",GROUP_EXPAND:"group-expand"},e.PluginManager=Yt,e.RenderPhase=le,e.aggregatorRegistry=eo,e.builtInSort=V,e.computeScrollMapping=Ne,e.createGrid=function(e){const t=document.createElement("tbw-grid");return e&&(t.gridConfig=e),t},e.defaultComparator=function(e,t){return null==e&&null==t?0:null==e?-1:null==t||e>t?1:e<t?-1:0},e.fromVirtualScrollTop=Fe,e.getValueAggregator=oo,e.invalidateAccessorCache=B,e.queryGrid=function(e,t,o){let i=document,n=!1;return"boolean"==typeof t?n=t:t&&(i=t,n=!!o),n?customElements.whenDefined(Xt.tagName).then(()=>i.querySelector(e)):i.querySelector(e)},e.resolveCellValue=W,e.runValueAggregator=function(e,t){return oo(e)(t)},e.setFeatureResolver=function(e){Ye=e},e.toVirtualScrollTop=qe,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TbwGrid={})}(this,function(e){"use strict";const t={STRETCH:"stretch",FIXED:"fixed"},o={sortApplied:(e,t)=>`Sorted by ${e}, ${t}`,sortCleared:()=>"Sort cleared",filterApplied:e=>`Filter applied on ${e}`,filterCleared:e=>`Filter cleared from ${e}`,allFiltersCleared:()=>"All filters cleared",groupExpanded:(e,t)=>`Group ${e} expanded, ${t} rows`,groupCollapsed:e=>`Group ${e} collapsed`,selectionChanged:e=>`${e} rows selected`,columnSelected:e=>`Column ${e} selected`,columnSelectionChanged:e=>`${e} columns selected`,columnSelectionCleared:()=>"Column selection cleared",selectionAxisChanged:e=>"column"===e?"Row selection cleared, column selection active":"Column selection cleared, row selection active",editingStarted:e=>`Editing row ${e+1}`,editingCommitted:e=>`Row ${e+1} saved`,dataLoaded:e=>`${e} rows loaded`},i={mode:"reduced-motion",duration:200,easing:"ease-out"},r={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:"",filterActive:"",print:"🖨️"};function n(e,t){if(!e)return;const o="effectiveConfig"in e?e.effectiveConfig:void 0;if(!1===o?.a11y?.announcements)return;const i=e.querySelector?.(".tbw-sr-only");i&&(i.textContent="",requestAnimationFrame(()=>{i.textContent=t}))}function s(e,t,...i){const r=e&&"effectiveConfig"in e?e.effectiveConfig:void 0,n=r?.a11y?.messages?.[t];return n?n(...i):o[t](...i)}function l(e,t){return`[tbw-grid${e?`#${e}`:""}${t?`:${t}`:""}]`}const a="TBW041",d="TBW061",c="TBW062",h="TBW072";function u(e,t,o,i){return`${l(o,i)} ${e}: ${t}\n\n → More info: ${function(e){return`https://toolboxjs.com/grid/errors#${e.toLowerCase()}`}(e)}`}function g(e,t,o,i){throw new Error(u(e,t,o,i))}function f(e,t,o,i){console.warn(u(e,t,o,i))}function p(e,t,o,i){console.error(u(e,t,o,i))}function w(e,t){if(!(e&&e.length||t&&t.length))return[];if(!e||!e.length)return t||[];if(!t||!t.length)return e;const o={},i=t;for(let s=0;s<i.length;s++){const e=i[s],t=o[e.field];if(t){e.header&&!t.header&&(t.header=e.header),e.type&&!t.type&&(t.type=e.type),e.sortable&&(t.sortable=!0),e.editable&&(t.editable=!0),e.resizable&&(t.resizable=!0),null!=e.width&&null==t.width&&(t.width=e.width),null!=e.minWidth&&null==t.minWidth&&(t.minWidth=e.minWidth),e.__viewTemplate&&(t.__viewTemplate=e.__viewTemplate),e.__editorTemplate&&(t.__editorTemplate=e.__editorTemplate),e.__headerTemplate&&(t.__headerTemplate=e.__headerTemplate);const o=e.renderer||e.viewRenderer,i=t.renderer||t.viewRenderer;o&&!i&&(t.viewRenderer=o,e.renderer&&(t.renderer=o)),e.editor&&!t.editor&&(t.editor=e.editor),e.headerRenderer&&!t.headerRenderer&&(t.headerRenderer=e.headerRenderer),e.headerLabelRenderer&&!t.headerLabelRenderer&&(t.headerLabelRenderer=e.headerLabelRenderer)}else o[e.field]={...e}}const r=e.map(e=>{const t=o[e.field];if(!t)return e;const i={...e};t.header&&!i.header&&(i.header=t.header),t.type&&!i.type&&(i.type=t.type),i.sortable=e.sortable||t.sortable,!0!==e.resizable&&!0!==t.resizable||(i.resizable=!0),i.editable=e.editable||t.editable,null!=t.width&&null==i.width&&(i.width=t.width),null!=t.minWidth&&null==i.minWidth&&(i.minWidth=t.minWidth),t.__viewTemplate&&(i.__viewTemplate=t.__viewTemplate),t.__editorTemplate&&(i.__editorTemplate=t.__editorTemplate),t.__headerTemplate&&(i.__headerTemplate=t.__headerTemplate);const r=t.renderer||t.viewRenderer,n=i.renderer||i.viewRenderer;return r&&!n&&(i.viewRenderer=r,t.renderer&&(i.renderer=r)),t.editor&&!i.editor&&(i.editor=t.editor),i.headerRenderer||i.headerLabelRenderer||(t.headerRenderer?i.headerRenderer=t.headerRenderer:t.headerLabelRenderer&&(i.headerLabelRenderer=t.headerLabelRenderer)),delete o[e.field],i}),n=Object.keys(o);for(let s=0;s<n.length;s++)r.push(o[n[s]]);return r}function b(e,t){try{e.part?.add?.(t)}catch{}const o=e.getAttribute("part");o?o.split(/\s+/).includes(t)||e.setAttribute("part",o+" "+t):e.setAttribute("part",t)}function m(e){const o=e.effectiveConfig?.fitMode||e.fitMode||t.STRETCH;if(o!==t.STRETCH&&o!==t.FIXED)return;if(e.__didInitialAutoSize)return;if(!e.isConnected)return;const i=Array.from(e._headerRowEl?.children||[]);if(!i.length)return;let r=!1;const n=e._visibleColumns;for(let t=0;t<n.length;t++){const o=n[t];if(o.width)continue;const s=i[t];let l=s?s.scrollWidth:0;for(let i=0;i<e._rowPool.length;i++){const o=e._rowPool[i].children[t];if(o){const e=o.scrollWidth;e>l&&(l=e)}}l>0&&(o.width=l+2,o.__autoSized=!0,r=!0)}r&&y(e),e.__didInitialAutoSize=!0}const v=/^(?:\d+(?:\.\d+)?(?:px|%|fr|em|rem|ch|vw|vh|vmin|vmax)|calc\(.+\)|min-content|max-content|minmax\(.+\)|fit-content\(.+\)|auto)$/i;function C(e,t){return"number"==typeof e?`${e}px`:(v.test(e)||f("TBW050",`Column '${t??"?"}' has an invalid CSS width value: '${e}'. Expected a number (px) or a valid CSS unit string (e.g. '30%', '2fr', 'calc(...)').`),e)}function y(e){const o=e.effectiveConfig?.fitMode||e.fitMode||t.STRETCH;e._gridTemplate=o===t.STRETCH?e._visibleColumns.map(e=>{if(null!=e.width)return C(e.width,e.field);const t=e.minWidth;return null!=t?`minmax(${t}px, 1fr)`:"1fr"}).join(" ").trim():e._visibleColumns.map(e=>null!=e.width?C(e.width,e.field):"max-content").join(" "),e.style.setProperty("--tbw-column-template",e._gridTemplate)}const _={ROOT:"tbw-grid-root",HEADER:"header",HEADER_ROW:"header-row",HEADER_CELL:"header-cell",ROWS_VIEWPORT:"rows-viewport",ROWS_SPACER:"rows-spacer",ROWS_CONTAINER:"rows",DATA_ROW:"data-grid-row",GROUP_ROW:"group-row",DATA_CELL:"cell",SELECTED:"selected",FOCUSED:"focused",EDITING:"editing",EXPANDED:"expanded",COLLAPSED:"collapsed",DRAGGING:"dragging",RESIZING:"resizing",SORTABLE:"sortable",SORTED_ASC:"sorted-asc",SORTED_DESC:"sorted-desc",HIDDEN:"hidden",STICKY_LEFT:"sticky-left",STICKY_RIGHT:"sticky-right",PINNED_TOP:"pinned-top",PINNED_BOTTOM:"pinned-bottom",TREE_TOGGLE:"tree-toggle",TREE_INDENT:"tree-indent",GROUP_TOGGLE:"group-toggle",GROUP_LABEL:"group-label",GROUP_COUNT:"group-count",RANGE_SELECTION:"range-selection",SELECTION_OVERLAY:"selection-overlay"},R={FIELD:"data-field",GROUP_KEY:"data-group-key"},S={ROOT:`.${_.ROOT}`,HEADER:`.${_.HEADER}`,HEADER_ROW:`.${_.HEADER_ROW}`,HEADER_CELL:`.${_.HEADER_CELL}`,ROWS_VIEWPORT:`.${_.ROWS_VIEWPORT}`,ROWS_CONTAINER:`.${_.ROWS_CONTAINER}`,DATA_ROW:`.${_.DATA_ROW}`,DATA_CELL:`.${_.DATA_CELL}`,GROUP_ROW:`.${_.GROUP_ROW}`,CELL_BY_FIELD:e=>`.${_.DATA_CELL}[${R.FIELD}="${e}"]`,SELECTED_ROWS:`.${_.DATA_ROW}.${_.SELECTED}`,EDITING_CELL:`.${_.DATA_CELL}.${_.EDITING}`},E=/{{\s*([^}]+)\s*}}/g,x="__DG_EMPTY__",A=/^[\w$. '?+\-*/%:()!<>=,&|]+$/,T="__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(e=>e.split("").reverse().join("")),P=new RegExp(`__(proto|defineGetter|defineSetter)|${T.slice(3).join("|")}|this\\b`);const H=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("|")),M=/^on\w+$/i,L=new Set("href|src|action|formaction|data|srcdoc|xlink:href|poster|srcset".split("|")),k=/^\s*(javascript|vbscript|data|blob):/i;function O(e){if(!e||"string"!=typeof e)return"";if(-1===e.indexOf("<"))return e;const t=document.createElement("template");return t.innerHTML=e,function(e){const t=[],o=e.querySelectorAll("*");for(const i of o){const e=i.tagName.toLowerCase();if(H.has(e)){t.push(i);continue}if("svg"===e||"http://www.w3.org/2000/svg"===i.namespaceURI){if(Array.from(i.attributes).some(e=>M.test(e.name)||"href"===e.name||"xlink:href"===e.name)){t.push(i);continue}}const o=[];for(const t of i.attributes){const e=t.name.toLowerCase();M.test(e)?o.push(t.name):(L.has(e)&&k.test(t.value)||"style"===e&&/expression\s*\(|javascript:|behavior\s*:/i.test(t.value))&&o.push(t.name)}o.forEach(e=>i.removeAttribute(e))}t.forEach(e=>e.remove())}(t.content),t.innerHTML}function D(e,t){const o=function(e){const t=[];let o=0;for(;o<e.length;){const i=e[o];if(" "!==i){if(i>="0"&&i<="9"||"."===i&&o+1<e.length&&e[o+1]>="0"&&e[o+1]<="9"){const i=o;for(;o<e.length&&(e[o]>="0"&&e[o]<="9"||"."===e[o]);)o++;t.push({type:"num",v:Number(e.slice(i,o))});continue}if("'"===i){let i="";for(o++;o<e.length&&"'"!==e[o];)i+=e[o++];if(o>=e.length)return null;o++,t.push({type:"str",v:i});continue}if(i>="a"&&i<="z"||i>="A"&&i<="Z"||"_"===i||"$"===i){const i=o;for(;o<e.length&&/[\w$.]/.test(e[o]);)o++;t.push({type:"id",v:e.slice(i,o)});continue}if(o+2<e.length){const i=e.slice(o,o+3);if("==="===i||"!=="===i){t.push({type:"op",v:i}),o+=3;continue}}if(o+1<e.length){const i=e.slice(o,o+2);if("=="===i||"!="===i||"<="===i||">="===i||"&&"===i||"||"===i){t.push({type:"op",v:i}),o+=2;continue}}if(!"+-*/%<>!?:(),".includes(i))return null;t.push({type:"op",v:i}),o++}else o++}return t}(e);if(!o)return;const i=o;let r=0;function n(){return i[r]}function s(){return i[r++]}function l(e,t){const o=n();return!!o&&(o.type===e&&(void 0===t||o.v===t))}function a(){const e=function(){let e=d();for(;l("op","||");)s(),e=e||d();return e}();if(l("op","?")){s();const t=a();if(!l("op",":"))return;s();const o=a();return e?t:o}return e}function d(){let e=c();for(;l("op","&&");)s(),e=e&&c();return e}function c(){let e=h();for(;;){const t=n();if(!t||"op"!==t.type)break;if("==="===t.v)s(),e=e===h();else if("!=="===t.v)s(),e=e!==h();else if("=="===t.v)s(),e=e==h();else{if("!="!==t.v)break;s(),e=e!=h()}}return e}function h(){let e=u();for(;;){const t=n();if(!t||"op"!==t.type)break;if("<"===t.v)s(),e=e<u();else if(">"===t.v)s(),e=e>u();else if("<="===t.v)s(),e=e<=u();else{if(">="!==t.v)break;s(),e=e>=u()}}return e}function u(){let e=g();for(;;){const t=n();if(!t||"op"!==t.type)break;if("+"===t.v)s(),e+=g();else{if("-"!==t.v)break;s(),e-=g()}}return e}function g(){let e=f();for(;;){const t=n();if(!t||"op"!==t.type)break;if("*"===t.v)s(),e*=f();else if("/"===t.v)s(),e/=f();else{if("%"!==t.v)break;s(),e%=f()}}return e}function f(){return l("op","!")?(s(),!f()):p()}function p(){const e=n();if(e){if("num"===e.type)return s(),e.v;if("str"===e.type)return s(),e.v;if("id"===e.type)return s(),function(e){if("value"===e)return t.value;if(e.startsWith("row.")){const o=e.slice(4);return t.row?t.row[o]:void 0}return"row"===e?t.row:void 0}(e.v);if("op"===e.type&&"("===e.v){s();const e=a();return l("op",")")&&s(),e}return"op"===e.type&&"-"===e.v?(s(),-p()):void 0}}const w=a();return r<i.length?void 0:w}function I(e,t){if(!e||-1===e.indexOf("{{"))return e;const o=[],i=e.replace(E,(e,i)=>{const r=function(e,t){if(e=(e||"").trim(),!e)return x;if(z.test(e))return x;if("value"===e)return null==t.value?x:String(t.value);if(e.startsWith("row.")&&!/[()?]/.test(e)&&!e.includes(":")){const o=e.slice(4),i=t.row?t.row[o]:void 0;return null==i?x:String(i)}if(e.length>80)return x;if(!A.test(e)||P.test(e))return x;const o=e.match(/\./g);if(o&&o.length>1)return x;try{const o=D(e,t),i=null==o?"":String(o);return z.test(i)?x:i||x}catch{return x}}(i,t);return o.push({expr:i.trim(),result:r}),r}),r=(n=i)?n.replace(new RegExp(x,"g"),"").replace(/Reflect\.[^<>{}\s]+|\bProxy\b|ownKeys\([^)]*\)/g,""):n;var n;const s=o.length&&o.every(e=>""===e.result||e.result===x);return z.test(e)||s?"":r}const z=/Reflect|Proxy|ownKeys/;function N(e){if(z.test(e.textContent||"")){for(const t of e.childNodes)t.nodeType===Node.TEXT_NODE&&z.test(t.textContent||"")&&(t.textContent="");z.test(e.textContent||"")&&(e.textContent="")}}function q(e){if(z.test(e)){const e=()=>"";return e.__blocked=!0,e}const t=t=>I(e,t);return t.__blocked=!1,t}function F(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}const $=new WeakMap;function W(e,t,o=-1){if(!t.valueAccessor)return e?.[t.field];if("object"!=typeof e||null===e)return t.valueAccessor({row:e,column:t,rowIndex:o});const i=e,r=t.field;let n=$.get(i);if(n){const e=n.get(r);if(void 0!==e)return e.v}else n=new Map,$.set(i,n);const s=t.valueAccessor({row:e,column:t,rowIndex:o});return n.set(r,{v:s}),s}function B(e,t){e&&(t?$.get(e)?.delete(t):$.delete(e))}function V(e,t,o){const i=o.find(e=>e.field===t.field),r=i?.sortComparator,{field:n,direction:s}=t,l=[...e];return r?i?.valueAccessor?l.sort((e,t)=>r(W(e,i),W(t,i),e,t)*s):l.sort((e,t)=>r(e[n],t[n],e,t)*s):i?.valueAccessor?G(l,i,s):U(l,n,s),l}function U(e,t,o){e.sort((e,i)=>{const r=j(e,i);if(0!==r)return r;const n=e[t],s=i[t];return null==n&&null==s?0:null==n?-o:null==s||n>s?o:n<s?-o:0})}function G(e,t,o){e.sort((e,i)=>{const r=j(e,i);if(0!==r)return r;const n=W(e,t),s=W(i,t);return null==n&&null==s?0:null==n?-o:null==s||n>s?o:n<s?-o:0})}function j(e,t){const o=!0===e?.__loading;return o===(!0===t?.__loading)?0:o?1:-1}function Y(e,t,o,i){const r=i.find(e=>e.field===t),n=r?.sortComparator;n?r?.valueAccessor?e.sort((e,t)=>n(W(e,r),W(t,r),e,t)*o):e.sort((e,i)=>n(e[t],i[t],e,i)*o):r?.valueAccessor?G(e,r,o):U(e,t,o)}function X(e,t,o,i){e._rows=t,e.__rowRenderEpoch++;for(let r=0;r<e._rowPool.length;r++)e._rowPool[r].__epoch=-1;ne(e),e.refreshVirtualWindow(!0),K(e,o,i)}function K(e,t,o){const i={field:t.field,direction:o};e.dispatchEvent(new CustomEvent("sort-change",{detail:i})),e._pluginManager?.emitPluginEvent?.("sort-change",i),n(e,s(e,0===o?"sortCleared":"sortApplied",t.header??t.field,1===o?"ascending":"descending")),e.requestStateChange?.()}function Z(e){return e._pluginManager?._hasRowStructurePlugins??!1}function Q(e,t){if(e._sortState&&e._sortState.field===t.field)if(1===e._sortState.direction)J(e,t,-1);else{if(e._sortState=null,Z(e))return e._requestSchedulerPhase(4,"sort-clear"),void K(e,t,0);e.__rowRenderEpoch++;for(let t=0;t<e._rowPool.length;t++)e._rowPool[t].__epoch=-1;e._rows=e.__originalOrder.slice(),e.__originalOrder=[],ne(e);const o=e._headerRowEl?.querySelectorAll('[role="columnheader"].sortable');if(o)for(let t=0;t<o.length;t++){const i=o[t];i.getAttribute("aria-sort")&&("ascending"!==i.getAttribute("aria-sort")&&"descending"!==i.getAttribute("aria-sort")||e._sortState)||i.setAttribute("aria-sort","none")}e.refreshVirtualWindow(!0),K(e,t,0)}else e._sortState||(e.__originalOrder=e._rows.slice()),J(e,t,1)}function J(e,t,o){if(e._sortState={field:t.field,direction:o},Z(e))return e._requestSchedulerPhase(4,"sort-apply"),void K(e,t,o);const i={field:t.field,direction:o},r=e._columns,n=e.effectiveConfig?.sortHandler??V;if(n===V)return Y(e._rows,i.field,o,r),void X(e,e._rows,t,o);const s=n(e._rows,i,r);s&&"function"==typeof s.then?s.then(i=>{X(e,i,t,o)}):X(e,s,t,o)}function ee(e,t){return!1!==e.effectiveConfig?.sortable&&!0===t.sortable}function te(e,t){return!1!==e.effectiveConfig?.resizable&&!1!==t.resizable}function oe(e,t){const o=document.createElement("span");b(o,"sort-indicator");const i=e._sortState?.field===t.field?e._sortState.direction:0,r=1===i?"sortAsc":-1===i?"sortDesc":"sortNone";o.dataset.icon=F(r);const n=e.icons?.[r];return void 0!==n&&function(e,t){"string"==typeof t?e.innerHTML=O(t):t instanceof HTMLElement&&(e.innerHTML="",e.appendChild(t.cloneNode(!0)))}(o,n),o}function ie(e,t,o){const i=document.createElement("div");return i.className="resize-handle",i.setAttribute("aria-hidden","true"),i.addEventListener("mousedown",i=>{i.stopPropagation(),i.preventDefault(),e._resizeController.start(i,t,o)}),i.addEventListener("dblclick",o=>{o.stopPropagation(),o.preventDefault(),e._resizeController.resetColumn(t)}),i}function re(e,t,o,i){i.classList.add(_.SORTABLE),i.tabIndex=0;const r=e._sortState?.field===t.field?e._sortState.direction:0;i.setAttribute("aria-sort",0===r?"none":1===r?"ascending":"descending"),i.addEventListener("click",o=>{e._resizeController?.isResizing||e._dispatchHeaderClick?.(o,t,i)||Q(e,t)}),i.addEventListener("keydown",o=>{if("Enter"===o.key||" "===o.key){if(o.preventDefault(),e._dispatchHeaderClick?.(o,t,i))return;Q(e,t)}})}function ne(e){e._headerRowEl=e.findHeaderRow();const t=e._headerRowEl;t&&(t.innerHTML="",e._visibleColumns.forEach((o,i)=>{const r=document.createElement("div");r.className="cell",b(r,"header-cell"),r.setAttribute("role","columnheader"),r.setAttribute("aria-colindex",String(i+1)),r.setAttribute("data-field",o.field),r.setAttribute("data-col",String(i)),o.type&&r.setAttribute("data-type",o.type);const n=o.header??o.field,s=e._sortState?.field===o.field?e._sortState.direction:0,l=1===s?"asc":-1===s?"desc":null;if(o.headerRenderer){const t={column:o,value:n,sortState:l,filterActive:!1,cellEl:r,renderSortIcon:()=>ee(e,o)?oe(e,o):null,renderFilterButton:()=>null},s=o.headerRenderer(t);!function(e,t){if(null!=t)if("string"==typeof t){const o=document.createElement("span");for(o.innerHTML=O(t);o.firstChild;)e.appendChild(o.firstChild)}else t instanceof Node&&e.appendChild(t)}(r,s),ee(e,o)&&re(e,o,0,r),te(e,o)&&(r.classList.add("resizable"),r.appendChild(ie(e,i,r)))}else if(o.headerLabelRenderer){const t={column:o,value:n},s=o.headerLabelRenderer(t),l=document.createElement("span");null==s?l.textContent=n:"string"==typeof s?l.innerHTML=O(s):s instanceof Node&&l.appendChild(s),r.appendChild(l),ee(e,o)&&(re(e,o,0,r),r.appendChild(oe(e,o))),te(e,o)&&(r.classList.add("resizable"),r.appendChild(ie(e,i,r)))}else if(o.__headerTemplate)Array.from(o.__headerTemplate.childNodes).forEach(e=>r.appendChild(e.cloneNode(!0))),ee(e,o)&&(re(e,o,0,r),r.appendChild(oe(e,o))),te(e,o)&&(r.classList.add("resizable"),r.appendChild(ie(e,i,r)));else{const t=document.createElement("span");t.textContent=n,r.appendChild(t),ee(e,o)&&(re(e,o,0,r),r.appendChild(oe(e,o))),te(e,o)&&(r.classList.add("resizable"),r.appendChild(ie(e,i,r)))}t.appendChild(r)}),t.querySelectorAll(`.cell.${_.SORTABLE}`).forEach(e=>{e.getAttribute("aria-sort")||e.setAttribute("aria-sort","none")}),t.children.length>0?(t.setAttribute("role","row"),t.setAttribute("aria-rowindex","1")):(t.removeAttribute("role"),t.removeAttribute("aria-rowindex")))}function se(e,t){const o=e[0]||{},i=Object.keys(o).map(e=>{const t=o[e],i=null==(r=t)?"string":"number"==typeof r?"number":"boolean"==typeof r?"boolean":r instanceof Date||"string"==typeof r&&/\d{4}-\d{2}-\d{2}/.test(r)&&!isNaN(Date.parse(r))?"date":"string";var r;return{field:e,header:e.charAt(0).toUpperCase()+e.slice(1),type:i}}),r={};return i.forEach(e=>{r[e.field]=e.type||"string"}),{columns:i,typeMap:r}}const le={STYLE:1,VIRTUALIZATION:2,HEADER:3,ROWS:4,COLUMNS:5,FULL:6};class ae{#e;#t=0;#o=0;#i=null;#r=null;#n=null;#s=!1;constructor(e){this.#e=e}requestPhase(e,t){e>this.#t&&(this.#t=e),0===this.#o&&(this.#l(),this.#o=requestAnimationFrame(()=>this.#a()))}whenReady(){return this.#i?this.#i:Promise.resolve()}setInitialReadyResolver(e){this.#n=e}cancel(){0!==this.#o&&(cancelAnimationFrame(this.#o),this.#o=0),this.#t=0,this.#r&&(this.#r(),this.#r=null,this.#i=null)}get isPending(){return 0!==this.#t}get pendingPhase(){return this.#t}#l(){this.#i||(this.#i=new Promise(e=>{this.#r=e}))}#a(){if(this.#o=0,!this.#e._schedulerIsConnected)return this.#t=0,void(this.#r&&(this.#r(),this.#r=null,this.#i=null));const e=this.#t;this.#t=0,e>=le.COLUMNS&&this.#e._schedulerMergeConfig(),e>=le.ROWS&&this.#e._schedulerProcessRows(),e>=le.COLUMNS&&(this.#e._schedulerProcessColumns(),this.#e._schedulerUpdateTemplate()),e>=le.HEADER&&this.#e._schedulerRenderHeader(),e>=le.VIRTUALIZATION&&this.#e.refreshVirtualWindow(!0,!0),e>=le.STYLE&&this.#e._schedulerAfterRender();const t=!this.#s;t&&(this.#s=!0,this.#n?.()),this.#r&&(this.#r(),this.#r=null,this.#i=null),0!==e&&this.#d(e,t)}#d(e,t){const o=this.#e._virtualization,i=o?.enabled?{start:o.start,end:o.end}:null,r={phase:e,initial:t,rowCount:this.#e._rows?.length??0,visibleRange:i};this.#e._hostElement.dispatchEvent(new CustomEvent("render",{detail:r,bubbles:!0,composed:!0}))}}class de{#c;#h;#u;#g;#f;#p={};#w={};#b=!0;#m=[];#v;#C;#y;#_;#e;#R;constructor(e){this.#e=e}get original(){return this.#p}get effective(){return this.#w}get columns(){return this.#w.columns??[]}set columns(e){this.#w.columns=e}get lightDomColumnsCache(){return this.#g}set lightDomColumnsCache(e){this.#g=e}get originalColumnNodes(){return this.#f}set originalColumnNodes(e){this.#f=e}get lightDomTitle(){return this.#R}set lightDomTitle(e){this.#R=e}get initialColumnState(){return this.#_}set initialColumnState(e){this.#_=e}get sourcesChanged(){return this.#b}markSourcesChanged(){this.#b=!0}setGridConfig(e){this.#c!==e&&(this.#c=e,this.#b=!0,this.#g=void 0)}getGridConfig(){return this.#c}setColumns(e){this.#h=e,this.#b=!0}getColumns(){return this.#h}setFitMode(e){this.#u=e,this.#b=!0}getFitMode(){return this.#u}merge(){const e=(this.#w.columns?.length??0)>0;if(!this.#b&&e)return;const t=this.#S();this.#b=!1,this.#p=t,Object.freeze(this.#p),this.#p.columns&&Object.freeze(this.#p.columns),this.#w=this.#E(this.#p),this.#x()}#E(e){const t={...e};return e.columns&&(t.columns=e.columns.map(e=>({...e}))),e.shell&&(t.shell={...e.shell,header:e.shell.header?{...e.shell.header}:void 0,toolPanel:e.shell.toolPanel?{...e.shell.toolPanel}:void 0,toolPanels:e.shell.toolPanels?.map(e=>({...e})),headerContents:e.shell.headerContents?.map(e=>({...e}))}),t}#x(){const e=this.#w;if(this.#A(),"number"==typeof e.rowHeight&&e.rowHeight>0&&(this.#e._virtualization.rowHeight=e.rowHeight),"fixed"===e.fitMode){this.columns.forEach(e=>{null==e.width&&(e.width=80)})}this.#e._applyAnimationConfig(e)}#A(){const e=this.#w.typeDefaults;if(!e)return;const t=this.columns;for(const o of t){if(!o.type)continue;const t=e[o.type];t&&(o.renderer||o.viewRenderer||!t.renderer||(o.renderer=t.renderer),!o.format&&t.format&&(o.format=t.format),!o.editor&&t.editor&&(o.editor=t.editor),!o.editorParams&&t.editorParams&&(o.editorParams=t.editorParams))}}#S(){const e=this.#c?{...this.#c}:{},t=Array.isArray(e.columns)?[...e.columns]:[],o=(this.#g??[]).map(e=>({...e}));let i=w(t,o);this.#h&&this.#h.length&&(i=w(this.#h,o));const r=this.#e.sourceRows;if(0===i.length&&r.length){i=se(r).columns}return i.length&&(i.forEach(e=>{void 0===e.sortable&&(e.sortable=!0),void 0===e.resizable&&(e.resizable=!0),void 0===e.__originalWidth&&"number"==typeof e.width&&(e.__originalWidth=e.width)}),i.forEach(e=>{e.__viewTemplate&&!e.__compiledView&&(e.__compiledView=q(e.__viewTemplate.innerHTML)),e.__editorTemplate&&!e.__compiledEditor&&(e.__compiledEditor=q(e.__editorTemplate.innerHTML))}),e.columns=i),this.#u&&(e.fitMode=this.#u),e.fitMode||(e.fitMode="stretch"),this.#T(e),e.columnState&&!this.#_&&(this.#_=e.columnState),e}#T(e){e.shell=e.shell?{...e.shell}:{},e.shell.header=e.shell.header?{...e.shell.header}:{};const t=this.#e._shellState.lightDomTitle;t&&(this.#R=t),this.#R&&!e.shell.header.title&&(e.shell.header.title=this.#R);const o=this.#e._shellState.lightDomHeaderContent;o?.length>0&&(e.shell.header.lightDomContent=o),this.#e._shellState.hasToolButtonsContainer&&(e.shell.header.hasToolButtonsContainer=!0);const i=this.#e._shellState.toolPanels;if(i.size>0){const t=Array.from(i.values());t.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.toolPanels=t}const r=this.#e._shellState.headerContents;if(r.size>0){const t=Array.from(r.values());t.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.headerContents=t}const n=this.#e._shellState.toolbarContents,s=Array.from(n.values()),l=this.#c?.shell?.header?.toolbarContents??[],a=new Set(l.map(e=>e.id)),d=[...l];for(const c of s)a.has(c.id)||d.push(c);d.sort((e,t)=>(e.order??0)-(t.order??0)),e.shell.header.toolbarContents=d}collectState(e){const t=this.columns,o=this.#P();return{columns:t.map((t,i)=>{const r={field:t.field,order:i,visible:!t.hidden},n=t;void 0!==n.__renderedWidth?r.width=n.__renderedWidth:void 0!==t.width&&(r.width="string"==typeof t.width?parseFloat(t.width):t.width);const s=o.get(t.field);s&&(r.sort=s);for(const o of e)if(o.getColumnState){const e=o.getColumnState(t.field);e&&Object.assign(r,e)}return r})}}applyState(e,t){if(!e.columns||0===e.columns.length)return;const o=this.columns,i=new Map(e.columns.map(e=>[e.field,e])),r=o.map(e=>{const t=i.get(e.field);if(!t)return e;const o={...e};return void 0!==t.width&&(o.width=t.width,o.__renderedWidth=t.width),void 0!==t.visible&&(o.hidden=!t.visible),o});r.sort((e,t)=>(i.get(e.field)?.order??1/0)-(i.get(t.field)?.order??1/0)),this.columns=r;const n=e.columns.filter(e=>void 0!==e.sort).sort((e,t)=>(e.sort?.priority??0)-(t.sort?.priority??0));if(n.length>0){const e=n[0];e.sort&&(this.#e._sortState={field:e.field,direction:"asc"===e.sort.direction?1:-1})}else this.#e._sortState=null;for(const s of t)if(s.applyColumnState)for(const t of e.columns)s.applyColumnState(t.field,t)}resetState(e){this.#_=void 0,this.#e._sortState=null,this.#w=this.#E(this.#p),this.#x();for(const t of e)if(t.applyColumnState)for(const e of this.columns)t.applyColumnState(e.field,{field:e.field,order:0,visible:!0});this.requestStateChange(e)}#P(){const e=new Map,t=this.#e._sortState;return t&&e.set(t.field,{direction:1===t.direction?"asc":"desc",priority:0}),e}requestStateChange(e){this.#C&&clearTimeout(this.#C),this.#C=setTimeout(()=>{this.#C=void 0;const t=this.collectState(e);this.#e._emit("column-state-change",t)},100)}setColumnVisible(e,t){const o=this.columns,i=o.find(t=>t.field===e);if(!i)return!1;if(!t&&i.lockVisible)return!1;if(!t){if(0===o.filter(t=>!t.hidden&&t.field!==e).length)return!1}return!!i.hidden!=!t&&(i.hidden=!t,this.#e._emit("column-visibility",{field:e,visible:t,visibleColumns:o.filter(e=>!e.hidden).map(e=>e.field)}),this.#e._clearRowPool(),this.#e._setup(),!0)}toggleColumnVisibility(e){const t=this.columns.find(t=>t.field===e);return!!t&&this.setColumnVisible(e,!!t.hidden)}isColumnVisible(e){const t=this.columns.find(t=>t.field===e);return!!t&&!t.hidden}showAllColumns(){const e=this.columns;e.some(e=>e.hidden)&&(e.forEach(e=>e.hidden=!1),this.#e._emit("column-visibility",{visibleColumns:e.map(e=>e.field)}),this.#e._clearRowPool(),this.#e._setup())}getAllColumns(){return this.columns.map(e=>({field:e.field,header:e.header||e.field,visible:!e.hidden,lockVisible:e.lockVisible,utility:!0===e.utility}))}getColumnOrder(){return this.columns.map(e=>e.field)}setColumnOrder(e){if(!e.length)return;const t=new Map(this.columns.map(e=>[e.field,e])),o=[];for(const i of e){const e=t.get(i);e&&(o.push(e),t.delete(i))}for(const i of t.values())o.push(i);this.columns=o,this.#e._invalidateVisibleColumnsCache(),ne(this.#e),y(this.#e),this.#e._requestSchedulerPhase(le.COLUMNS,"configManager")}parseLightDomColumns(e){this.#g||(this.#f=Array.from(e.querySelectorAll("tbw-grid-column")),this.#g=this.#f.length?function(e){return Array.from(e.querySelectorAll("tbw-grid-column")).map(e=>{const t=e.getAttribute("field")||"";if(!t)return null;const o=e.getAttribute("type")||void 0,i={field:t,type:o&&new Set(["number","string","date","boolean","select"]).has(o)?o:void 0,header:e.getAttribute("header")||void 0,sortable:e.hasAttribute("sortable")&&"false"!==e.getAttribute("sortable"),editable:e.hasAttribute("editable")&&"false"!==e.getAttribute("editable")},r=e.getAttribute("width");if(r){const e=parseFloat(r);!isNaN(e)&&/^\d+(\.\d+)?$/.test(r.trim())?i.width=e:i.width=r}const n=e.getAttribute("minWidth")||e.getAttribute("min-width");if(n){const e=parseFloat(n);isNaN(e)||(i.minWidth=e)}e.hasAttribute("resizable")&&(i.resizable="false"!==e.getAttribute("resizable"));const s=e.getAttribute("editor"),l=e.getAttribute("renderer");s&&(i.__editorName=s),l&&(i.__rendererName=l);const a=e.getAttribute("options");a&&(i.options=a.split(",").map(e=>{const[t,o]=e.includes(":")?e.split(":"):[e.trim(),e.trim()];return{value:t.trim(),label:o?.trim()||t.trim()}}));const d=e.querySelector("tbw-grid-column-view"),c=e.querySelector("tbw-grid-column-editor"),h=e.querySelector("tbw-grid-column-header");d&&(i.__viewTemplate=d),c&&(i.__editorTemplate=c),h&&(i.__headerTemplate=h);const u=globalThis.DataGridElement,g=u?.getAdapters?.()??[],f=d??e,p=g.find(e=>e.canHandle(f));if(p){const e=p.createRenderer(f);e&&(i.viewRenderer=e)}const w=c??e,b=g.find(e=>e.canHandle(w));if(b){const e=b.createEditor(w);e&&(i.editor=e)}const m=g.find(t=>t.canHandle(e)&&(t.createHeaderRenderer||t.createHeaderLabelRenderer));if(m){const t=m.createHeaderRenderer?.(e);t&&(i.headerRenderer=t);const o=m.createHeaderLabelRenderer?.(e);o&&(i.headerLabelRenderer=o)}return i}).filter(e=>!!e)}(e):[])}clearLightDomCache(){this.#g=void 0}#H=new Map;registerLightDomHandler(e,t){this.#H.set(e.toLowerCase(),t)}unregisterLightDomHandler(e){this.#H.delete(e.toLowerCase())}observeLightDOM(e){this.#v&&this.#v.disconnect();const t=new Set,o=()=>{this.#y=void 0;for(const e of t){const t=this.#H.get(e);t?.()}t.clear()};this.#v=new MutationObserver(e=>{for(const o of e){for(const e of o.addedNodes){if(e.nodeType!==Node.ELEMENT_NODE)continue;const o=e.tagName.toLowerCase();this.#H.has(o)&&t.add(o)}if("attributes"===o.type&&o.target.nodeType===Node.ELEMENT_NODE){const e=o.target.tagName.toLowerCase();this.#H.has(e)&&t.add(e)}}t.size>0&&!this.#y&&(this.#y=setTimeout(o,0))}),this.#v.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["title","field","header","width","hidden","id","icon","tooltip","order"]})}onChange(e){this.#m.push(e)}notifyChange(){for(const e of this.#m)e()}dispose(){this.#v?.disconnect(),this.#m=[],this.#C&&clearTimeout(this.#C),this.#y&&(clearTimeout(this.#y),this.#y=void 0)}}function ce(e){const t=document.createElement("div");return t.className="tbw-empty-message",t.textContent=e.filteredOut?"No matching rows":"No data to display",t}function he(e,t,o="rows"){const i=document.createElement("div");return i.className="tbw-empty-overlay",i.setAttribute("role","status"),i.setAttribute("aria-live","polite"),i.setAttribute("data-overlay-target",o),i.appendChild(function(e,t){const o=(t??ce)(e);if("string"==typeof o){const e=document.createElement("div");return e.className="tbw-empty-message",e.innerHTML=O(o),e}return o}(e,t)),i}function ue(e){e?.remove()}function ge(){if("undefined"!=typeof window&&window.location){const e=window.location.hostname;if("localhost"===e||"127.0.0.1"===e||"::1"===e)return!0}return"undefined"!=typeof process&&"production"!==process.env?.NODE_ENV}function fe(e){return`<span role="checkbox" aria-checked="${e}" aria-label="${e}">${e?"&#x1F5F9;":"&#9744;"}</span>`}function pe(e){if(null==e||""===e)return"";if(e instanceof Date)return isNaN(e.getTime())?"":e.toLocaleDateString();if("number"==typeof e||"string"==typeof e){const t=new Date(e);return isNaN(t.getTime())?"":t.toLocaleDateString()}return""}function we(e){if(!e)return-1;const t=e.getAttribute("data-row");if(t)return parseInt(t,10);const o=e.closest(".data-grid-row");if(!o)return-1;const i=o.parentElement;if(!i)return-1;const r=i.querySelectorAll(":scope > .data-grid-row");for(let n=0;n<r.length;n++)if(r[n]===o)return n;return-1}function be(e){e&&e.querySelectorAll(".cell-focus").forEach(e=>e.classList.remove("cell-focus"))}function me(e){return"rtl"===function(e){try{if("rtl"===getComputedStyle(e).direction)return"rtl"}catch{}try{const t=e.closest?.("[dir]")?.getAttribute("dir");if("rtl"===t)return"rtl"}catch{}return"ltr"}(e)}function ve(e,t){const o=t.renderer||t.viewRenderer;if(o)return o;if(!t.type)return;const i=e.__frameworkAdapter;if(i?.getTypeDefault){const o=i.getTypeDefault(t.type,e._hostElement);if(o?.renderer)return o.renderer}}function Ce(e,t){if(t.format)return t.format;if(!t.type)return;const o=e.__frameworkAdapter;if(o?.getTypeDefault){const i=o.getTypeDefault(t.type,e._hostElement);if(i?.format)return i.format}}const ye='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])';function _e(e){return(e.__editingCellCount??0)>0}function Re(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing");e.querySelectorAll(`.cell.${_.EDITING}`).forEach(e=>e.classList.remove(_.EDITING))}const Se=document.createElement("template");Se.innerHTML='<div class="cell" role="gridcell" part="cell"></div>';const Ee=document.createElement("template");function xe(){return Se.content.firstElementChild.cloneNode(!0)}function Ae(){return Ee.content.firstElementChild.cloneNode(!0)}function Te(e){e.__cellDisplayCache=void 0,e.__cellCacheEpoch=void 0,e.__hasSpecialColumns=void 0}function Pe(e,t,o,i){const r=t.children,n=e._visibleColumns,s=n.length,l=r.length,a=s<l?s:l,h=e._focusRow,u=e._focusCol,g=e._hasAfterCellRenderHook?.()??!1;let p=e.__hasSpecialColumns;if(void 0===p){p=!1;const t=e.__frameworkAdapter;for(let o=0;o<s;o++){const i=n[o];if(i.__viewTemplate||i.__compiledView||i.renderer||i.viewRenderer||i.externalView||i.format||i.cellClass||"date"===i.type||"boolean"===i.type||i.type&&t?.getTypeDefault?.(i.type,e._hostElement)?.renderer||i.type&&t?.getTypeDefault?.(i.type,e._hostElement)?.format){p=!0;break}}e.__hasSpecialColumns=p}const w=String(i);if(p){for(let s=0;s<a;s++){if(n[s].externalView){if(!r[s].querySelector("[data-external-view]"))return void He(e,t,o,i)}}for(let s=0;s<a;s++){const l=n[s],a=r[s];a.getAttribute("data-row")!==w&&a.setAttribute("data-row",w);const p=a.classList.contains(_.EDITING);if(!p){const e=h===i&&u===s;e!==a.classList.contains("cell-focus")&&(a.classList.toggle("cell-focus",e),a.setAttribute("aria-selected",String(e)))}const m=l.cellClass;if(m){const t=a.getAttribute("data-dynamic-classes");if(t){const e=t.split(" ");for(let t=0;t<e.length;t++)e[t]&&a.classList.remove(e[t])}try{const e=m(W(o,l,i),o,l),t="string"==typeof e?e.split(/\s+/):e;if(t&&t.length>0){let e="";for(let o=0;o<t.length;o++){const i=t[o];i&&"string"==typeof i&&(a.classList.add(i),e+=(e?" ":"")+i)}a.setAttribute("data-dynamic-classes",e)}else a.removeAttribute("data-dynamic-classes")}catch(b){f(d,`cellClass callback error for column '${l.field}': ${b}`,e.id),a.removeAttribute("data-dynamic-classes")}}if(p)continue;const v=ve(e,l);if(v){const r=W(o,l,i),n=v({row:o,value:r,field:l.field,column:l,grid:e,cellEl:a});"string"==typeof n?(e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=O(n)):n instanceof Node?n.parentElement!==a&&(e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML="",a.appendChild(n)):null==n&&(e.__frameworkAdapter?.releaseCell?.(a),a.textContent=null==r?"":String(r)),g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:r,cellElement:a,rowElement:t});continue}if(l.__compiledView){const r=W(o,l,i),n=l.__compiledView({row:o,value:r,field:l.field,column:l});l.__compiledView.__blocked?a.textContent="":(a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=O(n),N(a)),g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:r,cellElement:a,rowElement:t});continue}if(l.__viewTemplate){const r=W(o,l,i),n=l.__viewTemplate.innerHTML;/Reflect\.|\bProxy\b|ownKeys\(/.test(n)?a.textContent="":(a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=O(I(n,{row:o,value:r})),N(a)),g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:r,cellElement:a,rowElement:t});continue}if(l.externalView)continue;const C=W(o,l,i);let y;a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a);const R=Ce(e,l);if(R){try{const e=R(C,o);y=null==e?"":String(e)}catch(b){f(c,`Format error in column '${l.field}': ${b}`,e.id),y=null==C?"":String(C)}a.textContent=y}else"date"===l.type?(y=pe(C),a.textContent=y):"boolean"===l.type?a.innerHTML=fe(!!C):(y=null==C?"":String(C),a.textContent=y);g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:C,cellElement:a,rowElement:t})}}else for(let d=0;d<a;d++){const s=r[d];if(s.classList.contains(_.EDITING))continue;s.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(s);const l=n[d],a=W(o,l,i);s.textContent=null==a?"":String(a),s.getAttribute("data-row")!==w&&s.setAttribute("data-row",w);const c=h===i&&u===d;c!==s.classList.contains("cell-focus")&&(s.classList.toggle("cell-focus",c),s.setAttribute("aria-selected",String(c))),g&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:d,value:a,cellElement:s,rowElement:t})}}function He(e,t,o,i){t.classList.remove("tbw-row-loading"),t.removeAttribute("aria-busy");const r=e.__frameworkAdapter;if(r?.releaseCell){r.beginBatch?.(e);try{const e=t.children;for(let t=e.length-1;t>=0;t--)r.releaseCell(e[t]);t.innerHTML=""}finally{r.endBatch?.(e)}}else t.innerHTML="";const n=e._visibleColumns,s=n.length,l=e._focusRow,a=e._focusCol,h=e._hasAfterCellRenderHook?.()??!1,u=document.createDocumentFragment();for(let p=0;p<s;p++){const r=n[p],s=xe();s.setAttribute("aria-colindex",String(p+1)),s.setAttribute("data-col",String(p)),s.setAttribute("data-row",String(i)),s.setAttribute("data-field",r.field),s.setAttribute("data-header",r.header??r.field),r.type&&s.setAttribute("data-type",r.type);let w=W(o,r,i);const b=Ce(e,r);if(b)try{w=b(w,o)}catch(g){f(c,`Format error in column '${r.field}': ${g}`,e.id)}const m=r.__compiledView,v=r.__viewTemplate,C=ve(e,r),y=r.externalView;let _=!1;if(C){const t=C({row:o,value:w,field:r.field,column:r,grid:e,cellEl:s});"string"==typeof t?(s.innerHTML=O(t),_=!0):t instanceof Node?t.parentElement!==s&&(s.textContent="",s.appendChild(t)):null==t&&(s.textContent=null==w?"":String(w))}else if(y){const t=y,i=document.createElement("div");i.setAttribute("data-external-view",""),i.setAttribute("data-field",r.field),s.appendChild(i);const n={row:o,value:w,field:r.field,column:r,grid:e};if(t.mount)try{t.mount({placeholder:i,context:n,spec:t})}catch(g){f("TBW063",`External view mount error for column '${r.field}': ${g}`,e.id)}else queueMicrotask(()=>{try{e.dispatchEvent(new CustomEvent("mount-external-view",{bubbles:!0,composed:!0,detail:{placeholder:i,spec:t,context:n}}))}catch(g){f("TBW064",`External view event dispatch error for column '${r.field}': ${g}`,e.id)}});i.setAttribute("data-mounted","")}else if(m){const e=m({row:o,value:w,field:r.field,column:r}),t=m.__blocked;s.innerHTML=t?"":O(e),_=!0,t&&(s.textContent="",s.setAttribute("data-blocked-template",""))}else if(v){const e=v.innerHTML;/Reflect\.|\bProxy\b|ownKeys\(/.test(e)?(s.textContent="",s.setAttribute("data-blocked-template","")):(s.innerHTML=O(I(e,{row:o,value:w})),_=!0)}else b?s.textContent=null==w?"":String(w):"date"===r.type?s.textContent=pe(w):"boolean"===r.type?s.innerHTML=fe(!!w):s.textContent=null==w?"":String(w);if(_){N(s);const e=s.textContent||"";/Proxy|Reflect\.ownKeys/.test(e)&&(s.textContent=e.replace(/Proxy|Reflect\.ownKeys/g,"").trim(),/Proxy|Reflect\.ownKeys/.test(s.textContent||"")&&(s.textContent=""))}s.hasAttribute("data-blocked-template")&&(s.textContent||"").trim().length&&(s.textContent="");("function"==typeof r.editable?r.editable(o):r.editable)?s.tabIndex=0:"boolean"===r.type&&(s.hasAttribute("tabindex")||(s.tabIndex=0)),l===i&&a===p?(s.classList.add("cell-focus"),s.setAttribute("aria-selected","true")):s.setAttribute("aria-selected","false");const R=r.cellClass;if(R)try{const e=R(W(o,r,i),o,r),t="string"==typeof e?e.split(/\s+/):e;if(t&&t.length>0){let e="";for(const o of t)o&&"string"==typeof o&&(s.classList.add(o),e+=(e?" ":"")+o);s.setAttribute("data-dynamic-classes",e)}}catch(g){f(d,`cellClass callback error for column '${r.field}': ${g}`,e.id)}h&&e._afterCellRender?.({row:o,rowIndex:i,column:r,colIndex:p,value:w,cellElement:s,rowElement:t}),u.appendChild(s)}t.appendChild(u)}function Me(e,t,o){if(t.target?.closest(".resize-handle"))return;const i=we(o.querySelector(".cell[data-row]"));if(i<0)return;const r=e._rows[i];if(!r)return;if(e._dispatchRowClick?.(t,i,r,o))return;const n=t.target?.closest(".cell[data-col]");if(n){const o=Number(n.getAttribute("data-col"));if(!isNaN(o)){if(e._dispatchCellClick?.(t,i,o,n))return;const r=e._focusRow!==i||e._focusCol!==o;if(e._focusRow=i,e._focusCol=o,n.classList.contains(_.EDITING)){r&&(be(e._bodyEl??e),n.classList.add("cell-focus"));const o=t.target,i=n.contains(o)&&o.matches(ye)?o:n.querySelector(ye);try{i?.focus({preventScroll:!0})}catch{}return}Be(e)}}}function Le(e,t){return e&&"object"==typeof e?"__rowCacheKey"in e?e.__rowCacheKey:"rowId"in e&&null!=e.rowId?`id:${e.rowId}`:t?`id:${t(e)}`:e:e}function ke(e,t,o){const i=Le(t,o);return"string"==typeof i?e.byKey.get(i):i&&"object"==typeof i?e.byRef.get(i):void 0}function Oe(e,t,o){if(t<0||t>=e.length)return;const i=e[t],r=o-i.height;if(0!==r){i.height=o,i.measured=!0;for(let o=t+1;o<e.length;o++)e[o].offset+=r}}function De(e,t){if(0===e.length)return-1;if(t<=0)return 0;let o=0,i=e.length-1;for(;o<=i;){const r=Math.floor((o+i)/2),n=e[r],s=n.offset+n.height;if(t<n.offset)i=r-1;else{if(!(t>=s))return r;o=r+1}}return Math.max(0,Math.min(o,e.length-1))}function Ie(e,t){const{positionCache:o,heightCache:i,rows:r,start:n,end:s,getPluginHeight:l,getRowId:a}=e;let d=!1;t.forEach(e=>{const t=e.dataset.rowIndex;if(!t)return;const c=parseInt(t,10);if(c<n||c>=s||c>=r.length)return;const h=r[c],u=l?.(h,c);if(void 0!==u){const e=o[c];return void((!e.measured||Math.abs(e.height-u)>1)&&(Oe(o,c,u),d=!0))}const g=e.offsetHeight;if(g>0){const e=o[c];(!e.measured||Math.abs(e.height-g)>1)&&(Oe(o,c,g),function(e,t,o,i){const r=Le(t,i);"string"==typeof r?e.byKey.set(r,o):r&&"object"==typeof r&&e.byRef.set(r,o)}(i,h,g,a),d=!0)}});const c=d?function(e){let t=0;for(const o of e)o.measured&&t++;return t}(o):0,h=d?function(e,t){let o=0,i=0;for(const r of e)r.measured&&(o+=r.height,i++);return i>0?o/i:t}(o,e.defaultHeight):0;return{hasChanges:d,measuredCount:c,averageHeight:h}}Ee.innerHTML='<div class="data-grid-row" role="row" part="row"></div>';const ze=335e5;function Ne(e,t,o=335e5){return{rawContentHeight:e,spacerHeight:Math.min(e,o),viewportHeight:t,capped:e>o}}function qe(e,t){if(!t.capped)return e;const o=t.spacerHeight-t.viewportHeight,i=t.rawContentHeight-t.viewportHeight;if(o<=0||i<=0)return e;const r=e*i/o;return r<0?0:r>i?i:r}function Fe(e,t){if(!t.capped)return e;const o=t.spacerHeight-t.viewportHeight,i=t.rawContentHeight-t.viewportHeight;return o<=0||i<=0?e:e*o/i}function $e(e){"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit()}function We(e){if(!e)return!1;const t=e.tagName;return"INPUT"===t||"SELECT"===t||"TEXTAREA"===t||!!e.isContentEditable}function Be(e,t){if(e._virtualization?.enabled){const{rowHeight:t,container:o,viewportEl:i,scrollMapping:r}=e._virtualization,n=o,s=i?.clientHeight??n?.clientHeight??0;if(n&&s>0){const o=e._focusRow*t,i=r?qe(n.scrollTop,r):n.scrollTop;if(o<i)n.scrollTop=r?Fe(o,r):o;else if(o+t>i+s){const e=o-s+t;n.scrollTop=r?Fe(e,r):e}}}const o=void 0!==e._activeEditRows&&-1!==e._activeEditRows||!!e._isGridEditMode;o||e.refreshVirtualWindow(!1),be(e._bodyEl),Array.from(e._bodyEl.querySelectorAll('[aria-selected="true"]')).forEach(e=>{e.setAttribute("aria-selected","false")});const i=e._focusRow,r=e._virtualization.start??0,n=e._virtualization.end??e._rows.length;if(i>=r&&i<n){const n=e._bodyEl.querySelectorAll(".data-grid-row")[i-r];let s=n?.children[e._focusCol];if(s&&s.classList?.contains("cell")||(s=n?.querySelector(`.cell[data-col="${e._focusCol}"]`)??n?.querySelector(".cell[data-col]")),s){s.classList.add("cell-focus"),s.setAttribute("aria-selected","true");const i=e.querySelector(".tbw-scroll-area");if(i&&s&&(!o||t?.forceHorizontalScroll))if(t?.forceScrollLeft)i.scrollLeft=0;else if(t?.forceScrollRight)i.scrollLeft=i.scrollWidth-i.clientWidth;else{const t=e._getHorizontalScrollOffsets?.(n??void 0,s)??{left:0,right:0};if(!t.skipScroll){const e=s.getBoundingClientRect(),o=i.getBoundingClientRect(),r=e.left-o.left+i.scrollLeft,n=r+e.width,l=i.scrollLeft+t.left,a=i.scrollLeft+i.clientWidth-t.right;r<l?i.scrollLeft=r-t.left:n>a&&(i.scrollLeft=n-i.clientWidth+t.right)}}if(o&&s.classList.contains(_.EDITING)){const e=s.querySelector(ye);if(e&&document.activeElement!==e)try{e.focus({preventScroll:!0})}catch{}}else if(o&&!s.contains(document.activeElement)){s.hasAttribute("tabindex")||s.setAttribute("tabindex","-1");try{s.focus({preventScroll:!0})}catch{}}else if(!o){const t=document.activeElement;t instanceof HTMLElement&&t!==e&&"function"==typeof e.contains&&e.contains(t)&&!t.classList.contains("cell")&&!t.closest(".cell")||t===e||e.focus({preventScroll:!0})}}}}const Ve=new WeakMap;function Ue(e,t){const o=we(t),i=function(e){if(!e)return-1;const t=e.getAttribute("data-col");return t?parseInt(t,10):-1}(t);if(o<0||i<0)return;e._focusRow=o,e._focusCol=i,be(e._bodyEl),t.classList.add("cell-focus"),t.setAttribute("aria-selected","true");const r=t.closest("tbw-grid, [data-tbw-grid]");r&&document.activeElement!==r&&r.focus({preventScroll:!0})}function Ge(e,t,o,i){let r=null;const n=o.composedPath?.();if(r=n&&n.length>0?n[0]:o.target,r&&!t.contains(r)){const e=document.elementFromPoint(o.clientX,o.clientY);e&&(r=e)}const s=r?.closest?.("[data-col]"),l=r?.closest?.(".data-grid-row"),a=r?.closest?.(".header-row");let d,c,h,u,g,f;return s&&(d=parseInt(s.getAttribute("data-row")??"-1",10),c=parseInt(s.getAttribute("data-col")??"-1",10),d>=0&&c>=0&&(h=e._rows[d],f=e._visibleColumns[c],u=f?.field,g=h&&u?h[u]:void 0)),{type:i,row:h,rowIndex:void 0!==d&&d>=0?d:void 0,colIndex:void 0!==c&&c>=0?c:void 0,field:u,value:g,column:f,originalEvent:o,cellElement:s??void 0,rowElement:l??void 0,isHeader:!!a,cell:void 0!==d&&void 0!==c&&d>=0&&c>=0?{row:d,col:c}:void 0}}function je(e,t,o,i){t.addEventListener("keydown",t=>function(e,t){if(e._dispatchKeyDown?.(t))return;const o=e._rows.length-1,i=e._visibleColumns.length-1,r=void 0!==e._activeEditRows&&-1!==e._activeEditRows,n=e._visibleColumns[e._focusCol],s=n?.type,l=t.composedPath?.()??[],a=l.length?l[0]:t.target;if((!a||a===e||a.closest?.(".rows-body"))&&(!We(a)||"Home"!==t.key&&"End"!==t.key)&&!(We(a)&&("ArrowUp"===t.key||"ArrowDown"===t.key)&&"INPUT"===a.tagName&&"number"===a.type||We(a)&&("ArrowLeft"===t.key||"ArrowRight"===t.key)||We(a)&&("Enter"===t.key||"Escape"===t.key)||r&&"select"===s&&("ArrowDown"===t.key||"ArrowUp"===t.key))){switch(t.key){case"Tab":return t.preventDefault(),t.shiftKey?e._focusCol>0?e._focusCol-=1:e._focusRow>0&&(e._activeEditRows===e._focusRow&&$e(e),e._focusRow-=1,e._focusCol=i):e._focusCol<i?e._focusCol+=1:($e(e),e._focusRow<o&&(e._focusRow+=1,e._focusCol=0)),void Be(e);case"ArrowDown":r&&$e(e),e._focusRow=Math.min(o,e._focusRow+1),t.preventDefault();break;case"ArrowUp":r&&$e(e),e._focusRow=Math.max(0,e._focusRow-1),t.preventDefault();break;case"ArrowRight":{const o=me(e);e._focusCol=o?Math.max(0,e._focusCol-1):Math.min(i,e._focusCol+1),t.preventDefault();break}case"ArrowLeft":{const o=me(e);e._focusCol=o?Math.min(i,e._focusCol+1):Math.max(0,e._focusCol-1),t.preventDefault();break}case"Home":return t.ctrlKey||t.metaKey?(r&&$e(e),e._focusRow=0,e._focusCol=0):e._focusCol=0,t.preventDefault(),void Be(e,{forceScrollLeft:!0});case"End":return t.ctrlKey||t.metaKey?(r&&$e(e),e._focusRow=o,e._focusCol=i):e._focusCol=i,t.preventDefault(),void Be(e,{forceScrollRight:!0});case"PageDown":e._focusRow=Math.min(o,e._focusRow+20),t.preventDefault();break;case"PageUp":e._focusRow=Math.max(0,e._focusRow-20),t.preventDefault();break;case"Enter":{const o=e._focusRow,i=e._focusCol,r=e._visibleColumns[i],n=e._rows[o],s=r?.field??"",l=s&&n?n[s]:void 0,a=e.querySelector(`[data-row="${o}"][data-col="${i}"]`),d=new CustomEvent("cell-activate",{cancelable:!0,detail:{rowIndex:o,colIndex:i,column:r,field:s,value:l,row:n,cellEl:a,trigger:"keyboard",originalEvent:t}});if(e.dispatchEvent(d),d.defaultPrevented)return void t.preventDefault();break}default:return}Be(e)}}(e,t),{signal:i}),o.addEventListener("mousedown",t=>function(e,t,o){const i=Ge(e,t,o,"mousedown");e._dispatchCellMouseDown?.(i)&&Ve.set(e,!0)}(e,o,t),{signal:i}),document.addEventListener("mousemove",t=>function(e,t,o){if(!Ve.get(e))return;const i=Ge(e,t,o,"mousemove");e._dispatchCellMouseMove?.(i)}(e,o,t),{signal:i}),document.addEventListener("mouseup",t=>function(e,t,o){if(!Ve.get(e))return;const i=Ge(e,t,o,"mouseup");e._dispatchCellMouseUp?.(i),Ve.set(e,!1)}(e,o,t),{signal:i})}let Ye;class Xe{#e;#M=new Set;#L=new Map;#k=null;#O=null;constructor(e){this.#e=e,this.#D()}focusCell(e,t){const o=this.#e,i=o._rows.length-1;if(i<0)return;let r;if("string"==typeof t){if(r=o._visibleColumns.findIndex(e=>e.field===t),r<0)return}else r=t;const n=o._visibleColumns.length-1;n<0||(o._focusRow=Math.max(0,Math.min(e,i)),o._focusCol=Math.max(0,Math.min(r,n)),Be(o))}get focusedCell(){const e=this.#e;if(0===e._rows.length||0===e._visibleColumns.length)return null;const t=e._visibleColumns[e._focusCol];return{rowIndex:e._focusRow,colIndex:e._focusCol,field:t?.field??""}}scrollToRow(e,t){const o=this.#e._virtualization;if(!o.enabled)return;const i=o.container;if(!i)return;const r=this.#e._rows.length;if(0===r)return;const n=Math.max(0,Math.min(e,r-1)),s=t?.align??"nearest",l=t?.behavior??"instant";let a,d;const c=o.positionCache;o.variableHeights&&c&&c.length>n?(a=c[n].offset,d=c[n].height):(a=n*o.rowHeight,d=o.rowHeight);const h=o.viewportEl?.clientHeight??i.clientHeight??0;if(h<=0)return;const u=i.scrollTop,g=a+d,f=u+h;let p;switch(s){case"start":p=a;break;case"center":p=a-h/2+d/2;break;case"end":p=g-h;break;default:if(a>=u&&g<=f)return;p=a<u?a:g-h}p=Math.max(0,p);const w=Fe(p,o.scrollMapping);"smooth"===l?i.scrollTo({top:w,behavior:"smooth"}):i.scrollTop=w}scrollToRowById(e,t){const o=this.#e._getRowEntry(e);o&&this.scrollToRow(o.index,t)}registerExternalFocusContainer(e){if(this.#M.has(e))return;this.#M.add(e);const t=new AbortController,o=t.signal,i=this.#e;e.addEventListener("focusin",e=>{i.dataset.hasFocus="",this.#I(e.target)},{signal:o}),e.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&this.containsFocus(t)||delete i.dataset.hasFocus,null===t&&this.#z()},{signal:o}),this.#L.set(e,()=>t.abort())}unregisterExternalFocusContainer(e){this.#M.delete(e);const t=this.#L.get(e);t&&(t(),this.#L.delete(e))}containsFocus(e){const t=e??document.activeElement;return!!t&&(!!this.#e.contains(t)||this.isInExternalFocusContainer(t))}isInExternalFocusContainer(e){for(const t of this.#M)if(t.contains(e))return!0;return!1}#D(){const e=this.#e,t=new AbortController,o=t.signal;e.addEventListener("focusin",e=>this.#I(e.target),{signal:o,capture:!0}),e.addEventListener("focusout",e=>{null===e.relatedTarget&&this.#z()},{signal:o}),this.#O=()=>t.abort()}#I(e){if(!(e instanceof HTMLElement))return;if(e===this.#e)return;const t=e.closest?.(".cell");t&&!t.classList.contains("editing")||this.isInExternalFocusContainer(e)||(this.#k=e)}#z(){queueMicrotask(()=>{if(!this.#e.isConnected)return;document.activeElement===document.body&&this.restoreLastFocus()})}restoreLastFocus(){const e=this.#k;if(!e)return!1;if(!e.isConnected)return this.#k=null,!1;if(e===document.activeElement)return!0;try{e.focus({preventScroll:!0})}catch{return!1}return document.activeElement===e}get lastFocusedElement(){return this.#k?.isConnected?this.#k:null}destroy(){for(const e of this.#L.values())e();this.#L.clear(),this.#M.clear(),this.#O?.(),this.#O=null,this.#k=null}}const Ke="function"==typeof requestIdleCallback;function Ze(e){Ke?cancelIdleCallback(e):clearTimeout(e)}function Qe(e,t){if(t){const o=t({size:e});if("string"==typeof o){const e=document.createElement("div");return e.innerHTML=o,e}return o}return function(e){const t=document.createElement("div");return t.className=`tbw-spinner tbw-spinner--${e}`,t.setAttribute("role","progressbar"),t.setAttribute("aria-label","Loading"),t}(e)}function Je(e){let t=null,o=null,i=null,r=null;const n=i=>{if(!t)return;const r=i.clientX-t.startX,n=Math.max(40,t.startWidth+r),s=e._visibleColumns[t.colIndex];s.width=n,s.__userResized=!0,s.__renderedWidth=n,null==o&&(o=requestAnimationFrame(()=>{o=null,e.updateTemplate?.()})),e.dispatchEvent(new CustomEvent("column-resize",{detail:{field:s.field,width:n}}))};let s=!1;const l=()=>{const o=null!==t;o&&(s=!0,requestAnimationFrame(()=>{s=!1})),window.removeEventListener("mousemove",n),window.removeEventListener("mouseup",l),null!==i&&(document.documentElement.style.cursor=i,i=null),null!==r&&(document.body.style.userSelect=r,r=null),t=null,o&&e.requestStateChange&&e.requestStateChange()};return{get isResizing(){return null!==t||s},start(o,s,a){o.preventDefault();const d=e._headerRowEl??e.findHeaderRow?.();d&&function(t,o){const i=o.querySelectorAll(".cell");for(let r=0;r<e._visibleColumns.length;r++){if(r===t)continue;const o=e._visibleColumns[r];if(null==o.width&&!o.__userResized){const e=i[r],t=e?.getBoundingClientRect().width;t&&(o.width=Math.round(t),o.__userResized=!0,o.__renderedWidth=o.width)}}}(s,d);const c=e._visibleColumns[s],h="number"==typeof c?.width?c.width:void 0,u=c?.__renderedWidth??h??a.getBoundingClientRect().width;t={startX:o.clientX,colIndex:s,startWidth:u},window.addEventListener("mousemove",n),window.addEventListener("mouseup",l),null===i&&(i=document.documentElement.style.cursor),document.documentElement.style.cursor="e-resize",null===r&&(r=document.body.style.userSelect),document.body.style.userSelect="none"},resetColumn(t){const o=e._visibleColumns[t];o&&(o.__userResized=!1,o.__renderedWidth=void 0,o.width=o.__originalWidth,e.updateTemplate?.(),e.requestStateChange?.(),e.dispatchEvent(new CustomEvent("column-resize-reset",{detail:{field:o.field,width:o.width}})))},dispose(){l()}}}const et="data-animating",tt={change:"--tbw-row-change-duration",insert:"--tbw-row-insert-duration",remove:"--tbw-row-remove-duration"},ot={change:500,insert:300,remove:200};function it(e,t){const o=tt[t],i=getComputedStyle(e).getPropertyValue(o);if(i){const e=function(e){const t=e.trim().toLowerCase();return t.endsWith("ms")?parseFloat(t):t.endsWith("s")?1e3*parseFloat(t):parseFloat(t)}(i);if(!isNaN(e)&&e>0)return e}return ot[t]}function rt(e,t,o){if(t<0)return Promise.resolve(!1);const i=e.findRenderedRowElement?.(t);return i?new Promise(e=>{!function(e,t,o){e.removeAttribute(et),e.offsetWidth,e.setAttribute(et,t);const i=it(e,t);setTimeout(()=>{"remove"!==t&&e.removeAttribute(et),o?.()},i)}(i,o,()=>e(!0))}):Promise.resolve(!1)}function nt(e,t){if(t)return t(e);const o=e;return"id"in o&&null!=o.id?String(o.id):"_id"in o&&null!=o._id?String(o._id):void 0}function st(e,t,o){const i=nt(e,o);return void 0===i&&g("TBW040",'Cannot determine row ID. Configure getRowId in gridConfig or ensure rows have an "id" property.',t),i}class lt{#e;constructor(e){this.#e=e}resolveRowId(e){return st(e,this.#e.id,this.#e.effectiveConfig?.getRowId)}getRow(e){return this.#e._getRowEntry(e)?.row}getRowEntry(e){return this.#e._getRowEntry(e)}updateRow(e,t,o="api"){const i=this.#e,r=i._getRowEntry(e);r||g(a,`Row with ID "${e}" not found. Ensure the row exists and getRowId is correctly configured.`,i.id);const{row:n,index:s}=r,l=[];for(const[a,d]of Object.entries(t)){const e=n[a];e!==d&&(l.push({field:a,oldValue:e,newValue:d}),n[a]=d,B(n,a))}for(const{field:a,oldValue:d,newValue:c}of l)i.dispatchEvent(new CustomEvent("cell-change",{detail:{row:n,rowId:e,rowIndex:s,field:a,oldValue:d,newValue:c,changes:t,source:o},bubbles:!0,composed:!0}));l.length>0&&(Te(i),i._requestSchedulerPhase(le.VIRTUALIZATION,"updateRow"),i._emitDataChange())}updateRows(e,t="api"){const o=this.#e;let i=!1;for(const{id:r,changes:n}of e){const e=o._getRowEntry(r);e||g(a,`Row with ID "${r}" not found. Ensure the row exists and getRowId is correctly configured.`,o.id);const{row:s,index:l}=e;for(const[a,d]of Object.entries(n)){const e=s[a];e!==d&&(i=!0,s[a]=d,B(s,a),o.dispatchEvent(new CustomEvent("cell-change",{detail:{row:s,rowId:r,rowIndex:l,field:a,oldValue:e,newValue:d,changes:n,source:t},bubbles:!0,composed:!0})))}}i&&(Te(o),o._requestSchedulerPhase(le.VIRTUALIZATION,"updateRows"),o._emitDataChange())}async insertRow(e,t,o=!0){const i=this.#e,r=Math.max(0,Math.min(e,i._rows.length));i.sourceRows=[...i.sourceRows,t];const n=[...i._rows];n.splice(r,0,t),i._rows=n,i._sortState&&(i.__originalOrder=[...i.__originalOrder,t]),Te(i),i._rebuildRowIdMap(),i.__rowRenderEpoch++;for(let s=0;s<i._rowPool.length;s++)i._rowPool[s].__epoch=-1;i.refreshVirtualWindow(!0),i._emitPluginEvent("row-inserted",{row:t,index:r}),i._emitDataChange(),o&&(await new Promise(e=>requestAnimationFrame(()=>e())),await rt(i,r,"insert"))}async removeRow(e,t=!0){const o=this.#e,i=o._rows[e];if(!i)return;t&&await rt(o,e,"remove");const r=o._rows.indexOf(i);if(r<0)return i;const n=[...o._rows];n.splice(r,1),o._rows=n;const s=o.sourceRows.indexOf(i);if(s>=0){const e=[...o.sourceRows];e.splice(s,1),o.sourceRows=e}if(o._sortState){const e=o.__originalOrder.indexOf(i);if(e>=0){const t=[...o.__originalOrder];t.splice(e,1),o.__originalOrder=t}}Te(o),o._rebuildRowIdMap(),o.__rowRenderEpoch++;for(let l=0;l<o._rowPool.length;l++)o._rowPool[l].__epoch=-1;return o.refreshVirtualWindow(!0),o._emitDataChange(),t&&requestAnimationFrame(()=>{const e=o.querySelectorAll('[data-animating="remove"]');for(let t=0;t<e.length;t++)e[t].removeAttribute("data-animating")}),i}async applyTransaction(e,t=!0){const o=this.#e,i={added:[],updated:[],removed:[]};if(e.remove?.length)for(const{id:l}of e.remove){const e=o._getRowEntry(l);if(!e)continue;const{row:r}=e;if(t){const e=o._rows.indexOf(r);e>=0&&await rt(o,e,"remove")}const n=o._rows.indexOf(r);if(n<0){i.removed.push(r);continue}const s=[...o._rows];s.splice(n,1),o._rows=s;const a=o.sourceRows.indexOf(r);if(a>=0){const e=[...o.sourceRows];e.splice(a,1),o.sourceRows=e}if(o._sortState){const e=o.__originalOrder.indexOf(r);if(e>=0){const t=[...o.__originalOrder];t.splice(e,1),o.__originalOrder=t}}i.removed.push(r)}const r=new Set(e.remove?.map(e=>e.id));if(e.update?.length)for(const{id:l,changes:a}of e.update){if(r.has(l))continue;const e=o._getRowEntry(l);if(!e)continue;const{row:t,index:n}=e;let s=!1;for(const[i,r]of Object.entries(a)){const e=t[i];e!==r&&(s=!0,t[i]=r,B(t,i),o.dispatchEvent(new CustomEvent("cell-change",{detail:{row:t,rowId:l,rowIndex:n,field:i,oldValue:e,newValue:r,changes:a,source:"api"},bubbles:!0,composed:!0})))}s&&i.updated.push(t)}if(e.add?.length)for(const l of e.add){o.sourceRows=[...o.sourceRows,l];const e=[...o._rows];e.push(l),o._rows=e,o._sortState&&(o.__originalOrder=[...o.__originalOrder,l]),i.added.push(l)}const n=i.added.length>0||i.removed.length>0,s=i.updated.length>0;if(n){Te(o),o._rebuildRowIdMap(),o.__rowRenderEpoch++;for(let e=0;e<o._rowPool.length;e++)o._rowPool[e].__epoch=-1;o.refreshVirtualWindow(!0)}else s&&(Te(o),o._requestSchedulerPhase(le.VIRTUALIZATION,"applyTransaction"));if((n||s)&&o._emitDataChange(),t&&i.added.length>0){await new Promise(e=>requestAnimationFrame(()=>e()));for(const e of i.added){const t=o._rows.indexOf(e);t>=0&&await rt(o,t,"insert")}}if(t&&i.updated.length>0)for(const l of i.updated){const e=o._rows.indexOf(l);e>=0&&await rt(o,e,"change")}return t&&i.removed.length>0&&requestAnimationFrame(()=>{const e=o.querySelectorAll('[data-animating="remove"]');for(let t=0;t<e.length;t++)e[t].removeAttribute("data-animating")}),i}#N=null;#q=[];#F=null;applyTransactionAsync(e){return this.#N||(this.#N={add:[],update:[],remove:[]}),e.add&&this.#N.add.push(...e.add),e.update&&this.#N.update.push(...e.update),e.remove&&this.#N.remove.push(...e.remove),new Promise(e=>{this.#q.push(e),null===this.#F&&(this.#F=requestAnimationFrame(()=>{this.#F=null;const e=this.#N,t=this.#q;this.#N=null,this.#q=[],this.applyTransaction(e,!1).then(e=>{for(const o of t)o(e)})}))})}}function at(e,t){if(t)for(const o in t){const i=t[o];null!=i&&e.setAttribute(o,i)}}function dt(e,t,o){const i=document.createElement(e);return at(i,t),i}function ct(e,t){const o=document.createElement("div");return e&&(o.className=e),at(o,t),o}function ht(e,t,o){const i=document.createElement("button");return i.type="button",e&&(i.className=e),at(i,t),i}const ut=document.createElement("template");function gt(){return ut.content.cloneNode(!0)}function ft(e){const t=document.createDocumentFragment(),o=ct(e.hasShell?`${_.ROOT} has-shell`:_.ROOT);if(e.hasShell&&e.shellHeader&&e.shellBody)o.appendChild(e.shellHeader),o.appendChild(e.shellBody);else{const e=ct("tbw-grid-content");e.appendChild(gt()),o.appendChild(e)}return t.appendChild(o),t}function pt(e){const t=ct("tbw-shell-header",{part:"shell-header",role:"presentation"});if(e.title){const o=ct("tbw-shell-title");o.textContent=e.title,t.appendChild(o)}const o=ct("tbw-shell-content",{part:"shell-content",role:"presentation","data-light-dom-header-content":""});t.appendChild(o);const i=ct("tbw-shell-toolbar",{part:"shell-toolbar",role:"presentation"});for(const s of e.configButtons)s.hasRender&&i.appendChild(ct("tbw-toolbar-content-slot",{"data-toolbar-content":s.id}));for(const s of e.apiButtons)s.hasRender&&i.appendChild(ct("tbw-toolbar-content-slot",{"data-toolbar-content":s.id}));const r=e.configButtons.some(e=>e.hasRender)||e.apiButtons.some(e=>e.hasRender),n=e.hasPanels&&!1!==e.showToggle;if(r&&n&&i.appendChild(ct("tbw-toolbar-separator")),n){const t=ht(e.isPanelOpen?"tbw-toolbar-btn active":"tbw-toolbar-btn",{"data-panel-toggle":"",title:"Settings","aria-label":"Toggle settings panel","aria-pressed":String(e.isPanelOpen),"aria-controls":"tbw-tool-panel"});t.dataset.icon="tool-panel",void 0!==e.toolPanelIcon&&(t.innerHTML=O(e.toolPanelIcon)),i.appendChild(t)}return t.appendChild(i),t}function wt(e){const t=ct("tbw-shell-body",{"data-mode":e.mode??"overlay"}),o=e.panels.length>0,i=1===e.panels.length,r=ct("tbw-grid-content");r.appendChild(gt());let n=null;if(o){n=dt("aside",{class:e.isPanelOpen?"tbw-tool-panel open":"tbw-tool-panel",part:"tool-panel","data-position":e.position,role:"presentation",id:"tbw-tool-panel"});const t="left"===e.position?"right":"left";n.appendChild(ct("tbw-tool-panel-resize",{"data-resize-handle":"","data-handle-position":t,"aria-hidden":"true"}));const o=ct("tbw-tool-panel-content",{role:"presentation"}),r=ct("tbw-accordion");for(const n of e.panels){const t=ct(`tbw-accordion-section${n.isExpanded?" expanded":""}${i?" single":""}`,{"data-section":n.id}),o=ht("tbw-accordion-header",{"aria-expanded":String(n.isExpanded),"aria-controls":`tbw-section-${n.id}`});if(i&&o.setAttribute("aria-disabled","true"),n.icon){const e=dt("span",{class:"tbw-accordion-icon"});e.innerHTML=O(n.icon),o.appendChild(e)}const s=dt("span",{class:"tbw-accordion-title"});if(s.textContent=n.title,o.appendChild(s),!i){const t=dt("span",{class:"tbw-accordion-chevron","data-icon":"expand"});void 0!==e.expandIcon&&(t.innerHTML=O(e.expandIcon)),o.appendChild(t)}t.appendChild(o),t.appendChild(ct("tbw-accordion-content",{id:`tbw-section-${n.id}`,role:"presentation"})),r.appendChild(t)}o.appendChild(r),n.appendChild(o)}return"left"===e.position&&n?(t.appendChild(n),t.appendChild(r)):(t.appendChild(r),n&&t.appendChild(n)),t}function bt(e){return e?"string"==typeof e?O(e):e.outerHTML:""}function mt(e){return!!e?.header?.title||(!!e?.header?.toolbarContents?.length||(!!e?.toolPanels?.length||(!!e?.headerContents?.length||(!!e?.header?.lightDomContent?.length||!!e?.header?.hasToolButtonsContainer))))}function vt(e,t){const o=e.querySelector("tbw-grid-header");if(!o)return;if(!t.lightDomTitle){const e=o.getAttribute("title");e&&(t.lightDomTitle=e)}const i=o.querySelectorAll("tbw-grid-header-content");i.length>0&&0===t.lightDomHeaderContent.length&&(t.lightDomHeaderContent=Array.from(i)),o.style.display="none"}function Ct(e,t,o){const i=e.querySelector(":scope > tbw-grid-tool-buttons");if(!i)return;t.hasToolButtonsContainer=!0;const r="light-dom-toolbar-content";if(t.lightDomToolbarContentIds.has(r))return;const n={id:r,order:0,render:e=>{for(;i.firstChild;)e.appendChild(i.firstChild);return()=>{for(;e.firstChild;)i.appendChild(e.firstChild)}}};t.toolbarContents.set(r,n),t.lightDomToolbarContentIds.add(r),i.style.display="none"}function yt(e,t,o){e.querySelectorAll(":scope > tbw-grid-tool-panel").forEach(e=>{const i=e,r=i.getAttribute("id"),n=i.getAttribute("title");if(!r||!n)return void f("TBW070",`Tool panel missing required id or title attribute: id="${r??""}", title="${n??""}"`);const s=i.getAttribute("icon")??void 0,l=i.getAttribute("tooltip")??void 0,a=parseInt(i.getAttribute("order")??"100",10);let d;const c=o?.(i);if(c)d=c;else{const e=O(i.innerHTML.trim());d=t=>{const o=document.createElement("div");return o.innerHTML=e,t.appendChild(o),()=>o.remove()}}const h=t.toolPanels.get(r);if(h){if(c){const e=!t.adapterBoundToolPanelIds.has(r),o=h.order!==a||h.icon!==s||h.tooltip!==l;if(h.render=d,h.order=a,h.icon=s,h.tooltip=l,t.adapterBoundToolPanelIds.add(r),e||o){const e=t.panelCleanups.get(r);e&&(e(),t.panelCleanups.delete(r))}}return}const u={id:r,title:n,icon:s,tooltip:l,order:a,render:d};t.toolPanels.set(r,u),t.lightDomToolPanelIds.add(r),c&&t.adapterBoundToolPanelIds.add(r),i.style.display="none"})}function _t(e,t,o){const i=t?.header?.toolbarContents??[],r=[...o.toolbarContents.values()],n=new Set(i.map(e=>e.id)),s=[...i];for(const l of r)n.has(l.id)||s.push(l);for(const l of s){if(o.toolbarContentCleanups.has(l.id))continue;if(!l.render)continue;const t=e.querySelector(`[data-toolbar-content="${l.id}"]`);if(!t)continue;const i=l.render(t);i&&o.toolbarContentCleanups.set(l.id,i)}}function Rt(e,t){const o=t.lightDomHeaderContent.length>0&&!t.lightDomContentMoved,i=t.headerContents.size>0;if(!o&&!i)return;const r=e.querySelector(".tbw-shell-content");if(!r)return;if(o){for(const e of t.lightDomHeaderContent)e.style.display="",r.appendChild(e);t.lightDomContentMoved=!0}const n=[...t.headerContents.values()].sort((e,t)=>(e.order??100)-(t.order??100));for(const s of n){const e=t.headerContentCleanups.get(s.id);e&&(e(),t.headerContentCleanups.delete(s.id));let o=r.querySelector(`[data-header-content="${s.id}"]`);o||(o=document.createElement("div"),o.setAttribute("data-header-content",s.id),r.appendChild(o));const i=s.render(o);i&&t.headerContentCleanups.set(s.id,i)}}function St(e,t,o){if(t.isPanelOpen)for(const[i,r]of t.toolPanels){const o=t.expandedSections.has(i),n=e.querySelector(`[data-section="${i}"]`),s=n?.querySelector(".tbw-accordion-content");if(!n||!s)continue;n.classList.toggle("expanded",o);const l=n.querySelector(".tbw-accordion-header");if(l&&l.setAttribute("aria-expanded",String(o)),o){if(0===s.children.length){const e=r.render(s);e&&t.panelCleanups.set(i,e)}}else{const e=t.panelCleanups.get(i);e&&(e(),t.panelCleanups.delete(i)),s.innerHTML=""}}}function Et(e,t){const o=e.querySelector("[data-panel-toggle]");o&&(o.classList.toggle("active",t.isPanelOpen),o.setAttribute("aria-pressed",String(t.isPanelOpen)))}function xt(e,t){const o=e.querySelector(".tbw-tool-panel");o&&(o.classList.toggle("open",t.isPanelOpen),t.isPanelOpen||(o.style.width=""))}function At(e){for(const t of e.toolbarContentCleanups.values())t();e.toolbarContentCleanups.clear();for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.headerContentCleanups.values())t();e.headerContentCleanups.clear(),e.lightDomContentMoved=!1}function Tt(e,t,o){const i=void 0!==o?.toolPanel?bt(o.toolPanel):void 0,r=void 0!==o?.expand?bt(o.expand):void 0,n=void 0!==o?.collapse?bt(o.collapse):void 0,s=[...e.header?.toolbarContents??[]].sort((e,t)=>(e.order??0)-(t.order??0)),l=[...e.toolPanels??[]].sort((e,t)=>(e.order??100)-(t.order??100));return{headerOptions:{title:e.header?.title??void 0,hasPanels:l.length>0,isPanelOpen:t.isPanelOpen,toolPanelIcon:i,showToggle:!1!==e.header?.toolPanelToggle&&!0!==e.toolPanel?.locked,configButtons:s.map(e=>({id:e.id,hasElement:!1,hasRender:!!e.render})),apiButtons:[]},bodyOptions:{position:e.toolPanel?.position??"right",mode:e.toolPanel?.mode??"overlay",isPanelOpen:t.isPanelOpen,expandIcon:r,collapseIcon:n,panels:l.map(e=>({id:e.id,title:e.title,icon:bt(e.icon),isExpanded:t.expandedSections.has(e.id)}))}}}function Pt(e,t,o,i){const r=mt(t),n=[];for(let s=e.firstChild;s;s=s.nextSibling)1===s.nodeType&&s.classList.contains(_.ROOT)||n.push(s);e.replaceChildren();for(const s of n)e.appendChild(s);if(r){const{headerOptions:r,bodyOptions:n}=Tt(t,o,i),s=ft({hasShell:!0,shellHeader:pt(r),shellBody:wt(n)});e.appendChild(s)}else{const t=ft({hasShell:!1});e.appendChild(t)}return r}function Ht(e,t,o){const i=e.querySelector(`[data-section="${t}"]`);i&&i.classList.toggle("expanded",o)}ut.innerHTML='\n <div class="tbw-scroll-area">\n <div class="rows-body-wrapper">\n <div class="rows-body" role="grid">\n <div class="header" role="rowgroup">\n <div class="header-row" role="row" part="header-row"></div>\n </div>\n <div class="rows-container" role="presentation">\n <div class="rows-viewport" role="presentation">\n <div class="rows"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="faux-vscroll">\n <div class="faux-vscroll-spacer"></div>\n </div>\n <div class="tbw-sr-only" aria-live="polite" aria-atomic="true"></div>\n';const Mt="tbw-grid-styles";let Lt="";const kt=new Map;function Ot(){const e=function(){const e=Xt.activeTag;return e===Xt.tagName?Mt:`${Mt}-${e}`}();let t=document.getElementById(e);return t||(t=document.createElement("style"),t.id=e,t.setAttribute("data-tbw-grid","true"),document.head.appendChild(t)),t}function Dt(e){const t=Xt.activeTag;return t===Xt.tagName?e:e.replace(new RegExp("(?<![-\\w])tbw-grid(?![-\\w])","g"),t)}function It(){const e=Ot(),t=Array.from(kt.values()).join("\n");e.textContent=`${Lt}\n\n/* Plugin Styles */\n${t}`}async function zt(e){if(Lt)return;if("string"==typeof e&&e.length>0)return Lt=Dt(e),void It();await new Promise(e=>setTimeout(e,50));const t=function(){try{for(const e of Array.from(document.styleSheets))try{const t=Array.from(e.cssRules||[]).map(e=>e.cssText).join("\n");if(t.includes(".tbw-grid-root")&&t.includes("tbw-grid"))return t}catch{continue}}catch(e){f("TBW120",`Failed to extract grid.css from document stylesheets: ${e}`)}return null}();t?(Lt=Dt(t),It()):"undefined"!=typeof process&&"test"===process.env?.NODE_ENV||f("TBW121",`Could not find grid.css in document.styleSheets. Grid styling will not work. Available stylesheets: ${Array.from(document.styleSheets).map(e=>e.href||"(inline)").join(", ")}`)}function Nt(e){e.startY=null,e.startX=null,e.lastY=null,e.lastX=null,e.lastTime=null,e.locked=!1}function qt(e){e.momentumRaf&&(cancelAnimationFrame(e.momentumRaf),e.momentumRaf=0)}function Ft(e,t){if(null!==e.lastTime){performance.now()-e.lastTime>60&&(e.velocityY=0,e.velocityX=0)}(Math.abs(e.velocityY)>.1||Math.abs(e.velocityX)>.1)&&function(e,t){const o=.95,i=1;let r=performance.now();const n=()=>{const s=performance.now(),l=s-r;r=s;const a=l/16,d=Math.pow(o,a);e.velocityY*=d,e.velocityX*=d;const c=16*e.velocityY,h=16*e.velocityX,u=Math.abs(c)>=i,g=Math.abs(h)>=i;u&&(t.fauxScrollbar.scrollTop+=c),g&&t.scrollArea&&(t.scrollArea.scrollLeft+=h),e.momentumRaf=u||g?requestAnimationFrame(n):0};e.momentumRaf=requestAnimationFrame(n)}(e,t),Nt(e)}function $t(e,t,o,i){e.addEventListener("pointerdown",o=>{"touch"===o.pointerType&&null===t.activePointerId&&(t.activePointerId=o.pointerId,e.setPointerCapture(o.pointerId),function(e,t,o){qt(o),o.startY=t,o.startX=e,o.lastY=t,o.lastX=e,o.lastTime=performance.now(),o.velocityY=0,o.velocityX=0,o.locked=!1}(o.clientX,o.clientY,t))},{passive:!0,signal:i}),e.addEventListener("pointermove",e=>{if(e.pointerId!==t.activePointerId)return;const i=function(e,t,o,i){if(null===o.lastY||null===o.lastX)return!1;const r=performance.now(),n=o.lastY-t,s=o.lastX-e;if(null!==o.lastTime){const e=r-o.lastTime;e>0&&(o.velocityY=n/e,o.velocityX=s/e)}if(o.lastY=t,o.lastX=e,o.lastTime=r,o.locked){const{scrollTop:e,scrollHeight:t,clientHeight:o}=i.fauxScrollbar;if(n>0&&e<t-o||n<0&&e>0?i.fauxScrollbar.scrollTop+=n:0!==n&&window.scrollBy(0,n),i.scrollArea){const{scrollLeft:e,scrollWidth:t,clientWidth:o}=i.scrollArea;s>0&&e<t-o||s<0&&e>0?i.scrollArea.scrollLeft+=s:0!==s&&window.scrollBy(s,0)}return!0}const l=null!==o.startY?Math.abs(o.startY-t):0,a=null!==o.startX?Math.abs(o.startX-e):0;if(l<3&&a<3)return!1;const d=l>=a,{scrollHeight:c,clientHeight:h}=i.fauxScrollbar,u=c-h>0;let g=!1;if(i.scrollArea){const{scrollWidth:e,clientWidth:t}=i.scrollArea;g=e-t>0}return!!(d&&u||!d&&g)&&(o.locked=!0,i.fauxScrollbar.scrollTop+=n,i.scrollArea&&(i.scrollArea.scrollLeft+=s),!0)}(e.clientX,e.clientY,t,o);i&&e.preventDefault()},{passive:!1,signal:i}),e.addEventListener("pointerup",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Ft(t,o))},{passive:!0,signal:i}),e.addEventListener("pointercancel",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Nt(t))},{passive:!0,signal:i}),e.addEventListener("lostpointercapture",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Nt(t))},{passive:!0,signal:i})}const Wt=[{property:"editable",pluginName:"editing",level:"column",description:"",isUsed:e=>!0===e||"function"==typeof e},{property:"editor",pluginName:"editing",level:"column",description:""},{property:"editorParams",pluginName:"editing",level:"column",description:""},{property:"group",pluginName:"groupingColumns",level:"column",description:""},{property:"pinned",pluginName:"pinnedColumns",level:"column",description:"",isUsed:e=>"left"===e||"right"===e||"start"===e||"end"===e}],Bt=[{property:"rowEditable",pluginName:"editing",level:"config",description:"",isUsed:e=>"function"==typeof e},{property:"columnGroups",pluginName:"groupingColumns",level:"config",description:"",isUsed:e=>Array.isArray(e)&&e.length>0}];function Vt(e){return`import { ${Ut(e)}Plugin } from '@toolbox-web/grid/plugins/${t=e,t.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}';`;var t}function Ut(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Gt(e,t){return e.some(e=>e.name===t)}class jt{#e;state;constructor(e,t){this.#e=e,this.state={enabled:!0,rowHeight:28,bypassThreshold:24,start:0,end:0,container:null,viewportEl:null,totalHeightEl:null,positionCache:null,heightCache:{byKey:new Map,byRef:new WeakMap},averageHeight:28,measuredCount:0,variableHeights:!1,cachedViewportHeight:0,cachedFauxHeight:0,cachedScrollAreaHeight:0,scrollAreaEl:null,scrollMapping:{rawContentHeight:0,spacerHeight:0,viewportHeight:0,capped:!1},...t}}updateCachedGeometry(){const e=this.state,t=e.container,o=e.viewportEl??t;o&&(e.cachedViewportHeight=o.clientHeight),t&&(e.cachedFauxHeight=t.clientHeight);const i=e.scrollAreaEl;i&&(e.cachedScrollAreaHeight=i.clientHeight)}calculateTotalSpacerHeight(e,t=!1){const o=this.state;let i,r,n;if(t){const e=o.container??this.#e._hostElement,t=o.viewportEl??e,s=o.scrollAreaEl;i=e?.clientHeight??0,r=t?.clientHeight??0,n=s?s.clientHeight:i,o.cachedFauxHeight=i,o.cachedViewportHeight=r,o.cachedScrollAreaHeight=n}else i=o.cachedFauxHeight,r=o.cachedViewportHeight,n=o.cachedScrollAreaHeight||i;const s=n-r,l=Math.max(0,i-n);let a;return a=o.variableHeights&&o.positionCache?function(e){if(0===e.length)return 0;const t=e[e.length-1];return t.offset+t.height}(o.positionCache):e*o.rowHeight,o.scrollMapping=Ne(a,r),o.scrollMapping.spacerHeight+s+l}initializePositionCache(){const e=this.state;if(!e.variableHeights)return;const t=this.#e,o=t._rows,i=e.rowHeight||28,r=t.effectiveConfig?.rowHeight,n=t.effectiveConfig?.getRowId,s=n?e=>n(e):void 0;e.positionCache=function(e,t,o,i,r){const n=new Array(e.length);let s=0;for(let l=0;l<e.length;l++){const a=e[l];let d=r?.(a,l),c=void 0!==d;void 0===d&&(d=ke(t,a,i.rowId),c=void 0!==d),void 0===d&&(d=o,c=!1),n[l]={offset:s,height:d,measured:c},s+=d}return n}(o,e.heightCache,i,{rowId:s},(e,o)=>{const i=t._getPluginRowHeight(e,o);if(void 0!==i)return i;if(r){const t=r(e,o);if(void 0!==t&&t>0)return t}});const l=function(e,t,o,i){let r=0,n=0;for(let s=0;s<e.length;s++){const o=e[s];if(o.measured){const e=i?.(t[s],s);void 0===e&&(n+=o.height,r++)}}return{measuredCount:r,averageHeight:r>0?n/r:o}}(e.positionCache,o,i,(e,o)=>t._getPluginRowHeight(e,o));e.measuredCount=l.measuredCount,l.measuredCount>0&&(e.averageHeight=l.averageHeight)}invalidateRowHeight(e,t){const o=this.state;if(!o.variableHeights)return;if(!o.positionCache)return;const i=this.#e._rows;if(e<0||e>=i.length)return;const r=i[e];let n=t;void 0===n&&(n=this.#e._getPluginRowHeight(r,e)),void 0===n&&(n=o.rowHeight);const s=o.positionCache[e];if(s&&!(Math.abs(s.height-n)<1)&&(Oe(o.positionCache,e,n),o.totalHeightEl)){const e=this.calculateTotalSpacerHeight(i.length);o.totalHeightEl.style.height=`${e}px`}}measureRenderedRowHeights(e,t){const o=this.state;if(!o.variableHeights)return;if(!o.positionCache)return;const i=this.#e,r=i._bodyEl;if(!r)return;const n=r.querySelectorAll(".data-grid-row"),s=i.effectiveConfig?.getRowId,l=i._rows,a=Ie({positionCache:o.positionCache,heightCache:o.heightCache,rows:l,defaultHeight:o.rowHeight,start:e,end:t,getPluginHeight:(e,t)=>i._getPluginRowHeight(e,t),getRowId:s?e=>s(e):void 0},n);if(a.hasChanges&&(o.measuredCount=a.measuredCount,o.averageHeight=a.averageHeight,o.totalHeightEl)){const e=this.calculateTotalSpacerHeight(l.length);o.totalHeightEl.style.height=`${e}px`}}refreshVirtualWindow(e=!1,t=!1){const o=this.state,i=this.#e,r=i._bodyEl;if(!r)return!1;const n=i._rows.length;if(!o.enabled)return i._renderVisibleRows(0,n),t||i._afterPluginRender(),!0;if(n<=o.bypassThreshold)return o.start=0,o.end=n,e&&(r.style.transform="translateY(0px)"),i._renderVisibleRows(0,n,i.__rowRenderEpoch),e&&o.variableHeights&&this.initializePositionCache(),e&&o.totalHeightEl&&(o.totalHeightEl.style.height=`${this.calculateTotalSpacerHeight(n,!0)}px`),i._updateAriaCounts(n,i._visibleColumns.length),t||i._afterPluginRender(),!0;const s=o.container,l=o.viewportEl??s,a=e?o.cachedViewportHeight=l.clientHeight:o.cachedViewportHeight||(o.cachedViewportHeight=l.clientHeight),d=o.rowHeight,c=qe(s.scrollTop,o.scrollMapping);let h;e&&o.variableHeights&&this.initializePositionCache();const u=o.positionCache;o.variableHeights&&u&&u.length>0?(h=De(u,c),-1===h&&(h=0)):h=Math.floor(c/d),h-=h%2,h<0&&(h=0),n>0&&h>n-1&&(h=n-1);const g=i._adjustPluginVirtualStart(h,c,d);let f;if(void 0!==g&&g<h&&(h=g,h-=h%2,h<0&&(h=0)),o.variableHeights&&u&&u.length>0){const e=a+3*d;let t=0;for(f=h;f<n&&t<e;)t+=u[f].height,f++;const o=Math.ceil(a/d)+3;f-h<o&&(f=Math.min(h+o,n))}else{f=h+(Math.ceil(a/d)+3)}f>n&&(f=n);const p=o.start,w=o.end;if(!e&&h===p&&f===w)return!1;o.start=h,o.end=f;const b=e?o.cachedFauxHeight=s.clientHeight:o.cachedFauxHeight||(o.cachedFauxHeight=s.clientHeight);if(e){const e=o.scrollAreaEl;e&&(o.cachedScrollAreaHeight=e.clientHeight)}if(0===b&&a>0)return i._requestSchedulerPhase(le.VIRTUALIZATION,"stale-refs-retry"),!1;if(e&&o.totalHeightEl){const e=this.calculateTotalSpacerHeight(n);o.totalHeightEl.style.height=`${e}px`}let m;m=o.variableHeights&&u&&u[h]?u[h].offset:h*d;const v=-(c-m);return r.style.transform=`translateY(${v}px)`,i._renderVisibleRows(h,f,i.__rowRenderEpoch),e&&o.variableHeights&&this.measureRenderedRowHeights(h,f),i._updateAriaCounts(n,i._visibleColumns.length),e&&!t&&(i._afterPluginRender(),queueMicrotask(()=>{if(!o.totalHeightEl)return;const e=this.calculateTotalSpacerHeight(n);0===o.cachedFauxHeight&&o.cachedViewportHeight>0||(o.totalHeightEl.style.height=`${e}px`)})),!0}}class Yt{constructor(e){this.grid=e}plugins=[];getPlugins(){return this.plugins}pluginMap=new Map;cellRenderers=new Map;headerRenderers=new Map;cellEditors=new Map;_hasAfterCellRender=!1;_hasAfterRowRender=!1;_hasProcessRows=!1;_hasRowStructurePlugins=!1;#$=new Map;eventListeners=new Map;queryHandlers=new Map;attachAll(e){const t=this.#W(e);for(const o of t)this.attach(o)}#W(e){if(e.length<2)return e;const t=new Map,o=new Map,i=[];for(const r of e){const e=r.constructor,n=t.get(e);if(!n){t.set(e,r),i.push(r);continue}const s=o.get(n)??[];s.push(r),o.set(n,s)}if(0===o.size)return i;for(const[r,n]of o)r.mergeConfigsFrom(n);return i}attach(e){if(function(e,t,o){const i=e.name,r=e.constructor.dependencies??[];for(const n of r){const e=n.name,r=n.required??!0,s=n.reason;if(!t.some(t=>t.name===e)){const t=s??`${Ut(i)}Plugin requires ${Ut(e)}Plugin`,n=Vt(e);r&&g("TBW020",`Plugin dependency error:\n\n${t}.\n\n → Add the plugin to your gridConfig.plugins array BEFORE ${Ut(i)}Plugin:\n ${n}\n plugins: [new ${Ut(e)}Plugin(), new ${Ut(i)}Plugin()]`,o)}}}(e,this.plugins,this.grid.getAttribute("id")??void 0),this.pluginMap.set(e.constructor,e),this.plugins.push(e),e.cellRenderers)for(const[t,o]of Object.entries(e.cellRenderers))this.cellRenderers.set(t,o);if(e.headerRenderers)for(const[t,o]of Object.entries(e.headerRenderers))this.headerRenderers.set(t,o);if(e.cellEditors)for(const[t,o]of Object.entries(e.cellEditors))this.cellEditors.set(t,o);this.registerQueryHandlers(e),e.attach(this.grid),this.#B();for(const t of this.plugins)t!==e&&t.onPluginAttached&&t.onPluginAttached(e.name,e)}registerQueryHandlers(e){const t=e.constructor.manifest;if(t?.queries)for(const o of t.queries){let t=this.queryHandlers.get(o.type);t||(t=new Set,this.queryHandlers.set(o.type,t)),t.add(e)}}unregisterQueryHandlers(e){for(const[t,o]of this.queryHandlers)o.delete(e),0===o.size&&this.queryHandlers.delete(t)}detachAll(){for(const e of this.plugins)for(const t of this.plugins)t!==e&&t.onPluginDetached&&t.onPluginDetached(e.name);for(let e=this.plugins.length-1;e>=0;e--){const t=this.plugins[e];this.unsubscribeAll(t),this.unregisterQueryHandlers(t),t.detach()}this.plugins=[],this.pluginMap.clear(),this.cellRenderers.clear(),this.headerRenderers.clear(),this.cellEditors.clear(),this.eventListeners.clear(),this.queryHandlers.clear(),this._hasAfterCellRender=!1,this._hasAfterRowRender=!1,this._hasProcessRows=!1,this.#$.clear()}getPlugin(e){return this.pluginMap.get(e)}getPluginByName(e){return this.plugins.find(t=>t.name===e||t.aliases?.includes(e))}hasPlugin(e){return this.pluginMap.has(e)}getAll(){return this.plugins}getRegisteredPluginNames(){return this.plugins.map(e=>e.name)}getCellRenderer(e){return this.cellRenderers.get(e)}getHeaderRenderer(e){return this.headerRenderers.get(e)}getCellEditor(e){return this.cellEditors.get(e)}getPluginStyles(){return this.plugins.filter(e=>e.styles).map(e=>({name:e.name,styles:e.styles}))}processRows(e){if(!this._hasProcessRows)return e;let t=e;for(const o of this.#V("processRows")){const e=o.processRows(t);e!==t&&(t=e)}return t}processColumns(e){let t=[...e];for(const o of this.#V("processColumns"))t=o.processColumns(t);return t}beforeRender(){for(const e of this.plugins)e.beforeRender?.()}afterRender(){for(const e of this.#V("afterRender"))e.afterRender()}afterCellRender(e){for(const t of this.#V("afterCellRender"))t.afterCellRender(e)}hasAfterCellRenderHook(){return this._hasAfterCellRender}afterRowRender(e){for(const t of this.#V("afterRowRender"))t.afterRowRender(e)}hasAfterRowRenderHook(){return this._hasAfterRowRender}#B(){this._hasAfterCellRender=this.plugins.some(e=>"function"==typeof e.afterCellRender),this._hasAfterRowRender=this.plugins.some(e=>"function"==typeof e.afterRowRender),this._hasProcessRows=this.plugins.some(e=>"function"==typeof e.processRows),this._hasRowStructurePlugins=this.plugins.some(e=>!0===e.constructor.manifest?.modifiesRowStructure),this.#$.clear()}#V(e){let t=this.#$.get(e);if(t)return t;t=this.plugins.filter(t=>e in t&&"function"==typeof t[e]);const o=t=>{const o=t.constructor.manifest?.hookPriority;if(!o)return 0;return o[e]??0};return t.some(e=>0!==o(e))&&t.sort((e,t)=>o(e)-o(t)),this.#$.set(e,t),t}onScrollRender(){for(const e of this.#V("onScrollRender"))e.onScrollRender()}getRowHeight(e,t){for(const o of this.plugins)if("function"==typeof o.getRowHeight){const i=o.getRowHeight(e,t);if(void 0!==i)return i}}hasRowHeightPlugin(){for(const e of this.plugins)if("function"==typeof e.getRowHeight)return!0;return!1}adjustVirtualStart(e,t,o){let i=e;for(const r of this.plugins)if("function"==typeof r.adjustVirtualStart){const n=r.adjustVirtualStart(e,t,o);n<i&&(i=n)}return i}renderRow(e,t,o){for(const i of this.plugins)if(i.renderRow?.(e,t,o))return!0;return!1}queryPlugins(e){const t=[],o=this.queryHandlers.get(e.type);if(o&&o.size>0){for(const i of o){const o=i.handleQuery?.(e);void 0!==o&&t.push(o)}return t}for(const i of this.plugins){const o=i.handleQuery?.(e);void 0!==o&&t.push(o)}return t}subscribe(e,t,o){let i=this.eventListeners.get(t);i||(i=new Map,this.eventListeners.set(t,i)),i.set(e,o)}unsubscribe(e,t){const o=this.eventListeners.get(t);o&&(o.delete(e),0===o.size&&this.eventListeners.delete(t))}unsubscribeAll(e){for(const[t,o]of this.eventListeners)o.delete(e),0===o.size&&this.eventListeners.delete(t)}emitPluginEvent(e,t){const o=this.eventListeners.get(e);if(o)for(const r of o.values())try{r(t)}catch(i){p("TBW024",`Error in plugin event handler for "${e}": ${i}`,this.grid.getAttribute("id")??void 0)}}onKeyDown(e){for(const t of this.#V("onKeyDown"))if(t.onKeyDown(e))return!0;return!1}onCellClick(e){for(const t of this.#V("onCellClick"))if(t.onCellClick(e))return!0;return!1}onRowClick(e){for(const t of this.#V("onRowClick"))if(t.onRowClick(e))return!0;return!1}onHeaderClick(e){for(const t of this.#V("onHeaderClick"))if(t.onHeaderClick(e))return!0;return!1}onScroll(e){for(const t of this.#V("onScroll"))t.onScroll(e)}onCellMouseDown(e){for(const t of this.#V("onCellMouseDown"))if(t.onCellMouseDown(e))return!0;return!1}onCellMouseMove(e){for(const t of this.#V("onCellMouseMove"))if(t.onCellMouseMove(e))return!0;return!1}onCellMouseUp(e){for(const t of this.#V("onCellMouseUp"))if(t.onCellMouseUp(e))return!0;return!1}getHorizontalScrollOffsets(e,t){let o=0,i=0,r=!1;for(const n of this.plugins){const s=n.getHorizontalScrollOffsets?.(e,t);s&&(o+=s.left,i+=s.right,s.skipScroll&&(r=!0))}return{left:o,right:i,skipScroll:r}}getToolPanels(){const e=[];for(const t of this.plugins){const o=t.getToolPanel?.();o&&e.push({plugin:t,panel:o})}return e.sort((e,t)=>(e.panel.order??0)-(t.panel.order??0))}getHeaderContents(){const e=[];for(const t of this.plugins){const o=t.getHeaderContent?.();o&&e.push({plugin:t,content:o})}return e.sort((e,t)=>(e.content.order??0)-(t.content.order??0))}}class Xt extends HTMLElement{static tagName="tbw-grid";static version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";static activeTag="tbw-grid";static#U=0;static adapters=[];static registerAdapter(e){this.adapters.push(e)}static getAdapters(){return this.adapters}static clearAdapters(){this.adapters=[]}static get observedAttributes(){return["rows","columns","grid-config","fit-mode","loading"]}get#G(){return this}#j=!1;#i;#r;#Y=[];get#w(){return this.#X?.effective??{}}#K=!1;#Z=!1;#Q={rows:!1,columns:!1,gridConfig:!1,fitMode:!1};#J;#ee=0;#te=null;#oe=!1;#ie=!1;#re=0;#ne;#se={startY:null,startX:null,lastY:null,lastX:null,lastTime:null,velocityY:0,velocityX:0,momentumRaf:0,locked:!1,activePointerId:null};#le;#ae;#de;#ce;#he={scrollTop:0,scrollLeft:0,scrollHeight:0,scrollWidth:0,clientHeight:0,clientWidth:0};#ue;#ge;#fe;#pe;#we;#be;get _pluginManager(){return this.#ue}#me=!1;#ve;#Ce;#_;#X;#ye=function(){return{toolPanels:new Map,headerContents:new Map,toolbarContents:new Map,hasToolButtonsContainer:!1,lightDomHeaderContent:[],lightDomTitle:null,lightDomToolPanelIds:new Set,adapterBoundToolPanelIds:new Set,lightDomToolbarContentIds:new Set,apiToolPanelIds:new Set,apiHeaderContentIds:new Set,isPanelOpen:!1,expandedSections:new Set,headerContentCleanups:new Map,panelCleanups:new Map,toolbarContentCleanups:new Map,lightDomContentMoved:!1}}();#_e;#Re;#Se;#Ee=!1;#xe=new Set;#Ae=new Map;#Te;#Pe={};#He=new Map;#Me=!1;_rows=[];#Le=[];get _columns(){return this.#w.columns??[]}set _columns(e){this.#w.columns=e,this.#ke=void 0}#ke;get _visibleColumns(){return this.#ke??=this._columns.filter(e=>!e.hidden)}_invalidateVisibleColumnsCache(){this.#ke=void 0}_headerRowEl;_bodyEl;_rowPool=[];_resizeController;get _virtualization(){return this.#pe.state}set _virtualization(e){Object.assign(this.#pe.state,e)}_focusRow=0;_focusCol=0;_restoreFocusAfterRender=!1;_sortState=null;_gridTemplate="";__rowRenderEpoch=0;__didInitialAutoSize=!1;get __lightDomColumnsCache(){return this.#X?.lightDomColumnsCache}set __lightDomColumnsCache(e){this.#X&&(this.#X.lightDomColumnsCache=e)}get __originalColumnNodes(){return this.#X?.originalColumnNodes}set __originalColumnNodes(e){this.#X&&(this.#X.originalColumnNodes=e)}__originalOrder=[];__frameworkAdapter;__rowsBodyEl=null;get rows(){return this._rows}set rows(e){const t=Array.isArray(e)?e:[],o=this.#Y;this.#Y=t,o!==t&&this.#Oe("rows")}get sourceRows(){return this.#Y}set sourceRows(e){this.#Y=Array.isArray(e)?e:[]}get columns(){return[...this._columns]}set columns(e){const t=this.#X?.getColumns();this.#X?.setColumns(e),t!==e&&this.#Oe("columns")}get gridConfig(){return this.#w}set gridConfig(e){e&&this.__frameworkAdapter?.processConfig&&(e=this.__frameworkAdapter.processConfig(e));const t=this.#X?.getGridConfig();this.#X?.setGridConfig(e),t!==e&&(this.#X.clearLightDomCache(),this.#Oe("gridConfig"))}get fitMode(){return this.#w.fitMode??"stretch"}set fitMode(e){const t=this.#X?.getFitMode();this.#X?.setFitMode(e),t!==e&&this.#Oe("fitMode")}get loading(){return this.#Ee}set loading(e){const t=this.#Ee;this.#Ee=e,t!==e&&(e?(this.setAttribute("loading",""),this.setAttribute("aria-busy","true")):(this.removeAttribute("loading"),this.removeAttribute("aria-busy")),this.#De(),this.#Ie())}setRowLoading(e,t){const o=this.#xe.has(e);t?this.#xe.add(e):this.#xe.delete(e),o!==t&&this.#ze(e,t)}setCellLoading(e,t,o){let i=this.#Ae.get(e);const r=i?.has(t)??!1;o?(i||(i=new Set,this.#Ae.set(e,i)),i.add(t)):(i?.delete(t),0===i?.size&&this.#Ae.delete(e)),r!==o&&this.#Ne(e,t,o)}isRowLoading(e){return this.#xe.has(e)}isCellLoading(e,t){return this.#Ae.get(e)?.has(t)??!1}clearAllLoading(){this.loading=!1;for(const e of this.#xe)this.#ze(e,!1);this.#xe.clear();for(const[e,t]of this.#Ae)for(const o of t)this.#Ne(e,o,!1);this.#Ae.clear()}get effectiveConfig(){return this.#w}get disconnectSignal(){return this.#le||(this.#le=new AbortController),this.#le.signal}constructor(){super(),this.#qe(),this.#i=new Promise(e=>this.#r=e),this.#pe=new jt(this),this.#we=new Xe(this),this.#be=new lt(this),this.#J=new ae(this),this.#J.setInitialReadyResolver(()=>this.#r?.()),this.#_e=function(e,t){let o=!1;const i={get isInitialized(){return o},setInitialized(e){o=e},get isPanelOpen(){return e.isPanelOpen},get expandedSections(){return[...e.expandedSections]},openToolPanel(o){if(0===e.toolPanels.size)return void f("TBW071","No tool panels registered",t.id);let r;if(void 0!==o&&(e.toolPanels.has(o)?r=o:f(h,`Tool panel "${o}" not found`,t.id)),e.isPanelOpen&&r&&e.expandedSections.has(r))return;if(e.isPanelOpen&&r&&!e.expandedSections.has(r))return void i.toggleToolPanelSection(r);if(e.isPanelOpen)return;if(e.isPanelOpen=!0,0===e.expandedSections.size&&e.toolPanels.size>0)if(r)e.expandedSections.add(r);else{const o=t.effectiveConfig?.shell?.toolPanel?.defaultOpen;if(o&&e.toolPanels.has(o))e.expandedSections.add(o);else{const t=[...e.toolPanels.values()].sort((e,t)=>(e.order??100)-(t.order??100))[0];t&&e.expandedSections.add(t.id)}}else if(r&&!e.expandedSections.has(r)){for(const t of[...e.expandedSections])e.expandedSections.delete(t);e.expandedSections.add(r)}const n=t._renderRoot;Et(n,e),xt(n,e),St(n,e,t._accordionIcons),t._emit("tool-panel-open",{sections:i.expandedSections})},closeToolPanel(){if(!e.isPanelOpen)return;if(t.effectiveConfig?.shell?.toolPanel?.locked)return;for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.toolPanels.values())t.onClose?.();e.isPanelOpen=!1;const o=t._renderRoot;Et(o,e),xt(o,e),t._emit("tool-panel-close",{})},toggleToolPanel(){e.isPanelOpen?i.closeToolPanel():i.openToolPanel()},toggleToolPanelSection(o){const i=e.toolPanels.get(o);if(!i)return void f(h,`Tool panel section "${o}" not found`,t.id);if(1===e.toolPanels.size)return;const r=t._renderRoot,n=e.expandedSections.has(o);if(n){const t=e.panelCleanups.get(o);t&&(t(),e.panelCleanups.delete(o)),i.onClose?.(),e.expandedSections.delete(o),Ht(r,o,!1)}else{for(const[t,i]of e.toolPanels)if(t!==o&&e.expandedSections.has(t)){const o=e.panelCleanups.get(t);o&&(o(),e.panelCleanups.delete(t)),i.onClose?.(),e.expandedSections.delete(t),Ht(r,t,!1);const n=r.querySelector(`[data-section="${t}"] .tbw-accordion-content`);n&&(n.innerHTML="")}e.expandedSections.add(o),Ht(r,o,!0),function(e,t,o){const i=t.toolPanels.get(o);if(!i?.render)return;const r=e.querySelector(`[data-section="${o}"] .tbw-accordion-content`);if(!r)return;const n=i.render(r);n&&t.panelCleanups.set(o,n)}(r,e,o)}t._emit("tool-panel-section-toggle",{id:o,expanded:!n})},getToolPanels:()=>[...e.toolPanels.values()],registerToolPanel(i){e.toolPanels.has(i.id)?f("TBW073",`Tool panel "${i.id}" already registered`,t.id):(e.toolPanels.set(i.id,i),o&&t.refreshShellHeader?.())},unregisterToolPanel(i){if(e.expandedSections.has(i)){const t=e.panelCleanups.get(i);t&&(t(),e.panelCleanups.delete(i)),e.expandedSections.delete(i)}e.toolPanels.delete(i),o&&t.refreshShellHeader?.()},getHeaderContents:()=>[...e.headerContents.values()],registerHeaderContent(i){e.headerContents.has(i.id)?f("TBW074",`Header content "${i.id}" already registered`,t.id):(e.headerContents.set(i.id,i),o&&Rt(t._renderRoot,e))},unregisterHeaderContent(o){const i=e.headerContentCleanups.get(o);i&&(i(),e.headerContentCleanups.delete(o));const r=e.headerContents.get(o);r?.onDestroy?.(),e.headerContents.delete(o);const n=t._renderRoot.querySelector(`[data-header-content="${o}"]`);n?.remove()},getToolbarContents:()=>[...e.toolbarContents.values()].sort((e,t)=>(e.order??0)-(t.order??0)),registerToolbarContent(i){e.toolbarContents.has(i.id)?f("TBW075",`Toolbar content "${i.id}" already registered`,t.id):(e.toolbarContents.set(i.id,i),o&&t.refreshShellHeader?.())},unregisterToolbarContent(i){const r=e.toolbarContentCleanups.get(i);r&&(r(),e.toolbarContentCleanups.delete(i));const n=e.toolbarContents.get(i);n?.onDestroy&&n.onDestroy(),e.toolbarContents.delete(i),o&&t.refreshShellHeader?.()}};return i}(this.#ye,this),this.#X=new de(this)}async#qe(){await zt('@layer tbw-base, tbw-plugins, tbw-theme;\n\n@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-column-selection-bg: rgba(from var(--tbw-color-accent) r g b / 12%);--tbw-resize-handle-width: 2px;--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);--tbw-icon-expand: "▶";--tbw-icon-collapse: "▼";--tbw-icon-sort-asc: "▲";--tbw-icon-sort-desc: "▼";--tbw-icon-sort-none: "⇅";--tbw-icon-submenu-arrow: "▶";--tbw-icon-drag-handle: "⋮⋮";--tbw-icon-tool-panel: "☰";--tbw-icon-filter: "";--tbw-icon-filter-active: "";--tbw-icon-print: "🖨️";--tbw-icon-expand-mask: none;--tbw-icon-collapse-mask: none;--tbw-icon-sort-asc-mask: none;--tbw-icon-sort-desc-mask: none;--tbw-icon-sort-none-mask: none;--tbw-icon-submenu-arrow-mask: none;--tbw-icon-drag-handle-mask: none;--tbw-icon-tool-panel-mask: none;--tbw-icon-filter-mask: url("data:image/svg+xml,%3Csvg viewBox=\'0 0 16 16\' width=\'12\' height=\'12\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath fill=\'currentColor\' d=\'M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z\'/%3E%3C/svg%3E");--tbw-icon-filter-active-mask: var(--tbw-icon-filter-mask);--tbw-icon-print-mask: none}}\n@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}tbw-grid,tbw-grid *{box-sizing:border-box}tbw-grid .tbw-grid-root{position:relative;display:flex;flex-direction:column;height:100%}tbw-grid .tbw-grid-root.has-shell{display:flex;flex-direction:column;height:100%}tbw-grid .tbw-grid-root:has(.selected){-webkit-user-select:none;user-select:none}tbw-grid .rows-body-wrapper{flex:1;min-height:0;display:flex;flex-direction:row;width:100%;min-width:fit-content}tbw-grid .rows-body{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:visible}tbw-grid .rows-container{display:flex;flex-direction:row;flex:1;min-height:0;overflow:visible;position:relative}tbw-grid .rows-viewport{flex:1;min-width:0;position:relative;display:block;overflow:clip;touch-action:none}tbw-grid .rows-viewport .rows{position:absolute;top:0;left:0;min-width:100%;will-change:transform;z-index:var(--tbw-z-layer-rows, 1)}tbw-grid .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);touch-action:none}tbw-grid .faux-vscroll-spacer{width:1px}tbw-grid .tbw-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}tbw-grid[data-has-focus] .cell-focus,tbw-grid[data-has-focus] .row-focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}tbw-grid .sticky-left,tbw-grid .sticky-right{position:sticky;z-index:25}tbw-grid .sticky-left{box-shadow:1px 0 0 var(--tbw-color-border)}tbw-grid .sticky-right{box-shadow:-1px 0 0 var(--tbw-color-border)}}\n@layer tbw-base{tbw-grid [data-icon=expand]:empty:before{content:var(--tbw-icon-expand)}tbw-grid [data-icon=collapse]:empty:before{content:var(--tbw-icon-collapse)}tbw-grid [data-icon=sort-asc]:empty:before{content:var(--tbw-icon-sort-asc)}tbw-grid [data-icon=sort-desc]:empty:before{content:var(--tbw-icon-sort-desc)}tbw-grid [data-icon=sort-none]:empty:before{content:var(--tbw-icon-sort-none)}tbw-grid [data-icon=submenu-arrow]:empty:before{content:var(--tbw-icon-submenu-arrow)}tbw-grid [data-icon=drag-handle]:empty:before{content:var(--tbw-icon-drag-handle)}tbw-grid [data-icon=tool-panel]:empty:before{content:var(--tbw-icon-tool-panel)}tbw-grid [data-icon=print]:empty:before{content:var(--tbw-icon-print)}tbw-grid [data-icon=filter]:empty:before{content:var(--tbw-icon-filter)}tbw-grid [data-icon=filter-active]:empty:before{content:var(--tbw-icon-filter-active)}tbw-grid [data-icon]:empty:before{display:inline-block;vertical-align:middle;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}tbw-grid [data-icon=expand]:empty:before{-webkit-mask-image:var(--tbw-icon-expand-mask);mask-image:var(--tbw-icon-expand-mask)}tbw-grid [data-icon=collapse]:empty:before{-webkit-mask-image:var(--tbw-icon-collapse-mask);mask-image:var(--tbw-icon-collapse-mask)}tbw-grid [data-icon=sort-asc]:empty:before{-webkit-mask-image:var(--tbw-icon-sort-asc-mask);mask-image:var(--tbw-icon-sort-asc-mask)}tbw-grid [data-icon=sort-desc]:empty:before{-webkit-mask-image:var(--tbw-icon-sort-desc-mask);mask-image:var(--tbw-icon-sort-desc-mask)}tbw-grid [data-icon=sort-none]:empty:before{-webkit-mask-image:var(--tbw-icon-sort-none-mask);mask-image:var(--tbw-icon-sort-none-mask)}tbw-grid [data-icon=submenu-arrow]:empty:before{-webkit-mask-image:var(--tbw-icon-submenu-arrow-mask);mask-image:var(--tbw-icon-submenu-arrow-mask)}tbw-grid [data-icon=drag-handle]:empty:before{-webkit-mask-image:var(--tbw-icon-drag-handle-mask);mask-image:var(--tbw-icon-drag-handle-mask)}tbw-grid [data-icon=tool-panel]:empty:before{-webkit-mask-image:var(--tbw-icon-tool-panel-mask);mask-image:var(--tbw-icon-tool-panel-mask)}tbw-grid [data-icon=print]:empty:before{-webkit-mask-image:var(--tbw-icon-print-mask);mask-image:var(--tbw-icon-print-mask)}tbw-grid [data-icon=filter]:empty:before,tbw-grid [data-icon=filter-active]:empty:before{width:var(--tbw-icon-size, 1em);height:var(--tbw-icon-size, 1em);background:currentColor}tbw-grid [data-icon=filter]:empty:before{-webkit-mask-image:var(--tbw-icon-filter-mask);mask-image:var(--tbw-icon-filter-mask)}tbw-grid [data-icon=filter-active]:empty:before{-webkit-mask-image:var(--tbw-icon-filter-active-mask);mask-image:var(--tbw-icon-filter-active-mask)}.tbw-context-menu [data-icon]:empty:before{display:inline-block;width:1em;height:1em;vertical-align:middle}.tbw-context-menu [data-icon=submenu-arrow]:empty:before{content:var(--tbw-icon-submenu-arrow, "▶")}}\n@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}tbw-grid .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)}tbw-grid .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))}tbw-grid .header-group-cell:not(:last-child){border-right:2px solid var(--tbw-color-border)}tbw-grid .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)}tbw-grid .header-row>.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}tbw-grid .header-row>.cell>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:inherit}tbw-grid .header-row>.cell>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}tbw-grid .header-row>.cell:hover>span[part~=sort-indicator]{display:inline-flex;visibility:visible}tbw-grid .header-row>.cell[aria-sort=ascending]>span[part~=sort-indicator],tbw-grid .header-row>.cell[aria-sort=descending]>span[part~=sort-indicator]{display:inline-flex;visibility:visible;opacity:1;color:var(--tbw-sort-indicator-active-color)}tbw-grid .header-row>.cell:last-child{border-right:0}tbw-grid .header-row>.cell:last-child .resize-handle{right:0;width:calc(var(--tbw-resize-hit-area, 18px) / 2)}tbw-grid .header-row>.cell.grouped.group-end:not(:last-child){border-right:2px solid var(--tbw-color-border)}tbw-grid .header-row>.cell.resizable{position:relative}tbw-grid .header-row>.cell.sticky-left,tbw-grid .header-row>.cell.sticky-right{background:var(--tbw-color-header-bg);z-index:35}tbw-grid .header-group-row>.header-group-cell.sticky-left,tbw-grid .header-group-row>.header-group-cell.sticky-right{background:var(--tbw-color-header-bg);z-index:35}tbw-grid .sortable{cursor:pointer;-webkit-user-select:none;user-select:none}tbw-grid .resize-handle{position:absolute;top:0;right:calc(var(--tbw-resize-hit-area, 18px) / -2);width:var(--tbw-resize-hit-area, 18px);height:100%;cursor:e-resize;-webkit-user-select:none;user-select:none;touch-action:none;z-index:20;background:transparent}tbw-grid .resize-handle:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:var(--tbw-resize-handle-width);height:100%;background:var(--tbw-resize-handle-color);border-radius:var(--tbw-resize-handle-border-radius);transition:background .12s ease}tbw-grid .resize-handle:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);width:var(--tbw-resize-handle-width);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}tbw-grid .resize-handle:hover:before{background:var(--tbw-resize-handle-color-hover)}tbw-grid .resize-handle:hover:after{height:100vh;opacity:var(--tbw-resize-indicator-opacity, .6);transition:opacity .12s ease,height 0s}}\n@layer tbw-base{tbw-grid .data-grid-row{display:grid;grid-template-columns:var(--tbw-column-template);contain:layout style}tbw-grid .data-grid-row:nth-child(2n){background:var(--tbw-color-row-alt)}@media(hover:hover){tbw-grid .data-grid-row:hover{background:var(--tbw-color-row-hover)}}tbw-grid .data-grid-row>.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}tbw-grid .data-grid-row>.cell>*{overflow:hidden;text-overflow:ellipsis;white-space:inherit;min-width:0}tbw-grid .data-grid-row>.cell:last-child{border-right:0}tbw-grid .data-grid-row>.cell[data-type=boolean]{text-align:center}tbw-grid .data-grid-row>.cell[data-type=boolean] input[type=checkbox]{margin:0;width:var(--tbw-checkbox-size);height:var(--tbw-checkbox-size);vertical-align:middle}tbw-grid .data-grid-row>.cell.selected:focus-visible,tbw-grid .data-grid-row>.cell:focus-visible:not(.cell-focus){outline:none}tbw-grid .data-grid-row>.cell.sticky-left,tbw-grid .data-grid-row>.cell.sticky-right{background:var(--tbw-color-panel-bg)}tbw-grid .selecting .data-grid-row>.cell{-webkit-user-select:none;user-select:none}}\n@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-grid .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-grid .tbw-shell-content{flex:1;display:flex;align-items:center;gap:12px;min-width:0;overflow:hidden}tbw-grid .tbw-shell-toolbar{display:flex;align-items:center;gap:var(--tbw-toolbar-button-gap);flex-shrink:0}tbw-grid .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)}tbw-grid .tbw-toolbar-btn:hover{background:var(--tbw-color-row-hover)}tbw-grid .tbw-toolbar-btn:focus-visible{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}tbw-grid .tbw-toolbar-btn.active{background:var(--tbw-focus-background);border-color:var(--tbw-color-accent)}tbw-grid .tbw-toolbar-btn:disabled{opacity:.5;cursor:not-allowed}tbw-grid .tbw-toolbar-separator{width:1px;height:20px;background:var(--tbw-color-border);margin:0 4px}tbw-grid .tbw-shell-body{position:relative;display:flex;flex:1;min-height:0;overflow:visible}tbw-grid .tbw-grid-content{flex:1;min-width:0;min-height:0;display:flex;flex-direction:row;overflow:hidden;touch-action:none}tbw-grid .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}}\n@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:var(--tbw-z-layer-toolpanel, 31);box-shadow:-2px 0 8px var(--tbw-color-shadow)}tbw-grid .tbw-tool-panel[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)}tbw-grid .tbw-tool-panel.open{width:var(--tbw-tool-panel-width)}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel{position:relative;inset:auto;flex-shrink:0;box-shadow:none;z-index:auto;border-left:none;border-right:none}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel.open{border-left:1px solid var(--tbw-tool-panel-border)}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel[data-position=left].open{border-left:none;border-right:1px solid var(--tbw-tool-panel-border)}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel-resize{display:none}tbw-grid .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)}tbw-grid .tbw-tool-panel-resize[data-handle-position=left]{left:0}tbw-grid .tbw-tool-panel-resize[data-handle-position=right]{right:0}tbw-grid .tbw-tool-panel-resize:hover,tbw-grid .tbw-tool-panel-resize.resizing{background:var(--tbw-color-accent)}tbw-grid .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-grid .tbw-tool-panel-title{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}tbw-grid .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}tbw-grid .tbw-tool-panel-close:hover{background:var(--tbw-color-row-hover);color:var(--tbw-color-fg)}tbw-grid .tbw-tool-panel-content{flex:1;overflow:auto}tbw-grid .tbw-accordion{display:flex;flex-direction:column;gap:0}tbw-grid .tbw-accordion-section{border-bottom:1px solid var(--tbw-tool-panel-border)}tbw-grid .tbw-accordion-section:last-child{border-bottom:none}tbw-grid .tbw-accordion-section.single .tbw-accordion-header{cursor:default}tbw-grid .tbw-accordion-section.single .tbw-accordion-header:hover{background:transparent}tbw-grid .tbw-accordion-section.expanded .tbw-accordion-chevron{transform:rotate(90deg)}tbw-grid .tbw-accordion-section.expanded .tbw-accordion-content{display:block}tbw-grid .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;-webkit-user-select:none;user-select:none}tbw-grid .tbw-accordion-header:hover{background:var(--tbw-color-row-hover)}tbw-grid .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-grid .tbw-accordion-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:14px;flex-shrink:0}tbw-grid .tbw-accordion-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}tbw-grid .tbw-accordion-content{display:none}}\n@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}.cell.tbw-cell-loading: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}.cell.tbw-cell-loading: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}}\n@layer tbw-base{.tbw-empty-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:var(--tbw-spacing-md, 12px);text-align:center;background:light-dark(rgba(255,255,255,.6),rgba(0,0,0,.4));color:var(--tbw-color-text-secondary, var(--tbw-color-text));z-index:999;pointer-events:all;animation:tbw-fade-in .15s ease-out}.tbw-empty-message{font-family:var(--tbw-font-family, inherit);font-size:var(--tbw-font-size-md, 14px);line-height:1.4;max-width:480px;-webkit-user-select:text;user-select:text}}\n@layer tbw-base{tbw-grid .tbw-expanding{animation:tbw-expand var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}tbw-grid .tbw-collapsing{animation:tbw-collapse var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}tbw-grid[data-animation-mode=off]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms}tbw-grid[data-animation-mode=off] .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}}\n@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}tbw-grid .cell:focus,tbw-grid .cell.active-cell{outline:2px solid Highlight!important;outline-offset:-2px}tbw-grid .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}tbw-grid[data-animation-mode=reduced-motion] .data-grid-row[data-animating]{animation:none}}}\n')}getPlugin(e){return this.#ue?.getPlugin(e)}getPluginByName(e){return this.#ue?.getPluginByName(e)}requestRender(){this.#J.requestPhase(le.ROWS,"plugin:requestRender")}requestColumnsRender(){this.#J.requestPhase(le.COLUMNS,"plugin:requestColumnsRender")}requestRenderWithFocus(){this._restoreFocusAfterRender=!0,this.#J.requestPhase(le.ROWS,"plugin:requestRenderWithFocus")}updateTemplate(){y(this)}requestAfterRender(){this.#J.requestPhase(le.STYLE,"plugin:requestAfterRender")}requestVirtualRefresh(){this._virtualization.start=-1,this.refreshVirtualWindow(!1)}#Fe(){this.#ue=new Yt(this);const e=this.#w?.plugins,t=Array.isArray(e)?e:[],o=this.#w?.features;let i,r=[];if(o&&Ye&&(r=Ye(o)),0===r.length)i=t;else if(0===t.length)i=r;else{const e=new Set(t.map(e=>e.name));i=[...r.filter(t=>!e.has(t.name)),...t]}this.#ue.attachAll(i)}#$e(){!function(e){let t=!1;for(const{name:o,styles:i}of e)kt.has(o)||(kt.set(o,Dt(i)),t=!0);t&&It()}(this.#ue?.getPluginStyles()??[])}#We(){const e=this.#w?.plugins,t=Array.isArray(e)?e:[],o=this.#w?.features??void 0,i=o!==this.#fe;if((this.#ge===t||void 0!==this.#ge&&this.#ge.length===t.length&&this.#ge.every((e,o)=>e===t[o]))&&!i)return void(this.#ge=t);this.#ue&&this.#ue.detachAll();for(const n of this.#ye.toolPanels.keys()){const e=this.#ye.lightDomToolPanelIds.has(n),t=this.#ye.apiToolPanelIds.has(n);if(!e&&!t){const e=this.#ye.panelCleanups.get(n);e&&(e(),this.#ye.panelCleanups.delete(n)),this.#ye.toolPanels.delete(n)}}for(const n of this.#ye.headerContents.keys()){if(this.#ye.apiHeaderContentIds.has(n))continue;const e=this.#ye.headerContentCleanups.get(n);e&&(e(),this.#ye.headerContentCleanups.delete(n)),this.#ye.headerContents.delete(n)}this.#Fe(),this.#$e(),this.#ge=t,this.#fe=o,this.#Be(),this.#Ve();const r=this.#oe;if(this.#oe=this.#ue?.getAll().some(e=>e.onScroll)??!1,!r&&this.#oe){const e=this.#G.querySelector(".tbw-grid-content")??this.#G.querySelector(".tbw-grid-root");this.#Ue(e)}}#Ge(){this.#ue?.detachAll()}#Ve(){if(!this.#ue)return;const e=this.#ue.getToolPanels();for(const{panel:o}of e)this.#ye.toolPanels.has(o.id)||this.#ye.toolPanels.set(o.id,o);const t=this.#ue.getHeaderContents();for(const{content:o}of t)this.#ye.headerContents.has(o.id)||this.#ye.headerContents.set(o.id,o)}#je(){const e=Xt.getAdapters();if(0===e.length&&!this.__frameworkAdapter)return;const t=this.__frameworkAdapter;return o=>{if(t?.createToolPanelRenderer){const e=t.createToolPanelRenderer(o);if(e)return e}for(const t of e)if(t.createToolPanelRenderer){const e=t.createToolPanelRenderer(o);if(e)return e}}}connectedCallback(){this.hasAttribute("tabindex")||(this.tabIndex=0),this.hasAttribute("version")||this.setAttribute("version",Xt.version),this.hasAttribute("data-tbw-grid")||this.setAttribute("data-tbw-grid",""),this.id||(this.id="tbw-grid-"+ ++Xt.#U),this._rows=Array.isArray(this.#Y)?[...this.#Y]:[],this.#le&&(this.#le.abort(),this.#me=!1),this.#le=new AbortController,this.#ce&&(Ze(this.#ce),this.#ce=void 0),this.#Ye(),this.#X.parseLightDomColumns(this),this.#X.merge(),this.#Fe();const e=this.#w?.plugins;var t,o;this.#ge=Array.isArray(e)?e:[],this.#fe=this.#w?.features??void 0,this.#Ve(),this.#j||(this.#Xe(),this.#$e(),this.#j=!0),this.#Ke(),this.#ce=(t=()=>{this.#Ze()},o={timeout:100},Ke?requestIdleCallback(t,o):window.setTimeout(()=>{const e=Date.now();t({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-e))})},1))}disconnectedCallback(){this.#ce&&(Ze(this.#ce),this.#ce=void 0),this.#re&&(clearTimeout(this.#re),this.#re=0),this.#Ge(),function(e){for(const t of e.headerContentCleanups.values())t();e.headerContentCleanups.clear();for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.toolbarContentCleanups.values())t();e.toolbarContentCleanups.clear();for(const t of e.toolbarContents.values())t.onDestroy?.();if(e.isPanelOpen)for(const t of e.expandedSections){const o=e.toolPanels.get(t);o?.onClose?.()}e.isPanelOpen=!1,e.expandedSections.clear(),e.toolPanels.clear(),e.headerContents.clear(),e.toolbarContents.clear(),e.lightDomHeaderContent=[],e.lightDomToolPanelIds.clear(),e.adapterBoundToolPanelIds.clear(),e.lightDomToolbarContentIds.clear(),e.lightDomContentMoved=!1}(this.#ye),this.#_e.setInitialized(!1),this.#Re?.(),this.#Re=void 0,this.#Se?.(),this.#Se=void 0,qt(this.#se),this.#le&&(this.#le.abort(),this.#le=void 0),this.#ve?.abort(),this.#ve=void 0,this.#me=!1,this._resizeController&&this._resizeController.dispose(),this.#ae&&(this.#ae.disconnect(),this.#ae=void 0),this.#de&&(this.#de.disconnect(),this.#de=void 0,this.#Qe=!1,this.#Je=0),Te(this),this.#et.clear(),this._virtualization.heightCache?.byKey.clear(),this.#ge=void 0,this.#fe=void 0;for(let e=0;e<this._rowPool.length;e++)this._rowPool[e].remove();this._rowPool.length=0,this.__rowsBodyEl=null,this.#K=!1}attributeChangedCallback(e,t,o){if("loading"===e){const e=null!==o&&"false"!==o;return void(this.loading!==e&&(this.loading=e))}if(t!==o&&o&&"null"!==o&&"undefined"!==o)if("rows"===e||"columns"===e||"grid-config"===e)try{const t=JSON.parse(o);"rows"===e?this.rows=t:"columns"===e?this.columns=t:"grid-config"===e&&(this.gridConfig=t)}catch{f("TBW130",`Invalid JSON for '${e}' attribute: ${o}`,this.id)}else"fit-mode"===e&&(this.fitMode=o)}#Ke(){const e=this.#G.querySelector(".tbw-grid-content")??this.#G.querySelector(".tbw-grid-root");if(this._headerRowEl=e?.querySelector(".header-row"),this._virtualization.totalHeightEl=e?.querySelector(".faux-vscroll-spacer"),this._virtualization.viewportEl=e?.querySelector(".rows-viewport"),this._bodyEl=e?.querySelector(".rows"),this.__rowsBodyEl=e?.querySelector(".rows-body"),this.#_e.isInitialized){Rt(this.#G,this.#ye),_t(this.#G,this.#w?.shell,this.#ye);const e=this.#w?.shell?.toolPanel,t=e?.defaultOpen;t&&this.#ye.toolPanels.has(t)&&this.#ye.expandedSections.add(t);const o=!0===e?.locked||"open"===e?.initialState||void 0===e?.initialState&&void 0!==t&&this.#ye.toolPanels.has(t);!this.#ye.isPanelOpen&&this.#ye.toolPanels.size>0&&o&&this.openToolPanel(),this.#ye.isPanelOpen&&(xt(this.#G,this.#ye),St(this.#G,this.#ye,(this.#w,this.#w)),Et(this.#G,this.#ye))}if(this.setAttribute("data-upgraded",""),this.#K=!0,this._resizeController=Je(this),this.#tt(),this.#Ue(e),this.#me)return;this.#me=!0;const t=this.disconnectSignal;je(this,this,this.#G,t),this.#Be(),queueMicrotask(()=>this.#ot()),this.#J.requestPhase(le.FULL,"afterConnect")}#Be(){const e=this.#w.rowHeight,t=this.#ue.hasRowHeightPlugin();"function"==typeof e||t?this._virtualization.variableHeights||(this._virtualization.variableHeights=!0,this._virtualization.rowHeight="number"==typeof e&&e>0?e:this._virtualization.rowHeight||28,this.#pe.initializePositionCache(),"function"!=typeof e&&(this.#ie=!0)):!t&&"function"!=typeof e&&this._virtualization.variableHeights?(this._virtualization.variableHeights=!1,this._virtualization.positionCache=null):"number"==typeof e&&e>0?(this._virtualization.rowHeight=e,this._virtualization.variableHeights=!1):requestAnimationFrame(()=>this.#it())}#it(){if(this.#ue.hasRowHeightPlugin())return;const e=this.#w.rowHeight;if("number"==typeof e&&e>0)return;const t=this._bodyEl?.querySelector(".data-grid-row");if(!t)return;if(t.style.getPropertyValue("--tbw-row-height"))return;const o=this.#rt(),i=t.querySelectorAll(".cell");let r=0;i.forEach(e=>{const t=e.offsetHeight;t>r&&(r=t)});const n=t.getBoundingClientRect(),s=Math.max(n.height,r),l=this._virtualization.rowHeight,a=this.#Je,d=o>0&&a>0&&Math.abs(o-a)>1,c=o>0&&0===a,h=s>0&&s-l>1;if(o>0&&(this.#Je=o),d||c||h){const e=d||c?Math.max(o,s):s;Math.abs(e-l)>1&&(this._virtualization.rowHeight=e,this.#J.requestPhase(le.VIRTUALIZATION,"measureRowHeight"))}}#rt(){const e=getComputedStyle(this).getPropertyValue("--tbw-row-height").trim();if(!e)return 0;if(e.endsWith("px"))return parseFloat(e)||0;const t=this._bodyEl?.querySelector('.data-grid-row:not([style*="--tbw-row-height"]) > .cell');if(!t)return 0;const o=parseFloat(getComputedStyle(t).minHeight);return o>0?o:0}#nt(){const e=this._bodyEl?.querySelector(".data-grid-row");if(!e)return;const t=e.querySelectorAll(".cell");let o=0;t.forEach(e=>{const t=e.offsetHeight;t>o&&(o=t)});const i=e.getBoundingClientRect(),r=Math.max(i.height,o);if(r>0){if(Math.abs(r-this._virtualization.rowHeight)>1&&(this._virtualization.rowHeight=r),this.#pe.initializePositionCache(),this._virtualization.totalHeightEl){const e=this.#pe.calculateTotalSpacerHeight(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`}}}#Ue(e){this.#ve?.abort(),this.#ve=new AbortController;const t=this.#ve.signal,o=e?.querySelector(".faux-vscroll"),i=e?.querySelector(".rows");if(this._virtualization.container=o??this,this.#oe=this.#ue?.getAll().some(e=>e.onScroll)??!1,o&&i){o.addEventListener("scroll",()=>{if(!this._virtualization.enabled&&!this.#oe)return;const e=o.scrollTop,t=qe(e,this._virtualization.scrollMapping),r=this._virtualization.rowHeight;if(this._rows.length<=this._virtualization.bypassThreshold)i.style.transform=`translateY(${-e}px)`;else{const e=this._virtualization.positionCache;let o,n;if(this._virtualization.variableHeights&&e&&e.length>0){o=De(e,t),-1===o&&(o=0);const i=o-o%2;n=e[i]?.offset??i*r}else{o=Math.floor(t/r);n=(o-o%2)*r}const s=-(t-n);i.style.transform=`translateY(${s}px)`}this.#te=e,this.#ee||(this.#ee=requestAnimationFrame(()=>{this.#ee=0,null!==this.#te&&(this.#st(this.#te),this.#te=null)}))},{passive:!0,signal:t});const e=this.#G.querySelector(".tbw-scroll-area");this.#Ce=e,this._virtualization.scrollAreaEl=e,e&&this.#oe&&e.addEventListener("scroll",()=>{const t=this.#he;t.scrollTop=o.scrollTop,t.scrollLeft=e.scrollLeft,t.scrollHeight=o.scrollHeight,t.scrollWidth=e.scrollWidth,t.clientHeight=o.clientHeight,t.clientWidth=e.clientWidth,this.#ue?.onScroll(t)},{passive:!0,signal:t});const r=this.#G.querySelector(".tbw-grid-content"),n=this.#Ce;r&&(r.addEventListener("wheel",e=>{try{if(r.querySelector("select:open"))return}catch{}const t=e.shiftKey||Math.abs(e.deltaX)>Math.abs(e.deltaY);if(t&&n){const t=e.shiftKey?e.deltaY:e.deltaX,{scrollLeft:o,scrollWidth:i,clientWidth:r}=n;(t>0&&o<i-r||t<0&&o>0)&&(e.preventDefault(),n.scrollLeft+=t)}else if(!t){const{scrollTop:t,scrollHeight:i,clientHeight:r}=o;(e.deltaY>0&&t<i-r||e.deltaY<0&&t>0)&&(e.preventDefault(),o.scrollTop+=e.deltaY)}},{passive:!1,signal:t}),$t(r,this.#se,{fauxScrollbar:o,scrollArea:n},t))}var r,n,s;this._bodyEl&&(r=this,n=this._bodyEl,s=t,n.addEventListener("mousedown",e=>{const t=e.target.closest(".cell[data-col]");if(!t)return;if(t.classList.contains(_.EDITING))return;const o=e.target;o.draggable||o.closest('[draggable="true"]')||e.preventDefault(),Ue(r,t)},{signal:s}),n.addEventListener("click",e=>{const t=e.target.closest(".data-grid-row");if(t&&Me(r,e,t),!document.activeElement?.closest(`.cell.${_.EDITING}`)){const t=e.target.closest("tbw-grid, [data-tbw-grid]");t&&t.focus({preventScroll:!0})}},{signal:s}),n.addEventListener("dblclick",e=>{const t=e.target.closest(".data-grid-row");t&&Me(r,e,t)},{signal:s})),this.#ae?.disconnect(),this._virtualization.viewportEl&&(this.#ae=new ResizeObserver(()=>{this.#lt(),this.#J.requestPhase(le.VIRTUALIZATION,"resize-observer")}),this.#ae.observe(this._virtualization.viewportEl)),this.#G.addEventListener("focusin",()=>{this.dataset.hasFocus=""},{signal:t}),this.#G.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&(this.#G.contains(t)||this.#we.isInExternalFocusContainer(t))||delete this.dataset.hasFocus},{signal:t})}#Qe=!1;#Je=0;#at(){if(this.#Qe)return;const e=this._bodyEl?.querySelector(".data-grid-row");e&&(this.#Qe=!0,this.#de?.disconnect(),this.#de=new ResizeObserver(()=>{this.#it()}),this.#de.observe(e))}addEventListener(e,t,o){super.addEventListener(e,t,o)}removeEventListener(e,t,o){super.removeEventListener(e,t,o)}on(e,t){const o=e=>{t(e.detail,e)};return this.addEventListener(e,o),()=>this.removeEventListener(e,o)}#dt(e,t){this.#K&&this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}_emitDataChange(){this.#dt("data-change",{rowCount:this._rows.length,sourceRowCount:this.#Y.length}),function(e,t,o){if(o===t.lastAnnouncedSourceCount)return;const i=t.lastAnnouncedSourceCount;t.lastAnnouncedSourceCount=o,0===o&&i<0||n(e,s(e,"dataLoaded",o))}(this,this.#ct,this.#Y.length)}#ot(){const e=this._bodyEl?.querySelectorAll(".data-grid-row");e?.forEach((e,t)=>{const o=t===this._focusRow;e.setAttribute("aria-selected",String(o)),e.querySelectorAll(".cell").forEach((e,t)=>{e.setAttribute("aria-selected",String(o&&t===this._focusCol))})})}#Oe(e){this.#Q[e]=!0,this.#Z||(this.#Z=!0,queueMicrotask(()=>this.#ht()))}#ht(){if(!this.#Z||!this.#K)return void(this.#Z=!1);const e=this.#Q;if(this.#Z=!1,this.#Q={rows:!1,columns:!1,gridConfig:!1,fitMode:!1},e.gridConfig)return this.#ut(),void(e.rows&&this.#gt());e.columns&&this.#ft(),e.rows&&this.#gt(),e.fitMode&&this.#pt()}#gt(){this._rows=Array.isArray(this.#Y)?[...this.#Y]:[],this.#Me=!0,this.#J.requestPhase(le.ROWS,"applyRowsUpdate")}#wt(){this.#Me&&this._rebuildRowIdMap()}_rebuildRowIdMap(){this.#Me=!1,this.#He.clear();const e=this.#w.getRowId;for(let t=0;t<this._rows.length;t++){const o=nt(this._rows[t],e);void 0!==o&&this.#He.set(o,{row:this._rows[t],index:t})}}#ft(){Te(this),this.#X.merge(),this.#tt()}#pt(){this.#X.merge();if("fixed"===this.#w.fitMode)this.__didInitialAutoSize=!1,m(this);else{for(let e=0;e<this._columns.length;e++){const t=this._columns[e];!t.__userResized&&t.__autoSized&&delete t.width}y(this)}}#ut(){vt(this,this.#ye),Ct(this,this.#ye);const e=!!this.#G.querySelector(".has-shell"),t=!!this.#G.querySelector(".tbw-tool-panel"),o=this.#G.querySelectorAll(".tbw-accordion-section").length,i=this.#G.querySelector(".tbw-tool-panel")?.dataset.position??"right";this.#X.parseLightDomColumns(this),this.#X.merge(),this.#We(),this.#Be(),yt(this,this.#ye,this.#je()),this.#X.markSourcesChanged(),this.#X.merge();const r=this.#X.initialColumnState;if(r){this.#X.initialColumnState=void 0,this.#_=void 0;const e=this.#ue?.getAll()??[];this.#X.applyState(r,e)}const n=mt(this.#w?.shell),s=(this.#w?.shell?.toolPanels?.length??0)>0,l=this.#w?.shell?.toolPanels?.length??0,a=this.#w?.shell?.toolPanel?.position??"right";if(e!==n||!t&&s||t&&l!==o||t&&i!==a)return At(this.#ye),this.#Xe(),this.#$e(),this.#Ke(),void this._rebuildRowIdMap();e&&this.#bt(),this.#ye.isPanelOpen&&St(this.#G,this.#ye,(this.#w,this.#w)),this._rebuildRowIdMap(),this.#J.requestPhase(le.COLUMNS,"applyGridConfigUpdate")}#bt(){const e=this.#G.querySelector(".tbw-shell-header");if(!e)return;const t=this.#w.shell?.header?.title??this.#ye.lightDomTitle;let o=e.querySelector(".tbw-shell-title");t?(o||(o=document.createElement("h2"),o.className="tbw-shell-title",o.setAttribute("part","shell-title"),e.insertBefore(o,e.firstChild)),o.textContent=t):o&&o.remove()}#mt(){if(this.__rowRenderEpoch++,this.#ue){const e=this.#Le.length>0?this.#Le:this._columns,t=e.filter(e=>!e.hidden),o=e.filter(e=>e.hidden),i=this.#ue.processColumns([...t]);if(i!==t){const r=new Set(i.map(e=>e.field));!t.some(e=>r.has(e.field))&&i.length>0?this._columns=[...i,...o]:this._columns=this.#vt(e,i,o)}else this._columns=[...e]}}#vt(e,t,o){if(0===o.length)return t;const i=new Map;for(const l of t)i.set(l.field,l);const r=new Set(e.map(e=>e.field)),n=[];for(const l of t)r.has(l.field)||n.push(l);const s=[];for(const l of e){const e=i.get(l.field);e?s.push(e):l.hidden&&s.push(l)}return s.push(...n),s}#Ct(){Te(this);const e=this.#Y;if(!Array.isArray(e))return this._rows=[],this._rebuildRowIdMap(),this._virtualization.variableHeights&&this.#pe.initializePositionCache(),void this._emitDataChange();if(!this._sortState&&this.#w.initialSort){const{field:e,direction:t}=this.#w.initialSort;this._columns.find(t=>t.field===e)&&(this._sortState={field:e,direction:"desc"===t?-1:1})}this._sortState&&(this.__originalOrder=this._rows);const t=function(e,t,o=!1){if(!e._sortState)return t;const i=e.effectiveConfig?.sortHandler??V;if(i===V)return o||(e.__originalOrder=t.slice()),Y(t,e._sortState.field,e._sortState.direction,e._columns),t;o||(e.__originalOrder=t);const r=i(t,e._sortState,e._columns);return r&&"function"==typeof r.then?t:r}(this,this._sortState?[...e]:e,!0),o=this.#ue?.processRows(t)??t;this._rows=o,this.#Me=!0,this._emitDataChange()}_renderVisibleRows(e,t,o=this.__rowRenderEpoch){if(this.#ne||(this.#ne=(e,t,o)=>this.#ue?.renderRow(e,t,o)??!1),function(e,t,o,i,r){const n=Math.max(0,o-t),s=e._bodyEl,l=e._visibleColumns,a=l.length;let d=e.__cachedHeaderRowCount;for(void 0===d&&(d=e.querySelector(".header-group-row")?2:1,e.__cachedHeaderRowCount=d);e._rowPool.length<n;){const t=Ae();e._rowPool.push(t)}if(e._rowPool.length>n){const t=e.__frameworkAdapter,o=t?.releaseCell;t?.beginBatch?.(e);try{for(let i=n;i<e._rowPool.length;i++){const r=e._rowPool[i];if(o){const e=r.children;for(let i=0;i<e.length;i++){const r=e[i];r.firstElementChild&&o.call(t,r)}}r.parentNode===s&&r.remove()}e._rowPool.length=n}finally{t?.endBatch?.(e)}}const c=r&&!1!==e.__hasRenderRowPlugins,h=e._hasAfterRowRenderHook?.()??!1,u=e._virtualization?.variableHeights&&"function"==typeof e.effectiveConfig?.rowHeight?e.effectiveConfig.rowHeight:null;for(let p=0;p<n;p++){const o=t+p,n=e._rows[o],w=e._rowPool[p];if(w.setAttribute("aria-rowindex",String(o+d+1)),c&&r(n,w,o)){w.__epoch=i,w.__rowDataRef=n,w.parentNode!==s&&s.appendChild(w);continue}const b=w.__epoch,m=w.__rowDataRef;let v=w.children.length;v>a&&w.lastElementChild?.classList.contains("tbw-row-loading-overlay")&&v--;const C=b===i&&v===a,y=m!==n,_=!!e._isGridEditMode;let R=!1;if(C&&y)for(let e=0;e<a;e++)if(l[e].externalView&&!w.querySelector(`.cell[data-col="${e}"] [data-external-view]`)){R=!0;break}if(!C||R){const t=_e(w),r=_&&!y||e._activeEditRows===o;t&&!r?(w.__isCustomRow&&(w.className="data-grid-row",w.setAttribute("role","row"),w.__isCustomRow=!1),Re(w),He(e,w,n,o),w.__epoch=i,w.__rowDataRef=n):t&&r?(Pe(e,w,n,o),w.__rowDataRef=n):(w.__isCustomRow&&(w.className="data-grid-row",w.setAttribute("role","row"),w.__isCustomRow=!1),He(e,w,n,o),w.__epoch=i,w.__rowDataRef=n)}else if(y){const t=_e(w),r=e._activeEditRows===o;t&&!r?(Re(w),He(e,w,n,o),w.__epoch=i,w.__rowDataRef=n):(Pe(e,w,n,o),w.__rowDataRef=n)}else{const t=_e(w),r=_||e._activeEditRows===o;t&&!r?(Re(w),He(e,w,n,o),w.__epoch=i,w.__rowDataRef=n):Pe(e,w,n,o)}let S=!1;const E=e._changedRowIdSet;if(E&&E.size>0)try{const t=e.getRowId?.(n);t&&(S=E.has(t))}catch{}S!==w.classList.contains("changed")&&w.classList.toggle("changed",S);const x=e.effectiveConfig?.rowClass;if(x){const t=w.getAttribute("data-dynamic-classes");if(t){const e=t.split(" ");for(let t=0;t<e.length;t++)e[t]&&w.classList.remove(e[t])}try{const e=x(n),t="string"==typeof e?e.split(/\s+/):e;if(t&&t.length>0){let e="";for(let o=0;o<t.length;o++){const i=t[o];i&&"string"==typeof i&&(w.classList.add(i),e+=(e?" ":"")+i)}w.setAttribute("data-dynamic-classes",e)}else w.removeAttribute("data-dynamic-classes")}catch(g){f("TBW060",`rowClass callback error: ${g}`,e.id),w.removeAttribute("data-dynamic-classes")}}if(u){const e=u(n,o);void 0!==e&&e>0?w.style.setProperty("--tbw-row-height",`${e}px`):w.style.removeProperty("--tbw-row-height")}h&&e._afterRowRender?.({row:n,rowIndex:o,rowElement:w}),w.parentNode!==s&&s.appendChild(w)}}(this,e,t,o,this.#ne),this.#xe.size>0)for(const i of this.#xe)this.#ze(i,!0)}#ct={rowCount:-1,colCount:-1,ariaLabel:void 0,ariaLabelledBy:void 0,ariaDescribedBy:void 0,ariaRoleDescription:void 0,lastAnnouncedSourceCount:-1};_updateAriaCounts(e,t){!function(e,t,o,i,r){if(i===e.rowCount&&r===e.colCount)return!1;const n=e.rowCount;e.rowCount=i,e.colCount=r,t&&(t.setAttribute("aria-rowcount",String(i)),t.setAttribute("aria-colcount",String(r))),i!==n&&o&&(i>0?o.setAttribute("role","rowgroup"):o.removeAttribute("role"))}(this.#ct,this.__rowsBodyEl,this._bodyEl,e,t)}_requestSchedulerPhase(e,t){this.#J.requestPhase(e,t)}_getPluginRowHeight(e,t){return this.#ue?.getRowHeight?.(e,t)}_adjustPluginVirtualStart(e,t,o){return this.#ue?.adjustVirtualStart(e,t,o)}_afterPluginRender(){this.#ue?.afterRender()}_emitPluginEvent(e,t){this.#ue?.emitPluginEvent(e,t)}_schedulerMergeConfig(){this.#X.parseLightDomColumns(this),this.#X.merge(),this.#We(),function(e,t,o){const i=Wt,r=Bt,n=new Map;function s(e,t,o,i,r=!1){n.has(e)||n.set(e,{description:t,importHint:o,fields:[],isConfigProperty:r});const s=n.get(e);s.fields.includes(i)||s.fields.push(i)}const l=e.features;function a(e){return!!l&&!1===l[e]}for(const c of r){const o=e[c.property];if((c.isUsed?c.isUsed(o):void 0!==o)&&!Gt(t,c.pluginName)&&!a(c.pluginName)){const e=c.description||`the "${c.property}" ${c.level} property`;s(c.pluginName,e,Vt(c.pluginName),c.property,!0)}}const d=e.columns;if(d&&d.length>0)for(const c of d)for(const e of i){const o=c[e.property];if((e.isUsed?e.isUsed(o):void 0!==o)&&!Gt(t,e.pluginName)&&!a(e.pluginName)){const t=c.field||"<unknown>",o=e.description||`the "${e.property}" ${e.level} property`;s(e.pluginName,o,Vt(e.pluginName),t)}}if(n.size>0){const e=[];for(const[t,{description:o,importHint:i,fields:r,isConfigProperty:s}]of n)if(s)e.push(`Config uses ${o}, but the required plugin is not loaded.\n → Add the plugin to your gridConfig.plugins array:\n ${i}\n plugins: [new ${Ut(t)}Plugin(), ...]`);else{const n=r.slice(0,3).join(", ")+(r.length>3?`, ... (${r.length} total)`:"");e.push(`Column(s) [${n}] use ${o}, but the required plugin is not loaded.\n → Add the plugin to your gridConfig.plugins array:\n ${i}\n plugins: [new ${Ut(t)}Plugin(), ...]`)}g([...n.values()].some(e=>e.isConfigProperty)?"TBW002":"TBW001",`Configuration error:\n\n${e.join("\n\n")}\n\nThis validation helps catch misconfigurations early. The properties listed above require their respective plugins to function.`,o)}}(this.#w,this.#ue?.getPlugins()??[],this.id),function(e,t){const o=[],i=[];for(const r of e){const e=r.constructor.manifest;if(e?.configRules)for(const t of e.configRules){const e=r.config;if(t.check(e)){const e=`[${Ut(r.name)}Plugin] Configuration warning: ${t.message}`;"error"===t.severity?o.push(e):i.push(e)}}}if(i.length>0&&ge())for(const r of i)f("TBW004",r,t);o.length>0&&g("TBW003",`Configuration error:\n\n${o.join("\n\n")}`,t)}(this.#ue?.getPlugins()??[],this.id),function(e,t){if(!ge())return;const o=new Set(e.map(e=>e.name)),i=new Set;for(const r of e){const e=r.constructor.manifest;if(e?.incompatibleWith)for(const n of e.incompatibleWith)if(o.has(n.name)){const e=[r.name,n.name].sort().join("↔");if(i.has(e))continue;i.add(e),f("TBW022",`${Ut(r.name)}Plugin and ${Ut(n.name)}Plugin are both loaded, but they are currently incompatible.\n\n → ${n.reason}\n\n Consider removing one of these plugins to avoid unexpected behavior.`,t)}}}(this.#ue?.getPlugins()??[],this.id),this.#yt(),this.#Le=[...this._columns]}_schedulerProcessColumns(){this.#mt()}_schedulerProcessRows(){this.#Ct()}_schedulerRenderHeader(){ne(this)}_schedulerUpdateTemplate(){y(this)}_schedulerAfterRender(){this.#ue?.afterRender(),this.#Ie(),this._virtualization.enabled&&this._virtualization.totalHeightEl&&queueMicrotask(()=>{if(!this._virtualization.totalHeightEl)return;const e=this.#pe.calculateTotalSpacerHeight(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`});"fixed"!==this.#w.fitMode||this.__didInitialAutoSize||(this.__didInitialAutoSize=!0,m(this)),this._restoreFocusAfterRender&&(this._restoreFocusAfterRender=!1,Be(this)),this._virtualization.enabled&&!this.#Qe&&this.#at(),this.#ie&&(this.#ie=!1,requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.#nt()})})),this.#Ee&&this.#De()}get _schedulerIsConnected(){return this.isConnected&&this.#K}get _hostElement(){return this}get _renderRoot(){return this.#G}_emit(e,t){this.#dt(e,t)}get _accordionIcons(){return{expand:this.#w?.icons?.expand??r.expand,collapse:this.#w?.icons?.collapse??r.collapse}}get _shellState(){return this.#ye}_clearRowPool(){const e=this.__frameworkAdapter,t=e?.releaseCell;if(t){e?.beginBatch?.(this);try{for(let o=0;o<this._rowPool.length;o++){const i=this._rowPool[o].children;for(let o=0;o<i.length;o++){const r=i[o];r.firstElementChild&&t.call(e,r)}}this._rowPool.length=0,this._bodyEl&&(this._bodyEl.innerHTML="")}finally{e?.endBatch?.(this)}}else this._rowPool.length=0,this._bodyEl&&(this._bodyEl.innerHTML="");this.__rowRenderEpoch++}_setup(){this.#tt()}_applyAnimationConfig(e){const t={...i,...e.animation},o=t.mode??"reduced-motion";let r=1;!1===o||"off"===o?r=0:!0!==o&&"on"!==o||(r=1),this.style.setProperty("--tbw-animation-duration",`${t.duration}ms`),this.style.setProperty("--tbw-animation-easing",t.easing??"ease-out"),this.style.setProperty("--tbw-animation-enabled",String(r)),this.dataset.animationMode="boolean"==typeof o?o?"on":"off":o}#yt(){!function(e,t,o,i){if(!t)return!1;let r=!1;const n=o?.gridAriaLabelledBy,s=n?void 0:function(e,t){const o=e?.gridAriaLabel;return o||(e?.shell?.header?.title??t?.lightDomTitle??void 0)}(o,i);n!==e.ariaLabelledBy&&(e.ariaLabelledBy=n,n?t.setAttribute("aria-labelledby",n):t.removeAttribute("aria-labelledby"),r=!0),s!==e.ariaLabel&&(e.ariaLabel=s,s?t.setAttribute("aria-label",s):t.removeAttribute("aria-label"),r=!0);const l=o?.gridAriaDescribedBy;l!==e.ariaDescribedBy&&(e.ariaDescribedBy=l,l?t.setAttribute("aria-describedby",l):t.removeAttribute("aria-describedby"),r=!0);const a=o?.gridAriaRoleDescription;a!==e.ariaRoleDescription&&(e.ariaRoleDescription=a,a?t.setAttribute("aria-roledescription",a):t.removeAttribute("aria-roledescription"),r=!0)}(this.#ct,this.__rowsBodyEl,this.#w,this.#ye)}#De(){const e=this.querySelector(".tbw-grid-root");var t;e&&(this.#Ee?(this.#Te||(this.#Te=function(e){const t=document.createElement("div");return t.className="tbw-loading-overlay",t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.appendChild(Qe("large",e)),t}(this.#w?.loadingRenderer)),function(e,t){e.appendChild(t)}(e,this.#Te)):(t=this.#Te,t?.remove()))}#Ie(){!function(e,t,o,i,r,n,s){if(!e)return;if(!function(e,t,o){return!(e||t>0||null===o)}(t,o,r))return ue(s.el),s.el=void 0,s.renderer=void 0,s.target=void 0,s.sourceRows=void 0,void(s.filteredOut=void 0);const l=i.length,a=l>0&&0===o;if(s.el&&s.renderer===r&&s.target===n&&s.sourceRows===i&&s.filteredOut===a)return;const d="grid"===n?e:e.querySelector(".rows-container")??e;ue(s.el),s.el=he({sourceRowCount:l,filteredOut:a},r??void 0,n),function(e,t){e.appendChild(t)}(d,s.el),s.renderer=r,s.target=n,s.sourceRows=i,s.filteredOut=a}(this.querySelector(".tbw-grid-root"),this.#Ee,this._rows.length,this.#Y,this.#w?.emptyRenderer,this.#w?.emptyOverlay??"rows",this.#Pe)}#ze(e,t){this.#wt();const o=this.#He.get(e);if(!o)return;const i=this.findRenderedRowElement?.(o.index);i&&function(e,t){if(t){if(e.classList.add("tbw-row-loading"),e.setAttribute("aria-busy","true"),!e.querySelector(".tbw-row-loading-overlay")){const t=document.createElement("div");t.className="tbw-row-loading-overlay",t.setAttribute("aria-hidden","true");const o=document.createElement("div");o.className="tbw-row-loading-spinner",t.appendChild(o),e.appendChild(t)}}else e.classList.remove("tbw-row-loading"),e.removeAttribute("aria-busy"),e.querySelector(".tbw-row-loading-overlay")?.remove()}(i,t)}#Ne(e,t,o){this.#wt();const i=this.#He.get(e);if(!i)return;const r=this.findRenderedRowElement?.(i.index);if(!r)return;const n=this._visibleColumns.findIndex(e=>e.field===t);if(n<0)return;const s=r.children[n];s&&function(e,t){t?(e.classList.add("tbw-cell-loading"),e.setAttribute("aria-busy","true")):(e.classList.remove("tbw-cell-loading"),e.removeAttribute("aria-busy"))}(s,o)}#tt(){if(this.isConnected&&this._headerRowEl&&this._bodyEl){if(this.#X.parseLightDomColumns(this),this.#_){const e=this.#_;this.#_=void 0,this.#X.merge();const t=this.#ue?.getAll()??[];this.#X.applyState(e,t)}this._bodyEl&&(this._bodyEl.style.display="",this._bodyEl.style.gridTemplateColumns=""),this.#J.requestPhase(le.FULL,"setup")}}#st(e){const t=this._virtualization.container,o=this.#Ce,i=o?.scrollLeft??0,r=t?.scrollHeight??0,n=o?.scrollWidth??0,s=t?.clientHeight??0,l=o?.clientWidth??0;if(this.refreshVirtualWindow(!1)&&this.#ue?.onScrollRender(),this._virtualization.variableHeights&&(this.#re&&clearTimeout(this.#re),this.#re=window.setTimeout(()=>{this.#re=0,this.#pe.measureRenderedRowHeights(this._virtualization.start,this._virtualization.end)},100)),this.#oe){const t=this.#he;t.scrollTop=e,t.scrollLeft=i,t.scrollHeight=r,t.scrollWidth=n,t.clientHeight=s,t.clientWidth=l,this.#ue?.onScroll(t)}this.#dt("tbw-scroll",{scrollTop:e,scrollHeight:r,clientHeight:s,direction:"vertical"})}findHeaderRow(){return this.#G.querySelector(".header-row")}findRenderedRowElement(e){const t=this._virtualization,o=e-t.start;return o>=0&&o<this._rowPool.length&&o<t.end-t.start?this._rowPool[o]:null}_dispatchCellClick(e,t,o,i){const r=this._rows[t],n=this._visibleColumns[o];if(!r||!n)return!1;const s=n.field,l=r[s],a=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,composed:!0,detail:{rowIndex:t,colIndex:o,column:n,field:s,value:l,row:r,cellEl:i,trigger:"pointer",originalEvent:e}});if(this.dispatchEvent(a),a.defaultPrevented)return!0;const d={row:r,rowIndex:t,colIndex:o,column:n,field:s,value:l,cellEl:i,originalEvent:e},c=this.#ue?.onCellClick(d)??!1;return this.#dt("cell-click",d),c}_dispatchRowClick(e,t,o,i){if(!o)return!1;const r={rowIndex:t,row:o,rowEl:i,originalEvent:e},n=this.#ue?.onRowClick(r)??!1;return this.#dt("row-click",r),n}_dispatchHeaderClick(e,t,o){if(!t)return!1;const i={colIndex:this._columns.indexOf(t),field:t.field,column:t,headerEl:o,originalEvent:e};return this.#ue?.onHeaderClick(i)??!1}_dispatchKeyDown(e){return this.#ue?.onKeyDown(e)??!1}_getHorizontalScrollOffsets(e,t){return this.#ue?.getHorizontalScrollOffsets(e,t)??{left:0,right:0}}query(e,t){return this.#ue?.queryPlugins({type:e,context:t})??[]}_dispatchCellMouseDown(e){return this.#ue?.onCellMouseDown(e)??!1}_dispatchCellMouseMove(e){this.#ue?.onCellMouseMove(e)}_dispatchCellMouseUp(e){this.#ue?.onCellMouseUp(e)}_afterCellRender(e){this.#ue?.afterCellRender(e)}_hasAfterCellRenderHook(){return this.#ue?.hasAfterCellRenderHook()??!1}_afterRowRender(e){this.#ue?.afterRowRender(e)}_hasAfterRowRenderHook(){return this.#ue?.hasAfterRowRenderHook()??!1}async ready(){return this.#i}async forceLayout(){return 0===this.#J.pendingPhase&&this.#J.requestPhase(le.FULL,"forceLayout"),this.#J.whenReady()}async getConfig(){return Object.freeze({...this.#w||{}})}getRowId(e){return st(e,this.id,this.#w.getRowId)}getRow(e){return this.#be.getRow(e)}_getRowEntry(e){return this.#wt(),this.#He.get(e)}updateRow(e,t,o="api"){this.#be.updateRow(e,t,o)}updateRows(e,t="api"){this.#be.updateRows(e,t)}animateRow(e,t){return rt(this,e,t)}animateRows(e,t){return function(e,t,o){return Promise.all(t.map(t=>rt(e,t,o))).then(e=>e.filter(Boolean).length)}(this,e,t)}animateRowById(e,t){return function(e,t,o){const i=e._rows??[],r=e.getRowId;if(!r)return Promise.resolve(!1);const n=i.findIndex(e=>{if(null==e)return!1;try{return r(e)===t}catch{return!1}});return n<0?Promise.resolve(!1):rt(e,n,o)}(this,e,t)}async insertRow(e,t,o=!0){return this.#be.insertRow(e,t,o)}async removeRow(e,t=!0){return this.#be.removeRow(e,t)}async applyTransaction(e,t=!0){return this.#be.applyTransaction(e,t)}applyTransactionAsync(e){return this.#be.applyTransactionAsync(e)}focusCell(e,t){this.#we.focusCell(e,t)}get focusedCell(){return this.#we.focusedCell}scrollToRow(e,t){this.#we.scrollToRow(e,t)}scrollToRowById(e,t){this.#we.scrollToRowById(e,t)}setColumnVisible(e,t){const o=this.#X.setColumnVisible(e,t);return o&&this.requestStateChange(),o}toggleColumnVisibility(e){const t=this.#X.toggleColumnVisibility(e);return t&&this.requestStateChange(),t}isColumnVisible(e){return this.#X.isColumnVisible(e)}showAllColumns(){this.#X.showAllColumns(),this.requestStateChange()}getAllColumns(){return this.#X.getAllColumns()}setColumnOrder(e){this.#X.setColumnOrder(e),this.requestStateChange()}getColumnOrder(){return this.#X.getColumnOrder()}getColumnState(){const e=this.#ue?.getAll()??[];return this.#X.collectState(e)}get columnState(){return this.getColumnState()}applyColumnState(e){e&&(this.#j?this.#_t(e):(this.#_=e,this.#X.initialColumnState=e))}#_t(e){const t=this._columns,o=this._sortState,i=this.#ue?.getAll()??[];this.#X.applyState(e,i);if(!e.columns.some(e=>void 0!==e.sort)&&this.#Rt(t,o))return this.#ke=void 0,y(this),void this.#J.requestPhase(le.STYLE,"column-width");this.#tt()}#Rt(e,t){const o=this._columns,i=this._sortState;if(t?.field!==i?.field||t?.direction!==i?.direction)return!1;if(e.length!==o.length)return!1;for(let r=0;r<e.length;r++){const t=e[r],i=o[r];if(t.field!==i.field)return!1;if(!!t.hidden!=!!i.hidden)return!1}return!0}get sortModel(){return this._sortState?{field:this._sortState.field,direction:1===this._sortState.direction?"asc":"desc"}:null}sort(e,t){if(null===e){if(!this._sortState)return;const e=this._sortState.field;this._sortState=null,this.__rowRenderEpoch++;for(let t=0;t<this._rowPool.length;t++)this._rowPool[t].__epoch=-1;return this._rows=this.__originalOrder.slice(),this.__originalOrder=[],ne(this),this.refreshVirtualWindow(!0),this.dispatchEvent(new CustomEvent("sort-change",{detail:{field:e,direction:0}})),this._pluginManager?.emitPluginEvent?.("sort-change",{field:e,direction:0}),void this.requestStateChange?.()}const o=this._columns.find(t=>t.field===e);o&&(t?(this._sortState||(this.__originalOrder=this._rows.slice()),J(this,o,"desc"===t?-1:1)):Q(this,o))}requestStateChange(){const e=this.#ue?.getAll()??[];this.#X.requestStateChange(e)}resetColumnState(){this.#_=void 0,this.__originalOrder=[];const e=this.#ue?.getAll()??[];this.#X.resetState(e),this.#X.merge(),this.#tt()}get isToolPanelOpen(){return this.#_e.isPanelOpen}get defaultRowHeight(){return this._virtualization.rowHeight}get expandedToolPanelSections(){return this.#_e.expandedSections}openToolPanel(e){this.#_e.openToolPanel(e)}closeToolPanel(){this.#_e.closeToolPanel()}toggleToolPanel(){this.#_e.toggleToolPanel()}toggleToolPanelSection(e){this.#_e.toggleToolPanelSection(e)}getToolPanels(){return this.#_e.getToolPanels()}registerToolPanel(e){this.#ye.apiToolPanelIds.add(e.id),this.#_e.registerToolPanel(e)}unregisterToolPanel(e){this.#ye.apiToolPanelIds.delete(e),this.#_e.unregisterToolPanel(e)}getHeaderContents(){return this.#_e.getHeaderContents()}registerHeaderContent(e){this.#ye.apiHeaderContentIds.add(e.id),this.#_e.registerHeaderContent(e)}unregisterHeaderContent(e){this.#ye.apiHeaderContentIds.delete(e),this.#_e.unregisterHeaderContent(e)}getToolbarContents(){return this.#_e.getToolbarContents()}registerToolbarContent(e){this.#_e.registerToolbarContent(e)}unregisterToolbarContent(e){this.#_e.unregisterToolbarContent(e)}#St=!1;refreshShellHeader(){this.#St||(this.#St=!0,queueMicrotask(()=>{if(this.#St=!1,!this.isConnected)return;this.#Ye(),this.#X.markSourcesChanged(),this.#X.merge(),At(this.#ye);(function(e,t,o,i){const r=e.querySelector(`.${_.ROOT}`),n=r?.querySelector(".tbw-grid-content");if(!r||!n)return Pt(e,t,o,i);n.remove();const s=mt(t);if(r.replaceChildren(),s){r.className=`${_.ROOT} has-shell`;const{headerOptions:e,bodyOptions:s}=Tt(t,o,i),l=pt(e),a=wt(s),d=a.querySelector(".tbw-grid-content");d&&d.replaceWith(n),r.appendChild(l),r.appendChild(a)}else r.className=_.ROOT,r.appendChild(n);return s})(this.#G,this.#w?.shell,{isPanelOpen:this.#ye.isPanelOpen,expandedSections:this.#ye.expandedSections},this.#w?.icons)&&(this.#Et(),this.#_e.setInitialized(!0)),this.#xt()}))}#xt(){const e=this.#G.querySelector(".tbw-grid-content")??this.#G.querySelector(".tbw-grid-root");if(this._headerRowEl=e?.querySelector(".header-row"),this._virtualization.totalHeightEl=e?.querySelector(".faux-vscroll-spacer"),this._virtualization.viewportEl=e?.querySelector(".rows-viewport"),this._bodyEl=e?.querySelector(".rows"),this.__rowsBodyEl=e?.querySelector(".rows-body"),this.#_e.isInitialized){Rt(this.#G,this.#ye),_t(this.#G,this.#w?.shell,this.#ye);const e=this.#w?.shell?.toolPanel,t=e?.defaultOpen;t&&this.#ye.toolPanels.has(t)&&this.#ye.expandedSections.add(t);const o=!0===e?.locked||"open"===e?.initialState||void 0===e?.initialState&&void 0!==t&&this.#ye.toolPanels.has(t);!this.#ye.isPanelOpen&&this.#ye.toolPanels.size>0&&o&&this.openToolPanel(),this.#ye.isPanelOpen&&(xt(this.#G,this.#ye),St(this.#G,this.#ye,(this.#w,this.#w)),Et(this.#G,this.#ye))}this._resizeController=Je(this),this.#Ue(e),this.#J.requestPhase(le.COLUMNS,"shellRefresh")}#et=new Map;registerStyles(e,t){let o=this.#et.get(e);o||(o=new CSSStyleSheet,this.#et.set(e,o)),o.replaceSync(t),this.#At()}unregisterStyles(e){this.#et.delete(e)&&this.#At()}getRegisteredStyles(){return Array.from(this.#et.keys())}#At(){const e=Array.from(this.#et.values()),t=document.adoptedStyleSheets.filter(e=>!Array.from(this.#et.values()).includes(e));document.adoptedStyleSheets=[...t,...e]}registerExternalFocusContainer(e){this.#we.registerExternalFocusContainer(e)}unregisterExternalFocusContainer(e){this.#we.unregisterExternalFocusContainer(e)}containsFocus(e){return this.#we.containsFocus(e)}get lastFocusedElement(){return this.#we.lastFocusedElement}restoreLastFocus(){return this.#we.restoreLastFocus()}#Ye(){vt(this,this.#ye),Ct(this,this.#ye),yt(this,this.#ye,this.#je())}#Tt(){const e=this.#G.querySelector(".tbw-shell-header");if(!e)return;At(this.#ye);const t=function(e,t,o){const i=e?.header?.title??t.lightDomTitle??"",r=!!i;let n="";void 0!==o&&(n="string"==typeof o?O(o):o.outerHTML);const s=e?.header?.toolbarContents??[],l=[...t.toolbarContents.values()],a=new Set(s.map(e=>e.id)),d=[...s];for(const m of l)a.has(m.id)||d.push(m);const c=d.length>0,h=t.toolPanels.size>0,u=!0===e?.toolPanel?.locked,g=h&&!1!==e?.header?.toolPanelToggle&&!u,f=c&&g,p=[...d].sort((e,t)=>(e.order??0)-(t.order??0));let w="";for(const m of p)w+=`<div class="tbw-toolbar-content-slot" data-toolbar-content="${m.id}"></div>`;if(f&&(w+='<div class="tbw-toolbar-separator"></div>'),g){const e=t.isPanelOpen;w+=`<button type="button" class="${e?"tbw-toolbar-btn active":"tbw-toolbar-btn"}" data-panel-toggle data-icon="tool-panel" title="Settings" aria-label="Toggle settings panel" aria-pressed="${e}" aria-controls="tbw-tool-panel">${n}</button>`}return`\n <div class="tbw-shell-header" part="shell-header" role="presentation">\n ${r?`<div class="tbw-shell-title">${b=i,b&&"string"==typeof b?b.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"):""}</div>`:""}\n <div class="tbw-shell-content" part="shell-content" role="presentation" data-light-dom-header-content></div>\n <div class="tbw-shell-toolbar" part="shell-toolbar" role="presentation">\n ${w}\n </div>\n </div>\n `;var b}(this.#w.shell,this.#ye,this.#w.icons?.toolPanel),o=document.createElement("div");o.innerHTML=t;const i=o.firstElementChild;i&&(e.replaceWith(i),this.#Et(),_t(this.#G,this.#w?.shell,this.#ye))}#Ze(){const e=()=>{const e=this.#ye.lightDomTitle,t=this.#ye.hasToolButtonsContainer;this.#Ye();const o=this.#ye.lightDomTitle,i=this.#ye.hasToolButtonsContainer;(o&&!e||i&&!t)&&(this.#X.markSourcesChanged(),this.#X.merge(),this.#Tt())},t=()=>{this.__lightDomColumnsCache=void 0,this.#tt()};this.#X.registerLightDomHandler("tbw-grid-header",e),this.#X.registerLightDomHandler("tbw-grid-tool-buttons",e),this.#X.registerLightDomHandler("tbw-grid-tool-panel",e),this.#X.registerLightDomHandler("tbw-grid-column",t),this.#X.registerLightDomHandler("tbw-grid-detail",t),this.#X.observeLightDOM(this)}refreshColumns(){this.__lightDomColumnsCache=void 0,Te(this),this.#X.parseLightDomColumns(this);const e=this.#ye.lightDomTitle,t=this.#ye.hasToolButtonsContainer;this.#Ye();const o=this.#ye.lightDomTitle,i=this.#ye.hasToolButtonsContainer;(o&&!e||i&&!t)&&(this.#X.markSourcesChanged(),this.#X.merge(),this.#Tt()),this.#J.requestPhase(le.COLUMNS,"refreshColumns")}#lt(){this.#pe.updateCachedGeometry()}refreshVirtualWindow(e=!1,t=!1){return this.#pe.refreshVirtualWindow(e,t)}invalidateRowHeight(e,t){this.#pe.invalidateRowHeight(e,t)}#Xe(){this.#Ye(),this.#X.markSourcesChanged(),this.#X.merge();const e=this.#w?.shell;Pt(this.#G,e,{isPanelOpen:this.#ye.isPanelOpen,expandedSections:this.#ye.expandedSections},this.#w?.icons)&&(this.#Et(),this.#_e.setInitialized(!0))}#Et(){!function(e,t,o,i){const r=e.querySelector(".tbw-shell-toolbar");r&&r.addEventListener("click",e=>{e.target.closest("[data-panel-toggle]")&&i.onPanelToggle()});const n=e.querySelector(".tbw-accordion");n&&n.addEventListener("click",e=>{const t=e.target.closest(".tbw-accordion-header");if(t){const e=t.closest("[data-section]"),o=e?.getAttribute("data-section");o&&i.onSectionToggle(o)}})}(this.#G,this.#w,this.#ye,{onPanelToggle:()=>this.toggleToolPanel(),onSectionToggle:e=>this.toggleToolPanelSection(e)}),this.#Re?.(),this.#Re=function(e,t,o){const i=e.querySelector(".tbw-tool-panel"),r=e.querySelector("[data-resize-handle]"),n=e.querySelector(".tbw-shell-body");if(!i||!r||!n)return()=>{};const s=t?.toolPanel?.position??"right";let l=0,a=0,d=0,c=!1;const h=e=>{if(!c)return;e.preventDefault();const t="left"===s?e.clientX-l:l-e.clientX,o=Math.min(d,Math.max(200,a+t));i.style.width=`${o}px`},u=()=>{if(!c)return;c=!1,r.classList.remove("resizing"),i.style.transition="",document.body.style.cursor="",document.body.style.userSelect="";const e=i.getBoundingClientRect().width;o(e),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u)},g=e=>{e.preventDefault(),c=!0,l=e.clientX,a=i.getBoundingClientRect().width,d=n.getBoundingClientRect().width-20,r.classList.add("resizing"),i.style.transition="none",document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",h),document.addEventListener("mouseup",u)};return r.addEventListener("mousedown",g),()=>{r.removeEventListener("mousedown",g),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u)}}(this.#G,this.#w?.shell,e=>{this.style.setProperty("--tbw-tool-panel-width",`${e}px`)}),this.#Se?.(),this.#Se=function(e,t,o,i){if(!t?.toolPanel?.closeOnClickOutside)return()=>{};if("push"===t.toolPanel.mode)return()=>{};const r=e=>{if(!o.isPanelOpen)return;const t=e.target;t&&(t.closest(".tbw-tool-panel")||t.closest("[data-panel-toggle]")||i())};return e.addEventListener("mousedown",r),()=>e.removeEventListener("mousedown",r)}(this,this.#w?.shell,this.#ye,()=>this.closeToolPanel())}}!function(){const e=Xt.tagName,t=customElements.get(e);if(!t)return customElements.define(e,Xt),void(Xt.activeTag=e);if(t.version===Xt.version)return void(Xt.activeTag=e);const o=`${e}-v${Xt.version.replace(/[^a-zA-Z0-9]+/g,"-").toLowerCase()}`;customElements.get(o)||customElements.define(o,Xt),Xt.activeTag=o}(),globalThis.DataGridElement||(globalThis.DataGridElement=Xt);function Kt(e,t,o){return o?.valueAccessor?W(e,o):e?.[t]}function Zt(e){return null==e||""===e||"number"==typeof e&&isNaN(e)}const Qt={sum:(e,t,o)=>{let i=0;for(let r=0;r<e.length;r++){const n=Kt(e[r],t,o);if(Zt(n))continue;const s=Number(n);isNaN(s)||(i+=s)}return i},avg:(e,t,o)=>{if(!e.length)return 0;let i=0,r=0;for(let n=0;n<e.length;n++){const s=Kt(e[n],t,o);if(Zt(s))continue;const l=Number(s);isNaN(l)||(i+=l,r++)}return r>0?i/r:0},count:e=>e.length,min:(e,t,o)=>{if(!e.length)return 0;let i=1/0;for(let r=0;r<e.length;r++){const n=Kt(e[r],t,o);if(Zt(n))continue;const s=Number(n);isNaN(s)||s<i&&(i=s)}return i===1/0?0:i},max:(e,t,o)=>{if(!e.length)return 0;let i=-1/0;for(let r=0;r<e.length;r++){const n=Kt(e[r],t,o);if(Zt(n))continue;const s=Number(n);isNaN(s)||s>i&&(i=s)}return i===-1/0?0:i},first:(e,t,o)=>e[0]?Kt(e[0],t,o):void 0,last:(e,t,o)=>e.length?Kt(e[e.length-1],t,o):void 0},Jt=new Map,eo={register(e,t){Jt.set(e,t)},unregister(e){Jt.delete(e)},get(e){if(void 0!==e)return"function"==typeof e?e:Jt.get(e)??Qt[e]},run(e,t,o,i){const r=this.get(e);return r?r(t,o,i):void 0},has:e=>Jt.has(e)||e in Qt,list:()=>[...Object.keys(Qt),...Jt.keys()]},to={sum:e=>{let t=0;for(let o=0;o<e.length;o++)t+=e[o];return t},avg:e=>{if(!e.length)return 0;let t=0;for(let o=0;o<e.length;o++)t+=e[o];return t/e.length},count:e=>e.length,min:e=>{if(!e.length)return 0;let t=e[0];for(let o=1;o<e.length;o++)e[o]<t&&(t=e[o]);return t},max:e=>{if(!e.length)return 0;let t=e[0];for(let o=1;o<e.length;o++)e[o]>t&&(t=e[o]);return t},first:e=>e[0]??0,last:e=>e[e.length-1]??0};function oo(e){return to[e]??to.sum}e.BaseGridPlugin=class{static dependencies;static manifest;aliases;version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#Pt;get defaultConfig(){return{}}constructor(e={}){this.userConfig=e}mergeConfigsFrom(e){if(0===e.length)return;const t={...this.userConfig},o={};for(const i of Object.keys(t))o[i]=this;for(const i of e){const e=i.userConfig;for(const[r,n]of Object.entries(e)){if(void 0===n)continue;if(!(r in t)){t[r]=n,o[r]=i;continue}if(t[r]===n)continue;const e=o[r]?.constructor.name??this.constructor.name,s=i.constructor.name,l=u("TBW025",`Cannot merge plugin configs for "${this.name}": conflicting value for "${r}" supplied by both ${e} and ${s}. Pass the option on a single instance, or remove the duplicate.`,void 0,this.name);throw new Error(l)}}Object.assign(this.userConfig,t)}attach(e){this.#Pt?.abort(),this.#Pt=new AbortController,this.grid=e,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#Pt?.abort(),this.#Pt=void 0}getPlugin(e){return this.grid?.getPlugin(e)}emit(e,t){this.grid?.dispatchEvent?.(new CustomEvent(e,{detail:t,bubbles:!0}))}emitCancelable(e,t){const o=new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(o),o.defaultPrevented}on(e,t){this.grid?._pluginManager?.subscribe(this,e,t)}off(e){this.grid?._pluginManager?.unsubscribe(this,e)}emitPluginEvent(e,t){this.grid?._pluginManager?.emitPluginEvent(e,t)}broadcast(e,t){this.emitPluginEvent(e,t),this.emit(e,t)}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.#Pt?.signal??this.grid?.disconnectSignal}get gridIcons(){const e=this.grid?.gridConfig?.icons??{};return{...r,...e}}get isAnimationEnabled(){const e=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===e||"off"===e)return!1;if(!0===e||"on"===e)return!0;const t=this.gridElement;if(t){return"0"!==getComputedStyle(t).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const e=this.gridElement;if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-animation-duration").trim(),o=parseInt(t,10);if(!isNaN(o))return o}return 200}setIcon(e,t,o){e.dataset.icon=F(t),"collapse"===t?e.dataset.expanded="":"expand"===t&&delete e.dataset.expanded;const i=this.#Ht(t,o);void 0!==i?"string"==typeof i?e.innerHTML=O(i):i instanceof HTMLElement&&(e.innerHTML="",e.appendChild(i.cloneNode(!0))):e.innerHTML=""}#Ht(e,t){return void 0!==t?t:this.grid?.gridConfig?.icons?.[e]}updateSortIndicator(e,t){e.querySelector('[part~="sort-indicator"], .sort-indicator')?.remove();const o=document.createElement("span");o.setAttribute("part","sort-indicator"),o.className="sort-indicator",t?(e.setAttribute("aria-sort","asc"===t?"ascending":"descending"),e.setAttribute("data-sort",t),this.setIcon(o,"asc"===t?"sortAsc":"sortDesc")):(e.setAttribute("aria-sort","none"),e.removeAttribute("data-sort"),this.setIcon(o,"sortNone"));const i=e.querySelector(".tbw-filter-btn")??e.querySelector(".resize-handle");return i?e.insertBefore(o,i):e.appendChild(o),o}warn(e,t){void 0!==t?console.warn(u(e,t,this.gridElement.id,this.name)):console.warn(`${l(this.gridElement.id,this.name)} ${e}`)}throwDiagnostic(e,t){throw new Error(u(e,t,this.gridElement.id,this.name))}},e.CORE_CONSUMED_ADAPTER_METHODS=["canHandle","createRenderer","createEditor","processConfig","getTypeDefault","createToolPanelRenderer","parseDetailElement","parseResponsiveCardElement","releaseCell","unmount","beginBatch","endBatch"],e.DEFAULT_A11Y_MESSAGES=o,e.DEFAULT_ANIMATION_CONFIG=i,e.DEFAULT_GRID_ICONS=r,e.DGEvents={CELL_CHANGE:"cell-change",CELL_COMMIT:"cell-commit",ROW_COMMIT:"row-commit",EDIT_OPEN:"edit-open",EDIT_CLOSE:"edit-close",CHANGED_ROWS_RESET:"changed-rows-reset",MOUNT_EXTERNAL_VIEW:"mount-external-view",MOUNT_EXTERNAL_EDITOR:"mount-external-editor",SORT_CHANGE:"sort-change",COLUMN_RESIZE:"column-resize",CELL_ACTIVATE:"cell-activate",GROUP_TOGGLE:"group-toggle",COLUMN_STATE_CHANGE:"column-state-change",DATA_CHANGE:"data-change",TBW_SCROLL:"tbw-scroll"},e.DataGridElement=Xt,e.FitModeEnum=t,e.GridCSSVars={COLOR_BG:"--tbw-color-bg",COLOR_FG:"--tbw-color-fg",COLOR_FG_MUTED:"--tbw-color-fg-muted",COLOR_BORDER:"--tbw-color-border",COLOR_ACCENT:"--tbw-color-accent",COLOR_HEADER_BG:"--tbw-color-header-bg",COLOR_HEADER_FG:"--tbw-color-header-fg",COLOR_SELECTION:"--tbw-color-selection",COLOR_ROW_HOVER:"--tbw-color-row-hover",COLOR_ROW_ALT:"--tbw-color-row-alt",ROW_HEIGHT:"--tbw-row-height",HEADER_HEIGHT:"--tbw-header-height",CELL_PADDING:"--tbw-cell-padding",FONT_FAMILY:"--tbw-font-family",FONT_SIZE:"--tbw-font-size",BORDER_RADIUS:"--tbw-border-radius",FOCUS_OUTLINE:"--tbw-focus-outline"},e.GridClasses=_,e.GridDataAttrs=R,e.GridElement=Xt,e.GridSelectors=S,e.MAX_ELEMENT_HEIGHT_PX=ze,e.PluginEvents={SELECTION_CHANGE:"selection-change",TREE_EXPAND:"tree-expand",TREE_LOAD_START:"tree-load-start",TREE_LOAD_END:"tree-load-end",TREE_LOAD_ERROR:"tree-load-error",FILTER_CHANGE:"filter-change",SORT_MODEL_CHANGE:"sort-model-change",EXPORT_START:"export-start",EXPORT_COMPLETE:"export-complete",CLIPBOARD_COPY:"clipboard-copy",CLIPBOARD_PASTE:"clipboard-paste",CONTEXT_MENU_OPEN:"context-menu-open",CONTEXT_MENU_CLOSE:"context-menu-close",HISTORY_CHANGE:"history-change",SERVER_LOADING:"server-loading",SERVER_ERROR:"server-error",COLUMN_VISIBILITY_CHANGE:"column-visibility-change",COLUMN_REORDER:"column-reorder",DETAIL_EXPAND:"detail-expand",GROUP_EXPAND:"group-expand"},e.PluginManager=Yt,e.RenderPhase=le,e.aggregatorRegistry=eo,e.builtInSort=V,e.computeScrollMapping=Ne,e.createGrid=function(e){const t=document.createElement("tbw-grid");return e&&(t.gridConfig=e),t},e.defaultComparator=function(e,t){return null==e&&null==t?0:null==e?-1:null==t||e>t?1:e<t?-1:0},e.fromVirtualScrollTop=Fe,e.getValueAggregator=oo,e.invalidateAccessorCache=B,e.queryGrid=function(e,t,o){let i=document,r=!1;return"boolean"==typeof t?r=t:t&&(i=t,r=!!o),r?customElements.whenDefined(Xt.tagName).then(()=>i.querySelector(e)):i.querySelector(e)},e.resolveCellValue=W,e.runValueAggregator=function(e,t){return oo(e)(t)},e.setFeatureResolver=function(e){Ye=e},e.toVirtualScrollTop=qe,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=grid.umd.js.map