@toolbox-web/grid 3.8.0 → 3.8.2

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 (36) hide show
  1. package/all.js +1 -1
  2. package/all.js.map +1 -1
  3. package/index.js +1 -1
  4. package/index.js.map +1 -1
  5. package/lib/core/types.d.ts +4 -0
  6. package/lib/features/registry.js +1 -1
  7. package/lib/plugins/clipboard/index.js +1 -1
  8. package/lib/plugins/column-virtualization/index.js +1 -1
  9. package/lib/plugins/context-menu/index.js +1 -1
  10. package/lib/plugins/editing/index.js +1 -1
  11. package/lib/plugins/export/index.js +1 -1
  12. package/lib/plugins/filtering/index.js +1 -1
  13. package/lib/plugins/grouping-columns/index.js +1 -1
  14. package/lib/plugins/grouping-rows/index.js +1 -1
  15. package/lib/plugins/master-detail/index.js +1 -1
  16. package/lib/plugins/multi-sort/index.js +1 -1
  17. package/lib/plugins/pinned-columns/index.js +1 -1
  18. package/lib/plugins/pinned-rows/index.js +1 -1
  19. package/lib/plugins/pivot/index.js +1 -1
  20. package/lib/plugins/print/index.js +1 -1
  21. package/lib/plugins/reorder-columns/index.js +1 -1
  22. package/lib/plugins/responsive/index.js +1 -1
  23. package/lib/plugins/row-drag-drop/index.js +1 -1
  24. package/lib/plugins/selection/index.js +1 -1
  25. package/lib/plugins/server-side/index.js +1 -1
  26. package/lib/plugins/shell/index.js +1 -1
  27. package/lib/plugins/sticky-rows/index.js +1 -1
  28. package/lib/plugins/tooltip/index.js +1 -1
  29. package/lib/plugins/tree/index.js +1 -1
  30. package/lib/plugins/undo-redo/index.js +1 -1
  31. package/lib/plugins/visibility/index.js +1 -1
  32. package/package.json +1 -1
  33. package/umd/grid.all.umd.js +1 -1
  34. package/umd/grid.all.umd.js.map +1 -1
  35. package/umd/grid.umd.js +1 -1
  36. package/umd/grid.umd.js.map +1 -1
package/all.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=/* @__PURE__ */new WeakMap;function t(e){return"__proto__"===e||"constructor"===e||"prototype"===e}var i=/* @__PURE__ */new Map;function r(e){if(-1===e.indexOf("."))return null;let t=i.get(e);return void 0===t&&(t=Object.freeze(e.split(".")),i.set(e,t)),t}function n(e,i){let r=e;for(let n=0;n<i.length;n++){if(null==r||"object"!=typeof r)return;const e=i[n];if(t(e))return;r=r[e]}return r}function o(e,i,r){if(null==e||"object"!=typeof e)return!1;let n=e;for(let s=0;s<i.length-1;s++){const e=i[s];if(t(e))return!1;const r=n[e];if(null==r||"object"!=typeof r)return!1;n=r}const o=i[i.length-1];return!t(o)&&(n[o]=r,!0)}function s(e,i){if(null==e)return;const o=r(i),s=e;return null===o?t(i)?void 0:s[i]:Object.prototype.hasOwnProperty.call(s,i)?s[i]:n(s,o)}function l(e){const i=r(e);return null===i?t(e)?()=>{}:t=>null==t?void 0:t[e]:t=>{if(null==t)return;const r=t;return Object.prototype.hasOwnProperty.call(r,e)?r[e]:n(r,i)}}function a(e){return-1===e.indexOf(".")&&!t(e)}function d(e,i,n){if(null==e||"object"!=typeof e)return!1;const s=r(i),l=e;return null===s?!t(i)&&(l[i]=n,!0):Object.prototype.hasOwnProperty.call(l,i)?(l[i]=n,!0):o(l,s,n)}function c(t,i,r=-1){if(!i.valueAccessor)return s(t,i.field);if("object"!=typeof t||null===t)return i.valueAccessor({row:t,column:i,rowIndex:r});const n=t,o=i.field;let l=e.get(n);if(l){const e=l.get(o);if(void 0!==e)return e.v}else l=/* @__PURE__ */new Map,e.set(n,l);const a=i.valueAccessor({row:t,column:i,rowIndex:r});return l.set(o,{v:a}),a}function u(t,i){t&&(i?e.get(t)?.delete(i):e.delete(t))}var h={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`,selectAllRows:()=>"Select all rows",selectRow:e=>`Select row ${e+1}`,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`},g={mode:"reduced-motion",duration:200,easing:"ease-out"},p={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:"",filterActive:"",print:"🖨️"};function f(e,t){return`[tbw-grid${e?`#${e}`:""}${t?`:${t}`:""}]`}var m="TBW020",w="TBW021",b="TBW041",v="TBW062",y="TBW072",C="TBW073",x="TBW074",R="TBW140";function S(e,t,i,r){return`${f(i,r)} ${e}: ${t}\n\n → More info: ${function(e){return`https://toolboxjs.com/grid/errors#${e.toLowerCase()}`}(e)}`}function E(e,t,i,r){throw new Error(S(e,t,i,r))}function A(e,t,i,r){console.warn(S(e,t,i,r))}function _(e,t,i,r){console.debug(S(e,t,i,r))}function k(e,t,i,r){console.error(S(e,t,i,r))}var T=/{{\s*([^}]+)\s*}}/g,M="__DG_EMPTY__",I=/^[\w$. '?+\-*/%:()!<>=,&|]+$/,L="__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("")),D=new RegExp(`__(proto|defineGetter|defineSetter)|${L.slice(3).join("|")}|this\\b`);function P(e){return e&&"string"==typeof e?e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"):""}var F=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|math".split("|")),H=/^on\w+$/i,G=new Set("href|src|action|formaction|data|srcdoc|xlink:href|poster|srcset".split("|")),z=/^\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,$(t.content),t.innerHTML}function N(e){const t=document.createElement("template");return e&&"string"==typeof e&&(t.innerHTML=e,$(t.content)),t.content}function q(e,t){t&&"string"==typeof t?-1!==t.indexOf("<")||-1!==t.indexOf("&")?e.replaceChildren(N(t)):e.textContent=t:e.replaceChildren()}function $(e){const t=[],i=e.querySelectorAll("*");for(const r of i){const e=r.tagName.toLowerCase();if(F.has(e)){t.push(r);continue}if(("svg"===e||"http://www.w3.org/2000/svg"===r.namespaceURI)&&Array.from(r.attributes).some(e=>H.test(e.name)||"href"===e.name||"xlink:href"===e.name)){t.push(r);continue}const i=[];for(const t of r.attributes){const e=t.name.toLowerCase();H.test(e)?i.push(t.name):"is"!==e?(G.has(e)&&z.test(t.value)||"style"===e&&/expression\s*\(|javascript:|behavior\s*:/i.test(t.value))&&i.push(t.name):i.push(t.name)}i.forEach(e=>r.removeAttribute(e))}t.forEach(e=>e.remove())}function W(e,t){const i=function(e){const t=[];let i=0;for(;i<e.length;){const r=e[i];if(" "!==r){if(r>="0"&&r<="9"||"."===r&&i+1<e.length&&e[i+1]>="0"&&e[i+1]<="9"){const r=i;for(;i<e.length&&(e[i]>="0"&&e[i]<="9"||"."===e[i]);)i++;t.push({type:"num",v:Number(e.slice(r,i))});continue}if("'"===r){let r="";for(i++;i<e.length&&"'"!==e[i];)r+=e[i++];if(i>=e.length)return null;i++,t.push({type:"str",v:r});continue}if(r>="a"&&r<="z"||r>="A"&&r<="Z"||"_"===r||"$"===r){const r=i;for(;i<e.length&&/[\w$.]/.test(e[i]);)i++;t.push({type:"id",v:e.slice(r,i)});continue}if(i+2<e.length){const r=e.slice(i,i+3);if("==="===r||"!=="===r){t.push({type:"op",v:r}),i+=3;continue}}if(i+1<e.length){const r=e.slice(i,i+2);if("=="===r||"!="===r||"<="===r||">="===r||"&&"===r||"||"===r){t.push({type:"op",v:r}),i+=2;continue}}if(!"+-*/%<>!?:(),".includes(r))return null;t.push({type:"op",v:r}),i++}else i++}return t}(e);if(!i)return;const r=i;let n=0;function o(){return r[n]}function s(){return r[n++]}function l(e,t){const i=o();return!!i&&(i.type===e&&(void 0===t||i.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 i=a();return e?t:i}return e}function d(){let e=c();for(;l("op","&&");)s(),e=e&&c();return e}function c(){let e=u();for(;;){const t=o();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=h();for(;;){const t=o();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=g();for(;;){const t=o();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=p();for(;;){const t=o();if(!t||"op"!==t.type)break;if("*"===t.v)s(),e*=p();else if("/"===t.v)s(),e/=p();else{if("%"!==t.v)break;s(),e%=p()}}return e}function p(){return l("op","!")?(s(),!p()):f()}function f(){const e=o();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 i=e.slice(4);return t.row?t.row[i]:void 0}if(e.startsWith("typeDefault.")){const i=e.slice(12);return t.typeDefault?t.typeDefault[i]:void 0}return"row"===e?t.row:"typeDefault"===e?t.typeDefault: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(),-f()):void 0}}const m=a();return n<r.length?void 0:m}function B(e,t){if(!e||-1===e.indexOf("{{"))return e;const i=[],r=(n=e.replace(T,(e,r)=>{const n=function(e,t){if(!(e=(e||"").trim()))return M;if(V.test(e))return M;if("value"===e)return null==t.value?M:String(t.value);if(e.startsWith("row.")&&!/[()?]/.test(e)&&!e.includes(":")){const i=e.slice(4),r=t.row?t.row[i]:void 0;return null==r?M:String(r)}if(e.startsWith("typeDefault.")&&!/[()?]/.test(e)&&!e.includes(":")){const i=e.slice(12),r=t.typeDefault?t.typeDefault[i]:void 0;return null==r?M:String(r)}if(e.length>80)return M;if(!I.test(e)||D.test(e))return M;const i=e.match(/\./g);if(i&&i.length>1)return M;try{const i=W(e,t),r=null==i?"":String(i);return V.test(r)?M:r||M}catch{return M}}(r,t);return i.push({expr:r.trim(),result:n}),n===M?n:P(n)}),n?n.replace(new RegExp(M,"g"),"").replace(/Reflect\.[^<>{}\s]+|\bProxy\b|ownKeys\([^)]*\)/g,""):n);var n;const o=i.length&&i.every(e=>""===e.result||e.result===M);return V.test(e)||o?"":r}var V=/Reflect|Proxy|ownKeys/;function K(e){if(V.test(e.textContent||"")){for(const t of e.childNodes)t.nodeType===Node.TEXT_NODE&&V.test(t.textContent||"")&&(t.textContent="");V.test(e.textContent||"")&&(e.textContent="")}}function j(e){if(V.test(e)){const e=()=>"";return e.__blocked=!0,e}const t=t=>B(e,t);return t.__blocked=!1,t}function U(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}var Y=class{static dependencies;static manifest;aliases;version="3.8.0";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#e;get defaultConfig(){return{}}constructor(e={}){this.userConfig=e}get resolvedConfig(){return this.#e?this.config:{...this.defaultConfig,...this.userConfig}}mergeConfigsFrom(e){if(0===e.length)return;const t={...this.userConfig},i={};for(const r of Object.keys(t))i[r]=this;for(const r of e){const e=r.userConfig;for(const[n,o]of Object.entries(e)){if(void 0===o)continue;if(!(n in t)){t[n]=o,i[n]=r;continue}if(t[n]===o)continue;const e=i[n]?.constructor.name??this.constructor.name,s=r.constructor.name,l=S("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)}refreshUserConfigFrom(e){const t=this.userConfig,i={...e.userConfig};for(const r of Object.keys(t))delete t[r];Object.assign(t,i)}attach(e){this.#e?.abort(),this.#e=new AbortController,this.grid=e,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#e?.abort(),this.#e=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 i=new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(i),i.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)}queryBoolean(e,t=null){const i=this.grid?.query?.(e,t);return Array.isArray(i)?i.some(Boolean):!!i}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.#e?.signal??this.grid?.disconnectSignal}get gridIcons(){const e=this.grid?.gridConfig?.icons??{};return{...p,...e}}t(e,t){return this.grid?.effectiveConfig?.locale?.[e]??t}get translate(){return(e,t)=>this.t(e,t)}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;return!t||"0"!==getComputedStyle(t).getPropertyValue("--tbw-animation-enabled").trim()}get animationDuration(){const e=this.gridElement;if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-animation-duration").trim(),i=parseInt(t,10);if(!isNaN(i))return i}return 200}setIcon(e,t,i){e.dataset.icon=U(t),"collapse"===t?e.dataset.expanded="":"expand"===t&&delete e.dataset.expanded;const r=this.#t(t,i);void 0!==r?"string"==typeof r?q(e,r):r instanceof HTMLElement&&e.replaceChildren(r.cloneNode(!0)):e.innerHTML=""}#t(e,t){return void 0!==t?t:this.grid?.gridConfig?.icons?.[e]}updateSortIndicator(e,t){e.querySelector('[part~="sort-indicator"], .sort-indicator')?.remove();const i=document.createElement("span");i.setAttribute("part","sort-indicator"),i.className="sort-indicator",t?(e.setAttribute("aria-sort","asc"===t?"ascending":"descending"),e.setAttribute("data-sort",t),this.setIcon(i,"asc"===t?"sortAsc":"sortDesc")):(e.setAttribute("aria-sort","none"),e.removeAttribute("data-sort"),this.setIcon(i,"sortNone"));const r=e.querySelector(".tbw-filter-btn")??e.querySelector(".resize-handle");return r?e.insertBefore(i,r):e.appendChild(i),i}warn(e,t){void 0!==t?console.warn(S(e,t,this.gridElement.id,this.name)):console.warn(`${f(this.gridElement.id,this.name)} ${e}`)}throwDiagnostic(e,t){throw new Error(S(e,t,this.gridElement.id,this.name))}};function Z(e,t,i=!0){let r=e;if(i&&(r=r.filter(e=>!e.hidden&&!e.field.startsWith("__")&&!0!==e.utility)),t?.length){const e=new Set(t);r=r.filter(t=>e.has(t.field))}return r}function X(e,t){return t?.length?[...t].sort((e,t)=>e-t).map(t=>e[t]).filter(e=>null!=e):e}var Q=/^[=+\-@\t\r]/;function J(e,t){if("string"==typeof e){const i=!1!==t.escapeFormulas&&Q.test(e)?`'${e}`:e,r=t.quoting??"auto";return"always"===r||"auto"===r&&(i.includes(t.delimiter)||i.includes(t.newline)||i.includes('"')||i.includes("\n")||i.includes("\r"))?`"${i.replace(/"/g,'""')}"`:i}return"number"==typeof e?String(e):"boolean"==typeof e?e?"true":"false":null==e?"":e instanceof Date?e.toISOString():"object"==typeof e?JSON.stringify(e):String(e)}var ee="data-tbw-clip";function te(e,t,i){const r=e?`<thead><tr>${e.map(e=>`<th>${P(e)}</th>`).join("")}</tr></thead>`:"",n=`<tbody>${t.map(e=>`<tr>${e.map(e=>`<td>${P(e)}</td>`).join("")}</tr>`).join("")}</tbody>`;return`<table ${ee}="${function(e){return btoa(encodeURIComponent(JSON.stringify(e)))}(i)}">${r}${n}</table>`}function ie(e,t){const i=t.delimiter??"\t",r=t.newline??"\n",n=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),o=n.length,s=[];let l=[],a=0,d=!1,c=!1;const u=e=>{const t=n.slice(a,e);return c?function(e){let t="",i=!1;for(let r=0;r<e.length;r++){const n=e[r];'"'===n?i?'"'===e[r+1]?(t+='"',r++):i=!1:i=!0:t+=n}return t}(t):t},h=()=>{(l.length>1||l.some(e=>""!==e.trim()))&&s.push(l),l=[]};for(let g=0;g<o;g++){const e=n[g];'"'===e?(c=!0,d?'"'===n[g+1]?g++:d=!1:d=!0):e!==i||d?e!==r||d||(l.push(u(g)),a=g+1,c=!1,h()):(l.push(u(g)),a=g+1,c=!1)}return l.push(u(o)),h(),s}function re(e,t){if(!1===e)return{accepted:!1,reason:"column"};if("function"==typeof e){const i=e(t);if(!1===i)return{accepted:!1,reason:"cell"};if(i&&"object"==typeof i&&"value"in i)return{accepted:!0,value:i.value}}return{accepted:!0,value:t.value}}function ne(e,t){0!==t.length&&e.dispatchEvent?.(new CustomEvent("paste-rejected",{detail:{rejected:t},bubbles:!0}))}function oe(e,t){const{rows:i,rawRows:r,target:n,fields:o,fillSelection:l,sourceFields:a}=e;if(!n||0===i.length)return;const c=r??i,h=t.rows,g=t.effectiveConfig.columns??[],p=g.map(e=>e.field),f=new Map(g.map(e=>[e.field,e])),[m=()=>!1]=t.query("getCellEditableResolver"),w=/* @__PURE__ */new Map;let b=h.length;const v=[],y=(e,t,i,r,n)=>{if(!t||!m(t,r))return;const o=re(f.get(t)?.onPaste,{value:i,field:t,row:r,rowIndex:e,oldValue:s(r,t),sourceField:n});if(!o.accepted)return void v.push({field:t,rowIndex:e,row:r,value:i,reason:o.reason});let l=w.get(e);l||(l={},w.set(e,l)),l[t]=se(o.value)};if(l&&n.bounds){const e=c.length;for(let t=n.row;t<=n.bounds.endRow&&!(t>=h.length);t++){const i=c[(t-n.row)%e],r=i.length;if(0===r)continue;const s=h[t];o.forEach((e,n)=>y(t,e,i[n%r],s,a?.[n%r]))}}else{const e=n.bounds?n.bounds.endRow:1/0;c.forEach((t,i)=>{const r=n.row+i;if(r>e)return;if(n.bounds&&r>=h.length)return;!n.bounds&&r>=b&&(b=r+1);const s=h[r]??{};t.forEach((e,t)=>y(r,o[t],e,s,a?.[t]))})}if(0===w.size&&b===h.length)return void ne(t,v);if(b>h.length){const e=[...h];for(;e.length<b;){const t={};p.forEach(e=>t[e]=""),e.push(t)}t.rows=e}const C=t.rows,x=[];let R=!1;for(const[s,S]of w){const e=C[s];if(!e)continue;let i;try{i=t.getRowId(e)}catch{i=void 0}if(null==i){for(const[t,i]of Object.entries(S))d(e,t,i),u(e,t);R=!0}else x.push({id:i,changes:S})}x.length>0?t.updateRows(x,"paste"):R&&b===h.length&&(t.rows=[...C]),ne(t,v)}function se(e){if(null===e||"object"!=typeof e)return e;try{return structuredClone(e)}catch{return e}}var le,ae=class extends Y{static manifest={queries:[{type:"clipboard:copy",description:"Triggers a copy operation and returns the copied text"}]};static dependencies=[{name:"selection",required:!1,reason:"Enables copy/paste of selected cells instead of entire grid"}];name="clipboard";get defaultConfig(){return{includeHeaders:!1,delimiter:"\t",newline:"\n",quoteStrings:!1}}lastCopied=null;#i=null;attach(e){super.attach(e),e.addEventListener("paste",e=>this.#r(e),{signal:this.disconnectSignal})}detach(){this.lastCopied=null,this.#i=null}handleQuery(e){if("clipboard:copy"===e.type)return this.copy(),!0}onKeyDown(e){return!(!e.ctrlKey&&!e.metaKey||"c"!==e.key)&&(e.preventDefault(),this.#n(e.target),!0)}#n(e){const t=this.#o();if(t&&0===t.ranges.length){let i,r;if(t.anchor)i=t.anchor.row,r=this.visibleColumns[t.anchor.col]?.field;else{const t=this.#s(e);t&&(i=t.row,r=this.columns[t.col]?.field)}if(null==i||null==r)return;return void this.copy({rowIndices:[i],columns:[r]})}this.copy()}#r(e){if(this.#l(e.target))return;const t=e.clipboardData?.getData("text/plain");if(!t)return;e.preventDefault();const i=ie(t,this.config),r=this.#o(),n=r?.ranges??[],o=n[0];let s=1/0,l=1/0,a=-1/0,d=-1/0;for(const S of n)s=Math.min(s,S.from.row,S.to.row),a=Math.max(a,S.from.row,S.to.row),l=Math.min(l,S.from.col,S.to.col),d=Math.max(d,S.from.col,S.to.col);const c=r?.anchor??null,u=o?s:c?.row??0,h=o?l:c?.col??0,g=!o||"range"!==r?.mode&&"row"!==r?.mode||s===a&&l===d?null:{endRow:a,endCol:d},p=g?.endCol??this.visibleColumns.length-1;let f,m;if(this.#a(i),this.#i&&this.#i.text===t&&this.#i.rawRows.length===i.length)f=this.#i.rawRows,m=this.#i.fields;else{const t=function(e){if(!e||-1===e.indexOf("data-tbw-clip"))return null;try{const t=e.match(new RegExp(`${ee}="([A-Za-z0-9+/=]*)"`))?.[1];if(!t)return null;const i=JSON.parse(decodeURIComponent(atob(t)));return i&&Array.isArray(i.rows)&&Array.isArray(i.fields)?i:null}catch{return null}}(e.clipboardData?.getData("text/html"));t&&t.rows.length===i.length&&(f=t.rows,m=t.fields)}const w=this.visibleColumns[h],b=w?{row:u,col:h,field:w.field,bounds:g}:null,v=!0===this.config.fillSelection&&null!==g,y=[],C=i[0]?.length??0,x=v?p-h+1:C;for(let S=0;S<x&&h+S<=p;S++){const e=this.visibleColumns[h+S];e&&y.push(e.field)}const R={rows:i,text:t,target:b,fields:y,fillSelection:v,rawRows:f,sourceFields:m};this.emit("paste",R),this.#d(R)}#d(e){if(!this.grid)return;const{pasteHandler:t}=this.config;null!==t&&(t??oe)(e,this.grid)}#a(e){if(!this.config.includeHeaders)return;if(e.length<=1)return;const t=e[0];if(0===t.length)return;const i=this.#c();for(const r of t)if(!i.has(r))return;e.shift()}#c(){const e=/* @__PURE__ */new Set;for(const t of this.columns){const i=t.header||t.field;i&&e.add(i)}return e}#l(e){return e instanceof Element&&!!e.closest('input, textarea, select, [contenteditable=""], [contenteditable="true"]')}#o(){return(this.grid?.query("getSelection"))?.[0]}#u(e){const t=this.#o(),i=t?.ranges??[];let r,n=1/0,o=-1/0,s=1/0,l=-1/0;for(const g of i)n=Math.min(n,g.from.row,g.to.row),o=Math.max(o,g.from.row,g.to.row),s=Math.min(s,g.from.col,g.to.col),l=Math.max(l,g.from.col,g.to.col);let a,d=null;e?.columns?r=Z(this.columns,e.columns):i.length&&"row"!==t?.mode?(r=Z(this.visibleColumns.slice(s,l+1)),d=r.map(e=>this.visibleColumns.indexOf(e))):r=Z(this.columns);let c=null;if(e?.rowIndices)a=X(this.rows,e.rowIndices);else if(i.length){const e="row"===t?.mode,r=e=>i.some(t=>e>=Math.min(t.from.row,t.to.row)&&e<=Math.max(t.from.row,t.to.row));a=[],c=[];for(let t=n;t<=o;t++){const i=this.rows[t];i&&(e&&!r(t)||(a.push(i),c.push(t)))}}else a=this.rows;const u=c,h=d;return{columns:r,rows:a,contains:u&&h?(e,t)=>{const r=u[e],n=h[t];return i.some(e=>r>=Math.min(e.from.row,e.to.row)&&r<=Math.max(e.from.row,e.to.row)&&n>=Math.min(e.from.col,e.to.col)&&n<=Math.max(e.from.col,e.to.col))}:null}}#h(e,t,i,r){return this.#g(this.#p(e,t,i,r),i)}#p(e,t,i,r){const n=i?.includeHeaders??this.config.includeHeaders??!1,o=i?.processCell??this.config.processCell;return{header:n?e.map(e=>e.header||e.field):null,rows:t.map((t,i)=>e.map((e,n)=>{if(r&&!r(i,n))return"";const s=c(t,e);return o?o(s,e.field,t):this.#f(e,s,t)}))}}#g(e,t){const i=t?.delimiter??this.config.delimiter??"\t",r=t?.newline??this.config.newline??"\n",n=[];e.header&&n.push(e.header.join(i));for(const o of e.rows)n.push(o.join(i));return n.join(r)}#f(e,t,i){if(e.format)try{const r=e.format(t,i);return null==r?"":String(r)}catch{}if(e.renderer||e.viewRenderer){const t=this.#m(e.field,i);if(null!=t)return t}return function(e){return null==e?"":e instanceof Date?e.toISOString():"object"==typeof e?JSON.stringify(e):String(e)}(t)}#m(e,t){const i=this.gridElement;if(!i)return null;const r=this.rows.indexOf(t);if(-1===r)return null;const n=i.querySelector(`.cell[data-row="${r}"][data-field="${e}"]`);return n?n.textContent?.trim()??null:null}#s(e){const t=e.closest(".cell[data-field]");if(!t)return null;const i=t.dataset.field,r=t.dataset.row;if(!i||!r)return null;const n=parseInt(r,10);if(isNaN(n))return null;const o=this.columns.findIndex(e=>e.field===i);return-1===o?null:{row:n,col:o}}getSelectionAsText(e){const{columns:t,rows:i,contains:r}=this.#u(e);return 0===t.length||0===i.length?"":this.#h(t,i,e,r)}async copy(e){const{columns:t,rows:i,contains:r}=this.#u(e);if(0===t.length||0===i.length)return"";const n=this.#p(t,i,e,r),o=this.#g(n,e),s=i.map((e,i)=>t.map((t,n)=>r&&!r(i,n)?"":se(c(e,t)))),l=t.map(e=>e.field);return await async function(e,t){if(t&&"undefined"!=typeof ClipboardItem&&navigator.clipboard?.write)try{return await navigator.clipboard.write([new ClipboardItem({"text/plain":new Blob([e],{type:"text/plain"}),"text/html":new Blob([t],{type:"text/html"})})]),!0}catch{}try{return await navigator.clipboard.writeText(e),!0}catch(i){A("TBW100",`Clipboard API failed: ${i}`);const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",t.style.pointerEvents="none",document.body.appendChild(t),t.select();const r=document.execCommand("copy");return document.body.removeChild(t),r}}(o,te(n.header,n.rows,{v:1,fields:l,rows:s})),this.lastCopied={text:o,timestamp:Date.now()},this.#i={text:o,rawRows:s,fields:l},this.emit("copy",{text:o,rowCount:i.length,columnCount:t.length}),o}async copyRows(e,t){return 0===e.length?"":this.copy({...t,rowIndices:e})}async paste(){const e=await async function(){try{return await navigator.clipboard.readText()}catch{return""}}();return e?ie(e,this.config):null}getLastCopied(){return this.lastCopied}};function de(e){le=e}var ce="3.8.0",ue=Symbol.for(`@toolbox-web/grid:feature-registry@${ce}/v1`),he=Symbol.for(`@toolbox-web/grid:feature-registry-warned@${ce}/v1`);function ge(e,t){let i=Reflect.get(globalThis,e);return void 0===i&&(i=t(),Reflect.set(globalThis,e,i)),i}var pe=ge(ue,()=>/* @__PURE__ */new Map),fe=ge(he,()=>/* @__PURE__ */new Set),me=()=>"undefined"!=typeof window&&("localhost"===window.location?.hostname||"127.0.0.1"===window.location?.hostname);function we(e,t,i){me()&&pe.has(e)&&!i?.override&&A("TBW030",`Feature "${e}" was re-registered. Previous registration overwritten.`),pe.set(e,{factory:t,name:e})}var be={undoRedo:["editing"],clipboard:["selection"]};function ve(e,t){const i=pe.get(e);if(i)return i.factory(t);if(me()&&!fe.has(e)){fe.add(e);const t=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();A("TBW031",`Feature "${e}" is configured but not registered.\nAdd this import to enable it:\n\n import '@toolbox-web/grid/features/${t}';\n`)}}de(function(e){const t=[];for(const[r,n]of Object.entries(e))void 0!==n&&!1!==n&&t.push(r);!function(e){const t=new Set(e);for(const i of e){const e=be[i];if(e)for(const r of e)t.has(r)||me()&&A("TBW032",`Feature "${i}" requires "${r}" to be enabled. Add "${r}" to your features configuration.`)}}(t);const i=[];for(const r of t){const t=ve(r,e[r]);t&&i.push(t)}return function(e){if(e.length<2)return e;const t=/* @__PURE__ */new Map;for(const s of e)t.set(s.name,s);const i=[],r=/* @__PURE__ */new Set,n=/* @__PURE__ */new Set,o=e=>{if(r.has(e)||n.has(e))return;n.add(e);const s=e.constructor.dependencies??[];for(const i of s){const e=t.get(i.name);e&&o(e)}n.delete(e),r.add(e),i.push(e)};for(const s of e)o(s);return i}(i)}),we("clipboard",e=>new ae("boolean"==typeof e?{}:e??{}));function ye(e){if(null==e)return 100;if("number"==typeof e)return e;const t=parseFloat(e);return isNaN(t)?100:t}function Ce(e){return e.map(e=>ye(e.width))}function xe(e){const t=[];let i=0;for(const r of e)t.push(i),i+=ye(r.width);return t}function Re(e){return e.reduce((e,t)=>e+ye(t.width),0)}function Se(e,t,i,r,n){const o=i.length;if(0===o)return{startCol:0,endCol:0,visibleColumns:[]};let s=function(e,t,i){let r=0,n=t.length-1;for(;r<n;){const o=Math.floor((r+n)/2);t[o]+i[o]<=e?r=o+1:n=o}return r}(e,i,r);s=Math.max(0,s-n);const l=e+t;let a=s;for(let c=s;c<o;c++){if(i[c]>=l){a=c-1;break}a=c}a=Math.min(o-1,a+n);const d=[];for(let c=s;c<=a;c++)d.push(c);return{startCol:s,endCol:a,visibleColumns:d}}var Ee=class extends Y{name="columnVirtualization";get defaultConfig(){return{autoEnable:!0,threshold:30,overscan:3}}isVirtualized=!1;startCol=0;endCol=0;scrollLeft=0;totalWidth=0;columnWidths=[];columnOffsets=[];originalColumns=[];attach(e){super.attach(e);const t=this.columns;this.columnWidths=Ce(t),this.columnOffsets=xe(t),this.totalWidth=Re(t),this.endCol=t.length-1}detach(){this.#w(),this.columnWidths=[],this.columnOffsets=[],this.originalColumns=[],this.isVirtualized=!1,this.startCol=0,this.endCol=0,this.scrollLeft=0,this.totalWidth=0}#w(){const e=this.gridElement;if(!e)return;const t=e.querySelector(".header-row");t&&(t.style.paddingLeft="",t.style.minWidth=""),e.querySelectorAll(".data-grid-row").forEach(e=>{e.style.paddingLeft=""});const i=e.querySelector(".rows-viewport .rows");i&&(i.style.width="");const r=e.querySelector(".rows-body");r&&(r.style.minWidth="")}processColumns(e){(0===this.originalColumns.length||e.length>=this.originalColumns.length)&&(this.originalColumns=e,this.columnWidths=Ce(e),this.columnOffsets=xe(e),this.totalWidth=Re(e));const t=this.originalColumns,i=(r=t.length,n=this.config.threshold??30,!!(this.config.autoEnable??!0)&&r>n);var r,n;if(this.isVirtualized=i??!1,!i)return this.startCol=0,this.endCol=t.length-1,[...t];const o=this.grid?.clientWidth||800,s=Se(this.scrollLeft,o,this.columnOffsets,this.columnWidths,this.config.overscan??3);return this.startCol=s.startCol,this.endCol=s.endCol,s.visibleColumns.map(e=>t[e])}afterRender(){if(!this.isVirtualized)return;const e=this.gridElement;if(!e)return;const t=this.columnOffsets[this.startCol]??0,i=e.querySelector(".header-row"),r=e.querySelectorAll(".data-grid-row");i&&(i.style.paddingLeft=`${t}px`,i.style.minWidth=`${this.totalWidth}px`),r.forEach(e=>{e.style.paddingLeft=`${t}px`});const n=e.querySelector(".rows-viewport .rows");n&&(n.style.width=`${this.totalWidth}px`);const o=e.querySelector(".rows-body");o&&(o.style.minWidth=`${this.totalWidth}px`)}onScroll(e){this.isVirtualized&&(Math.abs(e.scrollLeft-this.scrollLeft)<1||(this.scrollLeft=e.scrollLeft,this.requestColumnsRender()))}getIsVirtualized(){return this.isVirtualized}getVisibleColumnRange(){return{start:this.startCol,end:this.endCol}}scrollToColumn(e){const t=this.columnOffsets[e]??0,i=this.gridElement;i&&(i.scrollLeft=t)}getColumnOffset(e){return this.columnOffsets[e]??0}getTotalWidth(){return this.totalWidth}};we("columnVirtualization",e=>new Ee("boolean"==typeof e?{}:e??{}));function Ae(e,t){return("function"==typeof e?e(t):e).filter(e=>!0!==e.hidden&&("function"!=typeof e.hidden||!e.hidden(t)))}function _e(e,t){return!0===e.disabled||"function"==typeof e.disabled&&e.disabled(t)}function ke(e,t,i,r){const n=document.createElement("div");n.className="tbw-context-menu",n.setAttribute("role","menu");const o=e.some(e=>!e.separator&&e.icon);for(const s of e){if(s.separator){const e=document.createElement("div");e.className="tbw-context-menu-separator",e.setAttribute("role","separator"),n.appendChild(e);continue}const e=document.createElement("div");e.className="tbw-context-menu-item",s.cssClass&&e.classList.add(s.cssClass),e.setAttribute("role","menuitem"),e.setAttribute("data-id",s.id),e.setAttribute("tabindex","-1");const l=_e(s,t);if(l&&(e.classList.add("disabled"),e.setAttribute("aria-disabled","true")),s.icon){const t=document.createElement("span");t.className="tbw-context-menu-icon",q(t,s.icon),e.appendChild(t)}else if(o){const t=document.createElement("span");t.className="tbw-context-menu-icon",t.innerHTML="&nbsp;",e.appendChild(t)}const a=document.createElement("span");if(a.className="tbw-context-menu-label",a.textContent=s.name,e.appendChild(a),s.shortcut){const t=document.createElement("span");if(t.className="tbw-context-menu-shortcut",Array.isArray(s.shortcut))s.shortcut.forEach((e,i)=>{i>0&&t.appendChild(document.createTextNode("+"));const r=document.createElement("kbd");r.textContent=e,t.appendChild(r)});else{const e=document.createElement("kbd");e.textContent=s.shortcut,t.appendChild(e)}e.appendChild(t)}if(s.subMenu?.length){const n=document.createElement("span");n.className="tbw-context-menu-arrow",n.dataset.icon=U("submenuArrow"),void 0!==r&&("string"==typeof r?q(n,r):r instanceof HTMLElement&&n.appendChild(r.cloneNode(!0))),e.appendChild(n),e.addEventListener("mouseenter",()=>{if(e.querySelector(".tbw-context-menu"))return;if(!s.subMenu)return;const n=ke(Ae(s.subMenu,t),t,i,r);n.classList.add("tbw-context-submenu"),n.style.position="absolute",n.style.left="100%",n.style.top="0",e.style.position="relative",e.appendChild(n)}),e.addEventListener("mouseleave",()=>{const t=e.querySelector(".tbw-context-menu");t&&t.remove()})}l||!s.action||s.subMenu||e.addEventListener("click",e=>{e.stopPropagation(),i(s)}),n.appendChild(e)}return n}var Te="getContextMenuItems",Me=null,Ie=null,Le=0,De=/* @__PURE__ */new Set,Pe=[{id:"copy",name:"Copy",shortcut:"Ctrl+C",action:e=>{e.grid?.query?.("clipboard:copy")}},{separator:!0,id:"sep1",name:""},{id:"export-csv",name:"Export CSV",action:e=>{e.grid?.query?.("export:csv")}}],Fe=class e extends Y{static manifest={queries:[{type:Te,description:"Collects context menu items from other plugins for header right-click menus"}]};name="contextMenu";get defaultConfig(){return{items:Pe}}isOpen=!1;position={x:0,y:0};params=null;menuElement=null;boundHost=null;attach(e){super.attach(e),this.installGlobalHandlers(),Le++,De.add(this)}detach(){this.menuElement&&(this.menuElement.remove(),this.menuElement=null),this.isOpen=!1,this.params=null,this.boundHost=null,De.delete(this),this.uninstallGlobalHandlers()}syncSelectionOnContextMenu(e){if(e<0)return[];const t=(this.grid?.query("getSelectedRowIndices"))?.[0];return t?t.includes(e)?t:(this.grid?.query("selectRows",[e]),[e]):[e]}static CSS_VARS_TO_COPY=["--tbw-color-panel-bg","--tbw-color-fg","--tbw-color-fg-muted","--tbw-color-border","--tbw-color-row-hover","--tbw-color-shadow","--tbw-color-danger","--tbw-border-radius","--tbw-font-family","--tbw-font-size-sm","--tbw-font-size-xs","--tbw-font-size-2xs","--tbw-spacing-xs","--tbw-icon-size","--tbw-menu-min-width","--tbw-menu-item-padding","--tbw-menu-item-gap","--tbw-context-menu-bg","--tbw-context-menu-fg","--tbw-context-menu-border","--tbw-context-menu-radius","--tbw-context-menu-shadow","--tbw-context-menu-hover","--tbw-context-menu-danger","--tbw-context-menu-muted","--tbw-context-menu-min-width","--tbw-context-menu-font-size","--tbw-context-menu-font-family","--tbw-context-menu-item-padding","--tbw-context-menu-item-gap","--tbw-context-menu-icon-size","--tbw-context-menu-shortcut-size","--tbw-context-menu-arrow-size","--tbw-icon-submenu-arrow"];copyGridStyles(t){const i=this.gridElement;if(!i)return;const r=getComputedStyle(i),n=[],o=r.getPropertyValue("color-scheme").trim();o&&n.push(`color-scheme: ${o}`);for(const s of e.CSS_VARS_TO_COPY){const e=r.getPropertyValue(s).trim();e&&n.push(`${s}: ${e}`)}if(n.length>0){const e=t.getAttribute("style")||"";t.setAttribute("style",e+n.join("; ")+";")}}installGlobalHandlers(){if(Ie||"undefined"==typeof document||((Ie=document.createElement("style")).id="tbw-context-menu-styles",Ie.textContent="@layer tbw-plugins{.tbw-context-menu{background:var(--tbw-context-menu-bg,var(--tbw-color-panel-bg));color:var(--tbw-context-menu-fg,var(--tbw-color-fg));border:1px solid var(--tbw-context-menu-border,var(--tbw-color-border));border-radius:var(--tbw-context-menu-radius,var(--tbw-border-radius));box-shadow:var(--tbw-context-menu-shadow,0 2px 10px var(--tbw-color-shadow));min-width:var(--tbw-context-menu-min-width,var(--tbw-menu-min-width));padding:var(--tbw-spacing-xs) 0;z-index:10000;font-size:var(--tbw-context-menu-font-size,var(--tbw-font-size-sm));font-family:var(--tbw-context-menu-font-family,var(--tbw-font-family));position:fixed}.tbw-context-menu-item{padding:var(--tbw-context-menu-item-padding,var(--tbw-menu-item-padding));cursor:pointer;align-items:center;gap:var(--tbw-context-menu-item-gap,var(--tbw-menu-item-gap));display:flex}.tbw-context-menu-item:hover:not(.disabled){background:var(--tbw-context-menu-hover,var(--tbw-color-row-hover))}.tbw-context-menu-item.disabled{opacity:.5;cursor:default}.tbw-context-menu-item.danger{color:var(--tbw-context-menu-danger,var(--tbw-color-danger))}.tbw-context-menu-icon{width:var(--tbw-context-menu-icon-size,var(--tbw-icon-size));text-align:center}.tbw-context-menu-label{flex:1}.tbw-context-menu-shortcut kbd{color:var(--tbw-context-menu-muted,var(--tbw-color-fg-muted));font-size:var(--tbw-context-menu-shortcut-size,var(--tbw-font-size-xs))}.tbw-context-menu-arrow{font-size:var(--tbw-context-menu-arrow-size,var(--tbw-font-size-2xs));color:var(--tbw-context-menu-muted,var(--tbw-color-fg-muted))}.tbw-context-menu-separator{background:var(--tbw-context-menu-border,var(--tbw-color-border));height:1px;margin:var(--tbw-spacing-xs) 0}}",document.head.appendChild(Ie)),!Me){const e=(Me=new AbortController).signal,t=()=>{for(const e of De)e.isMenuOpen()&&e.hideMenu();document.querySelectorAll(".tbw-context-menu").forEach(e=>e.remove())};document.addEventListener("click",t,{signal:e}),document.addEventListener("keydown",e=>{"Escape"===e.key&&t()},{signal:e}),document.addEventListener("scroll",t,{capture:!0,signal:e})}}uninstallGlobalHandlers(){--Le>0||(Me&&(Me.abort(),Me=null),Ie&&(Ie.remove(),Ie=null))}collectPluginItems(e){if(!this.grid)return[];const t=this.grid.query(Te,e),i=[];for(const r of t)Array.isArray(r)&&i.push(...r);return i.sort((e,t)=>(e.order??100)-(t.order??100)),this.insertGroupSeparators(i)}insertGroupSeparators(e){if(e.length<=1)return e;const t=[];let i=-1;for(const r of e){if(r.separator){t.push(r);continue}const e=Math.floor((r.order??100)/10);i>=0&&e!==i&&t.push({id:`__sep-${i}-${e}`,label:"",separator:!0,action:()=>{}}),i=e,t.push(r)}return t}convertPluginItems(e){return e.map(e=>({id:e.id,name:e.label,icon:e.icon,shortcut:e.shortcut,disabled:e.disabled??!1,action:()=>e.action(),separator:e.separator,cssClass:e.cssClass}))}openMenuAt(e,t,i,r=!1){this.params=e,this.position={x:t,y:i};const n=this.collectPluginItems(e);let o=Ae(this.config.items??Pe,e);if(n.length>0){const e=this.convertPluginItems(n);o=o.length>0&&e.length>0?[...o,{id:"__plugin-sep",name:"",separator:!0},...e]:[...o,...e]}var s,l;(o=function(e){const t=[];for(const i of e)i.separator&&(0===t.length||t[t.length-1].separator)||t.push(i);return t.length>0&&t[t.length-1].separator&&t.pop(),t}(o),o.length)&&(document.querySelectorAll(".tbw-context-menu").forEach(e=>e.remove()),this.menuElement=null,this.menuElement=ke(o,e,t=>{t.action&&t.action(e),this.hideMenu()},this.grid?.gridConfig?.icons?.submenuArrow),s=this.menuElement,l=()=>this.hideMenu(),s.addEventListener("keydown",e=>{const t=Array.from(s.querySelectorAll('[role="menuitem"]:not(.disabled)'));if(!t.length)return;const i=document.activeElement,r=t.indexOf(i);switch(e.key){case"ArrowDown":e.preventDefault(),t[r<t.length-1?r+1:0].focus();break;case"ArrowUp":e.preventDefault(),t[r>0?r-1:t.length-1].focus();break;case"Enter":case" ":e.preventDefault(),i&&t.includes(i)&&i.click();break;case"Escape":e.preventDefault(),l()}}),document.body.appendChild(this.menuElement),this.copyGridStyles(this.menuElement),function(e,t,i){e.style.position="fixed",e.style.left=`${t}px`,e.style.top=`${i}px`,e.style.visibility="hidden",e.style.zIndex="10000";const r=e.getBoundingClientRect(),n=window.innerWidth,o=window.innerHeight;let s=t,l=i;t+r.width>n&&(s=t-r.width),i+r.height>o&&(l=i-r.height),s=Math.max(0,s),l=Math.max(0,l),e.style.left=`${s}px`,e.style.top=`${l}px`,e.style.visibility="visible"}(this.menuElement,t,i),this.isOpen=!0,r&&function(e){e.querySelector('[role="menuitem"]:not(.disabled)')?.focus()}(this.menuElement),this.emit("context-menu-open",{params:e,items:o}))}openMenuAtFocusedCell(e){const t=this.grid;if(!t)return!1;const i=t._focusRow,r=t._focusCol;if(i<0||r<0)return!1;const n=this.visibleColumns[r],o=this.rows[i],s=this.gridElement?.querySelector(`[data-row="${i}"][data-col="${r}"]`);let l=0,a=0;if(s){const e=s.getBoundingClientRect();l=e.left+e.width/2,a=e.bottom}const d=this.syncSelectionOnContextMenu(i);return this.openMenuAt({row:o,rowIndex:i,column:n,columnIndex:r,field:n?.field??"",value:o?.[n?.field]??null,isHeader:!1,event:e,selectedRows:d},l,a,!0),!0}handleContextMenu=e=>{const t=e;t.preventDefault();const i=t.target,r=i?.closest("[data-row][data-col]"),n=i?.closest('[part~="header-cell"]');let o;if(r){const e=parseInt(r.getAttribute("data-row")??"-1",10),i=parseInt(r.getAttribute("data-col")??"-1",10),n=this.visibleColumns[i],s=this.rows[e],l=this.syncSelectionOnContextMenu(e);o={row:s,rowIndex:e,column:n,columnIndex:i,field:n?.field??"",value:s?.[n?.field]??null,isHeader:!1,event:t,selectedRows:l}}else{if(!n)return void(-1===t.button&&t.target===this.boundHost&&this.openMenuAtFocusedCell(t));{const e=parseInt(n.getAttribute("data-col")??"-1",10),i=this.visibleColumns[e];o={row:null,rowIndex:-1,column:i,columnIndex:e,field:i?.field??"",value:null,isHeader:!0,event:t,selectedRows:[]}}}this.openMenuAt(o,t.clientX,t.clientY)};afterRender(){const e=this.gridElement;e&&this.boundHost!==e&&(this.boundHost=e,e.addEventListener("contextmenu",this.handleContextMenu,{signal:this.disconnectSignal}))}onKeyDown(e){const t="F10"===e.key&&e.shiftKey,i="ContextMenu"===e.key;if((t||i)&&(e.preventDefault(),this.openMenuAtFocusedCell(e)))return!0}showMenu(e,t,i){const r={row:i.row??null,rowIndex:i.rowIndex??-1,column:i.column??null,columnIndex:i.columnIndex??-1,field:i.field??"",value:i.value??null,isHeader:i.isHeader??!1,event:i.event??new MouseEvent("contextmenu"),selectedRows:i.selectedRows??[]};this.openMenuAt(r,e,t)}hideMenu(){this.menuElement&&(this.menuElement.remove(),this.menuElement=null),this.isOpen&&(this.isOpen=!1)}isMenuOpen(){return this.isOpen}};we("contextMenu",e=>new Fe("boolean"==typeof e?{}:e??{}));var He='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])',Ge={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"},ze={FIELD:"data-field",TRUNCATED:"data-tbw-truncated",GROUP_KEY:"data-group-key"},Oe={ROOT:`.${Ge.ROOT}`,HEADER:`.${Ge.HEADER}`,HEADER_ROW:`.${Ge.HEADER_ROW}`,HEADER_CELL:`.${Ge.HEADER_CELL}`,ROWS_VIEWPORT:`.${Ge.ROWS_VIEWPORT}`,ROWS_CONTAINER:`.${Ge.ROWS_CONTAINER}`,DATA_ROW:`.${Ge.DATA_ROW}`,DATA_CELL:`.${Ge.DATA_CELL}`,GROUP_ROW:`.${Ge.GROUP_ROW}`,CELL_BY_FIELD:e=>`.${Ge.DATA_CELL}[${ze.FIELD}="${e}"]`,SELECTED_ROWS:`.${Ge.DATA_ROW}.${Ge.SELECTED}`,EDITING_CELL:`.${Ge.DATA_CELL}.${Ge.EDITING}`},Ne={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"};function qe(e,t){if(!e)return;if(!1===("effectiveConfig"in e?e.effectiveConfig:void 0)?.a11y?.announcements)return;const i=e.querySelector?.(".tbw-sr-only");i&&(i.textContent="","function"==typeof requestAnimationFrame?requestAnimationFrame(()=>{i.textContent=t}):i.textContent=t)}function $e(e,t,...i){const r=(e&&"effectiveConfig"in e?e.effectiveConfig:void 0)?.a11y?.messages?.[t];return r?r(...i):h[t](...i)}function We(){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 Be(e){return`<span role="checkbox" aria-checked="${e}" aria-label="${e}">${e?"&#x1F5F9;":"&#9744;"}</span>`}function Ve(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 Ke(e){if(!e)return-1;const t=e.getAttribute("data-row");if(t)return parseInt(t,10);const i=e.closest(".data-grid-row");if(!i)return-1;const r=i.parentElement;if(!r)return-1;const n=r.querySelectorAll(":scope > .data-grid-row");for(let o=0;o<n.length;o++)if(n[o]===i)return o;return-1}function je(e){e&&e.querySelectorAll(".cell-focus").forEach(e=>e.classList.remove("cell-focus"))}function Ue(e){try{if("rtl"===getComputedStyle(e).direction)return"rtl"}catch{}try{if("rtl"===e.closest?.("[dir]")?.getAttribute("dir"))return"rtl"}catch{}return"ltr"}function Ye(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 Ze(e,t,i){const r=Ye(t,i);return"string"==typeof r?e.byKey.get(r):r&&"object"==typeof r?e.byRef.get(r):void 0}function Xe(e,t){if(0===e.length)return-1;if(t<=0)return 0;let i=0,r=e.length-1;for(;i<=r;){const n=Math.floor((i+r)/2),o=e[n],s=o.offset+o.height;if(t<o.offset)r=n-1;else{if(!(t>=s))return n;i=n+1}}return Math.max(0,Math.min(i,e.length-1))}function Qe(e,t){const{positionCache:i,heightCache:r,rows:n,start:o,end:s,getPluginHeight:l,getRowId:a}=e;let d=!1;const c=[];t.forEach(e=>{const t=e.dataset.rowIndex;if(!t)return;const u=parseInt(t,10);if(u<o||u>=s||u>=n.length)return;const h=n[u],g=l?.(h,u);if(void 0!==g){const e=i[u];return void((!e.measured||Math.abs(e.height-g)>1)&&(c.push({index:u,height:g}),d=!0))}const p=e.offsetHeight;if(p>0){const e=i[u];(!e.measured||Math.abs(e.height-p)>1)&&(c.push({index:u,height:p}),function(e,t,i,r){const n=Ye(t,r);"string"==typeof n?e.byKey.set(n,i):n&&"object"==typeof n&&e.byRef.set(n,i)}(r,h,p,a),d=!0)}}),function(e,t){if(0===t.length||0===e.length)return;let i=t;for(let o=1;o<t.length;o++)if(t[o].index<t[o-1].index){i=[...t].sort((e,t)=>e.index-t.index);break}let r=0;for(;r<i.length&&i[r].index<0;)r++;if(r>=i.length||i[r].index>=e.length)return;let n=0;for(let o=i[r].index;o<e.length;o++){const t=e[o];for(t.offset+=n;r<i.length&&i[r].index===o;){const e=i[r].height,o=e-t.height;t.measured=!0,0!==o&&(t.height=e,n+=o),r++}}}(i,c);const u=d?function(e){let t=0;for(const i of e)i.measured&&t++;return t}(i):0,h=d?function(e,t){let i=0,r=0;for(const n of e)n.measured&&(i+=n.height,r++);return r>0?i/r:t}(i,e.defaultHeight):0;return{hasChanges:d,measuredCount:u,averageHeight:h}}var Je=335e5;function et(e,t,i=Je){return{rawContentHeight:e,spacerHeight:Math.min(e,i),viewportHeight:t,capped:e>i}}function tt(e,t){if(!t.capped)return e;const i=t.spacerHeight-t.viewportHeight,r=t.rawContentHeight-t.viewportHeight;if(i<=0||r<=0)return e;const n=e*r/i;return n<0?0:n>r?r:n}function it(e,t){if(!t.capped)return e;const i=t.spacerHeight-t.viewportHeight,r=t.rawContentHeight-t.viewportHeight;return i<=0||r<=0?e:e*i/r}function rt(e){"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit()}function nt(e){return void 0!==e._activeEditRows&&-1!==e._activeEditRows}function ot(e,t,i,r){e._focusCol=("rtl"===Ue(e)?!r:r)?Math.min(i,e._focusCol+1):Math.max(0,e._focusCol-1),t.preventDefault()}function st(e,t,i,r,n){(t.ctrlKey||t.metaKey)&&(nt(e)&&rt(e),e._focusRow=n?i:0),e._focusCol=n?r:0,t.preventDefault(),at(e,n?{forceScrollRight:!0}:{forceScrollLeft:!0})}function lt(e,t){if(e._dispatchKeyDown?.(t))return;const i=t.composedPath?.()??[];if(function(e,t,i){if(i&&i!==e&&!i.closest?.(".rows-body"))return!0;if(function(e){if(!e)return!1;const t=e.tagName;return"INPUT"===t||"SELECT"===t||"TEXTAREA"===t||!!e.isContentEditable}(i))switch(t.key){case"Home":case"End":case"ArrowLeft":case"ArrowRight":case"Enter":case"Escape":return!0;case"ArrowUp":case"ArrowDown":if("INPUT"===i.tagName&&"number"===i.type)return!0}const r=e._visibleColumns[e._focusCol]?.type;return nt(e)&&"select"===r&&("ArrowDown"===t.key||"ArrowUp"===t.key)}(e,t,i.length?i[0]:t.target))return;const r=e._rows.length-1,n=e._visibleColumns.length-1;switch(t.key){case"Tab":!function(e,t,i,r){if(t.preventDefault(),!t.shiftKey)return e._focusCol<r?void(e._focusCol+=1):(rt(e),void(e._focusRow<i&&(e._focusRow+=1,e._focusCol=0)));e._focusCol>0?e._focusCol-=1:e._focusRow>0&&(e._activeEditRows===e._focusRow&&rt(e),e._focusRow-=1,e._focusCol=r)}(e,t,r,n);break;case"ArrowDown":nt(e)&&rt(e),e._focusRow=Math.min(r,e._focusRow+1),t.preventDefault();break;case"ArrowUp":nt(e)&&rt(e),e._focusRow=Math.max(0,e._focusRow-1),t.preventDefault();break;case"ArrowRight":ot(e,t,n,!0);break;case"ArrowLeft":ot(e,t,n,!1);break;case"Home":return void st(e,t,r,n,!1);case"End":return void st(e,t,r,n,!0);case"PageDown":e._focusRow=Math.min(r,e._focusRow+20),t.preventDefault();break;case"PageUp":e._focusRow=Math.max(0,e._focusRow-20),t.preventDefault();break;case"Enter":if(function(e,t){const i=e._focusRow,r=e._focusCol,n=e._visibleColumns[r],o=e._rows[i],l=n?.field??"",a=new CustomEvent("cell-activate",{cancelable:!0,detail:{rowIndex:i,colIndex:r,column:n,field:l,value:l&&o?s(o,l):void 0,row:o,cellEl:e.querySelector(`[data-row="${i}"][data-col="${r}"]`),trigger:"keyboard",originalEvent:t}});return e.dispatchEvent(a),a.defaultPrevented}(e,t))return void t.preventDefault();break;default:return}at(e)}function at(e,t){!function(e){if(!e._virtualization?.enabled)return;const{rowHeight:t,container:i,viewportEl:r,scrollMapping:n}=e._virtualization,o=i,s=r?.clientHeight??o?.clientHeight??0;if(!o||s<=0)return;const l=e._getVerticalScrollOffsets?.(e._focusRow)??{top:0,bottom:0};if(l.skipScroll)return;const a=Math.max(0,l.top),d=s-a-Math.max(0,l.bottom);if(d<=0)return;const c=e._focusRow*t,u=n?tt(o.scrollTop,n):o.scrollTop;if(c<u+a){const e=Math.max(0,c-a);o.scrollTop=n?it(e,n):e}else if(c+t>u+a+d){const e=Math.max(0,c-d+t-a);o.scrollTop=n?it(e,n):e}}(e);const i=nt(e)||!!e._isGridEditMode;i||e.refreshVirtualWindow(!1),je(e._bodyEl),Array.from(e._bodyEl.querySelectorAll('[aria-selected="true"]')).forEach(e=>{e.setAttribute("aria-selected","false")});const r=function(e){const t=e._focusRow,i=e._virtualization.start??0,r=e._virtualization.end??e._rows.length;if(t<i||t>=r)return;const n=e._bodyEl.querySelectorAll(".data-grid-row")[t-i];let o=n?.children[e._focusCol];return o&&o.classList?.contains("cell")||(o=n?.querySelector(`.cell[data-col="${e._focusCol}"]`)??n?.querySelector(".cell[data-col]")),o?{rowEl:n??null,cell:o}:void 0}(e);if(!r)return;const{rowEl:n,cell:o}=r;o.classList.add("cell-focus"),o.setAttribute("aria-selected","true"),i&&!t?.forceHorizontalScroll||function(e,t,i,r){const n=e.querySelector(".tbw-scroll-area");if(!n)return;if(r?.forceScrollLeft)return void(n.scrollLeft=0);if(r?.forceScrollRight)return void(n.scrollLeft=n.scrollWidth-n.clientWidth);const o=e._getHorizontalScrollOffsets?.(t??void 0,i)??{left:0,right:0};if(o.skipScroll)return;const s=i.getBoundingClientRect(),l=n.getBoundingClientRect(),a=s.left-l.left+n.scrollLeft,d=a+s.width,c=n.scrollLeft+o.left,u=n.scrollLeft+n.clientWidth-o.right;a<c?n.scrollLeft=a-o.left:d>u&&(n.scrollLeft=d-n.clientWidth+o.right)}(e,n,o,t),function(e,t,i){if(i&&t.classList.contains(Ge.EDITING)){const e=t.querySelector(He);if(e&&document.activeElement!==e)try{e.focus({preventScroll:!0})}catch{}return}if(i){if(t.contains(document.activeElement))return;t.hasAttribute("tabindex")||t.setAttribute("tabindex","-1");try{t.focus({preventScroll:!0})}catch{}return}const r=document.activeElement;r instanceof HTMLElement&&r!==e&&"function"==typeof e.contains&&e.contains(r)&&!r.classList.contains("cell")&&!r.closest(".cell")||r===e||e.focus({preventScroll:!0})}(e,o,i)}function dt(e){return t=>{const i=e.editorParams,r=document.createElement("input");r.type="date",t.value instanceof Date?r.valueAsDate=t.value:"string"==typeof t.value&&t.value&&(r.value=t.value.split("T")[0]),i?.min&&(r.min=i.min),i?.max&&(r.max=i.max),i?.placeholder&&(r.placeholder=i.placeholder);return r.addEventListener("change",()=>{var n;if(r.value)"string"==typeof t.value?t.commit(r.value):t.commit(r.valueAsDate);else if(e.nullable)t.commit(null);else{const e=i?.default;"string"==typeof t.value||"string"==typeof e?t.commit("string"==typeof e?e:`${(n=e??/* @__PURE__ */new Date).getFullYear()}-${String(n.getMonth()+1).padStart(2,"0")}-${String(n.getDate()).padStart(2,"0")}`):t.commit(e instanceof Date?e:/* @__PURE__ */new Date)}}),r.addEventListener("keydown",e=>{"Escape"===e.key&&t.cancel()}),r}}var ct="__tbw_null__";function ut(e){switch(e.type){case"number":return function(e){return t=>{const i=e.editorParams,r=document.createElement("input");r.type="number",r.value=null!=t.value?String(t.value):"",void 0!==i?.min&&(r.min=String(i.min)),void 0!==i?.max&&(r.max=String(i.max)),void 0!==i?.step&&(r.step=String(i.step)),i?.placeholder&&(r.placeholder=i.placeholder);const n=()=>{""===r.value?e.nullable?t.commit(null):t.commit(i?.min??0):t.commit(Number(r.value))};return r.addEventListener("blur",n),r.addEventListener("keydown",e=>{"Enter"===e.key&&n(),"Escape"===e.key&&t.cancel()}),r}}(e);case"boolean":return e=>{const t=document.createElement("input");return t.type="checkbox",t.checked=!!e.value,t.addEventListener("change",()=>e.commit(t.checked)),t};case"date":return dt(e);case"select":return function(e){return t=>{const i=e.editorParams,r=document.createElement("select");if(e.multi&&(r.multiple=!0),e.nullable||i?.includeEmpty){const n=document.createElement("option");n.value=e.nullable?ct:"",n.textContent=e.nullable?i?.emptyLabel??"(Blank)":i?.emptyLabel??"",null==t.value&&(n.selected=!0),r.appendChild(n)}(function(e){const t=e.options;return t?"function"==typeof t?t():t:[]})(e).forEach(i=>{const n=document.createElement("option");n.value=String(i.value),n.textContent=i.label,e.multi&&Array.isArray(t.value)&&t.value.includes(i.value)?n.selected=!0:e.multi||t.value!==i.value||(n.selected=!0),r.appendChild(n)});const n=()=>{if(e.multi){const e=Array.from(r.selectedOptions).map(e=>e.value);t.commit(e)}else e.nullable&&r.value===ct?t.commit(null):t.commit(r.value)};return r.addEventListener("change",n),r.addEventListener("blur",n),r.addEventListener("keydown",e=>{"Escape"===e.key&&t.cancel()}),r}}(e);default:return function(e){return t=>{const i=e.editorParams,r=document.createElement("input");r.type="text",r.value=null!=t.value?String(t.value):"",void 0!==i?.maxLength&&(r.maxLength=i.maxLength),i?.pattern&&(r.pattern=i.pattern),i?.placeholder&&(r.placeholder=i.placeholder);const n=()=>{const i=r.value;""!==i?"string"==typeof t.value&&i===t.value.replace(/[\n\r]/g,"")||("number"==typeof t.value?t.commit(Number(i)):t.commit(i)):e.nullable?t.commit(null):t.commit("")};return r.addEventListener("blur",n),r.addEventListener("keydown",e=>{"Enter"===e.key&&n(),"Escape"===e.key&&t.cancel()}),r}}(e)}}function ht(e,t){return""===e?t?.nullable?null:(t?.editorParams)?.min??0:Number(e)}function gt(e,t,i){if(!(e instanceof HTMLInputElement))return function(e,t,i){return""===e.value||"number"!==t?.type&&"number"!=typeof i?null==i&&""===e.value?t?.nullable?null:"":e.value:Number(e.value)}(e,t,i);switch(e.type){case"checkbox":return e.checked;case"number":return ht(e.value,t);case"date":return function(e,t,i){return e.value?"string"==typeof i?e.value:e.valueAsDate:t?.nullable?null:"string"==typeof i?i||/* @__PURE__ */(new Date).toISOString().slice(0,10):i??/* @__PURE__ */new Date}(e,t,i);default:return function(e,t,i){return"number"==typeof i?ht(e.value,t):""===e.value&&null==i?t?.nullable?null:"":"string"==typeof i&&e.value===i.replace(/[\n\r]/g,"")?i:e.value}(e,t,i)}}var pt=class{#b=/* @__PURE__ */new Map;#v;constructor(e){this.#v=e}setInvalid(e,t,i=""){let r=this.#b.get(e);r||(r=/* @__PURE__ */new Map,this.#b.set(e,r)),r.set(t,i),this.#v(e,t,!0)}clearInvalid(e,t){const i=this.#b.get(e);i&&(i.delete(t),0===i.size&&this.#b.delete(e)),this.#v(e,t,!1)}clearRowInvalid(e){const t=this.#b.get(e);if(t){const i=Array.from(t.keys());this.#b.delete(e),i.forEach(t=>this.#v(e,t,!1))}}clearAllInvalid(){const e=Array.from(this.#b.entries());this.#b.clear(),e.forEach(([e,t])=>{t.forEach((t,i)=>this.#v(e,i,!1))})}isCellInvalid(e,t){return this.#b.get(e)?.has(t)??!1}getInvalidMessage(e,t){return this.#b.get(e)?.get(t)}hasInvalidCells(e){const t=this.#b.get(e);return!!t&&t.size>0}getInvalidFields(e){return new Map(this.#b.get(e)??[])}};function ft(e,t,i){const r=e.get(t);return!!r&&!mt(r,i)}function mt(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(typeof e!=typeof t)return!1;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!mt(e[i],t[i]))return!1;return!0}if("object"==typeof e){const i=e,r=t,n=Object.keys(i),o=Object.keys(r);if(n.length!==o.length)return!1;for(const e of n)if(!mt(i[e],r[e]))return!1;return!0}return!1}function wt(e,t,i){e.set(t,structuredClone(i))}function bt(e,t,i){const r=e.get(t);if(!r)return!1;const n=r,o=i;for(const s of Object.keys(n))o[s]=n[s];return!0}var vt=class{baselines=/* @__PURE__ */new Map;baselinesWereCaptured=!1;newRowIds=/* @__PURE__ */new Set;changedRowIds=/* @__PURE__ */new Set;committedDirtyRowIds=/* @__PURE__ */new Set;clear(){this.changedRowIds.clear(),this.committedDirtyRowIds.clear(),this.baselines.clear(),this.newRowIds.clear(),this.baselinesWereCaptured=!1}capture(e,t){const i=this.baselines.size;!function(e,t,i){for(const r of t)try{const t=i(r);null==t||e.has(t)||e.set(t,structuredClone(r))}catch{}}(this.baselines,e,t),this.baselines.size>i&&(this.baselinesWereCaptured=!0)}drainCapturedFlag(){return this.baselinesWereCaptured?(this.baselinesWereCaptured=!1,this.baselines.size):null}isRowDirty(e,t){return ft(this.baselines,e,t)}hasAnyDirty(e){if(this.newRowIds.size>0)return!0;for(const[t]of this.baselines){const i=e(t);if(i&&ft(this.baselines,t,i))return!0}return!1}isCellDirty(e,t,i){return function(e,t,i,r){const n=e.get(t);return!!n&&!mt(s(n,r),s(i,r))}(this.baselines,e,t,i)}getRowDirtyState(e,t){const i=this.newRowIds.has(e);return{isNew:i,isCommittedDirty:!i&&this.committedDirtyRowIds.has(e)&&ft(this.baselines,e,t),hasBaseline:this.baselines.has(e)}}markPristine(e,t){wt(this.baselines,e,t),this.newRowIds.delete(e),this.changedRowIds.delete(e),this.committedDirtyRowIds.delete(e)}rebaselineCell(e,t,i){const r=this.baselines.get(e);r&&d(r,t,i)}markNew(e){this.newRowIds.add(e),this.committedDirtyRowIds.add(e)}markDirty(e){this.changedRowIds.add(e),this.committedDirtyRowIds.add(e)}markAllPristine(e){for(const[t]of this.baselines){const i=e(t);i&&wt(this.baselines,t,i)}this.newRowIds.clear(),this.changedRowIds.clear(),this.committedDirtyRowIds.clear()}getOriginalRow(e){return function(e,t){const i=e.get(t);return i?structuredClone(i):void 0}(this.baselines,e)}hasBaseline(e){return this.baselines.has(e)}getDirtyRows(e){const t=[];for(const[i,r]of this.baselines){const n=e(i);n&&ft(this.baselines,i,n)&&t.push({id:i,original:structuredClone(r),current:n})}for(const i of this.newRowIds){const r=e(i);r&&t.push({id:i,original:void 0,current:r})}return t}getDirtyRowIds(e){const t=[];for(const[i]of this.baselines){const r=e(i);r&&ft(this.baselines,i,r)&&t.push(i)}for(const i of this.newRowIds)t.push(i);return t}revertRow(e,t){const i=bt(this.baselines,e,t);return i&&(this.changedRowIds.delete(e),this.committedDirtyRowIds.delete(e)),i}revertAll(e){for(const[t]of this.baselines){const i=e(t);i&&bt(this.baselines,t,i)}this.changedRowIds.clear(),this.committedDirtyRowIds.clear()}getChangedRows(e){const t=[];for(const i of this.changedRowIds){const r=e(i);r&&t.push(r)}return t}getChangedRowIds(){return Array.from(this.changedRowIds)}isRowChanged(e){return this.changedRowIds.has(e)}},yt='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])';function Ct(e){return e?.closest?.('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')??null}function xt(e){return"string"==typeof e&&("__proto__"!==e&&"constructor"!==e&&"prototype"!==e)}function Rt(e){}function St(e,t){return!1===e.onBeforeEditClose?.(t)}function Et(e,t,i,r,n,o,l,a){if(!r.editable)return;if(o.classList.contains("editing"))return;const{grid:c,isGridMode:u,config:h,editingCells:g,editorValueCallbacks:p}=e;let f;try{f=c.getRowId?.(t)}catch{}const m=f?e=>c.updateRow(f,e,"cascade"):Rt,w=xt(r.field)?s(t,r.field):void 0;o.classList.add("editing"),g.add(`${i}:${n}`);const b=a??o.parentElement;b&&function(e){e.__editingCellCount=(e.__editingCellCount??0)+1,e.setAttribute("data-has-editing","")}(b);let v=!1;const y=n=>{if(v||!u&&!e.isEditSessionActive())return;const o=f?c._getRowEntry(f):void 0,s=o?.row??t,l=o?.index??i;e.commitCellValue(l,r,n,s)},C=()=>{if(v=!0,xt(r.field)){d((f?c._getRowEntry(f):void 0)?.row??t,r.field,w)}},x=document.createElement("div");x.className="tbw-editor-host",o.firstElementChild&&c.__frameworkAdapter?.releaseCell?.(o),o.innerHTML="",o.appendChild(x),x.addEventListener("keydown",t=>{if(!t.defaultPrevented){if("Enter"===t.key){const e=t.target;if(e&&"true"===e.getAttribute?.("aria-expanded")&&e.hasAttribute?.("aria-controls"))return}if("Enter"===t.key){const n=t.target,o=Ct(n);if(o&&o!==n)return;if(u){t.preventDefault();const e=x.querySelector("input,textarea,select");return void(e&&y(gt(e,r,w)))}if(St(h,t))return;t.stopPropagation(),t.preventDefault(),v=!0,e.exitRowEdit(i,!1)}if("Escape"===t.key){if(u)return t.stopPropagation(),void t.preventDefault();if(St(h,t))return;t.stopPropagation(),t.preventDefault(),C(),e.exitRowEdit(i,!0)}}});const R=r,S=R.__editorTemplate,E=function(e,t){if(t.editor)return t.editor;if(t.__editorTemplate)return"template";if(!t.type)return;const i=e.effectiveConfig?.typeDefaults;if(i?.[t.type]?.editor)return i[t.type].editor;const r=e.__frameworkAdapter;if(r?.getTypeDefault){const i=r.getTypeDefault(t.type,e._hostElement);if(i?.editor)return i.editor}}(c,R)??ut(r),_=w,k=`${i}:${r.field}`,T=[];p.set(k,e=>{for(const t of T)t(e)});const M=e=>{T.push(e)};if("template"===E&&S)!function(e,t,i,r,n,o,s,l,a){const d=i.__editorTemplate;if(!d)return;const c=d.cloneNode(!0),u=i.__compiledEditor;u?c.innerHTML=u({row:r,value:n,field:i.field,column:i,commit:o,cancel:s}):c.querySelectorAll("*").forEach(e=>{1===e.childNodes.length&&e.firstChild?.nodeType===Node.TEXT_NODE&&(e.textContent=e.textContent?.replace(/{{\s*value\s*}}/g,null==n?"":String(n)).replace(/{{\s*row\.([a-zA-Z0-9_]+)\s*}}/g,(e,t)=>{if(!xt(t))return"";const i=r[t];return null==i?"":String(i)})||"")});const h=c.querySelector("input,textarea,select");if(h){h instanceof HTMLInputElement&&"checkbox"===h.type?h.checked=!!n:h.value=String(n??"");let t=!1;h.addEventListener("blur",()=>{t||o(gt(h,i,n))}),h.addEventListener("keydown",r=>{const l=r;if("Enter"===l.key){if(St(e.config,l))return;l.stopPropagation(),l.preventDefault(),t=!0,o(gt(h,i,n)),e.exitRowEdit(a,!1)}if("Escape"===l.key){if(St(e.config,l))return;l.stopPropagation(),l.preventDefault(),s(),e.exitRowEdit(a,!0)}}),h instanceof HTMLInputElement&&"checkbox"===h.type&&h.addEventListener("change",()=>o(h.checked)),l||setTimeout(()=>h.focus({preventScroll:!0}),0)}t.appendChild(c)}(e,x,R,t,w,y,C,l,i),M(e=>{if(null!=e&&"object"==typeof e)return;const t=x.querySelector("input,textarea,select");t&&(t instanceof HTMLInputElement&&"checkbox"===t.type?t.checked=!!e:t.value=String(e??""))});else if("string"==typeof E){const e=document.createElement(E);e.value=_,e.addEventListener("change",()=>y(e.value)),M(t=>{e.value=t}),x.appendChild(e),l||queueMicrotask(()=>{x.querySelector(yt)?.focus({preventScroll:!0})})}else if("function"==typeof E){const i=E({row:t,rowId:f??"",value:_,field:r.field,column:r,commit:y,cancel:C,updateRow:m,onValueChange:M,grid:e.grid});"string"==typeof i?(x.innerHTML=i,function(e,t,i,r){const n=e.querySelector("input,textarea,select");n&&(n.addEventListener("blur",()=>{i(gt(n,t,r))}),n instanceof HTMLInputElement&&"checkbox"===n.type?n.addEventListener("change",()=>i(n.checked)):n instanceof HTMLSelectElement&&n.addEventListener("change",()=>i(gt(n,t,r))))}(x,r,y,w),M(e=>{const t=x.querySelector("input,textarea,select");t&&(t instanceof HTMLInputElement&&"checkbox"===t.type?t.checked=!!e:t.value=String(e??""))})):i instanceof Node?(x.appendChild(i),i instanceof HTMLInputElement||i instanceof HTMLSelectElement||i instanceof HTMLTextAreaElement?M(e=>{i instanceof HTMLInputElement&&"checkbox"===i.type?i.checked=!!e:i.value=String(e??"")}):o.setAttribute("data-editor-managed","")):!i&&x.hasChildNodes()&&o.setAttribute("data-editor-managed",""),l||queueMicrotask(()=>{x.querySelector(yt)?.focus({preventScroll:!0})})}else if(E&&"object"==typeof E){const i=document.createElement("div");i.setAttribute("data-external-editor",""),i.setAttribute("data-field",r.field),x.appendChild(i),o.setAttribute("data-editor-managed","");const n={row:t,rowId:f??"",value:_,field:r.field,column:r,commit:y,cancel:C,updateRow:m,onValueChange:M,grid:e.grid};if(E.mount)try{E.mount({placeholder:i,context:n,spec:E})}catch(I){A("TBW080",`External editor mount error for column '${r.field}': ${I}`,e.grid.id)}else c.dispatchEvent(new CustomEvent("mount-external-editor",{detail:{placeholder:i,spec:E,context:n}}))}!function(e,t){const i="string"==typeof t.header?t.header:t.field;if(!i)return;queueMicrotask(()=>{const t=e.querySelector(yt);t&&(t.hasAttribute("aria-label")||t.hasAttribute("aria-labelledby")||t.hasAttribute("title")||t.id&&e.querySelector(`label[for="${CSS.escape(t.id)}"]`)||t.closest("label")||t.setAttribute("aria-label",i))})}(x,r)}var At=class extends Y{static manifest={ownedProperties:[{property:"editable",level:"column",description:'the "editable" column property',isUsed:e=>!0===e||"function"==typeof e},{property:"editor",level:"column",description:'the "editor" column property'},{property:"editorParams",level:"column",description:'the "editorParams" column property'},{property:"nullable",level:"column",description:'the "nullable" column property (allows null values)'}],events:[{type:"cell-edit-committed",description:"Emitted when a cell edit is committed (for plugin-to-plugin coordination)"}],queries:[{type:"isEditing",description:"Returns whether any cell is currently being edited"},{type:"getCellEditableResolver",description:"Returns a predicate (field, row) => boolean resolving per-cell editability (rowEditable gate + column.editable true/false/function), for consumers like clipboard paste"},{type:"commitCellValue",description:"Commits a single cell value coming from a core row mutation (updateRow/updateRows), running the full edit pipeline: cancelable cell-commit (validation/abortion), dirty tracking, history, and cascade. Returns true (applied), false (vetoed), or undefined (not handled)."}]};name="editing";styles="@layer tbw-plugins{tbw-grid{--tbw-editing-bg:var(--tbw-color-selection);--tbw-editing-row-bg:var(--tbw-editing-bg);--tbw-editing-border:var(--tbw-border-input,1px solid var(--tbw-color-border-strong));--tbw-padding-editing-input:var(--tbw-cell-padding-input,2px 6px);--tbw-font-size-editor:inherit;--tbw-editing-row-outline-color:var(--tbw-color-accent);--tbw-editing-row-outline-width:1px}tbw-grid:not(.tbw-grid-mode) .data-grid-row:has(.editing){background:var(--tbw-editing-row-bg);outline:var(--tbw-editing-row-outline-width) solid var(--tbw-editing-row-outline-color);outline-offset:calc(-1 * var(--tbw-editing-row-outline-width))}tbw-grid .data-grid-row>.cell.editing{min-height:max(var(--tbw-row-height), calc(1lh + 2 * var(--tbw-cell-padding-v,.25em) + var(--tbw-border-width,1px)));justify-content:center;align-items:center;padding:0;display:flex;overflow:hidden}tbw-grid .data-grid-row>.cell.editing input:not([type=checkbox]),tbw-grid .data-grid-row>.cell.editing select,tbw-grid .data-grid-row>.cell.editing textarea{border:var(--tbw-editing-border);width:100%;min-width:0;height:100%;padding:var(--tbw-padding-editing-input);font-size:var(--tbw-font-size-editor);flex:auto;align-self:stretch}tbw-grid .tbw-editor-host{display:contents}tbw-grid{--tbw-invalid-bg:light-dark(#fef2f2,#450a0a);--tbw-invalid-border-color:light-dark(#ef4444,#f87171)}tbw-grid .data-grid-row>.cell[data-invalid=true]{background:var(--tbw-invalid-bg);outline:1px solid var(--tbw-invalid-border-color);outline-offset:-1px}}";get defaultConfig(){return{mode:"row",editOn:"click"}}get#y(){return"grid"===this.config.mode}#C(e,t){const i=this.#x.effectiveConfig?.rowEditable;if(i&&!i(t))return!1;const{editable:r}=e;return"function"==typeof r?r(t):!0===r}#R(e){return!0===e.editable||"function"==typeof e.editable}#S=-1;#E;#A;#_=-1;#k=/* @__PURE__ */new Map;#T=/* @__PURE__ */new Set;#M=/* @__PURE__ */new WeakSet;#I=/* @__PURE__ */new Map;#L=!1;#D=-1;#P;#F=!1;#H=!1;#G=!1;#z=null;#O=new vt;#N=/* @__PURE__ */new Set;#q;get#x(){return this.grid}attach(e){super.attach(e);const t=this.disconnectSignal,i=this.#x;this.#P=new pt((e,t,i)=>{this.#$(e,t,i)}),this.#q={grid:i,isGridMode:this.#y,config:this.config,editingCells:this.#T,editorValueCallbacks:this.#I,isEditSessionActive:()=>-1!==this.#S,commitCellValue:(e,t,i,r)=>this.#W(e,t,i,r),exitRowEdit:(e,t)=>this.#B(e,t)},this.#V(),Object.defineProperty(e,"changedRows",{get:()=>this.changedRows,configurable:!0}),Object.defineProperty(e,"changedRowIds",{get:()=>this.changedRowIds,configurable:!0}),Object.defineProperty(e,"_changedRowIdSet",{get:()=>this.#O.changedRowIds,configurable:!0}),e.resetChangedRows=e=>this.resetChangedRows(e),this.#K(t,i),this.#y&&(i._isGridEditMode=!0,this.gridElement.classList.add("tbw-grid-mode"),this.requestRender(),this.#j(t,i))}#K(e,t){if(document.addEventListener("keydown",e=>{if(!this.#y&&"Escape"===e.key&&-1!==this.#S){if(St(this.config,e))return;this.#B(this.#S,!0)}},{capture:!0,signal:e}),document.addEventListener("mousedown",e=>{if(this.#y)return;if(-1===this.#S)return;const i=t.findRenderedRowElement?.(this.#S);if(!i)return;if((e.composedPath&&e.composedPath()||[]).includes(i))return;const r=e.target;if(!r||this.gridElement.contains(r)||!this.grid.containsFocus?.(r)){if(r&&!this.gridElement.contains(r)){const e=t.findRenderedRowElement?.(this.#S);if(e&&function(e,t){if(!e)return!1;const i=t.querySelectorAll('[aria-expanded="true"][aria-controls]');for(let r=0;r<i.length;r++){const n=i[r].getAttribute("aria-controls");if(!n)continue;const o=t.ownerDocument?.getElementById(n);if(o&&o.contains(e))return!0}return!1}(r,e))return}St(this.config,e)||queueMicrotask(()=>{-1!==this.#S&&this.#B(this.#S,!1)})}},{signal:e}),this.config.focusTrap&&this.gridElement.addEventListener("focusout",e=>{if(this.#y)return;if(-1===this.#S)return;const t=e.relatedTarget;t&&this.grid.containsFocus?.(t)||t&&this.gridElement.contains(t)||queueMicrotask(()=>{-1!==this.#S&&this.#U()})},{signal:e}),this.gridElement.addEventListener("cell-change",e=>{const t=e.detail;if("user"===t.source)return;const i=`${t.rowIndex}:${t.field}`,r=this.#I.get(i);r&&r(t.newValue)},{signal:e}),this.config.dirtyTracking){const t=e=>{const t=e.detail?.action;if(!t)return;const i=this.rows[t.rowIndex];if(!i)return;const r=this.#Y(i);if(!r)return;const n=this.#O.isRowDirty(r,i);this.#Z(r,i,n?"modified":"pristine")};this.gridElement.addEventListener("undo",t,{signal:e}),this.gridElement.addEventListener("redo",t,{signal:e}),this.on("row-inserted",e=>{const t=this.#Y(e.row);null!=t&&this.markAsNew(String(t))})}}#j(e,t){this.gridElement.addEventListener("focusin",e=>{const i=e.target;if(i!==this.gridElement&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')){if(this.#H)return i.blur(),void this.gridElement.focus();const e=t._focusRow,r=t._focusCol,n=this.#z;if(!n||n.rowIndex!==e||n.colIndex!==r){const i=t._visibleColumns?.[r],n=t._rows?.[e];if(i?.field&&n){const t=i.field;this.#z={rowIndex:e,colIndex:r,field:t,value:s(n,t)}}}this.#F=!0}},{signal:e}),this.gridElement.addEventListener("focusout",e=>{const t=e.target,i=e.relatedTarget;if(t&&i){if(t.contains(i))return;const e=Ct(i);if(e&&e!==this.gridElement&&this.gridElement.contains(e))return}i&&(this.gridElement.contains(i)||this.grid.containsFocus?.(i))&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')||(this.#F=!1,this.#z=null)},{signal:e}),this.gridElement.addEventListener("keydown",e=>{if("Escape"===e.key&&this.#F){if(St(this.config,e))return void queueMicrotask(()=>{this.#F&&this.#X()});this.#X(),e.preventDefault(),e.stopPropagation()}},{capture:!0,signal:e}),this.gridElement.addEventListener("mousedown",e=>{e.target.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')&&(this.#H=!1)},{signal:e})}detach(){this.#x._isGridEditMode=!1,this.gridElement.classList.remove("tbw-grid-mode"),this.#S=-1,this.#E=void 0,this.#A=void 0,this.#_=-1,this.#k.clear(),this.#O.clear(),this.#T.clear(),this.#I.clear(),this.#F=!1,this.#H=!1,this.#z=null,this.#G=!1,this.#M=/* @__PURE__ */new WeakSet,super.detach()}handleQuery(e){if("isEditing"===e.type)return this.#y||-1!==this.#S;if("getCellEditableResolver"===e.type){const e=this.#x.effectiveConfig?.columns??[],t=/* @__PURE__ */new Map;for(const i of e)t.set(i.field,i);return(e,i)=>{const r=t.get(e);return!!r&&this.#C(r,i)}}return"commitCellValue"===e.type?this.#Q(e.context):void 0}#Q(e){const t=this.#x,i=(t._visibleColumns??[]).find(t=>t.field===e.field)??t._columns?.find(t=>t.field===e.field),r=e.row??(null!=e.rowId?t._getRowEntry(e.rowId)?.row:void 0)??t._rows?.[e.rowIndex];if("sync"===e.source){if(!r||!xt(e.field))return;d(r,e.field,e.newValue),u(r);const t=this.#Y(r);if(t&&this.config.dirtyTracking){this.#O.rebaselineCell(t,e.field,e.newValue);const i=this.#O.isRowDirty(t,r);i||this.#O.changedRowIds.delete(t),this.#Z(t,r,i?"modified":"pristine")}return!0}if(i&&r&&xt(e.field)){if("history"===e.source){d(r,e.field,e.newValue),u(r);const t=this.#Y(r);if(t&&this.config.dirtyTracking){const e=this.#O.isRowDirty(t,r);e||this.#O.changedRowIds.delete(t),this.#Z(t,r,e?"modified":"pristine")}return!0}return this.#W(e.rowIndex,i,e.newValue,r,e.source),s(r,e.field)===e.newValue}}onCellClick(e){if(this.#y)return!1;const t=this.#x,i=this.config.editOn??t.effectiveConfig?.editOn;if(!1===i||"manual"===i)return!1;if("click"!==i&&"dblclick"!==i)return!1;const r="dblclick"===e.originalEvent.type;if("click"===i&&r)return!1;if("dblclick"===i&&!r)return!1;const{rowIndex:n}=e;return!!t._columns?.some(e=>this.#R(e))&&(!!this.#J(t._rows[n])&&(e.originalEvent.stopPropagation(),this.beginBulkEdit(n),!0))}onKeyDown(e){switch(e.key){case"Escape":return this.#ee(e);case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":return this.#te(e);case"Tab":return this.#ie(e);case" ":case"Spacebar":return this.#re(e);case"Enter":return!(e.shiftKey||e.ctrlKey||e.altKey||e.metaKey)&&this.#ne(e);case"F2":return this.#oe(e);default:return!1}}#ee(e){return this.#y&&this.#F?(this.#X(),this.requestAfterRender(),!0):-1!==this.#S&&!this.#y&&(St(this.config,e)||this.#B(this.#S,!0),!0)}#te(e){const t=Ct(e.target),i=!!t&&t!==this.gridElement,r="ArrowUp"===e.key||"ArrowDown"===e.key;return!(this.#y&&!this.#F&&!i)&&(!(!this.#y||!this.#F&&!i||!r)||!(!r||-1===this.#S||this.#y))}#ie(e){return!(-1===this.#S&&!this.#y)&&(e.preventDefault(),this.#G?(this.#B(this.#S,!1),!0):(this.#se(!e.shiftKey),!0))}#re(e){if(-1!==this.#S)return!1;const t=this.#x,i=t._focusRow,r=t._focusCol;if(i<0||r<0)return!1;const n=t._visibleColumns[r],o=t._rows[i];if(!n||!o||"boolean"!==n.type)return!1;if(!this.#C(n,o))return!1;const l=n.field;return!!xt(l)&&(this.#W(i,n,!s(o,l),o),e.preventDefault(),this.requestRender(),!0)}#ne(e){if(this.#y&&!this.#F)return this.#U(),!0;if(this.#y&&this.#F)return this.#le(e);if(-1!==this.#S){const t=e.target;return(!t||"true"!==t.getAttribute?.("aria-expanded")||!t.hasAttribute?.("aria-controls"))&&!!St(this.config,e)}return this.#ae(e)}#le(e){const t=Ct(e.target);if(t&&t!==e.target)return!0;this.#z=null;const i=document.activeElement;return i&&this.gridElement.contains(i)&&(i.blur(),this.gridElement.focus()),this.#F=!1,this.#H=!0,this.requestAfterRender(),!0}#ae(e){const t=this.#x,i=this.config.editOn??t.effectiveConfig?.editOn;if(!1===i||"manual"===i)return!1;const r=t._focusRow,n=t._focusCol;if(r<0)return!1;const o=t._columns?.some(e=>this.#R(e)),l=t._rows[r];if(!o||!this.#J(l))return!1;const a=t._visibleColumns[n]?.field??"",d=a&&l?s(l,a):void 0,c=this.gridElement.querySelector(`[data-row="${r}"][data-col="${n}"]`),u=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,detail:{rowIndex:r,colIndex:n,field:a,value:d,row:l,cellEl:c,trigger:"keyboard",originalEvent:e}});return this.gridElement.dispatchEvent(u),u.defaultPrevented?(e.preventDefault(),!0):(this.beginBulkEdit(r),!0)}#oe(e){if(-1!==this.#S||this.#y)return!1;const t=this.#x;if(!1===(this.config.editOn??t.effectiveConfig?.editOn))return!1;const i=t._focusRow,r=t._focusCol;if(i<0||r<0)return!1;const n=t._visibleColumns[r],o=t._rows[i];return!!(n&&o&&n.field)&&(!!this.#C(n,o)&&(e.preventDefault(),this.beginCellEdit(i,n.field),!0))}#de(e){const t={};for(const i of Array.from(e.attributes)){if(!i.name.startsWith("data-"))continue;const e=i.name.slice(5).replace(/-([a-z])/g,(e,t)=>t.toUpperCase()).trim();e&&(t[e]=i.value)}return t}#ce(){const e=this.#x,t=e._hostElement;if(!t)return;const i=e.effectiveConfig;if(!i)return;const r=Array.from(t.children).filter(e=>"tbw-grid-type"===e.tagName.toLowerCase());if(!r.length)return;const n=e.__frameworkAdapter,o=i.typeDefaults??={};for(let s=0;s<r.length;s++){const e=r[s],t=e.getAttribute("name")?.trim();if(!t)continue;const i=o[t];if(i?.editor)continue;const l=e.querySelector("tbw-grid-column-editor"),a=l??e;let d=n?.canHandle?.(a)?n.createEditor?.(a):void 0;if(!d&&l){const t=this.#de(e),i=j(l.innerHTML);d=e=>i({row:e.row,value:e.value,field:e.field,column:e.column,typeDefault:t})}d&&(o[t]={...i??{},editor:d})}}processColumns(e){const t=this.#x;this.#ce();const i=t.effectiveConfig?.typeDefaults,r=t.__frameworkAdapter,n=!!i||!!r?.getTypeDefault;return e.map(e=>{const o=e.__element;if(o&&!this.#M.has(o)){this.#M.add(o),null==e.editable&&o.hasAttribute("editable")&&(e.editable="false"!==o.getAttribute("editable"));const t=e;if(!t.__editorTemplate){const e=o.querySelector("tbw-grid-column-editor");e&&(t.__editorTemplate=e)}}if(!e.type||!n)return e;let s;if(i?.[e.type]?.editorParams&&(s=i[e.type].editorParams),!s&&r?.getTypeDefault){const i=r.getTypeDefault(e.type,t._hostElement);i?.editorParams&&(s=i.editorParams)}return s?{...e,editorParams:{...s,...e.editorParams}}:e})}processRows(e){const t=this.#x;if(this.config.dirtyTracking&&t.getRowId&&this.#O.capture(e,e=>{try{return t.getRowId?.(e)}catch{return}}),-1===this.#S||this.#y)return e;const i=this.#E,r=this.#A;if(!i||!r)return e;const n=[...e];let o=-1;for(let s=0;s<n.length;s++)if(this.#Y(n[s])===i){o=s;break}return-1===o?(setTimeout(()=>this.cancelActiveRowEdit(),0),n):(n[o]=r,this.#S!==o&&this.#ue(this.#S,o),n)}afterRender(){const e=this.#x;if(-1!==this.#S&&this.#A&&!this.#y&&e._rows[this.#S]!==this.#A){const t=e._rows.indexOf(this.#A);if(-1===t)return void setTimeout(()=>this.cancelActiveRowEdit(),0);this.#ue(this.#S,t)}if(this.#L&&(this.#L=!1,this.#he(e)),-1!==this.#D){const t=this.#D;this.#D=-1,e.animateRow?.(t,"change")}const t=this.#O.drainCapturedFlag();if(null!=t&&this.emit("baselines-captured",{count:t}),!this.#y&&0!==this.#T.size)for(const i of this.#T){const[t,r]=i.split(":"),n=parseInt(t,10),o=parseInt(r,10),s=this.#ge(n,o);if(!s||s.classList.contains("editing"))continue;const l=e._rows[n],a=e._visibleColumns[o];l&&a&&this.#pe(l,n,a,o,s,!0)}}afterCellRender(e){const{row:t,rowIndex:i,column:r,colIndex:n,cellElement:o}=e,l=this.#C(r,t);if(l)o.removeAttribute("aria-readonly");else if(o.setAttribute("aria-readonly","true"),this.#y&&o.classList.contains("editing")){o.classList.remove("editing");const e=s(t,r.field);o.textContent=null==e?"":String(e)}this.#y&&l&&(o.classList.contains("editing")||this.#pe(t,i,r,n,o,!0,e.rowElement))}afterRowRender(e){if(!this.config.dirtyTracking)return;const t=this.#x.getRowId?.(e.row);if(!t)return;const{isNew:i,isCommittedDirty:r,hasBaseline:n}=this.#O.getRowDirtyState(t,e.row),o=e.rowElement;if(o.classList.toggle("tbw-row-dirty",r),o.classList.toggle("tbw-row-new",i),n){const i=o.querySelectorAll(".cell[data-field]");for(let r=0;r<i.length;r++){const n=i[r],o=n.getAttribute("data-field");o&&n.classList.toggle("tbw-cell-dirty",this.#O.isCellDirty(t,e.row,o))}}else{const e=o.querySelectorAll(".tbw-cell-dirty");for(let t=0;t<e.length;t++)e[t].classList.remove("tbw-cell-dirty")}}onScrollRender(){this.afterRender()}get changedRows(){return this.#O.getChangedRows(e=>this.grid.getRow(e))}get changedRowIds(){return this.#O.getChangedRowIds()}get activeEditRow(){return this.#S}get activeEditCol(){return this.#_}isRowEditing(e){return this.#S===e}isCellEditing(e,t){return this.#T.has(`${e}:${t}`)}isRowChanged(e){const t=this.#x,i=t._rows[e];if(!i)return!1;try{const e=t.getRowId?.(i);return!!e&&this.#O.isRowChanged(e)}catch{return!1}}isRowChangedById(e){return this.#O.isRowChanged(e)}isDirty(e){if(!this.config.dirtyTracking)return!1;if(this.#O.newRowIds.has(e))return!0;const t=this.grid.getRow(e);return!!t&&this.#O.isRowDirty(e,t)}isPristine(e){return!this.isDirty(e)}get dirty(){if(!this.config.dirtyTracking)return!1;const e=this.#x;return this.#O.hasAnyDirty(t=>e._getRowEntry(t)?.row)}get pristine(){return!this.dirty}markAsPristine(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&(this.#O.markPristine(e,t),this.emit("dirty-change",{rowId:e,row:t,original:t,type:"pristine"}))}markAsNew(e){if(!this.config.dirtyTracking)return;this.#O.markNew(e);const t=this.grid.getRow(e);this.emit("dirty-change",{rowId:e,row:t,original:void 0,type:"new"})}markAsDirty(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&(this.#O.markDirty(e),this.#Z(e,t,"modified"))}markAllPristine(){if(!this.config.dirtyTracking)return;const e=this.#x;this.#O.markAllPristine(t=>e._getRowEntry(t)?.row)}getOriginalRow(e){if(this.config.dirtyTracking)return this.#O.getOriginalRow(e)}hasBaseline(e){return!!this.config.dirtyTracking&&this.#O.hasBaseline(e)}getDirtyRows(){if(!this.config.dirtyTracking)return[];const e=this.#x;return this.#O.getDirtyRows(t=>e._getRowEntry(t)?.row)}get dirtyRowIds(){if(!this.config.dirtyTracking)return[];const e=this.#x;return this.#O.getDirtyRowIds(t=>e._getRowEntry(t)?.row)}revertRow(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&this.#O.revertRow(e,t)&&(this.#Z(e,t,"reverted"),this.requestRender())}revertAll(){if(!this.config.dirtyTracking)return;const e=this.#x;this.#O.revertAll(t=>e._getRowEntry(t)?.row),this.requestRender()}setInvalid(e,t,i=""){this.#P.setInvalid(e,t,i)}clearInvalid(e,t){this.#P.clearInvalid(e,t)}clearRowInvalid(e){this.#P.clearRowInvalid(e)}clearAllInvalid(){this.#P.clearAllInvalid()}isCellInvalid(e,t){return this.#P.isCellInvalid(e,t)}getInvalidMessage(e,t){return this.#P.getInvalidMessage(e,t)}hasInvalidCells(e){return this.#P.hasInvalidCells(e)}getInvalidFields(e){return this.#P.getInvalidFields(e)}resetChangedRows(e){const t=this.changedRows,i=this.changedRowIds;this.#O.changedRowIds.clear(),this.#O.committedDirtyRowIds.clear(),this.#V(),e||this.emit("changed-rows-reset",{rows:t,ids:i}),this.#x._rowPool?.forEach(e=>e.classList.remove("changed"))}beginCellEdit(e,t){const i=this.#x,r=i._visibleColumns.findIndex(e=>e.field===t);if(-1===r)return;const n=i._visibleColumns[r],o=i._rows[e];if(!n||!o||!this.#C(n,o))return;const s=this.#ge(e,r);s&&(this.#G=!0,this.#fe(e,r,s))}beginBulkEdit(e){const t=this.#x;if(!1===(this.config.editOn??t.effectiveConfig?.editOn))return;if(!t._columns?.some(e=>this.#R(e)))return;const i=t.findRenderedRowElement?.(e);if(!i)return;const r=t._rows[e];this.#J(r)&&(this.#G=!1,this.#me(e,r),Array.from(i.children).forEach((i,n)=>{const o=t._visibleColumns[n];if(o&&this.#C(o,r)){const t=i;t.classList.contains("editing")||this.#pe(r,e,o,n,t,!0)}}),setTimeout(()=>{let e=i.querySelector(`.cell[data-col="${t._focusCol}"]`);if(e?.classList.contains("editing")||(e=i.querySelector(".cell.editing")),e?.classList.contains("editing")){const t=e.querySelector(yt);try{t?.focus({preventScroll:!0})}catch{}}},0))}commitActiveRowEdit(){-1!==this.#S&&this.#B(this.#S,!1)}cancelActiveRowEdit(){-1!==this.#S&&this.#B(this.#S,!0)}#Y(e){if(e)try{return this.#x.getRowId?.(e)}catch{return}}#ge(e,t){return(this.#x.findRenderedRowElement?.(e))?.querySelector(`.cell[data-col="${t}"]`)??null}#J(e){if(!e)return!0;const t=this.#x.effectiveConfig?.rowEditable;return!t||!1!==t(e)}#Z(e,t,i){this.emit("dirty-change",{rowId:e,row:t,original:this.#O.getOriginalRow(e),type:i})}#X(){this.#we();const e=document.activeElement;e&&this.gridElement.contains(e)&&(e.blur(),this.gridElement.focus()),this.#F=!1,this.#H=!0}#be(e,t,i){i&&(Object.keys(i).forEach(e=>{t[e]=i[e]}),e&&(this.#O.changedRowIds.delete(e),this.#O.committedDirtyRowIds.delete(e),this.clearRowInvalid(e)))}#$(e,t,i){const r=this.#x,n=r._visibleColumns?.findIndex(e=>e.field===t);if(-1===n||void 0===n)return;const o=r._rows?.findIndex(t=>this.#Y(t)===e);if(-1===o||void 0===o)return;const s=this.#ge(o,n);if(s)if(i){s.setAttribute("data-invalid","true"),s.setAttribute("aria-invalid","true");const i=this.#P.getInvalidMessage(e,t);i&&(s.setAttribute("title",i),s.removeAttribute(ze.TRUNCATED))}else s.removeAttribute("data-invalid"),s.removeAttribute("aria-invalid"),s.removeAttribute("title")}#ue(e,t){this.#S=t;const i=/* @__PURE__ */new Set,r=`${e}:`;for(const s of this.#T)s.startsWith(r)?i.add(`${t}:${s.substring(r.length)}`):i.add(s);this.#T.clear();for(const s of i)this.#T.add(s);const n=this.#k.get(e);void 0!==n&&(this.#k.delete(e),this.#k.set(t,n));const o=[];for(const[s,l]of this.#I)s.startsWith(r)&&(o.push([`${t}:${s.substring(r.length)}`,l]),this.#I.delete(s));for(const[s,l]of o)this.#I.set(s,l);this.#V()}#fe(e,t,i){const r=this.#x,n=r._rows[e],o=r._visibleColumns[t];n&&o&&this.#C(o,n)&&(i.classList.contains("editing")||(this.#S!==e&&this.#me(e,n),this.#_=t,this.#pe(n,e,o,t,i,!1)))}#we(){const e=this.#z;if(!e)return;const t=this.#x._rows?.[e.rowIndex];t&&d(t,e.field,e.value);const i=`${e.rowIndex}:${e.field}`,r=this.#I.get(i);if(r&&r(e.value),this.emit("cell-cancel",{rowIndex:e.rowIndex,colIndex:e.colIndex,field:e.field,previousValue:e.value}),t){const e=this.#Y(t);e&&(this.config.dirtyTracking?this.#O.isRowDirty(e,t)||(this.#O.changedRowIds.delete(e),this.#Z(e,t,"reverted")):this.#O.changedRowIds.delete(e))}this.requestRender(),this.#z=null}#U(){const e=this.#x,t=e._focusRow,i=e._focusCol;if(t<0||i<0)return;const r=this.#ge(t,i);if(r?.classList.contains("editing")){const e=r.querySelector(yt);e&&(this.#H=!1,e.focus(),this.#F=!0,e instanceof HTMLInputElement&&("text"===e.type||"number"===e.type)&&e.select())}}#se(e){const t=this.#x,i=t._rows,r=this.#y?t._focusRow:this.#S,n=i[r],o=t._visibleColumns.map((e,t)=>n&&this.#C(e,n)?t:-1).filter(e=>e>=0);if(0===o.length)return;const s=o.indexOf(t._focusCol)+(e?1:-1);if(s>=0&&s<o.length){t._focusCol=o[s];const e=this.#ge(r,o[s]);return e?.classList.contains("editing")&&e.querySelector(yt)?.focus({preventScroll:!0}),void at(t,{forceHorizontalScroll:!0})}const l=r+(e?1:-1);if(l>=0&&l<i.length){const n=i[l],o=t._visibleColumns.map((e,t)=>n&&this.#C(e,n)?t:-1).filter(e=>e>=0);if(0===o.length)return;this.#y?(t._focusRow=l,t._focusCol=e?o[0]:o[o.length-1],at(t,{forceHorizontalScroll:!0}),this.requestAfterRender(),setTimeout(()=>{const e=this.#ge(l,t._focusCol);e?.classList.contains("editing")&&e.querySelector(yt)?.focus({preventScroll:!0})},0)):(this.#B(r,!1),t._focusRow=l,t._focusCol=e?o[0]:o[o.length-1],this.beginBulkEdit(l),at(t,{forceHorizontalScroll:!0}))}}#V(){const e=this.#x;e._activeEditRows=this.#S,e._rowEditSnapshots=this.#k}#me(e,t){this.#S!==e&&(-1!==this.#S&&this.#B(this.#S,!1),this.#k.set(e,{...t}),this.#S=e,this.#A=t,this.#E=this.#Y(t),this.#V(),this.#y||(this.broadcast("edit-open",{rowIndex:e,rowId:this.#E??"",row:t}),qe(this.gridElement,$e(this.gridElement,"editingStarted",e))))}#B(e,t){if(this.#S!==e)return;const i=this.#x,r=this.#k.get(e),n=i.findRenderedRowElement?.(e),{rowId:o,current:s}=this.#ve(e);!t&&n&&s&&this.#ye(n,e,s),t||this.#y||!s||this.emit("before-edit-close",{rowIndex:e,rowId:o??"",row:s}),t&&s?this.#be(o,s,r):!t&&s&&this.#Ce(e,o,s,r),this.#xe(e),this.#L=!0,n?this.#Re(n,i):(this.#he(i),this.#L=!1),!this.#y&&s&&(this.broadcast("edit-close",{rowIndex:e,rowId:o??"",row:s,reverted:t}),t||qe(this.gridElement,$e(this.gridElement,"editingCommitted",e)))}#ve(e){const t=this.#x;let i=this.#E;const r=(i?t._getRowEntry(i):void 0)?.row??this.#A??t._rows[e];return!i&&r&&(i=this.#Y(r)),{rowId:i,current:r}}#ye(e,t,i){const r=this.#x;e.querySelectorAll(".cell.editing").forEach(e=>{const n=Number(e.getAttribute("data-col"));if(isNaN(n))return;const o=r._visibleColumns[n];if(!o)return;if(e.hasAttribute("data-editor-managed"))return;const l=e.querySelector("input,textarea,select");if(!l)return;const a=o.field,d=s(i,a),c=gt(l,o,d);d!==c&&this.#W(t,o,c,i)})}#Ce(e,t,i,r){const n=function(e,t){if(!e)return!1;const i=e,r=t,n=/* @__PURE__ */new Set([...Object.keys(i),...Object.keys(r)]);for(const o of n)if(i[o]!==r[o])return!0;return!1}(r,i),o=t?this.#O.changedRowIds.has(t):n;this.emitCancelable("row-commit",{rowIndex:e,rowId:t??"",row:i,oldValue:r,newValue:i,changed:o,changedRows:this.changedRows,changedRowIds:this.changedRowIds})?r&&this.#be(t,i,r):(t&&this.config.dirtyTracking&&(this.#O.isRowDirty(t,i)?this.#O.committedDirtyRowIds.add(t):this.#O.committedDirtyRowIds.delete(t)),n&&this.isAnimationEnabled&&(this.#D=e))}#xe(e){this.#k.delete(e),this.#S=-1,this.#E=void 0,this.#A=void 0,this.#_=-1,this.#G=!1,this.#V();for(const t of this.#T)t.startsWith(`${e}:`)&&this.#T.delete(t);for(const t of this.#I.keys())t.startsWith(`${e}:`)&&this.#I.delete(t)}#Re(e,t){const i=t.__frameworkAdapter,r=e.querySelectorAll(".cell.editing");i?.releaseCell&&r.forEach(e=>{i.releaseCell(e)}),r.forEach(e=>{e.classList.remove("editing"),function(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing")}(e.parentElement)}),t.refreshVirtualWindow(!0)}#W(e,t,i,r,n="user"){const o=t.field;if(!xt(o))return;const l=s(r,o);if(l===i)return;const a=this.#x,c=this.#Y(r),h=!c||!this.#O.changedRowIds.has(c),g=c?e=>this.grid.updateRow(c,e,"cascade"):Rt;let p=!1;const f=c?e=>{p=!0,this.setInvalid(c,o,e??"")}:()=>{},m=`${c??e}\0${o}`;if(this.#N.has(m))return;let w=!1;this.#N.add(m);try{w=this.emitCancelable("cell-commit",{row:r,rowId:c??"",field:o,oldValue:l,value:i,source:n,rowIndex:e,changedRows:this.changedRows,changedRowIds:this.changedRowIds,firstTimeForRow:h,updateRow:g,setInvalid:f})}finally{this.#N.delete(m)}if(w)return;if(c&&!p&&this.isCellInvalid(c,o)&&this.clearInvalid(c,o),d(r,o,i),u(r),c&&this.#O.changedRowIds.add(c),this.#V(),this.config.dirtyTracking&&c){const e=this.#O.isRowDirty(c,r);this.#Z(c,r,e?"modified":"pristine")}this.emitPluginEvent("cell-edit-committed",{rowIndex:e,field:o,oldValue:l,newValue:i});const b=a.findRenderedRowElement?.(e);b&&b.classList.add("changed")}#pe(e,t,i,r,n,o,s){Et(this.#q,e,t,i,r,n,o,s)}#he(e){queueMicrotask(()=>{try{const t=e._focusRow,i=e._focusCol,r=e.findRenderedRowElement?.(t);if(r){Array.from(e._bodyEl.querySelectorAll(".cell-focus")).forEach(e=>e.classList.remove("cell-focus"));const n=r.querySelector(`.cell[data-row="${t}"][data-col="${i}"]`);n&&(n.classList.add("cell-focus"),n.setAttribute("aria-selected","true"),n.hasAttribute("tabindex")||n.setAttribute("tabindex","-1"),n.focus({preventScroll:!0}))}}catch{}})}};function _t(e,t,i,r={}){const n=r.delimiter??",",o=r.newline??"\n",s={delimiter:n,newline:o,quoting:r.quoteStrings??1?"auto":"never",escapeFormulas:r.escapeFormulas},l=[],a=r.bom?"\ufeff":"";if(!1!==i.includeHeaders){const e=t.map(e=>{const t=e.header||e.field;return J(i.processHeader?i.processHeader(t,e.field):t,s)});l.push(e.join(n))}for(const d of e){const e=t.map(e=>{let t=c(d,e);return i.processCell&&(t=i.processCell(t,e.field,d)),J(t,s)});l.push(e.join(n))}return a+l.join(o)}function kt(e,t){const i=URL.createObjectURL(e),r=document.createElement("a");r.href=i,r.download=t,r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(i)}function Tt(e){return JSON.stringify(Mt(e))}function Mt(e){if(null==e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(Mt);const t={};for(const i of Object.keys(e).sort())t[i]=Mt(e[i]);return t}we("editing",e=>new At(!0===e?{editOn:"dblclick"}:"click"===e||"dblclick"===e||"manual"===e?{editOn:e}:e??void 0));var It=class{#Se=/* @__PURE__ */new Map;#Ee=0;register(e){const t=Tt(e),i=this.#Se.get(t);if(i)return i.id;this.#Ee++;const r=`s${this.#Ee}`;return this.#Se.set(t,{id:r,style:e}),r}getStyleId(e){return this.#Se.get(Tt(e))?.id}get size(){return this.#Se.size}toXml(){if(0===this.#Se.size)return"";let e="\n<Styles>";for(const{id:t,style:i}of this.#Se.values())e+=Lt(t,i);return e+="\n</Styles>",e}};function Lt(e,t){let i=`\n<Style ss:ID="${e}">`;if(t.font&&(i+="<Font",t.font.name&&(i+=` ss:FontName="${t.font.name}"`),t.font.size&&(i+=` ss:Size="${t.font.size}"`),t.font.bold&&(i+=' ss:Bold="1"'),t.font.italic&&(i+=' ss:Italic="1"'),t.font.color&&(i+=` ss:Color="${t.font.color}"`),i+="/>"),t.fill){const e=t.fill.pattern??"Solid";i+=`<Interior ss:Color="${t.fill.color}" ss:Pattern="${e}"/>`}return t.numberFormat&&(i+=`<NumberFormat ss:Format="${t.numberFormat}"/>`),t.alignment&&(i+="<Alignment",t.alignment.horizontal&&(i+=` ss:Horizontal="${t.alignment.horizontal}"`),t.alignment.vertical&&(i+=` ss:Vertical="${t.alignment.vertical}"`),t.alignment.wrapText&&(i+=' ss:WrapText="1"'),i+="/>"),t.borders&&(i+="<Borders>",t.borders.top&&(i+=Dt("Top",t.borders.top)),t.borders.bottom&&(i+=Dt("Bottom",t.borders.bottom)),t.borders.left&&(i+=Dt("Left",t.borders.left)),t.borders.right&&(i+=Dt("Right",t.borders.right)),i+="</Borders>"),i+="</Style>",i}function Dt(e,t){let i=`<Border ss:Position="${e}" ss:LineStyle="Continuous" ss:Weight="${function(e){switch(e){case"Thin":return 1;case"Medium":return 2;case"Thick":return 3}}(t.style)}"`;return t.color&&(i+=` ss:Color="${t.color}"`),i+="/>",i}function Pt(e,t,i,r,n){if(t.cellStyle){const o=t.cellStyle(i,r,n);if(o)return e.register(o)}const o=t.columnStyles?.[r];return o?e.getStyleId(o):t.defaultStyle?e.getStyleId(t.defaultStyle):void 0}function Ft(e,t){const i=Math.min(t.length,50);let r=(e.header??e.field).length;const n=l(e.field);for(let o=0;o<i;o++){const e=n(t[o]),i=null==e?0:String(e).length;i>r&&(r=i)}return r+2}function Ht(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function Gt(e){return null==e?{type:"String",displayValue:""}:"number"!=typeof e||isNaN(e)?e instanceof Date?{type:"DateTime",displayValue:e.toISOString()}:{type:"String",displayValue:Ht(String(e))}:{type:"Number",displayValue:String(e)}}function zt(e,t,i){const r=i.excelStyles,n=r?function(e){const t=new It;if(e.headerStyle&&t.register(e.headerStyle),e.groupHeaderStyle&&t.register(e.groupHeaderStyle),e.defaultStyle&&t.register(e.defaultStyle),e.columnStyles)for(const i of Object.values(e.columnStyles))t.register(i);return t}(r):void 0;let o='<?xml version="1.0" encoding="UTF-8"?>\n<?mso-application progid="Excel.Sheet"?>\n<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"\n xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">';n&&r&&(o+=function(e,t,i,r){if(t.cellStyle)for(const n of i)for(const i of r){const r=t.cellStyle(c(n,i),i.field,n);r&&e.register(r)}return e.toXml()}(n,r,e,t)),o+='\n<Worksheet ss:Name="Sheet1">\n<Table>',r&&(o+=function(e,t,i){const r=i.columnWidths,n=i.autoFitColumns;if(!r&&!n)return"";let o="";for(const s of e){let e=r?.[s.field];null==e&&n&&(e=Ft(s,t)),o+=null!=e?`\n<Column ss:Width="${7*e}"/>`:"\n<Column/>"}return o}(t,e,r));const s=r?.headerStyle&&n?n.getStyleId(r.headerStyle):void 0,l=r?.groupHeaderStyle&&n?n.getStyleId(r.groupHeaderStyle):s;return!1!==i.includeHeaders&&(o+=function(e,t){if(!e.headerRows?.length)return"";const i=t?` ss:StyleID="${t}"`:"";let r="";for(const n of e.headerRows){r+="\n<Row>";for(const e of n.cells){const t=Math.max(1,0|e.span);r+=`<Cell${i}${t>1?` ss:MergeAcross="${t-1}"`:""}><Data ss:Type="String">${Ht(e.label??"")}</Data></Cell>`}r+="</Row>"}return r}(i,l),o+=function(e,t,i){const r=i?` ss:StyleID="${i}"`:"";let n="\n<Row>";for(const o of e){const e=o.header||o.field;n+=`<Cell${r}><Data ss:Type="String">${Ht(t.processHeader?t.processHeader(e,o.field):e)}</Data></Cell>`}return n+"</Row>"}(t,i,s)),o+=function(e,t,i,r,n){let o="";for(const s of e){o+="\n<Row>";for(const e of t){let t=c(s,e);i.processCell&&(t=i.processCell(t,e.field,s));const{type:l,displayValue:a}=Gt(t),d=r&&n?Pt(r,n,t,e.field,s):void 0;o+=`<Cell${d?` ss:StyleID="${d}"`:""}><Data ss:Type="${l}">${a}</Data></Cell>`}o+="</Row>"}return o}(e,t,i,n,r),o+="\n</Table>\n</Worksheet>\n</Workbook>",o}var Ot=class extends Y{static manifest={queries:[{type:"export:csv",description:"Triggers a CSV export"}]};name="export";get defaultConfig(){return{fileName:"export",includeHeaders:!0,onlyVisible:!0,onlySelected:!1}}isExportingFlag=!1;lastExportInfo=null;handleQuery(e){if("export:csv"===e.type)return this.exportCsv(),!0}resolveExportData(e,t){const i=this.config,r={format:e,fileName:t?.fileName??i.fileName??"export",includeHeaders:t?.includeHeaders??i.includeHeaders,processCell:t?.processCell,processHeader:t?.processHeader,processHeaderRow:t?.processHeaderRow,mode:t?.mode??"raw",columns:t?.columns,rowIndices:t?.rowIndices,excelStyles:t?.excelStyles,fileExtension:t?.fileExtension,headerRows:t?.headerRows},n=Z(this.columns,t?.columns,i.onlyVisible);let o;if(t?.rowIndices)o=X(this.rows,t.rowIndices);else if(i.onlySelected){const e=this.getSelectionState();o=e?.selected?.size?X(this.rows,[...e.selected]):[...this.rows]}else o=[...this.rows];if(!1===r.includeHeaders)r.headerRows=void 0;else{const e=r.headerRows??this.#Ae(n);r.headerRows=this.#_e(e,n,r.processHeaderRow)}return{columns:n,rows:o,fullParams:r}}#Ae(e){if(0===e.length)return[];const t=this.grid;if(!t?.query)return[];const i=t.query("collectHeaderRows",{columns:e});if(!i||0===i.length)return[];const r=[];for(const n of i)if(n)if(Array.isArray(n))for(const e of n)e&&Array.isArray(e.cells)&&e.cells.length>0&&r.push(e);else Array.isArray(n.cells)&&n.cells.length>0&&r.push(n);return r}#_e(e,t,i){if(!e||0===e.length)return;const r=t.length,n=[];for(let o=0;o<e.length;o++){const t=e[o];if(!t||!Array.isArray(t.cells)||0===t.cells.length)continue;const s=[];let l=!1,a=0,d=!1;for(const e of t.cells){const t=Math.max(1,0|e.span);if(a+t>r){d=!0;break}a+=t;const n=i?i(e,o):e;null===n?s.push({label:"",span:t}):(s.push({...n,span:t}),""!==(n.label??"")&&(l=!0))}d||(a<r&&s.push({label:"",span:r-a}),l&&n.push({cells:s}))}return n.length>0?n:void 0}resolveCellOutput(e,t,i,r,n){let o=e;if("formatted"===r){const r=this.#ke(t);if(r)try{const t=r(e,i);o=null==t?"":String(t)}catch{o=null==e?"":String(e)}else o="date"===t.type?Ve(e):"boolean"===t.type?!!e:e}return n&&(o=n(o,t.field,i)),o}performExport(e,t){const{columns:i,rows:r,fullParams:n}=this.resolveExportData(e,t);this.isExportingFlag=!0;let o=n.fileName??"export";const s=this.#Te(i);try{switch(e){case"csv":{const e=_t(this.#Me(r,i,n),s,{...n,processCell:void 0},{bom:!0});o=o.endsWith(".csv")?o:`${o}.csv`,function(e,t){kt(new Blob([e],{type:"text/csv;charset=utf-8;"}),t)}(e,o);break}case"excel":{const e=zt(this.#Me(r,i,n),s,{...n,processCell:void 0}),t=n.fileExtension??".xls",l=t.startsWith(".")?t:`.${t}`;o=o.endsWith(l)?o:`${o}${l}`,function(e,t){kt(new Blob([e],{type:"application/vnd.ms-excel;charset=utf-8;"}),t)}(e,o);break}case"json":{const e=this.#Me(r,i,n),t=n.headerRows&&n.headerRows.length>0?{headerRows:n.headerRows,rows:e}:e,s=JSON.stringify(t,null,2);o=o.endsWith(".json")?o:`${o}.json`;kt(new Blob([s],{type:"application/json"}),o);break}}this.lastExportInfo={format:e,timestamp:/* @__PURE__ */new Date},this.emit("export-complete",{format:e,fileName:o,rowCount:r.length,columnCount:i.length})}finally{this.isExportingFlag=!1}}#Me(e,t,i){const r=i.mode??"raw";return e.map(e=>{const n={};for(const o of t){const t=c(e,o);n[o.field]=this.resolveCellOutput(t,o,e,r,i.processCell)}return n})}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}export(e){const{columns:t,rows:i,fullParams:r}=this.resolveExportData("json",e);return this.#Me(i,t,r)}getResolvedColumns(e){return Z(this.columns,e?.columns,this.config.onlyVisible)}formatCsv(e,t,i){const{columns:r,fullParams:n}=this.resolveExportData("csv",t);return _t(e,this.#Te(r),n,i)}formatExcel(e,t){const{columns:i,fullParams:r}=this.resolveExportData("excel",t);return zt(e,this.#Te(i),r)}#Te(e){return e.map(e=>e.valueAccessor?{...e,valueAccessor:void 0}:e)}#ke(e){if(e.format)return e.format;if(!e.type)return;const t=this.grid,i=t?.__frameworkAdapter;return i?.getTypeDefault?i.getTypeDefault(e.type,t?._hostElement)?.format:void 0}exportCsv(e){this.performExport("csv",e)}exportExcel(e){this.performExport("excel",e)}exportJson(e){this.performExport("json",e)}isExporting(){return this.isExportingFlag}getLastExport(){return this.lastExportInfo}};we("export",e=>new Ot("boolean"==typeof e?{}:e??{}));var Nt="(Blank)";function qt(e){return null==e||""===e||"number"==typeof e&&isNaN(e)}function $t(e){if("number"==typeof e)return e;if(e instanceof Date)return e.getTime();const t=Number(e);return isNaN(t)?new Date(e).getTime():t}function Wt(e,t,i){const r=e.field,n=l(r),o=i?e=>i(n(e),e):n;return function(e,t){if("blank"===e.operator)return e=>{const i=t(e);return null==i||""===i||"number"==typeof i&&isNaN(i)};if("notBlank"===e.operator)return e=>{const i=t(e);return null!=i&&""!==i&&!("number"==typeof i&&isNaN(i))}}(e,o)??function(e,t,i){const r=e.operator;if("in"!==r&&"notIn"!==r)return;const n="notIn"===r;if(!Array.isArray(e.value))return n?()=>!0:()=>!1;const o=new Set(e.value);return i?e=>{const r=i(t(e),e),s=Array.isArray(r)?r:null!=r?[r]:[],l=0===s.length?o.has(Nt):s.some(e=>o.has(e));return n?!l:l}:e=>{const i=t(e),r=null==i||""===i?o.has(Nt):o.has(i);return n?!r:r}}(e,n,i)??function(e,t,i,r){const n=e.operator,o="number"===e.type&&r,s=o&&a(t)?t:null;if("greaterThan"===n){const t=$t(e.value);return s?e=>{const i=e[s];return!qt(i)&&i>t}:o?e=>{const r=i(e);return!qt(r)&&r>t}:e=>{const r=i(e);if(qt(r))return!1;const n=$t(r);return!isNaN(n)&&n>t}}if("greaterThanOrEqual"===n){const t=$t(e.value);return s?e=>{const i=e[s];return!qt(i)&&i>=t}:o?e=>{const r=i(e);return!qt(r)&&r>=t}:e=>{const r=i(e);if(qt(r))return!1;const n=$t(r);return!isNaN(n)&&n>=t}}if("lessThan"===n){const t=$t(e.value);return s?e=>{const i=e[s];return!qt(i)&&i<t}:o?e=>{const r=i(e);return!qt(r)&&r<t}:e=>{const r=i(e);if(qt(r))return!1;const n=$t(r);return!isNaN(n)&&n<t}}if("lessThanOrEqual"===n){const t=$t(e.value);return s?e=>{const i=e[s];return!qt(i)&&i<=t}:o?e=>{const r=i(e);return!qt(r)&&r<=t}:e=>{const r=i(e);if(qt(r))return!1;const n=$t(r);return!isNaN(n)&&n<=t}}if("between"===n){const t=$t(e.value),r=$t(e.valueTo);return s?e=>{const i=e[s];if(qt(i))return!1;return i>=t&&i<=r}:o?e=>{const n=i(e);if(qt(n))return!1;return n>=t&&n<=r}:e=>{const n=i(e);if(qt(n))return!1;const o=$t(n);return!isNaN(o)&&o>=t&&o<=r}}}(e,r,o,void 0===i)??function(e,t,i){const r=e.operator,n=t?String(e.value):String(e.value).toLowerCase();if("contains"===r)return t?e=>{const t=i(e);return null!=t&&String(t).includes(n)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().includes(n)};if("notContains"===r)return t?e=>{const t=i(e);return null!=t&&!String(t).includes(n)}:e=>{const t=i(e);return null!=t&&!String(t).toLowerCase().includes(n)};if("equals"===r)return t?e=>{const t=i(e);return null!=t&&String(t)===n}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase()===n};if("notEquals"===r)return t?e=>{const t=i(e);return null!=t&&String(t)!==n}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase()!==n};if("startsWith"===r)return t?e=>{const t=i(e);return null!=t&&String(t).startsWith(n)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().startsWith(n)};if("endsWith"===r)return t?e=>{const t=i(e);return null!=t&&String(t).endsWith(n)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().endsWith(n)}}(e,t,o)??(()=>!0)}function Bt(e,t,i){const r=/* @__PURE__ */new Set;let n=!1;const o=l(t);for(const s of e){const e=o(s);if(i){const t=i(e,s);if(Array.isArray(t)){0===t.length&&(n=!0);for(const e of t)null!=e&&r.add(e)}else null!=t?r.add(t):n=!0}else null!=e&&""!==e?r.add(e):n=!0}return n&&r.add(Nt),[...r].sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:String(e).localeCompare(String(t)))}var Vt="__tbw_expander";function Kt(e){return e.field===Vt}function jt(e){return!0===e.utility}function Ut(e){return e?e.toISOString().split("T")[0]:""}function Yt(e){return e?"string"==typeof e?e:"number"==typeof e?Ut(new Date(e)):"":""}function Zt(e,t,i,r,n,o){const{field:s,column:l}=t,a=function(e){if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-filter-item-height");if(t&&t.trim()){const e=parseFloat(t);if(!isNaN(e)&&e>0)return e}}return 28}(e),d=e=>{if(null==e)return"(Blank)";if(l.format&&!l.filterValue){const t=l.format(e,void 0);if(t)return t}return String(e)};i=i.slice().sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:d(e).localeCompare(d(t)));const c=document.createElement("div");c.className="tbw-filter-search";const u=document.createElement("input");u.type="text",u.placeholder=t.t("filter.search","Search..."),u.className="tbw-filter-search-input",u.value=o.get(s)??"",c.appendChild(u),e.appendChild(c);const h=document.createElement("div");h.className="tbw-filter-actions";const g=document.createElement("label");g.className="tbw-filter-value-item",g.style.padding="0",g.style.margin="0";const p=document.createElement("input");p.type="checkbox",p.className="tbw-filter-checkbox";const f=document.createElement("span");f.textContent=t.t("filter.selectAll","Select All"),g.appendChild(p),g.appendChild(f),h.appendChild(g);const m=/* @__PURE__ */new Map;i.forEach(e=>{const t=null==e?"__null__":String(e);m.set(t,!r.has(e))});const w=()=>{const e=[...m.values()],t=e.every(e=>e),i=e.every(e=>!e);p.checked=t,p.indeterminate=!t&&!i};p.addEventListener("change",()=>{const e=p.checked;for(const t of m.keys())m.set(t,e);w(),R()}),w(),e.appendChild(h);const b=document.createElement("div");b.className="tbw-filter-values";const v=document.createElement("div");v.className="tbw-filter-values-spacer",b.appendChild(v);const y=document.createElement("div");y.className="tbw-filter-values-content",b.appendChild(y);let C=[];const x=(e,t)=>{const i=d(e),r=null==e?"__null__":String(e),n=document.createElement("label");n.className="tbw-filter-value-item",n.style.position="absolute",n.style.top=`calc(var(--tbw-filter-item-height, 28px) * ${t})`,n.style.left="0",n.style.right="0",n.style.boxSizing="border-box";const o=document.createElement("input");o.type="checkbox",o.className="tbw-filter-checkbox",o.checked=m.get(r)??!0,o.dataset.value=r,o.addEventListener("change",()=>{m.set(r,o.checked),w()});const s=document.createElement("span");return s.textContent=i,n.appendChild(o),n.appendChild(s),n},R=()=>{const e=C.length,t=b.clientHeight,i=b.scrollTop;if(v.style.height=e*a+"px",e<=50/3)return y.innerHTML="",y.style.transform="translateY(0px)",void C.forEach((e,t)=>{y.appendChild(x(e,t))});const r=function(e){const{totalRows:t,viewportHeight:i,scrollTop:r,rowHeight:n,overscan:o,maxSpacerHeight:s=Je}=e,l=Math.ceil(i/n),a=t*n,d=et(a,i,s),c=tt(r,d);let u=Math.floor(c/n)-o;u<0&&(u=0);let h=u+l+2*o;return h>t&&(h=t),h===t&&u>0&&(u=Math.max(0,h-l-2*o)),{start:u,end:h,offsetY:u*n,totalHeight:d.spacerHeight,rawContentHeight:a}}({totalRows:e,viewportHeight:t,scrollTop:i,rowHeight:a,overscan:3});y.style.transform=`translateY(${r.offsetY}px)`,y.innerHTML="";for(let n=r.start;n<r.end;n++)y.appendChild(x(C[n],n-r.start))},S=e=>{const r=n.caseSensitive??!1,o=r?e:e.toLowerCase();if(C=i.filter(t=>{const i=d(t),n=r?i:i.toLowerCase();return!e||n.includes(o)}),C.sort((e,t)=>{const i=null==e?"__null__":String(e),r=null==t?"__null__":String(t),n=m.get(i)??!0;return n!==(m.get(r)??!0)?n?-1:1:"number"==typeof e&&"number"==typeof t?e-t:d(e).localeCompare(d(t))}),0===C.length){v.style.height="0px",y.innerHTML="";const e=document.createElement("div");return e.className="tbw-filter-no-match",e.textContent=t.t("filter.noMatches","No matching values"),void y.appendChild(e)}R()};let E;b.addEventListener("scroll",()=>{C.length>0&&R()},{passive:!0}),S(u.value),e.appendChild(b),u.addEventListener("input",()=>{clearTimeout(E),E=setTimeout(()=>{o.set(s,u.value),S(u.value)},n.debounceMs??150)});const A=document.createElement("div");A.className="tbw-filter-buttons";const _=document.createElement("button");_.type="button",_.className="tbw-filter-apply-btn",_.textContent=t.t("filter.apply","Apply"),_.addEventListener("click",()=>{const e=[];for(const[t,r]of m)if(!r)if("__null__"===t)e.push(null);else{const r=i.find(e=>String(e)===t);e.push(void 0!==r?r:t)}t.applySetFilter(e)}),A.appendChild(_);const k=document.createElement("button");k.type="button",k.className="tbw-filter-clear-btn",k.textContent=t.t("filter.clear","Clear Filter"),k.addEventListener("click",()=>{t.clearFilter()}),A.appendChild(k),e.appendChild(A)}function Xt(e,t){if("number"==typeof e)return e;if("string"==typeof e){const i=parseFloat(e);return isNaN(i)?t:i}return t}var Qt=class e extends Y{static manifest={events:[{type:"filter-change",description:"Emitted when filter criteria change. Broadcast to both DOM consumers and plugin bus."}],queries:[{type:"getContextMenuItems",description:"Contributes filter-related items to the header context menu"}]};name="filtering";styles='@layer tbw-plugins{tbw-grid .tbw-quick-filter-input{max-width:300px;height:var(--tbw-input-height,1.75rem);padding:var(--tbw-input-padding,0 .5rem);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);background:var(--tbw-color-bg);color:var(--tbw-color-fg);font-size:var(--tbw-font-size-sm,.8125rem);flex:1}tbw-grid .tbw-quick-filter-input:focus{border-color:var(--tbw-color-accent);outline:none}tbw-grid .header-cell.filtered:before{content:"";top:var(--tbw-spacing-xs,.25rem);right:var(--tbw-spacing-xs,.25rem);width:var(--tbw-indicator-size,.375rem);height:var(--tbw-indicator-size,.375rem);background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));border-radius:50%;position:absolute}tbw-grid .tbw-filter-btn{display:var(--tbw-filter-btn-display,inline-flex);visibility:var(--tbw-filter-btn-visibility,visible);cursor:pointer;margin-left:var(--tbw-spacing-xs,.25rem);opacity:.4;transition:opacity .15s, visibility 0s, display 0s allow-discrete;color:inherit;vertical-align:middle;transition-behavior:allow-discrete;background:0 0;border:none;justify-content:center;align-items:center;padding:2px}tbw-grid .tbw-filter-btn:hover,tbw-grid .tbw-filter-btn.active{opacity:1;visibility:visible;display:inline-flex}tbw-grid .tbw-filter-btn.active{color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6))}tbw-grid .header-row .cell:hover .tbw-filter-btn,tbw-grid .header-row .cell.filtered .tbw-filter-btn{visibility:visible;display:inline-flex}@media (hover:none){tbw-grid .header-row .cell .tbw-filter-btn{visibility:visible;display:inline-flex}}tbw-grid .tbw-filter-btn{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}';get defaultConfig(){return{debounceMs:300,caseSensitive:!1}}isFilteringEnabled(){return!1!==this.grid.effectiveConfig?.filterable}isColumnFilterable(e){return!!this.isFilteringEnabled()&&!1!==e.filterable}getDataRows(){const e=this.sourceRows;if(e.length>0)return e;const t=this.rows;return 0===t.length?t:t.filter(e=>null!=e&&!0!==e.__loading)}getFilterValues(){const e=this.grid.effectiveConfig?.columns;if(!e)return;let t;for(const i of e){if(!i.field)continue;const e=this.getFilterExtractor(i);e&&(t||(t=/* @__PURE__ */new Map),t.set(i.field,e))}return t}getFilterExtractor(e){return e.filterValue?e.filterValue:e.valueAccessor?(t,i)=>c(i,e):void 0}filters=/* @__PURE__ */new Map;cachedResult=null;cacheKey=null;cachedInputRows=null;openPanelField=null;panelElement=null;panelAnchorElement=null;panelButtonElement=null;searchText=/* @__PURE__ */new Map;excludedValues=/* @__PURE__ */new Map;panelAbortController=null;globalStylesInjected=!1;columnLookup=null;columnLookupRef=null;getColumnByField(e){const t=this.grid.effectiveConfig?.columns;if(!t)return;let i=this.columnLookup;if(t!==this.columnLookupRef||!i){i=/* @__PURE__ */new Map;for(const e of t)e.field&&i.set(e.field,e);this.columnLookup=i,this.columnLookupRef=t}return i.get(e)}computeSelected(){const e={},t=[];for(const[i,r]of this.filters)if("set"===r.type)if("in"===r.operator&&Array.isArray(r.value))e[i]=r.value;else if("notIn"===r.operator){const e=this.getColumnByField(i);t.push({field:i,filterValue:e?this.getFilterExtractor(e):void 0})}if(t.length>0){const i=function(e,t){const i=/* @__PURE__ */new Map,r=/* @__PURE__ */new Map;for(const{field:o,filterValue:s}of t)i.set(o,{values:/* @__PURE__ */new Set,hasBlank:!1,hasExtractor:!!s}),r.set(o,l(o));for(const o of e)for(const{field:e,filterValue:n}of t){const t=i.get(e),s=r.get(e)(o);if(n){const e=n(s,o);if(Array.isArray(e)){0===e.length&&(t.hasBlank=!0);for(const i of e)null!=i&&t.values.add(i)}else null!=e?t.values.add(e):t.hasBlank=!0}else null!=s&&""!==s?t.values.add(s):t.hasBlank=!0}const n=/* @__PURE__ */new Map;for(const[o,{values:s,hasBlank:l}]of i)l&&s.add(Nt),n.set(o,[...s].sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:String(e).localeCompare(String(t))));return n}(this.getDataRows(),t);for(const{field:r}of t){const t=this.excludedValues.get(r),n=i.get(r)??[];e[r]=t?n.filter(e=>!t.has(e)):n}}return e}invalidateCache(){this.cachedResult=null,this.cacheKey=null,this.cachedInputRows=null}notifyFilterChange(e,t,i){i?this.emitPluginEvent("filter-change",{filters:e}):(this.broadcast("filter-change",{filters:e,filteredRowCount:t,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.())}syncExcludedValues(e,t){if(t)if("set"===t.type&&"notIn"===t.operator&&Array.isArray(t.value))this.excludedValues.set(e,new Set(t.value));else if("set"===t.type&&"in"===t.operator&&Array.isArray(t.value)){const i=this.getDataRows();if(!i||0===i.length)return void this.excludedValues.delete(e);const r=t.value,n=new Set(r.map(e=>null==e?Nt:e)),o=this.getUniqueValues(e),s=new Set(o.filter(e=>!n.has(e)));this.excludedValues.set(e,s)}else"set"===t.type&&this.excludedValues.delete(e);else this.excludedValues.delete(e)}attach(e){super.attach(e),this.injectGlobalStyles()}detach(){this.filters.clear(),this.invalidateCache(),this.columnLookup=null,this.columnLookupRef=null,this.openPanelField=null,this.panelElement&&(this.dismissTopLayer(this.panelElement),this.panelElement.remove(),this.panelElement=null),this.searchText.clear(),this.excludedValues.clear(),this.panelAbortController?.abort(),this.panelAbortController=null}handleQuery(e){if("filter:get-model"===e.type){if(!this.filters.size)return;return Object.fromEntries(this.filters)}if("getContextMenuItems"===e.type){const t=e.context;if(!t.isHeader)return;const i=t.column;if(!i?.field)return;if(!this.isFilteringEnabled())return;if(!this.isColumnFilterable(i))return;const r=[],n=this.isFieldFiltered(i.field),o=this.filters.size>0;return n&&r.push({id:"filtering/clear-column-filter",label:"Clear Filter",icon:"✕",order:20,action:()=>this.clearFieldFilter(i.field)}),o&&r.push({id:"filtering/clear-all-filters",label:this.t("filter.clearAll","Clear All Filters"),icon:"✕",order:21,disabled:!o,action:()=>this.clearAllFilters()}),r.length>0?r:void 0}}processRows(e){if(!this.filters.size)return e;const t=[...this.filters.values()];if(this.config.filterHandler)return this.cachedResult?this.cachedResult:e;const i=(r=t,JSON.stringify(r.map(e=>({field:e.field,operator:e.operator,value:e.value,valueTo:e.valueTo}))));var r;const n=e===this.cachedInputRows;if(this.cacheKey===i&&this.cachedResult&&n)return this.cachedResult;if(!n)for(const[s,l]of this.filters)"set"===l.type&&"in"===l.operator&&this.syncExcludedValues(s,l);const o=function(e,t,i=!1,r){if(!t.length)return e;const n=t.map(e=>Wt(e,i,r?.get(e.field)));return 1===n.length?e.filter(n[0]):e.filter(e=>{for(let t=0;t<n.length;t++)if(!n[t](e))return!1;return!0})}(e,t,this.config.caseSensitive,this.getFilterValues());return this.cachedResult=o,this.cacheKey=i,this.cachedInputRows=e,o}afterRender(){const e=this.gridElement;e&&e.querySelectorAll('[part~="header-cell"]').forEach(e=>{const t=e.getAttribute("data-col");if(null===t)return;const i=this.visibleColumns[parseInt(t,10)];if(!i||!this.isColumnFilterable(i))return;if(jt(i))return;const r=i.field;if(!r)return;const n=this.filters.has(r);let o=e.querySelector(".tbw-filter-btn");if(o){const t=o.classList.contains("active");return o.classList.toggle("active",n),e.classList.toggle("filtered",n),n?e.setAttribute("aria-description","Filtered"):e.removeAttribute("aria-description"),void(t!==n&&this.setIcon(o,n?"filterActive":"filter"))}o=document.createElement("button"),o.type="button",o.className="tbw-filter-btn",o.setAttribute("aria-label",`Filter ${i.header??r}`),this.setIcon(o,n?"filterActive":"filter"),n&&(o.classList.add("active"),e.classList.add("filtered"),e.setAttribute("aria-description","Filtered")),o.addEventListener("click",e=>{e.stopPropagation(),this.toggleFilterPanel(r,i,o)});const s=e.querySelector(".resize-handle");s?e.insertBefore(o,s):e.appendChild(o)})}setFilter(e,t,i){if(null===t)this.filters.delete(e),this.syncExcludedValues(e,null);else{const i={...t,field:e};this.filters.set(e,i),this.syncExcludedValues(e,i)}if(this.invalidateCache(),this.notifyFilterChange([...this.filters.values()],0,i?.silent),!i?.silent){const i=this.getColumnByField(e)?.header??e;qe(this.gridElement,$e(this.gridElement,null===t?"filterCleared":"filterApplied",i))}this.requestRender()}getFilter(e){return this.filters.get(e)}getFilters(){return[...this.filters.values()]}getFilterModel(){return this.getFilters()}setFilterModel(e,t){this.filters.clear(),this.excludedValues.clear();for(const i of e)this.filters.set(i.field,i),this.syncExcludedValues(i.field,i);this.invalidateCache(),this.notifyFilterChange([...this.filters.values()],0,t?.silent),this.requestRender()}clearAllFilters(e){this.filters.clear(),this.excludedValues.clear(),this.searchText.clear(),this.applyFiltersInternal(e?.silent),e?.silent||qe(this.gridElement,$e(this.gridElement,"allFiltersCleared"))}clearFieldFilter(e,t){if(this.filters.delete(e),this.excludedValues.delete(e),this.searchText.delete(e),this.applyFiltersInternal(t?.silent),!t?.silent){const t=this.getColumnByField(e)?.header??e;qe(this.gridElement,$e(this.gridElement,"filterCleared",t))}}isFieldFiltered(e){return this.filters.has(e)}getFilteredRowCount(){return this.cachedResult?.length??this.rows.length}getActiveFilters(){return this.getFilters()}getUniqueValues(e){const t=this.getColumnByField(e)?.filterValue;return Bt(this.getDataRows(),e,t)}getStaleFilters(){const e=[];for(const[t,i]of this.filters){if("set"!==i.type)continue;const r=this.getUniqueValues(t);if("notIn"===i.operator&&Array.isArray(i.value)){const t=new Set(i.value);0===r.filter(e=>!t.has(e)).length&&e.push(i)}else if("in"===i.operator&&Array.isArray(i.value)){const t=new Set(i.value);0===r.filter(e=>t.has(e)).length&&e.push(i)}}return e}getBlankMode(e){const t=this.filters.get(e);return"blank"===t?.operator?"blanksOnly":"notBlank"===t?.operator?"nonBlanksOnly":"all"}toggleBlankFilter(e,t){if("all"===t){const t=this.filters.get(e);if(t?.valueTo&&"object"==typeof t.valueTo){const i=t.valueTo;this.setFilter(e,i)}else this.setFilter(e,null);return}const i=this.filters.get(e),r=i&&"blank"!==i.operator&&"notBlank"!==i.operator?{type:i.type,operator:i.operator,value:i.value,valueTo:i.valueTo}:i?.valueTo;this.setFilter(e,{type:i?.type??"text",operator:"blanksOnly"===t?"blank":"notBlank",value:"",valueTo:r})}copyGridThemeContext(e){const t=this.gridElement;if(!t)return;for(const r of t.classList)r.startsWith("tbw-")||"selecting"===r||e.classList.add(r);const i=t.dataset.theme;i&&(e.dataset.theme=i)}injectGlobalStyles(){if(this.globalStylesInjected)return;if(document.getElementById("tbw-filter-panel-styles"))return void(this.globalStylesInjected=!0);const e=document.createElement("style");e.id="tbw-filter-panel-styles",e.textContent="@layer tbw-plugins{.tbw-filter-panel{background:var(--tbw-filter-panel-bg,var(--tbw-color-panel-bg,light-dark(#eee,#222)));color:var(--tbw-filter-panel-fg,var(--tbw-color-fg,light-dark(#222,#eee)));border:1px solid var(--tbw-filter-panel-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:var(--tbw-filter-panel-radius,var(--tbw-border-radius,.25rem));box-shadow:0 4px 16px var(--tbw-filter-panel-shadow,var(--tbw-color-shadow,light-dark(#0000001a,#0000004d)));padding:var(--tbw-panel-padding,var(--tbw-spacing-lg,.75rem));z-index:10000;min-width:200px;max-width:280px;max-height:350px;font-family:var(--tbw-font-family,system-ui, sans-serif);font-size:var(--tbw-font-size,.8125rem);transform-origin:top;flex-direction:column;display:flex;position:fixed}.tbw-filter-panel.tbw-filter-panel-above{transform-origin:bottom}.tbw-filter-panel.tbw-filter-panel-animated{animation:tbw-filter-panel-enter var(--tbw-animation-duration,.15s) var(--tbw-animation-easing,ease-out)}.tbw-filter-panel.tbw-filter-panel-above.tbw-filter-panel-animated{animation:tbw-filter-panel-enter-above var(--tbw-animation-duration,.15s) var(--tbw-animation-easing,ease-out)}@keyframes tbw-filter-panel-enter{0%{opacity:0;transform:scaleY(.3)translateY(-10px)}to{opacity:1;transform:scaleY(1)translateY(0)}}@keyframes tbw-filter-panel-enter-above{0%{opacity:0;transform:scaleY(.3)translateY(10px)}to{opacity:1;transform:scaleY(1)translateY(0)}}@supports (anchor-name:--test){.tbw-filter-panel{position-anchor:--tbw-filter-anchor;top:anchor(bottom);right:anchor(right);position-try-fallbacks:flip-inline, flip-block, flip-block flip-inline;margin-inline:0;margin-top:4px;bottom:auto;left:auto}}.tbw-filter-search{margin-bottom:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));min-height:var(--tbw-filter-item-height,28px)}.tbw-filter-search-input{height:var(--tbw-filter-item-height,28px);width:100%;padding:var(--tbw-filter-search-padding,var(--tbw-spacing-sm,.375rem) var(--tbw-spacing-md,.5rem));background:var(--tbw-filter-input-bg,var(--tbw-color-bg,transparent));color:inherit;border:1px solid var(--tbw-filter-input-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:var(--tbw-filter-input-radius,var(--tbw-border-radius,.25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-search-input:focus{border-color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6)) r g b / 15%);outline:none}.tbw-filter-actions{padding:var(--tbw-button-padding-sm,.25rem .125rem);margin-bottom:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));border-bottom:1px solid var(--tbw-filter-divider,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));min-height:var(--tbw-filter-item-height,28px);display:flex}.tbw-filter-actions .tbw-filter-value-item{flex:1}.tbw-filter-values{margin-bottom:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));flex:1;max-height:180px;position:relative;overflow-y:auto}.tbw-filter-values-spacer{width:1px}.tbw-filter-values-content{position:absolute;top:0;left:0;right:0}.tbw-filter-value-item{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));padding:var(--tbw-button-padding-sm,.25rem .125rem);cursor:pointer;height:var(--tbw-filter-item-height,28px);border-radius:3px;display:flex}.tbw-filter-value-item:hover{background:var(--tbw-filter-hover,var(--tbw-color-row-hover,light-dark(#f0f6ff,#1c1c1c)))}.tbw-filter-checkbox{cursor:pointer;accent-color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));margin:0}.tbw-filter-no-match{color:var(--tbw-filter-muted,var(--tbw-color-fg-muted,light-dark(#555,#aaa)));padding:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem)) 0;text-align:center;font-style:italic}.tbw-filter-buttons{gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));padding-top:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));border-top:1px solid var(--tbw-filter-divider,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));display:flex}.tbw-filter-apply-btn{padding:var(--tbw-filter-btn-padding,var(--tbw-button-padding,.375rem .75rem));background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));color:var(--tbw-filter-accent-fg,var(--tbw-color-accent-fg,light-dark(#fff,#000)));border-radius:var(--tbw-border-radius,.25rem);cursor:pointer;font-size:var(--tbw-font-size-sm,.8125rem);font-weight:var(--tbw-filter-btn-font-weight,500);min-height:var(--tbw-filter-btn-min-height,auto);border:none;flex:1}.tbw-filter-apply-btn:hover{filter:brightness(.9)}.tbw-filter-clear-btn{padding:var(--tbw-filter-btn-padding,var(--tbw-button-padding,.375rem .75rem));color:var(--tbw-filter-muted,var(--tbw-color-fg-muted,light-dark(#555,#aaa)));border:1px solid var(--tbw-filter-input-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:var(--tbw-border-radius,.25rem);cursor:pointer;font-size:var(--tbw-font-size-sm,.8125rem);font-weight:var(--tbw-filter-btn-font-weight,500);min-height:var(--tbw-filter-btn-min-height,auto);background:0 0;flex:1}.tbw-filter-clear-btn:hover{background:var(--tbw-filter-hover,var(--tbw-color-row-hover,light-dark(#f0f6ff,#1c1c1c)))}.tbw-filter-range-inputs,.tbw-filter-date-range{align-items:flex-end;gap:var(--tbw-spacing-sm,.375rem);margin-bottom:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));display:flex}.tbw-filter-range-group,.tbw-filter-date-group{gap:var(--tbw-spacing-xs,.25rem);flex-direction:column;flex:1;display:flex}.tbw-filter-range-label{font-size:var(--tbw-font-size-xs,.75rem);color:var(--tbw-filter-muted,var(--tbw-color-fg-muted,light-dark(#555,#aaa)))}.tbw-filter-range-input,.tbw-filter-date-input{width:100%;height:var(--tbw-filter-item-height,28px);padding:var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-sm,.375rem);background:var(--tbw-filter-input-bg,var(--tbw-color-bg,transparent));color:inherit;border:1px solid var(--tbw-filter-input-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:var(--tbw-filter-input-radius,var(--tbw-border-radius,.25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-range-input:focus,.tbw-filter-date-input:focus{border-color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6)) r g b / 15%);outline:none}.tbw-filter-range-separator{color:var(--tbw-filter-muted,var(--tbw-color-fg-muted,light-dark(#555,#aaa)));padding-bottom:var(--tbw-spacing-xs,.25rem)}.tbw-filter-blank-option{align-items:center;gap:var(--tbw-spacing-sm,.375rem);padding:var(--tbw-spacing-xs,.25rem) 0;margin-bottom:var(--tbw-spacing-xs,.25rem);font-size:var(--tbw-font-size-sm,.8125rem);cursor:pointer;-webkit-user-select:none;user-select:none;display:flex}.tbw-filter-blank-checkbox{accent-color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));cursor:pointer;margin:0}.tbw-filter-date-range.tbw-filter-disabled,.tbw-filter-range-inputs.tbw-filter-disabled,.tbw-filter-range-slider.tbw-filter-disabled{opacity:.4;pointer-events:none}.tbw-filter-range-slider{height:24px;margin:var(--tbw-spacing-md,.5rem) 0 var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));position:relative}.tbw-filter-range-track{background:var(--tbw-filter-input-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:2px;height:4px;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.tbw-filter-range-fill{background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));border-radius:2px;height:4px;position:absolute;top:50%;transform:translateY(-50%)}.tbw-filter-range-thumb{pointer-events:none;appearance:none;background:0 0;width:100%;height:100%;position:absolute;top:0}.tbw-filter-range-thumb::-webkit-slider-thumb{appearance:none;background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));border:2px solid var(--tbw-filter-panel-bg,var(--tbw-color-panel-bg,light-dark(#eee,#222)));cursor:pointer;pointer-events:all;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-moz-range-thumb{background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));border:2px solid var(--tbw-filter-panel-bg,var(--tbw-color-panel-bg,light-dark(#eee,#222)));cursor:pointer;pointer-events:all;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-webkit-slider-thumb:hover{transform:scale(1.1)}.tbw-filter-range-thumb::-moz-range-thumb:hover{transform:scale(1.1)}}",document.head.appendChild(e),this.globalStylesInjected=!0}toggleFilterPanel(e,t,i){if(this.openPanelField===e)return void this.closeFilterPanel();this.closeFilterPanel();const r=document.createElement("div");if(r.className="tbw-filter-panel",this.copyGridThemeContext(r),this.isAnimationEnabled&&r.classList.add("tbw-filter-panel-animated"),this.panelElement=r,this.openPanelField=e,i.classList.add("active"),this.panelButtonElement=i,this.config.valuesHandler)return r.innerHTML='<div class="tbw-filter-loading">Loading...</div>',document.body.appendChild(r),this.promoteToTopLayer(r),this.positionPanel(r,i),this.setupPanelCloseHandler(r,i),void this.config.valuesHandler(e,t).then(i=>{this.openPanelField===e&&this.panelElement&&(r.innerHTML="",this.renderPanelContent(e,t,r,i))});const n=Bt(this.getDataRows(),e,this.getFilterExtractor(t));document.body.appendChild(r),this.promoteToTopLayer(r),this.positionPanel(r,i),this.renderPanelContent(e,t,r,n),this.setupPanelCloseHandler(r,i)}renderPanelContent(e,t,i,r){const n=this.filters.get(e);if("in"===n?.operator&&"set"===n.type&&Array.isArray(n.value)&&!this.excludedValues.has(e)){const t=n.value,i=new Set(t.map(e=>null==e?Nt:e)),o=new Set(r.filter(e=>!i.has(e)));this.excludedValues.set(e,o)}let o=this.excludedValues.get(e);o||(o=/* @__PURE__ */new Set,this.excludedValues.set(e,o));const s=this.searchText.get(e)??"",l={field:e,column:t,uniqueValues:r,excludedValues:o,searchText:s,currentFilter:this.filters.get(e),applySetFilter:(t,i)=>{this.applySetFilter(e,t,i),this.closeFilterPanel()},applyTextFilter:(t,i,r)=>{this.applyTextFilter(e,t,i,r),this.closeFilterPanel()},clearFilter:()=>{this.clearFieldFilter(e),this.closeFilterPanel()},closePanel:()=>this.closeFilterPanel(),t:this.translate};let a=!1;if(this.config.filterPanelRenderer&&(this.config.filterPanelRenderer(i,l),a=i.children.length>0),!a&&t.type){const e=this.grid.effectiveConfig.typeDefaults?.[t.type];e?.filterPanelRenderer&&(e.filterPanelRenderer(i,l),a=i.children.length>0)}if(!a){const e=t.filterType??t.type;"number"===e?function(e,t,i,r){const{field:n,column:o}=t,s=o.filterParams,l=o.editorParams,a=i.filter(e=>"number"==typeof e&&!isNaN(e)),d=a.length>0?Math.min(...a):0,c=a.length>0?Math.max(...a):100,u=Xt(s?.min??l?.min,d),h=Xt(s?.max??l?.max,c),g=s?.step??l?.step??1,p=a.length>0?Math.max(u,d):u,f=a.length>0?Math.min(h,c):h,m=r.get(n);let w=p,b=f;const v="blank"===m?.operator;"between"===m?.operator?(w=Xt(m.value,p),b=Xt(m.valueTo,f)):"greaterThanOrEqual"===m?.operator?w=Xt(m.value,p):"lessThanOrEqual"===m?.operator&&(b=Xt(m.value,f));const y=document.createElement("div");y.className="tbw-filter-range-inputs";const C=document.createElement("div");C.className="tbw-filter-range-group";const x=document.createElement("label");x.textContent=t.t("filter.min","Min"),x.className="tbw-filter-range-label";const R=document.createElement("input");R.type="number",R.className="tbw-filter-range-input",R.min=String(u),R.max=String(h),R.step=String(g),R.value=String(w),C.appendChild(x),C.appendChild(R),y.appendChild(C);const S=document.createElement("span");S.className="tbw-filter-range-separator",S.textContent="–",y.appendChild(S);const E=document.createElement("div");E.className="tbw-filter-range-group";const A=document.createElement("label");A.textContent=t.t("filter.max","Max"),A.className="tbw-filter-range-label";const _=document.createElement("input");_.type="number",_.className="tbw-filter-range-input",_.min=String(u),_.max=String(h),_.step=String(g),_.value=String(b),E.appendChild(A),E.appendChild(_),y.appendChild(E),e.appendChild(y);const k=document.createElement("div");k.className="tbw-filter-range-slider";const T=document.createElement("div");T.className="tbw-filter-range-track";const M=document.createElement("div");M.className="tbw-filter-range-fill";const I=document.createElement("input");I.type="range",I.className="tbw-filter-range-thumb tbw-filter-range-thumb-min",I.min=String(u),I.max=String(h),I.step=String(g),I.value=String(w);const L=document.createElement("input");L.type="range",L.className="tbw-filter-range-thumb tbw-filter-range-thumb-max",L.min=String(u),L.max=String(h),L.step=String(g),L.value=String(b),k.appendChild(T),k.appendChild(M),k.appendChild(I),k.appendChild(L),e.appendChild(k);const D=document.createElement("label");D.className="tbw-filter-blank-option";const P=document.createElement("input");P.type="checkbox",P.className="tbw-filter-blank-checkbox",P.checked=v;const F=document.createTextNode("Blank");D.appendChild(P),D.appendChild(F);const H=e=>{R.disabled=e,_.disabled=e,I.disabled=e,L.disabled=e,y.classList.toggle("tbw-filter-disabled",e),k.classList.toggle("tbw-filter-disabled",e)};H(v),P.addEventListener("change",()=>{H(P.checked)}),e.appendChild(D);const G=()=>{const e=parseFloat(I.value),t=parseFloat(L.value),i=h-u,r=(e-u)/i*100,n=(t-u)/i*100;M.style.left=`${r}%`,M.style.width=n-r+"%"};I.addEventListener("input",()=>{const e=Math.min(parseFloat(I.value),parseFloat(L.value));I.value=String(e),R.value=String(e),G()}),L.addEventListener("input",()=>{const e=Math.max(parseFloat(L.value),parseFloat(I.value));L.value=String(e),_.value=String(e),G()}),R.addEventListener("input",()=>{const e=parseFloat(R.value);let t=Number.isFinite(e)?e:u;t=Math.max(u,Math.min(t,parseFloat(_.value))),I.value=String(t),G()}),_.addEventListener("input",()=>{const e=parseFloat(_.value);let t=Number.isFinite(e)?e:h;t=Math.min(h,Math.max(t,parseFloat(R.value))),L.value=String(t),G()}),G();const z=document.createElement("div");z.className="tbw-filter-buttons";const O=document.createElement("button");O.type="button",O.className="tbw-filter-apply-btn",O.textContent=t.t("filter.apply","Apply"),O.addEventListener("click",()=>{if(P.checked)return void t.applyTextFilter("blank","");const e=parseFloat(R.value),i=parseFloat(_.value),r=Number.isFinite(e)?e:p,n=Number.isFinite(i)?i:f;r!==p||n!==f?t.applyTextFilter("between",r,n):t.clearFilter()}),z.appendChild(O);const N=document.createElement("button");N.type="button",N.className="tbw-filter-clear-btn",N.textContent=t.t("filter.clear","Clear Filter"),N.addEventListener("click",()=>{t.clearFilter()}),z.appendChild(N),e.appendChild(z)}(i,l,r,this.filters):"date"===e?function(e,t,i,r){const{field:n,column:o}=t,s=o.filterParams,l=o.editorParams,a=i.filter(e=>e instanceof Date||"string"==typeof e&&!isNaN(Date.parse(e))).map(e=>e instanceof Date?e:new Date(e)).filter(e=>!isNaN(e.getTime())),d=a.length>0?new Date(Math.min(...a.map(e=>e.getTime()))):null,c=a.length>0?new Date(Math.max(...a.map(e=>e.getTime()))):null,u=Yt(s?.min)||Yt(l?.min)||Ut(d),h=Yt(s?.max)||Yt(l?.max)||Ut(c),g=Ut(d)||Yt(s?.min)||Yt(l?.min),p=Ut(c)||Yt(s?.max)||Yt(l?.max),f=r.get(n);let m=g,w=p;const b="blank"===f?.operator;"between"===f?.operator?(m=Yt(f.value)||g,w=Yt(f.valueTo)||p):"greaterThanOrEqual"===f?.operator?m=Yt(f.value)||g:"lessThanOrEqual"===f?.operator&&(w=Yt(f.value)||p);const v=document.createElement("div");v.className="tbw-filter-date-range";const y=document.createElement("div");y.className="tbw-filter-date-group";const C=document.createElement("label");C.textContent=t.t("filter.from","From"),C.className="tbw-filter-range-label";const x=document.createElement("input");x.type="date",x.className="tbw-filter-date-input",u&&(x.min=u),h&&(x.max=h),x.value=m,y.appendChild(C),y.appendChild(x),v.appendChild(y);const R=document.createElement("span");R.className="tbw-filter-range-separator",R.textContent="–",v.appendChild(R);const S=document.createElement("div");S.className="tbw-filter-date-group";const E=document.createElement("label");E.textContent="To",E.className="tbw-filter-range-label";const A=document.createElement("input");A.type="date",A.className="tbw-filter-date-input",u&&(A.min=u),h&&(A.max=h),A.value=w,S.appendChild(E),S.appendChild(A),v.appendChild(S),e.appendChild(v);const _=document.createElement("label");_.className="tbw-filter-blank-option";const k=document.createElement("input");k.type="checkbox",k.className="tbw-filter-blank-checkbox",k.checked=b;const T=document.createTextNode("Show only blank");_.appendChild(k),_.appendChild(T);const M=e=>{x.disabled=e,A.disabled=e,v.classList.toggle("tbw-filter-disabled",e)};M(b),k.addEventListener("change",()=>{M(k.checked)}),e.appendChild(_);const I=document.createElement("div");I.className="tbw-filter-buttons";const L=document.createElement("button");L.type="button",L.className="tbw-filter-apply-btn",L.textContent=t.t("filter.apply","Apply"),L.addEventListener("click",()=>{if(k.checked)return void t.applyTextFilter("blank","");const e=x.value,i=A.value,r=e&&e!==g?e:"",n=i&&i!==p?i:"";r&&n?t.applyTextFilter("between",r,n):r?t.applyTextFilter("greaterThanOrEqual",r):n?t.applyTextFilter("lessThanOrEqual",n):t.clearFilter()}),I.appendChild(L);const D=document.createElement("button");D.type="button",D.className="tbw-filter-clear-btn",D.textContent=t.t("filter.clear","Clear Filter"),D.addEventListener("click",()=>{t.clearFilter()}),I.appendChild(D),e.appendChild(I)}(i,l,r,this.filters):Zt(i,l,r,o,{caseSensitive:this.config.caseSensitive,debounceMs:this.config.debounceMs},this.searchText)}}setupPanelCloseHandler(e,t){this.panelAbortController=new AbortController;const{signal:i}=this.panelAbortController;setTimeout(()=>{i.aborted||document.addEventListener("click",i=>{e.contains(i.target)||i.target===t||this.closeFilterPanel()},{signal:i})},0)}promoteToTopLayer(e){if("function"==typeof e.showPopover){e.setAttribute("popover","manual");try{e.showPopover()}catch{}}}dismissTopLayer(e){if(e.hasAttribute("popover")&&"function"==typeof e.hidePopover)try{e.hidePopover()}catch{}}closeFilterPanel(){const e=this.panelElement;if(e&&(this.dismissTopLayer(e),e.remove(),this.panelElement=null),this.panelAnchorElement&&(this.panelAnchorElement.style.anchorName="",this.panelAnchorElement=null),this.panelButtonElement){const e=this.openPanelField;e&&this.filters.has(e)||this.panelButtonElement.classList.remove("active"),this.panelButtonElement=null}this.openPanelField=null,this.panelAbortController?.abort(),this.panelAbortController=null}static supportsAnchorPositioning=null;static checkAnchorPositioningSupport(){return null===e.supportsAnchorPositioning&&(e.supportsAnchorPositioning=CSS.supports("anchor-name","--test")),e.supportsAnchorPositioning}positionPanel(t,i){const r=i.closest(".header-row")??i;if(r.style.anchorName="--tbw-filter-anchor",this.panelAnchorElement=r,e.checkAnchorPositioningSupport()){r.style.anchorName="",i.style.anchorName="--tbw-filter-anchor",this.panelAnchorElement=i;const e=r.getBoundingClientRect().bottom-i.getBoundingClientRect().bottom;return t.style.marginTop=`${e+4}px`,void requestAnimationFrame(()=>{const e=t.getBoundingClientRect(),r=i.getBoundingClientRect();e.top<r.top&&t.classList.add("tbw-filter-panel-above")})}const n=r.getBoundingClientRect(),o=i.getBoundingClientRect();t.style.position="fixed",t.style.top=`${n.bottom+4}px`,t.style.left=`${o.right}px`,requestAnimationFrame(()=>{const e=t.getBoundingClientRect();t.style.left=o.right-e.width+"px",o.right-e.width<8&&(t.style.left=`${o.left}px`),e.bottom>window.innerHeight-8&&(t.style.top=n.top-e.height-4+"px",t.classList.add("tbw-filter-panel-above"))})}applySetFilter(e,t,i){if(this.excludedValues.set(e,new Set(t)),0===t.length)this.filters.delete(e);else if("in"===this.filters.get(e)?.operator){const r=this.getUniqueValues(e),n=new Set(t),o=r.filter(e=>!n.has(e));this.filters.set(e,{field:e,type:"set",operator:"in",value:o,...void 0!==i&&{valueTo:i}})}else this.filters.set(e,{field:e,type:"set",operator:"notIn",value:t,...void 0!==i&&{valueTo:i}});this.applyFiltersInternal()}applyTextFilter(e,t,i,r){const n=this.getColumnByField(e),o=n?.filterType??n?.type??"text";this.filters.set(e,{field:e,type:o,operator:t,value:i,valueTo:r}),this.applyFiltersInternal()}applyFiltersInternal(e){this.invalidateCache();const t=[...this.filters.values()];if(this.config.filterHandler){this.gridElement.setAttribute("aria-busy","true");const i=this.config.filterHandler(t,this.sourceRows),r=i=>{this.gridElement.removeAttribute("aria-busy"),this.cachedResult=i,this.grid.rows=i,this.notifyFilterChange(t,i.length,e),this.requestRender()};return void(i&&"function"==typeof i.then?i.then(r):r(i))}this.notifyFilterChange(t,0,e),this.requestRender()}getColumnState(e){if(!this.config.trackColumnState)return;const t=this.filters.get(e);return t?{filter:{type:t.type,operator:t.operator,value:t.value,valueTo:t.valueTo}}:void 0}applyColumnState(e,t){if(!this.config.trackColumnState)return;if(!t.filter)return void this.filters.delete(e);const i={field:e,type:t.filter.type,operator:t.filter.operator,value:t.filter.value,valueTo:t.filter.valueTo};this.filters.set(e,i),this.invalidateCache()}};function Jt(e){if(!e.length)return[];const t=[],i=/* @__PURE__ */new Map,r=(e,i)=>{if(!i.length)return;const r=t[t.length-1];r&&r.implicit&&r.firstIndex+r.columns.length===e?r.columns.push(...i):t.push({id:"__implicit__"+e,label:void 0,columns:i,firstIndex:e,implicit:!0})};let n=[],o=0;return e.forEach((e,s)=>{const l=e.group;if(!l)return 0===n.length&&(o=s),void n.push(e);n.length&&(r(o,n.slice()),n=[]);const a="string"==typeof l?l:l.id,d="string"==typeof l?void 0:l.label;d&&!i.has(a)&&i.set(a,d);const c=i.get(a)??d,u=t[t.length-1];u&&!u.implicit&&u.id===a?u.columns.push(e):t.push({id:a,label:c,columns:[e],firstIndex:s})}),n.length&&r(o,n),1===t.length&&t[0].implicit&&t[0].columns.length===e.length?[]:t}function ei(e){const t=function(e){const t=/* @__PURE__ */new Set;for(let i=0;i<e.length;i++){if(!String(e[i].id).startsWith("__implicit__"))continue;if(!e[i].columns.every(e=>e.field?.startsWith("__tbw_")))continue;let r=null;for(let t=i-1;t>=0;t--)if(!String(e[t].id).startsWith("__implicit__")){r=e[t].id;break}let n=null;for(let t=i+1;t<e.length;t++)if(!String(e[t].id).startsWith("__implicit__")){n=e[t].id;break}r&&n&&r===n&&t.add(String(e[i].id))}return t}(e);return{merged:ii(e,t),embedded:t}}function ti(e,t){const i=e.columns[0],r=e.columns[e.columns.length-1],n=i?t.findIndex(e=>e.field===i.field):-1,o=r?t.findIndex(e=>e.field===r.field):-1;return-1!==n&&-1!==o?[n,o]:null}function ii(e,t){const i=[];for(const r of e){if(String(r.id).startsWith("__implicit__")&&t.has(String(r.id)))continue;const e=i[i.length-1];e&&!String(r.id).startsWith("__implicit__")&&e.id===r.id?i[i.length-1]={...e,columns:[...e.columns,...r.columns]}:i.push({...r,columns:[...r.columns]})}return i}we("filtering",e=>"boolean"==typeof e?new Qt:new Qt(e??void 0));function ri(e,t){if(!t.group)return;const i="string"==typeof t.group?t.group:t.group.id,r="string"==typeof t.group?t.group:t.group.label??t.group.id,n=e.get(i);n?n.fields.includes(t.field)||n.fields.push(t.field):e.set(i,{id:i,label:r,fields:[t.field]})}var ni=class extends Y{static manifest={ownedProperties:[{property:"group",level:"column",description:'the "group" column property'},{property:"columnGroups",level:"config",description:'the "columnGroups" config property',isUsed:e=>Array.isArray(e)&&e.length>0}],queries:[{type:"getColumnGrouping",description:"Returns column group metadata for the visibility panel"},{type:"collectHeaderRows",description:"Contributes a group-header row above the leaf header for exports / printers"}]};name="groupingColumns";styles="@layer tbw-plugins{.header-group-row{background:var(--tbw-grouping-columns-header-bg,var(--tbw-color-header-bg));border-bottom:1px solid var(--tbw-grouping-columns-border,var(--tbw-color-border));grid-auto-flow:column;display:grid}.header-group-cell{padding:var(--tbw-button-padding-sm,.25rem .5rem);font-weight:600;font-size:var(--tbw-font-size-sm,.9em);text-transform:uppercase;letter-spacing:.5px;text-overflow:ellipsis;white-space:nowrap;border-right:2px solid var(--tbw-grouping-columns-separator,var(--tbw-color-border-strong,var(--tbw-color-border)));justify-content:center;align-items:center;min-width:0;display:flex;overflow:hidden}.header-group-cell:last-child{border-right:none}.header-row .cell.grouped{border-top:none}.header-row .cell.group-end{border-right:2px solid var(--tbw-grouping-columns-separator,var(--tbw-color-border-strong,var(--tbw-color-border)))}.header-row .cell.group-end:last-child{border-right:none}.rows .cell.group-end{border-right:2px solid var(--tbw-grouping-columns-separator,var(--tbw-color-border-strong,var(--tbw-color-border)))}.rows .cell.group-end:last-child{border-right:none}.header-group-row.no-borders{border-bottom:none}.header-group-row.no-borders .header-group-cell{border-right:none}.header-row.no-group-borders .cell.group-end{border-right:1px solid var(--tbw-color-border)}}";get defaultConfig(){return{showGroupBorders:!0,lockGroupOrder:!1}}groups=[];isActive=!1;#Ie=/* @__PURE__ */new Set;#Le=[];#De=/* @__PURE__ */new Map;attach(e){super.attach(e),this.gridElement.addEventListener("column-move",this.#Pe,{signal:this.disconnectSignal})}detach(){this.groups=[],this.isActive=!1,this.#Ie.clear(),this.#Le=[],this.#De.clear()}#Pe=e=>{if(!this.isActive)return;const t=e,{field:i,columnOrder:r}=t.detail;if(this.config.lockGroupOrder){const e=/* @__PURE__ */new Map;for(const t of this.groups){if(t.id.startsWith("__implicit__"))continue;const i=e.get(t.id);i?i.push(...t.columns):e.set(t.id,[...t.columns])}for(const[,n]of e)if(!this.#Fe(n,r))return t.preventDefault(),void this.#He(i)}this.#Ge(r)};#Ge(e){this.#Ie.clear();const t=/* @__PURE__ */new Map;for(const i of this.groups)for(const e of i.columns)t.set(e.field,i.id);for(let i=0;i<e.length-1;i++)t.get(e[i])!==t.get(e[i+1])&&this.#Ie.add(e[i])}#Fe(e,t){const i=e.map(e=>t.indexOf(e.field)).filter(e=>-1!==e).sort((e,t)=>e-t);return i.length<=1||i.length===i[i.length-1]-i[0]+1}#He(e){const t=this.gridElement?.querySelector(`.header-row [part~="header-cell"][data-field="${e}"]`);t&&(t.style.setProperty("--_flash-color","var(--tbw-color-error)"),t.animate([{backgroundColor:"rgba(from var(--_flash-color) r g b / 30%)"},{backgroundColor:"transparent"}],{duration:400,easing:"ease-out"}))}handleQuery(e){return"getColumnGrouping"===e.type?this.#ze():"collectHeaderRows"===e.type?this.#Oe(e.context):void 0}#Oe(e){const t=e?.columns;if(!Array.isArray(t)||0===t.length)return;const i=Jt(t);if(0===i.length)return;const{merged:r}=ei(i),n=[];for(const o of r){const e=String(o.id).startsWith("__implicit__"),i=o.columns[0],r=o.columns[o.columns.length-1];if(!i||!r)continue;const s=t.findIndex(e=>e.field===i.field),l=t.findIndex(e=>e.field===r.field);if(s<0||l<0)continue;const a=l-s+1;n.push({label:e?"":o.label??o.id,span:a,source:this.name})}return 0!==n.length?n.reduce((e,t)=>e+t.span,0)!==t.length?{cells:[{label:"",span:t.length,source:this.name}]}:{cells:n}:void 0}#ze(){const e=this.#Ne()??this.#qe()??this.#$e();return this.#We(e),e}#Ne(){if(0!==this.#Le.length)return this.#Le.filter(e=>e.children.length>0).map(e=>({id:e.id,label:e.header,fields:[...e.children]}))}#qe(){if(!this.isActive||0===this.groups.length)return;const e=/* @__PURE__ */new Map;for(const t of this.groups){if(t.id.startsWith("__implicit__"))continue;const i=e.get(t.id);if(i)for(const e of t.columns)i.fields.includes(e.field)||i.fields.push(e.field);else e.set(t.id,{id:t.id,label:t.label??t.id,fields:t.columns.map(e=>e.field)})}for(const t of this.columns)t.hidden&&ri(e,t);return Array.from(e.values())}#$e(){const e=/* @__PURE__ */new Map;for(const t of this.columns)ri(e,t);return Array.from(e.values())}#We(e){const t=this.grid?.getColumnOrder();if(!t||0===t.length)return;const i=new Map(t.map((e,t)=>[e,t]));for(const r of e)r.fields.sort((e,t)=>(i.get(e)??1/0)-(i.get(t)??1/0))}static detect(e,t){const i=t?.features?.groupingColumns;if(i&&"object"==typeof i&&Array.isArray(i.columnGroups)&&i.columnGroups.length>0)return!0;if(t?.columnGroups&&Array.isArray(t.columnGroups)&&t.columnGroups.length>0)return!0;const r=t?.columns;return!!Array.isArray(r)&&function(e){return e.some(e=>null!=e.group)}(r)}processColumns(e){const t=this.config?.columnGroups,i=this.grid?.gridConfig?.columnGroups;let r,n;if(t&&Array.isArray(t)&&t.length>0?(i&&Array.isArray(i)&&i.length>0&&this.warn("TBW114","columnGroups defined in both gridConfig and groupingColumns feature config. Using feature config (higher precedence)."),r=t):i&&Array.isArray(i)&&i.length>0&&(r=i),r&&r.length>0){const t=r.map(e=>{return e.id?e:(e.header||E("TBW113",'ColumnGroupDefinition requires either an "id" or a "header" to generate an id from.'),{...e,id:(t=e.header,t.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""))});var t});this.#Le=t,this.#De.clear();for(const e of t)e.renderer&&this.#De.set(e.id,e.renderer);const i=/* @__PURE__ */new Map;for(const e of t)for(const t of e.children)i.set(t,{id:e.id,label:e.header});n=e.map(e=>{const t=i.get(e.field);return t&&!e.group?{...e,group:t}:e})}else this.#Le=[],this.#De.clear(),n=[...e];const o=Jt(n);if(0===o.length)return this.isActive=!1,this.groups=[],n;if(this.#De.size>0)for(const s of o){const e=this.#De.get(s.id);e&&(s.renderer=e)}this.isActive=!0,this.groups=o,this.#Ie.clear();for(const s of o){const e=s.columns[s.columns.length-1];e?.field&&this.#Ie.add(e.field)}return n}afterRender(){if(!this.isActive){const e=(this.gridElement?.querySelector(".header"))?.querySelector(".header-group-row");return void(e&&e.remove())}const e=this.gridElement?.querySelector(".header");if(!e)return;const t=e.querySelector(".header-group-row");t&&t.remove();const i=this.visibleColumns,r=Jt(i);if(0===r.length)return;if(this.#De.size>0)for(const l of r){const e=this.#De.get(l.id);e&&(l.renderer=e)}this.#Ie.clear();const n=ei(r);for(let l=0;l<n.merged.length;l++){const e=n.merged[l],t=e.columns[e.columns.length-1];t?.field&&l<n.merged.length-1&&this.#Ie.add(t.field)}const o=function(e,t,i,r){if(0===e.length)return null;const n=document.createElement("div");n.className="header-group-row",n.setAttribute("role","row");const{merged:o}=r??ei(e);for(const s of o){const e=String(s.id),r=e.startsWith("__implicit__"),o=ti(s,t);if(!o)continue;const[l,a]=o,d=a-l+1,c=r?"":s.label||s.id,u=document.createElement("div");u.className="cell header-group-cell",r&&u.classList.add("implicit-group"),u.setAttribute("role",r?"presentation":"columnheader"),u.setAttribute("data-group",e),u.style.gridColumn=`${l+1} / span ${d}`;const h=!r&&(s.renderer||i)||void 0;if(h&&!r){const t=h({id:e,label:String(c),columns:s.columns,firstIndex:l,isImplicit:!1});t instanceof HTMLElement?u.appendChild(t):"string"==typeof t?q(u,t):u.textContent=c}else u.textContent=c;n.appendChild(u)}return n}(r,i,this.config.groupHeaderRenderer,n);if(o){o.classList.toggle("no-borders",!this.config.showGroupBorders);const t=e.querySelector(".header-row");t?e.insertBefore(o,t):e.appendChild(o)}const s=e.querySelector(".header-row");s&&(s.classList.toggle("no-group-borders",!this.config.showGroupBorders),function(e,t,i,r){if(!t.length||!e)return;const{merged:n,embedded:o}=r??ei(t),s=/* @__PURE__ */new Map;for(const a of n)if(!String(a.id).startsWith("__implicit__"))for(const e of a.columns)e.field&&s.set(e.field,a.id);for(let a=0;a<t.length;a++){const e=t[a];if(String(e.id).startsWith("__implicit__")&&o.has(String(e.id)))for(let i=a-1;i>=0;i--)if(!String(t[i].id).startsWith("__implicit__")){for(const r of e.columns)r.field&&s.set(r.field,t[i].id);break}}const l=Array.from(e.querySelectorAll(".cell[data-field]"));l.forEach(e=>{const t=e.getAttribute("data-field")||"",i=s.get(t);i&&(e.classList.add("grouped"),e.getAttribute("data-group")||e.setAttribute("data-group",i))});for(const a of n){const e=a.columns[a.columns.length-1],t=l.find(t=>t.getAttribute("data-field")===e.field);t&&t.classList.add("group-end")}}(s,r,0,n))}afterCellRender(e){this.isActive&&this.config.showGroupBorders&&e.cellElement.classList.toggle("group-end",this.#Ie.has(e.column.field))}isGroupingActive(){return this.isActive}getGroups(){return this.groups}getGroupColumns(e){return this.groups.filter(t=>t.id===e).flatMap(e=>e.columns)}refresh(){this.requestRender()}};function oi(e,t,i){return i?.valueAccessor?c(e,i):s(e,t)}function si(e){return null==e||""===e||"number"==typeof e&&isNaN(e)}we("groupingColumns",e=>new ni("boolean"==typeof e?{}:e??{}));var li={sum:(e,t,i)=>{let r=0;for(let n=0;n<e.length;n++){const o=oi(e[n],t,i);if(si(o))continue;const s=Number(o);isNaN(s)||(r+=s)}return r},avg:(e,t,i)=>{if(!e.length)return 0;let r=0,n=0;for(let o=0;o<e.length;o++){const s=oi(e[o],t,i);if(si(s))continue;const l=Number(s);isNaN(l)||(r+=l,n++)}return n>0?r/n:0},count:e=>e.length,min:(e,t,i)=>{if(!e.length)return 0;let r=1/0;for(let n=0;n<e.length;n++){const o=oi(e[n],t,i);if(si(o))continue;const s=Number(o);isNaN(s)||s<r&&(r=s)}return r===1/0?0:r},max:(e,t,i)=>{if(!e.length)return 0;let r=-1/0;for(let n=0;n<e.length;n++){const o=oi(e[n],t,i);if(si(o))continue;const s=Number(o);isNaN(s)||s>r&&(r=s)}return r===-1/0?0:r},first:(e,t,i)=>e[0]?oi(e[0],t,i):void 0,last:(e,t,i)=>e.length?oi(e[e.length-1],t,i):void 0},ai=/* @__PURE__ */new Map,di={register(e,t){ai.set(e,t)},unregister(e){ai.delete(e)},get(e){if(void 0!==e)return"function"==typeof e?e:ai.get(e)??li[e]},run(e,t,i,r){const n=this.get(e);return n?n(t,i,r):void 0},has:e=>ai.has(e)||e in li,list:()=>[...Object.keys(li),...ai.keys()]};function ci(e){const t=document.createElement("div");return t.className=`tbw-spinner tbw-spinner--${e}`,t.setAttribute("role","progressbar"),t.setAttribute("aria-label","Loading"),t}function ui(e){const t=document.createElement("div");return t.className="tbw-loading-overlay",t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.appendChild(function(e,t){if(t){const i=t({size:e});if("string"==typeof i){const e=document.createElement("div");return q(e,i),e}return i}return ci(e)}("large",e)),t}function hi(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 i=document.createElement("div");i.className="tbw-row-loading-spinner",t.appendChild(i),e.appendChild(t)}}else e.classList.remove("tbw-row-loading"),e.removeAttribute("aria-busy"),e.querySelector(".tbw-row-loading-overlay")?.remove()}function gi({rows:e,config:t,expanded:i,initialExpanded:r,groupSortDirections:n}){const o=t.groupOn;if("function"!=typeof o)return[];const s={key:"__root__",value:null,depth:-1,rows:[],children:/* @__PURE__ */new Map};if(e.forEach(e=>{let t=o(e);null==t||!1===t?t=["__ungrouped__"]:Array.isArray(t)||(t=[t]);let i=s;t.forEach((t,r)=>{const n=null==t?"∅":String(t),o="__root__"===i.key?n:i.key+"||"+n;let s=i.children.get(n);s||(s={key:o,value:t,depth:r,rows:[],children:/* @__PURE__ */new Map,parent:i},i.children.set(n,s)),s.rows.push(e),i=s})}),1===s.children.size&&s.children.has("__ungrouped__")&&s.children.get("__ungrouped__").rows.length===e.length)return[];const l=/* @__PURE__ */new Map;for(let h=0;h<e.length;h++)l.set(e[h],h);const a=/* @__PURE__ */new Set([...i,...r??[]]),d=e=>{const t=[...e.children.values()],i=e===s?0:e.depth+1,r=n?.get(i)??1;return t.sort((e,t)=>{const i=e.value,n=t.value;return null==i&&null==n?0:null==i?r:null==n?-r:i>n?r:i<n?-r:0}),t},c=[],u=e=>{if(e===s){for(const t of d(e))u(t);return}const t=a.has(e.key);if(c.push({kind:"group",key:e.key,value:e.value,depth:e.depth,rows:e.rows,expanded:t}),t)if(e.children.size)for(const i of d(e))u(i);else e.rows.forEach(e=>c.push({kind:"data",row:e,rowIndex:l.get(e)??-1}))};return u(s),c}function pi(e,t){if(!0===e)return new Set(t);if(!1===e||null==e)/* @__PURE__ */return new Set;if("number"==typeof e){const i=t[e];return i?/* @__PURE__ */new Set([i]):/* @__PURE__ */new Set}return"string"==typeof e?/* @__PURE__ */new Set([e]):Array.isArray(e)?new Set(e):/* @__PURE__ */new Set}function fi({groups:e,expanded:t,groupRows:i,loadingGroups:r,parentPath:n=[]}){const o=[],s=n.length;for(const l of e){const e=[...n,l.key],a=t.has(l.key),d=i.get(l.key)??[],c=r.has(l.key);if(o.push({kind:"group",key:l.key,value:l.value,depth:s,rows:d,expanded:a}),a)if(l.children?.length){const n=fi({groups:l.children,expanded:t,groupRows:i,loadingGroups:r,parentPath:e});o.push(...n)}else c?o.push({kind:"data",row:{__loading:!0,__groupKey:l.key},rowIndex:-1}):d.forEach((e,t)=>{o.push({kind:"data",row:e,rowIndex:t})})}return o}function mi(e,t,i=[]){for(const r of e){const e=[...i,r.key];if(r.key===t)return e;if(r.children?.length){const i=mi(r.children,t,e);if(i.length>0)return i}}return[]}var wi=class extends Y{static manifest={modifiesRowStructure:!0,hookPriority:{processRows:10,onHeaderClick:-1},incompatibleWith:[{name:"tree",reason:"Both plugins transform the entire row model. TreePlugin flattens nested hierarchies while GroupingRowsPlugin groups flat rows with synthetic headers. Use one approach per grid."},{name:"pivot",reason:"PivotPlugin creates its own aggregated row and column structure. Row grouping cannot be applied on top of pivot-generated rows."}],events:[{type:"group-toggle",description:"Emitted when groups are expanded/collapsed. Broadcast to both DOM consumers and plugin bus."},{type:"group-expand",description:"Emitted when a pre-defined group is expanded."},{type:"group-collapse",description:"Emitted when a pre-defined group is collapsed."}],queries:[{type:"canMoveRow",description:"Returns false for group header rows (cannot be reordered)"},{type:"grouping:get-grouped-fields",description:"Returns the column field names that match group depth levels (string[])"},{type:"datasource:viewport-mapping",description:"Translates flat viewport row indices to top-level group indices for ServerSide pagination."}],configRules:[{id:"groupingRows/accordion-defaultExpanded",severity:"warn",message:'"accordion: true" and "defaultExpanded" (non-false) are used together.\n → In accordion mode, only one group can be open at a time.\n → Using defaultExpanded with multiple groups will collapse to one on first toggle.\n → Consider using "defaultExpanded: false" or a single group key/index with accordion mode.',check:e=>!0===e.accordion&&!1!==e.defaultExpanded&&void 0!==e.defaultExpanded&&!("number"==typeof e.defaultExpanded)&&!("string"==typeof e.defaultExpanded)&&(!0===e.defaultExpanded||Array.isArray(e.defaultExpanded)&&e.defaultExpanded.length>1)}]};static dependencies=[{name:"multiSort",required:!1,reason:"Queries sort model for coordinated group sorting"},{name:"serverSide",required:!1,reason:"Consumes datasource events for lazy-loaded grouped data"}];name="groupingRows";styles='@layer tbw-plugins{.group-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-grouping-rows-bg,var(--tbw-color-panel-bg));border-bottom:var(--tbw-row-divider);min-height:var(--tbw-row-height);font-weight:500;display:grid}.group-row .cell{padding:var(--tbw-cell-padding,.125rem .5rem);align-items:center;display:flex}@media (hover:hover){.group-row:hover{background:var(--tbw-grouping-rows-bg-hover,var(--tbw-color-row-hover))}}.group-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;width:var(--tbw-toggle-size,1.25rem);height:var(--tbw-toggle-size,1.25rem);font:inherit;background:0 0;border:0;justify-content:center;align-items:center;margin-right:.25rem;display:inline-flex}.group-toggle:hover{background:var(--tbw-grouping-rows-toggle-hover,var(--tbw-color-row-hover));border-radius:var(--tbw-border-radius,.125rem)}.group-toggle{position:relative}.group-toggle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}@media (pointer:coarse){.group-toggle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}.group-label{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));display:inline-flex}.group-count{color:var(--tbw-grouping-rows-count-color,var(--tbw-color-fg-muted));font-size:var(--tbw-font-size-xs,.85em);font-weight:400}.group-aggregates{align-items:center;gap:var(--tbw-spacing-lg,1rem);margin-left:var(--tbw-spacing-lg,1rem);font-weight:400;font-size:var(--tbw-font-size-sm,.875em);color:var(--tbw-grouping-rows-aggregate-color,var(--tbw-color-fg-muted));display:inline-flex}.group-aggregate{white-space:nowrap}.group-row{padding-left:calc(var(--tbw-group-depth,0) * var(--tbw-group-indent-width,1.25em))}.data-grid-row.tbw-group-slide-in{animation:tbw-group-slide-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-group-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.data-grid-row.tbw-group-fade-in{animation:tbw-group-fade-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-group-fade-in{0%{opacity:0}to{opacity:1}}}';get defaultConfig(){return{defaultExpanded:!1,showRowCount:!0,indentWidth:20,aggregators:{},animation:"slide",accordion:!1}}expandedKeys=/* @__PURE__ */new Set;flattenedRows=[];isActive=!1;previousVisibleKeys=/* @__PURE__ */new Set;keysToAnimate=/* @__PURE__ */new Set;hasAppliedDefaultExpanded=!1;pendingExpansion;groupConfigDirty=!1;preDefinedGroups=[];groupRowsMap=/* @__PURE__ */new Map;loadingGroups=/* @__PURE__ */new Set;groupedFields=[];userGroupSortDirections=/* @__PURE__ */new Map;flatMeta=[];get animationStyle(){return!!this.isAnimationEnabled&&(this.config.animation??"slide")}detach(){(this.gridElement?.querySelector(".rows-body"))?.setAttribute("role","grid"),this.expandedKeys.clear(),this.flattenedRows=[],this.flatMeta=[],this.isActive=!1,this.previousVisibleKeys.clear(),this.keysToAnimate.clear(),this.hasAppliedDefaultExpanded=!1,this.pendingExpansion=void 0,this.groupConfigDirty=!1,this.preDefinedGroups=[],this.groupRowsMap.clear(),this.loadingGroups.clear(),this.groupedFields=[],this.userGroupSortDirections.clear()}getRowHeight(e,t){if(null!=this.config.groupRowHeight)return!0===e.__isGroupRow?this.config.groupRowHeight:void 0}handleQuery(e){if("canMoveRow"===e.type&&!0===e.context?.__isGroupRow)return!1;if("grouping:get-grouped-fields"===e.type)return[...this.groupedFields];if("datasource:viewport-mapping"===e.type){const{viewportStart:t,viewportEnd:i}=e.context;if(0===this.flattenedRows.length)return;if(0===this.preDefinedGroups.length&&!Array.isArray(this.config.groups))return;const r=this.getActiveGroups();return{startNode:this.getTopLevelGroupIndex(t),endNode:this.getTopLevelGroupIndex(i)+1,totalLoadedNodes:r.length}}}getTopLevelGroupIndex(e){let t=-1;const i=Math.min(e,this.flattenedRows.length-1);for(let r=0;r<=i;r++){const e=this.flattenedRows[r];"group"===e.kind&&0===e.depth&&t++}return Math.max(0,t)}attach(e){super.attach(e),this.on("datasource:data",e=>{const t=e;t.claimed||(t.claimed=!0,this.preDefinedGroups=t.rows,this.groupRowsMap.clear(),this.loadingGroups.clear(),this.hasAppliedDefaultExpanded=!1,this.requestRender())}),this.on("datasource:children",e=>{const t=e;if("grouping-rows"!==t.context?.source)return;t.claimed=!0;const i=t.context.groupKey;i&&(this.groupRowsMap.set(i,t.rows),this.loadingGroups.delete(i),this.requestRender())})}onHeaderClick(e){const t=this.groupedFields.indexOf(e.field);if(-1===t)return;if(!e.column.sortable)return;const i=t,r=this.userGroupSortDirections.get(i)??1;return this.userGroupSortDirections.set(i,1===r?-1:1),this.requestRender(),!0}resolveGroupSortDirections(e){const t=this.config;if("function"!=typeof t.groupOn||0===e.length)return void(this.groupedFields=[]);const i=this.columns.map(e=>e.field),r=function(e,t,i){const r=/* @__PURE__ */new Map;if(0===e.length)return r;const n=e[0];let o=t(n);if(null==o||!1===o)return r;Array.isArray(o)||(o=[o]);for(let s=0;s<o.length;s++){const e=o[s];for(const t of i)if(n[t]===e){r.set(s,t);break}}return r}([...e],t.groupOn,i);if(this.groupedFields=[...r.values()],0===r.size)return;const n=new Map(this.userGroupSortDirections);if(n.size<r.size){const e=/* @__PURE__ */new Map,t=this.grid?.query?.("sort:get-model",null);if(Array.isArray(t)&&t.length>0){const i=t[0];if(Array.isArray(i))for(const t of i)e.set(t.field,"desc"===t.direction?-1:1)}if(0===e.size){const t=this.grid._sortState;t&&e.set(t.field,t.direction)}for(const[i,o]of r)if(!n.has(i)){const t=e.get(o);void 0!==t&&n.set(i,t)}}return n.size>0?n:void 0}static detect(e,t){return"function"==typeof t?.groupOn||"boolean"==typeof t?.enableRowGrouping||Array.isArray(t?.groups)}processRows(e){const t=this.pendingExpansion;if(this.pendingExpansion=void 0,this.groupConfigDirty=!1,this.preDefinedGroups.length>0||Array.isArray(this.config.groups))return this.preDefinedGroups.length>0||Array.isArray(this.config.groups)&&this.config.groups.length>0?this.processPreDefinedGroups():(this.isActive=!1,this.flattenedRows=[],[]);const i=this.config;if("function"!=typeof i.groupOn)return this.isActive=!1,this.flattenedRows=[],[...e];const r=this.resolveGroupSortDirections(e),n=gi({rows:[...e],config:i,expanded:/* @__PURE__ */new Set,groupSortDirections:r});if(0===n.length)return this.isActive=!1,this.flattenedRows=[],[...e];let o;const s=void 0!==t;let l;if(s?o=t:this.hasAppliedDefaultExpanded||0!==this.expandedKeys.size||!1===i.defaultExpanded||(o=i.defaultExpanded??!1),void 0!==o){const e=function(e){return e.filter(e=>"group"===e.kind).map(e=>e.key)}(n);l=pi(o,e),(s||l.size>0)&&(this.expandedKeys=new Set(l),this.hasAppliedDefaultExpanded=!0)}const a=gi({rows:[...e],config:i,expanded:this.expandedKeys,initialExpanded:l,groupSortDirections:r});this.isActive=!0,this.flattenedRows=a,this.computeFlatMeta(),s&&this.broadcast("group-toggle",{expandedKeys:[...this.expandedKeys]}),this.keysToAnimate.clear();const d=/* @__PURE__ */new Set;return a.forEach((e,t)=>{if("data"===e.kind){const e=`data-${t}`;d.add(e),this.previousVisibleKeys.has(e)||this.keysToAnimate.add(e)}}),this.previousVisibleKeys=d,a.map(e=>{return"group"===e.kind?{__isGroupRow:!0,__groupKey:e.key,__groupValue:e.value,__groupDepth:e.depth,__groupRows:e.rows,__groupExpanded:e.expanded,__groupRowCount:(t=e,"group"!==t.kind?0:t.rows.length),__rowCacheKey:`group:${e.key}`}:e.row;var t})}onCellClick(e){const t=e.row;if(t?.__isGroupRow&&e.originalEvent.target?.closest(`.${Ge.GROUP_TOGGLE}`))return this.toggle(t.__groupKey),!0}onKeyDown(e){if(" "!==e.key)return;const t=this.grid._focusRow,i=this.rows[t];return i?.__isGroupRow?(e.preventDefault(),this.toggle(i.__groupKey),this.requestRenderWithFocus(),!0):void 0}renderRow(e,t,i){if(!0===e?.__loading&&e?.__groupKey){t.className="data-grid-row",t.__isCustomRow=!0,t.innerHTML="";const e=document.createElement("div");return e.className="cell",e.style.gridColumn="1 / -1",e.setAttribute("role","gridcell"),e.textContent=" ",t.appendChild(e),hi(t,!0),!0}if(!e?.__isGroupRow)return!1;const r=this.config;if(r.groupRowRenderer){const i=()=>{this.toggle(e.__groupKey)},n=r.groupRowRenderer({key:e.__groupKey,value:e.__groupValue,depth:e.__groupDepth,rows:e.__groupRows,expanded:e.__groupExpanded,toggleExpand:i});if(n)return t.className="data-grid-row group-row",t.__isCustomRow=!0,t.setAttribute("data-group-depth",String(e.__groupDepth)),"string"==typeof n?q(t,n):t.replaceChildren(n),!0}const n=()=>{this.toggle(e.__groupKey)};t.className="data-grid-row group-row",t.__isCustomRow=!0,t.setAttribute("data-group-depth",String(e.__groupDepth)),t.setAttribute("role","row"),t.setAttribute("aria-expanded",String(e.__groupExpanded)),t.classList.toggle("tbw-row-expanded",!!e.__groupExpanded);const o=this.flatMeta[i];return o&&(t.setAttribute("aria-level",String(o.level)),t.setAttribute("aria-setsize",String(o.setSize)),t.setAttribute("aria-posinset",String(o.posInSet))),t.style.setProperty("--tbw-group-depth",String(e.__groupDepth||0)),void 0!==r.indentWidth&&t.style.setProperty("--tbw-group-indent-width",`${r.indentWidth}px`),t.style.height="",t.innerHTML="",!1!==r.fullWidth?this.renderFullWidthGroupRow(e,t,n):this.renderPerColumnGroupRow(e,t,n),!0}afterRender(){const e=this.gridElement?.querySelector(".rows");if(!e)return;const t=this.gridElement?.querySelector(".rows-body");t&&"treegrid"!==t.getAttribute("role")&&t.setAttribute("role","treegrid");for(const n of e.querySelectorAll(".data-grid-row:not(.group-row)")){const e=n.querySelector(".cell[data-row]"),t=e?parseInt(e.getAttribute("data-row")??"-1",10):-1,i=this.flatMeta[t];i&&(n.setAttribute("aria-level",String(i.level)),n.setAttribute("aria-setsize",String(i.setSize)),n.setAttribute("aria-posinset",String(i.posInSet)))}const i=this.animationStyle;if(!1===i||0===this.keysToAnimate.size)return;const r="fade"===i?"tbw-group-fade-in":"tbw-group-slide-in";for(const n of e.querySelectorAll(".data-grid-row:not(.group-row)")){const e=n.querySelector(".cell[data-row]"),t=e?parseInt(e.getAttribute("data-row")??"-1",10):-1,i="data"===this.flattenedRows[t]?.kind?`data-${t}`:void 0;i&&this.keysToAnimate.has(i)&&(n.classList.add(r),n.addEventListener("animationend",()=>n.classList.remove(r),{once:!0}))}this.keysToAnimate.clear()}computeFlatMeta(){const e=this.flattenedRows,t=new Array(e.length),i=/* @__PURE__ */new Map,r=/* @__PURE__ */new Map;let n=null,o=0;for(const d of e)if("group"===d.kind){n&&r.set(n.key,o),n=d,o=0;const e=`${d.key.split("||").slice(0,-1).join("||")}@${d.depth}`;i.set(e,(i.get(e)??0)+1)}else o++;n&&r.set(n.key,o);const s=/* @__PURE__ */new Map;let l=null,a=0;for(let d=0;d<e.length;d++){const n=e[d];if("group"===n.kind){const e=`${n.key.split("||").slice(0,-1).join("||")}@${n.depth}`,r=(s.get(e)??0)+1;s.set(e,r),t[d]={level:n.depth+1,setSize:i.get(e)??1,posInSet:r},l=n,a=0}else{a++;const i=l?.depth??-1,n=l?r.get(l.key)??1:e.length;t[d]={level:i+2,setSize:n,posInSet:a}}}this.flatMeta=t}processPreDefinedGroups(){const e=this.preDefinedGroups.length>0?this.preDefinedGroups:Array.isArray(this.config.groups)?this.config.groups:[];if(0===e.length)return this.isActive=!1,this.flattenedRows=[],[];if(!this.hasAppliedDefaultExpanded&&0===this.expandedKeys.size&&!1!==this.config.defaultExpanded){const t=this.collectGroupKeys(e),i=pi(this.config.defaultExpanded??!1,t);i.size>0&&(this.expandedKeys=new Set(i),this.hasAppliedDefaultExpanded=!0)}const t=fi({groups:e,expanded:this.expandedKeys,groupRows:this.groupRowsMap,loadingGroups:this.loadingGroups});this.isActive=!0,this.flattenedRows=t,this.computeFlatMeta(),this.keysToAnimate.clear();const i=/* @__PURE__ */new Set;return t.forEach((e,t)=>{if("data"===e.kind){const e=`data-${t}`;i.add(e),this.previousVisibleKeys.has(e)||this.keysToAnimate.add(e)}}),this.previousVisibleKeys=i,t.map(t=>{if("group"===t.kind){const i=this.findGroupDefinition(e,t.key)?.rowCount??t.rows.length;return{__isGroupRow:!0,__groupKey:t.key,__groupValue:t.value,__groupDepth:t.depth,__groupRows:t.rows,__groupExpanded:t.expanded,__groupRowCount:i,__rowCacheKey:`group:${t.key}`}}return t.row})}collectGroupKeys(e){const t=[];for(const i of e)t.push(i.key),i.children?.length&&t.push(...this.collectGroupKeys(i.children));return t}getActiveGroups(){return this.preDefinedGroups.length>0?this.preDefinedGroups:Array.isArray(this.config.groups)?this.config.groups:[]}findGroupDefinition(e,t){for(const i of e){if(i.key===t)return i;if(i.children?.length){const e=this.findGroupDefinition(i.children,t);if(e)return e}}}createToggleButton(e,t){const i=document.createElement("button");return i.type="button",i.className=`${Ge.GROUP_TOGGLE}${e?` ${Ge.EXPANDED}`:""}`,i.setAttribute("aria-label",e?"Collapse group":"Expand group"),this.setIcon(i,e?"collapse":"expand"),i.addEventListener("click",e=>{e.stopPropagation(),t()}),i}getGroupLabelText(e,t,i){const r=this.config;return r.formatLabel?r.formatLabel(e,t,i):String(e)}renderFullWidthGroupRow(e,t,i){const r=this.config,n=r.aggregators??{},o=e.__groupRows??[],s=document.createElement("div");s.className="cell group-full",s.style.gridColumn="1 / -1",s.setAttribute("role","gridcell"),s.setAttribute("data-col","0"),s.appendChild(this.createToggleButton(e.__groupExpanded,i));const l=document.createElement("span");if(l.className=Ge.GROUP_LABEL,l.textContent=this.getGroupLabelText(e.__groupValue,e.__groupDepth||0,e.__groupKey),s.appendChild(l),!1!==r.showRowCount){const t=document.createElement("span");t.className=Ge.GROUP_COUNT,t.textContent=`(${e.__groupRowCount??e.__groupRows?.length??0})`,s.appendChild(t)}const a=Object.entries(n);if(a.length>0){const e=document.createElement("span");e.className="group-aggregates";for(const[t,i]of a){const r=this.columns.find(e=>e.field===t),n=di.run(i,o,t,r);if(null!=n){const i=document.createElement("span");i.className="group-aggregate",i.setAttribute("data-field",t),i.textContent=`${r?.header??t}: ${n}`,e.appendChild(i)}}e.children.length>0&&s.appendChild(e)}t.appendChild(s)}renderPerColumnGroupRow(e,t,i){const r=this.config,n=r.aggregators??{},o=this.columns,s=e.__groupRows??[],l=(this.gridElement?.querySelector(".body"))?.style.gridTemplateColumns||"";l&&(t.style.display="grid",t.style.gridTemplateColumns=l);let a=!1;o.forEach((o,l)=>{const d=document.createElement("div");if(d.className="cell group-cell",d.setAttribute("data-col",String(l)),d.setAttribute("role","gridcell"),Kt(o))return d.setAttribute("data-field",o.field),void t.appendChild(d);if(a){const e=n[o.field];if(e){const t=di.run(e,s,o.field,o);d.textContent=null!=t?String(t):""}else d.textContent=""}else{a=!0,d.appendChild(this.createToggleButton(e.__groupExpanded,i));const t=document.createElement("span"),l=n[o.field];if(l){const i=di.run(l,s,o.field,o);t.textContent=String(null!=i?i:e.__groupValue)}else t.textContent=this.getGroupLabelText(e.__groupValue,e.__groupDepth||0,e.__groupKey);if(d.appendChild(t),!1!==r.showRowCount){const e=document.createElement("span");e.className=Ge.GROUP_COUNT,e.textContent=` (${s.length})`,d.appendChild(e)}}t.appendChild(d)})}expandAll(){if(this.groupConfigDirty)return this.pendingExpansion=!0,this.expandedKeys=/* @__PURE__ */new Set,void this.requestRender();this.expandedKeys=function(e){const t=/* @__PURE__ */new Set;for(const i of e)"group"===i.kind&&t.add(i.key);return t}(this.flattenedRows),this.broadcast("group-toggle",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}collapseAll(){if(this.groupConfigDirty)return this.pendingExpansion=!1,this.expandedKeys=/* @__PURE__ */new Set,void this.requestRender();this.expandedKeys=/* @__PURE__ */new Set,this.broadcast("group-toggle",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}toggle(e){const t=!this.expandedKeys.has(e),i=this.config,r=this.flattenedRows.find(t=>"group"===t.kind&&t.key===e);if(i.accordion&&t&&r){const t=/* @__PURE__ */new Set;for(const i of this.expandedKeys)if(e.startsWith(i+"||")||i.startsWith(e+"||"))e.startsWith(i+"||")&&t.add(i);else{const e=this.flattenedRows.find(e=>"group"===e.kind&&e.key===i);e&&e.depth!==r.depth&&t.add(i)}t.add(e),this.expandedKeys=t}else this.expandedKeys=function(e,t){const i=new Set(e);return i.has(t)?i.delete(t):i.add(t),i}(this.expandedKeys,e);this.broadcast("group-toggle",{key:e,expanded:this.expandedKeys.has(e),value:r?.value,depth:r?.depth??0,expandedKeys:[...this.expandedKeys]});const n=this.getActiveGroups();if(n.length>0){const i=mi(n,e);if(t){if(this.emit("group-expand",{groupKey:e,groupPath:i}),!this.groupRowsMap.has(e)){const t=this.findGroupDefinition(n,e);t&&(this.loadingGroups.add(e),this.grid?.query?.("datasource:fetch-children",{context:{source:"grouping-rows",groupKey:e,group:t,groupPath:i}}))}}else this.emit("group-collapse",{groupKey:e,groupPath:i})}const o=this.expandedKeys.has(e),s=null!=r?.value?String(r.value):e;if(o){const e=r?.rows?.length??0;qe(this.gridElement,$e(this.gridElement,"groupExpanded",s,e))}else qe(this.gridElement,$e(this.gridElement,"groupCollapsed",s));this.requestRender()}isExpanded(e){return this.expandedKeys.has(e)}expand(e){this.expandedKeys.has(e)||(this.expandedKeys=/* @__PURE__ */new Set([...this.expandedKeys,e]),this.requestRender())}collapse(e){if(this.expandedKeys.has(e)){const t=new Set(this.expandedKeys);t.delete(e),this.expandedKeys=t,this.requestRender()}}getGroupState(){const e=this.flattenedRows.filter(e=>"group"===e.kind);return{isActive:this.isActive,expandedCount:this.expandedKeys.size,totalGroups:e.length,expandedKeys:[...this.expandedKeys]}}getRowCount(){return this.flattenedRows.length}refreshGroups(){this.requestRender()}getExpandedGroups(){return[...this.expandedKeys]}getFlattenedRows(){return this.flattenedRows}isGroupingActive(){return this.isActive}setGroupOn(e,t){this.config.groupOn=e,this.groupConfigDirty=!0,void 0!==t&&(this.pendingExpansion=t,this.expandedKeys=/* @__PURE__ */new Set,this.hasAppliedDefaultExpanded=!1),this.requestRender()}setGroups(e){this.preDefinedGroups=e,this.groupRowsMap.clear(),this.loadingGroups.clear(),this.expandedKeys.clear(),this.hasAppliedDefaultExpanded=!1,this.requestRender()}getGroups(){return this.preDefinedGroups.length>0?[...this.preDefinedGroups]:Array.isArray(this.config.groups)?[...this.config.groups]:[]}setGroupRows(e,t){this.groupRowsMap.set(e,t),this.loadingGroups.delete(e),this.requestRender()}setGroupLoading(e,t){t?this.loadingGroups.add(e):this.loadingGroups.delete(e),this.requestRender()}clearGroupRows(e){null!=e?this.groupRowsMap.delete(e):this.groupRowsMap.clear(),this.requestRender()}};function bi(e,t){return e.has(t)?e.delete(t):e.add(t),e}we("groupingRows",e=>new wi("boolean"==typeof e?{}:e??{}));var vi=class e extends Y{name="masterDetail";styles='@layer tbw-plugins{tbw-grid .cell[data-field=__tbw_expander]{justify-content:center;align-items:center;padding:0;display:flex;border-right:none!important}tbw-grid .header-row .cell[data-field=__tbw_expander]{display:none}tbw-grid .master-detail-expander{justify-content:center;align-items:center;width:100%;height:100%;display:flex}tbw-grid .master-detail-toggle{cursor:pointer;opacity:.7;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:inline-flex}tbw-grid .master-detail-toggle:hover{opacity:1}tbw-grid .master-detail-toggle{position:relative}tbw-grid .master-detail-toggle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}@media (pointer:coarse){tbw-grid .master-detail-toggle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}tbw-grid .master-detail-row{background:var(--tbw-master-detail-bg,var(--tbw-color-row-alt));border-bottom:1px solid var(--tbw-master-detail-border,var(--tbw-color-border));grid-column:1/-1;display:grid;overflow:hidden}tbw-grid .master-detail-cell{padding:var(--tbw-detail-padding,var(--tbw-spacing-xl,1rem));overflow:auto}tbw-grid .master-detail-row.tbw-expanding{animation:tbw-detail-expand var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}tbw-grid .master-detail-row.tbw-collapsing{animation:tbw-detail-collapse var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-detail-expand{0%{opacity:0;max-height:0;padding-top:0;padding-bottom:0}to{opacity:1;max-height:var(--tbw-detail-max-height,31.25rem);padding-top:var(--tbw-detail-padding,var(--tbw-spacing-xl,1rem));padding-bottom:var(--tbw-detail-padding,var(--tbw-spacing-xl,1rem))}}@keyframes tbw-detail-collapse{0%{opacity:1;max-height:var(--tbw-detail-max-height,31.25rem)}to{opacity:0;max-height:0}}}';static dependencies=[{name:"serverSide",required:!1,reason:"Fetches detail data via datasource:fetch-children on expand"}];get#x(){return this.grid}get defaultConfig(){return{detailHeight:"auto",expandOnRowClick:!1,animation:"slide"}}attach(e){super.attach(e),this.parseLightDomDetail(),this.on("datasource:children",e=>{const t=e;if("master-detail"!==t.context?.source)return;t.claimed=!0;const i=t.context.row;if(i&&this.expandedRows.has(i)){this.detailDataMap.set(i,t.rows),this.loadingDetails.delete(i);const e=this.detailElements.get(i);e&&(e.remove(),this.detailElements.delete(i),this.measuredDetailHeights.delete(i)),this.requestRender()}})}parseLightDomDetail(){const e=this.gridElement;if(!e)return;const t=e.querySelector("tbw-grid-detail");if(!t)return;const i=this.#x.__frameworkAdapter;if(i?.parseDetailElement){const e=i.parseDetailElement(t);if(e)return void(this.config={...this.config,detailRenderer:e})}const r=t.getAttribute("animation"),n=t.getAttribute("show-expand-column"),o=t.getAttribute("expand-on-row-click"),s=t.getAttribute("height"),l={};null!==r&&(l.animation="false"!==r&&r),null!==n&&(l.showExpandColumn="false"!==n),null!==o&&(l.expandOnRowClick="true"===o),null!==s&&(l.detailHeight="auto"===s?"auto":parseInt(s,10));const a=t.innerHTML.trim();a&&!this.config.detailRenderer&&(l.detailRenderer=(e,t)=>O(B(a,{value:e,row:e}))),Object.keys(l).length>0&&(this.config={...this.config,...l})}get animationStyle(){return!!this.isAnimationEnabled&&(this.config.animation??"slide")}animateExpand(e,t,i){if(!this.isAnimationEnabled||!1===this.animationStyle)return!1;e.classList.add("tbw-expanding");let r=!1;const n=()=>{r||(r=!0,e.classList.remove("tbw-expanding"),void 0!==t&&void 0!==i&&this.#Be(e,t,i))};return e.addEventListener("animationend",n,{once:!0}),setTimeout(n,this.animationDuration+50),!0}animateCollapse(e,t){if(!this.isAnimationEnabled||!1===this.animationStyle)return void t();e.classList.add("tbw-collapsing");const i=()=>{e.classList.remove("tbw-collapsing"),t()};e.addEventListener("animationend",i,{once:!0}),setTimeout(i,this.animationDuration+50)}#Be(e,t,i){if(!e.isConnected)return;const r=e.offsetHeight;if(r>0){const e=this.measuredDetailHeights.get(t);this.measuredDetailHeights.set(t,r),e!==r&&this.grid.invalidateRowHeight(i)}}expandedRows=/* @__PURE__ */new Set;detailElements=/* @__PURE__ */new Map;measuredDetailHeights=/* @__PURE__ */new Map;rowsToAnimate=/* @__PURE__ */new Set;loadingDetails=/* @__PURE__ */new Set;detailDataMap=/* @__PURE__ */new Map;static DEFAULT_DETAIL_HEIGHT=150;getDetailHeight(t){const i=this.detailElements.get(t);if(i&&!i.classList.contains("tbw-expanding")&&!i.classList.contains("tbw-collapsing")){const e=i.offsetHeight;if(e>0)return this.measuredDetailHeights.set(t,e),e}const r=this.measuredDetailHeights.get(t);return r&&r>0?r:"number"==typeof this.config?.detailHeight?this.config.detailHeight:e.DEFAULT_DETAIL_HEIGHT}toggleAndEmit(e,t){if(e?.__isGroupRow)return;this.expandedRows=bi(this.expandedRows,e);const i=this.expandedRows.has(e);i?(this.rowsToAnimate.add(e),this.detailDataMap.has(e)||this.queryBoolean("datasource:is-active")&&(this.loadingDetails.add(e),this.grid.query("datasource:fetch-children",{context:{source:"master-detail",row:e,rowIndex:t}}))):this.loadingDetails.delete(e),this.emit("detail-expand",{rowIndex:t,row:e,expanded:i}),this.requestRender()}detach(){this.expandedRows.clear(),this.detailElements.clear(),this.measuredDetailHeights.clear(),this.rowsToAnimate.clear(),this.loadingDetails.clear(),this.detailDataMap.clear()}processColumns(e){if(!(!0===this.config.showExpandColumn||!1!==this.config.showExpandColumn&&this.config.detailRenderer))return[...e];const t=[...e];if(function(e){return e.find(Kt)}(t))return t;const i=(r=this.name,{field:Vt,header:"",width:32,resizable:!1,sortable:!1,filterable:!1,lockPosition:!0,utility:!0,meta:{expanderColumn:!0,expanderPlugin:r}});var r;return i.viewRenderer=e=>{const{row:t}=e,i=this.expandedRows.has(t),r=document.createElement("span");r.className="master-detail-expander expander-cell";const n=document.createElement("span");return n.className="master-detail-toggle"+(i?" expanded":""),this.setIcon(n,i?"collapse":"expand"),n.setAttribute("role","button"),n.setAttribute("tabindex","0"),n.setAttribute("aria-expanded",String(i)),n.setAttribute("aria-label",i?"Collapse details":"Expand details"),r.appendChild(n),r},[i,...t]}onRowClick(e){if(this.config.expandOnRowClick&&this.config.detailRenderer)return this.toggleAndEmit(e.row,e.rowIndex),!1}onCellClick(e){if((e.originalEvent?.target)?.classList.contains("master-detail-toggle"))return this.toggleAndEmit(e.row,e.rowIndex),!0;this.expandedRows.size>0&&queueMicrotask(()=>this.#Ve())}onKeyDown(e){if(" "!==e.key)return;const t=this.grid._focusCol,i=this.grid._focusRow,r=this.visibleColumns[t];if(!r||!Kt(r))return;const n=this.rows[i];return n?(e.preventDefault(),this.toggleAndEmit(n,i),this.requestRenderWithFocus(),!0):void 0}afterRender(){this.#Ke(),this.#Ve()}#Ke(){const e=this.gridElement?.querySelector('.header-row .cell[data-field="__tbw_expander"]');if(!e)return;const t=parseInt(e.getAttribute("data-col")||"0",10),i=e.nextElementSibling;i&&(i.style.gridColumn=`${t+1} / ${t+3}`)}onScrollRender(){this.config.detailRenderer&&0!==this.expandedRows.size&&this.#Ve()}#Ve(){const e=this.config.detailRenderer;if(!e)return;const t=this.gridElement?.querySelector(".rows");if(!t)return;const i=this.#je(t);this.#Ue(i);const r=this.columns.length;for(const[n,o]of i){const t=this.rows[n];if(!t)continue;const i=this.expandedRows.has(t);if(o.classList.toggle("tbw-row-expanded",i),!i)continue;const s=this.detailElements.get(t);s?s.previousElementSibling!==o&&o.after(s):this.#Ye(t,n,o,r,e)}}#je(e){const t=this.grid,i=t._rowPool,r=t._virtualization?.start??0,n=t._virtualization?.end??0,o=/* @__PURE__ */new Map;if(i){const t=Math.min(i.length,n-r);for(let n=0;n<t;n++){const t=i[n];t.parentNode===e&&o.set(r+n,t)}return o}for(const s of e.querySelectorAll(".data-grid-row")){const e=s.querySelector(".cell[data-row]"),t=e?parseInt(e.getAttribute("data-row")??"-1",10):-1;t>=0&&o.set(t,s)}return o}#Ue(e){for(const[t,i]of this.detailElements){const r=this.rows.indexOf(t),n=r>=0&&e.has(r);if(this.expandedRows.has(t)&&n)continue;const o=this.#x.__frameworkAdapter;if(o?.unmount){const e=i.querySelector(".master-detail-cell")?.firstElementChild;e&&o.unmount(e)}i.parentNode&&i.remove(),this.detailElements.delete(t)}}#Ye(e,t,i,r,n){const o=function(e,t,i,r){const n=document.createElement("div");n.className="master-detail-row",n.setAttribute("data-detail-for",String(t)),n.setAttribute("role","row");const o=document.createElement("div");o.className="master-detail-cell",o.setAttribute("role","cell"),o.style.gridColumn=`1 / ${r+1}`;const s=i(e,t);return"string"==typeof s?q(o,s):s instanceof HTMLElement&&o.appendChild(s),n.appendChild(o),n}(e,t,n,r);"number"==typeof this.config.detailHeight&&(o.style.height=`${this.config.detailHeight}px`),i.after(o),this.detailElements.set(e,o);const s=this.rowsToAnimate.has(e);s&&this.rowsToAnimate.delete(e),s&&this.animateExpand(o,e,t)||requestAnimationFrame(()=>{this.#Be(o,e,t)})}getRowHeight(e,t){if(this.expandedRows.has(e))return(this.grid.defaultRowHeight??28)+this.getDetailHeight(e)}adjustVirtualStart(e,t,i){if(0===this.expandedRows.size)return e;const r=this.grid?._virtualization?.positionCache;let n=e;if(r&&r.length>0)for(const o of this.expandedRows){const i=this.rows.indexOf(o);i<0||i>=e||r[i].offset+r[i].height>t&&i<n&&(n=i)}else{const r=[];for(const e of this.expandedRows){const t=this.rows.indexOf(e);t>=0&&r.push({index:t,row:e})}r.sort((e,t)=>e.index-t.index);let o=0;for(const{index:s,row:l}of r){const r=s*i+o,a=this.getDetailHeight(l);o+=a,s>=e||r+i+a>t&&s<n&&(n=s)}}return n}expand(e){const t=this.rows[e];t&&!t.__isGroupRow&&(this.rowsToAnimate.add(t),this.expandedRows=function(e,t){return e.add(t),e}(this.expandedRows,t),this.requestRender())}collapse(e){const t=this.rows[e];t&&(this.expandedRows=function(e,t){return e.delete(t),e}(this.expandedRows,t),this.requestRender())}toggle(e){const t=this.rows[e];t&&!t.__isGroupRow&&(this.expandedRows=bi(this.expandedRows,t),this.expandedRows.has(t)&&this.rowsToAnimate.add(t),this.requestRender())}isExpanded(e){const t=this.rows[e];return!!t&&function(e,t){return e.has(t)}(this.expandedRows,t)}expandAll(){for(const e of this.rows)e?.__isGroupRow||(this.rowsToAnimate.add(e),this.expandedRows.add(e));this.requestRender()}collapseAll(){this.expandedRows.clear(),this.requestRender()}getExpandedRows(){const e=[];for(const t of this.expandedRows){const i=this.rows.indexOf(t);i>=0&&e.push(i)}return e}getDetailElement(e){const t=this.rows[e];return t?this.detailElements.get(t):void 0}getDetailData(e){const t=this.rows[e];return t?this.detailDataMap.get(t):void 0}isDetailLoading(e){const t=this.rows[e];return!!t&&this.loadingDetails.has(t)}refreshDetailRenderer(){const e=this.config.detailRenderer;if(this.config={...this.config,detailRenderer:void 0},this.parseLightDomDetail(),!this.config.detailRenderer&&e&&(this.config={...this.config,detailRenderer:e}),this.config.detailRenderer){const e=this.#x;"function"==typeof e.refreshColumns?e.refreshColumns():this.requestRender()}}};we("masterDetail",e=>new vi("boolean"==typeof e?{}:e??{}));var yi=new Intl.Collator(void 0,{sensitivity:"variant"});function Ci(e,t){return null==e&&null==t?0:null==e?1:null==t?-1:"number"==typeof e&&"number"==typeof t?e-t:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():"boolean"==typeof e&&"boolean"==typeof t?e===t?0:e?-1:1:yi.compare("string"==typeof e?e:String(e),"string"==typeof t?t:String(t))}function xi(e,t){const i=e.findIndex(e=>e.field===t);return i>=0?i+1:void 0}function Ri(e,t){return e.find(e=>e.field===t)?.direction}var Si=class extends Y{static manifest={queries:[{type:"sort:get-model",description:"Returns the current multi-sort model as SortModel[]"},{type:"sort:set-model",description:"Sets the multi-sort model from context (SortModel[])"}]};name="multiSort";styles='@layer tbw-plugins{.header-cell[data-sort=asc]:after{content:"↑";margin-left:var(--tbw-spacing-xs,.25em);opacity:.8}.header-cell[data-sort=desc]:after{content:"↓";margin-left:var(--tbw-spacing-xs,.25em);opacity:.8}.sort-indicator{margin-left:var(--tbw-spacing-xs,.25em);opacity:.8}.sort-index{font-size:var(--tbw-font-size-2xs,.7em);background:var(--tbw-multi-sort-badge-bg,var(--tbw-color-panel-bg));color:var(--tbw-multi-sort-badge-color,var(--tbw-color-fg));width:var(--tbw-multi-sort-badge-size,1em);height:var(--tbw-multi-sort-badge-size,1em);margin-left:var(--tbw-spacing-xs,.125em);border-radius:50%;justify-content:center;align-items:center;font-weight:600;display:inline-flex}}';get defaultConfig(){return{maxSortColumns:3,showSortIndex:!0}}sortModel=[];cachedSortResult=null;#Ze=!1;#Xe=[];get#x(){return this.grid}clearCoreSortState(){this.#x._sortState=null}#Qe(e){const t=this.grid?.query?.("grouping:get-grouped-fields",null);if(!Array.isArray(t)||0===t.length)return e;const i=t[0];if(!Array.isArray(i)||0===i.length)return e;const r=new Set(i),n=e.filter(e=>!r.has(e.field));return n.length===e.length?e:n}detach(){this.sortModel=[],this.cachedSortResult=null}handleQuery(e){switch(e.type){case"sort:get-model":return[...this.sortModel];case"sort:set-model":{const t=e.context;return!!Array.isArray(t)&&(this.sortModel=[...t],this.clearCoreSortState(),this.broadcast("sort-change",{sortModel:[...this.sortModel]}),this.requestRender(),!0)}default:return}}processRows(e){if(0===this.sortModel.length)return this.cachedSortResult=null,[...e];const t=this.#x;if(!t._isGridEditMode&&"number"==typeof t._activeEditRows&&-1!==t._activeEditRows&&this.cachedSortResult&&this.cachedSortResult.length===e.length)return[...this.cachedSortResult];const i=this.#Qe(this.sortModel),r=e;return i.length>0&&function(e,t,i){if(!t.length)return;const r=t.map(e=>{const t=i.find(t=>t.field===e.field),r=t?.sortComparator??Ci,n=e.field,o=t?.valueAccessor?e=>c(e,t):e=>e[n];return{field:n,asc:"asc"===e.direction,comparator:r,getValue:o,pinPlaceholders:!t?.sortComparator}}),n=r.some(e=>e.pinPlaceholders)&&function(e){for(let t=0;t<e.length;t++)if(!0===e[t]?.__loading)return!0;return!1}(e),o=e.length,s=r.length,l=new Array(o*s);for(let c=0;c<o;c++){const t=e[c],i=c*s;for(let e=0;e<s;e++)l[i+e]=r[e].getValue(t)}const a=o<=4294967295?new Uint32Array(o):new Array(o);for(let c=0;c<o;c++)a[c]=c;const d=(t,i)=>{if(n){const r=function(e,t){const i=!0===e?.__loading;return i===(!0===t?.__loading)?0:i?1:-1}(e[t],e[i]);if(0!==r)return r}const o=t*s,a=i*s;for(let n=0;n<s;n++){const s=r[n],d=s.comparator(l[o+n],l[a+n],e[t],e[i]);if(0!==d)return s.asc?d:-d}return 0};Uint32Array,a.sort(d);const u=e.slice();for(let c=0;c<o;c++)e[c]=u[a[c]]}(r,i,this.columns),this.cachedSortResult=r,r}onHeaderClick(e){if(!this.columns.find(t=>t.field===e.field)?.sortable)return!1;const t=e.originalEvent.shiftKey,i=this.config.maxSortColumns??3;if(this.sortModel=function(e,t,i,r){const n=e.find(e=>e.field===t);return i?n?"asc"===n.direction?e.map(e=>e.field===t?{...e,direction:"desc"}:e):e.filter(e=>e.field!==t):e.length<r?[...e,{field:t,direction:"asc"}]:e:"asc"===n?.direction?[{field:t,direction:"desc"}]:"desc"===n?.direction?[]:[{field:t,direction:"asc"}]}(this.sortModel,e.field,t,i),this.clearCoreSortState(),this.broadcast("sort-change",{sortModel:[...this.sortModel]}),this.requestRender(),this.grid?.requestStateChange?.(),this.sortModel.length>0){const e=this.sortModel.map(e=>`${this.columns.find(t=>t.field===e.field)?.header??e.field} ${"asc"===e.direction?"ascending":"descending"}`);qe(this.gridElement,$e(this.gridElement,"sortApplied",e.join(", then "),""))}else qe(this.gridElement,$e(this.gridElement,"sortCleared"));return!0}afterRender(){const e=this.gridElement;if(!e)return;const t=!1!==this.config.showSortIndex;e.querySelectorAll(".header-row .cell[data-field]").forEach(e=>{const i=e.getAttribute("data-field");if(!i)return;const r=xi(this.sortModel,i),n=Ri(this.sortModel,i);if(e.querySelector(".sort-index")?.remove(),n){const i=this.updateSortIndicator(e,n);if(t&&this.sortModel.length>1&&void 0!==r){const t=document.createElement("span");t.className="sort-index",t.textContent=String(r),i.nextSibling?e.insertBefore(t,i.nextSibling):e.appendChild(t)}}else e.classList.contains("sortable")&&this.updateSortIndicator(e,null)})}getSortModel(){return[...this.sortModel]}setSortModel(e){if(this.sortModel=[...e],this.clearCoreSortState(),this.broadcast("sort-change",{sortModel:[...e]}),this.requestRender(),this.grid?.requestStateChange?.(),e.length>0){const t=e.map(e=>`${this.columns.find(t=>t.field===e.field)?.header??e.field} ${"asc"===e.direction?"ascending":"descending"}`);qe(this.gridElement,$e(this.gridElement,"sortApplied",t.join(", then "),""))}}clearSort(){this.sortModel=[],this.clearCoreSortState(),this.broadcast("sort-change",{sortModel:[]}),this.requestRender(),this.grid?.requestStateChange?.(),qe(this.gridElement,$e(this.gridElement,"sortCleared"))}getSortIndex(e){return xi(this.sortModel,e)}getSortDirection(e){return Ri(this.sortModel,e)}getColumnState(e){const t=this.sortModel.findIndex(t=>t.field===e);if(-1!==t)return{sort:{direction:this.sortModel[t].direction,priority:t}}}applyColumnState(e,t){if(this.#Ze||(this.#Xe=[...this.sortModel]),t.sort){const i=this.sortModel.findIndex(t=>t.field===e),r={field:e,direction:t.sort.direction};-1!==i?this.sortModel[i]=r:this.sortModel.splice(t.sort.priority,0,r)}else this.sortModel=this.sortModel.filter(t=>t.field!==e);this.clearCoreSortState(),this.#Ze||(this.#Ze=!0,queueMicrotask(()=>{this.#Ze=!1;const e=this.#Xe;this.#Xe=[],function(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i].field!==t[i].field||e[i].direction!==t[i].direction)return!1;return!0}(e,this.sortModel)||(this.broadcast("sort-change",{sortModel:[...this.sortModel]}),this.requestRender())}))}};function Ei(e){return e.pinned??e.meta?.pinned}function Ai(e,t){return function(e,t){return"left"===e||"right"===e?e:"rtl"===t?"start"===e?"right":"left":"start"===e?"left":"right"}(e,t)}function _i(e,t){const i=Ei(e);return!!i&&"left"===Ai(i,t)}function ki(e,t){const i=Ei(e);return!!i&&"right"===Ai(i,t)}function Ti(e){for(let t=0;t<e.length;t++)if(null!=e[t].pinned||null!=e[t].meta?.pinned)return!0;return!1}function Mi(e,t){const i={groupEndAdjustments:{addGroupEnd:/* @__PURE__ */new Set,removeGroupEnd:/* @__PURE__ */new Set},leftOffsets:/* @__PURE__ */new Map,rightOffsets:/* @__PURE__ */new Map,splitGroups:[]},r=Array.from(e.querySelectorAll(".header-row .cell"));if(!r.length)return i;const n=Ue(e),o=/* @__PURE__ */new Map,s=/* @__PURE__ */new Map;let l=0;for(const u of t)if(_i(u,n)){const t=r.find(e=>e.getAttribute("data-field")===u.field);t&&(o.set(u.field,l),t.classList.add(Ge.STICKY_LEFT),t.style.position="sticky",t.style.left=l+"px",e.querySelectorAll(`.data-grid-row .cell[data-field="${u.field}"]`).forEach(e=>{e.classList.add(Ge.STICKY_LEFT),e.style.position="sticky",e.style.left=l+"px"}),l+=t.offsetWidth)}let a=0;for(const u of[...t].reverse())if(ki(u,n)){const t=r.find(e=>e.getAttribute("data-field")===u.field);t&&(s.set(u.field,a),t.classList.add(Ge.STICKY_RIGHT),t.style.position="sticky",t.style.right=a+"px",e.querySelectorAll(`.data-grid-row .cell[data-field="${u.field}"]`).forEach(e=>{e.classList.add(Ge.STICKY_RIGHT),e.style.position="sticky",e.style.right=a+"px"}),a+=t.offsetWidth)}const d=[],c=function(e,t,i,r,n){const o={addGroupEnd:/* @__PURE__ */new Set,removeGroupEnd:/* @__PURE__ */new Set},s=Array.from(e.querySelectorAll(".header-group-row .header-group-cell"));if(!s.length)return o;for(const l of s){const e=l.style.gridColumn;if(!e)continue;const s=e.match(/^(\d+)\s*\/\s*span\s+(\d+)$/);if(!s)continue;const a=parseInt(s[1],10)-1,d=a+parseInt(s[2],10)-1,c=t.slice(a,d+1);if(!c.length)continue;const u=c.every(e=>_i(e,r)),h=c.every(e=>ki(e,r));if(u){const e=c[0].field,t=i.find(t=>t.getAttribute("data-field")===e);t&&(l.classList.add(Ge.STICKY_LEFT),l.style.position="sticky",l.style.left=t.style.left)}else if(h){const e=c[c.length-1].field,t=i.find(t=>t.getAttribute("data-field")===e);t&&(l.classList.add(Ge.STICKY_RIGHT),l.style.position="sticky",l.style.right=t.style.right)}else if(l.classList.contains("implicit-group"))Li(l,c,a,i,r,o);else{const e=c.some(e=>_i(e,r)),t=c.some(e=>ki(e,r));(e||t)&&Di(l,c,a,i,r,o,n)}}return o}(e,t,r,n,d);if(c.addGroupEnd.size>0||c.removeGroupEnd.size>0){for(const t of c.addGroupEnd){const i=r.find(e=>e.getAttribute("data-field")===t);i&&i.classList.add("group-end"),e.querySelectorAll(`.data-grid-row .cell[data-field="${t}"]`).forEach(e=>{e.classList.add("group-end")})}for(const t of c.removeGroupEnd){const i=r.find(e=>e.getAttribute("data-field")===t);i&&i.classList.remove("group-end"),e.querySelectorAll(`.data-grid-row .cell[data-field="${t}"]`).forEach(e=>{e.classList.remove("group-end")})}}return{groupEndAdjustments:c,leftOffsets:o,rightOffsets:s,splitGroups:d}}function Ii(e,t){return _i(e,t)?"left":ki(e,t)?"right":"none"}function Li(e,t,i,r,n,o){const s=[];for(let d=0;d<t.length;d++){const e=Ii(t[d],n),r=s[s.length-1];r&&r.state===e?r.cols.push(t[d]):s.push({state:e,cols:[t[d]],colStart:i+d})}if(s.length<=1)return;const l=e.parentElement;if(!l)return;const a=e.nextSibling;l.removeChild(e);for(const d of s){const t=document.createElement("div");if(t.className=e.className,t.setAttribute("data-group",e.getAttribute("data-group")||""),t.style.gridColumn=`${d.colStart+1} / span ${d.cols.length}`,"left"===d.state){const e=d.cols[0].field,i=r.find(t=>t.getAttribute("data-field")===e);i&&(t.classList.add(Ge.STICKY_LEFT),t.style.position="sticky",t.style.left=i.style.left)}else if("right"===d.state){const e=d.cols[d.cols.length-1].field,i=r.find(t=>t.getAttribute("data-field")===e);i&&(t.classList.add(Ge.STICKY_RIGHT),t.style.position="sticky",t.style.right=i.style.right)}else"none"===d.state&&d.cols.every(e=>String(e.field||"").startsWith("__tbw_"))&&(t.style.borderRightStyle="none");a?l.insertBefore(t,a):l.appendChild(t)}for(let d=0;d<s.length;d++){const e=s[d],t=s[d+1];if("none"!==e.state&&t&&"none"===t.state){const t=e.cols[e.cols.length-1].field;t&&o.addGroupEnd.add(t)}if("none"===e.state&&e.cols.every(e=>String(e.field||"").startsWith("__tbw_"))){const t=e.cols[e.cols.length-1].field;t&&o.removeGroupEnd.add(t)}}}function Di(e,t,i,r,n,o,s){const l=[];for(let y=0;y<t.length;y++){const e=Ii(t[y],n),r=l[l.length-1];r&&r.state===e?r.cols.push(t[y]):l.push({state:e,cols:[t[y]],colStart:i+y})}if(l.length<=1)return;const a=e.parentElement;if(!a)return;const d=e.textContent||"",c=e.getAttribute("data-group")||"",u=e.nextSibling;a.removeChild(e);const h=l.findIndex(e=>"left"===e.state);let g=-1;for(let y=l.length-1;y>=0;y--)if("right"===l[y].state){g=y;break}const p=h>=0?h:g,f=h>=0&&h+1<l.length?h+1:g>=0&&g-1>=0?g-1:-1;let m,w,b,v="";for(let y=0;y<l.length;y++){const t=l[y],i=document.createElement("div");if(i.className=e.className,i.setAttribute("data-group",c),i.style.gridColumn=`${t.colStart+1} / span ${t.cols.length}`,"left"===t.state){const e=t.cols[0].field,n=r.find(t=>t.getAttribute("data-field")===e);n&&(i.classList.add(Ge.STICKY_LEFT),i.style.position="sticky",i.style.left=n.style.left),y===p&&(i.style.borderRightStyle="none",m=i,v=t.cols[t.cols.length-1].field)}else if("right"===t.state){const e=t.cols[t.cols.length-1].field,n=r.find(t=>t.getAttribute("data-field")===e);n&&(i.classList.add(Ge.STICKY_RIGHT),i.style.position="sticky",i.style.right=n.style.right),y===p&&(i.style.borderLeftStyle="none",m=i,v=t.cols[0].field)}if(y===f){i.style.overflow="visible";const e=document.createElement("span");e.textContent=d,e.style.position="relative",e.style.zIndex="36",e.style.display="block",e.style.overflow="hidden",e.style.textOverflow="ellipsis",e.style.whiteSpace="nowrap",i.appendChild(e),w=i,b=e}u?a.insertBefore(i,u):a.appendChild(i)}m&&w&&b&&v&&s.push({groupId:c,label:d,pinnedFragment:m,scrollableFragment:w,floatLabel:b,pinnedField:v,isTransferred:!1,floatOffset:0})}function Pi(e){e.querySelectorAll(`.${Ge.STICKY_LEFT}, .${Ge.STICKY_RIGHT}`).forEach(e=>{e.classList.remove(Ge.STICKY_LEFT,Ge.STICKY_RIGHT),e.style.position="",e.style.left="",e.style.right=""})}we("multiSort",e=>!0===e||"multi"===e?new Si:new Si("single"===e?{maxSortColumns:1}:e));var Fi="canMoveColumn",Hi=class extends Y{static manifest={hookPriority:{processColumns:-10},ownedProperties:[{property:"pinned",level:"column",description:'the "pinned" column property',isUsed:e=>"left"===e||"right"===e||"start"===e||"end"===e}],queries:[{type:Fi,description:"Prevents pinned columns from being moved/reordered"},{type:"getStickyOffsets",description:"Returns the offsets for left/right pinned columns"},{type:"getContextMenuItems",description:"Contributes pin/unpin items to the header context menu"}]};name="pinnedColumns";get defaultConfig(){return{}}isApplied=!1;leftOffsets=/* @__PURE__ */new Map;rightOffsets=/* @__PURE__ */new Map;#Je={addGroupEnd:/* @__PURE__ */new Set,removeGroupEnd:/* @__PURE__ */new Set};#et=[];#tt=[];#M=/* @__PURE__ */new WeakSet;detach(){this.leftOffsets.clear(),this.rightOffsets.clear(),this.isApplied=!1,this.#Je={addGroupEnd:/* @__PURE__ */new Set,removeGroupEnd:/* @__PURE__ */new Set},this.#et=[],this.#tt=[],this.#M=/* @__PURE__ */new WeakSet}static detect(e,t){const i=t?.columns;return!!Array.isArray(i)&&Ti(i)}processColumns(e){const t=[...e];for(const r of t){const e=r.__element;if(!e||this.#M.has(e))continue;if(this.#M.add(e),null!=r.pinned)continue;const t=e.getAttribute("pinned");"left"!==t&&"right"!==t&&"start"!==t&&"end"!==t||(r.pinned=t)}if(this.isApplied=Ti(t),!this.isApplied)return t;const i=this.gridElement;return function(e,t="ltr"){const i=[],r=[],n=[];for(const o of e){const e=Ei(o);e?"left"===Ai(e,t)?i.push(o):n.push(o):r.push(o)}return[...i,...r,...n]}(t,i?Ue(i):"ltr")}afterRender(){if(!this.isApplied)return;const e=this.gridElement,t=[...this.columns];if(!Ti(t))return Pi(e),void(this.isApplied=!1);queueMicrotask(()=>{const i=Mi(e,t);this.#Je=i.groupEndAdjustments,this.leftOffsets=i.leftOffsets,this.rightOffsets=i.rightOffsets,this.#et=i.splitGroups,this.#it()})}afterCellRender(e){if(!this.isApplied)return;const t=e.column.field,i=e.cellElement,r=this.leftOffsets.get(t);if(void 0!==r)i.classList.contains(Ge.STICKY_LEFT)||i.classList.add(Ge.STICKY_LEFT),i.style.position="sticky",i.style.left=r+"px";else{const e=this.rightOffsets.get(t);void 0!==e&&(i.classList.contains(Ge.STICKY_RIGHT)||i.classList.add(Ge.STICKY_RIGHT),i.style.position="sticky",i.style.right=e+"px")}this.#Je.addGroupEnd.has(t)?e.cellElement.classList.add("group-end"):this.#Je.removeGroupEnd.has(t)&&e.cellElement.classList.remove("group-end")}onScroll(e){this.#it()}#it(){if(!this.isApplied||0===this.#et.length)return;const e=this.gridElement;for(const t of this.#et){const i=t.pinnedFragment.getBoundingClientRect(),r=t.scrollableFragment.getBoundingClientRect().right<=i.right;if(r&&!t.isTransferred?(t.pinnedFragment.textContent=t.label,t.pinnedFragment.style.overflow="hidden",t.pinnedFragment.style.textOverflow="ellipsis",t.pinnedFragment.style.whiteSpace="nowrap",t.pinnedFragment.style.borderRightStyle="",t.floatLabel.style.visibility="hidden",t.floatLabel.style.transform="",t.floatOffset=0,this.#Je.addGroupEnd.add(t.pinnedField),e.querySelectorAll(`.header-row .cell[data-field="${t.pinnedField}"], .data-grid-row .cell[data-field="${t.pinnedField}"]`).forEach(e=>e.classList.add("group-end")),t.isTransferred=!0):!r&&t.isTransferred&&(t.pinnedFragment.textContent="",t.pinnedFragment.style.overflow="",t.pinnedFragment.style.textOverflow="",t.pinnedFragment.style.whiteSpace="",t.pinnedFragment.style.borderRightStyle="none",t.floatLabel.style.visibility="",t.floatLabel.style.transform="",t.floatOffset=0,this.#Je.addGroupEnd.delete(t.pinnedField),e.querySelectorAll(`.header-row .cell[data-field="${t.pinnedField}"], .data-grid-row .cell[data-field="${t.pinnedField}"]`).forEach(e=>e.classList.remove("group-end")),t.isTransferred=!1),!t.isTransferred){const e=t.floatLabel.getBoundingClientRect().left-t.floatOffset,r=i.left;e<r?(t.floatOffset=r-e,t.floatLabel.style.transform=`translateX(${t.floatOffset}px)`):(t.floatOffset=0,t.floatLabel.style.transform="")}}}handleQuery(e){switch(e.type){case Fi:return null==Ei(e.context)&&void 0;case"getStickyOffsets":return{left:Object.fromEntries(this.leftOffsets),right:Object.fromEntries(this.rightOffsets)};case"getContextMenuItems":{const t=e.context;if(!t.isHeader)return;const i=t.column;if(!i?.field)return;if(i.lockPinning||i.meta?.lockPinning)return;const r=[];return null!=Ei(i)?r.push({id:"pinned/unpin",label:this.t("pinnedColumns.unpin","Unpin Column"),icon:"📌",order:40,action:()=>this.setPinPosition(i.field,void 0)}):(r.push({id:"pinned/pin-left",label:this.t("pinnedColumns.pinLeft","Pin Left"),icon:"⬅",order:40,action:()=>this.setPinPosition(i.field,"left")}),r.push({id:"pinned/pin-right",label:this.t("pinnedColumns.pinRight","Pin Right"),icon:"➡",order:41,action:()=>this.setPinPosition(i.field,"right")})),r}default:return}}setPinPosition(e,t){const i=this.columns;if(!i?.length)return;const r=i.findIndex(t=>t.field===e);if(-1===r)return;const n=this.gridElement;if(t)0===this.#tt.length&&(this.#tt=i.map(e=>e.field)),n.columns=i.map(i=>{if(i.field!==e)return i;const r={...i};return r.pinned=t,r});else{const t={...i[r]};delete t.pinned;const o=[...i];o.splice(r,1);const s=this.#tt.indexOf(e);if(s>=0){let e=o.length;for(let t=0;t<o.length;t++)if(!Ei(o[t])&&this.#tt.indexOf(o[t].field)>s){e=t;break}o.splice(e,0,t)}else o.splice(Math.min(r,o.length),0,t);o.some(e=>null!=Ei(e))||(this.#tt=[]),n.columns=o}}refreshStickyOffsets(){const e=[...this.columns],t=Mi(this.gridElement,e);this.#Je=t.groupEndAdjustments,this.leftOffsets=t.leftOffsets,this.rightOffsets=t.rightOffsets,this.#et=t.splitGroups}getLeftPinnedColumns(){return function(e,t="ltr"){return e.filter(e=>_i(e,t))}([...this.columns],Ue(this.gridElement))}getRightPinnedColumns(){return function(e,t="ltr"){return e.filter(e=>ki(e,t))}([...this.columns],Ue(this.gridElement))}clearStickyPositions(){Pi(this.gridElement)}getHorizontalScrollOffsets(e,t){if(!this.isApplied)return;let i=0,r=0;if(e){const t=e.querySelectorAll(`.${Ge.STICKY_LEFT}`),n=e.querySelectorAll(`.${Ge.STICKY_RIGHT}`);t.forEach(e=>{i+=e.offsetWidth}),n.forEach(e=>{r+=e.offsetWidth})}else this.gridElement.querySelectorAll(".header-row .cell").forEach(e=>{e.classList.contains(Ge.STICKY_LEFT)?i+=e.offsetWidth:e.classList.contains(Ge.STICKY_RIGHT)&&(r+=e.offsetWidth)});const n=t?.classList.contains(Ge.STICKY_LEFT)||t?.classList.contains(Ge.STICKY_RIGHT);return{left:i,right:r,skipScroll:n}}};function Gi(e,t,i,r){const n=document.createElement("div");n.className="tbw-aggregation-cell tbw-aggregation-cell-full",n.style.gridColumn="1 / -1";const o="function"==typeof t.label?t.label(r,i):t.label;if(o){const e=document.createElement("span");e.className="tbw-aggregation-label",e.textContent=o,n.appendChild(e)}const s=function(e,t,i){const r=e.aggregators&&Object.keys(e.aggregators).length>0,n=e.cells&&Object.keys(e.cells).length>0;if(!r&&!n)return null;const o=document.createElement("span");o.className="tbw-aggregation-aggregates";for(const s of t){const{value:t,formatter:r}=Oi(e,s,i);if(null!=t){const e=document.createElement("span");e.className="tbw-aggregation-aggregate",e.setAttribute("data-field",s.field),e.textContent=`${s.header??s.field}: ${r?r(t,s.field,s):String(t)}`,o.appendChild(e)}}return o.children.length>0?o:null}(t,i,r);s&&n.appendChild(s),e.appendChild(n)}function zi(e,t,i,r){for(const o of i){const i=document.createElement("div");i.className="tbw-aggregation-cell",i.setAttribute("data-field",o.field);const{value:n,formatter:s}=Oi(t,o,r);i.textContent=null!=n?s?s(n,o.field,o):String(n):"",e.appendChild(i)}const n="function"==typeof t.label?t.label(r,i):t.label;if(n){const t=document.createElement("span");t.className="tbw-aggregation-label",t.textContent=n,e.appendChild(t)}}function Oi(e,t,i){let r,n;const o=e.aggregators?.[t.field];if(o)if("object"==typeof(s=o)&&null!==s&&"aggFunc"in s){const e=di.get(o.aggFunc);e&&(r=e(i,t.field,t)),n=o.formatter}else{const e=di.get(o);e&&(r=e(i,t.field,t))}else if(e.cells&&Object.prototype.hasOwnProperty.call(e.cells,t.field)){const n=e.cells[t.field];r="function"==typeof n?n(i,t.field,t):n}var s;return{value:r,formatter:n}}function Ni(e,t,i,r,n){const o=i?.sourceRows,s=i?.rows,l=Array.isArray(o)?o.length:e.length,a=Array.isArray(s)?s.length:e.length,d=l>0?l:a;return{totalRows:d,filteredRows:n?.cachedResult?.length??(a<l?a:d),selectedRows:r?.selected?.size??0,columns:t,rows:e,grid:i}}function qi(){return e=>{const t=document.createElement("span");return t.className="tbw-status-panel tbw-status-panel-row-count",t.textContent=`Total: ${e.totalRows} rows`,t}}function $i(){return e=>{if(e.selectedRows<=0)return null;const t=document.createElement("span");return t.className="tbw-status-panel tbw-status-panel-selected-count",t.textContent=`Selected: ${e.selectedRows}`,t}}function Wi(){return e=>{if(e.filteredRows===e.totalRows)return null;const t=document.createElement("span");return t.className="tbw-status-panel tbw-status-panel-filtered-count",t.textContent=`Filtered: ${e.filteredRows}`,t}}function Bi(e){const t=document.createElement("div");return t.className="tbw-status-panel tbw-status-panel-custom",t.appendChild(e),t}we("pinnedColumns",e=>new Hi);var Vi=/* @__PURE__ */new WeakMap;function Ki(e,t,i){const r=Array.isArray(e.render)?e.render:[{zone:"left",render:e.render}],n=r.map(e=>e.render(t)??null);if(i){const e=Vi.get(i);if(e&&e.length===n.length&&e.every((e,t)=>e===n[t]))return i}const o=document.createElement("div");o.className="tbw-pinned-rows",o.setAttribute("role","presentation"),o.setAttribute("aria-live","polite"),e.id&&o.setAttribute("data-pinned-row-id",e.id);const s=document.createElement("div");s.className="tbw-pinned-rows-left";const l=document.createElement("div");l.className="tbw-pinned-rows-center";const a=document.createElement("div");a.className="tbw-pinned-rows-right";const d={left:s,center:l,right:a};for(let c=0;c<r.length;c++){const e=r[c],t=n[c];if(null==t)continue;const i=e.zone??"left",o=t.classList?.contains("tbw-status-panel");d[i].appendChild(o?t:Bi(t))}return 0===s.children.length&&0===l.children.length&&0===a.children.length?null:(o.appendChild(s),o.appendChild(l),o.appendChild(a),Vi.set(o,n),o)}function ji(e,t,i,r,n=!1){const o=function(e){const t=document.createElement("div");return t.className=`tbw-aggregation-rows tbw-aggregation-rows-${e}`,t.setAttribute("role","presentation"),t}(t);return function(e,t,i,r,n=!1){e.innerHTML="";for(const o of t){const t=document.createElement("div");t.className="tbw-aggregation-row",t.setAttribute("role","presentation"),o.id&&t.setAttribute("data-aggregation-id",o.id),o.fullWidth??n?Gi(t,o,i,r):zi(t,o,i,r),e.appendChild(t)}}(o,[e],i,r,n),o}var Ui=class extends Y{name="pinnedRows";styles="@layer tbw-plugins{.tbw-scroll-area{container-type:inline-size}.tbw-footer,.tbw-header-pinned{z-index:var(--tbw-z-layer-pinned-rows,20);background:var(--tbw-color-panel-bg);flex-shrink:0;min-width:-moz-fit-content;min-width:fit-content}.tbw-pinned-rows{padding:var(--tbw-button-padding,var(--tbw-spacing-md,.5rem) var(--tbw-spacing-lg,.75rem));background:var(--tbw-pinned-rows-bg,var(--tbw-color-panel-bg));border-top:1px solid var(--tbw-pinned-rows-border,var(--tbw-color-border));font-size:var(--tbw-font-size-xs,.75rem);color:var(--tbw-pinned-rows-color,var(--tbw-color-fg-muted));box-sizing:border-box;justify-content:space-between;align-items:center;width:100cqi;min-width:0;min-height:32px;display:flex;position:sticky;left:0}.tbw-pinned-rows+.tbw-pinned-rows{border-top:0}.tbw-pinned-rows-left,.tbw-pinned-rows-center,.tbw-pinned-rows-right{align-items:center;gap:var(--tbw-spacing-xl,1rem);display:flex}.tbw-pinned-rows-left{justify-content:flex-start}.tbw-pinned-rows-center{flex:1;justify-content:center}.tbw-pinned-rows-right{justify-content:flex-end}.tbw-status-panel{white-space:nowrap}.tbw-aggregation-rows{background:var(--tbw-aggregation-bg,var(--tbw-color-header-bg));min-width:-moz-fit-content;min-width:fit-content}.tbw-aggregation-rows-top{border-bottom:1px solid var(--tbw-aggregation-border,var(--tbw-color-border))}.tbw-aggregation-rows-bottom{border-top:1px solid var(--tbw-aggregation-border,var(--tbw-color-border))}.tbw-aggregation-row{grid-template-columns:var(--tbw-column-template);font-size:var(--tbw-aggregation-font-size,.8em);font-weight:var(--tbw-aggregation-font-weight,600);background:inherit;display:grid;position:relative}.tbw-aggregation-row>.tbw-aggregation-label{padding:var(--tbw-cell-padding,.125rem .5rem);background:inherit;z-index:1;pointer-events:none;grid-area:1/1;align-items:center;display:flex;position:sticky;left:0}.tbw-aggregation-row>.tbw-aggregation-cell:first-child{grid-area:1/1}.tbw-aggregation-cell:not(:empty){z-index:2;background:inherit;position:relative}.tbw-aggregation-cell{padding:var(--tbw-cell-padding,.125rem .5rem);min-height:var(--tbw-row-height,1.75rem);border-right:1px solid var(--tbw-color-border-cell);text-overflow:ellipsis;white-space:var(--tbw-cell-white-space,nowrap);align-content:center;align-items:center;display:block;overflow:hidden}.tbw-aggregation-cell:last-child{border-right:0}.tbw-aggregation-cell-full{align-items:center;gap:var(--tbw-spacing-lg,.75rem);border-right:0;grid-column:1/-1;display:flex}.tbw-aggregation-label{white-space:nowrap}.tbw-aggregation-aggregates{align-items:center;gap:var(--tbw-spacing-lg,.75rem);opacity:.85;font-weight:400;display:flex}.tbw-aggregation-aggregate{white-space:nowrap}}";get defaultConfig(){return{slots:[{position:"bottom",render:[{zone:"left",render:qi()},{zone:"left",render:Wi()},{zone:"right",render:$i()}]}]}}footerWrapper=null;headerWrapper=null;detach(){this.cleanup()}afterRender(){const e=this.gridElement;if(!e)return;const t=e.querySelector(".tbw-scroll-area")??e.querySelector(".tbw-grid-content")??e.querySelector(".tbw-grid-root");if(!t)return;this.footerWrapper&&!t.contains(this.footerWrapper)&&(this.footerWrapper=null),this.headerWrapper&&!t.contains(this.headerWrapper)&&(this.headerWrapper=null);const i=this.getSelectionState(),r=this.getFilterState(),n=Ni(this.sourceRows,this.columns,this.gridElement,i,r);this.renderSlotMode(t,e,n)}renderSlotMode(e,t,i){const r=this.config.slots??[],n=r.filter(e=>"top"===e.position),o=r.filter(e=>"top"!==e.position);n.length>0?(this.headerWrapper||(this.headerWrapper=document.createElement("div"),this.headerWrapper.className="tbw-header-pinned",e.insertBefore(this.headerWrapper,e.firstChild)),this.populateSlotWrapper(this.headerWrapper,n,"top",i)):this.headerWrapper&&(this.headerWrapper.remove(),this.headerWrapper=null),o.length>0?(this.footerWrapper||(this.footerWrapper=document.createElement("div"),this.footerWrapper.className="tbw-footer",e.appendChild(this.footerWrapper)),this.populateSlotWrapper(this.footerWrapper,o,"bottom",i)):this.footerWrapper&&(this.footerWrapper.remove(),this.footerWrapper=null)}populateSlotWrapper(e,t,i,r){const n=/* @__PURE__ */new Map;for(let l=0;l<e.children.length;l++){const t=e.children[l],i=t.getAttribute("data-pinned-row-id");i&&n.set(i,t)}const o=[];for(const l of t){const e="render"in l&&null!=l.render?Ki(l,r,l.id?n.get(l.id)??null:null):ji(l,i,this.visibleColumns,this.sourceRows,this.config.fullWidth);e&&o.push(e)}const s=e.children;if(s.length===o.length){let e=!0;for(let t=0;t<o.length;t++)if(s[t]!==o[t]){e=!1;break}if(e)return}e.replaceChildren(...o)}cleanup(){this.footerWrapper&&(this.footerWrapper.remove(),this.footerWrapper=null),this.headerWrapper&&(this.headerWrapper.remove(),this.headerWrapper=null)}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}getFilterState(){try{return this.grid?.getPluginState?.("filtering")??null}catch{return null}}refresh(){this.requestRender()}getContext(){const e=this.getSelectionState(),t=this.getFilterState();return Ni(this.rows,this.columns,this.gridElement,e,t)}};function Yi(e,t){const i=/* @__PURE__ */new Map;for(const n of t)i.set(n.field,(i.get(n.field)??0)+1);const r=/* @__PURE__ */new Set;return t.map((t,n)=>{const o=function(e,t){return[...e,t].join("|")}(e,t.field);if((i.get(t.field)??0)<2)return o;const s="string"==typeof t.aggFunc?t.aggFunc:"custom",l=`${o}|${s}`,a=`${t.field}\0${s}`;return r.has(a)?`${l}|${n+1}`:(r.add(a),l)})}function Zi(e,t){const i=t.rowGroupFields??[],r=t.columnGroupFields??[],n=t.valueFields??[],o=function(e,t,i="asc"){if(0===t.length)return["value"];const r=/* @__PURE__ */new Set;for(const o of e){const e=t.map(e=>String(o[e]??"")).join("|");r.add(e)}const n=[...r].sort();return"desc"===i?n.reverse():n}(e,r,t.sortColumns),s=er(e,i,r,o,n,0,"");t.sortRows&&nr(s,t.sortRows,n);const l=function(e,t,i){const r={},n=t.flatMap(e=>Yi([e],i));function o(e){for(const t of e)if(t.isGroup&&t.children?.length)t.children&&o(t.children);else for(const e of n)r[e]=(r[e]??0)+(t.values[e]??0)}return o(e),r}(s,o,n);return{rows:s,columnKeys:o,totals:l,grandTotal:Object.values(l).reduce((e,t)=>e+t,0)}}function Xi(e,t){const{aggFunc:i,field:r}=t;if("function"==typeof i){const t=[];for(let i=0;i<e.length;i++){const n=e[i][r];if(null==n||""===n)continue;const o=Number(n);isNaN(o)||t.push(o)}return t.length>0?i(t):null}if("first"===i){for(let t=0;t<e.length;t++){const i=e[t][r];if(null==i||""===i)continue;const n=Number(i);if(!isNaN(n))return n}return null}if("last"===i){for(let t=e.length-1;t>=0;t--){const i=e[t][r];if(null==i||""===i)continue;const n=Number(i);if(!isNaN(n))return n}return null}let n="min"===i?1/0:"max"===i?-1/0:0,o=0;for(let s=0;s<e.length;s++){const t=e[s][r];if(null==t||""===t)continue;const l=Number(t);isNaN(l)||(o++,"min"===i?l<n&&(n=l):"max"===i?l>n&&(n=l):"count"!==i&&(n+=l))}return 0===o?null:"avg"===i?n/o:"count"===i?o:n}function Qi(e,t,i,r,n){let o=0,s=0,l=1/0,a=-1/0,d=null,c=null;for(let u=0;u<e.length;u++){const i=e[u][t];if(null==i||""===i)continue;const r=Number(i);isNaN(r)||(0===s&&(d=r),c=r,o+=r,s++,r<l&&(l=r),r>a&&(a=r))}for(let u=0;u<i.length;u++){const e=i[u];if(e.field!==t||"function"==typeof e.aggFunc)continue;let h;h=0===s?null:"avg"===e.aggFunc?o/s:"count"===e.aggFunc?s:"min"===e.aggFunc?l:"max"===e.aggFunc?a:"first"===e.aggFunc?d:"last"===e.aggFunc?c:o,n[r[u]]=h}}function Ji(e,t,i,r){for(let n=0;n<t.length;n++){const o=t[n];let s=!1,l=0;for(let e=0;e<t.length;e++)t[e].field===o.field&&(e<n&&(s=!0),"function"!=typeof t[e].aggFunc&&l++);if(!s){l>1&&Qi(e,o.field,t,i,r);for(let s=n;s<t.length;s++){const n=t[s];n.field===o.field&&(l>1&&"function"!=typeof n.aggFunc||(r[i[s]]=Xi(e,n)))}}}}function er(e,t,i,r,n,o,s){const l=[];if(0===t.length){const t=tr(e,i,r,n),a=ir(t);return l.push({rowKey:s||"all",rowLabel:s||"All",depth:o,values:t,total:a,isGroup:!1,rowCount:e.length}),l}const a=t[0],d=t.slice(1),c=d.length>0,u=function(e,t){const i=/* @__PURE__ */new Map;for(const r of e){const e=String(r[t]??""),n=i.get(e);n?n.push(r):i.set(e,[r])}return i}(e,a);for(const[h,g]of u){const e=s?`${s}|${h}`:h,t=tr(g,i,r,n),a=ir(t);let u;c&&(u=er(g,d,i,r,n,o+1,e)),l.push({rowKey:e,rowLabel:h||"(blank)",depth:o,values:t,total:a,isGroup:c,children:u,rowCount:g.length})}return l}function tr(e,t,i,r){const n={};if(0===t.length)return Ji(e,r,Yi(["value"],r),n),n;const o=/* @__PURE__ */new Map;for(let s=0;s<e.length;s++){const i=e[s];let r=String(i[t[0]]??"");for(let e=1;e<t.length;e++)r+="|",r+=String(i[t[e]]??"");const n=o.get(r);n?n.push(i):o.set(r,[i])}for(const s of i){const e=Yi([s],r),t=o.get(s);if(t&&0!==t.length)Ji(t,r,e,n);else for(const i of e)n[i]=null}return n}function ir(e){let t=0;for(const i of Object.values(e))t+=i??0;return t}function rr(e){const t=[];function i(e){if(e.isGroup&&t.push(e.rowKey),e.children)for(const t of e.children)i(t)}for(const r of e)i(r);return t}function nr(e,t,i){const r="desc"===t.direction?-1:1;e.sort((e,n)=>"value"===t.by&&(t.valueField??i[0]?.field)?((e.total??0)-(n.total??0))*r:e.rowLabel.localeCompare(n.rowLabel)*r);for(const n of e)n.children?.length&&nr(n.children,t,i)}function or(e,t,i){if(0===t.length)return;const r=new Set(i.map(e=>e.field)),n=t.map(e=>"value"===e.by?e.valueField?t=>((e,t)=>{if(null!=e.values[t])return"number"==typeof e.values[t]?e.values[t]:0;if(r.has(t)){const i=`|${t}`;let r=0,n=!1;for(const t of Object.keys(e.values))t.endsWith(i)&&(r+="number"==typeof e.values[t]?e.values[t]:0,n=!0);if(n)return r}return e.total??0})(t,e.valueField):e=>e.total??0:null);e.sort((e,i)=>{for(let r=0;r<t.length;r++){const o=t[r],s="desc"===o.direction?-1:1;let l=0;if("value"===o.by){const t=n[r];l=(t(e)-t(i))*s}else l=e.rowLabel.localeCompare(i.rowLabel)*s;if(0!==l)return l}return 0});for(const o of e)o.children?.length&&or(o.children,t,i)}we("pinnedRows",e=>new Ui("boolean"==typeof e?{}:e??{}));var sr;function lr(){return"function"==typeof HTMLElement.prototype?.showPopover}function ar(e){return"inline"===e.effectiveConfig?.a11y?.dragAlternatives||(void 0===sr&&(sr=globalThis.matchMedia?.("(hover: none)")??null),sr?.matches??!1)}function dr(e,t){let i=null,r=!1,n=!1;const o=new AbortController;function s(){r&&i&&(r=!1,lr()&&i.hidePopover(),i.hidden=!0)}return document.addEventListener("pointerdown",e=>{r&&i&&!e.composedPath().includes(i)&&s()},{capture:!0,signal:o.signal}),document.addEventListener("keydown",e=>{"Escape"===e.key&&s()},{capture:!0,signal:o.signal}),{get element(){return i},open(l,a,d){if(n||0===d.length)return;i||(i=function(){const i=document.createElement("div");return i.id=e,i.className=t,i.setAttribute("popover","manual"),i.setAttribute("role","group"),i.hidden=!0,i.addEventListener("focusout",e=>{const t=e.relatedTarget;t instanceof Node&&!i.contains(t)&&s()},{signal:o.signal}),i}());const c=l.closest("tbw-grid, [data-tbw-grid]")??document.body;i.parentNode!==c&&c.appendChild(i),i.setAttribute("aria-label",a),i.replaceChildren();for(const e of d){const r=document.createElement("button");r.type="button",r.className=`${t}-item`,r.textContent=e.label,r.disabled=!0===e.disabled,r.addEventListener("click",()=>{s(),e.run()}),i.appendChild(r)}i.hidden=!1,!r&&lr()&&i.showPopover(),r=!0,function(e){if(!i)return;const t=e.getBoundingClientRect(),r=i.getBoundingClientRect(),n=Math.max(4,Math.min(t.left,window.innerWidth-r.width-4)),o=t.bottom+6,s=o+r.height<=window.innerHeight?o:Math.max(4,t.top-6-r.height);i.style.left=`${Math.round(n)}px`,i.style.top=`${Math.round(s)}px`}(l),i.querySelector("button:not([disabled])")?.focus()},close:s,dispose(){n=!0,s(),o.abort(),i?.remove(),i=null}}}var cr=null,ur=["sum","avg","count","min","max","first","last"];function hr(e,t,i,r,n=(e,t)=>t){const o=new AbortController,s={config:t,callbacks:r,signal:o.signal,t:n},l=document.createElement("div");return l.className="tbw-pivot-panel",l.appendChild(mr(n("pivot.options","Options"),()=>function(e,t){const{config:i,callbacks:r,signal:n,t:o}=t,s=document.createElement("div");return s.className="tbw-pivot-options",s.appendChild(yr(o("pivot.enable","Enable Pivot View"),e,e=>{r.onTogglePivot(e)},n)),s.appendChild(yr(o("pivot.showRowTotals","Show Row Totals"),i.showTotals??!0,e=>{r.onOptionChange("showTotals",e)},n)),s.appendChild(yr(o("pivot.showGrandTotal","Show Grand Total"),i.showGrandTotal??!0,e=>{r.onOptionChange("showGrandTotal",e)},n)),s}(i,s))),l.appendChild(mr(n("pivot.rowGroups","Row Groups"),()=>wr("rowGroups",s))),l.appendChild(mr(n("pivot.columnGroups","Column Groups"),()=>wr("columnGroups",s))),l.appendChild(mr(n("pivot.values","Values"),()=>function(e){const{config:t,callbacks:i,signal:r}=e,n=document.createElement("div");n.className="tbw-pivot-drop-zone tbw-pivot-values-zone",n.setAttribute("data-zone","values");const o=t.valueFields??[];if(0===o.length){const t=document.createElement("div");t.className="tbw-pivot-placeholder",t.textContent=e.t("pivot.dropNumericFields","Drag numeric fields here"),n.appendChild(t)}else for(const s of o)n.appendChild(vr(s,e));return n.addEventListener("dragover",e=>{e.preventDefault(),n.classList.add("drag-over")},{signal:r}),n.addEventListener("dragleave",()=>{n.classList.remove("drag-over")},{signal:r}),n.addEventListener("drop",e=>{e.preventDefault(),n.classList.remove("drag-over");const t=e.dataTransfer?.getData("text/plain");t&&i.onAddValueField(t,"sum")},{signal:r}),n}(s))),l.appendChild(mr(n("pivot.availableFields","Available Fields"),()=>function(e){const{config:t,callbacks:i,signal:r}=e,n=document.createElement("div");n.className="tbw-pivot-available-fields";const o=i.getAvailableFields(),s=/* @__PURE__ */new Set([...t.rowGroupFields??[],...t.columnGroupFields??[],...t.valueFields?.map(e=>e.field)??[]]),l=o.filter(e=>!s.has(e.field));if(0===l.length){const t=document.createElement("div");t.className="tbw-pivot-placeholder",t.textContent=e.t("pivot.allFieldsUsed","All fields are in use"),n.appendChild(t)}else{const t=document.createElement("div");if(t.className="tbw-pivot-fields-list",l.length>=6){const i=document.createElement("input");i.type="text",i.placeholder=e.t("pivot.filterFields","Filter fields…"),i.className="tbw-pivot-field-search",i.addEventListener("input",()=>{const e=i.value.toLowerCase();for(const i of t.querySelectorAll(".tbw-pivot-field-chip")){const t=i;t.style.display=t.textContent?.toLowerCase().includes(e)?"":"none"}},{signal:r}),n.appendChild(i)}for(const i of l){const n=document.createElement("div");n.className="tbw-pivot-field-chip available",n.textContent=i.header,n.draggable=!0,n.title=e.t("pivot.availableChipHint","Drag into a zone, or click to choose one"),pr(n,i.header,e.t),n.addEventListener("dragstart",e=>{e.dataTransfer?.setData("text/plain",i.field),n.classList.add(Ge.DRAGGING)},{signal:r}),n.addEventListener("dragend",()=>{n.classList.remove(Ge.DRAGGING)},{signal:r}),n.addEventListener("click",()=>gr(n,i.header,fr(i.field,e)),{signal:r}),t.appendChild(n)}n.appendChild(t)}return n}(s))),e.appendChild(l),()=>{o.abort(),cr?.dispose(),cr=null,l.remove()}}function gr(e,t,i){cr??=dr("tbw-pivot-chip-menu","tbw-pivot-chip-menu"),cr.open(e,t,i)}function pr(e,t,i){e.setAttribute("role","button"),e.tabIndex=-1,e.setAttribute("aria-label",`${t} — ${i("pivot.chipHint","drag, or activate for move options")}`)}function fr(e,t){const{callbacks:i,t:r}=t;return[{label:r("pivot.addToRowGroups","Add to Row Groups"),run:()=>i.onAddFieldToZone(e,"rowGroups")},{label:r("pivot.addToColumnGroups","Add to Column Groups"),run:()=>i.onAddFieldToZone(e,"columnGroups")},{label:r("pivot.addToValues","Add to Values"),run:()=>i.onAddValueField(e,"sum")}]}function mr(e,t){const i=document.createElement("div");i.className="tbw-pivot-section";const r=document.createElement("div");r.className="tbw-pivot-section-header",r.textContent=e;const n=document.createElement("div");return n.className="tbw-pivot-section-content",n.appendChild(t()),i.appendChild(r),i.appendChild(n),i}function wr(e,t){const{config:i,callbacks:r,signal:n}=t,o=document.createElement("div");o.className="tbw-pivot-drop-zone",o.setAttribute("data-zone",e);const s="rowGroups"===e?i.rowGroupFields??[]:i.columnGroupFields??[];if(0===s.length){const e=document.createElement("div");e.className="tbw-pivot-placeholder",e.textContent=t.t("pivot.dropFields","Drag fields here"),o.appendChild(e)}else for(const l of s)o.appendChild(br(l,e,t));return o.addEventListener("dragover",e=>{e.preventDefault(),o.classList.add("drag-over")},{signal:n}),o.addEventListener("dragleave",()=>{o.classList.remove("drag-over")},{signal:n}),o.addEventListener("drop",t=>{t.preventDefault(),o.classList.remove("drag-over");const i=t.dataTransfer?.getData("text/plain"),n=t.dataTransfer?.getData("source-zone");if(!i)return;const s=o.querySelectorAll(".tbw-pivot-field-chip");let l=s.length;for(let e=0;e<s.length;e++){const i=s[e].getBoundingClientRect();if(t.clientY<i.top+i.height/2){l=e;break}}!n||n===e||"rowGroups"!==n&&"columnGroups"!==n?n===e?r.onReorderFieldInZone(i,e,l):r.onAddFieldToZone(i,e):r.onMoveFieldBetweenZones(i,n,e)},{signal:n}),o}function br(e,t,i){const{callbacks:r,signal:n}=i,o=document.createElement("div");o.className="tbw-pivot-field-chip",o.draggable=!0;const s=r.getAvailableFields().find(t=>t.field===e)?.header??e,l=document.createElement("span");l.className="tbw-pivot-chip-label",l.textContent=s,pr(l,s,i.t);const a=document.createElement("button");return a.type="button",a.className="tbw-pivot-chip-remove",a.innerHTML="×",a.title=i.t("pivot.removeField","Remove field"),a.addEventListener("click",i=>{i.stopPropagation(),r.onRemoveFieldFromZone(e,t)},{signal:n}),o.appendChild(l),o.appendChild(a),o.addEventListener("dragstart",i=>{i.dataTransfer?.setData("text/plain",e),i.dataTransfer?.setData("source-zone",t),o.classList.add(Ge.DRAGGING)},{signal:n}),o.addEventListener("dragend",()=>{o.classList.remove(Ge.DRAGGING)},{signal:n}),o.addEventListener("click",()=>gr(o,s,function(e,t,i){const{config:r,callbacks:n,t:o}=i,s="rowGroups"===t?r.rowGroupFields??[]:r.columnGroupFields??[],l=s.indexOf(e),a="rowGroups"===t?"columnGroups":"rowGroups";return[{label:o("pivot.moveUp","Move up"),disabled:l<=0,run:()=>n.onReorderFieldInZone(e,t,l-1)},{label:o("pivot.moveDown","Move down"),disabled:l<0||l>=s.length-1,run:()=>n.onReorderFieldInZone(e,t,l+2)},{label:"columnGroups"===a?o("pivot.moveToColumnGroups","Move to Column Groups"):o("pivot.moveToRowGroups","Move to Row Groups"),run:()=>n.onMoveFieldBetweenZones(e,t,a)},{label:o("pivot.moveToValues","Move to Values"),run:()=>n.onAddValueField(e,"sum")},{label:o("pivot.removeField","Remove field"),run:()=>n.onRemoveFieldFromZone(e,t)}]}(e,t,i)),{signal:n}),o}function vr(e,t){const{callbacks:i,signal:r}=t,n=document.createElement("div");n.className="tbw-pivot-field-chip tbw-pivot-value-chip";const o=i.getAvailableFields().find(t=>t.field===e.field),s=document.createElement("div");s.className="tbw-pivot-value-label-wrapper";const l=document.createElement("span");l.className="tbw-pivot-chip-label",l.textContent=o?.header??e.field;const a="function"==typeof e.aggFunc,d=document.createElement("select");if(d.className="tbw-pivot-agg-select",d.title=t.t("pivot.aggFunction","Aggregation function"),a){const e=document.createElement("option");e.value="__custom__",e.textContent=t.t("pivot.customAgg","CUSTOM"),e.selected=!0,d.appendChild(e),d.disabled=!0}for(const u of ur){const t=document.createElement("option");t.value=u,t.textContent=u.toUpperCase(),a||(t.selected=u===e.aggFunc),d.appendChild(t)}d.addEventListener("change",()=>{i.onUpdateValueAggFunc(e.field,d.value)},{signal:r});const c=document.createElement("button");return c.type="button",c.className="tbw-pivot-chip-remove",c.innerHTML="×",c.title=t.t("pivot.removeValueField","Remove value field"),c.addEventListener("click",t=>{t.stopPropagation(),i.onRemoveValueField(e.field)},{signal:r}),s.appendChild(l),s.appendChild(d),n.appendChild(s),n.appendChild(c),n}function yr(e,t,i,r){const n=document.createElement("label");n.className="tbw-pivot-checkbox";const o=document.createElement("input");o.type="checkbox",o.checked=t,o.addEventListener("change",()=>i(o.checked),{signal:r});const s=document.createElement("span");return s.textContent=e,n.appendChild(o),n.appendChild(s),n}function Cr(e,t,i,r=(e,t)=>t){return t.className="data-grid-row pivot-grand-total-row",t.innerHTML="",i.forEach((i,n)=>{const o=document.createElement("div");if(o.className="cell",o.setAttribute("data-col",String(n)),0===n){const e=document.createElement("span");e.className="pivot-label",e.textContent=r("pivot.grandTotal","Grand Total"),o.appendChild(e)}else{const t=e[i.field];o.textContent=null!=t?i.format?i.format(t,e):String(t):""}t.appendChild(o)}),!0}var xr=class e extends Y{static manifest={modifiesRowStructure:!0,hookPriority:{onHeaderClick:-10,processRows:100},incompatibleWith:[{name:"groupingRows",reason:"PivotPlugin creates its own aggregated row and column structure. Row grouping cannot be applied on top of pivot-generated rows."},{name:"tree",reason:"PivotPlugin replaces the entire row and column structure with aggregated pivot data. Tree hierarchy cannot coexist with pivot aggregation."},{name:"serverSide",reason:"PivotPlugin requires the full dataset to compute aggregations. ServerSidePlugin lazy-loads rows in blocks, so pivot aggregation cannot be performed client-side."}],queries:[{type:"sort:get-sort-config",description:"Returns the current pivot sort configuration"}]};static dependencies=[{name:"multiSort",required:!1,reason:"Queries sort model for pivot column sorting"},{name:"shell",required:!1,severity:"warn",when:e=>!0===e.showToolPanel,reason:"PivotPlugin renders its tool panel in a shell host when showToolPanel is enabled"}];name="pivot";styles='@layer tbw-plugins{.pivot-group-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-pivot-group-bg,var(--tbw-color-row-alt));min-height:var(--tbw-row-height);border-bottom:var(--tbw-row-divider);font-weight:600;display:grid}@media (hover:hover){.pivot-group-row:hover{background:var(--tbw-pivot-group-hover,var(--tbw-color-row-hover))}}.pivot-leaf-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-pivot-leaf-bg,var(--tbw-color-bg));min-height:var(--tbw-row-height);border-bottom:var(--tbw-row-divider);display:grid}.pivot-grand-total-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-pivot-grand-total-bg,var(--tbw-color-header-bg));min-height:var(--tbw-row-height);border-top:2px solid var(--tbw-color-border-strong);font-weight:700;display:grid}.pivot-grand-total-row>.cell{padding:var(--tbw-cell-padding);border-right:1px solid var(--tbw-color-border-cell);align-items:center;min-width:0;display:flex;overflow:hidden}.pivot-grand-total-row>.cell:last-child{border-right:0}.pivot-grand-total-footer{z-index:var(--tbw-z-layer-pinned-rows,20);background:var(--tbw-pivot-grand-total-bg,var(--tbw-color-header-bg));min-width:-moz-fit-content;min-width:fit-content;position:sticky;bottom:0}.pivot-group-row>.cell,.pivot-leaf-row>.cell{padding:var(--tbw-cell-padding);border-right:1px solid var(--tbw-color-border-cell);align-items:center;min-width:0;display:flex;overflow:hidden}.pivot-group-row>.cell:last-child,.pivot-leaf-row>.cell:last-child{border-right:0}.pivot-toggle{width:var(--tbw-pivot-toggle-size,var(--tbw-toggle-size,1.25em));height:var(--tbw-pivot-toggle-size,var(--tbw-toggle-size,1.25em));margin-right:var(--tbw-spacing-sm,.375em);cursor:pointer;color:var(--tbw-pivot-toggle-color,var(--tbw-color-fg-muted));border-radius:var(--tbw-border-radius);transition:background var(--tbw-transition-duration,.12s) var(--tbw-transition-ease,ease), color var(--tbw-transition-duration,.12s) var(--tbw-transition-ease,ease);background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}.pivot-toggle:hover{background:var(--tbw-pivot-toggle-hover-bg,var(--tbw-color-row-hover));color:var(--tbw-pivot-toggle-hover-color,var(--tbw-color-fg))}.pivot-toggle{position:relative}.pivot-toggle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}@media (pointer:coarse){.pivot-toggle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}.pivot-toggle:focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}.pivot-label{font-weight:inherit}.pivot-count{color:var(--tbw-pivot-count-color,var(--tbw-color-fg-muted));font-size:.9em;font-weight:400}.pivot-total-row{border-top:2px solid var(--tbw-pivot-border,var(--tbw-color-border-strong));font-weight:700}[data-pivot-depth="1"]{--tbw-pivot-depth:1}[data-pivot-depth="2"]{--tbw-pivot-depth:2}[data-pivot-depth="3"]{--tbw-pivot-depth:3}[data-pivot-depth="4"]{--tbw-pivot-depth:4}.tbw-pivot-panel{gap:var(--tbw-panel-padding,var(--tbw-spacing-lg,.75rem));padding:var(--tbw-panel-padding,var(--tbw-spacing-lg,.75rem));height:100%;font-size:var(--tbw-font-size-sm,.8125rem);flex-direction:column;display:flex;overflow-y:auto}.tbw-pivot-section{border:1px solid var(--tbw-pivot-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius);background:var(--tbw-pivot-section-bg,var(--tbw-color-bg))}.tbw-pivot-section-header{padding:var(--tbw-button-padding,var(--tbw-spacing-md,.5rem) var(--tbw-spacing-lg,.75rem));background:var(--tbw-pivot-header-bg,var(--tbw-color-header-bg));border-bottom:1px solid var(--tbw-pivot-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius) var(--tbw-border-radius) 0 0;font-weight:600}.tbw-pivot-section-content{padding:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem))}.tbw-pivot-toggle-wrapper{align-items:center;display:flex}.tbw-pivot-toggle-label{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));cursor:pointer;display:flex}.tbw-pivot-toggle-label input{width:var(--tbw-icon-size,1rem);height:var(--tbw-icon-size,1rem);cursor:pointer}.tbw-pivot-drop-zone{min-height:60px;padding:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));border:2px dashed var(--tbw-pivot-drop-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius);background:var(--tbw-pivot-drop-bg,var(--tbw-color-row-alt));gap:var(--tbw-spacing-sm,.375rem);flex-wrap:wrap;align-content:flex-start;transition:all .15s;display:flex}.tbw-pivot-drop-zone.drag-over{border-color:var(--tbw-color-accent);background:var(--tbw-pivot-drop-active,var(--tbw-focus-background))}.tbw-pivot-placeholder{color:var(--tbw-color-fg-muted);padding:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));text-align:center;width:100%;font-style:italic}.tbw-pivot-field-chip{align-items:center;gap:var(--tbw-spacing-sm,.375rem);padding:var(--tbw-button-padding-sm,var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-md,.5rem));background:var(--tbw-pivot-chip-bg,var(--tbw-color-header-bg));border:1px solid var(--tbw-pivot-chip-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius);cursor:grab;font-size:var(--tbw-font-size-xs,.75rem);transition:all .15s;display:inline-flex}.tbw-pivot-field-chip:hover{background:var(--tbw-pivot-chip-hover,var(--tbw-color-row-hover));border-color:var(--tbw-color-accent)}.tbw-pivot-field-chip.available{background:var(--tbw-color-bg)}.tbw-pivot-field-chip.dragging{opacity:.5;cursor:grabbing}.tbw-pivot-chip-label{white-space:nowrap;text-overflow:ellipsis;max-width:120px;overflow:hidden}.tbw-pivot-chip-remove{width:var(--tbw-icon-size,1rem);height:var(--tbw-icon-size,1rem);color:var(--tbw-color-fg-muted);font-size:var(--tbw-font-size-sm,.875rem);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-weight:700;transition:all .15s;display:flex}.tbw-pivot-chip-remove:hover{background:var(--tbw-pivot-chip-remove-hover-bg,var(--tbw-color-accent));color:var(--tbw-pivot-chip-remove-hover-fg,var(--tbw-color-accent-fg))}.tbw-pivot-chip-menu{min-width:12rem;padding:var(--tbw-spacing-xs,.25rem);background:var(--tbw-color-panel-bg,light-dark(#fff,#1f1f1f));color:var(--tbw-color-fg,light-dark(#1a1a1a,#f0f0f0));border:1px solid var(--tbw-color-border,light-dark(#d0d0d0,#3a3a3a));border-radius:var(--tbw-border-radius,.25rem);box-shadow:var(--tbw-shadow-md,0 4px 12px #00000040);font:inherit;z-index:10001;flex-direction:column;margin:0;display:flex;position:fixed}.tbw-pivot-chip-menu[hidden]{display:none}.tbw-pivot-chip-menu-item{min-height:var(--tbw-touch-target-min,24px);padding:var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-sm,.5rem);text-align:start;border-radius:min(var(--tbw-border-radius,.25rem), 6px);color:inherit;font:inherit;cursor:pointer;background:0 0;border:none}.tbw-pivot-chip-menu-item:hover:not(:disabled){background:var(--tbw-color-row-hover,light-dark(#f0f0f0,#2a2a2a))}.tbw-pivot-chip-menu-item:disabled{opacity:.5;cursor:default}.tbw-pivot-value-chip{padding:var(--tbw-button-padding-sm,var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-md,.5rem))}.tbw-pivot-value-label-wrapper{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));flex:1;min-width:0;display:flex}.tbw-pivot-agg-select{padding:var(--tbw-spacing-xs,.125rem) var(--tbw-spacing-xs,.25rem);font-size:var(--tbw-font-size-xs,.6875rem);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);background:var(--tbw-color-bg);cursor:pointer}.tbw-pivot-available-fields{gap:var(--tbw-spacing-sm,.375rem);flex-direction:column;min-height:40px;display:flex}.tbw-pivot-field-search{border:1px solid var(--tbw-color-border,#d0d5dd);border-radius:var(--tbw-radius-sm,.25rem);width:100%;font-size:var(--tbw-font-size-sm,.875rem);background:var(--tbw-color-bg,#fff);color:var(--tbw-color-fg,#1a1a2e);outline:none;padding:.25rem .5rem}.tbw-pivot-field-search:focus{border-color:var(--tbw-color-primary,#3b82f6)}.tbw-pivot-fields-list{gap:var(--tbw-spacing-sm,.375rem);flex-wrap:wrap;display:flex}.tbw-pivot-options{gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));flex-direction:column;display:flex}.tbw-pivot-checkbox{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));cursor:pointer;display:flex}.tbw-pivot-checkbox input{width:var(--tbw-icon-size-sm,.875rem);height:var(--tbw-icon-size-sm,.875rem);cursor:pointer}.pivot-group-row.tbw-pivot-slide-in,.pivot-leaf-row.tbw-pivot-slide-in{animation:tbw-pivot-slide-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-pivot-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.pivot-group-row.tbw-pivot-fade-in,.pivot-leaf-row.tbw-pivot-fade-in{animation:tbw-pivot-fade-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-pivot-fade-in{0%{opacity:0}to{opacity:1}}}';static PANEL_ID="pivot";get defaultConfig(){return{active:!0,showTotals:!0,showGrandTotal:!0,showToolPanel:!0,animation:"slide"}}isActive=!1;hasInitialized=!1;pivotResult=null;fieldHeaderMap=/* @__PURE__ */new Map;expandedKeys=/* @__PURE__ */new Set;defaultExpanded=!0;userHasToggledExpand=!1;originalColumns=[];panelContainer=null;grandTotalFooter=null;previousVisibleKeys=/* @__PURE__ */new Set;keysToAnimate=/* @__PURE__ */new Set;valueFormatters=/* @__PURE__ */new Map;columnTotals={};activeSortField=null;activeSortDir=null;hasValidPivotConfig(){return(this.config.valueFields?.length??0)>0}get animationStyle(){return!!this.isAnimationEnabled&&(this.config.animation??"slide")}detach(){this.isActive=!1,this.hasInitialized=!1,this.pivotResult=null,this.fieldHeaderMap.clear(),this.originalColumns=[],this.panelContainer=null,this.cleanupGrandTotalFooter(),this.previousVisibleKeys.clear(),this.keysToAnimate.clear(),this.userHasToggledExpand=!1,this.valueFormatters.clear(),this.columnTotals={},this.activeSortField=null,this.activeSortDir=null,this.config.sortRows=void 0}getToolPanel(){if(!1!==(this.config?.showToolPanel??this.userConfig?.showToolPanel??!0))return{id:e.PANEL_ID,title:this.t("pivot.panelTitle","Pivot"),icon:"⊞",tooltip:"Configure pivot table",order:90,render:e=>this.renderPanel(e)}}processRows(e){if(!this.hasInitialized&&!1!==this.config.active&&this.hasValidPivotConfig()&&(this.hasInitialized=!0,this.isActive=!0),!this.isActive)return[...e];const t=function(e){const t=[];return e.rowGroupFields?.length||e.columnGroupFields?.length||t.push("At least one row or column group field is required"),e.valueFields?.length||t.push("At least one value field is required"),t}(this.config);if(t.length>0)return this.warn(`Config errors: ${t.join(", ")}`),[...e];this.buildFieldHeaderMap(),this.buildValueFormatters(),this.defaultExpanded=this.config.defaultExpanded??!0,this.pivotResult=Zi(e,this.config);const i=this.getMultiSortConfigs();if(i&&or(this.pivotResult.rows,i,this.config.valueFields??[]),0===this.expandedKeys.size&&!this.userHasToggledExpand){const e=rr(this.pivotResult.rows);this.expandedKeys=function(e,t){if(!0===e||void 0===e)return new Set(t);if(!1===e)/* @__PURE__ */return new Set;if("number"==typeof e){const i=t[e];return i?/* @__PURE__ */new Set([i]):/* @__PURE__ */new Set}return"string"==typeof e?/* @__PURE__ */new Set([e]):Array.isArray(e)?new Set(e):/* @__PURE__ */new Set}(this.defaultExpanded,e)}this.config.valueDisplayMode&&"raw"!==this.config.valueDisplayMode&&(this.columnTotals=function(e,t,i){const r={},n=t.flatMap(e=>Yi([e],i));return function e(t){for(const i of t)if(i.isGroup&&i.children?.length)i.children&&e(i.children);else for(const e of n)r[e]=(r[e]??0)+(i.values[e]??0)}(e),r}(this.pivotResult.rows,this.pivotResult.columnKeys,this.config.valueFields??[]));const r=this.config.indentWidth??20,n=!0===this.defaultExpanded||void 0===this.defaultExpanded,o=function(e,t,i=!0){const r=[];function n(e){r.push(e);const o=t?t.has(e.rowKey):i;if(e.children&&o)for(const t of e.children)n(t)}for(const o of e)n(o);return r}(this.pivotResult.rows,this.expandedKeys,n).map(e=>({__pivotRowKey:e.rowKey,__pivotLabel:e.rowLabel,__pivotDepth:e.depth,__pivotIsGroup:e.isGroup,__pivotHasChildren:Boolean(e.children?.length),__pivotExpanded:this.expandedKeys.has(e.rowKey),__pivotRowCount:e.rowCount??0,__pivotIndent:e.depth*r,__pivotTotal:e.total,...e.values}));this.keysToAnimate.clear();const s=/* @__PURE__ */new Set;for(const l of o){const e=l.__pivotRowKey;s.add(e),!this.previousVisibleKeys.has(e)&&l.__pivotDepth>0&&this.keysToAnimate.add(e)}return this.previousVisibleKeys=s,this.config.grandTotalInRowModel&&this.config.showGrandTotal&&this.pivotResult&&o.push({__pivotRowKey:"__grandTotal",__pivotLabel:"Grand Total",__pivotIsGrandTotal:!0,__pivotDepth:0,__pivotTotal:this.pivotResult.grandTotal,...this.pivotResult.totals}),o}processColumns(e){if(!this.isActive||!this.pivotResult)return[...e];const t=[],i=(this.config.rowGroupFields??[]).map(e=>this.fieldHeaderMap.get(e)??e).join(" / ");t.push({field:"__pivotLabel",header:i||"Group",width:200,sortable:!0});const r=this.config.valueFields??[];for(const n of this.pivotResult.columnKeys){const e=Yi([n],r);for(let i=0;i<r.length;i++){const o=r[i],s=e[i],l=o.header||this.fieldHeaderMap.get(o.field)||o.field,a="function"==typeof o.aggFunc?"custom":o.aggFunc,d=this.valueFormatters.get(i);t.push({field:s,header:`${n} - ${l} (${a})`,width:120,type:"number",sortable:!0,...d?{format:e=>null!=e?d(Number(e)):""}:{}})}}return this.config.showTotals&&t.push({field:"__pivotTotal",header:"Total",width:100,type:"number",sortable:!0}),t}renderRow(e,t,i){const r=e;return r.__pivotIsGrandTotal?Cr(r,t,this.gridColumns,this.translate):r.__pivotRowKey&&r.__pivotHasChildren?function(e,t,i){return t.className="data-grid-row pivot-group-row",t.setAttribute("data-pivot-depth",String(e.__pivotDepth??0)),t.setAttribute("data-pivot-key",String(e.__pivotRowKey??"")),t.setAttribute("role","row"),t.innerHTML="",i.columns.forEach((r,n)=>{const o=document.createElement("div");if(o.className="cell",o.setAttribute("data-col",String(n)),o.setAttribute("data-row",String(i.rowIndex)),o.setAttribute("role","gridcell"),0===n){const t=Number(e.__pivotIndent)||0;o.style.paddingLeft=`${t}px`;const r=String(e.__pivotRowKey),n=document.createElement("button");n.type="button",n.className="pivot-toggle",n.setAttribute("aria-label",e.__pivotExpanded?"Collapse group":"Expand group"),i.setIcon(n,e.__pivotExpanded?"collapse":"expand"),n.addEventListener("click",e=>{e.stopPropagation(),i.onToggle(r)}),o.appendChild(n);const s=document.createElement("span");s.className="pivot-label",s.textContent=String(e.__pivotLabel??""),o.appendChild(s);const l=document.createElement("span");l.className="pivot-count",l.textContent=` (${Number(e.__pivotRowCount)||0})`,o.appendChild(l)}else{const t=e[r.field];o.textContent=null!=t?r.format?r.format(t,e):String(t):""}t.appendChild(o)}),!0}(r,t,{columns:this.gridColumns,rowIndex:i,onToggle:e=>this.toggle(e),setIcon:(e,t)=>this.setIcon(e,t)}):void 0!==r.__pivotRowKey&&this.isActive?function(e,t,i,r){return t.className="data-grid-row pivot-leaf-row",t.setAttribute("data-pivot-depth",String(e.__pivotDepth??0)),t.setAttribute("data-pivot-key",String(e.__pivotRowKey??"")),t.innerHTML="",i.forEach((i,n)=>{const o=document.createElement("div");if(o.className="cell",o.setAttribute("data-col",String(n)),o.setAttribute("data-row",String(r)),o.setAttribute("role","gridcell"),0===n){const t=Number(e.__pivotIndent)||0;o.style.paddingLeft=`${t+20}px`;const i=document.createElement("span");i.className="pivot-label",i.textContent=String(e.__pivotLabel??""),o.appendChild(i)}else{const t=e[i.field];o.textContent=null!=t?i.format?i.format(t,e):String(t):""}t.appendChild(o)}),!0}(r,t,this.gridColumns,i):(this.cleanupPivotStyling(t),!1)}cleanupPivotStyling(e){(e.classList.contains("pivot-group-row")||e.classList.contains("pivot-leaf-row")||e.classList.contains("pivot-grand-total-row"))&&(e.classList.remove("pivot-group-row","pivot-leaf-row","pivot-grand-total-row"),e.classList.add("data-grid-row"),e.removeAttribute("data-pivot-depth"),e.innerHTML="")}onKeyDown(e){if(" "!==e.key)return;if(!this.isActive)return;const t=this.grid._focusRow,i=this.rows[t];return i?.__pivotIsGroup&&i.__pivotHasChildren?(e.preventDefault(),this.toggle(i.__pivotRowKey),this.requestRenderWithFocus(),!0):void 0}handleQuery(e){if("sort:get-sort-config"===e.type){const e=this.getMultiSortConfigs();return e||(this.config.sortRows??null)}}onHeaderClick(e){if(!this.isActive)return!1;const t=e.field;if(!this.isPivotField(t))return!1;if(this.isMultiSortActive())return!1;const i=this.mapFieldToSortConfig(t);if(!i)return!1;const r=this.activeSortDir;let n;n=this.activeSortField!==t?"asc":"asc"===r?"desc":null,this.activeSortField=n?t:null,this.activeSortDir=n,this.config.sortRows=n?{...i,direction:n}:void 0,this.emit("pivot-config-change",{property:"sortRows"}),this.refresh();const o=this.gridElement;if(o){const i=e.column.header??t;qe(o,n?$e(o,"sortApplied",i,"asc"===n?"ascending":"descending"):$e(o,"sortCleared"))}return!0}isPivotField(e){return"__pivotLabel"===e||"__pivotTotal"===e||e.includes("|")}isMultiSortActive(){const e=this.grid?.query?.("sort:get-model",null);return Array.isArray(e)&&e.length>0}getMultiSortConfigs(){const e=this.grid?.query?.("sort:get-model",null);if(!e||0===e.length)return null;const t=e[0];if(!Array.isArray(t)||0===t.length)return null;const i=[];for(const r of t){if(!this.isPivotField(r.field))continue;const e=this.mapFieldToSortConfig(r.field);e&&i.push({...e,direction:r.direction})}return i.length>0?i:null}mapFieldToSortConfig(e){return"__pivotLabel"===e?{by:"label"}:"__pivotTotal"===e?{by:"value"}:e.includes("|")?{by:"value",valueField:e}:null}afterRender(){this.isActive&&this.config.showGrandTotal&&this.pivotResult&&!this.config.grandTotalInRowModel?this.renderGrandTotalFooter():this.cleanupGrandTotalFooter(),this.isActive&&!this.isMultiSortActive()&&this.updateSortIndicators();const e=this.animationStyle;if(!1===e||0===this.keysToAnimate.size)return;const t=this.gridElement?.querySelector(".rows");if(!t)return;const i="fade"===e?"tbw-pivot-fade-in":"tbw-pivot-slide-in";for(const r of t.querySelectorAll(".pivot-group-row, .pivot-leaf-row")){const e=r.dataset.pivotKey;e&&this.keysToAnimate.has(e)&&(r.classList.add(i),r.addEventListener("animationend",()=>r.classList.remove(i),{once:!0}))}this.keysToAnimate.clear()}updateSortIndicators(){const e=this.gridElement;if(!e)return;const t=this.activeSortField,i=this.activeSortDir,r=t?null:this.config.sortRows,n=e.querySelectorAll(".header-row .cell[data-field]");for(const o of n){const e=o.getAttribute("data-field");if(!e||!this.isPivotField(e))continue;let n=null;t===e?n=i:r&&("label"===r.by&&"__pivotLabel"===e?n=r.direction??"asc":"value"!==r.by||"__pivotTotal"!==e||r.valueField?"value"===r.by&&r.valueField&&e===r.valueField&&(n=r.direction??"asc"):n=r.direction??"asc"),this.updateSortIndicator(o,n)}}renderGrandTotalFooter(){if(!this.pivotResult)return;const e=this.gridElement;if(!e)return;const t=e.querySelector(".tbw-scroll-area")??e.querySelector(".tbw-grid-content")??e.querySelector(".tbw-grid-root");if(!t)return;this.grandTotalFooter||(this.grandTotalFooter=document.createElement("div"),this.grandTotalFooter.className="pivot-grand-total-footer",t.appendChild(this.grandTotalFooter));Cr({__pivotRowKey:"__grandTotal",__pivotLabel:"Grand Total",__pivotIsGrandTotal:!0,__pivotTotal:this.pivotResult.grandTotal,...this.pivotResult.totals},this.grandTotalFooter,this.gridColumns,this.translate),this.grandTotalFooter.setAttribute("role","presentation")}cleanupGrandTotalFooter(){this.grandTotalFooter&&(this.grandTotalFooter.remove(),this.grandTotalFooter=null)}toggle(e){this.userHasToggledExpand=!0;const t=this.expandedKeys.has(e);t?this.expandedKeys.delete(e):this.expandedKeys.add(e),this.emitToggle(e,!t),this.requestRender()}expand(e){this.userHasToggledExpand=!0,this.expandedKeys.add(e),this.emitToggle(e,!0),this.requestRender()}collapse(e){this.userHasToggledExpand=!0,this.expandedKeys.delete(e),this.emitToggle(e,!1),this.requestRender()}expandAll(){this.userHasToggledExpand=!0,this.expandAllKeys(),this.requestRender()}collapseAll(){this.userHasToggledExpand=!0,this.expandedKeys.clear(),this.requestRender()}expandAllKeys(){if(!this.pivotResult)return;const e=rr(this.pivotResult.rows);for(const t of e)this.expandedKeys.add(t)}isExpanded(e){return this.expandedKeys.has(e)}getExpandedGroups(){return[...this.expandedKeys]}enablePivot(){0===this.originalColumns.length&&this.captureOriginalColumns(),this.isActive=!0,this.emit("pivot-state-change",{active:!0}),this.requestRender()}disablePivot(){this.isActive=!1,this.pivotResult=null,this.emit("pivot-state-change",{active:!1}),this.requestRender()}isPivotActive(){return this.isActive}getPivotResult(){return this.pivotResult}setRowGroupFields(e){this.config.rowGroupFields=e,this.emitConfigChange("rowGroupFields"),this.refresh()}setColumnGroupFields(e){this.config.columnGroupFields=e,this.emitConfigChange("columnGroupFields"),this.refresh()}setValueFields(e){this.config.valueFields=e,this.emitConfigChange("valueFields"),this.refresh()}refresh(){this.pivotResult=null,this.requestRender()}#rt(){return this.grid.getPluginByName("shell")}showPanel(){const t=this.#rt();t?.openToolPanel(),t?.expandedToolPanelSections.includes(e.PANEL_ID)||t?.toggleToolPanelSection(e.PANEL_ID)}hidePanel(){this.#rt()?.closeToolPanel()}togglePanel(){const t=this.#rt();t?.isToolPanelOpen||t?.openToolPanel(),t?.toggleToolPanelSection(e.PANEL_ID)}isPanelVisible(){const t=this.#rt();return!!t?.isToolPanelOpen&&t.expandedToolPanelSections.includes(e.PANEL_ID)}get gridColumns(){return this.grid.columns??[]}refreshIfActive(){this.isActive&&this.refresh(),this.refreshPanel()}buildFieldHeaderMap(){const e=this.getAvailableFields();this.fieldHeaderMap.clear();for(const t of e)this.fieldHeaderMap.set(t.field,t.header)}getAvailableFields(){return this.originalColumns.length>0?this.originalColumns:this.captureOriginalColumns()}captureOriginalColumns(){try{const e=this.grid.getAllColumns?.()??this.grid.columns??[];return this.originalColumns=e.filter(e=>!e.field.startsWith("__pivot")).map(e=>({field:e.field,header:e.header??e.field})),this.originalColumns}catch{return[]}}renderPanel(e){return this.panelContainer=e,0===this.originalColumns.length&&this.captureOriginalColumns(),hr(e,this.config,this.isActive,{onTogglePivot:e=>{e?this.enablePivot():this.disablePivot(),this.refreshPanel()},onAddFieldToZone:(e,t)=>{this.addFieldToZone(e,t),this.emitConfigChange("rowGroups"===t?"rowGroupFields":"columnGroupFields",e,t)},onRemoveFieldFromZone:(e,t)=>{this.removeFieldFromZone(e,t),this.emitConfigChange("rowGroups"===t?"rowGroupFields":"columnGroupFields",e,t)},onReorderFieldInZone:(e,t,i)=>{this.reorderFieldInZone(e,t,i),this.emitConfigChange("rowGroups"===t?"rowGroupFields":"columnGroupFields",e,t)},onMoveFieldBetweenZones:(e,t,i)=>{this.moveFieldBetweenZones(e,t,i),this.emitConfigChange("rowGroups"===i?"rowGroupFields":"columnGroupFields",e,i)},onAddValueField:(e,t)=>{this.addValueField(e,t),this.emitConfigChange("valueFields",e,"values")},onRemoveValueField:e=>{this.removeValueField(e),this.emitConfigChange("valueFields",e,"values")},onUpdateValueAggFunc:(e,t)=>{this.updateValueAggFunc(e,t),this.emitConfigChange("valueFields",e,"values")},onOptionChange:(e,t)=>{this.config[e]=t,this.emitConfigChange(e),this.isActive&&this.refresh()},getAvailableFields:()=>this.getAvailableFields()},this.translate)}refreshPanel(){this.panelContainer&&(this.panelContainer.innerHTML="",this.renderPanel(this.panelContainer))}addFieldToZone(e,t){if("rowGroups"===t){const t=this.config.rowGroupFields??[];t.includes(e)||(this.config.rowGroupFields=[...t,e])}else{const t=this.config.columnGroupFields??[];t.includes(e)||(this.config.columnGroupFields=[...t,e])}this.removeFromOtherZones(e,t),this.refreshIfActive()}removeFieldFromZone(e,t){"rowGroups"===t?this.config.rowGroupFields=(this.config.rowGroupFields??[]).filter(t=>t!==e):this.config.columnGroupFields=(this.config.columnGroupFields??[]).filter(t=>t!==e),this.refreshIfActive()}reorderFieldInZone(e,t,i){const r="rowGroups"===t?[...this.config.rowGroupFields??[]]:[...this.config.columnGroupFields??[]],n=r.indexOf(e);-1!==n&&n!==i&&(r.splice(n,1),r.splice(i>n?i-1:i,0,e),"rowGroups"===t?this.config.rowGroupFields=r:this.config.columnGroupFields=r,this.refreshIfActive())}moveFieldBetweenZones(e,t,i){"rowGroups"===t?this.config.rowGroupFields=(this.config.rowGroupFields??[]).filter(t=>t!==e):this.config.columnGroupFields=(this.config.columnGroupFields??[]).filter(t=>t!==e),"rowGroups"===i?this.config.rowGroupFields=[...this.config.rowGroupFields??[],e]:this.config.columnGroupFields=[...this.config.columnGroupFields??[],e],this.refreshIfActive()}removeFromOtherZones(e,t){"rowGroups"!==t&&(this.config.rowGroupFields=(this.config.rowGroupFields??[]).filter(t=>t!==e)),"columnGroups"!==t&&(this.config.columnGroupFields=(this.config.columnGroupFields??[]).filter(t=>t!==e)),"values"!==t&&(this.config.valueFields=(this.config.valueFields??[]).filter(t=>t.field!==e))}addValueField(e,t){const i=this.config.valueFields??[];i.some(t=>t.field===e)||(this.config.valueFields=[...i,{field:e,aggFunc:t}]),this.removeFromOtherZones(e,"values"),this.refreshIfActive()}removeValueField(e){this.config.valueFields=(this.config.valueFields??[]).filter(t=>t.field!==e),this.refreshIfActive()}updateValueAggFunc(e,t){const i=this.config.valueFields??[],r=i.findIndex(t=>t.field===e);r>=0&&(i[r]={...i[r],aggFunc:t},this.config.valueFields=[...i]),this.isActive&&this.refresh()}emitToggle(e,t){const i=this.rows.find(t=>t.__pivotRowKey===e);this.emit("pivot-toggle",{key:e,expanded:t,label:i?.__pivotLabel??e,depth:i?.__pivotDepth??0})}emitConfigChange(e,t,i){this.emit("pivot-config-change",{property:e,field:t,zone:i})}buildValueFormatters(){this.valueFormatters.clear();const e=this.config.valueFields??[];for(let t=0;t<e.length;t++){const i=e[t];if(i.format)this.valueFormatters.set(t,i.format);else if(this.originalColumns.find(e=>e.field===i.field)){const e=(this.grid.getAllColumns?.()??this.grid.columns??[]).find(e=>e.field===i.field);if(e?.format){const i=e.format;this.valueFormatters.set(t,e=>i(e,{}))}}}}};we("pivot",e=>new xr(e??void 0));var Rr="tbw-print-isolation-style";async function Sr(e,t={}){const{orientation:i="landscape"}=t,r=e.id;document.querySelectorAll(`#${CSS.escape(r)}`).length>1&&A("TBW093",`Multiple elements found with id="${r}". Print isolation may not work correctly. Ensure each grid has a unique ID.`,r,"print"),document.getElementById(Rr)?.remove();const n=function(e,t){const i=document.createElement("style");return i.id=Rr,i.textContent=`\n /* Print isolation: hide everything except the target grid */\n @media print {\n /* Hide all body children by default */\n body > *:not(#${e}) {\n display: none !important;\n }\n\n /* But show the grid and ensure it's not hidden by ancestor rules */\n #${e} {\n display: block !important;\n position: static !important;\n visibility: visible !important;\n opacity: 1 !important;\n overflow: visible !important;\n height: auto !important;\n width: 100% !important;\n max-height: none !important;\n margin: 0 !important;\n padding: 0 !important;\n transform: none !important;\n }\n\n /* If grid is nested, we need to show its ancestors too */\n #${e},\n #${e} * {\n visibility: visible !important;\n }\n\n /* Walk up the DOM and show all ancestors of the grid */\n body *:has(> #${e}),\n body *:has(#${e}) {\n display: block !important;\n visibility: visible !important;\n opacity: 1 !important;\n overflow: visible !important;\n height: auto !important;\n position: static !important;\n transform: none !important;\n background: transparent !important;\n border: none !important;\n padding: 0 !important;\n margin: 0 !important;\n }\n\n /* Hide siblings of ancestors (everything that's not in the path to the grid) */\n body *:has(#${e}) > *:not(:has(#${e})):not(#${e}) {\n display: none !important;\n }\n\n /* Page settings */\n @page {\n size: ${t};\n margin: 1cm;\n }\n\n /* Ensure proper print styling */\n body {\n margin: 0 !important;\n padding: 0 !important;\n background: white !important;\n color-scheme: light !important;\n }\n }\n\n /* Screen: also apply isolation for print preview */\n @media screen {\n /* When this stylesheet is active, we're about to print */\n /* No screen-specific rules needed - isolation only applies to print */\n }\n `,i}(r,i);return document.head.appendChild(n),new Promise(e=>{const t=()=>{window.removeEventListener("afterprint",t),document.getElementById(Rr)?.remove(),e()};window.addEventListener("afterprint",t),window.print(),setTimeout(()=>{window.removeEventListener("afterprint",t),document.getElementById(Rr)?.remove(),e()},5e3)})}var Er={button:!1,orientation:"landscape",warnThreshold:500,maxRows:0,includeTitle:!0,includeTimestamp:!0,title:"",isolate:!1},Ar=class extends Y{name="print";version="1.0.0";styles=".tbw-print-header,.tbw-print-footer{display:none}@media print{tbw-grid{color-scheme:light only;-webkit-print-color-adjust:exact;-moz-print-color-adjust:exact;print-color-adjust:exact;border:none!important;border-radius:0!important;height:auto!important;overflow:visible!important}tbw-grid .tbw-grid-content,tbw-grid .tbw-scroll-area,tbw-grid .rows-body{height:auto!important;max-height:none!important;overflow:visible!important}tbw-grid .rows-container,tbw-grid .rows-viewport,tbw-grid .rows{height:auto!important;max-height:none!important;overflow:visible!important;transform:none!important}tbw-grid .rows-viewport .rows{position:static!important}tbw-grid .resize-handle,tbw-grid [part=sort-indicator],tbw-grid .tbw-filter-btn,tbw-grid .tool-panel,tbw-grid .tool-panel-content,tbw-grid .tbw-shell-header,tbw-grid .shell-toolbar,tbw-grid .tool-panel-toggle,tbw-grid [data-print-hide],tbw-grid .expander-cell,tbw-grid .tree-toggle,tbw-grid .context-menu,tbw-grid .faux-vscroll{display:none!important}tbw-grid .tbw-print-header{padding:var(--tbw-spacing-md,.5em) 0;margin-bottom:var(--tbw-spacing-md,.5em);border-bottom:2px solid var(--tbw-print-border,var(--tbw-color-border-strong));justify-content:space-between;align-items:baseline;font-family:inherit;display:flex}.tbw-print-header-title{font-size:1.25em;font-weight:700}.tbw-print-header-timestamp{font-size:var(--tbw-font-size-sm,.875em);color:var(--tbw-print-muted,var(--tbw-color-fg-muted))}tbw-grid .tbw-print-footer{margin-top:var(--tbw-spacing-md,.5em);padding-top:var(--tbw-spacing-md,.5em);border-top:1px solid var(--tbw-print-border,var(--tbw-color-border));font-size:var(--tbw-font-size-xs,.75em);color:var(--tbw-print-muted,var(--tbw-color-fg-muted));text-align:end;display:block}tbw-grid .data-grid-row{break-inside:avoid;page-break-inside:avoid}tbw-grid .cell{border:1px solid var(--tbw-print-cell-border,var(--tbw-color-border))!important}tbw-grid .header-row,tbw-grid .data-grid-row{padding-inline-end:1px}tbw-grid .data-grid-row:hover,tbw-grid .cell:hover{background:inherit!important}@page{margin:1cm}}";#nt=!1;#ot=null;#st=null;#lt=null;#at=null;#dt=null;#ct=null;get#x(){return this.grid}isPrinting(){return this.#nt}async print(e){if(this.#nt)return void this.warn("TBW090","Print already in progress");const t=this.gridElement;if(!t)return void this.warn("TBW091","Grid not available");const i={...Er,...this.config,...e},r=this.rows.length;let n=r,o=!1;if(i.warnThreshold>0&&r>i.warnThreshold){const e=i.maxRows>0?`\n\nNote: Output will be limited to ${i.maxRows.toLocaleString()} rows.`:"";if(!confirm(`This grid has ${r.toLocaleString()} rows. Printing large datasets may cause performance issues or browser slowdowns.${e}\n\nClick OK to continue, or Cancel to abort.`))return}i.maxRows>0&&r>i.maxRows&&(n=i.maxRows,o=!0),this.#nt=!0;const s=performance.now();this.emit("print-start",{rowCount:n,limitApplied:o,originalRowCount:r});try{const e=this.#x;this.#st={bypassThreshold:e._virtualization?.bypassThreshold??24},this.#ut(),o&&(this.#lt=this.sourceRows,this.grid.rows=this.sourceRows.slice(0,n),await new Promise(e=>setTimeout(e,50))),(i.includeTitle||i.includeTimestamp)&&this.#ht(i),await this.#gt(),await new Promise(e=>requestAnimationFrame(e)),await new Promise(e=>requestAnimationFrame(e)),t.classList.add(`print-${i.orientation}`),await new Promise(e=>requestAnimationFrame(e)),await new Promise(e=>requestAnimationFrame(e)),i.isolate?await this.#pt(i):await this.#ft(),this.emit("print-complete",{success:!0,rowCount:n,duration:Math.round(performance.now()-s)})}catch(l){k("TBW092",`Print failed: ${l}`,this.gridElement?.id,this.name),this.emit("print-complete",{success:!1,rowCount:0,duration:Math.round(performance.now()-s)})}finally{this.#mt(),this.#nt=!1}}#ht(e){const t=this.gridElement;if(t){if(this.#at=document.createElement("div"),this.#at.className="tbw-print-header",e.includeTitle){const t=e.title||this.grid.effectiveConfig?.shell?.header?.title||"Grid Data",i=document.createElement("div");i.className="tbw-print-header-title",i.textContent=t,this.#at.appendChild(i)}if(e.includeTimestamp){const e=document.createElement("div");e.className="tbw-print-header-timestamp",e.textContent=`Printed: ${/* @__PURE__ */(new Date).toLocaleString()}`,this.#at.appendChild(e)}t.insertBefore(this.#at,t.firstChild),this.#dt=document.createElement("div"),this.#dt.className="tbw-print-footer",this.#dt.textContent=`Page generated from ${window.location.hostname}`,t.appendChild(this.#dt)}}async#gt(){const e=this.#x;if(!e._virtualization)return;const t=this.rows.length;e._virtualization.bypassThreshold=t+100,e.refreshVirtualWindow(!0),await new Promise(e=>setTimeout(e,100))}async#ft(){return new Promise(e=>{const t=()=>{window.removeEventListener("afterprint",t),e()};window.addEventListener("afterprint",t),window.print(),setTimeout(()=>{"undefined"!=typeof window&&window.removeEventListener("afterprint",t),e()},1e3)})}async#pt(e){const t=this.gridElement;t&&await Sr(t,{orientation:e.orientation})}#ut(){const e=this.columns;if(e){this.#ot=/* @__PURE__ */new Map;for(const t of e)t.field&&(!0===t.printHidden||!0===t.utility&&!1!==t.printHidden)&&(this.#ot.set(t.field,!t.hidden),this.grid.setColumnVisible(t.field,!1))}}#wt(){if(this.#ot){for(const[e,t]of this.#ot)this.grid.setColumnVisible(e,t);this.#ot=null}}#mt(){const e=this.gridElement;if(!e)return;this.#wt(),e.classList.remove("print-portrait","print-landscape"),null!==this.#ct&&(e.style.transform="",e.style.transformOrigin="",e.style.width="",this.#ct=null),this.#at&&(this.#at.remove(),this.#at=null),this.#dt&&(this.#dt.remove(),this.#dt=null);const t=this.#x;this.#st&&t._virtualization&&(t._virtualization.bypassThreshold=this.#st.bypassThreshold,t.refreshVirtualWindow(!0),this.#st=null),null!==this.#lt&&(this.grid.rows=this.#lt,this.#lt=null)}afterRender(){this.config?.button&&!this.#bt&&(this.#vt(),this.#bt=!0)}#bt=!1;#vt(){this.#x.registerToolbarContent?.({id:"print-button",order:900,render:e=>{const t=document.createElement("button");t.className="tbw-toolbar-btn tbw-print-btn",t.title=this.t("print.buttonTitle","Print grid"),t.type="button",this.setIcon(t,"print"),t.addEventListener("click",()=>{this.print()},{signal:this.disconnectSignal}),e.appendChild(t)}})}};function _r(e){if(!0===e.lockPosition)return!1;if(!0===e.utility)return!1;const t=e.meta??{};return!0!==t.lockPosition&&!0!==t.suppressMovable}function kr(e,t,i){if(t===i)return e;if(t<0||t>=e.length)return e;if(i<0||i>e.length)return e;const r=[...e],[n]=r.splice(t,1);return r.splice(i,0,n),r}we("print",e=>!0===e?new Ar:new Ar(e??void 0));var Tr="canMoveColumn",Mr="getContextMenuItems",Ir=class extends Y{name="reorderColumns";aliases=["reorder"];styles='@layer tbw-plugins{.header-row>.cell[draggable=true]{cursor:grab;position:relative}.header-row>.cell.dragging{opacity:.5;cursor:grabbing}.header-row>.cell.drop-before:before{content:"";background:var(--tbw-reorder-indicator,var(--tbw-color-accent));z-index:1;width:2px;position:absolute;top:0;bottom:0;left:0}.header-row>.cell.drop-after:after{content:"";background:var(--tbw-reorder-indicator,var(--tbw-color-accent));z-index:1;width:2px;position:absolute;top:0;bottom:0;right:0}.cell.flip-animating{transition:transform var(--tbw-animation-duration,.2s) ease-out;will-change:transform;z-index:1}@keyframes reorder-fade-in{0%{opacity:0}to{opacity:1}}.cell.fade-animating{animation:reorder-fade-in var(--tbw-animation-duration,.2s) ease-out backwards}.header-row>.cell>.tbw-col-move-btn,.header-group-row>.cell>.tbw-col-move-btn{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px);background:var(--tbw-color-header-bg);color:var(--tbw-color-header-fg,inherit);font:inherit;border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius,.25rem);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--tbw-transition-duration,.12s) var(--tbw-transition-ease,ease);flex-shrink:0;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}:is(.header-row>.cell>.tbw-col-move-btn,.header-group-row>.cell>.tbw-col-move-btn):hover{border-color:var(--tbw-color-accent)}.header-row>.cell:hover>.tbw-col-move-btn,.header-row>.cell:focus-within>.tbw-col-move-btn,.header-row>.cell.cell-focus>.tbw-col-move-btn,.header-group-row>.cell:hover>.tbw-col-move-btn,.header-group-row>.cell:focus-within>.tbw-col-move-btn{opacity:1;pointer-events:auto}@media (hover:none){.header-row>.cell>.tbw-col-move-btn,.header-group-row>.cell>.tbw-col-move-btn{opacity:1;pointer-events:auto}}.tbw-col-move-menu{background:var(--tbw-color-panel-bg,light-dark(#fff,#1e1e1e));min-width:10rem;color:var(--tbw-color-panel-fg,light-dark(#1a1a1a,#eaeaea));border:1px solid var(--tbw-color-border,light-dark(#d0d0d0,#3a3a3a));border-radius:var(--tbw-border-radius,.25rem);box-shadow:var(--tbw-shadow-panel,0 4px 12px light-dark(#0003,#00000080));z-index:10001;flex-direction:column;margin:0;padding:4px;display:flex;position:fixed}.tbw-col-move-menu[hidden]{display:none}.tbw-col-move-menu-item{min-height:var(--tbw-touch-target-min,24px);text-align:start;color:inherit;font:inherit;border-radius:min(var(--tbw-border-radius,.25rem), 6px);cursor:pointer;background:0 0;border:0;padding:4px 8px}.tbw-col-move-menu-item:hover:not(:disabled){background:var(--tbw-color-row-hover,light-dark(#00000010,#ffffff14))}.tbw-col-move-menu-item:disabled{opacity:.5;cursor:default}}';static manifest={queries:[{type:Tr,description:"Authoritative check for whether a column may be reordered (honors lockPosition)."},{type:Mr,description:"Contributes the click-only column move actions (WCAG 2.2 SC 2.5.7) to the header context menu."}]};handleQuery(e){if(e.type===Tr){const t=e.context;return t?_r(t):void 0}if(e.type===Mr){const t=e.context;if(!t?.isHeader)return;return this.#yt(t.field)?.map((e,t)=>({id:`reorder-${t}`,label:e.label,disabled:e.disabled,action:e.run,order:50+t}))}}get defaultConfig(){return{animation:"flip"}}get animationType(){return!!this.isAnimationEnabled&&(void 0!==this.config.animation?this.config.animation:"flip")}get animationDuration(){return void 0!==this.config.animationDuration?this.config.animationDuration:super.animationDuration}isDragging=!1;draggedField=null;draggedIndex=null;dropIndex=null;draggedGroupFields=[];originalColumnOrder=null;moveMenu=null;get#x(){return this.grid}canMoveColumnWithPlugins(e){return!(!e||!_r(e))&&!this.grid.query(Tr,e).includes(!1)}#Ct(e,t,i){this.#xt(e,`Move column ${String(i?.header??t)}`,e=>this.#Rt(e,t))}#xt(e,t,i){const r=e.querySelector(":scope > .tbw-col-move-btn");if(!ar(this.grid))return void r?.remove();if(r)return;const n=document.createElement("button");n.type="button",n.className="tbw-col-move-btn",n.tabIndex=-1,n.draggable=!1,n.textContent="↔",n.setAttribute("aria-label",t),n.addEventListener("pointerdown",e=>e.stopPropagation()),n.addEventListener("click",e=>{e.stopPropagation(),e.preventDefault(),i(n)}),e.appendChild(n)}#yt(e){const t=this.columns.find(t=>t.field===e);if(!this.canMoveColumnWithPlugins(t))return null;const i=this.getColumnOrder(),r=i.indexOf(e);if(-1===r)return null;const n=i.findIndex(e=>this.#St(e));let o=-1;for(let s=i.length-1;s>=0;s--)if(this.#St(i[s])){o=s;break}return[{label:"Move left",disabled:!this.#Et(i,r,-1),run:()=>this.moveColumn(e,r-1)},{label:"Move right",disabled:!this.#Et(i,r,1),run:()=>this.moveColumn(e,r+1)},{label:"Move to start",disabled:-1===n||n===r,run:()=>this.moveColumn(e,n)},{label:"Move to end",disabled:-1===o||o===r,run:()=>this.moveColumn(e,o)}]}#Rt(e,t){const i=this.#yt(t);if(!i)return;const r=this.columns.find(e=>e.field===t);this.moveMenu??=dr("tbw-col-move-menu","tbw-col-move-menu"),this.moveMenu.open(e,`Move column ${String(r?.header??t)}`,i)}#At(e){const t=this.visibleColumns,i=[];return e.querySelectorAll(".header-group-row > .cell[data-group]").forEach(e=>{const t=e.getAttribute("data-group");if(!t)return;const r=this.getGroupFragmentFields(e,t);r.length>0&&i.push({id:t,fields:r})}),i.sort((e,i)=>t.findIndex(t=>t.field===e.fields[0])-t.findIndex(e=>e.field===i.fields[0]))}#_t(e,t){if(!t.every(e=>this.#St(e)))return null;const i=this.#At(e),r=i.findIndex(e=>e.fields[0]===t[0]);if(-1===r)return null;const n=e=>!!e&&e.fields.every(e=>this.#St(e)),o=(e,t)=>e<=t&&i.slice(e,t+1).every(n),s=(e,i)=>()=>this.executeGroupBlockMove(t,e.fields,i);return[{label:"Move left",disabled:!n(i[r-1]),run:s(i[r-1]??{fields:t},!0)},{label:"Move right",disabled:!n(i[r+1]),run:s(i[r+1]??{fields:t},!1)},{label:"Move to start",disabled:0===r||!o(0,r-1),run:s(i[0],!0)},{label:"Move to end",disabled:r===i.length-1||!o(r+1,i.length-1),run:s(i[i.length-1],!1)}]}#kt(e,t,i){const r=this.gridElement;if(!r)return;const n=this.#_t(r,i);n&&(this.moveMenu??=dr("tbw-col-move-menu","tbw-col-move-menu"),this.moveMenu.open(e,`Move group ${this.#Tt(t)}`,n))}#Tt(e){return e.textContent?.replace("↔","").trim()||(e.getAttribute("data-group")??"")}#St(e){return this.canMoveColumnWithPlugins(this.columns.find(t=>t.field===e))}#Et(e,t,i){const r=t+i;return!(r<0||r>=e.length)&&this.#St(e[r])}clearDragClasses(){this.gridElement?.querySelectorAll(".header-row > .cell, .header-group-row > .cell").forEach(e=>{e.classList.remove(Ge.DRAGGING,"drop-target","drop-before","drop-after")})}attach(e){super.attach(e),this.gridElement.addEventListener("column-reorder-request",e=>{const t=e.detail;t?.field&&"number"==typeof t.toIndex&&this.moveColumn(t.field,t.toIndex)},{signal:this.disconnectSignal})}detach(){this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.draggedGroupFields=[],this.moveMenu?.dispose(),this.moveMenu=null}afterRender(){const e=this.gridElement;e&&(this.originalColumnOrder||(this.originalColumnOrder=this.columns.map(e=>e.field)),e.querySelectorAll(".header-row > .cell").forEach(e=>{const t=e,i=t.getAttribute("data-field");if(!i)return;const r=this.columns.find(e=>e.field===i);if(!this.canMoveColumnWithPlugins(r))return t.draggable=!1,void t.querySelector(":scope > .tbw-col-move-btn")?.remove();t.draggable=!0,this.#Ct(t,i,r),t.getAttribute("data-dragstart-bound")||(t.setAttribute("data-dragstart-bound","true"),t.addEventListener("contextmenu",e=>{this.grid.getPluginByName("contextMenu")||(e.preventDefault(),this.#Rt(t,i))}),t.addEventListener("dragstart",e=>{const r=this.getColumnOrder().indexOf(i);this.isDragging=!0,this.draggedField=i,this.draggedIndex=r,this.draggedGroupFields=[],e.dataTransfer&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",i)),t.classList.add(Ge.DRAGGING)}),t.addEventListener("dragend",()=>{this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.draggedGroupFields=[],this.clearDragClasses()}),t.addEventListener("dragover",e=>{if(e.preventDefault(),!this.isDragging)return;if(this.draggedField===i&&0===this.draggedGroupFields.length)return;if(this.draggedGroupFields.includes(i))return;const r=t.getBoundingClientRect(),n=r.left+r.width/2,o=this.getColumnOrder().indexOf(i);if(this.dropIndex=e.clientX<n?o:o+1,this.clearDragClasses(),this.draggedGroupFields.length>0)for(const t of this.draggedGroupFields)this.gridElement?.querySelector(`.header-row > .cell[data-field="${t}"]`)?.classList.add(Ge.DRAGGING);else this.draggedField&&this.gridElement?.querySelector(`.header-row > .cell[data-field="${this.draggedField}"]`)?.classList.add(Ge.DRAGGING);t.classList.add("drop-target"),t.classList.toggle("drop-before",e.clientX<n),t.classList.toggle("drop-after",e.clientX>=n)}),t.addEventListener("dragleave",()=>{t.classList.remove("drop-target","drop-before","drop-after")}),t.addEventListener("drop",e=>{if(e.preventDefault(),!this.isDragging)return;if(this.draggedGroupFields.length>0){if(this.draggedGroupFields.includes(i))return;const r=t.getBoundingClientRect(),n=e.clientX<r.left+r.width/2;return void this.executeGroupBlockMove(this.draggedGroupFields,[i],n)}const r=this.draggedField,n=this.draggedIndex,o=this.dropIndex;if(!this.isDragging||null===r||null===n||null===o)return;const s=o>n?o-1:o,l=kr(this.getColumnOrder(),n,s),a={field:r,fromIndex:n,toIndex:s,columnOrder:l};this.emitCancelable("column-move",a)||this.updateColumnOrder(l)}))}),queueMicrotask(()=>this.setupGroupHeaderDrag(e)))}setupGroupHeaderDrag(e){e.querySelectorAll(".header-group-row > .cell[data-group]").forEach(t=>{const i=t,r=i.getAttribute("data-group");if(!r||r.startsWith("__implicit__"))return;const n=this.getGroupFragmentFields(i,r);0!==n.length&&n.every(e=>{const t=this.columns.find(t=>t.field===e);return this.canMoveColumnWithPlugins(t)})&&(i.draggable=!0,i.style.cursor="grab",this.#xt(i,`Move group ${this.#Tt(i)}`,e=>this.#kt(e,i,n)),i.getAttribute("data-group-drag-bound")||(i.setAttribute("data-group-drag-bound","true"),i.addEventListener("contextmenu",e=>{e.preventDefault(),e.stopPropagation(),this.#kt(i,i,n)}),i.addEventListener("dragstart",t=>{this.isDragging=!0,this.draggedField=null,this.draggedIndex=null,this.draggedGroupFields=[...n],t.dataTransfer&&(t.dataTransfer.effectAllowed="move",t.dataTransfer.setData("text/plain",`group:${r}`)),i.classList.add(Ge.DRAGGING);for(const i of n)e.querySelector(`.header-row > .cell[data-field="${i}"]`)?.classList.add(Ge.DRAGGING)}),i.addEventListener("dragend",()=>{this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.draggedGroupFields=[],this.clearDragClasses()}),i.addEventListener("dragover",e=>{if(e.preventDefault(),!this.isDragging)return;if(this.draggedGroupFields.length>0&&this.draggedGroupFields.length===n.length&&this.draggedGroupFields.every(e=>n.includes(e)))return;const t=i.getBoundingClientRect(),r=t.left+t.width/2,o=e.clientX<r;this.clearDragClasses(),i.classList.add("drop-target"),i.classList.toggle("drop-before",o),i.classList.toggle("drop-after",!o)}),i.addEventListener("dragleave",()=>{i.classList.remove("drop-target","drop-before","drop-after")}),i.addEventListener("drop",e=>{if(e.preventDefault(),!this.isDragging)return;const t=i.getBoundingClientRect(),r=e.clientX<t.left+t.width/2;if(this.draggedGroupFields.length>0){if(this.draggedGroupFields.length===n.length&&this.draggedGroupFields.every(e=>n.includes(e)))return;this.executeGroupBlockMove(this.draggedGroupFields,n,r)}else if(this.draggedField){const e=this.getColumnOrder(),t=r?n[0]:n[n.length-1],i=e.indexOf(this.draggedField),o=r?e.indexOf(t):e.indexOf(t)+1;if(-1===i||-1===o)return;const s=o>i?o-1:o,l=kr(e,i,s);this.emitCancelable("column-move",{field:this.draggedField,fromIndex:i,toIndex:s,columnOrder:l})||this.updateColumnOrder(l)}})))})}getGroupFragmentFields(e,t){const i=e.style.gridColumn,r=/(\d+)\s*\/\s*span\s+(\d+)/.exec(i);if(!r)return[];const n=parseInt(r[1],10),o=parseInt(r[2],10),s=this.visibleColumns,l=[];for(let a=n-1;a<n-1+o&&a<s.length;a++){const e=s[a];e&&l.push(e.field)}return l}executeGroupBlockMove(e,t,i){const r=this.getColumnOrder(),n=r.filter(t=>!e.includes(t)),o=i?t[0]:t[t.length-1],s=n.indexOf(o);if(-1===s)return;const l=i?s:s+1,a=r.filter(t=>e.includes(t));n.splice(l,0,...a),this.emitCancelable("column-move",{field:e[0],fromIndex:r.indexOf(e[0]),toIndex:l,columnOrder:n})||this.updateColumnOrder(n)}onKeyDown(e){if(!e.altKey||"ArrowLeft"!==e.key&&"ArrowRight"!==e.key)return;const t=this.#x,i=t._focusCol,r=t._visibleColumns;if(i<0||i>=r.length)return;const n=r[i];if(!this.canMoveColumnWithPlugins(n))return;const o=this.getColumnOrder(),s=o.indexOf(n.field);if(-1===s)return;const l="ArrowLeft"===e.key?s-1:s+1;if(l<0||l>=o.length)return;const a=r.find(e=>e.field===o[l]);return this.canMoveColumnWithPlugins(a)?(this.moveColumn(n.field,l),t._focusCol=l,at(this.#x),e.preventDefault(),e.stopPropagation(),!0):void 0}getColumnOrder(){return this.grid.getColumnOrder()}moveColumn(e,t){const i=this.getColumnOrder(),r=i.indexOf(e);if(-1===r)return;const n=kr(i,r,t);this.emitCancelable("column-move",{field:e,fromIndex:r,toIndex:t,columnOrder:n})||this.updateColumnOrder(n)}setColumnOrder(e){this.updateColumnOrder(e)}resetColumnOrder(){const e=this.originalColumnOrder??this.columns.map(e=>e.field);this.updateColumnOrder(e)}captureHeaderPositions(){const e=/* @__PURE__ */new Map;return this.gridElement?.querySelectorAll(".header-row > .cell[data-field]").forEach(t=>{const i=t.getAttribute("data-field");i&&e.set(i,t.getBoundingClientRect().left)}),e}animateFLIP(e){const t=this.gridElement;if(!t||0===e.size)return;const i=/* @__PURE__ */new Map;if(t.querySelectorAll(".header-row > .cell[data-field]").forEach(t=>{const r=t.getAttribute("data-field");if(!r)return;const n=e.get(r);if(void 0===n)return;const o=n-t.getBoundingClientRect().left;Math.abs(o)>1&&i.set(r,o)}),0===i.size)return;const r=[];if(t.querySelectorAll(".cell[data-field]").forEach(e=>{const t=i.get(e.getAttribute("data-field")??"");if(void 0!==t){const i=e;i.style.transform=`translateX(${t}px)`,r.push(i)}}),0===r.length)return;t.offsetHeight;const n=this.animationDuration;requestAnimationFrame(()=>{r.forEach(e=>{e.classList.add("flip-animating"),e.style.transform=""}),setTimeout(()=>{r.forEach(e=>{e.style.transform="",e.classList.remove("flip-animating")})},n+50)})}animateFade(e){const t=this.gridElement;if(!t)return void e();const i=this.captureHeaderPositions();e();const r=/* @__PURE__ */new Set;if(t.querySelectorAll(".header-row > .cell[data-field]").forEach(e=>{const t=e.getAttribute("data-field");if(!t)return;const n=i.get(t);if(void 0===n)return;const o=e.getBoundingClientRect().left;Math.abs(n-o)>1&&r.add(t)}),0===r.size)return;const n=[];if(t.querySelectorAll(".cell[data-field]").forEach(e=>{const t=e.getAttribute("data-field");if(t&&r.has(t)){const t=e;t.classList.add("fade-animating"),n.push(t)}}),0===n.length)return;const o=this.animationDuration;setTimeout(()=>{n.forEach(e=>e.classList.remove("fade-animating"))},o+50)}updateColumnOrder(e){const t=this.animationType;if("flip"===t&&this.gridElement){const t=this.captureHeaderPositions();this.grid.setColumnOrder(e),"function"==typeof this.grid.forceLayout?this.grid.forceLayout().then(()=>{this.animateFLIP(t)}):requestAnimationFrame(()=>{this.animateFLIP(t)})}else"fade"===t?this.animateFade(()=>this.grid.setColumnOrder(e)):this.grid.setColumnOrder(e);this.grid.requestStateChange?.()}};we("reorderColumns",e=>new Ir("boolean"==typeof e?{}:e??{}));var Lr=0,Dr=/* @__PURE__ */new Set,Pr="tbw-responsive-column-fade",Fr="data-responsive-column-fade";function Hr(e){for(const t of e.getAnimations?.()??[])t.id===Pr&&(t.finished?.catch(()=>{}),t.cancel())}function Gr(e){return e.startsWith("minmax(")?e.includes("fr")?"minmax(0px, 0fr)":"minmax(0px, 0px)":e.endsWith("fr")?"0fr":e.endsWith("%")?"0%":"0px"}var zr=class extends Y{name="responsive";version="1.0.0";styles='tbw-grid[data-responsive-transition]::view-transition-group(*){animation-duration:var(--tbw-responsive-duration,.2s)}tbw-grid[data-responsive-transition] .data-grid-row>.cell{view-transition-class:tbw-responsive-cell}tbw-grid[data-responsive-transition]::view-transition-group(.tbw-responsive-cell){animation-timing-function:ease-in-out}tbw-grid[data-responsive-transition]::view-transition-old(.tbw-responsive-cell){object-fit:none;object-position:right center;width:100%;height:100%}tbw-grid[data-responsive-transition]::view-transition-new(.tbw-responsive-cell){object-fit:none;object-position:right center;width:100%;height:100%}tbw-grid[data-responsive-transition]::view-transition-old(.tbw-responsive-cell){animation-duration:calc(var(--tbw-responsive-duration,.2s) * .35)}tbw-grid[data-responsive-transition]::view-transition-new(.tbw-responsive-cell){animation-duration:calc(var(--tbw-responsive-duration,.2s) * .35)}tbw-grid[data-responsive-animate] .data-grid-row,tbw-grid[data-responsive-animate] .data-grid-row>.cell{transition:opacity var(--tbw-responsive-duration,.2s) ease-out, transform var(--tbw-responsive-duration,.2s) ease-out}tbw-grid[data-responsive][data-responsive-animate] .data-grid-row{animation:responsive-card-enter var(--tbw-responsive-duration,.2s) ease-out}@keyframes responsive-card-enter{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}tbw-grid[data-responsive] .header{display:none!important}tbw-grid[data-responsive] .footer-row{display:none}tbw-grid[data-responsive] .tbw-scroll-area{overflow-x:hidden;min-width:0!important}tbw-grid[data-responsive] .rows-body-wrapper{min-width:0!important}tbw-grid[data-responsive] .data-grid-row:not(.group-row){padding:var(--tbw-cell-padding);border-bottom:1px solid var(--tbw-color-border);background:var(--tbw-color-bg);padding-inline-start:var(--tbw-spacing-xl);position:relative;contain:none!important;content-visibility:visible!important;grid-template-columns:none!important;display:block!important}tbw-grid[data-responsive] .data-grid-row:not(.group-row):nth-child(2n){background:var(--tbw-color-row-alt)}tbw-grid[data-responsive] .data-grid-row:not(.group-row):hover{background:var(--tbw-color-row-hover)}tbw-grid[data-responsive] .data-grid-row:not(.group-row)[aria-selected=true]{background:var(--tbw-color-selection)}tbw-grid[data-responsive] .data-grid-row:not(.group-row)[aria-selected=true]:before{content:"";background:var(--tbw-color-accent);inset-inline-start:0;width:4px;position:absolute;top:0;bottom:0}tbw-grid[data-responsive] .data-grid-row:not(.group-row,.responsive-card){height:auto!important;min-height:auto!important}tbw-grid[data-responsive] .data-grid-row:not(.group-row)>.cell{padding:var(--tbw-spacing-xs) var(--tbw-spacing-md);justify-content:space-between;align-items:center;white-space:normal!important;border:none!important;background:0 0!important;border-inline-end:none!important;width:100%!important;min-width:0!important;height:auto!important;min-height:auto!important;line-height:1.5!important;display:flex!important;position:static!important;left:auto!important;right:auto!important;overflow:visible!important}tbw-grid[data-responsive] .data-grid-row:not(.group-row)>.cell:before{content:attr(data-header) ": ";color:var(--tbw-color-header-fg);min-width:100px;flex-shrink:0;margin-inline-end:var(--tbw-spacing-md);font-weight:600}tbw-grid[data-responsive] .data-grid-row:not(.group-row)>.cell:after{content:none}tbw-grid[data-responsive] .cell[data-utility],tbw-grid[data-responsive] .data-grid-row>.cell[data-responsive-hidden],tbw-grid[data-responsive] .data-grid-row>.cell[data-responsive-value-only]:before{display:none!important}tbw-grid[data-responsive] .data-grid-row>.cell[data-responsive-value-only]{font-weight:500;justify-content:flex-start!important}tbw-grid[data-responsive][data-responsive-hide-header] .data-grid-row:not(.group-row)>.cell:before{display:none!important}tbw-grid:not([data-responsive]) .cell[data-responsive-hidden]{pointer-events:none;opacity:0;border-inline-width:0!important;padding-inline:0!important;overflow:hidden!important}tbw-grid[data-responsive-column-fade] :is(.header-row,.data-grid-row){transition:grid-template-columns var(--tbw-responsive-duration,.2s) ease-out}tbw-grid[data-responsive] .tbw-footer,tbw-grid[data-responsive] .tbw-header-pinned,tbw-grid[data-responsive] .tbw-pinned-rows,tbw-grid[data-responsive] .tbw-aggregation-rows{display:none!important}tbw-grid[data-responsive] .tbw-pinned-rows,tbw-grid[data-responsive] .tbw-aggregation-rows,tbw-grid[data-responsive] .tbw-aggregation-row{min-width:0!important}tbw-grid[data-responsive] .data-grid-row.responsive-card{padding:var(--tbw-cell-padding);border-bottom:1px solid var(--tbw-color-border);display:block!important}tbw-grid[data-responsive] .data-grid-row.responsive-card>*{width:100%}tbw-grid[data-responsive] .data-grid-row.responsive-card .cell:before{display:none}';static manifest={queries:[{type:"isCardMode",description:"Returns whether the grid is currently in responsive card mode"}]};#Mt;#It=!1;#Lt;#Dt=!1;#Pt=0;#Ft;#Ht=Number.NEGATIVE_INFINITY;#Gt=++Lr;#zt=`tbw-responsive-row-${this.#Gt}-`;#Ot=`tbw-responsive-cell-${this.#Gt}-`;#Nt=0;#qt=/* @__PURE__ */new Set;#$t=Dr;#Wt=/* @__PURE__ */new Set;#Bt=Dr;#Vt=/* @__PURE__ */new Set;#Kt=/* @__PURE__ */new Set;#jt=0;#Ut;#Yt=!1;#Zt=null;#Xt=[];get#x(){return this.grid}isResponsive(){return this.#It}setResponsive(e){e!==this.#It&&(this.#It=e,this.#Qt(),this.emit("responsive-change",{isResponsive:e,width:this.#Pt,breakpoint:this.config.breakpoint??0}))}setBreakpoint(e){this.config.breakpoint=e,this.#Ft=void 0,this.#Jt(this.#Pt)}setCardRenderer(e){this.config.cardRenderer=e,this.#It&&this.requestRender()}getWidth(){return this.#Pt}getActiveBreakpoint(){return this.#Zt}attach(e){super.attach(e),this.#ei(),this.#ti(this.config.hiddenColumns),this.config.breakpoints?.length&&(this.#Xt=[...this.config.breakpoints].sort((e,t)=>t.maxWidth-e.maxWidth)),this.#ii(),this.#ri(),this.#ni=void 0,this.#oi=void 0,this.#It&&this.requestRender(),this.#Mt=new ResizeObserver(e=>{this.#si(e[0]?.contentRect.width??0)}),this.#Mt.observe(this.gridElement)}#si(e){if(this.#Pt=e,e===this.#Ft)return;const t=this.config.debounceMs??100,i=performance.now()-this.#Ht;if(clearTimeout(this.#Lt),i>=t)return this.#Ft=e,void this.#Jt(e);this.#Lt=setTimeout(()=>{this.#Ft=this.#Pt,this.#Jt(this.#Pt)},t-i)}#ei(){const e=this.gridElement;if(!e)return;const t=e.querySelector("tbw-grid-responsive-card");if(!t)return;const i=this.#x.__frameworkAdapter;if(i?.parseResponsiveCardElement){const e=i.parseResponsiveCardElement(t);e&&(this.config={...this.config,cardRenderer:e})}const r=t.getAttribute("breakpoint"),n=t.getAttribute("card-row-height"),o=t.getAttribute("hidden-columns"),s=t.getAttribute("hide-header"),l=t.getAttribute("debounce-ms"),a={};if(null!==r){const e=parseInt(r,10);isNaN(e)||(a.breakpoint=e)}if(null!==n&&(a.cardRowHeight="auto"===n?"auto":parseInt(n,10)),null!==o&&(a.hiddenColumns=o.split(",").map(e=>e.trim()).filter(e=>e.length>0)),null!==s&&(a.hideHeader="false"!==s),null!==l){const e=parseInt(l,10);isNaN(e)||(a.debounceMs=e)}const d=t.innerHTML.trim();!d||this.config.cardRenderer||i?.parseResponsiveCardElement||(a.cardRenderer=e=>{const t=B(d,{value:e,row:e}),i=document.createElement("div");return i.className="tbw-responsive-card-content",q(i,t),i}),Object.keys(a).length>0&&(this.config={...this.config,...a})}#ti(e){this.#qt=/* @__PURE__ */new Set,this.#Wt.clear();for(const t of e??[])"string"==typeof t?this.#qt.add(t):t.showValue?this.#Wt.add(t.field):this.#qt.add(t.field);this.#li()}get#ai(){return this.#Xt.length>0?null!==this.#Zt:this.#It}#li(){const e=this.#ai?this.#qt:Dr;for(const t of this.#$t)e.has(t)||this.#di(t,!1);for(const t of e)this.#$t.has(t)||this.#di(t,!0);this.#ci()}#di(e,t){(t?this.#Kt:this.#Vt).delete(e),(t?this.#Vt:this.#Kt).add(e)}#ci(){const e=this.#ui;e<=0||0===this.#Vt.size&&0===this.#Kt.size?this.#hi():(this.#jt=performance.now()+e,this.gridElement?.setAttribute(Fr,""),clearTimeout(this.#Ut),this.#Ut=setTimeout(()=>this.#hi(),e))}#hi(){clearTimeout(this.#Ut),this.#Ut=void 0,this.#jt=0,this.#Vt.clear(),this.#Kt.clear(),this.gridElement?.removeAttribute(Fr);for(const e of this.gridElement?.querySelectorAll(".cell[data-field]")??[])Hr(e)}#gi(e,t,i,r){Hr(e);const n=t?[{opacity:1},{opacity:0}]:[{opacity:0},{opacity:1}],o=e.animate?.(n,{duration:i,easing:"ease-out",fill:t?"forwards":"none"});o&&(o.id=Pr,o.currentTime=r)}#pi(e){const t=this.#x?._gridTemplate??"";if(!t)return;const i=this.visibleColumns,r=function(e){const t=[];let i=0,r=0;for(let n=0;n<e.length;n++){const o=e[n];"("===o?i++:")"===o?i--:" "===o&&0===i&&(n>r&&t.push(e.slice(r,n)),r=n+1)}return r<e.length&&t.push(e.slice(r)),t}(t);let n=!1;if(e.size>0&&r.length===i.length)for(let o=0;o<i.length;o++){const t=i[o]?.field;t&&e.has(t)&&(r[o]=Gr(r[o]),n=!0)}(n||this.#Yt)&&(this.gridElement.style.setProperty("--tbw-column-template",n?r.join(" "):t),this.#Yt=n)}detach(){if(this.#Mt?.disconnect(),this.#Mt=void 0,this.#hi(),clearTimeout(this.#Lt),this.#Lt=void 0,this.#Ft=void 0,this.#Ht=Number.NEGATIVE_INFINITY,this.gridElement){this.gridElement.removeAttribute("data-responsive"),this.gridElement.removeAttribute("data-responsive-animate"),this.gridElement.removeAttribute("data-responsive-hide-header"),this.gridElement.removeAttribute("data-responsive-transition");for(const e of this.gridElement.querySelectorAll(".cell[data-responsive-hidden], .cell[data-responsive-value-only]"))e.removeAttribute("data-responsive-hidden"),e.removeAttribute("data-responsive-value-only"),e.removeAttribute("aria-hidden");this.#fi()}this.#$t=Dr,this.#Bt=Dr,super.detach()}handleQuery(e){if("isCardMode"===e.type)return this.#It}afterRender(){this.#mi();const e=this.#Xt.length>0?null!==this.#Zt:this.#It,t=e?this.#qt:Dr,i=e?this.#Wt:Dr,r=this.#Vt.size>0||this.#Kt.size>0,n=this.#$t.size>0||this.#Bt.size>0;if(this.#$t=t,this.#Bt=i,this.#pi(this.#It?Dr:t),0===t.size&&0===i.size&&!r&&!n)return;const o=this.#ui,s=r?Math.min(o,Math.max(0,o-(this.#jt-performance.now()))):0,l=this.gridElement.querySelectorAll(".cell[data-field]");for(const a of l){const e=a.getAttribute("data-field");if(!e)continue;const r=this.#Vt.has(e);(r||this.#Kt.has(e))&&this.#gi(a,r,o,s),t.has(e)?(a.setAttribute("data-responsive-hidden",""),a.setAttribute("aria-hidden","true"),a.removeAttribute("data-responsive-value-only")):i.has(e)?(a.setAttribute("data-responsive-value-only",""),a.removeAttribute("data-responsive-hidden"),a.removeAttribute("aria-hidden")):(a.removeAttribute("data-responsive-hidden"),a.removeAttribute("data-responsive-value-only"),a.removeAttribute("aria-hidden"))}}#Jt(e){if(this.#Xt.length>0)return void this.#wi(e);const t=this.config.breakpoint??0;0!==t||this.#Dt||(this.#Dt=!0,this.warn("TBW110","No breakpoint configured. Responsive mode is disabled. Set a breakpoint based on your grid's column count."));const i=t>0&&e<t;i!==this.#It&&(this.#It=i,this.#Ht=performance.now(),this.#Qt(),this.emit("responsive-change",{isResponsive:i,width:e,breakpoint:t}))}#wi(e){let t=null;for(const i of this.#Xt)e<=i.maxWidth&&(t=i);if(t!==this.#Zt){this.#Zt=t,this.#Ht=performance.now(),t?.hiddenColumns?this.#ti(t.hiddenColumns):this.#ti(this.config.hiddenColumns);const i=!0===t?.cardLayout,r=i!==this.#It;r&&(this.#It=i),this.#Qt(r),this.emit("responsive-change",{isResponsive:this.#It,width:e,breakpoint:t?.maxWidth??0})}}#Qt(e=!0){this.#ii(),e&&this.#hi();const t=e?this.#bi():null;if(!t)return e&&this.#vi(),void this.requestRender();const i=this.gridElement,r=this.#yi(),n=++this.#Nt;"none"!==r&&this.#Ci(r),i.setAttribute("data-responsive-transition","");const o=t(async()=>{this.#vi(),await(this.#x.forceLayout?.()),"none"!==r&&this.#Ci(r)}),s=()=>{n===this.#Nt&&(i.removeAttribute("data-responsive-transition"),"none"!==r&&this.#fi())};o.finished.then(s,s),o.ready?.catch(()=>{})}get#xi(){const{animation:e,animate:t}=this.config;return void 0!==e?e:!1!==t&&"fade"}get#ui(){return!1!==this.#xi&&this.isAnimationEnabled?this.config.animationDuration??200:0}#ii(){this.gridElement.style.setProperty("--tbw-responsive-duration",`${this.#ui}ms`)}#bi(){if(!1===this.#xi||!this.isAnimationEnabled)return null;const e=this.gridElement,t=e.startViewTransition;return"function"==typeof t?t.bind(e):null}get#Ri(){return"function"==typeof this.gridElement?.startViewTransition}#Ci(e){const t=this.gridElement.querySelectorAll(".data-grid-row[aria-rowindex]");for(const i of t){const t=i.getAttribute("aria-rowindex");if("rows"!==e)for(const e of i.querySelectorAll(":scope > .cell[aria-colindex]")){const i=`${this.#Ot}${t}-${e.getAttribute("aria-colindex")}`;e.style.setProperty("view-transition-name",i)}else i.style.setProperty("view-transition-name",`${this.#zt}${t}`)}}#yi(){const e=this.#xi;if("morph-cells"===e){const e=this.gridElement.querySelectorAll(".data-grid-row > .cell[aria-colindex]").length;return e>0&&e<=150?"cells":"rows"}return"morph-rows"===e?"rows":"none"}#fi(){const e=this.gridElement.querySelectorAll(".data-grid-row, .data-grid-row > .cell");for(const t of e)t.style.removeProperty("view-transition-name")}#Si;#ri(){this.gridElement.toggleAttribute("data-responsive",this.#It),this.gridElement.toggleAttribute("data-responsive-animate",!1!==this.#xi&&!this.#Ri),this.gridElement.toggleAttribute("data-responsive-hide-header",this.#It&&!0===this.config.hideHeader)}#vi(){this.#ri();const e=this.#x;if(this.#It){e._virtualization&&(this.#Si=e._virtualization.rowHeight);const t=this.gridElement.querySelector(".tbw-scroll-area");t&&(t.scrollLeft=0)}else{const t=this.gridElement.querySelectorAll(".data-grid-row");for(const e of t)e.style.height="",e.classList.remove("responsive-card");this.#Si&&this.#Si>0&&e._virtualization&&(e._virtualization.rowHeight=this.#Si,this.#Si=void 0),this.#ni=void 0,this.#oi=void 0,this.#Ei=void 0}}renderRow(e,t,i){if(!this.#It||!this.config.cardRenderer)return;if(e.__isGroupRow)return;t.replaceChildren();const r=this.config.cardRenderer(e,i);t.className="data-grid-row responsive-card";const n=this.config.cardRowHeight;return t.style.height="auto"===n||void 0===n?"auto":`${this.#Ai()}px`,r.hasAttribute("role")||(r.setAttribute("role","gridcell"),r.setAttribute("aria-colindex","1")),t.appendChild(r),!0}onKeyDown(e){if(!this.#It)return!1;if(this.config.cardRenderer&&["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(e.key))return!1;const t=this.rows.length-1,i=this.visibleColumns.length-1;switch(e.key){case"ArrowDown":if(this.grid._focusCol<i)return this.grid._focusCol+=1,e.preventDefault(),at(this.#x),!0;if(this.grid._focusRow<t)return this.grid._focusRow+=1,this.grid._focusCol=0,e.preventDefault(),at(this.#x),!0;break;case"ArrowUp":if(this.grid._focusCol>0)return this.grid._focusCol-=1,e.preventDefault(),at(this.#x),!0;if(this.grid._focusRow>0)return this.grid._focusRow-=1,this.grid._focusCol=i,e.preventDefault(),at(this.#x),!0;break;case"ArrowRight":if(this.grid._focusRow<t)return this.grid._focusRow+=1,e.preventDefault(),at(this.#x),!0;break;case"ArrowLeft":if(this.grid._focusRow>0)return this.grid._focusRow-=1,e.preventDefault(),at(this.#x),!0}return!1}#ni;#oi;#Ei;#Ai(){const e=this.config.cardRowHeight,t=this.#ni;return"number"==typeof e&&e>0?t&&t>e?t:e:t&&t>0?t:80}#_i(){return this.#oi&&this.#oi>0?this.#oi:this.#Si??28}#ki(){for(const e of this.rows)if(e.__isGroupRow)return!0;return!1}getRowHeight(e,t){if(this.#It&&this.config.cardRenderer)return e.__isGroupRow?this.#_i():this.#Ai()}#Ti(){let e=0;for(const t of this.rows)t.__isGroupRow||e++;return e}#Mi=!1;#mi(){if(!this.#It)return;let e=!1;const t=this.#x,i=this.#ki(),r=this.#Ti();if(r!==this.#Ei&&(this.#Ei=r,e=!0),i){const t=this.gridElement.querySelector(".data-grid-row.group-row");if(t){const i=t.getBoundingClientRect().height;i>0&&i!==this.#oi&&(this.#oi=i,e=!0)}}const n=this.config.cardRenderer?".data-grid-row.responsive-card":".data-grid-row:not(.group-row)",o=this.gridElement.querySelector(n);if(o){const r=o.getBoundingClientRect().height;r>0&&r!==this.#ni&&(this.#ni=r,e=!0,!i&&t._virtualization&&(t._virtualization.rowHeight=r))}e&&!this.#Mi&&(this.#Mi=!0,queueMicrotask(()=>{this.#Mi=!1,this.grid&&this.#It&&this.#x.refreshVirtualWindow?.(!0,!0)}))}};we("responsive",e=>new zr("boolean"==typeof e?{}:e??{}));var Or=/* @__PURE__ */new Map;function Nr(e){const t=Or.get(e);if(!t)return;if(t.hasPrimitives)return;const i=[];for(const r of t.refs){const e=r.deref();if(void 0===e)return;i.push(e)}return i}function qr(e){Or.delete(e)}function $r(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID)return crypto.randomUUID();if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues){const e=/* @__PURE__ */new Uint32Array(2);return crypto.getRandomValues(e),`drag-${Date.now().toString(36)}-${e[0].toString(36)}${e[1].toString(36)}`}return`drag-${Date.now().toString(36)}-${(++Wr).toString(36)}`}var Wr=0,Br=null;function Vr(){return Br}function Kr(){Br=null}var jr="application/x-tbw-grid-rows+json";function Ur(e){const t=e.match(/^application\/x-tbw-grid-rows\+json;zone=(.*)$/);if(!t)return null;try{return decodeURIComponent(t[1])}catch{return t[1]}}function Yr(e){return JSON.stringify(e)}function Zr(e,t,i,r){if(!e)return{overIndex:null,insertIndex:r,isBefore:!1};const n=i(e);if(n<0)return{overIndex:null,insertIndex:r,isBefore:!1};const o=e.getBoundingClientRect(),s=t<o.top+o.height/2;return{overIndex:n,insertIndex:s?n:n+1,isBefore:s}}var Xr="__tbw_row_drag",Qr=null,Jr=/* @__PURE__ */new Set;function en(){if("undefined"==typeof BroadcastChannel)return null;if(Qr)return Qr;try{(Qr=new BroadcastChannel("tbw-row-drag-drop")).addEventListener("message",e=>{const t=e.data;if(t&&"tbw-row-drag-drop:transfer"===t.type)for(const i of Array.from(Jr))try{i(t)}catch{}})}catch{Qr=null}return Qr}var tn=/* @__PURE__ */new Set;var rn=class e extends Y{name="rowDragDrop";styles='@layer tbw-plugins{[data-field=__tbw_row_drag]{justify-content:center;align-items:center;display:flex}.dg-row-drag-handle{cursor:grab;-webkit-user-select:none;user-select:none;min-width:1em;min-height:1em;color:var(--tbw-row-reorder-handle-color,var(--tbw-color-fg-muted));transition:color var(--tbw-transition-duration,.12s) var(--tbw-transition-ease,ease);font-size:var(--tbw-font-size,1em);letter-spacing:-2px;justify-content:center;align-items:center;display:flex;position:relative}.dg-row-drag-handle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}.dg-row-drag-handle:hover{color:var(--tbw-row-reorder-handle-hover,var(--tbw-color-fg))}.dg-row-drag-handle:active{cursor:grabbing}@media (hover:none){.dg-row-drag-handle{color:var(--tbw-row-reorder-handle-hover,var(--tbw-color-fg))}}@media (pointer:coarse){.dg-row-drag-handle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}.data-grid-row.dragging{opacity:.6}.data-grid-row[draggable=true]{cursor:grab}.data-grid-row[draggable=true].dragging{cursor:grabbing}.tbw-row-drag-clone{pointer-events:none;position:fixed;top:-10000px;left:-10000px}.tbw-row-drag-count{pointer-events:none;background:var(--tbw-row-reorder-indicator,var(--tbw-color-accent));color:var(--tbw-color-accent-fg);box-shadow:0 2px 6px var(--tbw-color-shadow);z-index:9999;border-radius:999px;padding:2px 8px;font:600 12px/1.4 system-ui,sans-serif;position:fixed;top:-1000px;left:-1000px}.data-grid-row.drop-target{position:relative}.data-grid-row.drop-target.drop-before:before,.data-grid-row.drop-target.drop-after:after{content:"";height:var(--tbw-drop-indicator-width,2px);background-color:var(--tbw-drop-indicator-color,var(--tbw-row-reorder-indicator,var(--tbw-color-accent)));z-index:10;pointer-events:none;position:absolute;left:0;right:0}.data-grid-row.drop-target.drop-before:before{top:0}.data-grid-row.drop-target.drop-after:after{bottom:0}.tbw-grid--drop-target-active{outline:2px dashed var(--tbw-drop-indicator-color,var(--tbw-color-accent));outline-offset:-2px}.tbw-grid--drop-target-rejected{outline:2px dashed var(--tbw-color-danger);outline-offset:-2px}.tbw-grid--auto-scrolling{cursor:ns-resize}.data-grid-row.flip-animating{transition:transform var(--tbw-animation-duration,.2s) ease-out;will-change:transform;z-index:1}.tbw-row-move-menu{min-width:10rem;padding:var(--tbw-spacing-xs,.25rem);background:var(--tbw-color-panel-bg,light-dark(#fff,#1f1f1f));color:var(--tbw-color-fg,light-dark(#1a1a1a,#f0f0f0));border:1px solid var(--tbw-color-border,light-dark(#d0d0d0,#3a3a3a));border-radius:var(--tbw-border-radius,.25rem);box-shadow:var(--tbw-shadow-md,0 4px 12px #00000040);font:inherit;z-index:10001;flex-direction:column;margin:0;display:flex;position:fixed}.tbw-row-move-menu[hidden]{display:none}.tbw-row-move-menu-item{min-height:var(--tbw-touch-target-min,24px);padding:var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-sm,.5rem);text-align:start;border-radius:min(var(--tbw-border-radius,.25rem), 6px);color:inherit;font:inherit;cursor:pointer;background:0 0;border:none}.tbw-row-move-menu-item:hover:not(:disabled){background:var(--tbw-color-row-hover,light-dark(#f0f0f0,#2a2a2a))}.tbw-row-move-menu-item:disabled{opacity:.5;cursor:default}}';static manifest={events:[{type:"row-move",description:"Intra-grid row reorder.",cancelable:!0},{type:"row-drag-start",description:"Cross-grid drag started on this grid.",cancelable:!0},{type:"row-drag-end",description:"Drag finished on this grid (regardless of outcome)."},{type:"row-drop",description:"Cross-grid drop landing on this grid.",cancelable:!0},{type:"row-transfer",description:"Cross-grid transfer completed (fires on both grids)."}]};get defaultConfig(){return{enableKeyboard:!0,dragHandlePosition:"left",dragHandleWidth:40,debounceMs:150,animation:"flip",operation:"move",autoScroll:!0,dragFrom:"handle"}}shouldRenderDragHandle(){const e=this.config.showDragHandle;return!1!==e&&(!0===e||"row"!==this.config.dragFrom)}get rowIsDraggable(){return"row"===this.config.dragFrom||"both"===this.config.dragFrom}get animationType(){return!!this.isAnimationEnabled&&(void 0!==this.config.animation?this.config.animation:"flip")}isDragging=!1;draggedRowIndex=null;draggedRows=[];draggedIndices=[];dragSessionId=null;dragAccepted=!1;dropRowIndex=null;pendingMove=null;debounceTimer=null;lastFocusCol=0;autoScroller=null;gridId="";remoteTransferListener=e=>this.onRemoteTransfer(e);moveMenu=null;get internalGrid(){return this.grid}attach(e){super.attach(e);const t=this.gridElement;var i;t&&(this.gridId=t.id||`tbw-grid-${$r().slice(0,8)}`,t.id||(t.id=this.gridId),this.setupDelegatedDragListeners(),i=this.remoteTransferListener,Jr.add(i),en(),tn.add(this))}detach(){this.clearDebounceTimer(),this.autoScroller?.stop(),this.autoScroller=null,function(e){if(Jr.delete(e),0===Jr.size&&Qr){try{Qr.close()}catch{}Qr=null}}(this.remoteTransferListener),tn.delete(this),this.moveMenu?.dispose(),this.moveMenu=null,this.dragSessionId&&qr(this.dragSessionId),Kr(),this.resetDragState(),super.detach()}processColumns(e){if(!this.shouldRenderDragHandle())return[...e];const t={field:Xr,header:"",width:this.config.dragHandleWidth??40,resizable:!1,sortable:!1,filterable:!1,lockPosition:!0,utility:!0,viewRenderer:()=>{const e=document.createElement("div");return e.className="dg-row-drag-handle",e.setAttribute("aria-label","Drag to reorder, or activate for move options"),e.setAttribute("role","button"),e.setAttribute("tabindex","-1"),e.draggable=!0,e.addEventListener("click",t=>{t.stopPropagation(),this.openMoveMenu(e)}),this.setIcon(e,"dragHandle"),e}};return"right"===this.config.dragHandlePosition?[...e,t]:[t,...e]}afterRender(){this.applyRowDraggable()}onScrollRender(){this.applyRowDraggable()}applyRowDraggable(){const e=this.internalGrid._bodyEl;if(!e)return;const t=this.rowIsDraggable,i=e.querySelectorAll(".data-grid-row");for(const r of i)t?"true"!==r.getAttribute("draggable")&&r.setAttribute("draggable","true"):r.hasAttribute("draggable")&&r.removeAttribute("draggable")}onKeyDown(e){if(!this.config.enableKeyboard)return;if(!e.ctrlKey||"ArrowUp"!==e.key&&"ArrowDown"!==e.key)return;const t=this.internalGrid,i=t._focusRow,r=t._rows??this.sourceRows;if(i<0||i>=r.length)return;const n="up"==("ArrowUp"===e.key?"up":"down")?i-1:i+1;if(n<0||n>=r.length)return;const o=r[i];return this.canMoveRow(i,n)?(this.handleKeyboardMove(o,i,n,t._focusCol),e.preventDefault(),e.stopPropagation(),!0):void 0}onCellClick(){this.flushPendingMove()}moveRow(e,t){const i=[...this.sourceRows];e<0||e>=i.length||t<0||t>=i.length||e!==t&&this.canMoveRow(e,t)&&this.executeIntraGridMove(i[e],e,t,"keyboard")}canMoveRow(e,t){const i=this.internalGrid._rows??this.sourceRows;if(e<0||e>=i.length)return!1;if(t<0||t>=i.length)return!1;if(e===t)return!1;const r=i[e],n=this.grid?.query?.("canMoveRow",r);if(Array.isArray(n)&&n.includes(!1))return!1;if(this.config.canDrag&&!this.config.canDrag(r,e))return!1;if(this.config.canDrop){const i={sessionId:"intra",sourceGridId:this.gridId,dropZone:this.config.dropZone??"",rows:[r],rowIndices:[e],operation:"move"};if(!this.config.canDrop(i,t))return!1}return!0}setupDelegatedDragListeners(){const e=this.gridElement;if(!e)return;const t=this.disconnectSignal;e.addEventListener("dragstart",e=>this.onDragStart(e),{signal:t}),e.addEventListener("dragend",()=>this.onDragEnd(),{signal:t}),e.addEventListener("dragover",e=>this.onDragOver(e),{signal:t}),e.addEventListener("dragleave",e=>this.onDragLeave(e),{signal:t}),e.addEventListener("drop",e=>this.onDrop(e),{signal:t})}onDragStart(e){const t=e.target;if(!t)return;const i=t.closest(".dg-row-drag-handle");let r=null,n=!1;if(i)r=i.closest(".data-grid-row"),n=!0;else if(this.rowIsDraggable){if(this.isInteractiveDragOrigin(t))return;r=t.closest(".data-grid-row")}if(!r)return;const o=this.getRowIndex(r);if(o<0)return;const{rows:s,indices:l}=this.resolveDraggedRows(o);if(0===s.length)return;if(this.config.canDrag&&!this.config.canDrag(s[0],o))return void e.preventDefault();const a=this.config.operation??"move",d=this.config.dropZone??"",c=$r(),u={rows:s,indices:l,operation:a,dropZone:d};if(this.emitCancelable("row-drag-start",u))return void e.preventDefault();this.isDragging=!0,this.draggedRowIndex=o,this.draggedRows=s,this.draggedIndices=l,this.dragSessionId=c,this.dragAccepted=!1;const h=this.config.serializeRow??(e=>e),g={sessionId:c,sourceGridId:this.gridId,dropZone:d,rows:s.map(h),rowIndices:l,operation:a};if(e.dataTransfer){e.dataTransfer.effectAllowed="copy"===a?"copyMove":"move";try{e.dataTransfer.setData(jr,Yr(g)),d&&e.dataTransfer.setData(`${jr};zone=${encodeURIComponent(d)}`,Yr(g)),e.dataTransfer.setData("text/plain",function(e,t){const i=t.filter(e=>!e.utility&&"string"==typeof e.field&&""!==e.field),r=[];for(const n of e){const e=i.map(e=>{const t=n[e.field];return null==t?"":String(t).replace(/[\t\r\n]+/g," ")});r.push(e.join("\t"))}return r.join("\n")}(s,this.columns))}catch{}if(s.length>1){const t=document.createElement("div");t.className="tbw-row-drag-count",t.textContent=`${s.length} rows`,document.body.appendChild(t);try{e.dataTransfer.setDragImage(t,10,10)}catch{}setTimeout(()=>t.remove(),0)}else this.attachRowCloneDragImage(e,r,n?i:null)}!function(e,t){const i=[];let r=!1;for(const n of t)null!==n&&"object"==typeof n?i.push(new WeakRef(n)):r=!0;Or.set(e,{refs:i,hasPrimitives:r})}(c,s),function(e,t){Br={sessionId:e,payload:t}}(c,g),r.classList.add(Ge.DRAGGING),this.gridElement.classList.add("tbw-grid--drag-source")}static INTERACTIVE_DRAG_SELECTORS='input,textarea,select,button,a,[contenteditable=""],[contenteditable="true"],.dg-cell-editor,.tbw-checkbox-cell';isInteractiveDragOrigin(t){return null!==t.closest(e.INTERACTIVE_DRAG_SELECTORS)}attachRowCloneDragImage(e,t,i){if(!e.dataTransfer)return;const r=t.getBoundingClientRect(),n=t.cloneNode(!0);n.classList.add("tbw-row-drag-clone"),n.classList.remove("dragging","drop-target","drop-before","drop-after","flip-animating","row-focus"),n.removeAttribute("aria-selected"),n.style.width=`${r.width}px`,n.style.height=`${r.height}px`,this.gridElement.appendChild(n);let o=e.clientX-r.left,s=e.clientY-r.top;if(i){const e=i.getBoundingClientRect();o=e.left-r.left+e.width/2,s=e.top-r.top+e.height/2}o=Math.max(0,Math.min(r.width,o)),s=Math.max(0,Math.min(r.height,s));try{e.dataTransfer.setDragImage(n,o,s)}catch{}setTimeout(()=>n.remove(),0)}onDragOver(e){const t=e.dataTransfer;if(!t)return;const i=t.types?Array.from(t.types):[];if(!function(e){for(const t of e)if("application/x-tbw-grid-rows+json"===t||t.startsWith("application/x-tbw-grid-rows+json;"))return!0;return!1}(i)&&!this.isDragging)return;const r=this.config.dropZone??"",n=Vr(),o=this.isDragging&&n?.payload.sourceGridId===this.gridId;if(!o){if(!r)return;if(!(function(e,t){for(const i of e)if(Ur(i)===t)return i;return null}(i,r)||n&&n.payload.dropZone===r))return}e.preventDefault(),t&&(t.dropEffect=n?.payload.operation??this.config.operation??"move");const s=e.target.closest(".data-grid-row"),l=this.internalGrid._rows??[],a=Zr(s,e.clientY,e=>this.getRowIndex(e),l.length);if(o&&null!==a.overIndex&&a.overIndex===this.draggedRowIndex)this.clearDropTargetClasses();else{if(n&&this.config.canDrop){const e=this.config.canDrop(n.payload,a.insertIndex);if(this.gridElement.classList.toggle("tbw-grid--drop-target-active",e),this.gridElement.classList.toggle("tbw-grid--drop-target-rejected",!e),!e)return void this.clearDropTargetClasses()}else this.gridElement.classList.add("tbw-grid--drop-target-active");this.dropRowIndex=a.insertIndex,this.applyDropPositionClasses(s,a.isBefore),!1!==this.config.autoScroll&&(this.ensureAutoScroller(),this.autoScroller?.onPointerMove(e.clientY))}}onDragLeave(e){const t=e.target.closest(".data-grid-row");t&&t.classList.remove("drop-target","drop-before","drop-after"),e.currentTarget&&!this.gridElement.contains(e.relatedTarget)&&(this.gridElement.classList.remove("tbw-grid--drop-target-active","tbw-grid--drop-target-rejected"),this.autoScroller?.stop())}onDrop(e){e.preventDefault(),this.autoScroller?.stop(),this.gridElement.classList.remove("tbw-grid--drop-target-active","tbw-grid--drop-target-rejected"),this.clearDropTargetClasses();const t=e.dataTransfer;if(!t)return;let i=Vr()?.payload??null,r=null;if(i){const e=Nr(i.sessionId);e&&(r=e)}else{if(i=function(e){if(!e)return null;try{const t=JSON.parse(e);if("string"!=typeof t?.sessionId||"string"!=typeof t?.sourceGridId||"string"!=typeof t?.dropZone||!Array.isArray(t?.rows)||!Array.isArray(t?.rowIndices)||"move"!==t.operation&&"copy"!==t.operation)return null;for(const e of t.rowIndices)if("number"!=typeof e||!Number.isInteger(e)||e<0)return null;return t}catch{return null}}(t.getData(jr)),i){const e=Nr(i.sessionId);e&&(r=e)}}if(!i)return;const n=e.target.closest(".data-grid-row"),o=this.internalGrid._rows??[],s=Zr(n,e.clientY,e=>this.getRowIndex(e),o.length);let l=this.dropRowIndex??s.insertIndex;const a=i.sourceGridId===this.gridId,d=this.config.dropZone??"";if(a){const e=i.rowIndices[0];if(1===i.rowIndices.length&&l>e&&l--,e===l)return;const t=(r??i.rows)[0];if(!this.canMoveRow(e,l))return;return void this.executeIntraGridMove(t,e,l,"drag")}if(!d||d!==i.dropZone)return;if(this.config.canDrop&&!this.config.canDrop(i,l))return this.gridElement.classList.add("tbw-grid--drop-target-rejected"),void setTimeout(()=>this.gridElement.classList.remove("tbw-grid--drop-target-rejected"),200);const c=this.config.deserializeRow??(e=>e),u=r??i.rows.map(e=>c(e)),h={payload:i,sourceGridId:i.sourceGridId,targetIndex:l,operation:i.operation};if(this.emitCancelable("row-drop",h))return;const g=[...o];g.splice(l,0,...u),this.grid.rows=g;const p=this.findPeerOnGrid(i.sourceGridId);if("move"===i.operation&&p){const e=document.getElementById(i.sourceGridId);if(e){const t=(e._rows??e.rows??[]).slice(),r=[...i.rowIndices].sort((e,t)=>t-e);for(const e of r)e>=0&&e<t.length&&t.splice(e,1);e.rows=t}}p&&(p.dragAccepted=!0);const f={rows:u,fromGridId:i.sourceGridId,toGridId:this.gridId,fromIndices:i.rowIndices,toIndex:l,operation:i.operation};this.emit("row-transfer",f),p?p.emitTransfer(f):function(e){const t=en();if(t)try{t.postMessage(e)}catch{}}({type:"tbw-row-drag-drop:transfer",sessionId:i.sessionId,sourceGridId:i.sourceGridId,toGridId:this.gridId,dropZone:d,rowIndices:i.rowIndices,toIndex:l,operation:i.operation,serializedRows:i.rows})}onRemoteTransfer(e){if(e.sourceGridId!==this.gridId)return;const t=this.config.dropZone??"";if(!t||e.dropZone!==t)return;const i=this.config.deserializeRow??(e=>e),r=e.serializedRows.map(e=>i(e));if("move"===e.operation){const t=(this.internalGrid._rows??this.sourceRows).slice(),i=[...e.rowIndices].sort((e,t)=>t-e);for(const e of i)e>=0&&e<t.length&&t.splice(e,1);this.grid.rows=t}this.dragAccepted=!0,this.emit("row-transfer",{rows:r,fromGridId:e.sourceGridId,toGridId:e.toGridId,fromIndices:e.rowIndices,toIndex:e.toIndex,operation:e.operation})}onDragEnd(){if(this.dragSessionId&&qr(this.dragSessionId),Kr(),this.autoScroller?.stop(),this.gridElement.classList.remove("tbw-grid--drag-source"),this.isDragging){const e={rows:this.draggedRows,indices:this.draggedIndices,accepted:this.dragAccepted};this.emit("row-drag-end",e)}this.clearDragClasses(),this.resetDragState()}emitTransfer(e){this.emit("row-transfer",e)}findPeerOnGrid(e){const t=document.getElementById(e);return t?.getPluginByName?t.getPluginByName("rowDragDrop")??null:null}peersInDropZone(){const e=this.config.dropZone??"";if(!e)return[];const t=[];for(const i of tn){const r=i;r!==this&&((r.config.dropZone??"")===e&&t.push(r))}return t}get gridLabel(){const e=this.gridElement;return e?.getAttribute("aria-label")||e?.id||"grid"}openMoveMenu(e){const t=e.closest(".data-grid-row");if(!t)return;const i=this.getRowIndex(t);if(i<0)return;const r=this.internalGrid._rows??this.sourceRows,n=[{label:"Move up",disabled:0===i||!this.canMoveRow(i,i-1),run:()=>this.moveRow(i,i-1)},{label:"Move down",disabled:i>=r.length-1||!this.canMoveRow(i,i+1),run:()=>this.moveRow(i,i+1)},{label:"Move to top",disabled:0===i||!this.canMoveRow(i,0),run:()=>this.moveRow(i,0)},{label:"Move to bottom",disabled:i>=r.length-1||!this.canMoveRow(i,r.length-1),run:()=>this.moveRow(i,r.length-1)}],o="copy"===(this.config.operation??"move")?"Copy to":"Send to";for(const s of this.peersInDropZone())n.push({label:`${o} ${s.gridLabel}`,run:()=>this.transferToPeer(s,i)});this.moveMenu??=dr("tbw-row-move-menu","tbw-row-move-menu"),this.moveMenu.open(e,`Move row ${i+1}`,n)}transferToPeer(e,t){const i=this.config.dropZone??"";if(!i)return;const{rows:r,indices:n}=this.resolveDraggedRows(t);if(0===r.length)return;if(this.config.canDrag&&!this.config.canDrag(r[0],t))return;const o=this.config.operation??"move";if(this.emitCancelable("row-drag-start",{rows:r,indices:n,operation:o,dropZone:i}))return;const s=this.config.serializeRow??(e=>e),l={sessionId:$r(),sourceGridId:this.gridId,dropZone:i,rows:r.map(s),rowIndices:n,operation:o},a=e.acceptTransfer(l,r);if(a<0)return;if("move"===o){const e=[...this.internalGrid._rows??this.sourceRows];for(const t of[...n].sort((e,t)=>t-e))t>=0&&t<e.length&&e.splice(t,1);this.grid.rows=e}const d={rows:r,fromGridId:this.gridId,toGridId:e.gridId,fromIndices:n,toIndex:a,operation:o};e.emitTransfer(d),this.emit("row-transfer",d)}acceptTransfer(e,t){const i=this.config.dropZone??"";if(!i||i!==e.dropZone)return-1;const r=this.internalGrid._rows??this.sourceRows,n=r.length;if(this.config.canDrop&&!this.config.canDrop(e,n))return-1;const o={payload:e,sourceGridId:e.sourceGridId,targetIndex:n,operation:e.operation};return this.emitCancelable("row-drop",o)?-1:(this.grid.rows=[...r,...t],n)}resolveDraggedRows(e){const t=this.internalGrid._rows??this.sourceRows,i=t[e],r=this.grid?.getPluginByName?.("selection");if(r?.getSelectedRowIndices){const i=r.getSelectedRowIndices();if(i.includes(e)&&i.length>1){const e=[...i].sort((e,t)=>e-t);return{rows:e.map(e=>t[e]),indices:e}}}return{rows:[i],indices:[e]}}ensureAutoScroller(){if(this.autoScroller)return;const e=this.gridElement.querySelector(".rows-viewport");if(!e)return;const t="object"==typeof this.config.autoScroll?this.config.autoScroll:void 0;this.autoScroller=function(e,t={},i){const r=t.edgeSize??60,n=t.speed??8,o=t.maxSpeed??24;let s=null,l=null,a=!1;const d=e=>{e!==a&&(a=e,i?.(e))},c=()=>{if(s=null,null===l)return void d(!1);const t=e.getBoundingClientRect();let i=0;if(l<t.top+r){const e=1-Math.max(0,l-t.top)/r;i=-Math.round(n+(o-n)*e)}else if(l>t.bottom-r){const e=1-Math.max(0,t.bottom-l)/r;i=Math.round(n+(o-n)*e)}if(0===i)return void d(!1);const a=e.scrollTop;e.scrollTop=a+i,e.scrollTop!==a?(d(!0),s=requestAnimationFrame(c)):d(!1)};return{onPointerMove(e){l=e,null===s&&(s=requestAnimationFrame(c))},stop(){null!==s&&(cancelAnimationFrame(s),s=null),l=null,d(!1)},get isScrolling(){return a}}}(e,t,e=>{this.gridElement.classList.toggle("tbw-grid--auto-scrolling",e)})}applyDropPositionClasses(e,t){this.clearDropTargetClasses(),e&&(e.classList.add("drop-target"),e.classList.toggle("drop-before",t),e.classList.toggle("drop-after",!t))}clearDropTargetClasses(){this.gridElement?.querySelectorAll(".data-grid-row.drop-target").forEach(e=>{e.classList.remove("drop-target","drop-before","drop-after")})}clearDragClasses(){this.gridElement?.querySelectorAll(".data-grid-row").forEach(e=>{e.classList.remove(Ge.DRAGGING,"drop-target","drop-before","drop-after")})}resetDragState(){this.isDragging=!1,this.draggedRowIndex=null,this.draggedRows=[],this.draggedIndices=[],this.dragSessionId=null,this.dragAccepted=!1,this.dropRowIndex=null,this.pendingMove=null}getRowIndex(e){const t=e.querySelector(".cell[data-row]");return t?parseInt(t.getAttribute("data-row")??"-1",10):-1}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}handleKeyboardMove(e,t,i,r){this.pendingMove?this.pendingMove.currentIndex=i:this.pendingMove={originalIndex:t,currentIndex:i,row:e},this.lastFocusCol=r;const n=this.internalGrid,o=[...n._rows??this.sourceRows],[s]=o.splice(t,1);o.splice(i,0,s),n._rows=o,n._focusRow=i,n._focusCol=r,n.refreshVirtualWindow(!0),at(n),this.clearDebounceTimer(),this.debounceTimer=setTimeout(()=>this.flushPendingMove(),this.config.debounceMs??300)}flushPendingMove(){if(this.clearDebounceTimer(),!this.pendingMove)return;const{originalIndex:e,currentIndex:t,row:i}=this.pendingMove;if(this.pendingMove=null,e===t)return;const r=this.internalGrid,n={row:i,fromIndex:e,toIndex:t,rows:[...r._rows??this.sourceRows],source:"keyboard"};this.emitCancelable("row-move",n)&&(r._rows=[...this.sourceRows],r._focusRow=e,r._focusCol=this.lastFocusCol,r.refreshVirtualWindow(!0),at(r))}executeIntraGridMove(e,t,i,r){const n=[...this.sourceRows],[o]=n.splice(t,1);n.splice(i,0,o);const s={row:e,fromIndex:t,toIndex:i,rows:n,source:r};if(!this.emitCancelable("row-move",s))if("flip"===this.animationType&&this.gridElement){const e=this.captureRowPositions();this.grid.rows=n,requestAnimationFrame(()=>{this.gridElement.offsetHeight,this.animateFLIP(e,t,i)})}else this.grid.rows=n}captureRowPositions(){const e=/* @__PURE__ */new Map;return this.gridElement?.querySelectorAll(".data-grid-row").forEach(t=>{const i=this.getRowIndex(t);i>=0&&e.set(i,t.getBoundingClientRect().top)}),e}animateFLIP(e,t,i){const r=this.gridElement;if(!r||0===e.size)return;const n=Math.min(t,i),o=Math.max(t,i),s=[];if(r.querySelectorAll(".data-grid-row").forEach(r=>{const l=r,a=this.getRowIndex(l);if(a<0||a<n||a>o)return;let d;d=a===i?t:t<i?a+1:a-1;const c=e.get(d);if(void 0===c)return;const u=c-l.getBoundingClientRect().top;Math.abs(u)>1&&s.push({el:l,deltaY:u})}),0===s.length)return;s.forEach(({el:e,deltaY:t})=>{e.style.transform=`translateY(${t}px)`}),r.offsetHeight;const l=this.animationDuration;requestAnimationFrame(()=>{s.forEach(({el:e})=>{e.classList.add("flip-animating"),e.style.transform=""}),setTimeout(()=>{s.forEach(({el:e})=>{e.style.transform="",e.classList.remove("flip-animating")})},l+50)})}};we("rowDragDrop",e=>!0===e?new rn:new rn(e??void 0));var nn=null,on=/* @__PURE__ */new Set;function sn(e){const t=e.matches?"coarse":"fine";on.forEach(e=>e(t))}function ln(){const e=nn||("function"!=typeof globalThis.matchMedia?null:("function"==typeof(nn=globalThis.matchMedia("(pointer: coarse)")).addEventListener?nn.addEventListener("change",sn):"function"==typeof nn.addListener&&nn.addListener(sn),nn));return e?function(e){return e.matches?"coarse":"fine"}(e):"fine"}function an(e){const t=/* @__PURE__ */new Set(["cell","row","column","range"]);if("string"==typeof e){if(!t.has(e))throw new Error(`[SelectionPlugin] Invalid selection mode: "${e}". Expected one of: 'cell' | 'row' | 'column' | 'range'.`);return{primary:e,columnEnabled:"column"===e,bothAxes:!1}}if(!Array.isArray(e))throw new Error(`[SelectionPlugin] Invalid selection mode: expected string or array, got ${typeof e}.`);if(0===e.length)throw new Error("[SelectionPlugin] Invalid selection mode: array must contain at least one mode.");for(const r of e)if(!t.has(r))throw new Error(`[SelectionPlugin] Invalid selection mode in array: "${r}". Expected one of: 'cell' | 'row' | 'column' | 'range'.`);if(new Set(e).size!==e.length)throw new Error(`[SelectionPlugin] Invalid selection mode: array contains duplicate entries (${e.join(", ")}).`);if(1===e.length)return an(e[0]);if(e.length>2)throw new Error(`[SelectionPlugin] Invalid selection mode: arrays of more than 2 modes are not supported. Got [${e.join(", ")}].`);if(!e.includes("column"))throw new Error(`[SelectionPlugin] Invalid selection mode: [${e.join(", ")}]. Two-mode arrays must include 'column' (the only valid combinations are ['row','column'], ['cell','column'], ['range','column']). Other in-row modes don't compose meaningfully.`);const i=e.find(e=>"column"!==e);if("column"===i)throw new Error(`[SelectionPlugin] Invalid selection mode: [${e.join(", ")}].`);return{primary:i,columnEnabled:!0,bothAxes:!0}}function dn(e){const t=[];for(const i of e)!0!==i.utility&&"string"==typeof i.field&&i.field.length>0&&t.push(i.field);return t}function cn(e,t){return t.indexOf(e)}function un(e){return{startRow:Math.min(e.startRow,e.endRow),startCol:Math.min(e.startCol,e.endCol),endRow:Math.max(e.startRow,e.endRow),endCol:Math.max(e.startCol,e.endCol)}}function hn(e){const t=un(e);return{from:{row:t.startRow,col:t.startCol},to:{row:t.endRow,col:t.endCol}}}function gn(e,t,i){return i.some(i=>function(e,t,i){const r=un(i);return e>=r.startRow&&e<=r.endRow&&t>=r.startCol&&t<=r.endCol}(e,t,i))}function pn(e){const t=[],i=un(e);for(let r=i.startRow;r<=i.endRow;r++)for(let e=i.startCol;e<=i.endCol;e++)t.push({row:r,col:e});return t}function fn(e,t){return{startRow:e.row,startCol:e.col,endRow:t.row,endCol:t.col}}function mn(e,t){const i=un(e),r=un(t);return i.startRow===r.startRow&&i.startCol===r.startCol&&i.endRow===r.endRow&&i.endCol===r.endCol}var wn=/* @__PURE__ */new WeakMap;function bn(e,t,i,r){const{onMove:n,onEnd:o,onCancel:s,onPromote:l}=i,a=r?.threshold??0,d=r?.longPressDuration??0,c=r?.longPressSlop??8,u=e.pointerId;if(!function(e,t){let i=wn.get(e);return i||(i=/* @__PURE__ */new Set,wn.set(e,i)),!i.has(t)&&(i.add(t),!0)}(t,u))return()=>{};const h=e.clientX,g=e.clientY;let p=0===a&&0===d,f=!1,m=null,w=!1;function b(){return p=!0,function(){try{return t.setPointerCapture(u),!0}catch{return w=!0,!1}}()?(l?.(),!0):(y(),!1)}function v(){if(!f){var e,i;f=!0,null!==m&&(clearTimeout(m),m=null),t.removeEventListener("pointermove",C),t.removeEventListener("pointerup",x),t.removeEventListener("pointercancel",R),t.removeEventListener("lostpointercapture",S),document.removeEventListener("keydown",E,!0),e=t,i=u,wn.get(e)?.delete(i);try{t.hasPointerCapture(u)&&t.releasePointerCapture(u)}catch{}}}function y(){f||(v(),s?.())}function C(e){const t=e;if(t.pointerId!==u||f)return;const i=t.clientX-h,r=t.clientY-g,o=Math.sqrt(i*i+r*r);if(!p){if(d>0)return o>c?void y():void 0;if(a>0&&o<a)return;if(!b())return}n(t)}function x(e){const t=e;if(t.pointerId!==u||f)return;const i=p;v(),i?o(t):s?.()}function R(e){e.pointerId!==u||f||y()}function S(e){e.pointerId!==u||f||y()}function E(e){"Escape"!==e.key||f||y()}return t.addEventListener("pointermove",C),t.addEventListener("pointerup",x),t.addEventListener("pointercancel",R),t.addEventListener("lostpointercapture",S),document.addEventListener("keydown",E,!0),p&&(b(),w)?()=>{}:(d>0&&(m=setTimeout(()=>{m=null,f||b()},d)),y)}var vn="tbw-selection-toolbar",yn=class{#Ii=null;#Li=null;#Di=null;#Pi=null;get mounted(){return null!==this.#Ii}get element(){return this.#Ii}show(e,t,i,r){this.#Pi=r,this.#Ii||this.#Fi(e),this.#Li&&(this.#Li.textContent=`${t} selected`),this.#Ii?.setAttribute("data-selected-count",String(t)),this.#Di&&(this.#Di.hidden=!i)}destroy(){this.#Ii?.remove(),this.#Ii=null,this.#Li=null,this.#Di=null,this.#Pi=null}#Fi(e){const t=e.ownerDocument.createElement("div");t.className=vn,t.setAttribute("role","toolbar"),t.setAttribute("aria-label","Selection");const i=e.ownerDocument.createElement("span");i.className=`${vn}-count`,i.setAttribute("aria-live","polite"),t.appendChild(i);const r=e.ownerDocument.createElement("div");r.className=`${vn}-actions`,t.appendChild(r),r.appendChild(this.#Hi(e,"select-all","Select all",()=>this.#Pi?.selectAll())),r.appendChild(this.#Hi(e,"clear","Clear",()=>this.#Pi?.clear()));const n=this.#Hi(e,"more","More…",e=>this.#Pi?.more(e));n.setAttribute("aria-haspopup","menu"),r.appendChild(n),r.appendChild(this.#Hi(e,"done","Done",()=>this.#Pi?.done())),e.prepend(t),this.#Ii=t,this.#Li=i,this.#Di=n}#Hi(e,t,i,r){const n=e.ownerDocument.createElement("button");return n.type="button",n.className=`${vn}-btn`,n.dataset.action=t,n.textContent=i,n.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),r(n)}),n}},Cn="tbw-range-handle",xn=class{#Gi=null;#zi=null;#Pi=null;#Oi=null;render(e,t,i,r){this.#Pi=r,t?(this.#Gi??=this.#Ni(e,"start"),this.#zi??=this.#Ni(e,"end"),this.#qi(e,this.#Gi,i(t.startRow,t.startCol),"start"),this.#qi(e,this.#zi,i(t.endRow,t.endCol),"end"),this.setArmed(this.#Oi)):this.#$i()}setArmed(e){this.#Oi=e;for(const[t,i]of[[this.#Gi,"start"],[this.#zi,"end"]]){if(!t)continue;const r=e===i;t.classList.toggle("armed",r),t.setAttribute("aria-pressed",String(r))}}destroy(){this.#Gi?.remove(),this.#zi?.remove(),this.#Gi=null,this.#zi=null,this.#Pi=null,this.#Oi=null}#$i(){this.#Gi&&(this.#Gi.hidden=!0),this.#zi&&(this.#zi.hidden=!0)}#qi(e,t,i,r){if(!t)return;if(!i)return void(t.hidden=!0);t.hidden=!1;const n=i.getBoundingClientRect?.(),o=e.getBoundingClientRect?.();if(!n||!o)return;const s="start"===r?n.left-o.left:n.right-o.left,l="start"===r?n.top-o.top:n.bottom-o.top;t.style.left=`${s}px`,t.style.top=`${l}px`}#Ni(e,t){const i=e.ownerDocument.createElement("div");return i.className=`${Cn} ${Cn}-${t}`,i.dataset.corner=t,i.setAttribute("role","button"),i.setAttribute("tabindex","-1"),i.setAttribute("aria-pressed","false"),i.setAttribute("aria-label","start"===t?"Selection start corner — drag, or activate to place it with a tap":"Selection end corner — drag, or activate to place it with a tap"),i.addEventListener("pointerdown",e=>this.#Wi(e,i,t)),e.appendChild(i),i}#Wi(e,t,i){if(0!==e.button&&"mouse"===e.pointerType)return;e.preventDefault(),e.stopPropagation();const r=this.#Pi;if(!r)return;t.classList.add("dragging");let n=!1;bn(e,t,{onMove:e=>{n=!0;const t=r.cellAt(e.clientX,e.clientY);t&&r.resize(i,t.row,t.col)},onEnd:()=>{t.classList.remove("dragging"),n?r.commit():r.arm(i)},onCancel:()=>{t.classList.remove("dragging"),r.commit()}})}};function Rn(e){if("string"==typeof e)return e;if(Array.isArray(e)){const t=e.find(e=>"column"!==e);if(t)return t;if(e.includes("column"))return"column"}return"cell"}var Sn="__tbw_checkbox",En=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","Home","End","PageUp","PageDown"];var An=class extends Y{static manifest={queries:[{type:"getSelection",description:"Get the current selection state"},{type:"selectRows",description:"Select specific rows by index (row mode only)"},{type:"getSelectedRowIndices",description:"Get sorted array of selected row indices"},{type:"getSelectedRows",description:"Get actual row objects for the current selection (works in all modes)"},{type:"getSelectedColumns",description:"Get field names of selected columns (column mode only)"},{type:"selectColumns",description:"Select specific columns by field name (column mode only)"},{type:"getContextMenuItems",description:"Contribute the non-dragging range-extension action (WCAG 2.2 SC 2.5.7)"}],configRules:[{id:"selection/range-dblclick",severity:"warn",message:'"triggerOn: \'dblclick\'" has no effect when mode is "range".\n → Range selection uses drag interaction (mousedown → mousemove), not click events.\n → The "triggerOn" option only affects "cell" and "row" selection modes.',check:e=>"range"===Rn(e.mode)&&"dblclick"===e.triggerOn},{id:"selection/column-checkbox",severity:"warn",message:'"checkbox: true" only renders in row mode.\n → Column selection has no checkbox UI; activate columns via Ctrl+Click on a header or Ctrl+Space on a focused cell.',check:e=>!!e.checkbox&&"row"!==Rn(e.mode)}]};name="selection";styles='@layer tbw-plugins{tbw-grid.selecting .data-grid-row>.cell{-webkit-user-select:none;user-select:none}tbw-grid:has(.selection){-webkit-user-select:none;user-select:none}:is(tbw-grid:has(.selection)[data-selection-mode=row] .cell-focus,tbw-grid:has(.selection)[data-selection-mode=row] .row-focus,tbw-grid:has(.selection)[data-selection-mode=range] .cell-focus){outline:none}tbw-grid .data-grid-row.row-focus{background-color:var(--tbw-focus-background,rgba(from var(--tbw-color-accent) r g b / 12%));outline:none;position:relative}tbw-grid .data-grid-row.row-focus:after{content:"";pointer-events:none;border-width:0;border-style:var(--tbw-selection-border-style,var(--tbw-border-style));border-color:var(--tbw-range-border-color,var(--tbw-color-accent));border-top-width:var(--tbw-selection-border-width,var(--tbw-border-width));border-bottom-width:var(--tbw-selection-border-width,var(--tbw-border-width));z-index:26;position:absolute;inset:0}tbw-grid .data-grid-row.row-focus+.data-grid-row.row-focus:after{border-top-width:0}tbw-grid .data-grid-row.row-focus:has(+.data-grid-row.row-focus):after{border-bottom-width:0}tbw-grid .data-grid-row.row-focus>.cell.sticky-left,tbw-grid .data-grid-row.row-focus>.cell.sticky-right{background:linear-gradient(var(--tbw-focus-background,rgba(from var(--tbw-color-accent) r g b / 12%)) 0 0), var(--tbw-color-panel-bg)}tbw-grid .data-grid-row.row-focus[data-selectable=false]>.cell.sticky-left,tbw-grid .data-grid-row.row-focus[data-selectable=false]>.cell.sticky-right{background:var(--tbw-color-row-alt)}tbw-grid .data-grid-row>.cell.selected{background-color:var(--tbw-range-selection-bg);position:relative}tbw-grid .data-grid-row>.cell.selected:after{content:"";pointer-events:none;border:0 var(--tbw-selection-border-style,var(--tbw-border-style)) var(--tbw-range-border-color);z-index:1;position:absolute;inset:0}tbw-grid .data-grid-row>.cell.selected.top:after{border-top-width:var(--tbw-selection-border-width,var(--tbw-border-width))}tbw-grid .data-grid-row>.cell.selected.bottom:after{border-bottom-width:var(--tbw-selection-border-width,var(--tbw-border-width))}tbw-grid .data-grid-row>.cell.selected.first:after{border-left-width:var(--tbw-selection-border-width,var(--tbw-border-width))}tbw-grid .data-grid-row>.cell.selected.last:after{border-right-width:var(--tbw-selection-border-width,var(--tbw-border-width))}tbw-grid .data-grid-row[data-selectable=false]{cursor:not-allowed;opacity:var(--tbw-selection-disabled-opacity,.65)}tbw-grid .data-grid-row[data-selectable=false].row-focus{background-color:var(--tbw-color-row-alt)}tbw-grid .data-grid-row>.cell[data-selectable=false]{cursor:not-allowed;opacity:var(--tbw-selection-disabled-opacity,.65)}tbw-grid .data-grid-row>.cell[data-selectable=false].selected{background-color:var(--tbw-selection-warning-bg,rgba(from var(--tbw-color-error) r g b / 50%))}tbw-grid .tbw-selection-summary{font-size:var(--tbw-font-size-sm,.8125rem);color:var(--tbw-color-fg-muted);white-space:nowrap}tbw-grid .data-grid-row>.cell[data-field=__tbw_checkbox],tbw-grid .header-row>.cell[data-field=__tbw_checkbox]{text-align:center;cursor:pointer;justify-content:center;align-items:center;padding:0;display:flex}tbw-grid .tbw-select-row-checkbox{pointer-events:none;cursor:pointer;margin:0}tbw-grid .tbw-checkbox-header{cursor:pointer;justify-content:center;align-items:center;height:100%;display:flex}tbw-grid .tbw-select-all-checkbox{cursor:pointer;margin:0}@media (pointer:coarse){tbw-grid .tbw-select-row-checkbox,tbw-grid .tbw-select-all-checkbox{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}tbw-grid .header-row>.cell.column-selected,tbw-grid .data-grid-row>.cell.column-selected,tbw-grid .data-grid-row>.cell.column-selected.sticky-left,tbw-grid .data-grid-row>.cell.column-selected.sticky-right,tbw-grid .header-row>.cell.column-selected.sticky-left,tbw-grid .header-row>.cell.column-selected.sticky-right{background:linear-gradient(var(--tbw-column-selection-bg,rgba(from var(--tbw-color-accent) r g b / 12%)) 0 0), var(--tbw-color-panel-bg)}tbw-grid .tbw-selection-toolbar{z-index:30;background:var(--tbw-color-panel-bg);border-bottom:1px solid var(--tbw-color-border);justify-content:space-between;align-items:center;gap:8px;padding:4px 8px;font-size:13px;display:flex;position:sticky;top:0}tbw-grid .tbw-selection-toolbar-count{white-space:nowrap;font-weight:600}tbw-grid .tbw-selection-toolbar-actions{align-items:center;gap:4px;display:flex}tbw-grid .tbw-selection-toolbar-btn{min-height:var(--tbw-touch-target-min,24px);border-radius:min(var(--tbw-border-radius,4px), 6px);color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;padding:0 10px}tbw-grid .tbw-selection-toolbar-btn:hover,tbw-grid .tbw-selection-toolbar-btn:focus-visible{background:var(--tbw-color-row-hover,light-dark(#f0f0f0,#2a2a2a))}tbw-grid .tbw-selection-toolbar-btn[data-action=done]{color:var(--tbw-color-accent-text,var(--tbw-color-accent));font-weight:600}tbw-grid .tbw-range-handle{z-index:25;width:var(--tbw-touch-target-min,24px);height:var(--tbw-touch-target-min,24px);background:radial-gradient(circle, var(--tbw-color-accent) 0 5px, transparent 5px);cursor:crosshair;touch-action:none;position:absolute;translate:-50% -50%}tbw-grid .tbw-range-handle[hidden]{display:none}tbw-grid .tbw-range-handle.dragging{scale:1.3}tbw-grid .tbw-range-handle.armed{outline:2px solid var(--tbw-color-accent);outline-offset:-4px;border-radius:50%;scale:1.3}}';get defaultConfig(){return{mode:"cell",triggerOn:"click",enabled:!0,multiSelect:!0,touchMode:"transient"}}get touchSelectionActive(){return this.#Bi}#Bi=!1;#Vi=!1;#Ki=new yn;#ji=new xn;#Ui=null;#Yi=null;#Zi=null;selected=/* @__PURE__ */new Set;lastSelected=null;anchor=null;ranges=[];activeRange=null;cellAnchor=null;isDragging=!1;pendingKeyboardUpdate=null;pendingRowKeyUpdate=null;selectedCell=null;selectedColumns=/* @__PURE__ */new Set;columnAnchor=null;columnHead=null;activeAxis="none";#Xi={primary:"cell",columnEnabled:!1,bothAxes:!1};lastSyncedFocusRow=-1;lastSyncedFocusCol=-1;announceTimer=null;explicitSelection=!1;isSelectionEnabled(){return!1!==this.config.enabled&&!1!==this.grid.effectiveConfig?.selectable}checkSelectable(e,t){const{isSelectable:i}=this.config;if(!i)return!0;const r=this.rows[e];return!!r&&i(r,e,void 0!==t?this.visibleColumns[t]:void 0,t)}isRowSelectable(e){return this.checkSelectable(e)}isCellSelectable(e,t){return this.checkSelectable(e,t)}attach(e){super.attach(e),this.#Xi=an(this.config.mode),this.on("filter-change",()=>this.clearSelectionSilent()),this.on("group-toggle",()=>this.clearSelectionSilent()),this.on("tree-expand",()=>this.clearSelectionSilent()),this.on("sort-change",()=>this.clearSelectionSilent()),this.on("edit-open",({rowIndex:e,row:t})=>{this.isSelectionEnabled()&&(null==t||e<0||"row"===this.#Xi.primary&&this.isRowSelectable(e)&&(this.selected.has(e)||(!1===this.config.multiSelect&&this.selected.clear(),this.selected.add(e),this.lastSelected=e,this.anchor=e,this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender())))});let t=-1;e.addEventListener("data-change",e=>{const{sourceRowCount:i}=e.detail,r=this.selected.size>0||this.ranges.length>0||null!==this.selectedCell;-1!==t&&i!==t&&r&&this.clearSelectionSilent(),t=i},{signal:this.disconnectSignal}),e.addEventListener("contextmenu",e=>{if(this.#Ji())return;const t=e.target?.closest?.(".cell[data-row][data-col]");if(!t)return;const i=parseInt(t.getAttribute("data-row")??"-1",10),r=parseInt(t.getAttribute("data-col")??"-1",10),n=this.#er(i,r);n&&(e.preventDefault(),this.#tr(t,n))},{signal:this.disconnectSignal})}handleQuery(e){if("getSelection"===e.type)return this.getSelection();if("getSelectedRowIndices"===e.type)return this.getSelectedRowIndices();if("getSelectedRows"===e.type)return this.getSelectedRows();if("selectRows"===e.type)return this.selectRows(e.context),!0;if("getSelectedColumns"===e.type)return this.getSelectedColumns();if("selectColumns"===e.type){const t=e.context;return this.#ir(t),!0}if("getContextMenuItems"===e.type){const t=e.context;if(!t||t.isHeader)return;const i=this.#er(t.rowIndex,t.columnIndex);if(!i)return;return i.map((e,t)=>({id:`selection-extend-${t}`,label:e.label,disabled:e.disabled,action:()=>e.run(),order:60+t}))}}detach(){(this.gridElement?.querySelector(".rows-body"))?.removeAttribute("aria-multiselectable"),this.#Ki.destroy(),this.#ji.destroy(),this.#Zi?.dispose(),this.#Zi=null,this.#Ui=null,this.#Yi=null,this.#Bi=!1,this.selected.clear(),this.ranges=[],this.activeRange=null,this.cellAnchor=null,this.isDragging=!1,this.selectedCell=null,this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,this.activeAxis="none",this.pendingKeyboardUpdate=null,this.pendingRowKeyUpdate=null,this.lastSyncedFocusRow=-1,this.lastSyncedFocusCol=-1,this.announceTimer&&(clearTimeout(this.announceTimer),this.announceTimer=null)}clearSelectionSilent(){this.selected.clear(),this.ranges=[],this.activeRange=null,this.cellAnchor=null,this.selectedCell=null,this.lastSelected=null,this.anchor=null,this.lastSyncedFocusRow=-1,this.lastSyncedFocusCol=-1,"column"!==this.activeAxis&&(this.activeAxis="none"),this.requestAfterRender()}#rr(e){const t=e.pointerType;return"touch"===t||"pen"===t||"mouse"!==t&&"coarse"===ln()}#nr(e){return!!this.isRowSelectable(e)&&(this.#Bi=!0,this.selected.clear(),this.selected.add(e),this.anchor=e,this.lastSelected=e,this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!0)}exitTouchSelection(){this.#Bi&&(this.#Bi=!1,"transient"===(this.config.touchMode??"transient")&&(this.selected.clear(),this.anchor=null,this.lastSelected=null,this.emit("selection-change",this.#Qi())),this.requestAfterRender())}#or(e){const t=this.anchor??e,i=Math.min(t,e),r=Math.max(t,e);for(let n=i;n<=r;n++)this.isRowSelectable(n)&&this.selected.add(n);this.lastSelected=e,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}#Ji(){const e=this.grid?.getPluginByName?.("contextMenu")??this.grid?.getPluginByName?.("context-menu");return"function"==typeof e?.showMenu?e:void 0}#sr(e,t){return this.gridElement?.querySelector(`.cell[data-row="${e}"][data-col="${t}"]`)??null}#lr(e,t){const i=this.gridElement,r=((i?.ownerDocument)?.elementFromPoint?.(e,t))?.closest?.(".cell[data-row][data-col]");if(!r||!i?.contains?.(r))return null;const n=parseInt(r.getAttribute("data-row")??"-1",10),o=parseInt(r.getAttribute("data-col")??"-1",10);return n>=0&&o>=0?{row:n,col:o}:null}#ar(e,t,i){const r=this.ranges[this.ranges.length-1];if(!r)return;const n=un(r),o="start"===e?{row:n.endRow,col:n.endCol}:{row:n.startRow,col:n.startCol},s=fn(o,{row:t,col:i});mn(r,s)||(this.ranges[this.ranges.length-1]=s,this.activeRange=s,this.cellAnchor=o,this.emit("selection-change",this.#Qi()),this.requestAfterRender())}#er(e,t){if("range"!==this.#Xi.primary)return null;if(!this.isSelectionEnabled())return null;if(e<0||t<0)return null;if(!this.isCellSelectable(e,t))return null;const i=this.#Yi;return i?i.row===e&&i.col===t?null:[{label:"Extend selection to here",run:()=>this.#dr(e,t)}]:null}#dr(e,t){const i=this.#Yi;if(!i)return;const r=fn(i,{row:e,col:t});this.ranges=[r],this.activeRange=r,this.cellAnchor=i,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}#tr(e,t){this.#Zi??=dr("tbw-range-extend-menu","tbw-range-extend-menu"),this.#Zi.open(e,"Selection",t)}#cr(e){this.#Ui=this.#Ui===e?null:e,this.#ji.setArmed(this.#Ui),this.gridElement&&qe(this.gridElement,this.#Ui?"Select a cell to place the selection corner":"Selection corner placement cancelled")}#ur(){return!!this.#Ui&&(this.#Ui=null,this.#ji.setArmed(null),!0)}#hr(e){if(!e)return;this.#Bi?this.#Ki.show(e,this.selected.size,void 0!==this.#Ji(),{selectAll:()=>this.selectAll(),clear:()=>this.clearSelection(),done:()=>this.exitTouchSelection(),more:e=>this.#gr(e)}):this.#Ki.destroy();const t=this.#Vi&&"range"===this.#Xi.primary&&this.ranges.length>0?this.ranges[this.ranges.length-1]:null,i=t?un(t):null;i||this.#ur(),this.#ji.render(e,i,(e,t)=>this.#sr(e,t),{cellAt:(e,t)=>this.#lr(e,t),resize:(e,t,i)=>this.#ar(e,t,i),commit:()=>this.requestAfterRender(),arm:e=>this.#cr(e)})}#gr(e){const t=this.#Ji();if(!t)return;const i=e.getBoundingClientRect?.(),r=this.lastSelected??-1;t.showMenu(i?.left??0,i?.bottom??0,{row:r>=0?this.rows[r]:null,rowIndex:r,selectedRows:this.getSelectedRowIndices()})}onCellClick(e){if(!this.isSelectionEnabled())return!1;const{triggerOn:t="click"}=this.config;if(e.originalEvent.type!==t)return!1;switch(this.#Xi.primary){case"cell":return this.#pr(e);case"row":return this.#fr(e);case"range":return this.#mr(e);default:return!1}}#pr(e){const{rowIndex:t,colIndex:i}=e;if(e.column&&jt(e.column))return!1;if(!this.isCellSelectable(t,i))return!1;const r=this.selectedCell;return r&&r.row===t&&r.col===i||(this.selectedCell={row:t,col:i},this.emit("selection-change",this.#Qi()),this.requestAfterRender()),!1}#fr(e){const{rowIndex:t,originalEvent:i,column:r}=e;if(!this.isRowSelectable(t))return!1;const n=!1!==this.config.multiSelect,o=i.shiftKey&&n,s=(i.ctrlKey||i.metaKey||this.#Bi)&&n,l=!0===r?.checkboxColumn;if(o&&null!==this.anchor){const e=Math.min(this.anchor,t),i=Math.max(this.anchor,t);s||this.selected.clear();for(let t=e;t<=i;t++)this.isRowSelectable(t)&&this.selected.add(t)}else if(s||l&&n)this.selected.has(t)?this.selected.delete(t):this.selected.add(t),this.anchor=t;else{if(1===this.selected.size&&this.selected.has(t))return!1;this.selected.clear(),this.selected.add(t),this.anchor=t}return this.lastSelected=t,this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!1}#mr(e){const{rowIndex:t,colIndex:i,originalEvent:r}=e;if(e.column&&jt(e.column))return!1;if(!this.isCellSelectable(t,i))return!1;if(this.#Ui){const e=this.#Ui;return this.#ur(),this.#ar(e,t,i),!0}this.#Vi=this.#rr(r);const n=r.shiftKey,o=(r.ctrlKey||r.metaKey)&&!1!==this.config.multiSelect;if(n&&this.cellAnchor){const e=fn(this.cellAnchor,{row:t,col:i}),r=this.ranges.length>0?this.ranges[this.ranges.length-1]:null;if(r&&mn(r,e))return!1;o?this.ranges.length>0?this.ranges[this.ranges.length-1]=e:this.ranges.push(e):this.ranges=[e],this.activeRange=e}else{const e={startRow:t,startCol:i,endRow:t,endCol:i};if(o)this.ranges.push(e);else{if(1===this.ranges.length&&mn(this.ranges[0],e))return!1;this.ranges=[e]}this.activeRange=e,this.cellAnchor={row:t,col:i},this.#Yi={row:t,col:i}}return this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!1}onKeyDown(e){if(!this.isSelectionEnabled())return!1;if(this.#Xi.columnEnabled&&this.#wr(e))return!0;const t=this.#Xi.primary;if("Escape"===e.key&&this.#ur())return!0;if("Escape"===e.key&&this.#Bi)return this.exitTouchSelection(),!0;if("Escape"===e.key)return this.#br(t);const i=En.includes(e.key);switch(t){case"cell":return!!i&&this.#vr();case"row":return this.#yr(e);case"range":return this.#Cr(e,i);default:return!1}}#wr(e){if(!e.ctrlKey&&!e.metaKey)return!1;if(" "===e.key||"Spacebar"===e.key){const t=this.visibleColumns[this.grid._focusCol];return!(!t||jt(t)||"string"!=typeof t.field)&&(e.preventDefault(),e.stopPropagation(),this.selectColumn(t.field,{toggle:!0}),!0)}if(e.shiftKey&&"column"===this.activeAxis&&!1!==this.config.multiSelect&&("ArrowLeft"===e.key||"ArrowRight"===e.key)){const t=dn(this.visibleColumns),i="ArrowLeft"===e.key?"left":"right",r=function(e,t,i){if(0===t.length)return null;if(null===e)return null;const r=cn(e,t);if(r<0)return null;const n="left"===i?Math.max(0,r-1):Math.min(t.length-1,r+1);return n===r?null:t[n]}(this.columnHead,t,i);return null!==r&&null!==this.columnAnchor&&(e.preventDefault(),e.stopPropagation(),this.selectColumn(r,{range:!0}),!0)}return!1}#br(e){return!this.grid.query("isEditing").some(Boolean)&&("column"===this.activeAxis?(this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,this.activeAxis="none"):"cell"===e?this.selectedCell=null:"row"===e?(this.selected.clear(),this.anchor=null):"range"===e&&(this.ranges=[],this.activeRange=null,this.cellAnchor=null),this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!0)}#vr(){return queueMicrotask(()=>{const e=this.grid._focusRow,t=this.grid._focusCol;this.selectedCell=this.isCellSelectable(e,t)?{row:e,col:t}:null,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}),!1}#yr(e){const t=!1!==this.config.multiSelect;if("ArrowUp"===e.key||"ArrowDown"===e.key||"PageUp"===e.key||"PageDown"===e.key||(e.ctrlKey||e.metaKey)&&("Home"===e.key||"End"===e.key)){const i=e.shiftKey&&t;return i&&null===this.anchor&&(this.anchor=this.grid._focusRow),this.explicitSelection=!0,this.pendingRowKeyUpdate={shiftKey:i},queueMicrotask(()=>this.requestAfterRender()),!1}return this.#xr(e,t)}#Cr(e,t){if(!t)return this.#xr(e,!1!==this.config.multiSelect);const i=e.shiftKey&&"Tab"!==e.key;return i&&!this.cellAnchor&&(this.cellAnchor={row:this.grid._focusRow,col:this.grid._focusCol}),this.pendingKeyboardUpdate={shiftKey:i},queueMicrotask(()=>this.requestAfterRender()),!1}#xr(e,t){return!(!t||"a"!==e.key||!e.ctrlKey&&!e.metaKey)&&(!this.grid.query("isEditing").some(Boolean)&&(e.preventDefault(),e.stopPropagation(),this.selectAll(),!0))}onCellMouseDown(e){if(!this.isSelectionEnabled())return;if("row"===this.#Xi.primary){if(void 0===e.rowIndex||e.rowIndex<0)return;if(!1===this.config.multiSelect)return;if(!this.#rr(e.originalEvent))return;if(e.column&&jt(e.column))return;return this.#Bi?(this.#or(e.rowIndex),!0):this.#nr(e.rowIndex)||void 0}if("range"!==this.#Xi.primary)return;if(void 0===e.rowIndex||void 0===e.colIndex)return;if(e.rowIndex<0)return;if(this.#Ui)return!0;if(this.#Vi=this.#rr(e.originalEvent),2===e.originalEvent.button&&gn(e.rowIndex,e.colIndex,this.ranges))return;if(e.column&&jt(e.column))return;if(!this.isCellSelectable(e.rowIndex,e.colIndex))return;if(e.originalEvent.shiftKey&&this.cellAnchor)return;this.isDragging=!0;const t=e.rowIndex,i=e.colIndex,r=(e.originalEvent.ctrlKey||e.originalEvent.metaKey)&&!1!==this.config.multiSelect,n={startRow:t,startCol:i,endRow:t,endCol:i};return!r&&1===this.ranges.length&&mn(this.ranges[0],n)?(this.cellAnchor={row:t,col:i},this.#Rr(e,t,i),!0):(this.cellAnchor={row:t,col:i},this.#Rr(e,t,i),r||(this.ranges=[]),this.ranges.push(n),this.activeRange=n,this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!0)}#Rr(e,t,i){2!==e.originalEvent.button&&(this.#Yi={row:t,col:i})}onCellMouseMove(e){if(!this.isSelectionEnabled())return;if("range"!==this.#Xi.primary)return;if(!this.isDragging||!this.cellAnchor)return;if(void 0===e.rowIndex||void 0===e.colIndex)return;if(e.rowIndex<0)return;let t=e.colIndex;const i=this.visibleColumns[t];if(i&&jt(i)){const e=this.visibleColumns.findIndex(e=>!jt(e));e>=0&&(t=e)}const r=fn(this.cellAnchor,{row:e.rowIndex,col:t}),n=this.ranges.length>0?this.ranges[this.ranges.length-1]:null;return n&&mn(n,r)||(this.ranges.length>0?this.ranges[this.ranges.length-1]=r:this.ranges.push(r),this.activeRange=r,this.emit("selection-change",this.#Qi()),this.requestAfterRender()),!0}onCellMouseUp(e){if(this.isSelectionEnabled()&&"range"===this.#Xi.primary)return this.isDragging?(this.isDragging=!1,!0):void 0}onHeaderClick(e){if(!this.isSelectionEnabled())return!1;if(!this.#Xi.columnEnabled)return!1;if(e.column&&jt(e.column))return!1;const t=e.originalEvent;if(!t.ctrlKey&&!t.metaKey)return!1;const i=e.field;if(!i)return!1;t.preventDefault(),"function"==typeof t.stopPropagation&&t.stopPropagation();const r=!0===t.shiftKey&&!1!==this.config.multiSelect&&null!==this.columnAnchor;return this.selectColumn(i,r?{range:!0}:{toggle:!0}),!0}processColumns(e){if(this.config.checkbox&&"row"===this.#Xi.primary){if(e.some(e=>e.field===Sn))return e;const t=this.#Sr(),i=e.findIndex(Kt),r=i>=0?i+1:0;return[...e.slice(0,r),t,...e.slice(r)]}return e}#Sr(){return{field:Sn,header:"",width:32,resizable:!1,sortable:!1,lockPosition:!0,utility:!0,checkboxColumn:!0,headerRenderer:()=>{const e=document.createElement("label");if(e.className="tbw-checkbox-header",!1===this.config.multiSelect)return e;const t=document.createElement("input");t.type="checkbox",t.className="tbw-select-all-checkbox";const i=document.createElement("span");return i.className="tbw-sr-only",i.textContent=$e(this.gridElement,"selectAllRows"),t.addEventListener("click",e=>{e.stopPropagation(),e.target.checked?this.selectAll():this.clearSelection()}),e.addEventListener("click",e=>e.stopPropagation()),e.append(t,i),e},renderer:e=>{const t=document.createElement("input");t.type="checkbox",t.className="tbw-select-row-checkbox";const i=e.cellEl,r=i?parseInt(i.getAttribute("data-row")??"-1",10):-1;return r>=0&&(t.checked=this.selected.has(r)),t.setAttribute("aria-label",$e(this.gridElement,"selectRow",Math.max(r,0))),t}}}#Er(e){e.querySelectorAll(".tbw-select-row-checkbox").forEach(e=>{const t=e.closest(".cell"),i=t?Ke(t):-1;i>=0&&(e.checked=this.selected.has(i))});const t=e.querySelector(".tbw-select-all-checkbox");if(t){const e=this.rows.length;let i=0;if(this.config.isSelectable)for(let t=0;t<e;t++)this.isRowSelectable(t)&&i++;else i=e;const r=i>0&&this.selected.size>=i,n=this.selected.size>0;t.checked=r,t.indeterminate=n&&!r}}#Ar(){return this.gridElement?.hasAttribute("data-has-focus")??!1}#_r(e){const t=this.grid._focusRow,i=this.grid._focusCol;if(!this.#Ar())return this.lastSyncedFocusRow=t,void(this.lastSyncedFocusCol=i);if("row"===e){if(this.explicitSelection)return this.explicitSelection=!1,void(this.lastSyncedFocusRow=t);t!==this.lastSyncedFocusRow&&(this.lastSyncedFocusRow=t,this.isRowSelectable(t)&&(this.selected.has(t)&&1===this.selected.size||(this.selected.clear(),this.selected.add(t),this.lastSelected=t,this.anchor=t,this.emit("selection-change",this.#Qi()))))}if("cell"===e){if(this.explicitSelection)return this.explicitSelection=!1,this.lastSyncedFocusRow=t,void(this.lastSyncedFocusCol=i);if((t!==this.lastSyncedFocusRow||i!==this.lastSyncedFocusCol)&&(this.lastSyncedFocusRow=t,this.lastSyncedFocusCol=i,this.isCellSelectable(t,i))){const e=this.selectedCell;e&&e.row===t&&e.col===i||(this.selectedCell={row:t,col:i},this.emit("selection-change",this.#Qi()))}}}#kr(){const e=this.gridElement;if(!e)return;const t=this.#Xi.primary,i=this.#Xi.columnEnabled,r=!!this.config.isSelectable,n=e.querySelector(".rows-body");if(n){const e=!1!==this.config.multiSelect;n.setAttribute("aria-multiselectable",e?"true":"false")}e.querySelectorAll(".cell").forEach(e=>{const t=e.classList.contains(Ge.SELECTED)||e.classList.contains("column-selected");e.classList.remove(Ge.SELECTED,"top","bottom","first","last","column-selected"),t&&e.removeAttribute("aria-selected"),r&&e.removeAttribute("data-selectable")});const o=e.querySelectorAll(".data-grid-row");if(o.forEach(e=>{e.classList.remove(Ge.SELECTED,"row-focus"),e.setAttribute("aria-selected","false"),r&&e.removeAttribute("data-selectable")}),i&&e.querySelectorAll(".header-row > .cell").forEach(e=>{e.classList.remove("column-selected"),e.removeAttribute("aria-selected")}),"row"===t&&(je(e),o.forEach(e=>{const t=Ke(e.querySelector(".cell[data-row]"));t>=0&&(r&&!this.isRowSelectable(t)&&e.setAttribute("data-selectable","false"),this.selected.has(t)&&(e.classList.add(Ge.SELECTED,"row-focus"),e.setAttribute("aria-selected","true")))}),this.config.checkbox&&this.#Er(e)),"cell"!==t&&"range"!==t||!r||e.querySelectorAll(".cell[data-row][data-col]").forEach(e=>{const t=parseInt(e.getAttribute("data-row")??"-1",10),i=parseInt(e.getAttribute("data-col")??"-1",10);t>=0&&i>=0&&(this.isCellSelectable(t,i)||e.setAttribute("data-selectable","false"))}),"range"===t&&this.ranges.length>0){je(e);const t=this.ranges.map(un),i=(e,i)=>{for(const r of t)if(e>=r.startRow&&e<=r.endRow&&i>=r.startCol&&i<=r.endCol)return!0;return!1};e.querySelectorAll(".cell[data-row][data-col]").forEach(e=>{const t=parseInt(e.getAttribute("data-row")??"-1",10),r=parseInt(e.getAttribute("data-col")??"-1",10);if(t>=0&&r>=0){const n=this.visibleColumns[r];if(n&&jt(n))return;i(t,r)&&(e.classList.add(Ge.SELECTED),e.setAttribute("aria-selected","true"),i(t-1,r)||e.classList.add("top"),i(t+1,r)||e.classList.add("bottom"),i(t,r-1)||e.classList.add("first"),i(t,r+1)||e.classList.add("last"))}})}if(i&&this.selectedColumns.size>0){const t=this.visibleColumns.map(e=>"string"==typeof e.field?e.field:void 0);e.querySelectorAll(".header-row > .cell[data-col]").forEach(e=>{const i=parseInt(e.getAttribute("data-col")??"-1",10),r=i>=0?t[i]:void 0;r&&this.selectedColumns.has(r)&&(e.classList.add("column-selected"),e.setAttribute("aria-selected","true"))}),e.querySelectorAll(".cell[data-col]:not(.header-row .cell)").forEach(e=>{if(e.closest(".header-row"))return;const i=parseInt(e.getAttribute("data-col")??"-1",10);if(i<0)return;const r=this.visibleColumns[i];if(!r||jt(r))return;const n=t[i];n&&this.selectedColumns.has(n)&&(e.classList.add("column-selected"),e.setAttribute("aria-selected","true"))})}}afterRender(){if(!this.isSelectionEnabled())return;const e=this.gridElement;if(!e)return;const t=e.querySelector(".tbw-grid-root"),i=this.#Xi.primary;if(this.pendingRowKeyUpdate&&"row"===i){const{shiftKey:e}=this.pendingRowKeyUpdate;this.pendingRowKeyUpdate=null;const t=this.grid._focusRow;if(e&&null!==this.anchor){this.selected.clear();const e=Math.min(this.anchor,t),i=Math.max(this.anchor,t);for(let t=e;t<=i;t++)this.isRowSelectable(t)&&this.selected.add(t)}else this.isRowSelectable(t)?(this.selected.clear(),this.selected.add(t),this.anchor=t):this.selected.clear();this.lastSelected=t,this.emit("selection-change",this.#Qi())}if(this.pendingKeyboardUpdate&&"range"===i){const{shiftKey:e}=this.pendingKeyboardUpdate;this.pendingKeyboardUpdate=null;const t=this.grid._focusRow,i=this.grid._focusCol;if(e&&this.cellAnchor){const e=fn(this.cellAnchor,{row:t,col:i});this.ranges=[e],this.activeRange=e}else e||(this.ranges=[],this.activeRange=null,this.cellAnchor={row:t,col:i});this.emit("selection-change",this.#Qi())}this.#_r(i),this.gridElement.setAttribute("data-selection-mode",i),t&&t.classList.toggle("selecting",this.isDragging),this.#kr(),this.#hr(t)}onScrollRender(){this.isSelectionEnabled()&&this.#kr()}getSelection(){const e=this.#Qi();return{mode:this.config.mode,activeAxis:e.activeAxis,ranges:e.ranges,selectedColumns:e.selectedColumns,anchor:this.cellAnchor}}getSelectedCells(){return function(e){const t=/* @__PURE__ */new Map;for(const i of e)for(const e of pn(i))t.set(`${e.row},${e.col}`,e);return[...t.values()]}(this.ranges)}isCellSelected(e,t){return gn(e,t,this.ranges)}selectAll(){const{mode:e,multiSelect:t}=this.config;if(!1!==t)if("row"===e){this.selected.clear();for(let e=0;e<this.rows.length;e++)this.isRowSelectable(e)&&this.selected.add(e);this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}else if("range"===e){const e=this.rows.length,t=this.columns.length;if(e>0&&t>0){const i={startRow:0,startCol:0,endRow:e-1,endCol:t-1};this.ranges=[i],this.activeRange=i,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}}}selectRows(e){if("row"!==this.#Xi.primary)return;const t=!1===this.config.multiSelect&&e.length>1?[e[e.length-1]]:e;this.selected.clear();for(const i of t)i>=0&&i<this.rows.length&&this.isRowSelectable(i)&&this.selected.add(i);this.anchor=t.length>0?t[t.length-1]:null,this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}getSelectedRowIndices(){return[...this.selected].sort((e,t)=>e-t)}getSelectedRows(){const e=this.#Xi.primary,t=this.rows;if("row"===e)return this.getSelectedRowIndices().filter(e=>e>=0&&e<t.length).map(e=>t[e]);if("cell"===e&&this.selectedCell){const{row:e}=this.selectedCell;return e>=0&&e<t.length?[t[e]]:[]}if("range"===e&&this.ranges.length>0){const e=/* @__PURE__ */new Set;for(const i of this.ranges){const r=Math.max(0,Math.min(i.startRow,i.endRow)),n=Math.min(t.length-1,Math.max(i.startRow,i.endRow));for(let t=r;t<=n;t++)e.add(t)}return[...e].sort((e,t)=>e-t).map(e=>t[e])}return[]}#ir(e){if(!this.#Xi.columnEnabled)return;const t=dn(this.visibleColumns),i=new Set(t),r=[],n=/* @__PURE__ */new Set;for(const s of e)i.has(s)&&!n.has(s)&&(n.add(s),r.push(s));this.#Tr("column"),this.selectedColumns.clear();for(const s of r)this.selectedColumns.add(s);const o=r.length>0?r[r.length-1]:null;this.columnAnchor=o,this.columnHead=o,this.activeAxis=this.selectedColumns.size>0?"column":"none",this.emit("selection-change",this.#Qi()),this.requestAfterRender()}selectColumn(e,t={}){if(!this.#Xi.columnEnabled)return;const i=dn(this.visibleColumns);if(i.includes(e)){if(this.#Tr("column"),!1===this.config.multiSelect)this.selectedColumns.clear(),this.selectedColumns.add(e),this.columnAnchor=e,this.columnHead=e;else if(t.range&&this.columnAnchor){const t=function(e,t,i){const r=cn(e,i),n=cn(t,i);if(-1===r||-1===n)return[];const o=Math.min(r,n),s=Math.max(r,n);return i.slice(o,s+1)}(this.columnAnchor,e,i);this.selectedColumns.clear();for(const e of t)this.selectedColumns.add(e);this.columnHead=e}else t.toggle?(this.selectedColumns.has(e)?this.selectedColumns.delete(e):this.selectedColumns.add(e),this.columnAnchor=e,this.columnHead=e):(this.selectedColumns.clear(),this.selectedColumns.add(e),this.columnAnchor=e,this.columnHead=e);this.activeAxis=this.selectedColumns.size>0?"column":"none",this.emit("selection-change",this.#Qi()),this.requestAfterRender()}}deselectColumn(e){this.#Xi.columnEnabled&&this.selectedColumns.delete(e)&&(0===this.selectedColumns.size&&(this.columnAnchor=null,this.columnHead=null,"column"===this.activeAxis&&(this.activeAxis="none")),this.emit("selection-change",this.#Qi()),this.requestAfterRender())}selectAllColumns(){if(!this.#Xi.columnEnabled)return;if(!1===this.config.multiSelect)return;const e=dn(this.visibleColumns);if(0!==e.length){this.#Tr("column"),this.selectedColumns.clear();for(const t of e)this.selectedColumns.add(t);this.columnAnchor=e[0],this.columnHead=e[e.length-1],this.activeAxis="column",this.emit("selection-change",this.#Qi()),this.requestAfterRender()}}clearColumnSelection(){0!==this.selectedColumns.size&&(this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,"column"===this.activeAxis&&(this.activeAxis="none"),this.emit("selection-change",this.#Qi()),this.requestAfterRender())}getSelectedColumns(){return 0===this.selectedColumns.size?[]:dn(this.visibleColumns).filter(e=>this.selectedColumns.has(e))}clearSelection(){this.selectedCell=null,this.selected.clear(),this.anchor=null,this.ranges=[],this.activeRange=null,this.cellAnchor=null,this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,this.activeAxis="none",this.emit("selection-change",this.#Qi()),this.requestAfterRender()}setRanges(e){this.ranges=e.map(e=>({startRow:e.from.row,startCol:e.from.col,endRow:e.to.row,endCol:e.to.col})),this.activeRange=this.ranges.length>0?this.ranges[this.ranges.length-1]:null,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}#Qi(){const e=this.#Xi.primary,t="row"===e&&this.selected.size>0||"cell"===e&&null!==this.selectedCell||"range"===e&&this.ranges.length>0;let i;this.#Xi.bothAxes&&t&&this.selectedColumns.size>0&&(this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,this.gridElement&&qe(this.gridElement,$e(this.gridElement,"selectionAxisChanged","row"))),i=t?"row"===e?"row":"cell"===e?"cell":"range":this.selectedColumns.size>0?"column":"none",this.activeAxis=i;const r=function(e,t,i,r,n,o){if("column"===t&&r.selectedColumns.size>0)return{mode:e,activeAxis:"column",ranges:[],selectedColumns:o.filter(e=>r.selectedColumns.has(e))};if("cell"===i&&r.selectedCell)return{mode:e,activeAxis:"cell",ranges:[{from:{row:r.selectedCell.row,col:r.selectedCell.col},to:{row:r.selectedCell.row,col:r.selectedCell.col}}],selectedColumns:[]};if("row"===i&&r.selected.size>0){const t=[...r.selected].sort((e,t)=>e-t),i=[];let o=t[0],s=o;for(let e=1;e<t.length;e++)t[e]===s+1?s=t[e]:(i.push({from:{row:o,col:0},to:{row:s,col:n-1}}),o=t[e],s=o);return i.push({from:{row:o,col:0},to:{row:s,col:n-1}}),{mode:e,activeAxis:"row",ranges:i,selectedColumns:[]}}return"range"===i&&r.ranges.length>0?{mode:e,activeAxis:"range",ranges:(s=r.ranges,s.map(hn)),selectedColumns:[]}:{mode:e,activeAxis:"none",ranges:[],selectedColumns:[]};var s}(this.config.mode,i,e,{selectedCell:this.selectedCell,selected:this.selected,ranges:this.ranges,selectedColumns:this.selectedColumns},this.columns.length,dn(this.visibleColumns));return this.announceTimer&&clearTimeout(this.announceTimer),this.announceTimer=setTimeout(()=>{if("column"===r.activeAxis){const e=r.selectedColumns;if(1===e.length){const t=e[0],i=this.columns.find(e=>e.field===t),r="string"==typeof i?.header&&i.header||t;qe(this.gridElement,$e(this.gridElement,"columnSelected",r))}else e.length>1?qe(this.gridElement,$e(this.gridElement,"columnSelectionChanged",e.length)):qe(this.gridElement,$e(this.gridElement,"columnSelectionCleared"))}else{const e="row"===r.activeAxis?this.selected.size:r.ranges.length;e>0&&qe(this.gridElement,$e(this.gridElement,"selectionChanged",e))}},150),r}#Tr(e){if(this.#Xi.bothAxes&&"column"===e){if(!(this.selected.size>0||null!==this.selectedCell||this.ranges.length>0))return;this.selected.clear(),this.lastSelected=null,this.anchor=null,this.selectedCell=null,this.ranges=[],this.activeRange=null,this.cellAnchor=null,this.gridElement&&qe(this.gridElement,$e(this.gridElement,"selectionAxisChanged","column"))}}};function _n(e,t){return null==e&&null==t?0:null==e?-1:null==t||e>t?1:e<t?-1:0}function kn(e,t,i){const r=[...e];return Mn(r,t.field,t.direction,i),r}function Tn(e,t,i){const r=e.length;if(r<2)return;const n=new Array(r),o=new Uint8Array(r),s=new Array(r);for(let a=0;a<r;a++){const i=e[a];s[a]=a,n[a]=t(i),o[a]=!0===i?.__loading?1:0}s.sort((e,t)=>{const r=o[e];if(r!==o[t])return r?1:-1;const s=n[e],l=n[t];return null==s&&null==l?0:null==s?-i:null==l||s>l?i:s<l?-i:0});const l=new Array(r);for(let a=0;a<r;a++)l[a]=e[s[a]];for(let a=0;a<r;a++)e[a]=l[a]}function Mn(e,t,i,r){const n=r.find(e=>e.field===t),o=n?.sortComparator;if(o)if(n?.valueAccessor)e.sort((e,t)=>o(c(e,n),c(t,n),e,t)*i);else{const r=l(t);e.sort((e,t)=>o(r(e),r(t),e,t)*i)}else n?.valueAccessor?function(e,t,i){Tn(e,e=>c(e,t),i)}(e,n,i):function(e,t,i){a(t)?e.sort((e,r)=>{const n=function(e,t){const i=!0===e?.__loading;return i===(!0===t?.__loading)?0:i?1:-1}(e,r);if(0!==n)return n;const o=e[t],s=r[t];return null==o&&null==s?0:null==o?-i:null==s||o>s?i:o<s?-i:0}):Tn(e,l(t),i)}(e,t,i)}function In(e,t,i,r){e._rows=t,e.__rowRenderEpoch++;for(let n=0;n<e._rowPool.length;n++)e._rowPool[n].__epoch=-1;e._schedulerRenderHeader(),e.refreshVirtualWindow(!0),Ln(e,i,r)}function Ln(e,t,i){const r={field:t.field,direction:i};e.dispatchEvent(new CustomEvent("sort-change",{detail:r})),e._pluginManager?.emitPluginEvent?.("sort-change",r),qe(e,$e(e,0===i?"sortCleared":"sortApplied",t.header??t.field,1===i?"ascending":"descending")),e.requestStateChange?.()}function Dn(e){return e._pluginManager?._hasRowStructurePlugins??!1}function Pn(e,t){if(e._sortState&&e._sortState.field===t.field)if(1===e._sortState.direction)Fn(e,t,-1);else{if(e._sortState=null,Dn(e))return e._requestSchedulerPhase(4,"sort-clear"),void Ln(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=[],e._schedulerRenderHeader();const i=e._headerRowEl?.querySelectorAll('[role="columnheader"].sortable');if(i)for(let t=0;t<i.length;t++){const r=i[t];r.getAttribute("aria-sort")&&("ascending"!==r.getAttribute("aria-sort")&&"descending"!==r.getAttribute("aria-sort")||e._sortState)||r.setAttribute("aria-sort","none")}e.refreshVirtualWindow(!0),Ln(e,t,0)}else e._sortState||(e.__originalOrder=e._rows.slice()),Fn(e,t,1)}function Fn(e,t,i){if(e._sortState={field:t.field,direction:i},Dn(e))return e._requestSchedulerPhase(4,"sort-apply"),void Ln(e,t,i);const r={field:t.field,direction:i},n=e._columns,o=e.effectiveConfig?.sortHandler??kn;if(o===kn)return Mn(e._rows,r.field,i,n),void In(e,e._rows,t,i);const s=o(e._rows,r,n);s&&"function"==typeof s.then?s.then(r=>{In(e,r,t,i)}):In(e,s,t,i)}function Hn(e,t){return Math.floor(e/t)}function Gn(){return new DOMException("Aborted","AbortError")}function zn(e,t,i,r,n){const o=function(e,t){return{start:e*t,end:(e+1)*t}}(t,i);return function(e,t){return t.aborted?Promise.reject(Gn()):"object"!=typeof(i=e)||null===i||"function"!=typeof i.subscribe||"function"==typeof i.then?new Promise((i,r)=>{const n=()=>r(Gn());t.addEventListener("abort",n,{once:!0}),Promise.resolve(e).then(e=>{t.removeEventListener("abort",n),i(e)},e=>{t.removeEventListener("abort",n),r(e)})}):new Promise((i,r)=>{let n=!1;const o=e.subscribe({next:e=>{n||(n=!0,i(e),o.unsubscribe())},error:e=>{n||(n=!0,r(e))},complete:()=>{n||(n=!0,r(/* @__PURE__ */new Error("getRows observable completed without emitting a value")))}});n||t.addEventListener("abort",()=>{n||(n=!0,o.unsubscribe(),r(Gn()))},{once:!0})});var i}(e.getRows({startNode:o.start,endNode:o.end,pageSize:o.end-o.start,sortModel:r.sortModel,filterModel:r.filterModel,signal:n}),n)}function On(e,t,i){const r=Hn(e,t),n=i.get(r);if(n)return n[e%t]}function Nn(e){let t=null;return{async getRows({startNode:i,endNode:r,signal:n}){const{rows:o,total:s}=await(i=>(t||(t=fetch(e,{signal:i}).then(async t=>{if(!t.ok)throw new Error(`Failed to fetch "${e}": ${t.status} ${t.statusText}`);const i=await t.json();if(Array.isArray(i))return{rows:i,total:i.length};const r=i??{},n=Array.isArray(r.rows)?r.rows:[];return{rows:n,total:"number"==typeof r.totalNodeCount?r.totalNodeCount:n.length}}).catch(e=>{throw t=null,e})),t))(n);return{rows:o.slice(i,r),totalNodeCount:s}}}}we("selection",e=>new An("cell"===e||"row"===e||"range"===e?{mode:e}:e??void 0));var qn=class extends Y{static manifest={modifiesRowStructure:!0,hookPriority:{processRows:-10},incompatibleWith:[{name:"pivot",reason:"PivotPlugin requires the full dataset to compute aggregations. ServerSidePlugin lazy-loads rows in blocks, so pivot aggregation cannot be performed client-side."}],events:[{type:"datasource:data",description:"Root data page/block loaded"},{type:"datasource:children",description:"Child data loaded for a parent context"},{type:"datasource:loading",description:"Loading state changed"},{type:"datasource:error",description:"Fetch operation failed"}],queries:[{type:"datasource:fetch-children",description:"Request child rows for a parent context"},{type:"datasource:is-active",description:"Check if ServerSide plugin has an active data source"}]};name="serverSide";get defaultConfig(){return{maxConcurrentRequests:2}}dataSource=null;totalNodeCount=0;infiniteScrollMode=!1;loadedBlocks=/* @__PURE__ */new Map;loadingBlocks=/* @__PURE__ */new Set;blockControllers=/* @__PURE__ */new Map;lastRequestId=0;scrollDebounceTimer;managedNodes=[];attach(e){if(super.attach(e),this.on("sort-change",()=>{"local"===this.config.sortMode?this.requestRender():this.onModelChange()}),this.on("filter-change",()=>{"local"===this.config.filterMode?this.requestRender():this.onModelChange()}),this.config.dataSource)return void this.setDataSource(this.config.dataSource);const t=this.gridElement?.getAttribute("data-src");t&&this.setDataSource(Nn(t))}detach(){this.dataSource=null,this.totalNodeCount=0,this.infiniteScrollMode=!1,this.loadedBlocks.clear(),this.loadingBlocks.clear(),this.abortAllBlocks(),this.managedNodes=[],this.lastRequestId=0,this.scrollDebounceTimer&&(clearTimeout(this.scrollDebounceTimer),this.scrollDebounceTimer=void 0)}abortAllBlocks(){for(const e of this.blockControllers.values())e.abort();this.blockControllers.clear()}getEnrichmentParams(){const e="local"===this.config.sortMode,t="local"===this.config.filterMode,i=e?void 0:this.grid?.query?.("sort:get-model",null),r=t?void 0:this.grid?.query?.("filter:get-model",null);let n=i?.[0];const o=this.grid;if(!e&&!n&&o?._sortState){const{field:e,direction:t}=o._sortState;n=[{field:e,direction:1===t?"asc":"desc"}]}return{sortModel:n,filterModel:r?.[0]}}getViewportMapping(e,t){const i={viewportStart:e,viewportEnd:t},r=this.grid?.query?.("datasource:viewport-mapping",i);return r?.[0]?r[0]:{startNode:e,endNode:t,totalLoadedNodes:this.totalNodeCount}}onModelChange(){this.dataSource&&(this.abortAllBlocks(),this.loadedBlocks.clear(),this.loadingBlocks.clear(),this.managedNodes=[],this.totalNodeCount=0,this.infiniteScrollMode=!1,this.requestRender(),this.loadRequiredBlocks())}applyServerResult(e,t,i){void 0!==e.lastNode?(this.totalNodeCount=e.lastNode+1,this.infiniteScrollMode=!1):-1===e.totalNodeCount?this.infiniteScrollMode=!0:(this.totalNodeCount=e.totalNodeCount,this.infiniteScrollMode=!1),this.infiniteScrollMode&&e.rows.length<i&&(this.totalNodeCount=t*i+e.rows.length,this.infiniteScrollMode=!1)}getInfiniteScrollEstimate(e){let t=0;for(const[i,r]of this.loadedBlocks){const n=i*e+r.length;n>t&&(t=n)}return t+e}loadRequiredBlocks(){if(!this.dataSource)return;const{_virtualization:e}=this.grid,t=this.config.pageSize??100,i=this.getViewportMapping(e.start,e.end),r=Math.max(0,this.config.loadThreshold??0),n=Math.max(0,i.startNode-r),o=this.totalNodeCount>0?this.totalNodeCount:1/0,s=Math.min(o,i.endNode+r);if(s<=n)return;const l=function(e,t,i){const r=Hn(e,i),n=Hn(t-1,i),o=[];for(let s=r;s<=n;s++)o.push(s);return o}(n,s,t),a=this.getEnrichmentParams(),d=this.grid?.getAttribute?.("id")??void 0;for(const c of l){if(this.loadedBlocks.has(c)||this.loadingBlocks.has(c))continue;if(this.loadingBlocks.size>=(this.config.maxConcurrentRequests??2)){_("TBW143","Concurrent request limit reached, deferring block load",d);break}this.loadingBlocks.add(c);const e=new AbortController;this.blockControllers.set(c,e),this.broadcast("datasource:loading",{loading:!0}),zn(this.dataSource,c,t,a,e.signal).then(i=>{if(this.blockControllers.delete(c),e.signal.aborted)return this.loadingBlocks.delete(c),void(0===this.loadingBlocks.size&&this.broadcast("datasource:loading",{loading:!1}));this.loadedBlocks.set(c,i.rows);const r=this.managedNodes.length;this.applyServerResult(i,c,t),this.loadingBlocks.delete(c);const n=c*t;for(let e=0;e<i.rows.length;e++)n+e<this.managedNodes.length&&(this.managedNodes[n+e]=i.rows[e]);const o={rows:i.rows,totalNodeCount:i.totalNodeCount,startNode:n,endNode:n+i.rows.length,claimed:!1};this.broadcast("datasource:data",o),0===this.loadingBlocks.size&&this.broadcast("datasource:loading",{loading:!1}),0===r||o.claimed||this.managedNodes.length<(Number.isFinite(this.totalNodeCount)?this.totalNodeCount:0)?this.requestRender():this.requestVirtualRefresh(),this.loadRequiredBlocks()}).catch(t=>{if(this.blockControllers.delete(c),this.loadingBlocks.delete(c),e.signal.aborted)return void(0===this.loadingBlocks.size&&this.broadcast("datasource:loading",{loading:!1}));const i=t instanceof Error?t:new Error(String(t));k(R,`getRows() failed: ${i.message}`,d),this.broadcast("datasource:error",{error:i}),0===this.loadingBlocks.size&&this.broadcast("datasource:loading",{loading:!1})})}}processRows(e){if(!this.dataSource)return[...e];const t=this.config.pageSize??100,i=this.infiniteScrollMode?this.getInfiniteScrollEstimate(t):Number.isFinite(this.totalNodeCount)&&this.totalNodeCount>=0?this.totalNodeCount:0;for(;this.managedNodes.length<i;){const e=this.managedNodes.length;this.managedNodes.push({__loading:!0,__index:e})}this.managedNodes.length=i;for(let n=0;n<i;n++){const e=On(n,t,this.loadedBlocks);e&&(this.managedNodes[n]=e)}const r=this.grid;if("local"===this.config.sortMode&&r?._sortState){const e=r._columns??[],t=(r.effectiveConfig?.sortHandler??kn)(this.managedNodes,r._sortState,e);return t&&"function"==typeof t.then?(t.catch(()=>{}),this.managedNodes):t}return this.managedNodes}onScroll(e){this.dataSource&&(this.loadRequiredBlocks(),this.scrollDebounceTimer&&clearTimeout(this.scrollDebounceTimer),this.scrollDebounceTimer=setTimeout(()=>{this.loadRequiredBlocks()},100))}handleQuery(e){switch(e.type){case"datasource:is-active":return null!=this.dataSource;case"datasource:fetch-children":{const{context:t}=e.context;return void this.fetchChildren(t)}}}fetchChildren(e){if(!this.dataSource)return;const t=this.grid?.getAttribute?.("id")??void 0;if(!this.dataSource.getChildRows)return void A("TBW142",`Plugin "${e.source}" requested child rows but getChildRows() is not implemented on the dataSource`,t);const i=this.getEnrichmentParams();this.broadcast("datasource:loading",{loading:!0,context:e}),this.dataSource.getChildRows({context:e,sortModel:i.sortModel,filterModel:i.filterModel}).then(t=>{const i={rows:t.rows,context:e,claimed:!1};this.broadcast("datasource:children",i),this.broadcast("datasource:loading",{loading:!1,context:e})}).catch(i=>{const r=i instanceof Error?i:new Error(String(i));k("TBW141",`getChildRows() failed: ${r.message}`,t),this.broadcast("datasource:error",{error:r,context:e}),this.broadcast("datasource:loading",{loading:!1,context:e})})}setDataSource(e){this.abortAllBlocks(),this.dataSource=e,this.loadedBlocks.clear(),this.loadingBlocks.clear(),this.managedNodes=[],this.totalNodeCount=0,this.infiniteScrollMode=!1;const t=this.config.pageSize??100,i=this.getEnrichmentParams(),r=this.grid?.getAttribute?.("id")??void 0,n=new AbortController;this.blockControllers.set(0,n),this.loadingBlocks.add(0),this.broadcast("datasource:loading",{loading:!0}),zn(e,0,t,i,n.signal).then(e=>{if(this.blockControllers.delete(0),this.loadingBlocks.delete(0),n.signal.aborted)return void this.broadcast("datasource:loading",{loading:!1});this.loadedBlocks.set(0,e.rows),this.applyServerResult(e,0,t);const i={rows:e.rows,totalNodeCount:e.totalNodeCount,startNode:0,endNode:e.rows.length,claimed:!1};this.broadcast("datasource:data",i),this.broadcast("datasource:loading",{loading:!1}),this.requestRender(),(this.config.loadThreshold??0)>0&&this.loadRequiredBlocks()}).catch(e=>{if(this.blockControllers.delete(0),this.loadingBlocks.delete(0),n.signal.aborted)return void this.broadcast("datasource:loading",{loading:!1});const t=e instanceof Error?e:new Error(String(e));k(R,`getRows() failed: ${t.message}`,r),this.broadcast("datasource:error",{error:t}),this.broadcast("datasource:loading",{loading:!1})})}refresh(){if(!this.dataSource)return;const e=this.dataSource;this.abortAllBlocks(),this.loadedBlocks.clear(),this.loadingBlocks.clear(),this.managedNodes=[],this.totalNodeCount=0,this.infiniteScrollMode=!1,this.setDataSource(e)}purgeCache(){this.abortAllBlocks(),this.loadedBlocks.clear(),this.managedNodes=[]}getTotalNodeCount(){return this.totalNodeCount}isNodeLoaded(e){const t=Hn(e,this.config.pageSize??100);return this.loadedBlocks.has(t)}getLoadedBlockCount(){return this.loadedBlocks.size}};we("serverSide",e=>!0===e?new qn:new qn(e??void 0));function $n(){return"function"==typeof HTMLElement.prototype?.showPopover}function Wn(e,t){const i=document.createElement("button");return i.type="button",i.className="tbw-size-popover-btn",i.setAttribute("aria-label",e),i.textContent=t,i}function Bn(e){const t=e.step??16;let i,r=null,n=null,o=null,s=!1,l=!1;const a=new AbortController;function d(){s&&r&&(s=!1,$n()&&r.hidePopover(),r.hidden=!0,o?.removeAttribute("data-tbw-size-open"),o=null)}function c(){n&&(n.value=String(Math.round(e.getSize(i))))}function u(t){Number.isFinite(t)&&(e.setSize(i,t),c())}return document.addEventListener("pointerdown",e=>{s&&r&&!e.composedPath().includes(r)&&d()},{capture:!0,signal:a.signal}),document.addEventListener("keydown",e=>{"Escape"===e.key&&d()},{capture:!0,signal:a.signal}),{get element(){return r},open(h,g){if(l)return;i=h,o?.removeAttribute("data-tbw-size-open"),o=g,g.setAttribute("data-tbw-size-open",""),r||(r=function(){const r=document.createElement("div");r.id=e.id,r.className="tbw-size-popover",r.setAttribute("popover","manual"),r.setAttribute("role","group"),r.hidden=!0;const o=Wn("Narrower","−"),s=Wn("Wider","+"),l=Wn("Reset size","Reset"),h=document.createElement("input");return h.type="number",h.className="tbw-size-popover-input",h.min="0",h.step="any",h.setAttribute("aria-label","Size in pixels"),o.addEventListener("click",()=>u(e.getSize(i)-t),{signal:a.signal}),s.addEventListener("click",()=>u(e.getSize(i)+t),{signal:a.signal}),l.addEventListener("click",()=>{e.reset(i),c()},{signal:a.signal}),h.addEventListener("change",()=>u(h.valueAsNumber),{signal:a.signal}),r.addEventListener("focusout",e=>{const t=e.relatedTarget;t instanceof Node&&!r.contains(t)&&d()},{signal:a.signal}),r.append(o,h,s,l),n=h,r}());const p=e.getHost(h)??document.body;r.parentNode!==p&&p.appendChild(r),r.setAttribute("aria-label",e.getLabel(h)),c(),r.hidden=!1,!s&&$n()&&r.showPopover(),s=!0,function(e){if(!r)return;const t=e.getBoundingClientRect(),i=r.getBoundingClientRect(),n=(e,t)=>Math.max(4,Math.min(e,t-4)),o=n(t.left+t.width/2-i.width/2,window.innerWidth-i.width),s=t.bottom+6,l=t.top-6-i.height,a=t.height>3*i.height;let d;d=!a&&s+i.height<=window.innerHeight?s:!a&&l>=4?l:n(t.top+t.height/2-i.height/2,window.innerHeight-i.height),r.style.left=`${Math.round(o)}px`,r.style.top=`${Math.round(d)}px`}(g),n?.focus()},close:d,dispose(){l=!0,d(),a.abort(),r?.remove(),r=null,n=null}}}function Vn(e,t){if(t)for(const i in t){const r=t[i];null!=r&&e.setAttribute(i,r)}}function Kn(e,t,i){const r=document.createElement(e);if(Vn(r,t),i)for(const n of i)null!=n&&("string"==typeof n?r.appendChild(document.createTextNode(n)):r.appendChild(n));return r}function jn(e,t){const i=document.createElement("div");return e&&(i.className=e),Vn(i,t),i}function Un(e,t,i){const r=document.createElement("button");return r.type="button",e&&(r.className=e),Vn(r,t),i&&("string"==typeof i?r.textContent=i:r.appendChild(i)),r}var Yn=document.createElement("template");function Zn(){return Yn.content.cloneNode(!0)}function Xn(e){const t=document.createDocumentFragment(),i=jn(e.hasShell?`${Ge.ROOT} has-shell`:Ge.ROOT);if(e.hasShell&&e.shellBody)e.shellHeader&&i.appendChild(e.shellHeader),i.appendChild(e.shellBody);else{const e=jn("tbw-grid-content");e.appendChild(Zn()),i.appendChild(e)}return t.appendChild(i),t}function Qn(e){const t=jn("tbw-shell-header",{part:"shell-header",role:"presentation"});if(e.title){const i=jn("tbw-shell-title");i.textContent=e.title,t.appendChild(i)}const i=jn("tbw-shell-content",{part:"shell-content",role:"presentation","data-light-dom-header-content":""});t.appendChild(i);const r=jn("tbw-shell-toolbar",{part:"shell-toolbar",role:"presentation"});for(const s of e.configButtons)s.hasRender&&r.appendChild(jn("tbw-toolbar-content-slot",{"data-toolbar-content":s.id}));for(const s of e.apiButtons)s.hasRender&&r.appendChild(jn("tbw-toolbar-content-slot",{"data-toolbar-content":s.id}));const n=e.configButtons.some(e=>e.hasRender)||e.apiButtons.some(e=>e.hasRender),o=e.hasPanels&&!1!==e.showToggle;if(n&&o&&r.appendChild(jn("tbw-toolbar-separator")),o){const t=Un(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&&q(t,e.toolPanelIcon),r.appendChild(t)}return t.appendChild(r),t}function Jn(e){const t=Un(e?"tbw-tool-panel-close tbw-tool-panel-close--inline":"tbw-tool-panel-close",{part:"tool-panel-close","data-panel-close":"",title:"Close panel","aria-label":"Close panel","aria-controls":"tbw-tool-panel"});return t.textContent="✕",t}function eo(){const e=jn("tbw-tool-panel-header",{part:"tool-panel-header"});return e.appendChild(Jn(!1)),e}function to(e,t,i,r){const n=!!e.title||!i,o=r&&n,s=jn(`tbw-accordion-section${e.isExpanded?" expanded":""}${i?" single":""}${o?" has-inline-close":""}`,{"data-section":e.id});if(n){const r=function(e,t,i){const r=Un("tbw-accordion-header",{"aria-expanded":String(e.isExpanded),"aria-controls":`tbw-section-${e.id}`});if(i&&r.setAttribute("aria-disabled","true"),e.icon){const t=Kn("span",{class:"tbw-accordion-icon"});q(t,e.icon),r.appendChild(t)}const n=Kn("span",{class:"tbw-accordion-title"});if(n.textContent=e.title??"",r.appendChild(n),!i){const e=Kn("span",{class:"tbw-accordion-chevron","data-icon":"expand"});void 0!==t.expandIcon&&q(e,t.expandIcon),r.appendChild(e)}return r}(e,t,i);if(o){const e=jn("tbw-accordion-header-row");e.appendChild(r),e.appendChild(Jn(!0)),s.appendChild(e)}else s.appendChild(r)}else r&&s.appendChild(eo());return s.appendChild(jn("tbw-accordion-content",{id:`tbw-section-${e.id}`,role:"presentation"})),s}function io(e){const t=e.mode??"overlay",i=jn("tbw-shell-body",{"data-mode":t}),r=jn("tbw-grid-content");r.appendChild(Zn());const n=e.panels.length>0?function(e,t){const i=1===e.panels.length,r=Kn("aside",{class:e.isPanelOpen?"tbw-tool-panel open":"tbw-tool-panel",part:"tool-panel","data-position":e.position,role:"presentation",id:"tbw-tool-panel",..."dropdown"===t?{popover:"manual"}:{}});r.appendChild(jn("tbw-tool-panel-resize",{"data-resize-handle":"","data-handle-position":"left"===e.position?"right":"left",role:"button",tabindex:"-1","aria-label":"Tool panel width — drag, or activate to set a width"}));const n=!0===e.showCloseButton&&i;e.showCloseButton&&!i&&r.appendChild(eo());const o=jn("tbw-tool-panel-content",{role:"presentation"}),s=jn("tbw-accordion");for(const l of e.panels)s.appendChild(to(l,e,i,n));return o.appendChild(s),r.appendChild(o),r}(e,t):null;return"left"===e.position&&n?(i.appendChild(n),i.appendChild(r)):(i.appendChild(r),n&&i.appendChild(n)),i}Yn.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';function ro(e){return e?"string"==typeof e?O(e):e.outerHTML:""}function no(e){return!!e?.header?.title||(!!e?.header?.toolbarContents?.length||(!!e?.toolPanels?.length||(!!e?.headerContents?.length||(!!e?.header?.lightDomContent?.length||!!e?.header?.hasToolButtonsContainer))))}function oo(e){return!1!==e?.header?.visible}function so(e,t){if(t.contains(e))return!0;const i=e.getRootNode();return i instanceof ShadowRoot&&i.host===t}function lo(e,t,i){const r=e.querySelector(".tbw-tool-panel"),n=e.querySelector("[data-resize-handle]"),o=e.querySelector(".tbw-shell-body");if(!r||!n||!o)return()=>{};const s=t?.toolPanel?.position??"right";let l=0,a=0,d=0,c=!1,u=!1,h=null,g=null;const p=()=>o.getBoundingClientRect().width-20,f=e=>{if(!c)return;e.preventDefault(),u=!0;const t="left"===s?e.clientX-l:l-e.clientX,i=Math.min(d,Math.max(200,a+t));r.style.width=`${i}px`},m=e=>{if(c&&(c=!1,h=null,n.classList.remove("resizing"),r.style.transition="",document.body.style.cursor="",document.body.style.userSelect="",e)){const e=r.getBoundingClientRect().width;i(e)}},w=e=>{c||0!==e.button&&"mouse"===e.pointerType||(e.preventDefault(),c=!0,u=!1,l=e.clientX,a=r.getBoundingClientRect().width,d=p(),n.classList.add("resizing"),r.style.transition="none",document.body.style.cursor="col-resize",document.body.style.userSelect="none",h=bn(e,n,{onMove:f,onEnd:()=>{const e=!u;m(!e),e&&(g??=Bn({id:"tbw-tool-panel-width-popover",step:32,getSize:e=>e.getBoundingClientRect().width,setSize:(e,t)=>{const r=Math.min(p(),Math.max(200,t));e.style.width=`${r}px`,i(r)},reset:e=>{e.style.width="",i(e.getBoundingClientRect().width)},getLabel:()=>"Tool panel width",getHost:e=>e.closest("tbw-grid, [data-tbw-grid]")}),g.open(r,n))},onCancel:()=>{r.style.width=`${a}px`,m(!1)}}))};return n.addEventListener("pointerdown",w),()=>{n.removeEventListener("pointerdown",w),h?.(),h=null,g?.dispose(),g=null}}function ao(e,t){const i=t.lightDomHeaderContent.length>0&&!t.lightDomContentMoved,r=t.headerContents.size>0;if(!i&&!r)return;const n=e.querySelector(".tbw-shell-content");if(!n)return;if(i){for(const e of t.lightDomHeaderContent)e.style.display="",n.appendChild(e);t.lightDomContentMoved=!0}const o=[...t.headerContents.values()].sort((e,t)=>(e.order??100)-(t.order??100));for(const s of o){const e=t.headerContentCleanups.get(s.id);e&&(e(),t.headerContentCleanups.delete(s.id));let i=n.querySelector(`[data-header-content="${s.id}"]`);i||(i=document.createElement("div"),i.setAttribute("data-header-content",s.id),n.appendChild(i));const r=s.render(i);r&&t.headerContentCleanups.set(s.id,r)}}function co(e,t,i){if(t.isPanelOpen)for(const[r,n]of t.toolPanels){const i=t.expandedSections.has(r),o=e.querySelector(`[data-section="${r}"]`),s=o?.querySelector(".tbw-accordion-content");if(!o||!s)continue;o.classList.toggle("expanded",i);const l=o.querySelector(".tbw-accordion-header");if(l&&l.setAttribute("aria-expanded",String(i)),i){if(0===s.children.length){const e=n.render(s);e&&t.panelCleanups.set(r,e)}}else{const e=t.panelCleanups.get(r);e&&(e(),t.panelCleanups.delete(r)),s.innerHTML=""}}}function uo(e,t){const i=e.querySelector("[data-panel-toggle]");i&&(i.classList.toggle("active",t.isPanelOpen),i.setAttribute("aria-pressed",String(t.isPanelOpen)))}function ho(e,t){const i=e.querySelector(".tbw-tool-panel");i&&(i.classList.toggle("open",t.isPanelOpen),t.isPanelOpen||(i.style.width=""))}var go="--tbw-tool-panel-anchor",po=0;function fo(){return"undefined"!=typeof CSS&&"function"==typeof CSS.supports&&CSS.supports("anchor-name",go)}function mo(e,t,i,r){const n=e.querySelector(".tbw-tool-panel");if(n){if(t.dropdownAnchorEl=i,n.dataset.anchor=r?"corner":"below",n.hasAttribute("popover")&&"function"==typeof n.showPopover)try{n.showPopover()}catch{}if(fo()){const e=`${go}-${++po}`;t.dropdownAnchorName=e,i.style.setProperty("anchor-name",e),n.style.setProperty("position-anchor",e),n.style.removeProperty("top"),n.style.removeProperty("left"),n.style.removeProperty("right")}else!function(e,t,i){const r=t.getBoundingClientRect(),n=e.getAttribute("data-position")??"right";if(e.style.position="fixed",e.style.top=`${Math.round((i?r.top:r.bottom)+4)}px`,"left"===n)e.style.left=`${Math.round(r.left)}px`,e.style.right="auto";else{const t="undefined"!=typeof window?window.innerWidth:0;e.style.left="auto",e.style.right=`${Math.round(t-r.right)}px`}}(n,i,r)}}function wo(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 bo(e,t,i){const r=void 0!==i?.toolPanel?ro(i.toolPanel):void 0,n=void 0!==i?.expand?ro(i.expand):void 0,o=void 0!==i?.collapse?ro(i.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:r,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:o,showCloseButton:!1===e.header?.visible&&!0!==e.toolPanel?.locked&&"dropdown"!==(e.toolPanel?.mode??"overlay"),panels:l.map(e=>({id:e.id,title:e.title,icon:ro(e.icon),isExpanded:t.expandedSections.has(e.id)}))}}}function vo(e,t,i,r){const n=e.querySelector(`.${Ge.ROOT}`),o=n?.querySelector(".tbw-grid-content");if(!n||!o)return function(e,t,i,r){const n=no(t),o=[];for(let s=e.firstChild;s;s=s.nextSibling)1===s.nodeType&&s.classList.contains(Ge.ROOT)||o.push(s);e.replaceChildren();for(const s of o)e.appendChild(s);if(n){const{headerOptions:n,bodyOptions:o}=bo(t,i,r),s=Xn({hasShell:!0,shellHeader:oo(t)?Qn(n):void 0,shellBody:io(o)});e.appendChild(s)}else{const t=Xn({hasShell:!1});e.appendChild(t)}return n}(e,t,i,r);o.remove();const s=no(t);if(n.replaceChildren(),s){n.className=`${Ge.ROOT} has-shell`;const{headerOptions:e,bodyOptions:s}=bo(t,i,r),l=oo(t)?Qn(e):void 0,a=io(s),d=a.querySelector(".tbw-grid-content");d&&d.replaceWith(o),l&&n.appendChild(l),n.appendChild(a)}else n.className=Ge.ROOT,n.appendChild(o);return s}function yo(e,t){let i=!1;const r={get isInitialized(){return i},setInitialized(e){i=e},get isPanelOpen(){return e.isPanelOpen},get expandedSections(){return[...e.expandedSections]},openToolPanel(i,n){if(0===e.toolPanels.size)return void A("TBW071","No tool panels registered",t.id);let o;if(void 0!==i&&(e.toolPanels.has(i)?o=i:A(y,`Tool panel "${i}" not found`,t.id)),e.isPanelOpen&&o&&e.expandedSections.has(o))return;if(e.isPanelOpen&&o&&!e.expandedSections.has(o))return void r.toggleToolPanelSection(o);if(e.isPanelOpen)return;if(e.isPanelOpen=!0,0===e.expandedSections.size&&e.toolPanels.size>0)if(o)e.expandedSections.add(o);else{const i=t.effectiveConfig?.shell?.toolPanel?.defaultOpen;if(i&&e.toolPanels.has(i))e.expandedSections.add(i);else{const t=[...e.toolPanels.values()].sort((e,t)=>(e.order??100)-(t.order??100))[0];t&&e.expandedSections.add(t.id)}}else if(o&&!e.expandedSections.has(o)){for(const t of[...e.expandedSections])e.expandedSections.delete(t);e.expandedSections.add(o)}const s=t._renderRoot;if(uo(s,e),ho(s,e),co(s,e,t._accordionIcons),"dropdown"===t.effectiveConfig?.shell?.toolPanel?.mode){const{el:i,corner:r}=function(e){if(e)return{el:e,corner:!1};const i=t._renderRoot.querySelector("[data-panel-toggle]");return i?{el:i,corner:!1}:{el:t._hostElement,corner:!0}}(n?.anchor);mo(s,e,i,r)}t._emit("tool-panel-open",{sections:r.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 i=t._renderRoot;uo(i,e),ho(i,e),"dropdown"===t.effectiveConfig?.shell?.toolPanel?.mode&&function(e,t){const i=e.querySelector(".tbw-tool-panel");if(i){if(i.hasAttribute("popover")&&"function"==typeof i.hidePopover)try{i.hidePopover()}catch{}i.style.removeProperty("position-anchor"),i.style.removeProperty("position"),i.style.removeProperty("top"),i.style.removeProperty("left"),i.style.removeProperty("right"),delete i.dataset.anchor}t.dropdownAnchorEl&&(t.dropdownAnchorEl.style.removeProperty("anchor-name"),t.dropdownAnchorEl=null),t.dropdownAnchorName=null}(i,e),t._emit("tool-panel-close",{})},toggleToolPanel(t){e.isPanelOpen?r.closeToolPanel():r.openToolPanel(void 0,t)},reanchorOpenDropdown(){if(!e.isPanelOpen)return;if("dropdown"!==t.effectiveConfig?.shell?.toolPanel?.mode)return;const i=e.dropdownAnchorEl;if(i&&i.isConnected&&e.dropdownAnchorName&&i.style.getPropertyValue("anchor-name")===e.dropdownAnchorName)return;if(!e.dropdownAnchorName&&i&&i.isConnected&&i!==t._hostElement&&"below"===t._renderRoot.querySelector(".tbw-tool-panel")?.dataset.anchor)return;const r=t._renderRoot.querySelector("[data-panel-toggle]");if(r&&r!==t._hostElement){if(e.dropdownAnchorName&&fo()&&function(e,t,i){const r=t.dropdownAnchorName;if(!r)return!1;const n=e.querySelector(".tbw-tool-panel");if(!n)return!1;const o=t.dropdownAnchorEl;if(o&&o!==i&&o.style.removeProperty("anchor-name"),i.style.setProperty("anchor-name",r),n.style.setProperty("position-anchor",r),n.style.removeProperty("top"),n.style.removeProperty("left"),n.style.removeProperty("right"),n.dataset.anchor="below",t.dropdownAnchorEl=i,n.hasAttribute("popover")&&"function"==typeof n.showPopover)try{n.showPopover()}catch{}return!0}(t._renderRoot,e,r))return;mo(t._renderRoot,e,r,!1)}else i!==t._hostElement||mo(t._renderRoot,e,t._hostElement,!0)},toggleToolPanelSection(i){const r=e.toolPanels.get(i);if(!r)return void A(y,`Tool panel section "${i}" not found`,t.id);if(1===e.toolPanels.size)return;const n=t._renderRoot,o=e.expandedSections.has(i);if(o){const t=e.panelCleanups.get(i);t&&(t(),e.panelCleanups.delete(i)),r.onClose?.(),e.expandedSections.delete(i),Co(n,i,!1)}else{for(const[t,r]of e.toolPanels)if(t!==i&&e.expandedSections.has(t)){const i=e.panelCleanups.get(t);i&&(i(),e.panelCleanups.delete(t)),r.onClose?.(),e.expandedSections.delete(t),Co(n,t,!1);const o=n.querySelector(`[data-section="${t}"] .tbw-accordion-content`);o&&(o.innerHTML="")}e.expandedSections.add(i),Co(n,i,!0),function(e,t,i){const r=t.toolPanels.get(i);if(!r?.render)return;const n=e.querySelector(`[data-section="${i}"] .tbw-accordion-content`);if(!n)return;const o=r.render(n);o&&t.panelCleanups.set(i,o)}(n,e,i)}t._emit("tool-panel-section-toggle",{id:i,expanded:!o})},getToolPanels:()=>[...e.toolPanels.values()],registerToolPanel(r){e.toolPanels.has(r.id)?A(C,`Tool panel "${r.id}" already registered`,t.id):(e.toolPanels.set(r.id,r),(i||t._hostElement.isConnected)&&t.refreshShellHeader?.())},unregisterToolPanel(r){if(e.expandedSections.has(r)){const t=e.panelCleanups.get(r);t&&(t(),e.panelCleanups.delete(r)),e.expandedSections.delete(r)}e.toolPanels.delete(r),(i||t._hostElement.isConnected)&&t.refreshShellHeader?.()},getHeaderContents:()=>[...e.headerContents.values()],registerHeaderContent(r){e.headerContents.has(r.id)?A(x,`Header content "${r.id}" already registered`,t.id):(e.headerContents.set(r.id,r),i?ao(t._renderRoot,e):t._hostElement.isConnected&&t.refreshShellHeader?.())},unregisterHeaderContent(i){const r=e.headerContentCleanups.get(i);r&&(r(),e.headerContentCleanups.delete(i)),e.headerContents.get(i)?.onDestroy?.(),e.headerContents.delete(i),t._renderRoot.querySelector(`[data-header-content="${i}"]`)?.remove()},getToolbarContents:()=>[...e.toolbarContents.values()].sort((e,t)=>(e.order??0)-(t.order??0)),registerToolbarContent(r){e.toolbarContents.has(r.id)?A("TBW075",`Toolbar content "${r.id}" already registered`,t.id):(e.toolbarContents.set(r.id,r),(i||t._hostElement.isConnected)&&t.refreshShellHeader?.())},unregisterToolbarContent(r){const n=e.toolbarContentCleanups.get(r);n&&(n(),e.toolbarContentCleanups.delete(r));const o=e.toolbarContents.get(r);o?.onDestroy&&o.onDestroy(),e.toolbarContents.delete(r),i&&t.refreshShellHeader?.()}};return r}function Co(e,t,i){const r=e.querySelector(`[data-section="${t}"]`);r&&r.classList.toggle("expanded",i)}var xo=class extends Y{name="shell";styles='@layer tbw-base{tbw-grid .tbw-shell-header{min-height:var(--tbw-shell-header-height);background:var(--tbw-shell-header-bg);border-bottom:1px solid var(--tbw-shell-header-border);flex-shrink:0;align-items:center;gap:8px;padding:0 8px;display:flex}tbw-grid .tbw-shell-title{font-size:var(--tbw-shell-title-font-size);font-weight:var(--tbw-shell-title-font-weight);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}tbw-grid .tbw-shell-content{flex:1;align-items:center;gap:12px;min-width:0;display:flex;overflow:hidden}tbw-grid .tbw-shell-toolbar{align-items:center;gap:var(--tbw-toolbar-button-gap);flex-shrink:0;display:flex}tbw-grid .tbw-toolbar-btn{width:var(--tbw-toolbar-button-size);height:var(--tbw-toolbar-button-size);border-radius:var(--tbw-border-radius);color:var(--tbw-color-fg);cursor:pointer;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease), border-color var(--tbw-transition-duration) var(--tbw-transition-ease);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;font-size:16px;display:inline-flex}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{background:var(--tbw-color-border);width:1px;height:20px;margin:0 4px}tbw-grid .tbw-shell-body{flex:1;min-height:0;display:flex;position:relative;overflow:visible}tbw-grid .tbw-tool-panel{overflow-clip-margin:var(--tbw-tool-panel-resize-overhang,12px);background:var(--tbw-tool-panel-bg);border-left:1px solid var(--tbw-tool-panel-border);width:0;transition:width var(--tbw-tool-panel-transition);z-index:var(--tbw-z-layer-toolpanel,31);box-shadow:-2px 0 8px var(--tbw-color-shadow);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0;overflow:clip}tbw-grid .tbw-tool-panel[data-position=left]{border-left:none;border-right:1px solid var(--tbw-tool-panel-border);box-shadow:2px 0 8px var(--tbw-color-shadow);left:0;right:auto}tbw-grid .tbw-tool-panel.open{width:min(var(--tbw-tool-panel-width), 100% - 20px);max-width:calc(100% - 20px)}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel{box-shadow:none;z-index:auto;border-left:none;border-right:none;flex-shrink:0;position:relative;inset:auto}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[popover]{width:var(--tbw-tool-panel-width);border:1px solid var(--tbw-tool-panel-border);border-radius:var(--tbw-border-radius,6px);max-width:calc(100vw - 16px);height:auto;max-height:min(70vh,480px);box-shadow:0 8px 24px var(--tbw-color-shadow);margin:4px 0 0;padding:0;transition:none;display:none;position:fixed;inset:auto;overflow:hidden auto}:is(tbw-grid .tbw-tool-panel[popover]:popover-open,tbw-grid .tbw-tool-panel[popover].open){width:var(--tbw-tool-panel-width);display:flex}tbw-grid .tbw-tool-panel[popover] .tbw-tool-panel-resize{display:none}@supports (anchor-name:--x){tbw-grid .tbw-tool-panel[popover]{top:anchor(bottom);right:anchor(right);position-try-fallbacks:flip-block, flip-inline, flip-block flip-inline;left:auto}tbw-grid .tbw-tool-panel[popover][data-anchor=corner]{top:anchor(top)}tbw-grid .tbw-tool-panel[popover][data-position=left]{left:anchor(left);right:auto}}tbw-grid .tbw-tool-panel-resize{width:calc(var(--tbw-tool-panel-resize-overhang,12px) * 2);cursor:col-resize;z-index:10;touch-action:none;-webkit-user-select:none;user-select:none;background:0 0;position:absolute;top:0;bottom:0}tbw-grid .tbw-tool-panel-resize:before{content:"";width:6px;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease);background:0 0;position:absolute;top:0;bottom:0}tbw-grid .tbw-tool-panel-resize[data-handle-position=left]{left:calc(3px - var(--tbw-tool-panel-resize-overhang,12px))}tbw-grid .tbw-tool-panel-resize[data-handle-position=left]:before{left:calc(var(--tbw-tool-panel-resize-overhang,12px) - 3px)}tbw-grid .tbw-tool-panel-resize[data-handle-position=right]{right:calc(3px - var(--tbw-tool-panel-resize-overhang,12px))}tbw-grid .tbw-tool-panel-resize[data-handle-position=right]:before{right:calc(var(--tbw-tool-panel-resize-overhang,12px) - 3px)}tbw-grid .tbw-tool-panel-resize:hover:before,tbw-grid .tbw-tool-panel-resize.resizing:before,tbw-grid .tbw-tool-panel-resize[data-tbw-size-open]:before{background:var(--tbw-color-accent)}tbw-grid .tbw-tool-panel:not(.open) .tbw-tool-panel-resize{display:none}tbw-grid .tbw-tool-panel-header{min-height:var(--tbw-tool-panel-header-height);border-bottom:1px solid var(--tbw-tool-panel-border);flex-shrink:0;justify-content:flex-end;align-items:center;padding:0 12px;display:flex}tbw-grid .tbw-tool-panel-title{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}tbw-grid .tbw-tool-panel-close{border-radius:var(--tbw-border-radius);width:24px;height:24px;color:var(--tbw-color-fg-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;font-size:14px;display:inline-flex}tbw-grid .tbw-tool-panel-close:hover{background:var(--tbw-color-row-hover);color:var(--tbw-color-fg)}tbw-grid .tbw-accordion-header-row{align-items:stretch;display:flex}tbw-grid .tbw-accordion-header-row .tbw-accordion-header{flex:1;min-width:0}tbw-grid .tbw-tool-panel-close--inline{flex-shrink:0;align-self:center;margin-inline-end:8px}tbw-grid .tbw-tool-panel-content{flex:1;overflow:auto}tbw-grid .tbw-accordion{flex-direction:column;gap:0;display:flex}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:0 0}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{width:100%;color:var(--tbw-color-fg);text-align:start;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;gap:8px;padding:10px 12px;font-size:13px;font-weight:600;display:flex}tbw-grid .tbw-accordion-header:hover{background:var(--tbw-color-row-hover)}tbw-grid .tbw-accordion-chevron{width:16px;height:16px;color:var(--tbw-color-fg-muted);flex-shrink:0;justify-content:center;align-items:center;font-size:10px;transition:transform .15s;display:inline-flex}tbw-grid .tbw-accordion-icon{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;font-size:14px;display:inline-flex}tbw-grid .tbw-accordion-title{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}tbw-grid .tbw-accordion-content{display:none}}';#Mr;#Ir;#Lr;#Dr;#Pr;#Fr;#Hr;#Gr=!1;get hasState(){return void 0!==this.#Mr}ensureState(e){if(this.#Mr)return;const t={toolPanels:/* @__PURE__ */new Map,headerContents:/* @__PURE__ */new Map,toolbarContents:/* @__PURE__ */new Map,hasToolButtonsContainer:!1,lightDomHeaderContent:[],lightDomTitle:null,lightDomToolPanelIds:/* @__PURE__ */new Set,adapterBoundToolPanelIds:/* @__PURE__ */new Set,lightDomToolbarContentIds:/* @__PURE__ */new Set,apiToolPanelIds:/* @__PURE__ */new Set,apiHeaderContentIds:/* @__PURE__ */new Set,isPanelOpen:!1,expandedSections:/* @__PURE__ */new Set,headerContentCleanups:/* @__PURE__ */new Map,panelCleanups:/* @__PURE__ */new Map,toolbarContentCleanups:/* @__PURE__ */new Map,lightDomContentMoved:!1,dropdownAnchorEl:null,dropdownAnchorName:null};this.#Mr=t,this.#Ir=yo(t,e)}get shellState(){return this.#Mr}get shellController(){return this.#Ir}get isToolPanelOpen(){return!!this.hasState&&this.shellController.isPanelOpen}get expandedToolPanelSections(){return this.hasState?this.shellController.expandedSections:[]}openToolPanel(e,t){this.shellController?.openToolPanel(e,t)}closeToolPanel(){this.shellController?.closeToolPanel()}toggleToolPanel(e){this.shellController?.toggleToolPanel(e)}toggleToolPanelSection(e){this.shellController?.toggleToolPanelSection(e)}getToolPanels(){return this.hasState?this.shellController.getToolPanels():[]}registerToolPanel(e){this.hasState&&(this.shellState.apiToolPanelIds.add(e.id),this.shellController.registerToolPanel(e))}unregisterToolPanel(e){this.hasState&&(this.shellState.apiToolPanelIds.delete(e),this.shellController.unregisterToolPanel(e))}getHeaderContents(){return this.hasState?this.shellController.getHeaderContents():[]}registerHeaderContent(e){this.hasState&&(this.shellState.apiHeaderContentIds.add(e.id),this.shellController.registerHeaderContent(e))}unregisterHeaderContent(e){this.hasState&&(this.shellState.apiHeaderContentIds.delete(e),this.shellController.unregisterHeaderContent(e))}getToolbarContents(){return this.hasState?this.shellController.getToolbarContents():[]}registerToolbarContent(e){this.shellController?.registerToolbarContent(e)}unregisterToolbarContent(e){this.shellController?.unregisterToolbarContent(e)}attach(e){super.attach(e),this.ensureState(e);const t=()=>this.syncLightDom();this.#Fr=t,e._registerLightDomHandler("tbw-grid-header",t),e._registerLightDomHandler("tbw-grid-tool-buttons",t),e._registerLightDomHandler("tbw-grid-tool-panel",t)}#zr(e){const t=e._hostElement;!function(e,t){const i=e.querySelector("tbw-grid-header");if(!i)return;if(!t.lightDomTitle){const e=i.getAttribute("title");e&&(t.lightDomTitle=e)}const r=i.querySelectorAll("tbw-grid-header-content");r.length>0&&0===t.lightDomHeaderContent.length&&(t.lightDomHeaderContent=Array.from(r)),i.style.display="none"}(t,this.shellState),function(e,t,i){const r=e.querySelector(":scope > tbw-grid-tool-buttons");if(!r)return;t.hasToolButtonsContainer=!0;const n="light-dom-toolbar-content";if(t.lightDomToolbarContentIds.has(n))return;const o={id:n,order:0,render:i?.(r)??(e=>{for(;r.firstChild;)e.appendChild(r.firstChild);return()=>{for(;e.firstChild;)r.appendChild(e.firstChild)}})};t.toolbarContents.set(n,o),t.lightDomToolbarContentIds.add(n),r.style.display="none"}(t,this.shellState),function(e,t,i){e.querySelectorAll(":scope > tbw-grid-tool-panel").forEach(e=>{const r=e,n=r.getAttribute("id"),o=r.getAttribute("title")??void 0;if(!n)return void A("TBW070",`Tool panel missing required id attribute: title="${o??""}"`);const s=r.getAttribute("icon")??void 0,l=r.getAttribute("tooltip")??void 0,a=parseInt(r.getAttribute("order")??"100",10);let d;const c=i?.(r);if(c)d=c;else{const e=r.innerHTML.trim();d=t=>{const i=document.createElement("div");return q(i,e),t.appendChild(i),()=>i.remove()}}const u=t.toolPanels.get(n);if(u&&!t.lightDomToolPanelIds.has(n))return A(C,`Tool panel "${n}" is already provided by a plugin or the grid API; ignoring the matching light-DOM <tbw-grid-tool-panel>.`),void(r.style.display="none");if(u){if(c){const e=!t.adapterBoundToolPanelIds.has(n),i=u.title!==o||u.order!==a||u.icon!==s||u.tooltip!==l;if(u.render=d,u.title=o,u.order=a,u.icon=s,u.tooltip=l,t.adapterBoundToolPanelIds.add(n),e||i){const e=t.panelCleanups.get(n);e&&(e(),t.panelCleanups.delete(n))}}return}const h={id:n,title:o,icon:s,tooltip:l,order:a,render:d};t.toolPanels.set(n,h),t.lightDomToolPanelIds.add(n),c&&t.adapterBoundToolPanelIds.add(n),r.style.display="none"})}(t,this.shellState,e._getToolPanelRendererFactory())}syncLightDom(){const e=this.grid;if(!e||!this.hasState)return;const t=this.shellState,i=t.lightDomTitle,r=t.hasToolButtonsContainer;this.#zr(e);const n=t.lightDomTitle,o=t.hasToolButtonsContainer;(n&&!i||o&&!r)&&(e._requestConfigMerge(),e._renderRoot.querySelector(".tbw-shell-header")&&(wo(t),this.afterStructuralRender()))}parseLightDom(){const e=this.grid;e&&this.hasState&&this.#zr(e)}beforeStructuralRender(){this.hasState&&wo(this.shellState)}needsStructuralRerender(){const e=this.grid;if(!e||!this.hasState)return!1;const t=e._renderRoot,i=!!t.querySelector(".has-shell"),r=!!t.querySelector(".tbw-tool-panel"),n=t.querySelectorAll(".tbw-accordion-section").length,o=t.querySelector(".tbw-tool-panel")?.dataset.position??"right",s=t.querySelector(".tbw-shell-body")?.dataset.mode??"overlay",l=e.effectiveConfig?.shell;return i!==no(l)||!r&&(l?.toolPanels?.length??0)>0||r&&(l?.toolPanels?.length??0)!==n||r&&o!==(l?.toolPanel?.position??"right")||r&&s!==(l?.toolPanel?.mode??"overlay")}#Or(e){const t=this.shellState,i=e._hostElement.id;for(const o of[...t.toolPanels.keys()])t.lightDomToolPanelIds.has(o)||t.apiToolPanelIds.has(o)||(t.panelCleanups.get(o)?.(),t.panelCleanups.delete(o),t.toolPanels.delete(o));for(const o of[...t.headerContents.keys()])t.apiHeaderContentIds.has(o)||(t.headerContentCleanups.get(o)?.(),t.headerContentCleanups.delete(o),t.headerContents.delete(o));const{toolPanels:r,headerContents:n}=e._pluginShellContributions();for(const o of r)t.apiToolPanelIds.has(o.id)||(t.lightDomToolPanelIds.has(o.id)&&(A(C,`Tool panel "${o.id}" is provided by a plugin; ignoring the matching light-DOM <tbw-grid-tool-panel>.`,i),t.panelCleanups.get(o.id)?.(),t.panelCleanups.delete(o.id),t.lightDomToolPanelIds.delete(o.id),t.adapterBoundToolPanelIds.delete(o.id)),t.toolPanels.set(o.id,o));for(const o of n)t.apiHeaderContentIds.has(o.id)||(t.headerContents.has(o.id)&&(A(x,`Header content "${o.id}" is provided by a plugin; ignoring the matching light-DOM definition.`,i),t.headerContentCleanups.get(o.id)?.(),t.headerContentCleanups.delete(o.id)),t.headerContents.set(o.id,o))}processConfig(e){if(!this.hasState)return;const t=this.shellState,i=this.grid;i&&(this.#zr(i),this.#Or(i));const r=this.resolvedConfig;if(e.shell={...r,...e.shell},e.shell.header={...r.header,...e.shell.header},t.lightDomTitle&&!e.shell.header.title&&(e.shell.header.title=t.lightDomTitle),t.lightDomHeaderContent?.length>0&&(e.shell.header.lightDomContent=t.lightDomHeaderContent),t.hasToolButtonsContainer&&(e.shell.header.hasToolButtonsContainer=!0),t.toolPanels.size>0){const i=Array.from(t.toolPanels.values());i.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.toolPanels=i}if(t.headerContents.size>0){const i=Array.from(t.headerContents.values());i.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.headerContents=i}const n=Array.from(t.toolbarContents.values()),o=this.grid?._sourceConfig?.shell?.header?.toolbarContents??[],s=new Set(o.map(e=>e.id)),l=[...o];for(const a of n)s.has(a.id)||l.push(a);l.sort((e,t)=>(e.order??0)-(t.order??0)),e.shell.header.toolbarContents=l}afterStructuralRender(){const e=this.grid;if(!e||!this.hasState)return;const t=this.shellState;vo(e._renderRoot,e.effectiveConfig?.shell,{isPanelOpen:t.isPanelOpen,expandedSections:t.expandedSections},e.effectiveConfig?.icons)&&(this.#Nr(e),this.shellController.setInitialized(!0),this.#qr(e))}afterRender(){const e=this.grid;if(!e||!this.hasState)return;const t=this.shellState;this.#$r(e),t.isPanelOpen&&co(e._renderRoot,t),t.isPanelOpen?(this.shellController.reanchorOpenDropdown(),this.#Wr(e)):this.#Br()}#$r(e){const t=e._renderRoot.querySelector(".tbw-shell-header");if(!t)return;const i=e.effectiveConfig?.shell?.header?.title??this.shellState.lightDomTitle;let r=t.querySelector(".tbw-shell-title");i?(r||(r=document.createElement("h2"),r.className="tbw-shell-title",r.setAttribute("part","shell-title"),t.insertBefore(r,t.firstChild)),r.textContent=i):r&&r.remove()}#Wr(e){"dropdown"===e.effectiveConfig?.shell?.toolPanel?.mode?"undefined"!=typeof MutationObserver&&(this.#Hr||(this.#Hr=new MutationObserver(()=>{this.grid&&this.hasState&&this.shellState.isPanelOpen?this.shellController.reanchorOpenDropdown():this.#Br()})),this.#Gr||(this.#Hr.observe(e._renderRoot,{childList:!0,subtree:!0}),this.#Gr=!0)):this.#Br()}#Br(){this.#Hr&&this.#Gr&&(this.#Hr.disconnect(),this.#Gr=!1)}#qr(e){const t=this.shellState,i=e._renderRoot,r=e.effectiveConfig?.shell;ao(i,t),function(e,t,i){const r=t?.header?.toolbarContents??[],n=[...i.toolbarContents.values()],o=new Set(r.map(e=>e.id)),s=[...r];for(const l of n)o.has(l.id)||s.push(l);for(const l of s){if(i.toolbarContentCleanups.has(l.id))continue;if(!l.render)continue;const t=e.querySelector(`[data-toolbar-content="${l.id}"]`);if(!t)continue;const r=l.render(t);r&&i.toolbarContentCleanups.set(l.id,r)}}(i,r,t);const n=r?.toolPanel,o=n?.defaultOpen;o&&t.toolPanels.has(o)&&t.expandedSections.add(o);const s=!0===n?.locked||"open"===n?.initialState||void 0===n?.initialState&&void 0!==o&&t.toolPanels.has(o);!t.isPanelOpen&&t.toolPanels.size>0&&s&&this.openToolPanel(),t.isPanelOpen&&(ho(i,t),co(i,t,(e.effectiveConfig,e.effectiveConfig)),uo(i,t),this.shellController.reanchorOpenDropdown())}#Nr(e){const t=e._renderRoot,i=e.effectiveConfig?.shell,r=this.shellState;!function(e,t,i,r){const n=e.querySelector(".tbw-shell-toolbar");n&&n.addEventListener("click",e=>{e.target.closest("[data-panel-toggle]")&&r.onPanelToggle()});const o=e.querySelector(".tbw-tool-panel");o&&r.onPanelClose&&o.addEventListener("click",e=>{e.target.closest("[data-panel-close]")&&r.onPanelClose()});const s=e.querySelector(".tbw-accordion");s&&s.addEventListener("click",e=>{const t=e.target.closest(".tbw-accordion-header");if(t){const e=t.closest("[data-section]")?.getAttribute("data-section");e&&r.onSectionToggle(e)}})}(t,0,0,{onPanelToggle:()=>this.toggleToolPanel(),onSectionToggle:e=>this.toggleToolPanelSection(e),onPanelClose:()=>this.closeToolPanel()}),this.#Lr?.(),this.#Lr=lo(t,i,t=>{e._hostElement.style.setProperty("--tbw-tool-panel-width",`${t}px`)}),this.#Dr?.(),this.#Dr=function(e,t,i,r){const n=t?.toolPanel?.mode;if("dropdown"!==n&&!t?.toolPanel?.closeOnClickOutside)return()=>{};if("push"===n)return()=>{};const o=t=>{if(!i.isPanelOpen)return;const n=i.dropdownAnchorEl;for(const i of t.composedPath()){if(null!=n&&i===n)return;if(i instanceof Element&&(i.classList?.contains("tbw-tool-panel")||i.matches?.("[data-panel-toggle]"))&&so(i,e))return}r()};return document.addEventListener("mousedown",o),()=>document.removeEventListener("mousedown",o)}(e._hostElement,i,r,()=>this.closeToolPanel()),this.#Pr?.(),this.#Pr=function(e,t,i){if("push"===e?.toolPanel?.mode)return()=>{};const r=e=>{"Escape"!==e.key||e.defaultPrevented||t.isPanelOpen&&i()};return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)}(i,r,()=>this.closeToolPanel())}#Vr(){this.#Lr?.(),this.#Lr=void 0,this.#Dr?.(),this.#Dr=void 0,this.#Pr?.(),this.#Pr=void 0}detach(){super.detach()}disposeShellState(){this.#Vr(),this.#Br(),this.#Hr=void 0;const e=this.grid;e&&this.#Fr&&(e._unregisterLightDomHandler("tbw-grid-header"),e._unregisterLightDomHandler("tbw-grid-tool-buttons"),e._unregisterLightDomHandler("tbw-grid-tool-panel"),this.#Fr=void 0),this.#Mr&&(!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)e.toolPanels.get(t)?.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.#Mr),this.#Ir?.setInitialized(!1))}};we("shell",e=>new xo("boolean"==typeof e?{}:e??{}));var Ro=class extends Y{name="stickyRows";styles="@layer tbw-plugins{.tbw-sticky-rows{z-index:var(--tbw-z-layer-sticky-rows,22);background:var(--tbw-color-bg,var(--tbw-color-panel-bg));width:-moz-fit-content;width:fit-content;min-width:100%;display:block;position:absolute;top:0;left:0;overflow:visible}.tbw-sticky-rows:empty{display:none}.tbw-sticky-rows .tbw-sticky-row{box-shadow:0 1px 0 var(--tbw-color-border);background:var(--tbw-color-bg,var(--tbw-color-panel-bg))}.tbw-sticky-rows[data-mode=push] .tbw-sticky-row{will-change:transform}}";get defaultConfig(){return{mode:"push",maxStacked:1/0}}container=null;stickyIndices=[];cloneCache=/* @__PURE__ */new Map;displayedIndices=[];templateClone=null;lastPushOffset=0;settlePassScheduled=!1;detach(){this.container?.remove(),this.container=null,this.cloneCache.clear(),this.templateClone=null,this.stickyIndices=[],this.displayedIndices=[],this.lastPushOffset=0,this.settlePassScheduled=!1}afterRender(){this.settlePassScheduled=!1,this.recomputeStickyIndices(),this.ensureContainer(),this.primeCloneCache(),this.refreshClonesInWindow(),this.refreshDisplay()}onScrollRender(){this.primeCloneCache(),this.refreshDisplay(),this.maybeScheduleSettlePass()}onScroll(e){this.refreshDisplay(e.scrollTop)}getVerticalScrollOffsets(e){if(this.container&&0!==this.displayedIndices.length)return null!=e&&this.displayedIndices.includes(e)?{top:0,bottom:0,skipScroll:!0}:{top:this.container.offsetHeight,bottom:0}}maybeScheduleSettlePass(){this.settlePassScheduled||this.stickyIndices.some(e=>null!=this.findRenderedRow(e))&&(this.settlePassScheduled=!0,this.requestAfterRender())}resolvePredicate(){const e=this.config.isSticky;if("function"==typeof e)return e;if("string"==typeof e){const t=e;return e=>null!=e&&"object"==typeof e&&Boolean(e[t])}return()=>!1}recomputeStickyIndices(){const e=this.rows,t=this.resolvePredicate(),i=[];for(let r=0;r<e.length;r++)t(e[r],r)&&i.push(r);(i.length!==this.stickyIndices.length||i.some((e,t)=>e!==this.stickyIndices[t]))&&this.cloneCache.clear(),this.stickyIndices=i}ensureContainer(){const e=this.gridElement;if(!e)return;const t=e.querySelector(".rows-viewport");t?this.container&&t.contains(this.container)||(this.container=document.createElement("div"),this.container.className="tbw-sticky-rows",this.container.setAttribute("role","presentation"),this.container.dataset.mode=this.config.mode??"push",this.config.className&&this.container.classList.add(this.config.className),t.insertBefore(this.container,t.firstChild)):this.container=null}offsetOf(e){const t=this.getVirtualState(),i=t?.positionCache;return i&&i[e]?i[e].offset:e*(t?.rowHeight??28)}heightOf(e){const t=this.getVirtualState(),i=t?.positionCache;return i&&i[e]?i[e].height:t?.rowHeight??28}getVirtualState(){return this.grid?._virtualization}getCurrentScrollTop(){const e=this.getVirtualState(),t=e?.container?.scrollTop;return"number"==typeof t?t:"number"!=typeof e?.start||"number"!=typeof e?.rowHeight||e.positionCache&&e.positionCache.length?e?.positionCache&&"number"==typeof e.start&&e.positionCache[e.start]?e.positionCache[e.start].offset:0:e.start*e.rowHeight}computeDisplay(e){if("stack"===this.config.mode){const t=this.config.maxStacked??1/0,i=[];let r=0;for(const n of this.stickyIndices)if(i.length<t){if(!(this.offsetOf(n)<e+r))break;i.push(n),r+=this.heightOf(n)}else{const t=this.heightOf(i[0]);if(!(this.offsetOf(n)<e+r-t))break;i.shift(),r-=t,i.push(n),r+=this.heightOf(n)}if(i.length===t&&i.length>0){const t=this.findNextSticky(i[i.length-1]);if(null!=t){const n=this.offsetOf(t)-(e+r);if(n<0){const e=this.heightOf(i[0]);return{indices:i,pushOffset:Math.min(-n,e)}}}}return{indices:i,pushOffset:0}}const t=[];for(const o of this.stickyIndices){if(!(this.offsetOf(o)<e))break;t.push(o)}if(0===t.length)return{indices:t,pushOffset:0};const i=t[t.length-1],r=this.findNextSticky(i);let n=0;if(null!=r){const t=this.heightOf(i),o=this.offsetOf(r)-e;o<t&&(n=t-Math.max(0,o))}return{indices:[i],pushOffset:n}}findRenderedRow(e){const t=this.gridElement;return t?t.querySelector(`.rows .data-grid-row .cell[data-row="${e}"]`)?.parentElement??null:null}buildClone(e){const t=this.findRenderedRow(e);if(!t)return this.cloneCache.get(e)??null;const i=t.cloneNode(!0);return i.classList.add("tbw-sticky-row"),i.removeAttribute("aria-rowindex"),i.setAttribute("aria-hidden","true"),i.dataset.stickyRow=String(e),i.classList.remove("row-focus","cell-focus"),i.querySelectorAll(".cell-focus, .row-focus").forEach(e=>e.classList.remove("cell-focus","row-focus")),i.removeAttribute("tabindex"),i.querySelectorAll("[tabindex]").forEach(e=>e.removeAttribute("tabindex")),this.templateClone=i.cloneNode(!0),this.cloneCache.set(e,i),i}synthesizeClone(e){const t=this.templateClone,i=this.rows[e];if(!t||null==i)return null;const r=t.cloneNode(!0),n=Array.from(r.querySelectorAll(".cell"));if(n.some(e=>null!=e.firstElementChild))return null;r.dataset.stickyRow=String(e),r.dataset.syntheticStickyRow="",r.removeAttribute("aria-rowindex");const o=this.visibleColumns;for(const s of n){s.setAttribute("data-row",String(e));const t=s.getAttribute("data-field"),r=t?o.find(e=>e.field===t):void 0,n=r?c(i,r,e):null;s.textContent=null==n?"":String(n)}return r}refreshClonesInWindow(){if(this.displayedIndices.length)for(const e of this.displayedIndices)if(this.findRenderedRow(e)){const t=this.buildClone(e),i=this.container?.querySelector(`[data-sticky-row="${e}"]`);t&&i&&i!==t&&i.replaceWith(t)}}primeCloneCache(){if(this.stickyIndices.length)for(const e of this.stickyIndices)this.findRenderedRow(e)&&this.buildClone(e)}refreshDisplay(e){if(!this.container)return;const t=e??this.getCurrentScrollTop(),{indices:i,pushOffset:r}=this.computeDisplay(t);if(this.container.dataset.mode!==this.config.mode&&(this.container.dataset.mode=this.config.mode??"push"),i.length!==this.displayedIndices.length||!i.every((e,t)=>e===this.displayedIndices[t])){const e=document.createDocumentFragment(),t=[];for(const r of i){let i=this.cloneCache.get(r)??null;i=this.buildClone(r)??i,i||(i=this.synthesizeClone(r),i&&this.cloneCache.set(r,i)),i&&(e.appendChild(i),t.push(r))}this.container.replaceChildren(e),this.displayedIndices=t}r!==this.lastPushOffset&&(this.container.style.transform=r>0?`translateY(${-r}px)`:"",this.lastPushOffset=r)}findNextSticky(e){for(const t of this.stickyIndices)if(t>e)return t;return null}};we("stickyRows",e=>new Ro(e??{isSticky:()=>!1}));function So(e){return e.scrollWidth>e.clientWidth}function Eo(e,t){const i=t;return!!i&&e.contains(i)}function Ao(){return"function"==typeof HTMLElement.prototype?.showPopover}var _o=/* @__PURE__ */new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Tab"]),ko="tbw-tooltip-popover",To=class extends Y{name="tooltip";styles='@layer tbw-plugins{.tbw-tooltip-popover{padding:var(--tbw-tooltip-padding,var(--tbw-spacing-sm,.375rem) var(--tbw-spacing-md,.5rem));background:var(--tbw-tooltip-bg,light-dark(#333338,#484850));color:var(--tbw-tooltip-fg,light-dark(#f5f5f5,#f0f0f0));border:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));border-radius:var(--tbw-tooltip-radius,var(--tbw-border-radius,.25rem));box-shadow:none;filter:var(--tbw-tooltip-shadow,drop-shadow(0 4px 4px #00000073));font-family:var(--tbw-font-family,system-ui, sans-serif);font-size:var(--tbw-tooltip-font-size,var(--tbw-font-size-sm,.9285em));max-width:var(--tbw-tooltip-max-width,300px);white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;pointer-events:auto;-webkit-user-select:text;user-select:text;z-index:10001;margin:0}.tbw-tooltip-popover.tbw-tooltip-multiline{white-space:pre;word-wrap:normal;overflow-wrap:normal;max-width:none}.tbw-tooltip-popover:after{content:"";width:var(--tbw-tooltip-arrow-size,14px);height:var(--tbw-tooltip-arrow-size,14px);left:var(--tbw-tooltip-arrow-offset,16px);background:inherit;pointer-events:none;position:absolute}.tbw-tooltip-popover:not(.tbw-tooltip-above):after{top:calc(var(--tbw-tooltip-arrow-size,14px) / -2);border-top:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));border-left:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));clip-path:polygon(0 0,100% 0,0 100%);transform:rotate(45deg)}.tbw-tooltip-popover.tbw-tooltip-above:after{bottom:calc(var(--tbw-tooltip-arrow-size,14px) / -2);border-bottom:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));border-right:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));clip-path:polygon(100% 0,100% 100%,0 100%);transform:rotate(45deg)}@supports (anchor-name:--test){.tbw-tooltip-popover{position-anchor:--tbw-tooltip-anchor;top:calc(anchor(bottom) + 11px);bottom:auto;left:anchor(left)}.tbw-tooltip-popover.tbw-tooltip-above{top:auto;bottom:calc(anchor(top) + 11px)}}}';static manifest={ownedProperties:[{property:"cellTooltip",level:"column",description:'the "cellTooltip" column property'},{property:"headerTooltip",level:"column",description:'the "headerTooltip" column property'}],configRules:[]};#Kr=null;#jr=null;#Ur=!1;#Yr=null;#Zr=null;get#Xr(){return!1!==this.config.header}get#Qr(){return!1!==this.config.cell}get#Jr(){return!1!==this.config.focus}get#en(){return this.config.hideDelay??120}attach(e){super.attach(e)}detach(){this.#tn(),null!==this.#Zr&&(cancelAnimationFrame(this.#Zr),this.#Zr=null),this.#in(),this.#Kr?.remove(),this.#Kr=null,this.#Ur=!1,super.detach()}afterRender(){this.#rn(),this.#nn()}#rn(){if(this.#Kr)return;const e=document.createElement("div");e.className="tbw-tooltip-popover",e.setAttribute("popover","hint"),e.id=ko,e.setAttribute("role","tooltip"),e.style.overflow="visible",e.style.margin="0",document.body.appendChild(e),this.#Kr=e,e.addEventListener("mouseenter",()=>this.#tn(),{signal:this.disconnectSignal}),e.addEventListener("mouseleave",()=>this.#on(),{signal:this.disconnectSignal})}#sn(e,t){if(this.#Kr){if(this.#tn(),this.#ln(),e.style.setProperty("anchor-name","--tbw-tooltip-anchor"),e.setAttribute("aria-describedby",ko),this.#jr=e,this.#Kr.textContent=t,this.#Kr.classList.toggle("tbw-tooltip-multiline",t.includes("\n")),Ao())try{this.#Kr.showPopover()}catch{}"undefined"!=typeof CSS&&!0===CSS.supports?.("anchor-name","--test")?this.#Kr.classList.toggle("tbw-tooltip-above",this.#an(e)):this.#dn(e)}}#in(){if(this.#tn(),this.#Kr){if(Ao())try{this.#Kr.hidePopover()}catch{}this.#Kr.classList.remove("tbw-tooltip-above")}this.#ln()}get#cn(){return null!==this.#jr}#on(){this.#tn(),this.#en<=0?this.#in():this.#Yr=setTimeout(()=>{this.#Yr=null,this.#in()},this.#en)}#tn(){null!==this.#Yr&&(clearTimeout(this.#Yr),this.#Yr=null)}#ln(){this.#jr&&("--tbw-tooltip-anchor"===this.#jr.style.getPropertyValue("anchor-name")&&this.#jr.style.removeProperty("anchor-name"),this.#jr.getAttribute("aria-describedby")===ko&&this.#jr.removeAttribute("aria-describedby"),this.#jr=null)}#an(e){if(!this.#Kr)return!1;const t=e.getBoundingClientRect(),i=t.top-11,r=window.innerHeight-t.bottom-11;return this.#Kr.offsetHeight<=i||i>=r}#dn(e){if(!this.#Kr)return;const t=e.getBoundingClientRect(),i=this.#an(e);this.#Kr.style.position="fixed",this.#Kr.style.left=`${t.left}px`,i?(this.#Kr.style.top="",this.#Kr.style.bottom=window.innerHeight-t.top+11+"px"):(this.#Kr.style.top=`${t.bottom+11}px`,this.#Kr.style.bottom=""),this.#Kr.classList.toggle("tbw-tooltip-above",i)}#nn(){if(this.#Ur)return;const e=this.gridElement?.querySelector(".tbw-grid-root");e&&(this.#Ur=!0,e.addEventListener("mouseover",e=>this.#un(e),{signal:this.disconnectSignal}),e.addEventListener("mouseout",e=>this.#hn(e),{signal:this.disconnectSignal}),document.addEventListener("keydown",e=>this.#gn(e),{capture:!0,signal:this.disconnectSignal}),this.gridElement.addEventListener("keydown",e=>this.#pn(e),{signal:this.disconnectSignal}))}#un(e){const t=e.target;if(!t?.closest)return;const i=t.closest('[part~="header-cell"]');if(i&&this.#Xr)return void(Eo(i,e.relatedTarget)||this.#fn(i));const r=t.closest("[data-row][data-col]");if(r&&this.#Qr&&!r.style.getPropertyValue("anchor-name")){if(Eo(r,e.relatedTarget))return;this.#mn(r)}}#hn(e){const t=e.target;if(!t?.closest)return;const i=t.closest('[part~="header-cell"], [data-row][data-col]');i&&(Eo(i,e.relatedTarget)||this.#on())}#gn(e){"Escape"===e.key&&this.#cn&&this.#in()}#pn(e){this.#Jr&&this.#Qr&&"Escape"!==e.key&&(_o.has(e.key)?(null!==this.#Zr&&cancelAnimationFrame(this.#Zr),this.#Zr=requestAnimationFrame(()=>{this.#Zr=null,this.#wn()})):this.#in())}#wn(){const e=this.gridElement?.querySelector(".cell-focus");if(!e||!e.hasAttribute("data-row"))return void this.#in();if(e===this.#jr)return;if(e.style.getPropertyValue("anchor-name"))return void this.#in();const t=this.#jr;this.#mn(e),this.#jr===t&&this.#in()}#fn(e){const t=parseInt(e.getAttribute("data-col")??"-1",10);if(t<0)return;const i=this.visibleColumns[t];if(!i)return;const r=function(e,t){const i=e.headerTooltip;if(!1===i)return null;if("string"==typeof i)return i;if("function"==typeof i)return i({column:e,value:e.header??e.field});const r=t.querySelector("span:first-child")??t;return So(r)&&r.textContent?.trim()||null}(i,e);r&&this.#sn(e,r)}#mn(e){const t=parseInt(e.getAttribute("data-row")??"-1",10),i=parseInt(e.getAttribute("data-col")??"-1",10);if(t<0||i<0)return;const r=this.visibleColumns[i];if(!r)return;const n=this.rows[t],o=n?.[r.field],s=function(e,t,i,r,n){const o=e.cellTooltip;return!1===o?null:"string"==typeof o?o:"function"==typeof o?o({value:r,row:i,column:e,field:e.field,grid:n}):So(t)&&t.textContent?.trim()||null}(r,e,n,o,this.grid);s&&this.#sn(e,s)}};function Mo(e,t,i){return void 0!==e.id?String(e.id):i?`${i}-${t}`:String(t)}function Io(e,t){const i=new Set(e);return i.has(t)?i.delete(t):i.add(t),i}function Lo(e,t,i=null,r=0){const n=t.childrenField??"children",o=/* @__PURE__ */new Set;for(let s=0;s<e.length;s++){const l=e[s],a=Mo(l,s,i),d=l[n];if(Array.isArray(d)&&d.length>0){o.add(a);const e=Lo(d,t,a,r+1);for(const t of e)o.add(t)}}return o}function Do(e,t,i,r=null,n=0){const o=i.childrenField??"children";for(let s=0;s<e.length;s++){const l=e[s],a=Mo(l,s,r);if(a===t)return[a];const d=l[o];if(Array.isArray(d)&&d.length>0){const e=Do(d,t,i,a,n+1);if(e)return[a,...e]}}return null}function Po(e,t,i,r){const n=Do(e,t,i);if(!n)return r;const o=new Set(r);for(let s=0;s<n.length-1;s++)o.add(n[s]);return o}function Fo(e,t){const i=Math.min(t,e.length-1);if(i<0)return 0;let r=i;for(;r>0&&e[r].depth>0;)r--;let n=0;for(let o=0;o<=r;o++)0===e[o].depth&&n++;return n-1}function Ho(e){let t=0;for(const i of e)0===i.depth&&t++;return t}function Go(e,t="children",i){if(!Array.isArray(e)||0===e.length)return!1;for(const r of e){if(!r)continue;const e=r[t];if(Array.isArray(e)&&e.length>0)return!0;if(null!=e&&!Array.isArray(e)&&e)return!0;if(i?.(r))return!0}return!1}we("tooltip",e=>!0===e?new To:new To(e??void 0));var zo=class extends Y{static manifest={modifiesRowStructure:!0,hookPriority:{processRows:10},incompatibleWith:[{name:"groupingRows",reason:"Both plugins transform the entire row model. TreePlugin flattens nested hierarchies while GroupingRowsPlugin groups flat rows with synthetic headers. Use one approach per grid."},{name:"pivot",reason:"PivotPlugin replaces the entire row and column structure with aggregated pivot data. Tree hierarchy cannot coexist with pivot aggregation."}],events:[{type:"tree-expand",description:"Emitted when tree expansion state changes (toggle, expand all, collapse all). Broadcast to both DOM consumers and plugin bus."},{type:"tree-load-start",description:"Emitted when lazy child loading starts for a node whose children are not yet loaded."},{type:"tree-load-end",description:"Emitted when lazy child loading completes and children have been merged into the parent row."},{type:"tree-load-error",description:"Emitted when lazy child loading fails. The node leaves its loading state and can be retried."}],queries:[{type:"canMoveRow",description:"Returns false for rows with children (parent nodes cannot be reordered)"},{type:"datasource:viewport-mapping",description:"Translates flat viewport row indices to top-level node indices for ServerSide pagination."}]};static dependencies=[{name:"multiSort",required:!1,reason:"Queries sort model for coordinated tree sorting"},{name:"serverSide",required:!1,reason:"Consumes datasource events for lazy-loaded tree data"}];name="tree";styles='@layer tbw-plugins{tbw-grid .cell[data-field=__tbw_expander]{justify-content:flex-start;align-items:center;padding:0;display:flex;border-inline-end:none!important}tbw-grid .header-row .cell[data-field=__tbw_expander]{display:none}tbw-grid .header-row .cell[data-field=__tbw_expander]+.cell{grid-column:1/3}tbw-grid .tree-cell-wrapper{vertical-align:middle;align-items:center;padding-inline-start:calc(var(--tbw-tree-depth,0) * var(--tbw-tree-indent-width,var(--tbw-tree-toggle-size,1.25em)));display:inline-flex;overflow:visible}tbw-grid .tree-expander{box-sizing:border-box;justify-content:flex-start;align-items:center;width:100%;height:100%;display:flex}tbw-grid .tree-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;width:var(--tbw-tree-toggle-size,1.25em);height:var(--tbw-tree-toggle-size,1.25em);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}tbw-grid .tree-toggle:hover{color:var(--tbw-tree-accent,var(--tbw-color-accent))}tbw-grid .tree-toggle{position:relative}tbw-grid .tree-toggle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}tbw-grid .tree-spacer{width:var(--tbw-tree-toggle-size,1.25em);height:var(--tbw-tree-toggle-size,1.25em);flex-shrink:0;display:inline-block}@media (pointer:coarse){tbw-grid .tree-toggle,tbw-grid .tree-spacer{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}tbw-grid .tree-loading{--tbw-spinner-size:var(--tbw-tree-toggle-size,1.25em);flex-shrink:0}tbw-grid .data-grid-row.tbw-tree-slide-in{animation:tbw-tree-slide-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}tbw-grid .data-grid-row.tbw-tree-fade-in{animation:tbw-tree-fade-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-tree-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}@keyframes tbw-tree-fade-in{0%{opacity:0}to{opacity:1}}}';get defaultConfig(){return{childrenField:"children",autoDetect:!0,defaultExpanded:!1,indentWidth:20,showExpandIcons:!0,animation:"slide"}}expandedKeys=/* @__PURE__ */new Set;initialExpansionDone=!1;flattenedRows=[];rowKeyMap=/* @__PURE__ */new Map;previousVisibleKeys=/* @__PURE__ */new Set;keysToAnimate=/* @__PURE__ */new Set;sortState=null;loadingKeys=/* @__PURE__ */new Set;loadedKeys=/* @__PURE__ */new Set;#bn=/* @__PURE__ */new Map;#vn=/* @__PURE__ */new WeakMap;#yn=/* @__PURE__ */new WeakMap;originalTreeColumnRenderer;wrappedTreeColumnField;#Cn=!1;#xn=!1;detach(){(this.gridElement?.querySelector(".rows-body"))?.setAttribute("role","grid"),this.expandedKeys.clear(),this.initialExpansionDone=!1,this.flattenedRows=[],this.rowKeyMap.clear(),this.previousVisibleKeys.clear(),this.keysToAnimate.clear(),this.sortState=null,this.loadingKeys.clear(),this.loadedKeys.clear();for(const e of this.#bn.values())e.abort();this.#bn.clear(),this.originalTreeColumnRenderer=void 0,this.wrappedTreeColumnField=void 0,this.#Cn=!1}handleQuery(e){if("canMoveRow"===e.type){const t=e.context,i=this.config.childrenField??"children",r=t?.[i];if(Array.isArray(r)&&r.length>0)return!1}if("datasource:viewport-mapping"===e.type){const{viewportStart:t,viewportEnd:i}=e.context;if(0===this.flattenedRows.length)return;return{startNode:Fo(this.flattenedRows,t),endNode:Fo(this.flattenedRows,i)+1,totalLoadedNodes:Ho(this.flattenedRows)}}}attach(e){super.attach(e),this.on("datasource:data",e=>{const t=e;t.claimed||(t.claimed=!0)}),this.on("datasource:children",e=>{const t=e;if("tree"!==t.context?.source)return;t.claimed=!0;const i=t.context.parentNode;if(i){const e=this.#Rn(i);this.#Sn(i,t.rows??[]),this.loadingKeys.delete(e),this.broadcast("tree-load-end",{key:e,row:i,depth:this.rowKeyMap.get(e)?.depth??0,childCount:t.rows?.length??0}),this.requestRender()}}),this.on("datasource:error",e=>{const t=e;if("tree"!==t.context?.source)return;const i=t.context.parentNode;if(!i)return;const r=this.#Rn(i);this.loadingKeys.delete(r)&&(this.broadcast("tree-load-error",{key:r,row:i,depth:this.rowKeyMap.get(r)?.depth??0,error:t.error}),this.requestRender())})}get animationStyle(){return!!this.isAnimationEnabled&&(this.config.animation??"slide")}detect(e){if(!this.config.autoDetect)return!1;const t=e,i=this.config.childrenField??function(e){if(!Array.isArray(e)||0===e.length)return null;const t=["children","items","nodes","subRows","nested"];for(const i of e)if(i&&"object"==typeof i)for(const e of t){const t=i[e];if(Array.isArray(t)&&t.length>0)return e}return null}(t)??"children";return Go(t,i)}processRows(e){const t=this.config.childrenField??"children",i=e;if(0===i.length||!Go(i,t,this.config.hasChildren))return this.flattenedRows=[],this.rowKeyMap.clear(),this.previousVisibleKeys.clear(),this.#En(),[...e];const r=this.resolveEffectiveSortState();this.config.defaultExpanded&&!this.initialExpansionDone&&(this.expandedKeys=Lo(i,this.config),this.initialExpansionDone=!0),this.flattenedRows=this.#An(i,this.expandedKeys,r,null,0),this.#yn=/* @__PURE__ */new WeakMap,this.rowKeyMap.clear(),this.keysToAnimate.clear();const n=/* @__PURE__ */new Set;for(const o of this.flattenedRows)this.rowKeyMap.set(o.key,o),this.#yn.set(o.data,o),n.add(o.key),!this.previousVisibleKeys.has(o.key)&&o.depth>0&&this.keysToAnimate.add(o.key);return this.previousVisibleKeys=n,this.#En(),this.flattenedRows.map(e=>e.data)}#En(){this.#xn||(this.#xn=!0,queueMicrotask(()=>{this.#xn=!1,this.grid&&this.#Cn!==this.flattenedRows.length>0&&this.requestColumnsRender()}))}#_n(e,t,i){if(void 0!==e.id){const t=String(e.id);return this.#vn.set(e,t),t}const r=this.#vn.get(e);if(void 0!==r)return r;const n=i?`${i}-${t}`:String(t);return this.#vn.set(e,n),n}#An(e,t,i,r,n){const o=this.config.childrenField??"children";for(let d=0;d<e.length;d++)this.#_n(e[d],d,r);const s=i?this.#kn(e,i.field,i.direction):e,l=[],a=this.config.hasChildren;for(let d=0;d<s.length;d++){const e=s[d],c=this.#_n(e,d,r),u=e[o],h=Array.isArray(u)&&u.length>0,g=h||(a?a(e):null!=u&&!Array.isArray(u)&&!!u),p=t.has(c);l.push({key:c,data:e,depth:n,hasChildren:g,isExpanded:p,parentKey:r,posInSet:d+1,setSize:s.length}),h&&p&&l.push(...this.#An(u,t,i,c,n+1))}return l}#kn(e,t,i){const r=this.grid,n=r?._columns??[],o={field:t,direction:i},s=[...e],l=(r?.effectiveConfig?.sortHandler??kn)(s,o,n);return l&&"function"==typeof l.then?(l.catch(()=>{}),kn(s,o,n)):l}#Rn(e){return this.#vn.get(e)??String(e.id??"?")}#Sn(e,t){e[this.config.childrenField??"children"]=t,this.loadedKeys.add(this.#Rn(e))}#Tn(e,t){if(this.loadedKeys.has(t))return!1;const i=e[this.config.childrenField??"children"];if(Array.isArray(i)&&i.length>0)return!1;const r=this.config.hasChildren;return r?r(e):null!=i&&!Array.isArray(i)&&!!i}requestLazyChildren(e){const{key:t,depth:i,data:r}=e;if(this.loadingKeys.has(t))return;if(!this.#Tn(r,t))return;const n=this.queryBoolean("datasource:is-active"),{loadChildren:o}=this.config;(n||o)&&(this.loadingKeys.add(t),this.broadcast("tree-load-start",{key:t,row:r,depth:i}),n?this.grid.query("datasource:fetch-children",{context:{source:"tree",parentNode:r,nodePath:[t]}}):this.#Mn(t,r,i))}#Mn(e,t,i){const r=this.config.loadChildren,n=new AbortController;this.#bn.set(e,n);const o=()=>!n.signal.aborted&&(this.#bn.delete(e),this.loadingKeys.delete(e),!0),s=r=>{if(!o())return;const n=r??[];this.#Sn(t,n),this.broadcast("tree-load-end",{key:e,row:t,depth:i,childCount:n.length}),this.requestRender()},l=r=>{o()&&(this.broadcast("tree-load-error",{key:e,row:t,depth:i,error:r}),this.requestRender())};let a;try{a=r({row:t,key:e,depth:i,signal:n.signal})}catch(d){return void l(d)}if(a&&"function"==typeof a.subscribe){let e=!1,t=null;const i=()=>{e=!0,t?.unsubscribe(),t=null},r=a.subscribe({next:e=>{s(e),i()},error:e=>{l(e),i()}});return e?void r.unsubscribe():(t=r,void n.signal.addEventListener("abort",i,{once:!0}))}Promise.resolve(a).then(s,l)}resolveEffectiveSortState(){const e=this.grid?.query?.("sort:get-model",null);if(Array.isArray(e)&&e.length>0){const t=e[0];if(Array.isArray(t)&&t.length>0)return{field:t[0].field,direction:"desc"===t[0].direction?-1:1}}return this.sortState}processColumns(e){if(0===this.flattenedRows.length){const t=[...e];if(this.#Cn){const e=t.findIndex(e=>e.field===this.wrappedTreeColumnField);e>=0&&(t[e]={...t[e],viewRenderer:this.originalTreeColumnRenderer})}return this.#Cn=!1,this.originalTreeColumnRenderer=void 0,this.wrappedTreeColumnField=void 0,t}const t=[...e];if(0===t.length)return t;const{treeColumn:i}=this.config;let r=0;if(i){const e=t.findIndex(e=>e.field===i);e>=0&&(r=e)}const n=t[r],o=n.field;this.wrappedTreeColumnField!==o&&(this.originalTreeColumnRenderer=n.viewRenderer,this.wrappedTreeColumnField=o);const s=this.originalTreeColumnRenderer,l=()=>this.config,a=this.setIcon.bind(this);return t[r]={...n,viewRenderer:e=>{const{row:t,value:i}=e,{showExpandIcons:r=!0,indentWidth:n}=l(),o=this.#yn.get(t),d=o?.depth??0,c=document.createElement("span");if(c.className="tree-cell-wrapper",c.style.setProperty("--tbw-tree-depth",String(d)),void 0!==n&&c.style.setProperty("--tbw-tree-indent-width",`${n}px`),r)if(o&&this.loadingKeys.has(o.key)){const e=ci("small");e.classList.add("tree-loading"),c.appendChild(e)}else if(o&&o.hasChildren){const e=document.createElement("span");e.className=`${Ge.TREE_TOGGLE}${o.isExpanded?` ${Ge.EXPANDED}`:""}`,a(e,o.isExpanded?"collapse":"expand"),e.setAttribute("data-tree-key",o.key),c.appendChild(e)}else{const e=document.createElement("span");e.className="tree-spacer",c.appendChild(e)}const u=document.createElement("span");if(u.className="tree-content",s){const t=s(e);t instanceof Node?u.appendChild(t):"string"==typeof t&&q(u,t)}else u.textContent=null!=i?String(i):"";return c.appendChild(u),c}},this.#Cn=!0,t}onCellClick(e){const t=e.originalEvent?.target;if(!t?.classList.contains(Ge.TREE_TOGGLE))return!1;const i=t.getAttribute("data-tree-key");if(!i)return!1;const r=this.rowKeyMap.get(i);return!!r&&(this.expandedKeys=Io(this.expandedKeys,i),this.expandedKeys.has(i)&&this.requestLazyChildren(r),this.broadcast("tree-expand",{key:i,row:r.data,expanded:this.expandedKeys.has(i),depth:r.depth,expandedKeys:[...this.expandedKeys]}),this.requestRender(),!0)}onKeyDown(e){if(" "!==e.key)return;const t=this.grid._focusRow,i=this.flattenedRows[t];return i?.hasChildren?(e.preventDefault(),this.expandedKeys=Io(this.expandedKeys,i.key),this.expandedKeys.has(i.key)&&this.requestLazyChildren(i),this.broadcast("tree-expand",{key:i.key,row:i.data,expanded:this.expandedKeys.has(i.key),depth:i.depth,expandedKeys:[...this.expandedKeys]}),this.requestRenderWithFocus(),!0):void 0}onHeaderClick(e){if(0===this.flattenedRows.length||!e.column.sortable)return!1;const t=this.grid?.query?.("sort:get-model",null);if(Array.isArray(t)&&t.length>0)return!1;const{field:i}=e.column;this.sortState&&this.sortState.field===i?1===this.sortState.direction?this.sortState={field:i,direction:-1}:this.sortState=null:this.sortState={field:i,direction:1};const r=this.grid;return void 0!==r._sortState&&(r._sortState=this.sortState?{...this.sortState}:null),this.broadcast("sort-change",{field:i,direction:this.sortState?.direction??0}),this.requestRender(),!0}afterRender(){const e=this.gridElement?.querySelector(".rows-body");e&&"treegrid"!==e.getAttribute("role")&&e.setAttribute("role","treegrid");const t=this.gridElement?.querySelector(".rows");if(!t)return;const i=this.animationStyle,r=!1!==i&&this.keysToAnimate.size>0,n="fade"===i?"tbw-tree-fade-in":"tbw-tree-slide-in";for(const o of t.querySelectorAll(".data-grid-row")){const e=o.querySelector(".cell[data-row]"),t=e?parseInt(e.getAttribute("data-row")??"-1",10):-1,i=this.flattenedRows[t];i&&(o.setAttribute("aria-level",String(i.depth+1)),o.setAttribute("aria-setsize",String(i.setSize)),o.setAttribute("aria-posinset",String(i.posInSet)),i.hasChildren?o.setAttribute("aria-expanded",String(i.isExpanded)):o.hasAttribute("aria-expanded")&&o.removeAttribute("aria-expanded"),o.classList.toggle("tbw-row-expanded",i.hasChildren&&i.isExpanded),this.loadingKeys.has(i.key)?o.setAttribute("aria-busy","true"):o.hasAttribute("aria-busy")&&o.removeAttribute("aria-busy"),r&&i.key&&this.keysToAnimate.has(i.key)&&(o.classList.add(n),o.addEventListener("animationend",()=>o.classList.remove(n),{once:!0})))}this.keysToAnimate.clear()}expand(e){this.expandedKeys.add(e);const t=this.rowKeyMap.get(e);t&&this.requestLazyChildren(t),this.requestRender()}collapse(e){this.expandedKeys.delete(e),this.requestRender()}toggle(e){this.expandedKeys=Io(this.expandedKeys,e);const t=this.rowKeyMap.get(e);t?(this.expandedKeys.has(e)&&this.requestLazyChildren(t),this.broadcast("tree-expand",{key:e,row:t.data,expanded:this.expandedKeys.has(e),depth:t.depth,expandedKeys:[...this.expandedKeys]})):this.emitPluginEvent("tree-expand",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}expandAll(){this.expandedKeys=Lo(this.rows,this.config),this.emitPluginEvent("tree-expand",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}collapseAll(){this.expandedKeys=/* @__PURE__ */new Set,this.emitPluginEvent("tree-expand",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}isExpanded(e){return this.expandedKeys.has(e)}getExpandedKeys(){return[...this.expandedKeys]}getFlattenedRows(){return[...this.flattenedRows]}getRowMeta(e){return this.#yn.get(e)}getRowByKey(e){return this.rowKeyMap.get(e)?.data}expandToKey(e){this.expandedKeys=Po(this.rows,e,this.config,this.expandedKeys),this.requestRender()}};function Oo(e,t){const i=t.renderer||t.viewRenderer;if(i)return i;if(!t.type)return;const r=e.__frameworkAdapter;if(r?.getTypeDefault){const i=r.getTypeDefault(t.type,e._hostElement);if(i?.renderer)return i.renderer}}function No(e,t){if(t.format)return t.format;if(!t.type)return;const i=e.__frameworkAdapter;if(i?.getTypeDefault){const r=i.getTypeDefault(t.type,e._hostElement);if(r?.format)return r.format}}function qo(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing"),e.querySelectorAll(`.cell.${Ge.EDITING}`).forEach(e=>e.classList.remove(Ge.EDITING))}we("tree",e=>new zo("boolean"==typeof e?{}:e??{}));var $o=document.createElement("template");$o.innerHTML='<div class="cell" role="gridcell" part="cell"></div>';var Wo=document.createElement("template");function Bo(){return Wo.content.firstElementChild.cloneNode(!0)}function Vo(e){e.__cellDisplayCache=void 0,e.__cellCacheEpoch=void 0,e.__hasSpecialColumns=void 0}function Ko(e){const t=e.getAttribute("data-dynamic-classes");if(!t)return;const i=t.split(" ");for(let r=0;r<i.length;r++)i[r]&&e.classList.remove(i[r])}function jo(e,t){const i="string"==typeof t?t.split(/\s+/):t;if(!i||0===i.length)return void e.removeAttribute("data-dynamic-classes");let r="";for(let n=0;n<i.length;n++){const t=i[n];t&&"string"==typeof t&&(e.classList.add(t),r+=(r?" ":"")+t)}e.setAttribute("data-dynamic-classes",r)}function Uo(e,t,i,r,n,o,s,l){e._afterCellRender?.({row:o,rowIndex:s,column:r,colIndex:n,value:l,cellElement:i,rowElement:t})}function Yo(e,t,i){for(let r=0;r<i;r++)if(t[r].externalView&&!e.querySelector(`.cell[data-col="${r}"] [data-external-view]`))return!0;return!1}function Zo(e,t,i,r,n,o,s){const l=function(e){return(e.__editingCellCount??0)>0}(t),a=!!e._isGridEditMode&&!s||e._activeEditRows===r;return o?l&&!a?(qo(t),us(e,t,i,r),t.__epoch=n,void(t.__rowDataRef=i)):(ss(e,t,i,r),void(s&&(t.__rowDataRef=i))):l&&a?(ss(e,t,i,r),void(t.__rowDataRef=i)):(function(e){e.__isCustomRow&&(e.className="data-grid-row",e.setAttribute("role","row"),e.__isCustomRow=!1)}(t),l&&qo(t),us(e,t,i,r),t.__epoch=n,void(t.__rowDataRef=i))}function Xo(e,t,i){let r=!1;const n=e._changedRowIdSet;if(n&&n.size>0)try{const t=e.getRowId?.(i);t&&(r=n.has(t))}catch{}r!==t.classList.contains("changed")&&t.classList.toggle("changed",r)}function Qo(e,t,i){const r=e.effectiveConfig?.rowClass;if(r){Ko(t);try{jo(t,r(i))}catch(n){A("TBW060",`rowClass callback error: ${n}`,e.id),t.removeAttribute("data-dynamic-classes")}}}function Jo(e){return null!=e&&(!0===e.__isGroupRow||!0===e.__loading||!0===e.__pivotIsGrandTotal||void 0!==e.__pivotRowKey)}function es(e,t,i,r,n){const o=Math.max(0,i-t),s=e._bodyEl,l=e._visibleColumns,a=l.length,d=function(e){let t=e.__cachedHeaderRowCount;return void 0===t&&(t=e.querySelector(".header-group-row")?2:1,e.__cachedHeaderRowCount=t),t}(e);!function(e,t,i){for(;e._rowPool.length<t;)e._rowPool.push(Bo());if(e._rowPool.length<=t)return;const r=e.__frameworkAdapter,n=r?.releaseCell;r?.beginBatch?.(e);try{for(let o=t;o<e._rowPool.length;o++){const t=e._rowPool[o];if(n){const e=t.children;for(let t=0;t<e.length;t++){const i=e[t];i.firstElementChild&&n.call(r,i)}}t.parentNode===i&&t.remove()}e._rowPool.length=t}finally{r?.endBatch?.(e)}}(e,o,s);const c=n&&!1!==e.__hasRenderRowPlugins,u=e._hasAfterRowRenderHook?.()??!1,h=!!e.effectiveConfig?.rowClass,g=e._virtualization?.variableHeights&&"function"==typeof e.effectiveConfig?.rowHeight?e.effectiveConfig.rowHeight:null;for(let p=0;p<o;p++){const i=t+p,o=e._rows[i],f=e._rowPool[p],m=i+d+1;if(f.__ariaRowIndex!==m&&(f.__ariaRowIndex=m,f.setAttribute("aria-rowindex",String(m))),c&&n(o,f,i)){f.__epoch=r,f.__rowDataRef=o,h&&!Jo(o)&&Qo(e,f,o),f.parentNode!==s&&s.appendChild(f);continue}let w=f.children.length;w>a&&f.lastElementChild?.classList.contains("tbw-row-loading-overlay")&&w--;const b=f.__rowDataRef!==o;let v=f.__epoch===r&&w===a;if(v&&b&&Yo(f,l,a)&&(v=!1),Zo(e,f,o,i,r,v,b),Xo(e,f,o),Qo(e,f,o),g){const e=g(o,i);void 0!==e&&e>0?f.style.setProperty("--tbw-row-height",`${e}px`):f.style.removeProperty("--tbw-row-height")}u&&e._afterRowRender?.({row:o,rowIndex:i,rowElement:f}),f.parentNode!==s&&s.appendChild(f)}}function ts(e,t){t!==e.classList.contains("cell-focus")&&(e.classList.toggle("cell-focus",t),e.setAttribute("aria-selected",String(t)))}function is(e,t,i,r,n){const o=i.cellClass;if(o){Ko(t);try{jo(t,o(c(r,i,n),r,i))}catch(s){A("TBW061",`cellClass callback error for column '${i.field}': ${s}`,e.id),t.removeAttribute("data-dynamic-classes")}}}Wo.innerHTML='<div class="data-grid-row" role="row" part="row"></div>';var rs=/Reflect\.|\bProxy\b|ownKeys\(/;function ns(e,t,i){null!==i?(t.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(t),q(t,i),K(t)):t.textContent=""}function os(e,t,i,r,n,o,s,l){const a=Oo(e,r);let d;if(a)d=c(o,r,s),function(e,t,i,r,n,o){const s=o({row:r,value:n,field:i.field,column:i,grid:e,cellEl:t});"string"==typeof s?(e.__frameworkAdapter?.releaseCell?.(t),q(t,s)):s instanceof Node?s.parentElement!==t&&(e.__frameworkAdapter?.releaseCell?.(t),t.innerHTML="",t.appendChild(s)):null==s&&(e.__frameworkAdapter?.releaseCell?.(t),t.textContent=null==n?"":String(n))}(e,i,r,o,d,a);else if(r.__compiledView){d=c(o,r,s);const t=r.__compiledView({row:o,value:d,field:r.field,column:r});ns(e,i,r.__compiledView.__blocked?null:t)}else if(r.__viewTemplate){d=c(o,r,s);const t=r.__viewTemplate.innerHTML;ns(e,i,rs.test(t)?null:B(t,{row:o,value:d}))}else{if(r.externalView)return;d=c(o,r,s),function(e,t,i,r,n){t.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(t);const o=No(e,i);if(o){let l;try{const e=o(n,r);l=null==e?"":String(e)}catch(s){A(v,`Format error in column '${i.field}': ${s}`,e.id),l=null==n?"":String(n)}t.textContent=l}else"date"===i.type?t.textContent=Ve(n):"boolean"===i.type?t.innerHTML=Be(!!n):t.textContent=null==n?"":String(n)}(e,i,r,o,d)}l&&Uo(e,t,i,r,n,o,s,d)}function ss(e,t,i,r){const n=t.children,o=e._visibleColumns,s=o.length,l=n.length,a=s<l?s:l,d=String(r),u=e._hasAfterCellRenderHook?.()??!1;if(!function(e,t,i){const r=e.__hasSpecialColumns;if(void 0!==r)return r;let n=!1;const o=e.__frameworkAdapter;for(let s=0;s<i;s++){const i=t[s];if(i.__viewTemplate||i.__compiledView||i.renderer||i.viewRenderer||i.externalView||i.format||i.cellClass||"date"===i.type||"boolean"===i.type||i.type&&o?.getTypeDefault?.(i.type,e._hostElement)?.renderer||i.type&&o?.getTypeDefault?.(i.type,e._hostElement)?.format){n=!0;break}}return e.__hasSpecialColumns=n,n}(e,o,s))return void function(e,t,i,r,n,o,s,l,a){const d=e._focusRow,u=e._focusCol;for(let h=0;h<n;h++){const n=i[h];if(n.classList.contains(Ge.EDITING))continue;n.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(n);const g=r[h],p=c(o,g,s);n.textContent=null==p?"":String(p),n.getAttribute("data-row")!==l&&n.setAttribute("data-row",l),ts(n,d===s&&u===h),a&&Uo(e,t,n,g,h,o,s,p)}}(e,t,n,o,a,i,r,d,u);if(function(e,t,i){for(let r=0;r<i;r++)if(t[r].externalView&&!e[r].querySelector("[data-external-view]"))return!0;return!1}(n,o,a))return void us(e,t,i,r);const h=e._focusRow,g=e._focusCol;for(let c=0;c<a;c++){const s=o[c],l=n[c];l.getAttribute("data-row")!==d&&l.setAttribute("data-row",d);const a=l.classList.contains(Ge.EDITING);a||ts(l,h===r&&g===c),is(e,l,s,i,r),a||os(e,t,l,s,c,i,r,u)}}function ls(e,t,i){const r=$o.content.firstElementChild.cloneNode(!0);return r.setAttribute("aria-colindex",String(t+1)),r.setAttribute("data-col",String(t)),r.setAttribute("data-row",String(i)),r.setAttribute("data-field",e.field),r.setAttribute("data-header",e.header??e.field),e.type&&r.setAttribute("data-type",e.type),r}function as(e,t,i,r,n,o){const s=Oo(e,i);if(s)return function(e,t,i,r,n,o){const s=r({row:o,value:n,field:i.field,column:i,grid:e,cellEl:t});return"string"==typeof s?(q(t,s),!0):(s instanceof Node?s.parentElement!==t&&(t.textContent="",t.appendChild(s)):null==s&&(t.textContent=null==n?"":String(n)),!1)}(e,t,i,s,r,n);if(i.externalView)return function(e,t,i,r,n){const o=i.externalView,s=document.createElement("div");s.setAttribute("data-external-view",""),s.setAttribute("data-field",i.field),t.appendChild(s);const l={row:n,value:r,field:i.field,column:i,grid:e};if(o.mount)try{o.mount({placeholder:s,context:l,spec:o})}catch(a){A("TBW063",`External view mount error for column '${i.field}': ${a}`,e.id)}else queueMicrotask(()=>{try{e.dispatchEvent(new CustomEvent("mount-external-view",{bubbles:!0,composed:!0,detail:{placeholder:s,spec:o,context:l}}))}catch(a){A("TBW064",`External view event dispatch error for column '${i.field}': ${a}`,e.id)}});s.setAttribute("data-mounted","")}(e,t,i,r,n),!1;const l=i.__compiledView;if(l){const e=l({row:n,value:r,field:i.field,column:i});return l.__blocked?(t.textContent="",t.setAttribute("data-blocked-template","")):q(t,e),!0}const a=i.__viewTemplate;if(a){const e=a.innerHTML;return/Reflect\.|\bProxy\b|ownKeys\(/.test(e)?(t.textContent="",t.setAttribute("data-blocked-template",""),!1):(q(t,B(e,{row:n,value:r})),!0)}return function(e,t,i,r){r||"date"!==t.type?r||"boolean"!==t.type?e.textContent=null==i?"":String(i):e.innerHTML=Be(!!i):e.textContent=Ve(i)}(t,i,r,o),!1}function ds(e,t){if(t){K(e);const t=e.textContent||"";/Proxy|Reflect\.ownKeys/.test(t)&&(e.textContent=t.replace(/Proxy|Reflect\.ownKeys/g,"").trim(),/Proxy|Reflect\.ownKeys/.test(e.textContent||"")&&(e.textContent=""))}e.hasAttribute("data-blocked-template")&&(e.textContent||"").trim().length&&(e.textContent="")}function cs(e,t,i){("function"==typeof t.editable?t.editable(i):t.editable)?e.tabIndex=0:"boolean"===t.type&&(e.hasAttribute("tabindex")||(e.tabIndex=0))}function us(e,t,i,r){!function(e,t){t.classList.remove("tbw-row-loading"),t.removeAttribute("aria-busy");const i=e.__frameworkAdapter;if(i?.releaseCell){i.beginBatch?.(e);try{const e=t.children;for(let t=e.length-1;t>=0;t--)i.releaseCell(e[t]);t.innerHTML=""}finally{i.endBatch?.(e)}}else t.innerHTML=""}(e,t);const n=e._visibleColumns,o=n.length,s=e._focusRow,l=e._focusCol,a=e._hasAfterCellRenderHook?.()??!1,d=document.createDocumentFragment();for(let h=0;h<o;h++){const o=n[h],g=ls(o,h,r);let p=c(i,o,r);const f=No(e,o);if(f)try{p=f(p,i)}catch(u){A(v,`Format error in column '${o.field}': ${u}`,e.id)}ds(g,as(e,g,o,p,i,!!f)),cs(g,o,i),s===r&&l===h?(g.classList.add("cell-focus"),g.setAttribute("aria-selected","true")):g.setAttribute("aria-selected","false"),is(e,g,o,i,r),a&&Uo(e,t,g,o,h,i,r,p),d.appendChild(g)}t.appendChild(d)}function hs(e,t,i){if(t.target?.closest(".resize-handle"))return;const r=Ke(i.querySelector(".cell[data-row]"));if(r<0)return;const n=e._rows[r];if(!n)return;if(e._dispatchRowClick?.(t,r,n,i))return;const o=t.target?.closest(".cell[data-col]");if(o){const i=Number(o.getAttribute("data-col"));if(!isNaN(i)){if(e._dispatchCellClick?.(t,r,i,o))return;const n=e._focusRow!==r||e._focusCol!==i;if(e._focusRow=r,e._focusCol=i,o.classList.contains(Ge.EDITING)){n&&(je(e._bodyEl??e),o.classList.add("cell-focus"));const i=t.target,r=o.contains(i)&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')?i:o.querySelector(He);try{r?.focus({preventScroll:!0})}catch{}return}at(e)}}}function gs(e,t,i){const r=[...e.undoStack,t];for(;r.length>i;)r.shift();return{undoStack:r,redoStack:[]}}function ps(e){if(0===e.undoStack.length)return{newState:e,action:null};const t=[...e.undoStack],i=t.pop();return i?{newState:{undoStack:t,redoStack:[...e.redoStack,i]},action:i}:{newState:e,action:null}}function fs(e){if(0===e.redoStack.length)return{newState:e,action:null};const t=[...e.redoStack],i=t.pop();return i?{newState:{undoStack:[...e.undoStack,i],redoStack:t},action:i}:{newState:e,action:null}}var ms=class extends Y{static dependencies=[{name:"editing",required:!0,reason:"UndoRedoPlugin tracks cell edit history"}];name="undoRedo";get defaultConfig(){return{maxHistorySize:100}}undoStack=[];redoStack=[];#In=!1;#Ln=null;#Dn=0;#Pn(e,t){const i=this.rows[e.rowIndex];if(i){try{const r=this.grid.getRowId(i);if(r)return void this.grid.updateRow(r,{[e.field]:t},"history")}catch{}d(i,e.field,t)}}#Fn(e){const t=this.grid,i=t._visibleColumns?.findIndex(t=>t.field===e.field)??-1;if(i<0)return;t._focusRow=e.rowIndex,t._focusCol=i;const r=t.findRenderedRowElement?.(e.rowIndex);if(!r)return;const n=r.querySelector(`.cell[data-col="${i}"]`);n?.classList.contains(Ge.EDITING)&&n.querySelector(He)?.focus({preventScroll:!0})}#Hn(e,t){if(this.#In=!0,"compound"===e.type){const i="undo"===t?[...e.actions].reverse():e.actions;for(const e of i)this.#Pn(e,"undo"===t?e.oldValue:e.newValue)}else this.#Pn(e,"undo"===t?e.oldValue:e.newValue);this.#In=!1}#Gn(e){const t="compound"===e.type?e.actions[e.actions.length-1]:e;t&&this.#Fn(t)}attach(e){super.attach(e),this.on("cell-edit-committed",e=>{this.#In||this.recordEdit(e.rowIndex,e.field,e.oldValue,e.newValue)})}detach(){this.undoStack=[],this.redoStack=[],this.#Ln=null,this.#Dn=0}onKeyDown(e){const t=(e.ctrlKey||e.metaKey)&&"z"===e.key&&!e.shiftKey,i=(e.ctrlKey||e.metaKey)&&("y"===e.key||"z"===e.key&&e.shiftKey);if(!t&&!i)return!1;const r=t?"undo":"redo";return this.#zn(e.target)?(this.#On(e.target,r),!0):(e.preventDefault(),this.#Nn(r),!0)}#Nn(e){const t={undoStack:this.undoStack,redoStack:this.redoStack},i="undo"===e?ps(t):fs(t);i.action&&(this.#Hn(i.action,e),this.undoStack=i.newState.undoStack,this.redoStack=i.newState.redoStack,this.emit(e,{action:i.action,type:e}),this.#Gn(i.action),this.requestRenderWithFocus())}#zn(e){return e instanceof Element&&!!e.closest('input, textarea, [contenteditable=""], [contenteditable="true"]')}#On(e,t){const i="undo"===t?"historyUndo":"historyRedo";let r=!1;const n=e=>{e.inputType===i&&(r=!0)};e.addEventListener("beforeinput",n,{capture:!0}),queueMicrotask(()=>{e.removeEventListener("beforeinput",n,{capture:!0}),r||this.#Nn(t)})}recordEdit(e,t,i,r){const n=function(e,t,i,r){return{type:"cell-edit",rowIndex:e,field:t,oldValue:i,newValue:r,timestamp:Date.now()}}(e,t,i,r);if(this.#Ln)return void this.#Ln.push(n);const o=gs({undoStack:this.undoStack,redoStack:this.redoStack},n,this.config.maxHistorySize??100);this.undoStack=o.undoStack,this.redoStack=o.redoStack}beginTransaction(){0===this.#Dn&&(this.#Ln=[]),this.#Dn++}endTransaction(){if(0===this.#Dn&&E("TBW112","No transaction in progress. Call beginTransaction() first."),this.#Dn--,this.#Dn>0)return;const e=this.#Ln;if(this.#Ln=null,!e||0===e.length)return;const t=1===e.length?e[0]:{type:"compound",actions:e,timestamp:Date.now()};const i=gs({undoStack:this.undoStack,redoStack:this.redoStack},t,this.config.maxHistorySize??100);this.undoStack=i.undoStack,this.redoStack=i.redoStack}undo(){const e=ps({undoStack:this.undoStack,redoStack:this.redoStack});return e.action&&(this.#Hn(e.action,"undo"),this.undoStack=e.newState.undoStack,this.redoStack=e.newState.redoStack,this.#Gn(e.action),this.requestRenderWithFocus()),e.action}redo(){const e=fs({undoStack:this.undoStack,redoStack:this.redoStack});return e.action&&(this.#Hn(e.action,"redo"),this.undoStack=e.newState.undoStack,this.redoStack=e.newState.redoStack,this.#Gn(e.action),this.requestRenderWithFocus()),e.action}canUndo(){return{undoStack:this.undoStack,redoStack:this.redoStack}.undoStack.length>0}canRedo(){return{undoStack:this.undoStack,redoStack:this.redoStack}.redoStack.length>0}clearHistory(){const e={undoStack:[],redoStack:[]};this.undoStack=e.undoStack,this.redoStack=e.redoStack,this.#Ln=null,this.#Dn=0}getUndoStack(){return[...this.undoStack]}getRedoStack(){return[...this.redoStack]}};we("undoRedo",e=>new ms("boolean"==typeof e?{}:e??{}));var ws=class e extends Y{static dependencies=[{name:"shell",required:!0,reason:"VisibilityPlugin renders its column list in a shell tool panel"},{name:"reorder",required:!1,reason:"Enables drag-to-reorder columns in visibility panel"}];static manifest={queries:[{type:"getContextMenuItems",description:'Contributes "Hide column" item to the header context menu'}]};name="visibility";static PANEL_ID="columns";styles='@layer tbw-plugins{.tbw-visibility-content{flex-direction:column;height:100%;display:flex}.tbw-visibility-list{padding:var(--tbw-panel-padding,var(--tbw-spacing-md,.5rem));flex:1;overflow-y:auto}.tbw-visibility-row{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));padding:var(--tbw-menu-item-padding,.375rem .25rem);cursor:pointer;font-size:var(--tbw-font-size-sm,.8125rem);border-radius:var(--tbw-border-radius,.25rem);display:flex;position:relative}.tbw-visibility-row:hover{background:var(--tbw-visibility-hover,var(--tbw-color-row-hover))}.tbw-visibility-row input[type=checkbox]{cursor:pointer}.tbw-visibility-row.locked span{color:var(--tbw-color-fg-muted)}.tbw-visibility-handle{cursor:grab;color:var(--tbw-color-fg-muted);font-size:var(--tbw-font-size-2xs,.625rem);letter-spacing:-2px;-webkit-user-select:none;user-select:none;flex-shrink:0}.tbw-visibility-row.reorderable:hover .tbw-visibility-handle{color:var(--tbw-color-fg)}.tbw-visibility-label{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));cursor:pointer;flex:1;display:flex}.tbw-visibility-row.dragging{opacity:.5;cursor:grabbing}.tbw-visibility-row.drop-before:before{content:"";background:var(--tbw-visibility-indicator,var(--tbw-color-accent));height:2px;position:absolute;top:0;left:0;right:0}.tbw-visibility-row.drop-after:after{content:"";background:var(--tbw-visibility-indicator,var(--tbw-color-accent));height:2px;position:absolute;bottom:0;left:0;right:0}.tbw-visibility-show-all{margin:var(--tbw-panel-padding,var(--tbw-spacing-md,.5rem));padding:var(--tbw-button-padding,.5rem .75rem);border:1px solid var(--tbw-visibility-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius,.25rem);background:var(--tbw-visibility-btn-bg,var(--tbw-color-header-bg));color:var(--tbw-color-fg);cursor:pointer;font-size:var(--tbw-font-size-sm,.8125rem)}.tbw-visibility-show-all:hover{background:var(--tbw-visibility-hover,var(--tbw-color-row-hover))}.tbw-visibility-group-header{padding:var(--tbw-menu-item-padding,.375rem .25rem);font-size:var(--tbw-font-size-sm,.8125rem);color:var(--tbw-color-fg);border-bottom:1px solid var(--tbw-color-border);margin-top:var(--tbw-spacing-sm,.25rem);align-items:center;font-weight:600;display:flex;position:relative}.tbw-visibility-group-header:first-child{margin-top:0}.tbw-visibility-group-header .tbw-visibility-label{gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem))}.tbw-visibility-group-header.reorderable{cursor:grab}.tbw-visibility-group-header.reorderable:hover{background:var(--tbw-visibility-hover,var(--tbw-color-row-hover))}.tbw-visibility-group-header .tbw-visibility-handle{cursor:grab;color:var(--tbw-color-fg-muted);font-size:var(--tbw-font-size-2xs,.625rem);letter-spacing:-2px;-webkit-user-select:none;user-select:none;flex-shrink:0}.tbw-visibility-group-header.reorderable:hover .tbw-visibility-handle{color:var(--tbw-color-fg)}@media (hover:none){.tbw-visibility-row.reorderable .tbw-visibility-handle,.tbw-visibility-group-header.reorderable .tbw-visibility-handle{color:var(--tbw-color-fg)}}@media (pointer:coarse){.tbw-visibility-handle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px);justify-content:center;align-items:center;display:inline-flex}}.tbw-visibility-group-header.dragging{opacity:.5;cursor:grabbing}.tbw-visibility-group-header.drop-before:before{content:"";background:var(--tbw-visibility-indicator,var(--tbw-color-accent));height:2px;position:absolute;top:0;left:0;right:0}.tbw-visibility-group-header.drop-after:after{content:"";background:var(--tbw-visibility-indicator,var(--tbw-color-accent));height:2px;position:absolute;bottom:0;left:0;right:0}.tbw-visibility-row--grouped{padding-left:calc(var(--tbw-panel-padding,var(--tbw-spacing-md,.5rem)) + .75rem)}.tbw-visibility-move-menu{background:var(--tbw-color-panel-bg,light-dark(#fff,#1e1e1e));min-width:10rem;color:var(--tbw-color-panel-fg,light-dark(#1a1a1a,#eaeaea));border:1px solid var(--tbw-color-border,light-dark(#d0d0d0,#3a3a3a));border-radius:var(--tbw-border-radius,.25rem);box-shadow:var(--tbw-shadow-panel,0 4px 12px light-dark(#0003,#00000080));font:inherit;z-index:10001;flex-direction:column;margin:0;padding:4px;display:flex;position:fixed}.tbw-visibility-move-menu[hidden]{display:none}.tbw-visibility-move-menu-item{min-height:var(--tbw-touch-target-min,24px);text-align:start;color:inherit;font:inherit;border-radius:min(var(--tbw-border-radius,.25rem), 6px);cursor:pointer;background:0 0;border:0;padding:4px 8px}.tbw-visibility-move-menu-item:hover:not(:disabled){background:var(--tbw-color-row-hover,light-dark(#00000010,#ffffff14))}.tbw-visibility-move-menu-item:disabled{opacity:.5;cursor:default}}';get defaultConfig(){return{}}columnListElement=null;isDragging=!1;draggedField=null;draggedIndex=null;dropIndex=null;draggedGroupId=null;draggedGroupFields=[];moveMenu=null;clearDragClasses(e){e.querySelectorAll(".tbw-visibility-row, .tbw-visibility-group-header").forEach(e=>{e.classList.remove(Ge.DRAGGING,"drop-target","drop-before","drop-after")})}attach(e){super.attach(e),this.gridElement.addEventListener("column-move",()=>{this.columnListElement&&requestAnimationFrame(()=>{this.columnListElement&&this.rebuildToggles(this.columnListElement)})},{signal:this.disconnectSignal})}detach(){this.columnListElement=null,this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.moveMenu?.dispose(),this.moveMenu=null}processColumns(e){for(const t of e){const e=t.__element;e&&(void 0===t.hidden&&e.hasAttribute("hidden")&&"false"!==e.getAttribute("hidden")&&(t.hidden=!0),void 0===t.lockVisible&&e.hasAttribute("lock-visible")&&"false"!==e.getAttribute("lock-visible")&&(t.lockVisible=!0))}return e}handleQuery(e){if("getContextMenuItems"===e.type){const t=e.context;if(!t.isHeader)return;const i=t.column;if(!i?.field)return;if(i.lockVisible||i.meta?.lockVisibility)return;return[{id:"visibility/hide-column",label:this.t("columns.hideColumn","Hide Column"),icon:"👁",order:30,action:()=>this.hideColumn(i.field)}]}}getToolPanel(){return{id:e.PANEL_ID,title:this.t("columns.panelTitle","Columns"),icon:"☰",tooltip:"Column visibility",order:100,render:e=>this.renderPanelContent(e)}}#rt(){return this.grid.getPluginByName("shell")}show(){this.#rt()?.openToolPanel(e.PANEL_ID)}hide(){this.#rt()?.closeToolPanel()}toggle(){const t=this.#rt();t?.isToolPanelOpen||t?.openToolPanel(),t?.toggleToolPanelSection(e.PANEL_ID)}isColumnVisible(e){return this.grid.isColumnVisible(e)}setColumnVisible(e,t){this.grid.setColumnVisible(e,t)}getVisibleColumns(){return this.grid.getAllColumns().filter(e=>e.visible).map(e=>e.field)}getHiddenColumns(){return this.grid.getAllColumns().filter(e=>!e.visible).map(e=>e.field)}showAll(){this.grid.showAllColumns()}toggleColumn(e){this.grid.toggleColumnVisibility(e)}showColumn(e){this.setColumnVisible(e,!0)}hideColumn(e){this.setColumnVisible(e,!1)}getAllColumns(){return this.grid.getAllColumns()}isPanelVisible(){const t=this.#rt();return!!t?.isToolPanelOpen&&t.expandedToolPanelSections.includes(e.PANEL_ID)}renderPanelContent(e){const t=document.createElement("div");t.className="tbw-visibility-content";const i=document.createElement("div");i.className="tbw-visibility-list",t.appendChild(i);const r=document.createElement("button");return r.type="button",r.className="tbw-visibility-show-all",r.textContent=this.t("columns.showAll","Show All"),r.addEventListener("click",()=>{this.grid.showAllColumns(),this.rebuildToggles(i)}),t.appendChild(r),this.columnListElement=i,this.rebuildToggles(i),e.appendChild(t),()=>{this.columnListElement=null,this.moveMenu?.close(),t.remove()}}hasReorderPlugin(){const e=this.grid?.getPluginByName?.("reorder");return!(!e||"function"!=typeof e.moveColumn)}canMoveColumn(e){const t=this.grid.columns.find(t=>t.field===e.field);if(!t)return!1;const i=this.grid.query("canMoveColumn",t);return i.length>0&&!i.includes(!1)}rebuildToggles(e){const t=this.hasReorderPlugin();e.innerHTML="";const i=this.grid.getAllColumns().filter(e=>!e.utility),r=this.currentFragments();if(r.every(e=>!e.group))this.renderFlatColumnList(i,t,e);else for(const n of r)if(n.group)this.renderGroupSection(n.group,n.columns,t,e);else{const r=i.indexOf(n.columns[0]);e.appendChild(this.createColumnRow(n.columns[0],r,t,e))}}currentFragments(){const e=this.grid.getAllColumns().filter(e=>!e.utility),t=this.grid.query("getColumnGrouping")?.flat().filter(e=>e&&e.fields.length>0)??[];if(0===t.length)return e.map(e=>({group:null,columns:[e]}));const i=/* @__PURE__ */new Map;for(const r of t)for(const e of r.fields)i.set(e,r);return this.computeFragments(e,i)}computeFragments(e,t){const i=[];let r=null,n=[];for(const o of e){const e=t.get(o.field)??null;e&&r&&e.id===r.id?n.push(o):(n.length>0&&i.push({group:r,columns:n}),r=e,n=[o])}return n.length>0&&i.push({group:r,columns:n}),i}renderGroupSection(e,t,i,r){const n=t.map(e=>e.field),o=document.createElement("div");o.className="tbw-visibility-group-header",o.setAttribute("data-group-id",e.id),i&&(o.draggable=!0,o.classList.add("reorderable"),this.setupGroupDragListeners(o,e,n,r));const s=document.createElement("label");s.className="tbw-visibility-label";const l=document.createElement("input");l.type="checkbox";const a=t.filter(e=>e.visible).length,d=t.every(e=>e.lockVisible);a===t.length?(l.checked=!0,l.indeterminate=!1):0===a?(l.checked=!1,l.indeterminate=!1):(l.checked=!1,l.indeterminate=!0),l.disabled=d,l.addEventListener("change",()=>{const e=l.checked;for(const i of t)i.lockVisible||this.grid.setColumnVisible(i.field,e);setTimeout(()=>this.rebuildToggles(r),0)});const c=document.createElement("span");if(c.textContent=e.label,s.appendChild(l),s.appendChild(c),o.appendChild(s),i){const t=document.createElement("span");t.className="tbw-visibility-handle",this.setIcon(t,"dragHandle"),t.title=this.t("columns.dragGroupHandle","Drag to reorder group, or click for move options"),this.wireMoveHandle(t,e.label,()=>this.groupMoveActions(n)),o.insertBefore(t,s)}r.appendChild(o);const u=this.grid.getAllColumns().filter(e=>!e.utility);for(const h of t){const e=u.findIndex(e=>e.field===h.field),t=this.createColumnRow(h,e,i,r);t.classList.add("tbw-visibility-row--grouped"),r.appendChild(t)}}renderFlatColumnList(e,t,i){const r=this.grid.getAllColumns().filter(e=>!e.utility);for(const n of e){const e=r.findIndex(e=>e.field===n.field);i.appendChild(this.createColumnRow(n,e,t,i))}}createColumnRow(e,t,i,r){const n=e.header||e.field,o=document.createElement("div");o.className=e.lockVisible?"tbw-visibility-row locked":"tbw-visibility-row",o.setAttribute("data-field",e.field),o.setAttribute("data-index",String(t)),i&&this.canMoveColumn(e)&&(o.draggable=!0,o.classList.add("reorderable"),this.setupDragListeners(o,e.field,t,r));const s=document.createElement("label");s.className="tbw-visibility-label";const l=document.createElement("input");l.type="checkbox",l.checked=e.visible,l.disabled=e.lockVisible??!1,l.addEventListener("change",()=>{this.grid.toggleColumnVisibility(e.field),setTimeout(()=>this.rebuildToggles(r),0)});const a=document.createElement("span");if(a.textContent=n,s.appendChild(l),s.appendChild(a),i&&this.canMoveColumn(e)){const t=document.createElement("span");t.className="tbw-visibility-handle",this.setIcon(t,"dragHandle"),t.title=this.t("columns.dragHandle","Drag to reorder, or click for move options"),this.wireMoveHandle(t,n,()=>this.columnMoveActions(e.field)),o.appendChild(t)}return o.appendChild(s),o}wireMoveHandle(e,t,i){e.setAttribute("role","button"),e.tabIndex=-1,e.setAttribute("aria-label",`${t} — ${this.t("columns.moveHandleHint","drag, or activate for move options")}`),e.addEventListener("click",()=>{this.moveMenu??=dr("tbw-visibility-move-menu","tbw-visibility-move-menu"),this.moveMenu.open(e,t,i())})}requestColumnMove(e,t,i){const r=i>t?i-1:i;if(r===t)return;const n=this.grid.getAllColumns(),o=n.filter(e=>!e.utility)[r]?.field,s=o?n.findIndex(e=>e.field===o):n.length;this.emit("column-reorder-request",{field:e,fromIndex:t,toIndex:s})}columnMoveActions(e){const t=this.grid.getAllColumns().filter(e=>!e.utility),i=t.findIndex(t=>t.field===e),r=e=>e>=0&&e<t.length&&this.canMoveColumn(t[e]);return[{label:this.t("columns.moveUp","Move up"),disabled:!r(i-1),run:()=>this.requestColumnMove(e,i,i-1)},{label:this.t("columns.moveDown","Move down"),disabled:!r(i+1),run:()=>this.requestColumnMove(e,i,i+2)},{label:this.t("columns.moveToTop","Move to top"),disabled:i<=0||!r(0),run:()=>this.requestColumnMove(e,i,0)},{label:this.t("columns.moveToBottom","Move to bottom"),disabled:i<0||i>=t.length-1||!r(t.length-1),run:()=>this.requestColumnMove(e,i,t.length)}]}groupMoveActions(e){const t=this.currentFragments(),i=t.findIndex(t=>t.columns[0]?.field===e[0]),r=e=>t[e].columns.map(e=>e.field),n=i<=0,o=i<0||i>=t.length-1;return[{label:this.t("columns.moveUp","Move up"),disabled:n,run:()=>this.executeGroupDrop(e,r(i-1),!0)},{label:this.t("columns.moveDown","Move down"),disabled:o,run:()=>this.executeGroupDrop(e,r(i+1),!1)},{label:this.t("columns.moveToTop","Move to top"),disabled:n,run:()=>this.executeGroupDrop(e,r(0),!0)},{label:this.t("columns.moveToBottom","Move to bottom"),disabled:o,run:()=>this.executeGroupDrop(e,r(t.length-1),!1)}]}setupGroupDragListeners(e,t,i,r){e.addEventListener("dragstart",n=>{this.isDragging=!0,this.draggedGroupId=t.id,this.draggedGroupFields=[...i],this.draggedField=null,this.draggedIndex=null,n.dataTransfer&&(n.dataTransfer.effectAllowed="move",n.dataTransfer.setData("text/plain",`group:${t.id}`)),e.classList.add(Ge.DRAGGING),r.querySelectorAll(".tbw-visibility-row--grouped").forEach(e=>{const t=e.getAttribute("data-field");t&&this.draggedGroupFields.includes(t)&&e.classList.add(Ge.DRAGGING)})}),e.addEventListener("dragend",()=>{this.isDragging=!1,this.draggedGroupId=null,this.draggedGroupFields=[],this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.clearDragClasses(r)}),e.addEventListener("dragover",t=>{if(t.preventDefault(),!this.isDragging)return;if(this.draggedGroupFields.length===i.length&&this.draggedGroupFields.every(e=>i.includes(e)))return;if(!this.draggedGroupId)return;const n=e.getBoundingClientRect(),o=n.top+n.height/2,s=t.clientY<o;this.clearDragClasses(r),e.classList.add("drop-target"),e.classList.toggle("drop-before",s),e.classList.toggle("drop-after",!s)}),e.addEventListener("dragleave",()=>{e.classList.remove("drop-target","drop-before","drop-after")}),e.addEventListener("drop",t=>{if(t.preventDefault(),!this.isDragging||!this.draggedGroupId)return;if(this.draggedGroupFields.length===i.length&&this.draggedGroupFields.every(e=>i.includes(e)))return;const r=e.getBoundingClientRect(),n=t.clientY<r.top+r.height/2;this.executeGroupDrop(this.draggedGroupFields,i,n)})}executeGroupDrop(e,t,i){const r=this.grid.getAllColumns().map(e=>e.field),n=r.filter(t=>!e.includes(t)),o=i?t[0]:t[t.length-1],s=n.indexOf(o);if(-1===s)return;const l=i?s:s+1,a=r.filter(t=>e.includes(t));n.splice(l,0,...a);const d=this.grid.getPluginByName?.("reorder");d?.setColumnOrder&&d.gridElement?d.setColumnOrder(n):this.grid.setColumnOrder(n),requestAnimationFrame(()=>{this.columnListElement&&this.rebuildToggles(this.columnListElement)})}setupDragListeners(e,t,i,r){e.addEventListener("dragstart",r=>{this.isDragging=!0,this.draggedField=t,this.draggedIndex=i,this.draggedGroupId=null,this.draggedGroupFields=[],r.dataTransfer&&(r.dataTransfer.effectAllowed="move",r.dataTransfer.setData("text/plain",t)),e.classList.add(Ge.DRAGGING)}),e.addEventListener("dragend",()=>{this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.clearDragClasses(r)}),e.addEventListener("dragover",n=>{if(n.preventDefault(),!this.isDragging)return;if(this.draggedGroupId){if(e.classList.contains("tbw-visibility-row--grouped"))return}else if(this.draggedField===t)return;const o=e.getBoundingClientRect(),s=o.top+o.height/2;this.dropIndex=n.clientY<s?i:i+1,this.clearDragClasses(r),this.draggedGroupId?(r.querySelector(`.tbw-visibility-group-header[data-group-id="${this.draggedGroupId}"]`)?.classList.add(Ge.DRAGGING),r.querySelectorAll(".tbw-visibility-row--grouped").forEach(e=>{const t=e.getAttribute("data-field");t&&this.draggedGroupFields.includes(t)&&e.classList.add(Ge.DRAGGING)})):this.draggedField&&r.querySelector(`.tbw-visibility-row[data-field="${this.draggedField}"]`)?.classList.add(Ge.DRAGGING),e.classList.add("drop-target"),e.classList.toggle("drop-before",n.clientY<s),e.classList.toggle("drop-after",n.clientY>=s)}),e.addEventListener("dragleave",()=>{e.classList.remove("drop-target","drop-before","drop-after")}),e.addEventListener("drop",i=>{if(i.preventDefault(),!this.isDragging)return;if(this.draggedGroupId&&this.draggedGroupFields.length>0){if(e.classList.contains("tbw-visibility-row--grouped"))return;const r=e.getBoundingClientRect(),n=i.clientY<r.top+r.height/2;return void this.executeGroupDrop(this.draggedGroupFields,[t],n)}const r=this.draggedField,n=this.draggedIndex,o=this.dropIndex;if(null===r||null===n||null===o)return;const s=o>n?o-1:o;if(s!==n){const e=this.grid.getAllColumns(),t=e.filter(e=>!e.utility)[s]?.field,i={field:r,fromIndex:n,toIndex:t?e.findIndex(e=>e.field===t):e.length};this.emit("column-reorder-request",i)}})}};function bs(e){return e.charAt(0).toUpperCase()+e.slice(1)}function vs(e){return"id"===e.toLowerCase()?"ID":e.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/[_-]/g," ").split(" ").filter(Boolean).map(bs).join(" ")}we("visibility",e=>new ws("boolean"==typeof e?{}:e??{}));var ys=/* @__PURE__ */new Set(["string","number","boolean","date","datetime","currency"]);function Cs(e){const t=e.lastIndexOf(":");if(t>0){const i=e.slice(t+1).toLowerCase();if(ys.has(i)){const r=e.slice(0,t);return{field:r,header:vs(r),type:i}}}return{field:e,header:vs(e)}}function xs(e){return e.map(e=>"string"==typeof e?Cs(e):e)}function Rs(e,t){return t?e.map(e=>({...t,...e})):e}function Ss(e){return e.some(e=>"string"==typeof e)}var Es={STRETCH:"stretch",FIXED:"fixed"},As={AUTO:"auto",MERGE:"merge"};function _s(e,t){if(!(e&&e.length||t&&t.length))return[];if(!e||!e.length)return t||[];if(!t||!t.length)return e;const i={},r=t;for(let s=0;s<r.length;s++){const e=r[s],t=i[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.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.__headerTemplate&&(t.__headerTemplate=e.__headerTemplate),e.__element&&!t.__element&&(t.__element=e.__element);const i=e.renderer||e.viewRenderer,r=t.renderer||t.viewRenderer;i&&!r&&(t.viewRenderer=i,e.renderer&&(t.renderer=i)),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 i[e.field]={...e}}const n=e.map(e=>{const t=i[e.field];if(!t)return e;const r={...e};t.header&&!r.header&&(r.header=t.header),t.type&&!r.type&&(r.type=t.type),r.sortable=e.sortable||t.sortable,!0!==e.resizable&&!0!==t.resizable||(r.resizable=!0),null!=t.width&&null==r.width&&(r.width=t.width),null!=t.minWidth&&null==r.minWidth&&(r.minWidth=t.minWidth),t.__viewTemplate&&(r.__viewTemplate=t.__viewTemplate),t.__headerTemplate&&(r.__headerTemplate=t.__headerTemplate),t.__element&&!r.__element&&(r.__element=t.__element);const n=t.renderer||t.viewRenderer,o=r.renderer||r.viewRenderer;return n&&!o&&(r.viewRenderer=n,t.renderer&&(r.renderer=n)),t.editor&&!r.editor&&(r.editor=t.editor),r.headerRenderer||r.headerLabelRenderer||(t.headerRenderer?r.headerRenderer=t.headerRenderer:t.headerLabelRenderer&&(r.headerLabelRenderer=t.headerLabelRenderer)),delete i[e.field],r}),o=Object.keys(i);for(let s=0;s<o.length;s++)n.push(i[o[s]]);return n}function ks(e,t){try{e.part?.add?.(t)}catch{}const i=e.getAttribute("part");i?i.split(/\s+/).includes(t)||e.setAttribute("part",i+" "+t):e.setAttribute("part",t)}function Ts(e){const t=e.effectiveConfig?.fitMode||e.fitMode||Es.STRETCH;if(t!==Es.STRETCH&&t!==Es.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 o=0;o<n.length;o++){const t=n[o];if(t.width)continue;const s=i[o];let l=s?s.scrollWidth:0;for(let i=0;i<e._rowPool.length;i++){const t=e._rowPool[i].children[o];if(t){const e=t.scrollWidth;e>l&&(l=e)}}l>0&&(t.width=l+2,t.__autoSized=!0,r=!0)}r&&Ls(e),e.__didInitialAutoSize=!0}var Ms=/^(?:\d+(?:\.\d+)?(?:px|%|fr|em|rem|ch|vw|vh|vmin|vmax)|calc\(.+\)|min-content|max-content|minmax\(.+\)|fit-content\(.+\)|auto)$/i;function Is(e,t){return"number"==typeof e?`${e}px`:(Ms.test(e)||A("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 Ls(e){(e.effectiveConfig?.fitMode||e.fitMode||Es.STRETCH)===Es.STRETCH?e._gridTemplate=e._visibleColumns.map(e=>{if(null!=e.width)return Is(e.width,e.field);const t=e.minWidth;return null!=t?`minmax(${t}px, 1fr)`:"1fr"}).join(" ").trim():e._gridTemplate=e._visibleColumns.map(e=>null!=e.width?Is(e.width,e.field):"max-content").join(" "),e.style.setProperty("--tbw-column-template",e._gridTemplate)}function Ds(e,t){return!1!==e.effectiveConfig?.sortable&&!0===t.sortable}function Ps(e,t){return!1!==e.effectiveConfig?.resizable&&!1!==t.resizable}function Fs(e,t){const i=document.createElement("span");ks(i,"sort-indicator"),i.setAttribute("aria-hidden","true");const r=e._sortState?.field===t.field?e._sortState.direction:0,n=1===r?"sortAsc":-1===r?"sortDesc":"sortNone";i.dataset.icon=U(n);const o=e.icons?.[n];return void 0!==o&&function(e,t){"string"==typeof t?q(e,t):t instanceof HTMLElement&&e.replaceChildren(t.cloneNode(!0))}(i,o),i}function Hs(e,t,i){const r=document.createElement("div");r.className="resize-handle",r.setAttribute("role","button"),r.setAttribute("tabindex","-1");const n=e._visibleColumns[t];return r.setAttribute("aria-label",`Width of column ${String(n?.header??n?.field??t+1)}`),r.addEventListener("pointerdown",n=>{0!==n.button&&"mouse"===n.pointerType||(n.stopPropagation(),n.preventDefault(),e._resizeController.start(n,t,i,r))}),r.addEventListener("dblclick",i=>{i.stopPropagation(),i.preventDefault(),e._resizeController.resetColumn(t)}),r}function Gs(e,t,i,r){r.classList.add(Ge.SORTABLE),r.tabIndex=0;const n=e._sortState?.field===t.field?e._sortState.direction:0;r.setAttribute("aria-sort",0===n?"none":1===n?"ascending":"descending"),r.addEventListener("click",i=>{e._resizeController?.isResizing||e._dispatchHeaderClick?.(i,t,r)||Pn(e,t)}),r.addEventListener("keydown",i=>{if("Enter"===i.key||" "===i.key){if(i.preventDefault(),e._dispatchHeaderClick?.(i,t,r))return;Pn(e,t)}})}function zs(e){e._headerRowEl=e.findHeaderRow();const t=e._headerRowEl;t&&(t.innerHTML="",e._visibleColumns.forEach((i,r)=>{const n=document.createElement("div");n.className="cell",ks(n,"header-cell"),n.setAttribute("role","columnheader"),n.setAttribute("aria-colindex",String(r+1)),n.setAttribute("data-field",i.field),n.setAttribute("data-col",String(r)),i.type&&n.setAttribute("data-type",i.type);const o=i.header??i.field,s=e._sortState?.field===i.field?e._sortState.direction:0,l=1===s?"asc":-1===s?"desc":null;if(i.headerRenderer){const t={column:i,value:o,sortState:l,filterActive:!1,cellEl:n,renderSortIcon:()=>Ds(e,i)?Fs(e,i):null,renderFilterButton:()=>null};!function(e,t){null!=t&&("string"==typeof t?e.appendChild(N(t)):t instanceof Node&&e.appendChild(t))}(n,i.headerRenderer(t)),Ds(e,i)&&Gs(e,i,0,n),Ps(e,i)&&(n.classList.add("resizable"),n.appendChild(Hs(e,r,n)))}else if(i.headerLabelRenderer){const t={column:i,value:o},s=i.headerLabelRenderer(t),l=document.createElement("span");null==s?l.textContent=o:"string"==typeof s?q(l,s):s instanceof Node&&l.appendChild(s),n.appendChild(l),Ds(e,i)&&(Gs(e,i,0,n),n.appendChild(Fs(e,i))),Ps(e,i)&&(n.classList.add("resizable"),n.appendChild(Hs(e,r,n)))}else if(i.__headerTemplate)Array.from(i.__headerTemplate.childNodes).forEach(e=>n.appendChild(e.cloneNode(!0))),Ds(e,i)&&(Gs(e,i,0,n),n.appendChild(Fs(e,i))),Ps(e,i)&&(n.classList.add("resizable"),n.appendChild(Hs(e,r,n)));else{const t=document.createElement("span");t.textContent=o,n.appendChild(t),n.setAttribute("aria-label",o),Ds(e,i)&&(Gs(e,i,0,n),n.appendChild(Fs(e,i))),Ps(e,i)&&(n.classList.add("resizable"),n.appendChild(Hs(e,r,n)))}t.appendChild(n)}),t.querySelectorAll(`.cell.${Ge.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 Os(e,t){if(t&&t.length){const e={};return t.forEach(t=>{t.type&&(e[t.field]=t.type)}),{columns:t,typeMap:e}}const i=e[0]||{},r=Object.keys(i).map(e=>{const t=i[e],r=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:r}}),n={};return r.forEach(e=>{n[e.field]=e.type||"string"}),{columns:r,typeMap:n}}var Ns={STYLE:1,VIRTUALIZATION:2,HEADER:3,ROWS:4,COLUMNS:5,FULL:6},qs=class{#qn;#$n=0;#Wn=0;#Bn=null;#Vn=null;#Kn=null;#jn=!1;constructor(e){this.#qn=e}requestPhase(e,t){e>this.#$n&&(this.#$n=e),0===this.#Wn&&(this.#Un(),this.#Wn=requestAnimationFrame(()=>this.#Yn()))}whenReady(){return this.#Bn?this.#Bn:Promise.resolve()}setInitialReadyResolver(e){this.#Kn=e}cancel(){0!==this.#Wn&&(cancelAnimationFrame(this.#Wn),this.#Wn=0),this.#$n=0,this.#Vn&&(this.#Vn(),this.#Vn=null,this.#Bn=null)}get isPending(){return 0!==this.#$n}get pendingPhase(){return this.#$n}#Un(){this.#Bn||(this.#Bn=new Promise(e=>{this.#Vn=e}))}#Yn(){if(this.#Wn=0,!this.#qn._schedulerIsConnected)return this.#$n=0,void(this.#Vn&&(this.#Vn(),this.#Vn=null,this.#Bn=null));const e=this.#$n;this.#$n=0,e>=Ns.COLUMNS&&this.#qn._schedulerMergeConfig(),e>=Ns.ROWS&&this.#qn._schedulerProcessRows(),e>=Ns.COLUMNS&&(this.#qn._schedulerProcessColumns(),this.#qn._schedulerUpdateTemplate()),e>=Ns.HEADER&&this.#qn._schedulerRenderHeader(),e>=Ns.VIRTUALIZATION&&this.#qn.refreshVirtualWindow(!0,!0),e>=Ns.STYLE&&this.#qn._schedulerAfterRender();const t=!this.#jn;t&&(this.#jn=!0,this.#Kn?.()),this.#Vn&&(this.#Vn(),this.#Vn=null,this.#Bn=null),0!==e&&this.#Zn(e,t)}#Zn(e,t){const i=this.#qn._virtualization,r=i?.enabled?{start:i.start,end:i.end}:null,n={phase:e,initial:t,rowCount:this.#qn._rows?.length??0,visibleRange:r};this.#qn._hostElement.dispatchEvent(new CustomEvent("render",{detail:n,bubbles:!0,composed:!0}))}},$s=/* @__PURE__ */new Set(["field","header","order","group","hidden","utility"]);var Ws=class{#Xn;#Qn;#Jn;#eo;#to;#io;#ro;#no={};#oo={};#so=!0;#lo;#ao;#do;#co;#qn;constructor(e){this.#qn=e}get original(){return this.#no}get effective(){return this.#oo}get columns(){return this.#oo.columns??[]}set columns(e){this.#oo.columns=e}get lightDomColumnsCache(){return this.#to}set lightDomColumnsCache(e){this.#to=e}get originalColumnNodes(){return this.#ro}set originalColumnNodes(e){this.#ro=e}get initialColumnState(){return this.#co}set initialColumnState(e){this.#co=e}get sourcesChanged(){return this.#so}markSourcesChanged(){this.#so=!0}setGridConfig(e){this.#Xn!==e&&(this.#Xn=e,this.#so=!0,this.#to=void 0)}getGridConfig(){return this.#Xn}setColumns(e){this.#Qn=e,this.#so=!0}getColumns(){return this.#Qn}setFitMode(e){this.#Jn=e,this.#so=!0}getFitMode(){return this.#Jn}setColumnInference(e){this.#eo!==e&&(this.#eo=e,this.#so=!0)}getColumnInference(){return this.#eo}merge(){const e=(this.#oo.columns?.length??0)>0;if(!this.#so&&e)return;const t=this.#uo();this.#so=!1,this.#no=t,Object.freeze(this.#no),this.#no.columns&&Object.freeze(this.#no.columns),this.#oo=this.#ho(this.#no),this.#go()}#ho(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}#go(){const e=this.#oo;"number"==typeof e.rowHeight&&e.rowHeight>0&&(this.#qn._virtualization.rowHeight=e.rowHeight),"fixed"===e.fitMode&&this.columns.forEach(e=>{null==e.width&&(e.width="number"==typeof e.minWidth&&Number.isFinite(e.minWidth)&&e.minWidth>0?e.minWidth:80)}),this.#qn._applyAnimationConfig(e)}#uo(){const e=this.#Xn?{...this.#Xn}:{},t=Array.isArray(e.columns)?[...e.columns]:[],i=(this.#to??[]).map(e=>({...e}));let r=_s(t,i);this.#Qn&&this.#Qn.length&&(r=_s(this.#Qn,i));const n=this.#qn.sourceRows;if("merge"===(this.#eo??e.columnInference??"auto")&&n.length){r=function(e,t){if(!t.length)return e;const i=/* @__PURE__ */new Map;for(const o of t)i.set(o.field,o);const r=new Set(e.map(e=>e.field)),n=e.map(e=>{const t=i.get(e.field);if(!t)return e;const r={...e};for(const[i,n]of Object.entries(t))void 0!==n&&Object.assign(r,{[i]:n});return r});for(const o of t)r.has(o.field)||n.push(o);return n}(Os(n).columns,r)}else 0===r.length&&n.length&&(r=Os(n).columns);if(this.#io&&Object.keys(this.#io).length>0){const t={...this.#io},i=e.typeDefaults??{};for(const e of Object.keys(i)){const r=i[e],n=t[e];t[e]=n?{...n,...r}:r}e.typeDefaults=t}return r.length&&(!function(e){const t=[],i=[];for(const o of e)"number"==typeof o.order&&Number.isFinite(o.order)&&o.order>=0?t.push({col:o,order:Math.floor(o.order)}):i.push(o);if(0===t.length)return e;t.sort((e,t)=>e.order-t.order);const r=[];let n=0;for(const{col:o,order:s}of t){for(;r.length<s&&n<i.length;)r.push(i[n++]);const e=Math.min(s,r.length);r.splice(e,0,o)}for(;n<i.length;)r.push(i[n++]);e.length=0,e.push(...r)}(r),e.typeDefaults&&function(e,t){for(const i of e){const e=i.type?t[i.type]:void 0;if(e)for(const t of Object.keys(e)){if($s.has(t))continue;const r=Reflect.get(e,t);void 0!==r&&null==Reflect.get(i,t)&&("renderer"!==t&&"viewRenderer"!==t||null==i.renderer&&null==i.viewRenderer)&&Reflect.set(i,t,r)}}}(r,e.typeDefaults),r.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)}),r.forEach(e=>{e.__viewTemplate&&!e.__compiledView&&(e.__compiledView=j(e.__viewTemplate.innerHTML)),e.__editorTemplate&&!e.__compiledEditor&&(e.__compiledEditor=j(e.__editorTemplate.innerHTML))}),e.columns=r),this.#Jn&&(e.fitMode=this.#Jn),e.fitMode||(e.fitMode="stretch"),this.#eo&&(e.columnInference=this.#eo),this.#qn._pluginManager?.processConfig?.(e),e.columnState&&!this.#co&&(this.#co=e.columnState),e}collectState(e){const t=this.columns,i=this.#po();return{columns:t.map((t,r)=>{const n={field:t.field,order:r,visible:!t.hidden},o=t;void 0!==o.__renderedWidth?n.width=o.__renderedWidth:void 0!==t.width&&(n.width="string"==typeof t.width?parseFloat(t.width):t.width);const s=i.get(t.field);s&&(n.sort=s);for(const i of e)if(i.getColumnState){const e=i.getColumnState(t.field);e&&Object.assign(n,e)}return n})}}applyState(e,t){if(!e.columns||0===e.columns.length)return;const i=this.columns,r=new Map(e.columns.map(e=>[e.field,e])),n=i.map(e=>{const t=r.get(e.field);if(!t)return e;const i={...e};return void 0!==t.width&&(i.width=t.width,i.__renderedWidth=t.width),void 0!==t.visible&&(i.hidden=!t.visible),i});n.sort((e,t)=>(r.get(e.field)?.order??1/0)-(r.get(t.field)?.order??1/0)),this.columns=n;const o=e.columns.filter(e=>void 0!==e.sort).sort((e,t)=>(e.sort?.priority??0)-(t.sort?.priority??0));if(o.length>0){const e=o[0];e.sort&&(this.#qn._sortState={field:e.field,direction:"asc"===e.sort.direction?1:-1})}else this.#qn._sortState=null;for(const s of t)if(s.applyColumnState)for(const t of e.columns)s.applyColumnState(t.field,t)}resetState(e){this.#co=void 0,this.#qn._sortState=null,this.#oo=this.#ho(this.#no),this.#go();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)}#po(){const e=/* @__PURE__ */new Map,t=this.#qn._sortState;return t&&e.set(t.field,{direction:1===t.direction?"asc":"desc",priority:0}),e}requestStateChange(e){this.#ao&&clearTimeout(this.#ao),this.#ao=setTimeout(()=>{this.#ao=void 0;const t=this.collectState(e);this.#qn._emit("column-state-change",t)},100)}setColumnVisible(e,t){const i=this.columns,r=i.find(t=>t.field===e);return!!r&&(!(!t&&r.lockVisible)&&(!(!t&&0===i.filter(t=>!t.hidden&&t.field!==e).length)&&(!!r.hidden!=!t&&(r.hidden=!t,this.#qn._emit("column-visibility",{field:e,visible:t,visibleColumns:i.filter(e=>!e.hidden).map(e=>e.field)}),this.#qn._clearRowPool(),this.#qn._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.#qn._emit("column-visibility",{visibleColumns:e.map(e=>e.field)}),this.#qn._clearRowPool(),this.#qn._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])),i=[];for(const r of e){const e=t.get(r);e&&(i.push(e),t.delete(r))}for(const r of t.values())i.push(r);this.columns=i,this.#qn._invalidateVisibleColumnsCache(),zs(this.#qn),Ls(this.#qn),this.#qn._requestSchedulerPhase(Ns.COLUMNS,"configManager")}parseLightDomColumns(e){if(this.#to||(this.#ro=Array.from(e.querySelectorAll("tbw-grid-column")),this.#to=this.#ro.length?function(e){return Array.from(e.querySelectorAll("tbw-grid-column")).map(e=>{const t=e.getAttribute("field")||"";if(!t)return null;const i=t.includes(":")?Cs(t):void 0,r={field:i?.field??t,type:e.getAttribute("type")||i?.type||void 0,header:e.getAttribute("header")||i?.header||void 0,sortable:e.hasAttribute("sortable")&&"false"!==e.getAttribute("sortable"),__element:e},n=e.getAttribute("width");if(n){const e=parseFloat(n);!isNaN(e)&&/^\d+(\.\d+)?$/.test(n.trim())?r.width=e:r.width=n}const o=e.getAttribute("minWidth")||e.getAttribute("min-width");if(o){const e=parseFloat(o);isNaN(e)||(r.minWidth=e)}const s=e.getAttribute("order");if(s){const e=parseInt(s,10);Number.isFinite(e)&&e>=0&&(r.order=e)}e.hasAttribute("resizable")&&(r.resizable="false"!==e.getAttribute("resizable"));const l=e.getAttribute("options");l&&(r.options=l.split(",").map(e=>{const[t,i]=e.includes(":")?e.split(":"):[e.trim(),e.trim()];return{value:t.trim(),label:i?.trim()||t.trim()}}));const a=e.querySelector("tbw-grid-column-view"),d=e.querySelector("tbw-grid-column-editor"),c=e.querySelector("tbw-grid-column-header");a&&(r.__viewTemplate=a),c&&(r.__headerTemplate=c);const u=globalThis.DataGridElement?.getAdapters?.()??[],h=a??e,g=u.find(e=>e.canHandle(h));if(g){const e=g.createRenderer(h);e&&(r.viewRenderer=e)}const p=d??e,f=u.find(e=>e.canHandle(p));if(f){const e=f.createEditor(p);e&&(r.editor=e)}const m=u.find(t=>t.canHandle(e)&&(t.createHeaderRenderer||t.createHeaderLabelRenderer));if(m){const t=m.createHeaderRenderer?.(e);t&&(r.headerRenderer=t);const i=m.createHeaderLabelRenderer?.(e);i&&(r.headerLabelRenderer=i)}return r}).filter(e=>!!e)}(e):[]),!this.#io){const t=function(e){const t=globalThis.DataGridElement?.getAdapters?.()??[];return Array.from(e.children).filter(e=>"tbw-grid-type"===e.tagName.toLowerCase()).map(e=>{const i=e.getAttribute("name")?.trim();if(!i)return null;const r=Array.from(e.children).find(e=>"tbw-grid-column-view"===e.tagName.toLowerCase()),n=r??e,o=t.find(e=>e.canHandle(n))?.createRenderer(n),s={};for(const t of Array.from(e.attributes)){if(!t.name.startsWith("data-"))continue;const e=t.name.slice(5).replace(/-([a-z])/g,(e,t)=>t.toUpperCase()).trim();e&&(s[e]=t.value)}return{name:i,params:s,viewTemplate:r,viewRenderer:o}}).filter(e=>null!==e)}(e),i={};for(const e of t){const t={};let r=!1;if(e.viewRenderer)t.renderer=e.viewRenderer,r=!0;else if(e.viewTemplate){const i=j(e.viewTemplate.innerHTML);t.renderer=t=>i({row:t.row,value:t.value,field:t.field,column:t.column,typeDefault:e.params}),r=!0}r&&(i[e.name]=t)}this.#io=i}}clearLightDomCache(){this.#to=void 0,this.#io=void 0}#fo=/* @__PURE__ */new Map;registerLightDomHandler(e,t){this.#fo.set(e.toLowerCase(),t)}unregisterLightDomHandler(e){this.#fo.delete(e.toLowerCase())}observeLightDOM(e){this.#lo&&this.#lo.disconnect();const t=/* @__PURE__ */new Set,i=()=>{this.#do=void 0;for(const e of t)this.#fo.get(e)?.();t.clear()};this.#lo=new MutationObserver(e=>{for(const i of e){for(const e of i.addedNodes){if(e.nodeType!==Node.ELEMENT_NODE)continue;const i=e.tagName.toLowerCase();this.#fo.has(i)&&t.add(i)}for(const e of i.removedNodes){if(e.nodeType!==Node.ELEMENT_NODE)continue;const i=e.tagName.toLowerCase();this.#fo.has(i)&&t.add(i)}if("attributes"===i.type&&i.target.nodeType===Node.ELEMENT_NODE){const e=i.target.tagName.toLowerCase();this.#fo.has(e)&&t.add(e)}}t.size>0&&!this.#do&&(this.#do=setTimeout(i,0))}),this.#lo.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["title","field","header","width","hidden","id","icon","tooltip","order","name","type"]})}dispose(){this.#lo?.disconnect(),this.#ao&&clearTimeout(this.#ao),this.#do&&(clearTimeout(this.#do),this.#do=void 0)}};function Bs(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 Vs(e,t){const i=(t??Bs)(e);if("string"==typeof i){const e=document.createElement("div");return e.className="tbw-empty-message",q(e,i),e}return i}function Ks(e){e?.remove()}function js(e,t,i,r,n,o,s,l){if(!e)return;if(!function(e,t,i){return!(e||t>0||null===i)}(t,i,n))return Ks(s.el),s.el=void 0,s.renderer=void 0,s.target=void 0,s.sourceRows=void 0,void(s.filteredOut=void 0);const a=r.length,d=a>0&&0===i;if(s.el&&s.renderer===n&&s.target===o&&s.sourceRows===r&&s.filteredOut===d)return;const c="grid"===o?e:e.querySelector(".rows-container")??e;Ks(s.el),s.el=function(e,t,i="rows"){const r=document.createElement("div");return r.className="tbw-empty-overlay",r.setAttribute("role","presentation"),r.setAttribute("data-overlay-target",i),r.appendChild(Vs(e,t)),r}({sourceRowCount:a,filteredOut:d},n??void 0,o),function(e,t){e.appendChild(t)}(c,s.el),s.renderer=n,s.target=o,s.sourceRows=r,s.filteredOut=d;const u=s.el.textContent?.trim();l&&u&&qe(l,u)}var Us=/* @__PURE__ */new WeakMap,Ys=ze.TRUNCATED;function Zs(e,t){const i=Ke(t),r=function(e){if(!e)return-1;const t=e.getAttribute("data-col");return t?parseInt(t,10):-1}(t);if(i<0||r<0)return;e._focusRow=i,e._focusCol=r,je(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 Xs(e,t,i,r){let n=null;const o=i.composedPath?.();if(n=o&&o.length>0?o[0]:i.target,!n||!t.contains(n)||!n.closest?.("[data-col]")){const e=document.elementFromPoint(i.clientX,i.clientY);e&&(n=e)}const l=n?.closest?.("[data-col]"),a=n?.closest?.(".data-grid-row"),d=n?.closest?.(".header-row");let c,u,h,g,p,f;return l&&(c=parseInt(l.getAttribute("data-row")??"-1",10),u=parseInt(l.getAttribute("data-col")??"-1",10),c>=0&&u>=0&&(h=e._rows[c],f=e._visibleColumns[u],g=f?.field,p=h&&g?s(h,g):void 0)),{type:r,row:h,rowIndex:void 0!==c&&c>=0?c:void 0,colIndex:void 0!==u&&u>=0?u:void 0,field:g,value:p,column:f,originalEvent:i,cellElement:l??void 0,rowElement:a??void 0,isHeader:!!d,cell:void 0!==c&&void 0!==u&&c>=0&&u>=0?{row:c,col:u}:void 0}}function Qs(e,t,i){if(0!==i.button&&"mouse"===i.pointerType)return;if(Us.get(e))return;const r=function(e){return"touch"===e.pointerType||"pen"===e.pointerType||"mouse"!==e.pointerType&&"coarse"===ln()}(i);let n=null;const o=()=>{const r=Xs(e,t,i,"mousedown");return e._dispatchCellMouseDown?.(r)??!1};if(!r){if(!o())return;Us.set(e,!0)}bn(i,t,{onPromote:()=>{if(r){if(!o())return;Us.set(e,!0),n=function(e){if(!e)return()=>{};const t=e.style.touchAction;return e.style.touchAction="none",()=>{e.style.touchAction=t}}(e._bodyEl),function(e){const t=e.ownerDocument;if(!t)return;let i=null;const r=t=>{const i=t.target;i&&e.contains(i)&&(t.preventDefault(),t.stopPropagation(),n())},n=()=>{null!==i&&clearTimeout(i),i=null,t.removeEventListener("contextmenu",r,!0)};t.addEventListener("contextmenu",r,!0),i=setTimeout(n,700)}(t)}},onMove:i=>{if(!Us.get(e))return;const r=Xs(e,t,i,"mousemove");e._dispatchCellMouseMove?.(r)},onEnd:i=>{if(n?.(),n=null,!Us.get(e))return;const r=Xs(e,t,i,"mouseup");e._dispatchCellMouseUp?.(r),Us.set(e,!1)},onCancel:()=>{n?.(),n=null,Us.set(e,!1)}},r?{longPressDuration:400}:{threshold:3})}function Js(e,t,i,r){t.addEventListener("keydown",t=>lt(e,t),{signal:r}),i.addEventListener("pointerdown",t=>Qs(e,i,t),{signal:r}),i.addEventListener("mouseover",t=>{if(e.getPluginByName?.("tooltip"))return;const i=t.target.closest(".cell");if(!i)return;const r=t.relatedTarget;r&&i.contains(r)||function(e){const t=e.hasAttribute(Ys);if(e.title&&!t)return;const i=e.scrollWidth>e.clientWidth?(e.textContent??"").trim():"";i?(e.title=i,e.setAttribute(Ys,"")):t&&(e.removeAttribute("title"),e.removeAttribute(Ys))}(i)},{signal:r,passive:!0})}var el=class{#qn;#mo=/* @__PURE__ */new Set;#wo=/* @__PURE__ */new Map;#bo=null;constructor(e){this.#qn=e,this.#vo()}focusCell(e,t){const i=this.#qn,r=i._rows.length-1;if(r<0)return;let n;if("string"==typeof t){if(n=i._visibleColumns.findIndex(e=>e.field===t),n<0)return}else n=t;const o=i._visibleColumns.length-1;o<0||(i._focusRow=Math.max(0,Math.min(e,r)),i._focusCol=Math.max(0,Math.min(n,o)),at(i))}get focusedCell(){const e=this.#qn;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 i=this.#qn._virtualization;if(!i.enabled)return;const r=i.container;if(!r)return;const n=this.#qn._rows.length;if(0===n)return;const o=Math.max(0,Math.min(e,n-1)),s=t?.align??"nearest",l=t?.behavior??"instant";let a,d;const c=i.positionCache;i.variableHeights&&c&&c.length>o?(a=c[o].offset,d=c[o].height):(a=o*i.rowHeight,d=i.rowHeight);const u=i.viewportEl?.clientHeight??r.clientHeight??0;if(u<=0)return;const h=this.#qn._getVerticalScrollOffsets?.(o)??{top:0,bottom:0};if(h.skipScroll)return;const g=Math.max(0,h.top),p=u-g-Math.max(0,h.bottom);if(p<=0)return;const f=r.scrollTop,m=a+d,w=f+g,b=f+g+p;let v;switch(s){case"start":v=a-g;break;case"center":v=a-g-p/2+d/2;break;case"end":v=m-p-g;break;default:if(a>=w&&m<=b)return;v=a<w?a-g:m-p-g}v=Math.max(0,v);const y=it(v,i.scrollMapping);"smooth"===l&&"0"!==getComputedStyle(this.#qn).getPropertyValue("--tbw-animation-enabled").trim()?r.scrollTo({top:y,behavior:"smooth"}):r.scrollTop=y}scrollToRowById(e,t){const i=this.#qn._getRowEntry(e);i&&this.scrollToRow(i.index,t)}registerExternalFocusContainer(e){if(this.#mo.has(e))return;this.#mo.add(e);const t=new AbortController,i=t.signal,r=this.#qn;e.addEventListener("focusin",e=>{r.dataset.hasFocus="",this.#yo(e.target)},{signal:i}),e.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&this.containsFocus(t)||delete r.dataset.hasFocus,null===t&&this.#Co()},{signal:i}),this.#wo.set(e,()=>t.abort())}unregisterExternalFocusContainer(e){this.#mo.delete(e);const t=this.#wo.get(e);t&&(t(),this.#wo.delete(e))}containsFocus(e){const t=e??document.activeElement;return!!t&&(!!this.#qn.contains(t)||this.isInExternalFocusContainer(t))}isInExternalFocusContainer(e){for(const t of this.#mo)if(t.contains(e))return!0;return!1}#vo(){const e=this.#qn;e.addEventListener("focusin",e=>this.#yo(e.target),{capture:!0}),e.addEventListener("focusout",e=>{null===e.relatedTarget&&this.#Co()})}#yo(e){if(!(e instanceof HTMLElement))return;if(e===this.#qn)return;const t=e.closest?.(".cell");t&&!t.classList.contains("editing")||this.isInExternalFocusContainer(e)||(this.#bo=e)}#Co(){queueMicrotask(()=>{this.#qn.isConnected&&document.activeElement===document.body&&this.restoreLastFocus()})}restoreLastFocus(){const e=this.#bo;if(!e)return!1;if(!e.isConnected)return this.#bo=null,!1;if(e===document.activeElement)return!0;try{e.focus({preventScroll:!0})}catch{return!1}return document.activeElement===e}get lastFocusedElement(){return this.#bo?.isConnected?this.#bo:null}};var tl="function"==typeof requestIdleCallback;function il(e){tl?cancelIdleCallback(e):clearTimeout(e)}function rl(e){let t=null,i=null,r=!1,n=null,o=null,s=null,l=null,a=null;const d=()=>{null!==a&&(clearTimeout(a),a=null)},c=t=>{const i=e._visibleColumns[t];return null!=i?.__renderedWidth?i.__renderedWidth:"number"==typeof i?.width?i.width:(t=>(e._headerRowEl??e.findHeaderRow?.())?.querySelectorAll(".cell")[t])(t)?.getBoundingClientRect().width??0},u=(t,i)=>{const r=e._visibleColumns[t];if(!r)return null;const o=Math.max(function(e){return"number"==typeof e?.minWidth&&Number.isFinite(e.minWidth)&&e.minWidth>0?e.minWidth:40}(r),i);return r.width=o,r.__userResized=!0,r.__renderedWidth=o,null==n&&(n=requestAnimationFrame(()=>{n=null,e.updateTemplate?.()})),e.dispatchEvent(new CustomEvent("column-resize",{detail:{field:r.field,width:o}})),o},h=e=>{if(!t)return;const i=e.clientX-t.startX;0!==i&&(r=!0),u(t.colIndex,t.startWidth+i)};let g=!1;const p=()=>{g=!0,requestAnimationFrame(()=>{g=!1})},f=i=>{i&&p(),null!==o&&(document.documentElement.style.cursor=o,o=null),null!==s&&(document.body.style.userSelect=s,s=null),t=null,i&&e.requestStateChange&&e.requestStateChange()};function m(t){const i=e._visibleColumns[t];i&&(d(),i.__userResized=!1,i.__renderedWidth=void 0,i.width=i.__originalWidth,e.updateTemplate?.(),e.requestStateChange?.(),e.dispatchEvent(new CustomEvent("column-resize-reset",{detail:{field:i.field,width:i.width}})))}return{get isResizing(){return null!==t||g},start(n,g,w,b){const v=function(e){return"pointerId"in e?e:new PointerEvent("pointerdown",{pointerId:1,pointerType:"mouse",isPrimary:!0,clientX:e.clientX,clientY:e.clientY,button:e.button,buttons:e.buttons})}(n);n.preventDefault(),i?.(),i=null,d(),r=!1;const y=e._headerRowEl??e.findHeaderRow?.();y&&function(t,i){const r=i.querySelectorAll(".cell");for(let n=0;n<e._visibleColumns.length;n++){if(n===t)continue;const i=e._visibleColumns[n];if(null==i.width&&!i.__userResized){const e=r[n]?.getBoundingClientRect().width;e&&(i.width=Math.round(e),i.__userResized=!0,i.__renderedWidth=i.width)}}}(g,y);const C=e._visibleColumns[g],x="number"==typeof C?.width?C.width:void 0,R=C?.__renderedWidth??x??w.getBoundingClientRect().width;t={startX:v.clientX,colIndex:g,startWidth:R,startConfiguredWidth:C?.width,startRenderedWidth:C?.__renderedWidth,startUserResized:C?.__userResized??!1},null===o&&(o=document.documentElement.style.cursor),document.documentElement.style.cursor="e-resize",null===s&&(s=document.body.style.userSelect),document.body.style.userSelect="none";const S=b??w;i=bn(v,S,{onMove:h,onEnd:()=>{i=null,r?f(!0):(p(),f(!1),a=setTimeout(()=>{a=null,function(t,i){l??=Bn({id:"tbw-column-size-popover",getSize:c,setSize:(t,i)=>{u(t,i),e.requestStateChange?.()},reset:m,getLabel:t=>{const i=e._visibleColumns[t];return`Width of column ${String(i?.header??i?.field??t+1)}`},getHost:()=>e}),l.open(t,i)}(g,S)},300))},onCancel:()=>{i=null,(()=>{const i=t;if(i){const t=e._visibleColumns[i.colIndex];t&&(t.width=i.startConfiguredWidth,t.__renderedWidth=i.startRenderedWidth,t.__userResized=i.startUserResized,e.updateTemplate?.(),e.dispatchEvent(new CustomEvent("column-resize",{detail:{field:t.field,width:i.startWidth}}))),p()}f(!1)})()}})},resetColumn:m,setColumnWidth(t,i){null!=u(t,i)&&e.requestStateChange?.()},getColumnWidth:c,dispose(){i?.(),i=null,f(null!==t),d(),l?.dispose(),l=null,null!=n&&(cancelAnimationFrame(n),n=null)}}}var nl="data-animating",ol={change:"--tbw-row-change-duration",insert:"--tbw-row-insert-duration",remove:"--tbw-row-remove-duration"},sl={change:500,insert:300,remove:200};function ll(e,t){const i=ol[t],r=getComputedStyle(e).getPropertyValue(i);if(r){const e=function(e){const t=e.trim().toLowerCase();return t.endsWith("ms")?parseFloat(t):t.endsWith("s")?1e3*parseFloat(t):parseFloat(t)}(r);if(!isNaN(e)&&e>0)return e}return sl[t]}function al(e,t,i){if(t<0)return Promise.resolve(!1);const r=e.findRenderedRowElement?.(t);return r?new Promise(e=>{!function(e,t,i){e.removeAttribute(nl),e.offsetWidth,e.setAttribute(nl,t);const r=ll(e,t);setTimeout(()=>{"remove"!==t&&e.removeAttribute(nl),i?.()},r)}(r,i,()=>e(!0))}):Promise.resolve(!1)}function dl(e,t){if(t)return t(e);const i=e;return"id"in i&&null!=i.id?String(i.id):"_id"in i&&null!=i._id?String(i._id):void 0}var cl=class{#qn;constructor(e){this.#qn=e}getRow(e){return this.#qn._getRowEntry(e)?.row}#xo(e,t,i,r,n){const o=this.#qn,l=[];for(const[a,c]of Object.entries(r)){if("__proto__"===a||"constructor"===a||"prototype"===a)continue;const h=s(t,a);if(h===c)continue;const g=o.query?.("commitCellValue",{rowIndex:i,rowId:e,row:t,field:a,oldValue:h,newValue:c,source:n});g?.includes(!1)||(g?.includes(!0)||(d(t,a,c),u(t)),l.push({field:a,oldValue:h,newValue:c}),o.dispatchEvent(new CustomEvent("cell-change",{detail:{row:t,rowId:e,rowIndex:i,field:a,oldValue:h,newValue:c,changes:r,source:n},bubbles:!0,composed:!0})))}return l}updateRow(e,t,i="api"){const r=this.#qn,n=r._getSourceRowEntry(e);if(!n)return void A(b,`Row with ID "${e}" not found. Ensure the row exists and getRowId is correctly configured.`,r.id);const{row:o,index:s}=n;this.#xo(e,o,s,t,i).length>0&&(Vo(r),r._requestSchedulerPhase(Ns.VIRTUALIZATION,"updateRow"),r._emitDataChange())}updateRows(e,t="api"){const i=this.#qn;let r=!1;for(const{id:n,changes:o}of e){const e=i._getSourceRowEntry(n);if(!e){A(b,`Row with ID "${n}" not found. Ensure the row exists and getRowId is correctly configured.`,i.id);continue}const{row:s,index:l}=e;this.#xo(n,s,l,o,t).length>0&&(r=!0)}r&&(Vo(i),i._requestSchedulerPhase(Ns.VIRTUALIZATION,"updateRows"),i._emitDataChange())}async insertRow(e,t,i=!0){const r=this.#qn,n=Math.max(0,Math.min(e,r._rows.length));r.sourceRows=[...r.sourceRows,t];const o=[...r._rows];o.splice(n,0,t),r._rows=o,r._sortState&&(r.__originalOrder=[...r.__originalOrder,t]),this.#Ro(),r._emitPluginEvent("row-inserted",{row:t,index:n}),r._emitDataChange(),i&&(await new Promise(e=>requestAnimationFrame(()=>e())),await al(r,n,"insert"))}async removeRow(e,t=!0){const i=this.#qn,r=i._rows[e];if(!r)return;t&&await al(i,e,"remove");const n=i._rows.indexOf(r);if(n<0)return r;const o=[...i._rows];o.splice(n,1),i._rows=o;const s=i.sourceRows.indexOf(r);if(s>=0){const e=[...i.sourceRows];e.splice(s,1),i.sourceRows=e}if(i._sortState){const e=i.__originalOrder.indexOf(r);if(e>=0){const t=[...i.__originalOrder];t.splice(e,1),i.__originalOrder=t}}return this.#Ro(),i._emitDataChange(),t&&this.#So(),r}async applyTransaction(e,t=!0){const i={added:[],updated:[],removed:[]};return await this.#Eo(e,i,t),this.#Ao(e,i),this.#_o(e,i),this.#ko(i),t&&await this.#To(i),i}async#Eo(e,t,i){if(!e.remove?.length)return;const r=this.#qn;for(const{id:n}of e.remove){const e=r._getRowEntry(n);if(!e)continue;const{row:o}=e;if(i){const e=r._rows.indexOf(o);e>=0&&await al(r,e,"remove")}const s=r._rows.indexOf(o);if(s<0){t.removed.push(o);continue}const l=[...r._rows];l.splice(s,1),r._rows=l;const a=r.sourceRows.indexOf(o);if(a>=0){const e=[...r.sourceRows];e.splice(a,1),r.sourceRows=e}if(r._sortState){const e=r.__originalOrder.indexOf(o);if(e>=0){const t=[...r.__originalOrder];t.splice(e,1),r.__originalOrder=t}}t.removed.push(o)}}#Ao(e,t){if(!e.update?.length)return;const i=this.#qn,r=new Set(e.remove?.map(e=>e.id));for(const{id:n,changes:o}of e.update){if(r.has(n))continue;const e=i._getRowEntry(n);if(!e)continue;const{row:l,index:a}=e;let c=!1;for(const[t,r]of Object.entries(o)){const e=s(l,t);e!==r&&(c=!0,d(l,t,r),u(l),i.dispatchEvent(new CustomEvent("cell-change",{detail:{row:l,rowId:n,rowIndex:a,field:t,oldValue:e,newValue:r,changes:o,source:"api"},bubbles:!0,composed:!0})))}c&&t.updated.push(l)}}#_o(e,t){if(!e.add?.length)return;const i=this.#qn;for(const r of e.add)i.sourceRows=[...i.sourceRows,r],i._rows=[...i._rows,r],i._sortState&&(i.__originalOrder=[...i.__originalOrder,r]),t.added.push(r)}#ko(e){const t=this.#qn,i=e.added.length>0||e.removed.length>0,r=e.updated.length>0;i?this.#Ro():r&&(Vo(t),t._requestSchedulerPhase(Ns.VIRTUALIZATION,"applyTransaction")),(i||r)&&t._emitDataChange()}async#To(e){const t=this.#qn;if(e.added.length>0){await new Promise(e=>requestAnimationFrame(()=>e()));for(const i of e.added){const e=t._rows.indexOf(i);e>=0&&await al(t,e,"insert")}}for(const i of e.updated){const e=t._rows.indexOf(i);e>=0&&await al(t,e,"change")}e.removed.length>0&&this.#So()}#Ro(){const e=this.#qn;Vo(e),e._rebuildRowIdMap(),e.__rowRenderEpoch++;for(let t=0;t<e._rowPool.length;t++)e._rowPool[t].__epoch=-1;e.refreshVirtualWindow(!0)}#So(){const e=this.#qn;requestAnimationFrame(()=>{const t=e.querySelectorAll('[data-animating="remove"]');for(let e=0;e<t.length;e++)t[e].removeAttribute("data-animating")})}#Mo=null;#Io=[];#Lo=null;applyTransactionAsync(e){return this.#Mo||(this.#Mo={add:[],update:[],remove:[]}),e.add&&this.#Mo.add.push(...e.add),e.update&&this.#Mo.update.push(...e.update),e.remove&&this.#Mo.remove.push(...e.remove),new Promise(e=>{this.#Io.push(e),null===this.#Lo&&(this.#Lo=requestAnimationFrame(()=>{this.#Lo=null;const e=this.#Mo,t=this.#Io;this.#Mo=null,this.#Io=[],this.applyTransaction(e,!1).then(e=>{for(const i of t)i(e)})}))})}},ul="tbw-grid",hl=ul;function gl(){return hl}var pl="tbw-grid-styles",fl="",ml=/* @__PURE__ */new Map;function wl(){const e=function(){const e=gl();return"tbw-grid"===e?pl:`${pl}-${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 bl(e){const t=gl();return"tbw-grid"===t?e:e.replace(/(?<![-\w])tbw-grid(?![-\w])/g,t)}function vl(){const e=wl(),t=Array.from(ml.values()).join("\n");e.textContent=`${fl}\n\n/* Plugin Styles */\n${t}`}async function yl(e){if(fl)return;if("string"==typeof e&&e.length>0)return fl=bl(e),void vl();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){A("TBW120",`Failed to extract grid.css from document stylesheets: ${e}`)}return null}();t?(fl=bl(t),vl()):"undefined"!=typeof process&&"test"===process.env.NODE_ENV||A("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 Cl(e){e.startY=null,e.startX=null,e.lastY=null,e.lastX=null,e.lastTime=null,e.locked=!1}function xl(e){e.momentumRaf&&(cancelAnimationFrame(e.momentumRaf),e.momentumRaf=0)}function Rl(e,t){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 i=.95,r=1;let n=performance.now();const o=()=>{const s=performance.now(),l=s-n;n=s;const a=l/16,d=Math.pow(i,a);e.velocityY*=d,e.velocityX*=d;const c=16*e.velocityY,u=16*e.velocityX,h=Math.abs(c)>=r,g=Math.abs(u)>=r;h&&(t.fauxScrollbar.scrollTop+=c),g&&t.scrollArea&&(t.scrollArea.scrollLeft+=u),e.momentumRaf=h||g?requestAnimationFrame(o):0};e.momentumRaf=requestAnimationFrame(o)}(e,t),Cl(e)}function Sl(e,t,i,r){e.addEventListener("pointerdown",i=>{"touch"===i.pointerType&&null===t.activePointerId&&(t.activePointerId=i.pointerId,e.setPointerCapture(i.pointerId),function(e,t,i){xl(i),i.startY=t,i.startX=e,i.lastY=t,i.lastX=e,i.lastTime=performance.now(),i.velocityY=0,i.velocityX=0,i.locked=!1}(i.clientX,i.clientY,t))},{passive:!0,signal:r}),e.addEventListener("pointermove",e=>{e.pointerId===t.activePointerId&&function(e,t,i,r){if(null===i.lastY||null===i.lastX)return!1;const n=performance.now(),o=i.lastY-t,s=i.lastX-e;if(null!==i.lastTime){const e=n-i.lastTime;e>0&&(i.velocityY=o/e,i.velocityX=s/e)}if(i.lastY=t,i.lastX=e,i.lastTime=n,i.locked){const{scrollTop:e,scrollHeight:t,clientHeight:i}=r.fauxScrollbar;if(o>0&&e<t-i||o<0&&e>0?r.fauxScrollbar.scrollTop+=o:0!==o&&window.scrollBy(0,o),r.scrollArea){const{scrollLeft:e,scrollWidth:t,clientWidth:i}=r.scrollArea;s>0&&e<t-i||s<0&&e>0?r.scrollArea.scrollLeft+=s:0!==s&&window.scrollBy(s,0)}return!0}const l=null!==i.startY?Math.abs(i.startY-t):0,a=null!==i.startX?Math.abs(i.startX-e):0;if(l<3&&a<3)return!1;const d=l>=a,{scrollHeight:c,clientHeight:u}=r.fauxScrollbar,h=c-u>0;let g=!1;if(r.scrollArea){const{scrollWidth:e,clientWidth:t}=r.scrollArea;g=e-t>0}return!!(d&&h||!d&&g)&&(i.locked=!0,r.fauxScrollbar.scrollTop+=o,r.scrollArea&&(r.scrollArea.scrollLeft+=s),!0)}(e.clientX,e.clientY,t,i)&&e.preventDefault()},{passive:!1,signal:r}),e.addEventListener("pointerup",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Rl(t,i))},{passive:!0,signal:r}),e.addEventListener("pointercancel",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Cl(t))},{passive:!0,signal:r}),e.addEventListener("lostpointercapture",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Cl(t))},{passive:!0,signal:r})}var El=[{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}],Al=[{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 _l(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function kl(e){return`import '@toolbox-web/grid/features/${_l(e)}';`}function Tl(e){return`import { ${Il(e)}Plugin } from '@toolbox-web/grid/plugins/${_l(e)}';`}function Ml(e){const t=e?.features;return!!t&&"object"==typeof t&&Object.keys(t).length>0}function Il(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Ll(e,t){return e.some(e=>e.name===t)}var Dl=class{#qn;state;#Do=0;#Po=0;constructor(e,t){this.#qn=e,this.state={enabled:!0,rowHeight:28,bypassThreshold:24,start:0,end:0,container:null,viewportEl:null,totalHeightEl:null,positionCache:null,heightCache:{byKey:/* @__PURE__ */new Map,byRef:/* @__PURE__ */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}}#Fo(){const e=this.state,t=e.container??this.#qn._hostElement,i=e.viewportEl??t,r=t?.clientHeight??0;return{fauxHeight:r,viewportHeight:i?.clientHeight??0,scrollAreaHeight:e.scrollAreaEl?e.scrollAreaEl.clientHeight:r}}updateCachedGeometry(){const e=this.state,t=e.container,i=e.viewportEl??t;i&&(e.cachedViewportHeight=i.clientHeight),t&&(e.cachedFauxHeight=t.clientHeight);const r=e.scrollAreaEl;r&&(e.cachedScrollAreaHeight=r.clientHeight)}calculateTotalSpacerHeight(e,t=!1){const i=this.state;let r,n,o;t?(({fauxHeight:r,viewportHeight:n,scrollAreaHeight:o}=this.#Fo()),i.cachedFauxHeight=r,i.cachedViewportHeight=n,i.cachedScrollAreaHeight=o):(r=i.cachedFauxHeight,n=i.cachedViewportHeight,o=i.cachedScrollAreaHeight||r);const s=o-n,l=Math.max(0,r-o);let a;return a=i.variableHeights&&i.positionCache?function(e){if(0===e.length)return 0;const t=e[e.length-1];return t.offset+t.height}(i.positionCache):e*i.rowHeight,i.scrollMapping=et(a,n),i.scrollMapping.spacerHeight+s+l}initializePositionCache(){const e=this.state;if(!e.variableHeights)return;const t=this.#qn,i=t._rows,r=e.rowHeight||28,n=t.effectiveConfig?.rowHeight,o=t.effectiveConfig?.getRowId,s=o?e=>o(e):void 0;e.positionCache=function(e,t,i,r,n){const o=new Array(e.length);let s=0;for(let l=0;l<e.length;l++){const a=e[l];let d=n?.(a,l),c=void 0!==d;void 0===d&&(d=Ze(t,a,r.rowId),c=void 0!==d),void 0===d&&(d=i,c=!1),o[l]={offset:s,height:d,measured:c},s+=d}return o}(i,e.heightCache,r,{rowId:s},(e,i)=>{const r=t._getPluginRowHeight(e,i);if(void 0!==r)return r;if(n){const t=n(e,i);if(void 0!==t&&t>0)return t}});const l=function(e,t,i,r){let n=0,o=0;for(let s=0;s<e.length;s++){const i=e[s];i.measured&&void 0===r?.(t[s],s)&&(o+=i.height,n++)}return{measuredCount:n,averageHeight:n>0?o/n:i}}(e.positionCache,i,r,(e,i)=>t._getPluginRowHeight(e,i));e.measuredCount=l.measuredCount,l.measuredCount>0&&(e.averageHeight=l.averageHeight)}invalidateRowHeight(e,t){const i=this.state;if(!i.variableHeights)return;if(!i.positionCache)return;const r=this.#qn._rows;if(e<0||e>=r.length)return;const n=r[e];let o=t;void 0===o&&(o=this.#qn._getPluginRowHeight(n,e)),void 0===o&&(o=i.rowHeight);const s=i.positionCache[e];if(s&&!(Math.abs(s.height-o)<1)&&(function(e,t,i){if(t<0||t>=e.length)return;const r=e[t],n=i-r.height;if(r.measured=!0,0!==n){r.height=i;for(let i=t+1;i<e.length;i++)e[i].offset+=n}}(i.positionCache,e,o),i.totalHeightEl)){const e=this.calculateTotalSpacerHeight(r.length);i.totalHeightEl.style.height=`${e}px`}}measureRenderedRowHeights(e,t){const i=this.state;if(!i.variableHeights)return;if(!i.positionCache)return;const r=this.#qn,n=r._bodyEl;if(!n)return;const o=n.querySelectorAll(".data-grid-row"),s=r.effectiveConfig?.getRowId,l=r._rows,a=Qe({positionCache:i.positionCache,heightCache:i.heightCache,rows:l,defaultHeight:i.rowHeight,start:e,end:t,getPluginHeight:(e,t)=>r._getPluginRowHeight(e,t),getRowId:s?e=>s(e):void 0},o);if(a.hasChanges&&(i.measuredCount=a.measuredCount,i.averageHeight=a.averageHeight,i.totalHeightEl)){const e=this.calculateTotalSpacerHeight(l.length);i.totalHeightEl.style.height=`${e}px`}}#Ho(e,t){const i=this.#qn;return i._renderVisibleRows(0,e),t||i._afterPluginRender(),!0}#Go(e,t,i,r){const n=this.state,o=this.#qn,s=i||0!==n.start||n.end!==t;if(n.start=0,n.end=t,o._renderVisibleRows(0,t,o.__rowRenderEpoch),i){n.variableHeights&&this.initializePositionCache();let i=n.container?.scrollTop??0;if(n.totalHeightEl){const e=this.calculateTotalSpacerHeight(t,!0);n.totalHeightEl.style.height=`${e}px`;const r=e-n.cachedFauxHeight;i>r&&(i=r>0?r:0)}e.style.transform=`translateY(${-i}px)`}return o._updateAriaCounts(t,o._visibleColumns.length),r||o._afterPluginRender(),s}#zo(e,t){const i=this.state,r=i.positionCache;let n;i.variableHeights&&r&&r.length>0?(n=Xe(r,e),-1===n&&(n=0)):n=Math.floor(e/i.rowHeight),n-=n%2,n<0&&(n=0),t>0&&n>t-1&&(n=t-1);const o=this.#qn._adjustPluginVirtualStart(n,e,i.rowHeight);return void 0!==o&&o<n&&(n=o-o%2,n<0&&(n=0)),n}#Oo(e,t,i){const r=this.state,n=r.rowHeight,o=r.positionCache;let s;if(r.variableHeights&&o&&o.length>0){const r=t+3*n;let l=0;for(s=e;s<i&&l<r;)l+=o[s].height,s++;const a=Math.ceil(t/n)+3;s-e<a&&(s=Math.min(e+a,i))}else s=e+Math.ceil(t/n)+3;return s>i?i:s}#No(e){const t=this.state;queueMicrotask(()=>{if(!t.totalHeightEl)return;const i=this.calculateTotalSpacerHeight(e);0===t.cachedFauxHeight&&t.cachedViewportHeight>0||(t.totalHeightEl.style.height=`${i}px`)})}#qo(){const e=this.state;this.#Do||(this.#Do=requestAnimationFrame(()=>{this.#Do=0;const t=this.#qn;if(!t._schedulerIsConnected||!e.totalHeightEl)return void(this.#Po=0);const{fauxHeight:i,viewportHeight:r,scrollAreaHeight:n}=this.#Fo();r!==e.cachedViewportHeight||n!==e.cachedScrollAreaHeight||i!==e.cachedFauxHeight?this.#Po>=3?this.#Po=0:(this.#Po++,t._requestSchedulerPhase(Ns.VIRTUALIZATION,"geometry-drift")):this.#Po=0}))}refreshVirtualWindow(e=!1,t=!1){const i=this.state,r=this.#qn,n=r._bodyEl;if(!n)return!1;const o=r._rows.length;if(!i.enabled)return this.#Ho(o,t);if(e&&this.#qo(),o<=i.bypassThreshold)return this.#Go(n,o,e,t);const s=i.container,l=i.viewportEl??s,a=e?i.cachedViewportHeight=l.clientHeight:i.cachedViewportHeight||(i.cachedViewportHeight=l.clientHeight),d=tt(s.scrollTop,i.scrollMapping);e&&i.variableHeights&&this.initializePositionCache();const c=this.#zo(d,o),u=this.#Oo(c,a,o);if(!e&&c===i.start&&u===i.end)return!1;i.start=c,i.end=u;const h=e?i.cachedFauxHeight=s.clientHeight:i.cachedFauxHeight||(i.cachedFauxHeight=s.clientHeight);if(e&&i.scrollAreaEl&&(i.cachedScrollAreaHeight=i.scrollAreaEl.clientHeight),0===h&&a>0)return r._requestSchedulerPhase(Ns.VIRTUALIZATION,"stale-refs-retry"),!1;e&&i.totalHeightEl&&(i.totalHeightEl.style.height=`${this.calculateTotalSpacerHeight(o)}px`);const g=i.positionCache,p=i.variableHeights&&g&&g[c]?g[c].offset:c*i.rowHeight;return n.style.transform=`translateY(${-(d-p)}px)`,r._renderVisibleRows(c,u,r.__rowRenderEpoch),e&&i.variableHeights&&this.measureRenderedRowHeights(c,u),r._updateAriaCounts(o,r._visibleColumns.length),e&&!t&&(r._afterPluginRender(),this.#No(o)),!0}#$o=!1;#Wo=0;#Bo;#Vo=!1;#Ko(){return this.#qn._pluginManager?.hasRowHeightPlugin?.()??!1}configureVariableHeights(){const e=this.state,t=this.#qn.effectiveConfig?.rowHeight,i=this.#Ko();"function"==typeof t||i?e.variableHeights||(e.variableHeights=!0,e.rowHeight="number"==typeof t&&t>0?t:e.rowHeight||28,this.initializePositionCache(),"function"!=typeof t&&(this.#$o=!0)):!i&&"function"!=typeof t&&e.variableHeights?(e.variableHeights=!1,e.positionCache=null):"number"==typeof t&&t>0?(e.rowHeight=t,e.variableHeights=!1):requestAnimationFrame(()=>this.#jo())}#jo(){const e=this.#qn,t=this.state;if(this.#Ko())return;const i=e.effectiveConfig?.rowHeight;if("number"==typeof i&&i>0)return;const r=e._bodyEl;if(!r?.querySelector(".data-grid-row"))return;const n=this.#Uo(),o=[];for(const g of r.querySelectorAll(".data-grid-row")){if(g.style.getPropertyValue("--tbw-row-height"))continue;let e=0;g.querySelectorAll(".cell").forEach(t=>{const i=t.offsetHeight;i>e&&(e=i)});const t=Math.max(g.getBoundingClientRect().height,e);t>0&&o.push(t)}if(0===o.length)return;o.sort((e,t)=>e-t);const s=o.length>>1,l=o.length%2==1?o[s]:(o[s-1]+o[s])/2,a=t.rowHeight,d=this.#Wo,c=n>0&&d>0&&Math.abs(n-d)>1,u=n>0&&0===d,h=l>0&&l-a>1;if(n>0&&(this.#Wo=n),c||u||h){const i=c||u?Math.max(n,l):l;Math.abs(i-a)>1&&(t.rowHeight=i,e._requestSchedulerPhase(Ns.VIRTUALIZATION,"measureRowHeight"))}}#Uo(){const e=this.#qn._hostElement;if(!e)return 0;const t=getComputedStyle(e).getPropertyValue("--tbw-row-height").trim();if(!t)return 0;if(t.endsWith("px"))return parseFloat(t)||0;const i=this.#qn._bodyEl?.querySelector('.data-grid-row:not([style*="--tbw-row-height"]) > .cell');if(!i)return 0;const r=parseFloat(getComputedStyle(i).minHeight);return r>0?r:0}afterRenderRowHeights(){this.state.enabled&&this.#Yo(),this.#$o&&this.#qn._bodyEl?.querySelector(".data-grid-row")&&(this.#$o=!1,requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.#Zo()||(this.#$o=!0)})}))}#Zo(){const e=this.#qn._bodyEl?.querySelector(".data-grid-row");if(!e)return!1;let t=0;e.querySelectorAll(".cell").forEach(e=>{const i=e.offsetHeight;i>t&&(t=i)});const i=Math.max(e.getBoundingClientRect().height,t);if(i<=0)return!1;const r=this.state;return Math.abs(i-r.rowHeight)>1&&(r.rowHeight=i),this.initializePositionCache(),r.totalHeightEl&&(r.totalHeightEl.style.height=`${this.calculateTotalSpacerHeight(this.#qn._rows.length)}px`),!0}#Yo(){if(this.#Vo)return;const e=this.#qn._bodyEl?.querySelector(".data-grid-row");e&&(this.#Vo=!0,this.#Bo?.disconnect(),this.#Bo=new ResizeObserver(()=>this.#jo()),this.#Bo.observe(e))}disposeRowHeightObserver(){this.#Bo&&(this.#Bo.disconnect(),this.#Bo=void 0,this.#Vo=!1,this.#Wo=0)}},Pl=class{grid;plugins=[];getPlugins(){return this.plugins}pluginMap=/* @__PURE__ */new Map;cellRenderers=/* @__PURE__ */new Map;headerRenderers=/* @__PURE__ */new Map;cellEditors=/* @__PURE__ */new Map;_hasAfterCellRender=!1;_hasAfterRowRender=!1;_hasProcessRows=!1;_hasRowStructurePlugins=!1;#Xo=/* @__PURE__ */new Map;eventListeners=/* @__PURE__ */new Map;queryHandlers=/* @__PURE__ */new Map;constructor(e){this.grid=e}attachAll(e){const t=this.#Qo(e);for(const i of t)this.attach(i)}#Qo(e){if(e.length<2)return e;const t=/* @__PURE__ */new Map,i=/* @__PURE__ */new Map,r=[];for(const n of e){const e=n.constructor,o=t.get(e);if(!o){t.set(e,n),r.push(n);continue}const s=i.get(o)??[];s.push(n),i.set(o,s)}if(0===i.size)return r;for(const[n,o]of i)n.mergeConfigsFrom(o);return r}attach(e){if(function(e,t,i,r){const n=e.name,o=e.constructor.dependencies??[];for(const s of o){if(s.when&&!s.when(e.resolvedConfig))continue;const o=s.name,l=s.required??!0,a=s.reason;if(t.some(e=>e.name===o))continue;const d=s.severity??(l?"error":void 0);if(!d)continue;const c="error"===d?"requires":"recommends",u=a??`${Il(n)}Plugin ${c} ${Il(o)}Plugin`;"error"===d?Ml(r)?E(m,`Plugin dependency error:\n\n${u}.\n\n → Enable the required feature in gridConfig.features (pass \`true\` for defaults, or a config object — see the docs):\n ${kl(o)}\n ${kl(n)}\n features: {\n ${o}: true,\n ${n}: true,\n }`,i):E(m,`Plugin dependency error:\n\n${u}.\n\n → Add the required plugin to gridConfig.plugins BEFORE ${Il(n)}Plugin:\n ${Tl(o)}\n plugins: [new ${Il(o)}Plugin(), new ${Il(n)}Plugin()]\n → Tip: the feature-based API is recommended and orders dependencies for you — features: { ${o}: true, ${n}: true }`,i):We()&&("warn"===d?A(w,`${u}.`,i):_(w,`${u}.`,i))}}(e,this.plugins,this.grid.getAttribute("id")??void 0,this.grid.effectiveConfig??this.grid.gridConfig),this.pluginMap.set(e.constructor,e),this.plugins.push(e),e.cellRenderers)for(const[t,i]of Object.entries(e.cellRenderers))this.cellRenderers.set(t,i);if(e.headerRenderers)for(const[t,i]of Object.entries(e.headerRenderers))this.headerRenderers.set(t,i);if(e.cellEditors)for(const[t,i]of Object.entries(e.cellEditors))this.cellEditors.set(t,i);this.registerQueryHandlers(e),e.attach(this.grid),this.#Jo();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 i of t.queries){let t=this.queryHandlers.get(i.type);t||(t=/* @__PURE__ */new Set,this.queryHandlers.set(i.type,t)),t.add(e)}}unregisterQueryHandlers(e){for(const[t,i]of this.queryHandlers)i.delete(e),0===i.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.#Xo.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 i of this.#es("processRows")){const e=i.processRows(t);e!==t&&(t=e)}return t}processColumns(e){let t=[...e];for(const i of this.#es("processColumns"))t=i.processColumns(t);return t}processConfig(e){for(const t of this.#es("processConfig"))t.processConfig(e)}beforeRender(){for(const e of this.plugins)e.beforeRender?.()}afterStructuralRender(){for(const e of this.#es("afterStructuralRender"))e.afterStructuralRender()}beforeStructuralRender(){for(const e of this.plugins)e.beforeStructuralRender?.()}parseLightDom(){for(const e of this.plugins)e.parseLightDom?.()}syncLightDom(){for(const e of this.plugins)e.syncLightDom?.()}needsStructuralRerender(){let e=!1;for(const t of this.plugins)t.needsStructuralRerender?.()&&(e=!0);return e}afterRender(){for(const e of this.#es("afterRender"))e.afterRender()}afterCellRender(e){for(const t of this.#es("afterCellRender"))t.afterCellRender(e)}hasAfterCellRenderHook(){return this._hasAfterCellRender}afterRowRender(e){for(const t of this.#es("afterRowRender"))t.afterRowRender(e)}hasAfterRowRenderHook(){return this._hasAfterRowRender}#Jo(){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.#Xo.clear()}#es(e){let t=this.#Xo.get(e);if(t)return t;t=this.plugins.filter(t=>e in t&&"function"==typeof t[e]);const i=t=>{const i=t.constructor.manifest?.hookPriority;return i?i[e]??0:0};return t.some(e=>0!==i(e))&&t.sort((e,t)=>i(e)-i(t)),this.#Xo.set(e,t),t}onScrollRender(){for(const e of this.#es("onScrollRender"))e.onScrollRender()}getRowHeight(e,t){for(const i of this.plugins)if("function"==typeof i.getRowHeight){const r=i.getRowHeight(e,t);if(void 0!==r)return r}}hasRowHeightPlugin(){for(const e of this.plugins)if("function"==typeof e.getRowHeight)return!0;return!1}adjustVirtualStart(e,t,i){let r=e;for(const n of this.plugins)if("function"==typeof n.adjustVirtualStart){const o=n.adjustVirtualStart(e,t,i);o<r&&(r=o)}return r}renderRow(e,t,i){for(const r of this.plugins)if(r.renderRow?.(e,t,i))return!0;return!1}queryPlugins(e){const t=[],i=this.queryHandlers.get(e.type);if(i&&i.size>0){for(const r of i){const i=r.handleQuery?.(e);void 0!==i&&t.push(i)}return t}for(const r of this.plugins){const i=r.handleQuery?.(e);void 0!==i&&t.push(i)}return t}subscribe(e,t,i){let r=this.eventListeners.get(t);r||(r=/* @__PURE__ */new Map,this.eventListeners.set(t,r)),r.set(e,i)}unsubscribe(e,t){const i=this.eventListeners.get(t);i&&(i.delete(e),0===i.size&&this.eventListeners.delete(t))}unsubscribeAll(e){for(const[t,i]of this.eventListeners)i.delete(e),0===i.size&&this.eventListeners.delete(t)}emitPluginEvent(e,t){const i=this.eventListeners.get(e);if(i)for(const n of i.values())try{n(t)}catch(r){k("TBW024",`Error in plugin event handler for "${e}": ${r}`,this.grid.getAttribute("id")??void 0)}}onKeyDown(e){for(const t of this.#es("onKeyDown"))if(t.onKeyDown(e))return!0;return!1}onCellClick(e){for(const t of this.#es("onCellClick"))if(t.onCellClick(e))return!0;return!1}onRowClick(e){for(const t of this.#es("onRowClick"))if(t.onRowClick(e))return!0;return!1}onHeaderClick(e){for(const t of this.#es("onHeaderClick"))if(t.onHeaderClick(e))return!0;return!1}onScroll(e){for(const t of this.#es("onScroll"))t.onScroll(e)}onCellMouseDown(e){for(const t of this.#es("onCellMouseDown"))if(t.onCellMouseDown(e))return!0;return!1}onCellMouseMove(e){for(const t of this.#es("onCellMouseMove"))if(t.onCellMouseMove(e))return!0;return!1}onCellMouseUp(e){for(const t of this.#es("onCellMouseUp"))if(t.onCellMouseUp(e))return!0;return!1}getHorizontalScrollOffsets(e,t){let i=0,r=0,n=!1;for(const o of this.plugins){const s=o.getHorizontalScrollOffsets?.(e,t);s&&(i+=s.left,r+=s.right,s.skipScroll&&(n=!0))}return{left:i,right:r,skipScroll:n}}getVerticalScrollOffsets(e){let t=0,i=0,r=!1;for(const n of this.plugins){const o=n.getVerticalScrollOffsets?.(e);o&&(t+=o.top,i+=o.bottom,o.skipScroll&&(r=!0))}return{top:t,bottom:i,skipScroll:r}}getToolPanels(){const e=[];for(const t of this.plugins){const i=t.getToolPanel?.();i&&e.push({plugin:t,panel:i})}return e.sort((e,t)=>(e.panel.order??0)-(t.panel.order??0))}getHeaderContents(){const e=[];for(const t of this.plugins){const i=t.getHeaderContent?.();i&&e.push({plugin:t,content:i})}return e.sort((e,t)=>(e.content.order??0)-(t.content.order??0))}},Fl=class e extends HTMLElement{static tagName=ul;static version="3.8.0";static get activeTag(){return gl()}static set activeTag(e){!function(e){hl=e}(e)}static#ts=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","column-inference","loading"]}get#is(){return this}#rs=!1;#Bn;#Vn;#ns=[];get#oo(){return this.#os?.effective??{}}#ss=!1;#ls=!1;#as={rows:!1,columns:!1,gridConfig:!1,fitMode:!1,columnInference:!1};#ds;#cs=0;#us=null;#hs=0;#gs=!1;#ps=0;#fs;#ms={startY:null,startX:null,lastY:null,lastX:null,lastTime:null,velocityY:0,velocityX:0,momentumRaf:0,locked:!1,activePointerId:null};#ws;#Mt;#bs;#vs={scrollTop:0,scrollLeft:0,scrollHeight:0,scrollWidth:0,clientHeight:0,clientWidth:0};#ys;#Cs;#xs;#Rs;#Ss;#Es;get _pluginManager(){return this.#ys}#As=!1;#_s;#ks;#co;#os;#Ts=/* @__PURE__ */new Map;#Ms=!1;#Is=/* @__PURE__ */new Set;#Ls=/* @__PURE__ */new Map;#Ds;#Ps={};#Fs=/* @__PURE__ */new Map;#Hs=!1;_rows=[];#Gs=[];get _columns(){return this.#oo.columns??[]}set _columns(e){this.#oo.columns=e,this.#zs=void 0}#zs;get _visibleColumns(){return this.#zs??=this._columns.filter(e=>!e.hidden)}_invalidateVisibleColumnsCache(){this.#zs=void 0}_headerRowEl;_bodyEl;_rowPool=[];_resizeController;get _virtualization(){return this.#Rs.state}set _virtualization(e){Object.assign(this.#Rs.state,e)}_focusRow=0;_focusCol=0;_restoreFocusAfterRender=!1;_sortState=null;_gridTemplate="";__rowRenderEpoch=0;__didInitialAutoSize=!1;get __lightDomColumnsCache(){return this.#os?.lightDomColumnsCache}set __lightDomColumnsCache(e){this.#os&&(this.#os.lightDomColumnsCache=e)}get __originalColumnNodes(){return this.#os?.originalColumnNodes}set __originalColumnNodes(e){this.#os&&(this.#os.originalColumnNodes=e)}__originalOrder=[];__frameworkAdapter;__rowsBodyEl=null;get rows(){return this._rows}set rows(e){const t=Array.isArray(e)?e:[],i=this.#ns;this.#ns=t,i!==t&&this.#Os("rows")}get sourceRows(){return this.#ns}set sourceRows(e){this.#ns=Array.isArray(e)?e:[]}get columns(){return[...this._columns]}set columns(e){const t=Array.isArray(e)?xs(e):e,i=this.#os?.getColumns();this.#os?.setColumns(t),i!==t&&this.#Os("columns")}get gridConfig(){return this.#oo}set gridConfig(e){e&&this.__frameworkAdapter?.processConfig&&(e=this.__frameworkAdapter.processConfig(e));const t=this.#os?.getGridConfig();this.#os?.setGridConfig(e),t!==e&&(this.#os.clearLightDomCache(),this.#Os("gridConfig"))}get _sourceConfig(){return this.#os?.getGridConfig()}get fitMode(){return this.#oo.fitMode??"stretch"}set fitMode(e){const t=this.#os?.getFitMode();this.#os?.setFitMode(e),t!==e&&this.#Os("fitMode")}get columnInference(){return this.#oo.columnInference??"auto"}set columnInference(e){const t=this.#os?.getColumnInference();this.#os?.setColumnInference(e),t!==e&&this.#Os("columnInference")}get loading(){return this.#Ms}set loading(e){const t=this.#Ms;this.#Ms=e,t!==e&&(e?(this.setAttribute("loading",""),this.setAttribute("aria-busy","true")):(this.removeAttribute("loading"),this.removeAttribute("aria-busy")),this.#Ns(),this.#qs())}setRowLoading(e,t){const i=this.#Is.has(e);t?this.#Is.add(e):this.#Is.delete(e),i!==t&&this.#$s(e,t)}setCellLoading(e,t,i){let r=this.#Ls.get(e);const n=r?.has(t)??!1;i?(r||(r=/* @__PURE__ */new Set,this.#Ls.set(e,r)),r.add(t)):(r?.delete(t),0===r?.size&&this.#Ls.delete(e)),n!==i&&this.#Ws(e,t,i)}isRowLoading(e){return this.#Is.has(e)}isCellLoading(e,t){return this.#Ls.get(e)?.has(t)??!1}clearAllLoading(){this.loading=!1;for(const e of this.#Is)this.#$s(e,!1);this.#Is.clear();for(const[e,t]of this.#Ls)for(const i of t)this.#Ws(e,i,!1);this.#Ls.clear()}get effectiveConfig(){return this.#oo}get disconnectSignal(){return this.#ws||(this.#ws=new AbortController),this.#ws.signal}constructor(){super(),this.#Bs(),this.#Bn=new Promise(e=>this.#Vn=e),this.#Rs=new Dl(this),this.#Ss=new el(this),this.#Es=new cl(this),this.#ds=new qs(this),this.#ds.setInitialReadyResolver(()=>this.#Vn?.()),this.#os=new Ws(this)}async#Bs(){await yl('@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(#eee,#222);--tbw-color-fg:light-dark(#222,#eee);--tbw-color-fg-muted:light-dark(#555,#aaa);--tbw-color-accent:#3b82f6;--tbw-color-accent-fg:light-dark(#fff,#000);--tbw-color-accent-text:light-dark(#1d4ed8,#93c5fd);--tbw-color-success:light-dark(#357937,#4cae4f);--tbw-color-warning:#f59f0a;--tbw-color-error:light-dark(#d33131,#e06c6c);--tbw-color-danger:var(--tbw-color-error);--tbw-color-selection:light-dark(#fff7d6,#333);--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(#777,#666);--tbw-color-border-cell:var(--tbw-color-border);--tbw-color-border-header:var(--tbw-color-border);--tbw-color-shadow:light-dark(#0000001a,#0000004d);--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-touch-target-min:24px;--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;contain:content;width:100%;height:100%;min-height:0;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);outline:none;display:block;position:relative;overflow:clip}tbw-grid,tbw-grid *{box-sizing:border-box}tbw-grid>tbw-grid-column,tbw-grid>tbw-grid-type{display:none}tbw-grid .tbw-grid-root{flex-direction:column;height:100%;display:flex;position:relative}tbw-grid .tbw-grid-root.has-shell{flex-direction:column;height:100%;display:flex}tbw-grid .tbw-grid-root:has(.selected){-webkit-user-select:none;user-select:none}tbw-grid .tbw-grid-content{touch-action:none;flex-direction:row;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}tbw-grid .tbw-scroll-area{overflow-anchor:none;flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:auto hidden}tbw-grid .rows-body-wrapper{flex-direction:row;flex:1;width:100%;min-width:-moz-fit-content;min-width:fit-content;min-height:0;display:flex}tbw-grid .rows-body{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:visible}tbw-grid .rows-container{flex-direction:row;flex:1;min-height:0;display:flex;position:relative;overflow:visible}tbw-grid .rows-viewport{touch-action:none;flex:1;min-width:0;display:block;position:relative;overflow:clip}tbw-grid .rows-viewport .rows{will-change:transform;min-width:100%;z-index:var(--tbw-z-layer-rows,1);position:absolute;top:0;left:0}tbw-grid .faux-vscroll{width:auto;z-index:var(--tbw-z-layer-header,30);touch-action:none;flex-shrink:0;position:sticky;inset-inline-end:0;overflow:hidden auto}tbw-grid .faux-vscroll-spacer{width:1px}tbw-grid .tbw-sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}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{z-index:25;position:sticky}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)}.tbw-size-popover{padding:var(--tbw-spacing-xs,.25rem);align-items:center;gap:var(--tbw-spacing-xs,.25rem);background:var(--tbw-color-panel-bg,light-dark(#fff,#232528));color:var(--tbw-color-fg,light-dark(#1a1a1a,#f0f0f0));border:1px solid var(--tbw-color-border,light-dark(#d0d0d4,#454545));border-radius:var(--tbw-border-radius,.25rem);box-shadow:0 4px 12px var(--tbw-color-shadow,#0000004d);font-family:var(--tbw-font-family,system-ui, sans-serif);font-size:var(--tbw-font-size-sm,.9285em);z-index:10001;--tbw-size-popover-radius:min(var(--tbw-border-radius,.25rem), 6px);margin:0;line-height:1;display:flex;position:fixed;inset:auto}.tbw-size-popover[hidden]{display:none}.tbw-size-popover button,.tbw-size-popover input{min-height:var(--tbw-touch-target-min,26px);border-radius:var(--tbw-size-popover-radius);color:inherit;font:inherit;line-height:1}:is(.tbw-size-popover button,.tbw-size-popover input):focus-visible{outline:var(--tbw-focus-outline,2px solid var(--tbw-color-accent,#4a90d9));outline-offset:var(--tbw-focus-outline-offset,1px)}.tbw-size-popover button{min-width:var(--tbw-touch-target-min,26px);padding:0 var(--tbw-spacing-sm,.5rem);cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.tbw-size-popover button:hover{background:var(--tbw-color-row-hover,light-dark(#f0f0f0,#2a2a2a));border-color:var(--tbw-color-border-strong,light-dark(#777,#666))}.tbw-size-popover button:active{background:var(--tbw-color-accent,#4a90d9);color:var(--tbw-color-accent-fg,#fff)}.tbw-size-popover input{width:5ch;padding:0 var(--tbw-spacing-xs,.25rem);background:var(--tbw-color-bg,light-dark(#fff,#1a1c20));text-align:center;border:1px solid var(--tbw-color-border,light-dark(#d0d0d4,#454545));appearance:textfield}.tbw-size-popover input::-webkit-outer-spin-button{appearance:none;margin:0}.tbw-size-popover input::-webkit-inner-spin-button{appearance:none;margin:0}}\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{vertical-align:middle;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}tbw-grid [data-icon=expand]:empty:before{-webkit-mask-image:var(--tbw-icon-expand-mask);-webkit-mask-image:var(--tbw-icon-expand-mask);-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);-webkit-mask-image:var(--tbw-icon-collapse-mask);-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);-webkit-mask-image:var(--tbw-icon-sort-asc-mask);-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);-webkit-mask-image:var(--tbw-icon-sort-desc-mask);-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);-webkit-mask-image:var(--tbw-icon-sort-none-mask);-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);-webkit-mask-image:var(--tbw-icon-submenu-arrow-mask);-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);-webkit-mask-image:var(--tbw-icon-drag-handle-mask);-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);-webkit-mask-image:var(--tbw-icon-tool-panel-mask);-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);-webkit-mask-image:var(--tbw-icon-print-mask);-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);-webkit-mask-image:var(--tbw-icon-filter-mask);-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);-webkit-mask-image:var(--tbw-icon-filter-active-mask);-webkit-mask-image:var(--tbw-icon-filter-active-mask);mask-image:var(--tbw-icon-filter-active-mask)}.tbw-context-menu [data-icon]:empty:before{vertical-align:middle;width:1em;height:1em;display:inline-block}.tbw-context-menu [data-icon=submenu-arrow]:empty:before{content:var(--tbw-icon-submenu-arrow,"▶")}}\n@layer tbw-base{tbw-grid .header{z-index:var(--tbw-z-layer-header,30);background:var(--tbw-color-header-bg);flex-shrink:0;display:block;overflow:visible}tbw-grid .header-group-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-color-header-bg);z-index:var(--tbw-z-layer-header,30);display:grid}tbw-grid .header-group-cell{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:flex-start;align-items:center;justify-content:var(--tbw-align-header-group,var(--tbw-align-header,flex-start));display:flex}tbw-grid .header-group-cell:not(:last-child){border-right:2px solid var(--tbw-color-border)}tbw-grid .header-row{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);display:grid}tbw-grid .header-row>.cell{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);align-items:center;gap:4px;min-width:0;display:flex;overflow:visible}tbw-grid .header-row>.cell>span:first-child{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:inherit;flex:1;overflow:hidden}tbw-grid .header-row>.cell>span[part~=sort-indicator]{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;flex-shrink:0}tbw-grid .header-row>.cell:hover>span[part~=sort-indicator]{visibility:visible;display:inline-flex}tbw-grid .header-row>.cell[aria-sort=ascending]>span[part~=sort-indicator],tbw-grid .header-row>.cell[aria-sort=descending]>span[part~=sort-indicator]{visibility:visible;opacity:1;color:var(--tbw-sort-indicator-active-color);display:inline-flex}tbw-grid .header-row>.cell:last-child{border-right:0}tbw-grid .header-row>.cell:last-child .resize-handle{width:max(var(--tbw-resize-hit-area,18px), var(--tbw-touch-target-min,24px));right:0}tbw-grid .header-row>.cell:last-child .resize-handle:before{left:auto;right:0;transform:none}tbw-grid .header-row>.cell:last-child.resizable{padding-inline-end:max(var(--tbw-cell-padding-h,.5em), var(--tbw-touch-target-min,24px))}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{padding-inline-end:max(var(--tbw-cell-padding-h,.5em), calc(var(--tbw-touch-target-min,24px) / 2));position:relative}tbw-grid .header-row>.cell.sticky-left,tbw-grid .header-row>.cell.sticky-right,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{top:0;right:calc(max(var(--tbw-resize-hit-area,18px), var(--tbw-touch-target-min,24px)) / -2);width:max(var(--tbw-resize-hit-area,18px), var(--tbw-touch-target-min,24px));cursor:e-resize;-webkit-user-select:none;user-select:none;touch-action:none;z-index:20;background:0 0;height:100%;position:absolute}tbw-grid .resize-handle:before{content:"";width:var(--tbw-resize-handle-width);background:var(--tbw-resize-handle-color);border-radius:var(--tbw-resize-handle-border-radius);height:100%;transition:background .12s;position:absolute;top:0;left:50%;transform:translate(-50%)}tbw-grid .resize-handle:after{content:"";width:var(--tbw-resize-handle-width);background:var(--tbw-resize-indicator-color,var(--tbw-color-accent));opacity:0;pointer-events:none;z-index:1000;height:0;transition:opacity .12s,height 0s .12s;position:absolute;top:100%;left:50%;transform:translate(-50%)}:is(tbw-grid .resize-handle:hover,tbw-grid .resize-handle[data-tbw-size-open]):before{background:var(--tbw-resize-handle-color-hover)}:is(tbw-grid .resize-handle:hover,tbw-grid .resize-handle[data-tbw-size-open]):after{height:100vh;opacity:var(--tbw-resize-indicator-opacity,.6);transition:opacity .12s,height}@media (pointer:coarse){tbw-grid>.cell.sortable>span[part~=sort-indicator]{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}}\n@layer tbw-base{tbw-grid .data-grid-row{grid-template-columns:var(--tbw-column-template);contain:layout style;display:grid}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{padding:var(--tbw-cell-padding,2px 8px);border-bottom:var(--tbw-row-divider);min-height:var(--tbw-row-height);border-right:1px solid var(--tbw-color-border-cell);min-width:0;white-space:var(--tbw-cell-white-space,nowrap);text-overflow:ellipsis;align-content:center;display:block;overflow:hidden}tbw-grid .data-grid-row>.cell>*{text-overflow:ellipsis;white-space:inherit;min-width:0;overflow:hidden}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]{width:var(--tbw-checkbox-size);height:var(--tbw-checkbox-size);vertical-align:middle;margin:0}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-loading-overlay{z-index:1000;pointer-events:all;background:light-dark(#ffffffb3,#00000080);justify-content:center;align-items:center;animation:.15s ease-out tbw-fade-in;display:flex;position:absolute;inset:0}.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:.8s linear infinite tbw-spin}.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{pointer-events:none;position:relative}.tbw-row-loading-overlay{z-index:26;pointer-events:none;background:light-dark(#ffffffb3,#00000080);align-items:center;animation:.15s ease-out tbw-fade-in;display:flex;position:absolute;inset:0}.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:.8s linear infinite tbw-spin}.cell.tbw-cell-loading{pointer-events:none;position:relative}.cell.tbw-cell-loading:before{content:"";z-index:26;background:light-dark(#ffffffb3,#00000080);animation:.15s ease-out tbw-fade-in;position:absolute;inset:0}.cell.tbw-cell-loading:after{--_spinner-size:calc(var(--tbw-row-height,28px) * .5);content:"";left:var(--tbw-spacing-sm);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));z-index:27;border-radius:50%;margin:auto 0;animation:.8s linear infinite tbw-spin;position:absolute;top:0;bottom:0}}\n@layer tbw-base{.tbw-empty-overlay{padding:var(--tbw-spacing-md,12px);text-align:center;color:var(--tbw-color-text-secondary,var(--tbw-color-text));z-index:999;pointer-events:all;background:light-dark(#fff9,#0006);justify-content:center;align-items:center;animation:.15s ease-out tbw-fade-in;display:flex;position:absolute;inset:0}.tbw-empty-message{font-family:var(--tbw-font-family,inherit);font-size:var(--tbw-font-size-md,14px);-webkit-user-select:text;user-select:text;max-width:480px;line-height:1.4}}\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!important;--tbw-animation-duration:0s!important}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:#0000}20%{background-color:var(--tbw-row-change-color)}to{background-color:#0000}}@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;max-height:var(--tbw-row-height,28px);transform:translateY(0)}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-offset:-2px;outline:2px solid highlight!important}tbw-grid .data-grid-row[aria-selected=true]{color:highlighttext!important;background:highlight!important}}@media (prefers-reduced-motion:reduce){tbw-grid[data-animation-mode=reduced-motion]{--tbw-animation-enabled:0!important;--tbw-animation-duration:0s!important}tbw-grid[data-animation-mode=reduced-motion] .data-grid-row[data-animating]{animation:none}}}\n')}getPlugin(e){return this.#ys?.getPlugin(e)}getPluginByName(e){return this.#ys?.getPluginByName(e)}requestRender(){this.#ds.requestPhase(Ns.ROWS,"plugin:requestRender")}requestColumnsRender(){this.#ds.requestPhase(Ns.COLUMNS,"plugin:requestColumnsRender")}requestRenderWithFocus(){this._restoreFocusAfterRender=!0,this.#ds.requestPhase(Ns.ROWS,"plugin:requestRenderWithFocus")}updateTemplate(){Ls(this)}requestAfterRender(){this.#ds.requestPhase(Ns.STYLE,"plugin:requestAfterRender")}requestVirtualRefresh(){this._virtualization.start=-1,this.refreshVirtualWindow(!1)}#Vs(){this.#ys=new Pl(this);const e=this.#oo?.plugins,t=Array.isArray(e)?e:[],i=this.#oo?.features;let r,n=[];if(i&&le&&(n=le(i).map(e=>this.#Ks(e))),0===n.length)r=t;else if(0===t.length)r=n;else{const e=new Set(t.map(e=>e.name));r=[...n.filter(t=>!e.has(t.name)),...t]}this.#ys.attachAll(r)}#Ks(e){const t=this.#Ts.get(e.name);return t&&t!==e?(t.refreshUserConfigFrom(e),t):(this.#Ts.set(e.name,e),e)}#js(){!function(e){let t=!1;for(const{name:i,styles:r}of e)ml.has(i)||(ml.set(i,bl(r)),t=!0);t&&vl()}(this.#ys?.getPluginStyles()??[])}#Us(){const e=this.#oo?.plugins,t=Array.isArray(e)?e:[],i=this.#oo?.features??void 0,r=i!==this.#xs;if((this.#Cs===t||void 0!==this.#Cs&&this.#Cs.length===t.length&&this.#Cs.every((e,i)=>e===t[i]))&&!r)return void(this.#Cs=t);this.#ys&&this.#ys.detachAll(),this.#Vs(),this.#js(),this.#Cs=t,this.#xs=i,this.#Rs.configureVariableHeights(),this.#os.markSourcesChanged(),this.#os.merge();const n=this.#gs;if(this.#gs=this.#ys?.getAll().some(e=>e.onScroll)??!1,!n&&this.#gs){const e=this.#is.querySelector(".tbw-grid-content")??this.#is.querySelector(".tbw-grid-root");this.#Ys(e)}}#Zs(){this.#ys?.detachAll()}#Xs(){const t=e.getAdapters();if(0===t.length&&!this.__frameworkAdapter)return;const i=this.__frameworkAdapter;return e=>{if(i?.createToolPanelRenderer){const t=i.createToolPanelRenderer(e);if(t)return t}for(const i of t)if(i.createToolPanelRenderer){const t=i.createToolPanelRenderer(e);if(t)return t}}}_registerLightDomHandler(e,t){this.#os.registerLightDomHandler(e,t)}_unregisterLightDomHandler(e){this.#os.unregisterLightDomHandler(e)}_requestConfigMerge(){this.#os.markSourcesChanged(),this.#os.merge()}_getToolPanelRendererFactory(){return this.#Xs()}connectedCallback(){this.hasAttribute("tabindex")||(this.tabIndex=0),this.hasAttribute("version")||this.setAttribute("version",e.version),this.hasAttribute("data-tbw-grid")||this.setAttribute("data-tbw-grid",""),this.id||(this.id="tbw-grid-"+ ++e.#ts),this._rows=Array.isArray(this.#ns)?[...this.#ns]:[],this.#ws&&(this.#ws.abort(),this.#As=!1),this.#ws=new AbortController,this.#bs&&(il(this.#bs),this.#bs=void 0),this.#zr(),this.#os.parseLightDomColumns(this),this.#os.merge(),this.#Vs();const t=this.#oo?.plugins;var i,r;this.#Cs=Array.isArray(t)?t:[],this.#xs=this.#oo?.features??void 0,this.#rs||(this.#Qs(),this.#js(),this.#rs=!0),this.#Js(),this.#bs=(i=()=>{this.#el()},r={timeout:100},tl?requestIdleCallback(i,r):window.setTimeout(()=>{const e=Date.now();i({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-e))})},1))}disconnectedCallback(){this.#bs&&(il(this.#bs),this.#bs=void 0),this.#ps&&(clearTimeout(this.#ps),this.#ps=0),this.#Zs(),(this.#ys?.getPluginByName("shell"))?.disposeShellState?.(),xl(this.#ms),this.#ws&&(this.#ws.abort(),this.#ws=void 0),this.#_s?.abort(),this.#_s=void 0,this.#As=!1,this._resizeController&&this._resizeController.dispose(),this.#Mt&&(this.#Mt.disconnect(),this.#Mt=void 0),this.#Rs.disposeRowHeightObserver(),Vo(this),this.#tl.clear(),this._virtualization.heightCache?.byKey.clear(),this.#Cs=void 0,this.#xs=void 0;for(let e=0;e<this._rowPool.length;e++)this._rowPool[e].remove();this._rowPool.length=0,this.__rowsBodyEl=null,this.#ss=!1}attributeChangedCallback(e,t,i){if("loading"===e){const e=null!==i&&"false"!==i;return void(this.loading!==e&&(this.loading=e))}if(t!==i&&i&&"null"!==i&&"undefined"!==i)if("rows"===e||"columns"===e||"grid-config"===e)try{const t=JSON.parse(i);"rows"===e?this.rows=t:"columns"===e?this.columns=t:"grid-config"===e&&(this.gridConfig=t)}catch{A("TBW130",`Invalid JSON for '${e}' attribute: ${i}`,this.id)}else"fit-mode"===e?this.fitMode=i:"column-inference"===e&&(this.columnInference=i)}#il(){const e=this.#is.querySelector(".tbw-grid-content")??this.#is.querySelector(".tbw-grid-root");return 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"),e}#Js(){const e=this.#il();if(this.setAttribute("data-upgraded",""),this.#ss=!0,this._resizeController?.dispose(),this._resizeController=rl(this),this.#rl(),this.#Ys(e),this.#As)return;this.#As=!0;const t=this.disconnectSignal;Js(this,this,this.#is,t),this.#Rs.configureVariableHeights(),queueMicrotask(()=>this.#nl()),this.#ds.requestPhase(Ns.FULL,"afterConnect")}#Ys(e){this.#_s?.abort(),this.#_s=new AbortController;const t=this.#_s.signal,i=e?.querySelector(".faux-vscroll"),r=e?.querySelector(".rows");if(this._virtualization.container=i??this,this.#gs=this.#ys?.getAll().some(e=>e.onScroll)??!1,i&&r){i.addEventListener("scroll",()=>{if(!this._virtualization.enabled&&!this.#gs)return;const e=i.scrollTop;r.style.transform=`translateY(${function(e,t,i){if(t<=e.bypassThreshold)return-i;const r=tt(i,e.scrollMapping),n=e.positionCache;let o;if(e.variableHeights&&n&&n.length>0){let t=Xe(n,r);-1===t&&(t=0);const i=t-t%2;o=n[i]?.offset??i*e.rowHeight}else{const t=Math.floor(r/e.rowHeight);o=(t-t%2)*e.rowHeight}return-(r-o)}(this._virtualization,this._rows.length,e)}px)`,this.#us=e,this.#cs||(this.#cs=requestAnimationFrame(()=>{this.#cs=0,null!==this.#us&&(this.#ol(this.#us),this.#us=null)}))},{passive:!0,signal:t});const e=this.#is.querySelector(".tbw-scroll-area");this.#ks=e,this._virtualization.scrollAreaEl=e,e&&this.#gs&&e.addEventListener("scroll",()=>{this.#hs||(this.#hs=requestAnimationFrame(()=>{this.#hs=0;const t=this.#vs;t.scrollTop=i.scrollTop,t.scrollLeft=e.scrollLeft,t.scrollHeight=i.scrollHeight,t.scrollWidth=e.scrollWidth,t.clientHeight=i.clientHeight,t.clientWidth=e.clientWidth,this.#ys?.onScroll(t)}))},{passive:!0,signal:t});const n=this.#is.querySelector(".tbw-grid-content");if(n){const e={fauxScrollbar:i,scrollArea:this.#ks};!function(e,t,i){const{fauxScrollbar:r,scrollArea:n}=t;e.addEventListener("wheel",t=>{try{if(e.querySelector("select:open"))return}catch{}const i=t.shiftKey||Math.abs(t.deltaX)>Math.abs(t.deltaY);if(i&&n){const e=t.shiftKey?t.deltaY:t.deltaX,{scrollLeft:i,scrollWidth:r,clientWidth:o}=n;(e>0&&i<r-o||e<0&&i>0)&&(t.preventDefault(),n.scrollLeft+=e)}else if(!i){const{scrollTop:e,scrollHeight:i,clientHeight:n}=r;(t.deltaY>0&&e<i-n||t.deltaY<0&&e>0)&&(t.preventDefault(),r.scrollTop+=t.deltaY)}},{passive:!1,signal:i})}(n,e,t),Sl(n,this.#ms,e,t)}}var n,o,s;this._bodyEl&&(n=this,o=this._bodyEl,s=t,o.addEventListener("mousedown",e=>{const t=e.target.closest(".cell[data-col]");if(!t)return;if(t.classList.contains(Ge.EDITING))return;const i=e.target;i.draggable||i.closest('[draggable="true"]')||e.preventDefault(),Zs(n,t)},{signal:s}),o.addEventListener("click",e=>{const t=e.target.closest(".data-grid-row");if(t&&hs(n,e,t),!document.activeElement?.closest(`.cell.${Ge.EDITING}`)){const t=e.target.closest("tbw-grid, [data-tbw-grid]");t&&t.focus({preventScroll:!0})}},{signal:s}),o.addEventListener("dblclick",e=>{const t=e.target.closest(".data-grid-row");t&&hs(n,e,t)},{signal:s})),this.#Mt?.disconnect(),this._virtualization.viewportEl&&(this.#Mt=new ResizeObserver(()=>{this.#sl(),this.#ds.requestPhase(Ns.VIRTUALIZATION,"resize-observer")}),this.#Mt.observe(this._virtualization.viewportEl)),function(e,t,i,r){t.addEventListener("focusin",()=>{e.dataset.hasFocus=""},{signal:r}),t.addEventListener("focusout",r=>{const n=r.relatedTarget;n&&(t.contains(n)||i.isInExternalFocusContainer(n))||delete e.dataset.hasFocus},{signal:r})}(this,this.#is,this.#Ss,t)}addEventListener(e,t,i){super.addEventListener(e,t,i)}removeEventListener(e,t,i){super.removeEventListener(e,t,i)}on(e,t){const i=e=>{t(e.detail,e)};return this.addEventListener(e,i),()=>this.removeEventListener(e,i)}#ll(e,t){this.#ss&&this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}_emitDataChange(){this.#ll("data-change",{rowCount:this._rows.length,sourceRowCount:this.#ns.length}),function(e,t,i){if(i===t.lastAnnouncedSourceCount)return;const r=t.lastAnnouncedSourceCount;t.lastAnnouncedSourceCount=i,0===i&&r<0||qe(e,$e(e,"dataLoaded",i))}(this,this.#al,this.#ns.length)}#nl(){(this._bodyEl?.querySelectorAll(".data-grid-row"))?.forEach((e,t)=>{const i=t===this._focusRow;e.setAttribute("aria-selected",String(i)),e.querySelectorAll(".cell").forEach((e,t)=>{e.setAttribute("aria-selected",String(i&&t===this._focusCol))})})}#Os(e){this.#as[e]=!0,this.#ls||(this.#ls=!0,queueMicrotask(()=>this.#dl()))}#dl(){if(!this.#ls||!this.#ss)return void(this.#ls=!1);const e=this.#as;if(this.#ls=!1,this.#as={rows:!1,columns:!1,gridConfig:!1,fitMode:!1,columnInference:!1},e.gridConfig)return this.#cl(),void(e.rows&&this.#ul());(e.columns||e.columnInference)&&this.#hl(),e.rows&&this.#ul(),e.fitMode&&this.#gl()}#ul(){this._rows=Array.isArray(this.#ns)?[...this.#ns]:[],this.#Hs=!0,this.#ds.requestPhase(Ns.ROWS,"applyRowsUpdate")}#pl(){this.#Hs&&this._rebuildRowIdMap()}_rebuildRowIdMap(){this.#Hs=!1,this.#Fs.clear();const e=this.#oo.getRowId;for(let t=0;t<this._rows.length;t++){const i=dl(this._rows[t],e);void 0!==i&&this.#Fs.set(i,{row:this._rows[t],index:t})}}#hl(){Vo(this),this.#os.merge(),this.#rl()}#gl(){if(this.#os.merge(),"fixed"===this.#oo.fitMode)this.__didInitialAutoSize=!1,Ts(this);else{for(let e=0;e<this._columns.length;e++){const t=this._columns[e];!t.__userResized&&t.__autoSized&&delete t.width}Ls(this)}}#cl(){this.#os.parseLightDomColumns(this),this.#os.merge(),this.#Us(),this.#Rs.configureVariableHeights(),this.#os.markSourcesChanged(),this.#os.merge();const e=this.#os.initialColumnState;if(e){this.#os.initialColumnState=void 0,this.#co=void 0;const t=this.#ys?.getAll()??[];this.#os.applyState(e,t)}if(this.#ys?.needsStructuralRerender())return this.#ys?.beforeStructuralRender(),this.#Qs(),this.#js(),this.#Js(),void this._rebuildRowIdMap();this._rebuildRowIdMap(),this.#ds.requestPhase(Ns.COLUMNS,"applyGridConfigUpdate")}#fl(){if(this.__rowRenderEpoch++,this.#ys){const e=this.#Gs.length>0?this.#Gs:this._columns,t=e.filter(e=>!e.hidden),i=e.filter(e=>e.hidden),r=this.#ys.processColumns([...t]);if(r!==t){const n=new Set(r.map(e=>e.field));!t.some(e=>n.has(e.field))&&r.length>0?this._columns=[...r,...i]:this._columns=this.#ml(e,r,i)}else this._columns=[...e]}}#ml(e,t,i){if(0===i.length)return t;const r=/* @__PURE__ */new Map;for(const l of t)r.set(l.field,l);const n=new Set(e.map(e=>e.field)),o=[];for(const l of t)n.has(l.field)||o.push(l);const s=[];for(const l of e){const e=r.get(l.field);e?s.push(e):l.hidden&&s.push(l)}return s.push(...o),s}#wl(){Vo(this);const e=this.#ns;if(!Array.isArray(e))return this._rows=[],this._rebuildRowIdMap(),this._virtualization.variableHeights&&this.#Rs.initializePositionCache(),void this._emitDataChange();if(!this._sortState&&this.#oo.initialSort){const{field:e,direction:t}=this.#oo.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,i=!1){if(!e._sortState)return t;const r=e.effectiveConfig?.sortHandler??kn;if(r===kn)return i||(e.__originalOrder=t.slice()),Mn(t,e._sortState.field,e._sortState.direction,e._columns),t;i||(e.__originalOrder=t);const n=r(t,e._sortState,e._columns);return n&&"function"==typeof n.then?t:n}(this,this._sortState?[...e]:e,!0),i=this.#ys?.processRows(t)??t;this._rows=i,this.#Hs=!0,this._emitDataChange()}_renderVisibleRows(e,t,i=this.__rowRenderEpoch){if(this.#fs||(this.#fs=(e,t,i)=>this.#ys?.renderRow(e,t,i)??!1),es(this,e,t,i,this.#fs),this.#Is.size>0)for(const r of this.#Is)this.#$s(r,!0)}#al={rowCount:-1,colCount:-1,ariaLabel:void 0,ariaLabelledBy:void 0,ariaDescribedBy:void 0,ariaRoleDescription:void 0,lastAnnouncedSourceCount:-1};_updateAriaCounts(e,t){!function(e,t,i,r,n){if(r===e.rowCount&&n===e.colCount)return!1;const o=e.rowCount;e.rowCount=r,e.colCount=n,t&&(t.setAttribute("aria-rowcount",String(r)),t.setAttribute("aria-colcount",String(n))),r!==o&&i&&(r>0?i.setAttribute("role","rowgroup"):i.removeAttribute("role"))}(this.#al,this.__rowsBodyEl,this._bodyEl,e,t)}_requestSchedulerPhase(e,t){this.#ds.requestPhase(e,t)}_getPluginRowHeight(e,t){return this.#ys?.getRowHeight?.(e,t)}_adjustPluginVirtualStart(e,t,i){return this.#ys?.adjustVirtualStart(e,t,i)}_afterPluginRender(){this.#ys?.afterRender()}_emitPluginEvent(e,t){this.#ys?.emitPluginEvent(e,t)}_schedulerMergeConfig(){this.#os.parseLightDomColumns(this),this.#os.merge(),this.#Us(),function(e,t,i){const r=El,n=Al,o=/* @__PURE__ */new Map;function s(e,t,i,r=!1){o.has(e)||o.set(e,{description:t,fields:[],isConfigProperty:r});const n=o.get(e);n.fields.includes(i)||n.fields.push(i)}const l=e.features;function a(e){return!!l&&!1===l[e]}for(const c of n){const i=e[c.property];if((c.isUsed?c.isUsed(i):void 0!==i)&&!Ll(t,c.pluginName)&&!a(c.pluginName)){const e=c.description||`the "${c.property}" ${c.level} property`;s(c.pluginName,e,c.property,!0)}}const d=e.columns;if(d&&d.length>0)for(const c of d)for(const e of r){const i=c[e.property];if((e.isUsed?e.isUsed(i):void 0!==i)&&!Ll(t,e.pluginName)&&!a(e.pluginName)){const t=c.field||"<unknown>",i=e.description||`the "${e.property}" ${e.level} property`;s(e.pluginName,i,t)}}if(o.size>0){const t=Ml(e),r=[];for(const[e,{description:i,fields:n,isConfigProperty:s}]of o){const o=n.slice(0,3).join(", ")+(n.length>3?`, ... (${n.length} total)`:""),l=s?`Config uses ${i}`:`Column(s) [${o}] use ${i}`;t?r.push(`${l}, but the required feature is not enabled.\n → Enable it in gridConfig.features (pass \`true\` for defaults, or a config object — see the docs):\n ${kl(e)}\n features: { ${e}: true }`):r.push(`${l}, but the required plugin is not loaded.\n → Add it to gridConfig.plugins:\n ${Tl(e)}\n plugins: [new ${Il(e)}Plugin(), ...]\n → Tip: the feature-based API is recommended — ${kl(e)} then features: { ${e}: true }`)}E([...o.values()].some(e=>e.isConfigProperty)?"TBW002":"TBW001",`Configuration error:\n\n${r.join("\n\n")}\n\nThis validation helps catch misconfigurations early. The properties listed above require their respective plugins to function.`,i)}}(this.#oo,this.#ys?.getPlugins()??[],this.id),function(e,t){const i=[],r=[];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=`[${Il(n.name)}Plugin] Configuration warning: ${t.message}`;"error"===t.severity?i.push(e):r.push(e)}}}if(r.length>0&&We())for(const n of r)A("TBW004",n,t);i.length>0&&E("TBW003",`Configuration error:\n\n${i.join("\n\n")}`,t)}(this.#ys?.getPlugins()??[],this.id),function(e,t){if(!We())return;const i=new Set(e.map(e=>e.name)),r=/* @__PURE__ */new Set;for(const n of e){const e=n.constructor.manifest;if(e?.incompatibleWith)for(const o of e.incompatibleWith)if(i.has(o.name)){const e=[n.name,o.name].sort().join("↔");if(r.has(e))continue;r.add(e),A("TBW022",`${Il(n.name)}Plugin and ${Il(o.name)}Plugin are both loaded, but they are currently incompatible.\n\n → ${o.reason}\n\n Consider removing one of these plugins to avoid unexpected behavior.`,t)}}}(this.#ys?.getPlugins()??[],this.id),this.#bl(),this.#Gs=[...this._columns]}_schedulerProcessColumns(){this.#fl()}_schedulerProcessRows(){this.#wl()}_schedulerRenderHeader(){zs(this)}_schedulerUpdateTemplate(){Ls(this)}_schedulerAfterRender(){this.#ys?.afterRender(),this.#qs(),this._virtualization.enabled&&this._virtualization.totalHeightEl&&queueMicrotask(()=>{if(!this._virtualization.totalHeightEl)return;const e=this.#Rs.calculateTotalSpacerHeight(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`}),"fixed"!==this.#oo.fitMode||this.__didInitialAutoSize||(this.__didInitialAutoSize=!0,Ts(this)),this._restoreFocusAfterRender&&(this._restoreFocusAfterRender=!1,at(this)),this.#Rs.afterRenderRowHeights(),this.#Ms&&this.#Ns()}get _schedulerIsConnected(){return this.isConnected&&this.#ss}get _hostElement(){return this}get _renderRoot(){return this.#is}_emit(e,t){this.#ll(e,t)}get _accordionIcons(){return{expand:this.#oo?.icons?.expand??p.expand,collapse:this.#oo?.icons?.collapse??p.collapse}}_pluginShellContributions(){return{toolPanels:(this.#ys?.getToolPanels()??[]).map(e=>e.panel),headerContents:(this.#ys?.getHeaderContents()??[]).map(e=>e.content)}}_clearRowPool(){const e=this.__frameworkAdapter,t=e?.releaseCell;if(t){e?.beginBatch?.(this);try{for(let i=0;i<this._rowPool.length;i++){const r=this._rowPool[i].children;for(let i=0;i<r.length;i++){const n=r[i];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.#rl()}_applyAnimationConfig(e){const t={...g,...e.animation},i=t.mode??"reduced-motion";let r=1;!1===i||"off"===i?r=0:!0!==i&&"on"!==i||(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 i?i?"on":"off":i}#bl(){!function(e,t,i){if(!t)return!1;let r=!1;const n=i?.gridAriaLabelledBy,o=n?void 0:function(e){const t=e?.gridAriaLabel;return t||(e?.shell?.header?.title??void 0)}(i);n!==e.ariaLabelledBy&&(e.ariaLabelledBy=n,n?t.setAttribute("aria-labelledby",n):t.removeAttribute("aria-labelledby"),r=!0),o!==e.ariaLabel&&(e.ariaLabel=o,o?t.setAttribute("aria-label",o):t.removeAttribute("aria-label"),r=!0);const s=i?.gridAriaDescribedBy;s!==e.ariaDescribedBy&&(e.ariaDescribedBy=s,s?t.setAttribute("aria-describedby",s):t.removeAttribute("aria-describedby"),r=!0);const l=i?.gridAriaRoleDescription;l!==e.ariaRoleDescription&&(e.ariaRoleDescription=l,l?t.setAttribute("aria-roledescription",l):t.removeAttribute("aria-roledescription"),r=!0)}(this.#al,this.__rowsBodyEl,this.#oo)}#Ns(){const e=this.querySelector(".tbw-grid-root");var t;e&&(this.#Ms?(this.#Ds||(this.#Ds=ui(this.#oo?.loadingRenderer)),function(e,t){e.appendChild(t)}(e,this.#Ds)):(t=this.#Ds,t?.remove()))}#qs(){js(this.querySelector(".tbw-grid-root"),this.#Ms,this._rows.length,this.#ns,this.#oo?.emptyRenderer,this.#oo?.emptyOverlay??"rows",this.#Ps,this)}#$s(e,t){this.#pl();const i=this.#Fs.get(e);if(!i)return;const r=this.findRenderedRowElement?.(i.index);r&&hi(r,t)}#Ws(e,t,i){this.#pl();const r=this.#Fs.get(e);if(!r)return;const n=this.findRenderedRowElement?.(r.index);if(!n)return;const o=this._visibleColumns.findIndex(e=>e.field===t);if(o<0)return;const s=n.children[o];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,i)}#rl(){if(this.isConnected&&this._headerRowEl&&this._bodyEl){if(this.#os.parseLightDomColumns(this),this.#co){const e=this.#co;this.#co=void 0,this.#os.merge();const t=this.#ys?.getAll()??[];this.#os.applyState(e,t)}this._bodyEl&&(this._bodyEl.style.display="",this._bodyEl.style.gridTemplateColumns=""),this.#ds.requestPhase(Ns.FULL,"setup")}}#ol(e){const t=this._virtualization.container,i=this.#ks,r=i?.scrollLeft??0,n=t?.scrollHeight??0,o=i?.scrollWidth??0,s=t?.clientHeight??0,l=i?.clientWidth??0;if(this.refreshVirtualWindow(!1)&&this.#ys?.onScrollRender(),this._virtualization.variableHeights&&(this.#ps&&clearTimeout(this.#ps),this.#ps=window.setTimeout(()=>{this.#ps=0,this.#Rs.measureRenderedRowHeights(this._virtualization.start,this._virtualization.end)},100)),this.#gs){const t=this.#vs;t.scrollTop=e,t.scrollLeft=r,t.scrollHeight=n,t.scrollWidth=o,t.clientHeight=s,t.clientWidth=l,this.#ys?.onScroll(t)}this.#ll("tbw-scroll",{scrollTop:e,scrollHeight:n,clientHeight:s,direction:"vertical"})}findHeaderRow(){return this.#is.querySelector(".header-row")}findRenderedRowElement(e){const t=this._virtualization,i=e-t.start;return i>=0&&i<this._rowPool.length&&i<t.end-t.start?this._rowPool[i]:null}_dispatchCellClick(e,t,i,r){const n=this._rows[t],o=this._visibleColumns[i];if(!n||!o)return!1;const l=o.field,a=s(n,l),d=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,composed:!0,detail:{rowIndex:t,colIndex:i,column:o,field:l,value:a,row:n,cellEl:r,trigger:"pointer",originalEvent:e}});if(this.dispatchEvent(d),d.defaultPrevented)return!0;const c={row:n,rowIndex:t,colIndex:i,column:o,field:l,value:a,cellEl:r,originalEvent:e},u=this.#ys?.onCellClick(c)??!1;return this.#ll("cell-click",c),u}_dispatchRowClick(e,t,i,r){if(!i)return!1;const n={rowIndex:t,row:i,rowEl:r,originalEvent:e},o=this.#ys?.onRowClick(n)??!1;return this.#ll("row-click",n),o}_dispatchHeaderClick(e,t,i){if(!t)return!1;const r={colIndex:this._columns.indexOf(t),field:t.field,column:t,headerEl:i,originalEvent:e};return this.#ys?.onHeaderClick(r)??!1}_dispatchKeyDown(e){return this.#ys?.onKeyDown(e)??!1}_getHorizontalScrollOffsets(e,t){return this.#ys?.getHorizontalScrollOffsets(e,t)??{left:0,right:0}}_getVerticalScrollOffsets(e){return this.#ys?.getVerticalScrollOffsets(e)??{top:0,bottom:0}}query(e,t){return this.#ys?.queryPlugins({type:e,context:t})??[]}_dispatchCellMouseDown(e){return this.#ys?.onCellMouseDown(e)??!1}_dispatchCellMouseMove(e){this.#ys?.onCellMouseMove(e)}_dispatchCellMouseUp(e){this.#ys?.onCellMouseUp(e)}_afterCellRender(e){this.#ys?.afterCellRender(e)}_hasAfterCellRenderHook(){return this.#ys?.hasAfterCellRenderHook()??!1}_afterRowRender(e){this.#ys?.afterRowRender(e)}_hasAfterRowRenderHook(){return this.#ys?.hasAfterRowRenderHook()??!1}async ready(){return this.#Bn}async forceLayout(){return 0===this.#ds.pendingPhase&&this.#ds.requestPhase(Ns.FULL,"forceLayout"),this.#ds.whenReady()}async getConfig(){return Object.freeze({...this.#oo||{}})}getRowId(e){return function(e,t,i){const r=dl(e,i);return void 0===r&&E("TBW040",'Cannot determine row ID. Configure getRowId in gridConfig or ensure rows have an "id" property.',t),r}(e,this.id,this.#oo.getRowId)}getRow(e){return this.#Es.getRow(e)}_getRowEntry(e){return this.#pl(),this.#Fs.get(e)}_getSourceRowEntry(e){const t=this._getRowEntry(e);if(t)return t;const i=this.#oo.getRowId,r=this.#ns;for(let n=0;n<r.length;n++)if(dl(r[n],i)===e)return{row:r[n],index:-1}}updateRow(e,t,i="api"){this.#Es.updateRow(e,t,i)}updateRows(e,t="api"){this.#Es.updateRows(e,t)}animateRow(e,t){return al(this,e,t)}animateRows(e,t){return function(e,t,i){return Promise.all(t.map(t=>al(e,t,i))).then(e=>e.filter(Boolean).length)}(this,e,t)}animateRowById(e,t){return function(e,t,i){const r=e._rows??[],n=e.getRowId;if(!n)return Promise.resolve(!1);const o=r.findIndex(e=>{if(null==e)return!1;try{return n(e)===t}catch{return!1}});return o<0?Promise.resolve(!1):al(e,o,i)}(this,e,t)}async insertRow(e,t,i=!0){return this.#Es.insertRow(e,t,i)}async removeRow(e,t=!0){return this.#Es.removeRow(e,t)}async applyTransaction(e,t=!0){return this.#Es.applyTransaction(e,t)}applyTransactionAsync(e){return this.#Es.applyTransactionAsync(e)}focusCell(e,t){this.#Ss.focusCell(e,t)}get focusedCell(){return this.#Ss.focusedCell}scrollToRow(e,t){this.#Ss.scrollToRow(e,t)}scrollToRowById(e,t){this.#Ss.scrollToRowById(e,t)}setColumnVisible(e,t){const i=this.#os.setColumnVisible(e,t);return i&&this.requestStateChange(),i}toggleColumnVisibility(e){const t=this.#os.toggleColumnVisibility(e);return t&&this.requestStateChange(),t}isColumnVisible(e){return this.#os.isColumnVisible(e)}showAllColumns(){this.#os.showAllColumns(),this.requestStateChange()}getAllColumns(){return this.#os.getAllColumns()}setColumnOrder(e){this.#os.setColumnOrder(e),this.requestStateChange()}getColumnOrder(){return this.#os.getColumnOrder()}getColumnState(){const e=this.#ys?.getAll()??[];return this.#os.collectState(e)}get columnState(){return this.getColumnState()}applyColumnState(e){e&&(this.#rs?this.#vl(e):(this.#co=e,this.#os.initialColumnState=e))}#vl(e){const t=this._columns,i=this._sortState,r=this.#ys?.getAll()??[];if(this.#os.applyState(e,r),!e.columns.some(e=>void 0!==e.sort)&&this.#yl(t,i))return this.#zs=void 0,Ls(this),void this.#ds.requestPhase(Ns.STYLE,"column-width");this.#rl()}#yl(e,t){const i=this._columns,r=this._sortState;if(t?.field!==r?.field||t?.direction!==r?.direction)return!1;if(e.length!==i.length)return!1;for(let n=0;n<e.length;n++){const t=e[n],r=i[n];if(t.field!==r.field)return!1;if(!!t.hidden!=!!r.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=[],zs(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 i=this._columns.find(t=>t.field===e);i&&(t?(this._sortState||(this.__originalOrder=this._rows.slice()),Fn(this,i,"desc"===t?-1:1)):Pn(this,i))}requestStateChange(){const e=this.#ys?.getAll()??[];this.#os.requestStateChange(e)}resetColumnState(){this.#co=void 0,this.__originalOrder=[];const e=this.#ys?.getAll()??[];this.#os.resetState(e),this.#os.merge(),this.#rl()}get defaultRowHeight(){return this._virtualization.rowHeight}#Cl=!1;refreshShellHeader(){this.#Cl||(this.#Cl=!0,queueMicrotask(()=>{this.#Cl=!1,this.isConnected&&(this.#zr(),this.#os.markSourcesChanged(),this.#os.merge(),this.#ys?.beforeStructuralRender(),this.#ys?.afterStructuralRender(),this.#xl())}))}#xl(){const e=this.#il();this._resizeController?.dispose(),this._resizeController=rl(this),this.#Ys(e),this.#ds.requestPhase(Ns.COLUMNS,"shellRefresh")}#tl=/* @__PURE__ */new Map;registerStyles(e,t){let i=this.#tl.get(e);i||(i=new CSSStyleSheet,this.#tl.set(e,i)),i.replaceSync(t),this.#Rl()}unregisterStyles(e){this.#tl.delete(e)&&this.#Rl()}getRegisteredStyles(){return Array.from(this.#tl.keys())}#Rl(){const e=Array.from(this.#tl.values()),t=document.adoptedStyleSheets.filter(e=>!Array.from(this.#tl.values()).includes(e));document.adoptedStyleSheets=[...t,...e]}registerExternalFocusContainer(e){this.#Ss.registerExternalFocusContainer(e)}unregisterExternalFocusContainer(e){this.#Ss.unregisterExternalFocusContainer(e)}containsFocus(e){return this.#Ss.containsFocus(e)}get lastFocusedElement(){return this.#Ss.lastFocusedElement}restoreLastFocus(){return this.#Ss.restoreLastFocus()}#zr(){this.#ys?.parseLightDom()}#el(){const e=()=>{this.#os.clearLightDomCache(),this.#rl()};this.#os.registerLightDomHandler("tbw-grid-column",e),this.#os.registerLightDomHandler("tbw-grid-detail",e),this.#os.registerLightDomHandler("tbw-grid-type",e),this.#os.observeLightDOM(this)}refreshColumns(){this.#os.clearLightDomCache(),Vo(this),this.#os.parseLightDomColumns(this),this.#ys?.syncLightDom(),this.#ds.requestPhase(Ns.COLUMNS,"refreshColumns")}#sl(){this.#Rs.updateCachedGeometry()}refreshVirtualWindow(e=!1,t=!1){return this.#Rs.refreshVirtualWindow(e,t)}invalidateRowHeight(e,t){this.#Rs.invalidateRowHeight(e,t)}#Qs(){this.#zr(),this.#os.markSourcesChanged(),this.#os.merge(),function(e){const t=[];for(let i=e.firstChild;i;i=i.nextSibling)1===i.nodeType&&i.classList.contains(Ge.ROOT)||t.push(i);e.replaceChildren();for(const i of t)e.appendChild(i);e.appendChild(Xn({hasShell:!1}))}(this.#is),this.#ys?.afterStructuralRender()}};!function(){const e=Fl.tagName,t=customElements.get(e);if(!t)return customElements.define(e,Fl),void(Fl.activeTag=e);if(t.version===Fl.version)return void(Fl.activeTag=e);const i=`${e}-v${Fl.version.replace(/[^a-zA-Z0-9]+/g,"-").toLowerCase()}`;customElements.get(i)||customElements.define(i,Fl),Fl.activeTag=i}(),globalThis.DataGridElement||(globalThis.DataGridElement=Fl);var Hl=["canHandle","createRenderer","createEditor","processConfig","getTypeDefault","createToolPanelRenderer","parseDetailElement","parseResponsiveCardElement","releaseCell","unmount","beginBatch","endBatch"];function Gl(e){const t=document.createElement(Fl.activeTag);return e&&(t.gridConfig=e),t}function zl(e,t,i){let r=document,n=!1;return"boolean"==typeof t?n=t:t&&(r=t,n=!!i),n?customElements.whenDefined(Fl.activeTag).then(()=>r.querySelector(e)):r.querySelector(e)}export{Nt as BLANK_FILTER_VALUE,Y as BaseGridPlugin,Hl as CORE_CONSUMED_ADAPTER_METHODS,ae as ClipboardPlugin,As as ColumnInferenceModeEnum,Ee as ColumnVirtualizationPlugin,Fe as ContextMenuPlugin,h as DEFAULT_A11Y_MESSAGES,g as DEFAULT_ANIMATION_CONFIG,p as DEFAULT_GRID_ICONS,Fl as DataGridElement,Fl as GridElement,At as EditingPlugin,Ot as ExportPlugin,Qt as FilteringPlugin,Es as FitModeEnum,Ne as GridCSSVars,Ge as GridClasses,ze as GridDataAttrs,Oe as GridSelectors,ni as GroupingColumnsPlugin,wi as GroupingRowsPlugin,Je as MAX_ELEMENT_HEIGHT_PX,vi as MasterDetailPlugin,Si as MultiSortPlugin,Hi as PinnedColumnsPlugin,Ui as PinnedRowsPlugin,xr as PivotPlugin,Pl as PluginManager,Ar as PrintPlugin,Xr as ROW_DRAG_HANDLE_FIELD,Ns as RenderPhase,Ir as ReorderPlugin,zr as ResponsivePlugin,rn as RowDragDropPlugin,An as SelectionPlugin,qn as ServerSidePlugin,Ro as StickyRowsPlugin,To as TooltipPlugin,zo as TreePlugin,ms as UndoRedoPlugin,ws as VisibilityPlugin,Rs as applyColumnDefaults,kn as builtInSort,et as computeScrollMapping,Gl as createGrid,_n as defaultComparator,ut as defaultEditorFor,oe as defaultPasteHandler,ne as emitPasteRejected,Wi as filteredCountPanel,it as fromVirtualScrollTop,n as getByPath,Ss as hasColumnShorthands,u as invalidateAccessorCache,xs as normalizeColumns,Cs as parseColumnShorthand,r as parseFieldPath,Sr as printGridIsolated,zl as queryGrid,s as readCellField,c as resolveCellValue,re as resolveColumnPaste,qi as rowCountPanel,$i as selectedCountPanel,o as setByPath,de as setFeatureResolver,tt as toVirtualScrollTop,d as writeCellField};
1
+ var e=/* @__PURE__ */new WeakMap;function t(e){return"__proto__"===e||"constructor"===e||"prototype"===e}var i=/* @__PURE__ */new Map;function r(e){if(-1===e.indexOf("."))return null;let t=i.get(e);return void 0===t&&(t=Object.freeze(e.split(".")),i.set(e,t)),t}function n(e,i){let r=e;for(let n=0;n<i.length;n++){if(null==r||"object"!=typeof r)return;const e=i[n];if(t(e))return;r=r[e]}return r}function o(e,i,r){if(null==e||"object"!=typeof e)return!1;let n=e;for(let s=0;s<i.length-1;s++){const e=i[s];if(t(e))return!1;const r=n[e];if(null==r||"object"!=typeof r)return!1;n=r}const o=i[i.length-1];return!t(o)&&(n[o]=r,!0)}function s(e,i){if(null==e)return;const o=r(i),s=e;return null===o?t(i)?void 0:s[i]:Object.prototype.hasOwnProperty.call(s,i)?s[i]:n(s,o)}function l(e){const i=r(e);return null===i?t(e)?()=>{}:t=>null==t?void 0:t[e]:t=>{if(null==t)return;const r=t;return Object.prototype.hasOwnProperty.call(r,e)?r[e]:n(r,i)}}function a(e){return-1===e.indexOf(".")&&!t(e)}function d(e,i,n){if(null==e||"object"!=typeof e)return!1;const s=r(i),l=e;return null===s?!t(i)&&(l[i]=n,!0):Object.prototype.hasOwnProperty.call(l,i)?(l[i]=n,!0):o(l,s,n)}function c(t,i,r=-1){if(!i.valueAccessor)return s(t,i.field);if("object"!=typeof t||null===t)return i.valueAccessor({row:t,column:i,rowIndex:r});const n=t,o=i.field;let l=e.get(n);if(l){const e=l.get(o);if(void 0!==e)return e.v}else l=/* @__PURE__ */new Map,e.set(n,l);const a=i.valueAccessor({row:t,column:i,rowIndex:r});return l.set(o,{v:a}),a}function u(t,i){t&&(i?e.get(t)?.delete(i):e.delete(t))}var h={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`,selectAllRows:()=>"Select all rows",selectRow:e=>`Select row ${e+1}`,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`},g={mode:"reduced-motion",duration:200,easing:"ease-out"},p={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:"",filterActive:"",print:"🖨️"};function f(e,t){return`[tbw-grid${e?`#${e}`:""}${t?`:${t}`:""}]`}var m="TBW020",w="TBW021",b="TBW041",v="TBW062",y="TBW072",C="TBW073",x="TBW074",R="TBW140";function S(e,t,i,r){return`${f(i,r)} ${e}: ${t}\n\n → More info: ${function(e){return`https://toolboxjs.com/grid/errors#${e.toLowerCase()}`}(e)}`}function E(e,t,i,r){throw new Error(S(e,t,i,r))}function A(e,t,i,r){console.warn(S(e,t,i,r))}function _(e,t,i,r){console.debug(S(e,t,i,r))}function k(e,t,i,r){console.error(S(e,t,i,r))}var T=/{{\s*([^}]+)\s*}}/g,M="__DG_EMPTY__",I=/^[\w$. '?+\-*/%:()!<>=,&|]+$/,L="__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("")),D=new RegExp(`__(proto|defineGetter|defineSetter)|${L.slice(3).join("|")}|this\\b`);function P(e){return e&&"string"==typeof e?e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"):""}var F=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|math".split("|")),H=/^on\w+$/i,G=new Set("href|src|action|formaction|data|srcdoc|xlink:href|poster|srcset".split("|")),z=/^\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,$(t.content),t.innerHTML}function N(e){const t=document.createElement("template");return e&&"string"==typeof e&&(t.innerHTML=e,$(t.content)),t.content}function q(e,t){t&&"string"==typeof t?-1!==t.indexOf("<")||-1!==t.indexOf("&")?e.replaceChildren(N(t)):e.textContent=t:e.replaceChildren()}function $(e){const t=[],i=e.querySelectorAll("*");for(const r of i){const e=r.tagName.toLowerCase();if(F.has(e)){t.push(r);continue}if(("svg"===e||"http://www.w3.org/2000/svg"===r.namespaceURI)&&Array.from(r.attributes).some(e=>H.test(e.name)||"href"===e.name||"xlink:href"===e.name)){t.push(r);continue}const i=[];for(const t of r.attributes){const e=t.name.toLowerCase();H.test(e)?i.push(t.name):"is"!==e?(G.has(e)&&z.test(t.value)||"style"===e&&/expression\s*\(|javascript:|behavior\s*:/i.test(t.value))&&i.push(t.name):i.push(t.name)}i.forEach(e=>r.removeAttribute(e))}t.forEach(e=>e.remove())}function W(e,t){const i=function(e){const t=[];let i=0;for(;i<e.length;){const r=e[i];if(" "!==r){if(r>="0"&&r<="9"||"."===r&&i+1<e.length&&e[i+1]>="0"&&e[i+1]<="9"){const r=i;for(;i<e.length&&(e[i]>="0"&&e[i]<="9"||"."===e[i]);)i++;t.push({type:"num",v:Number(e.slice(r,i))});continue}if("'"===r){let r="";for(i++;i<e.length&&"'"!==e[i];)r+=e[i++];if(i>=e.length)return null;i++,t.push({type:"str",v:r});continue}if(r>="a"&&r<="z"||r>="A"&&r<="Z"||"_"===r||"$"===r){const r=i;for(;i<e.length&&/[\w$.]/.test(e[i]);)i++;t.push({type:"id",v:e.slice(r,i)});continue}if(i+2<e.length){const r=e.slice(i,i+3);if("==="===r||"!=="===r){t.push({type:"op",v:r}),i+=3;continue}}if(i+1<e.length){const r=e.slice(i,i+2);if("=="===r||"!="===r||"<="===r||">="===r||"&&"===r||"||"===r){t.push({type:"op",v:r}),i+=2;continue}}if(!"+-*/%<>!?:(),".includes(r))return null;t.push({type:"op",v:r}),i++}else i++}return t}(e);if(!i)return;const r=i;let n=0;function o(){return r[n]}function s(){return r[n++]}function l(e,t){const i=o();return!!i&&(i.type===e&&(void 0===t||i.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 i=a();return e?t:i}return e}function d(){let e=c();for(;l("op","&&");)s(),e=e&&c();return e}function c(){let e=u();for(;;){const t=o();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=h();for(;;){const t=o();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=g();for(;;){const t=o();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=p();for(;;){const t=o();if(!t||"op"!==t.type)break;if("*"===t.v)s(),e*=p();else if("/"===t.v)s(),e/=p();else{if("%"!==t.v)break;s(),e%=p()}}return e}function p(){return l("op","!")?(s(),!p()):f()}function f(){const e=o();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 i=e.slice(4);return t.row?t.row[i]:void 0}if(e.startsWith("typeDefault.")){const i=e.slice(12);return t.typeDefault?t.typeDefault[i]:void 0}return"row"===e?t.row:"typeDefault"===e?t.typeDefault: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(),-f()):void 0}}const m=a();return n<r.length?void 0:m}function B(e,t){if(!e||-1===e.indexOf("{{"))return e;const i=[],r=(n=e.replace(T,(e,r)=>{const n=function(e,t){if(!(e=(e||"").trim()))return M;if(V.test(e))return M;if("value"===e)return null==t.value?M:String(t.value);if(e.startsWith("row.")&&!/[()?]/.test(e)&&!e.includes(":")){const i=e.slice(4),r=t.row?t.row[i]:void 0;return null==r?M:String(r)}if(e.startsWith("typeDefault.")&&!/[()?]/.test(e)&&!e.includes(":")){const i=e.slice(12),r=t.typeDefault?t.typeDefault[i]:void 0;return null==r?M:String(r)}if(e.length>80)return M;if(!I.test(e)||D.test(e))return M;const i=e.match(/\./g);if(i&&i.length>1)return M;try{const i=W(e,t),r=null==i?"":String(i);return V.test(r)?M:r||M}catch{return M}}(r,t);return i.push({expr:r.trim(),result:n}),n===M?n:P(n)}),n?n.replace(new RegExp(M,"g"),"").replace(/Reflect\.[^<>{}\s]+|\bProxy\b|ownKeys\([^)]*\)/g,""):n);var n;const o=i.length&&i.every(e=>""===e.result||e.result===M);return V.test(e)||o?"":r}var V=/Reflect|Proxy|ownKeys/;function K(e){if(V.test(e.textContent||"")){for(const t of e.childNodes)t.nodeType===Node.TEXT_NODE&&V.test(t.textContent||"")&&(t.textContent="");V.test(e.textContent||"")&&(e.textContent="")}}function j(e){if(V.test(e)){const e=()=>"";return e.__blocked=!0,e}const t=t=>B(e,t);return t.__blocked=!1,t}function U(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}var Y=class{static dependencies;static manifest;aliases;version="3.8.2";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#e;get defaultConfig(){return{}}constructor(e={}){this.userConfig=e}get resolvedConfig(){return this.#e?this.config:{...this.defaultConfig,...this.userConfig}}mergeConfigsFrom(e){if(0===e.length)return;const t={...this.userConfig},i={};for(const r of Object.keys(t))i[r]=this;for(const r of e){const e=r.userConfig;for(const[n,o]of Object.entries(e)){if(void 0===o)continue;if(!(n in t)){t[n]=o,i[n]=r;continue}if(t[n]===o)continue;const e=i[n]?.constructor.name??this.constructor.name,s=r.constructor.name,l=S("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)}refreshUserConfigFrom(e){const t=this.userConfig,i={...e.userConfig};for(const r of Object.keys(t))delete t[r];Object.assign(t,i)}attach(e){this.#e?.abort(),this.#e=new AbortController,this.grid=e,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#e?.abort(),this.#e=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 i=new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(i),i.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)}queryBoolean(e,t=null){const i=this.grid?.query?.(e,t);return Array.isArray(i)?i.some(Boolean):!!i}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.#e?.signal??this.grid?.disconnectSignal}get gridIcons(){const e=this.grid?.gridConfig?.icons??{};return{...p,...e}}t(e,t){return this.grid?.effectiveConfig?.locale?.[e]??t}get translate(){return(e,t)=>this.t(e,t)}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;return!t||"0"!==getComputedStyle(t).getPropertyValue("--tbw-animation-enabled").trim()}get animationDuration(){const e=this.gridElement;if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-animation-duration").trim(),i=parseInt(t,10);if(!isNaN(i))return i}return 200}setIcon(e,t,i){e.dataset.icon=U(t),"collapse"===t?e.dataset.expanded="":"expand"===t&&delete e.dataset.expanded;const r=this.#t(t,i);void 0!==r?"string"==typeof r?q(e,r):r instanceof HTMLElement&&e.replaceChildren(r.cloneNode(!0)):e.innerHTML=""}#t(e,t){return void 0!==t?t:this.grid?.gridConfig?.icons?.[e]}updateSortIndicator(e,t){e.querySelector('[part~="sort-indicator"], .sort-indicator')?.remove();const i=document.createElement("span");i.setAttribute("part","sort-indicator"),i.className="sort-indicator",t?(e.setAttribute("aria-sort","asc"===t?"ascending":"descending"),e.setAttribute("data-sort",t),this.setIcon(i,"asc"===t?"sortAsc":"sortDesc")):(e.setAttribute("aria-sort","none"),e.removeAttribute("data-sort"),this.setIcon(i,"sortNone"));const r=e.querySelector(".tbw-filter-btn")??e.querySelector(".resize-handle");return r?e.insertBefore(i,r):e.appendChild(i),i}warn(e,t){void 0!==t?console.warn(S(e,t,this.gridElement.id,this.name)):console.warn(`${f(this.gridElement.id,this.name)} ${e}`)}throwDiagnostic(e,t){throw new Error(S(e,t,this.gridElement.id,this.name))}};function Z(e,t,i=!0){let r=e;if(i&&(r=r.filter(e=>!e.hidden&&!e.field.startsWith("__")&&!0!==e.utility)),t?.length){const e=new Set(t);r=r.filter(t=>e.has(t.field))}return r}function X(e,t){return t?.length?[...t].sort((e,t)=>e-t).map(t=>e[t]).filter(e=>null!=e):e}var Q=/^[=+\-@\t\r]/;function J(e,t){if("string"==typeof e){const i=!1!==t.escapeFormulas&&Q.test(e)?`'${e}`:e,r=t.quoting??"auto";return"always"===r||"auto"===r&&(i.includes(t.delimiter)||i.includes(t.newline)||i.includes('"')||i.includes("\n")||i.includes("\r"))?`"${i.replace(/"/g,'""')}"`:i}return"number"==typeof e?String(e):"boolean"==typeof e?e?"true":"false":null==e?"":e instanceof Date?e.toISOString():"object"==typeof e?JSON.stringify(e):String(e)}var ee="data-tbw-clip";function te(e,t,i){const r=e?`<thead><tr>${e.map(e=>`<th>${P(e)}</th>`).join("")}</tr></thead>`:"",n=`<tbody>${t.map(e=>`<tr>${e.map(e=>`<td>${P(e)}</td>`).join("")}</tr>`).join("")}</tbody>`;return`<table ${ee}="${function(e){return btoa(encodeURIComponent(JSON.stringify(e)))}(i)}">${r}${n}</table>`}function ie(e,t){const i=t.delimiter??"\t",r=t.newline??"\n",n=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),o=n.length,s=[];let l=[],a=0,d=!1,c=!1;const u=e=>{const t=n.slice(a,e);return c?function(e){let t="",i=!1;for(let r=0;r<e.length;r++){const n=e[r];'"'===n?i?'"'===e[r+1]?(t+='"',r++):i=!1:i=!0:t+=n}return t}(t):t},h=()=>{(l.length>1||l.some(e=>""!==e.trim()))&&s.push(l),l=[]};for(let g=0;g<o;g++){const e=n[g];'"'===e?(c=!0,d?'"'===n[g+1]?g++:d=!1:d=!0):e!==i||d?e!==r||d||(l.push(u(g)),a=g+1,c=!1,h()):(l.push(u(g)),a=g+1,c=!1)}return l.push(u(o)),h(),s}function re(e,t){if(!1===e)return{accepted:!1,reason:"column"};if("function"==typeof e){const i=e(t);if(!1===i)return{accepted:!1,reason:"cell"};if(i&&"object"==typeof i&&"value"in i)return{accepted:!0,value:i.value}}return{accepted:!0,value:t.value}}function ne(e,t){0!==t.length&&e.dispatchEvent?.(new CustomEvent("paste-rejected",{detail:{rejected:t},bubbles:!0}))}function oe(e,t){const{rows:i,rawRows:r,target:n,fields:o,fillSelection:l,sourceFields:a}=e;if(!n||0===i.length)return;const c=r??i,h=t.rows,g=t.effectiveConfig.columns??[],p=g.map(e=>e.field),f=new Map(g.map(e=>[e.field,e])),[m=()=>!1]=t.query("getCellEditableResolver"),w=/* @__PURE__ */new Map;let b=h.length;const v=[],y=(e,t,i,r,n)=>{if(!t||!m(t,r))return;const o=re(f.get(t)?.onPaste,{value:i,field:t,row:r,rowIndex:e,oldValue:s(r,t),sourceField:n});if(!o.accepted)return void v.push({field:t,rowIndex:e,row:r,value:i,reason:o.reason});let l=w.get(e);l||(l={},w.set(e,l)),l[t]=se(o.value)};if(l&&n.bounds){const e=c.length;for(let t=n.row;t<=n.bounds.endRow&&!(t>=h.length);t++){const i=c[(t-n.row)%e],r=i.length;if(0===r)continue;const s=h[t];o.forEach((e,n)=>y(t,e,i[n%r],s,a?.[n%r]))}}else{const e=n.bounds?n.bounds.endRow:1/0;c.forEach((t,i)=>{const r=n.row+i;if(r>e)return;if(n.bounds&&r>=h.length)return;!n.bounds&&r>=b&&(b=r+1);const s=h[r]??{};t.forEach((e,t)=>y(r,o[t],e,s,a?.[t]))})}if(0===w.size&&b===h.length)return void ne(t,v);if(b>h.length){const e=[...h];for(;e.length<b;){const t={};p.forEach(e=>t[e]=""),e.push(t)}t.rows=e}const C=t.rows,x=[];let R=!1;for(const[s,S]of w){const e=C[s];if(!e)continue;let i;try{i=t.getRowId(e)}catch{i=void 0}if(null==i){for(const[t,i]of Object.entries(S))d(e,t,i),u(e,t);R=!0}else x.push({id:i,changes:S})}x.length>0?t.updateRows(x,"paste"):R&&b===h.length&&(t.rows=[...C]),ne(t,v)}function se(e){if(null===e||"object"!=typeof e)return e;try{return structuredClone(e)}catch{return e}}var le,ae=class extends Y{static manifest={queries:[{type:"clipboard:copy",description:"Triggers a copy operation and returns the copied text"}]};static dependencies=[{name:"selection",required:!1,reason:"Enables copy/paste of selected cells instead of entire grid"}];name="clipboard";get defaultConfig(){return{includeHeaders:!1,delimiter:"\t",newline:"\n",quoteStrings:!1}}lastCopied=null;#i=null;attach(e){super.attach(e),e.addEventListener("paste",e=>this.#r(e),{signal:this.disconnectSignal})}detach(){this.lastCopied=null,this.#i=null}handleQuery(e){if("clipboard:copy"===e.type)return this.copy(),!0}onKeyDown(e){return!(!e.ctrlKey&&!e.metaKey||"c"!==e.key)&&(e.preventDefault(),this.#n(e.target),!0)}#n(e){const t=this.#o();if(t&&0===t.ranges.length){let i,r;if(t.anchor)i=t.anchor.row,r=this.visibleColumns[t.anchor.col]?.field;else{const t=this.#s(e);t&&(i=t.row,r=this.columns[t.col]?.field)}if(null==i||null==r)return;return void this.copy({rowIndices:[i],columns:[r]})}this.copy()}#r(e){if(this.#l(e.target))return;const t=e.clipboardData?.getData("text/plain");if(!t)return;e.preventDefault();const i=ie(t,this.config),r=this.#o(),n=r?.ranges??[],o=n[0];let s=1/0,l=1/0,a=-1/0,d=-1/0;for(const S of n)s=Math.min(s,S.from.row,S.to.row),a=Math.max(a,S.from.row,S.to.row),l=Math.min(l,S.from.col,S.to.col),d=Math.max(d,S.from.col,S.to.col);const c=r?.anchor??null,u=o?s:c?.row??0,h=o?l:c?.col??0,g=!o||"range"!==r?.mode&&"row"!==r?.mode||s===a&&l===d?null:{endRow:a,endCol:d},p=g?.endCol??this.visibleColumns.length-1;let f,m;if(this.#a(i),this.#i&&this.#i.text===t&&this.#i.rawRows.length===i.length)f=this.#i.rawRows,m=this.#i.fields;else{const t=function(e){if(!e||-1===e.indexOf("data-tbw-clip"))return null;try{const t=e.match(new RegExp(`${ee}="([A-Za-z0-9+/=]*)"`))?.[1];if(!t)return null;const i=JSON.parse(decodeURIComponent(atob(t)));return i&&Array.isArray(i.rows)&&Array.isArray(i.fields)?i:null}catch{return null}}(e.clipboardData?.getData("text/html"));t&&t.rows.length===i.length&&(f=t.rows,m=t.fields)}const w=this.visibleColumns[h],b=w?{row:u,col:h,field:w.field,bounds:g}:null,v=!0===this.config.fillSelection&&null!==g,y=[],C=i[0]?.length??0,x=v?p-h+1:C;for(let S=0;S<x&&h+S<=p;S++){const e=this.visibleColumns[h+S];e&&y.push(e.field)}const R={rows:i,text:t,target:b,fields:y,fillSelection:v,rawRows:f,sourceFields:m};this.emit("paste",R),this.#d(R)}#d(e){if(!this.grid)return;const{pasteHandler:t}=this.config;null!==t&&(t??oe)(e,this.grid)}#a(e){if(!this.config.includeHeaders)return;if(e.length<=1)return;const t=e[0];if(0===t.length)return;const i=this.#c();for(const r of t)if(!i.has(r))return;e.shift()}#c(){const e=/* @__PURE__ */new Set;for(const t of this.columns){const i=t.header||t.field;i&&e.add(i)}return e}#l(e){return e instanceof Element&&!!e.closest('input, textarea, select, [contenteditable=""], [contenteditable="true"]')}#o(){return(this.grid?.query("getSelection"))?.[0]}#u(e){const t=this.#o(),i=t?.ranges??[];let r,n=1/0,o=-1/0,s=1/0,l=-1/0;for(const g of i)n=Math.min(n,g.from.row,g.to.row),o=Math.max(o,g.from.row,g.to.row),s=Math.min(s,g.from.col,g.to.col),l=Math.max(l,g.from.col,g.to.col);let a,d=null;e?.columns?r=Z(this.columns,e.columns):i.length&&"row"!==t?.mode?(r=Z(this.visibleColumns.slice(s,l+1)),d=r.map(e=>this.visibleColumns.indexOf(e))):r=Z(this.columns);let c=null;if(e?.rowIndices)a=X(this.rows,e.rowIndices);else if(i.length){const e="row"===t?.mode,r=e=>i.some(t=>e>=Math.min(t.from.row,t.to.row)&&e<=Math.max(t.from.row,t.to.row));a=[],c=[];for(let t=n;t<=o;t++){const i=this.rows[t];i&&(e&&!r(t)||(a.push(i),c.push(t)))}}else a=this.rows;const u=c,h=d;return{columns:r,rows:a,contains:u&&h?(e,t)=>{const r=u[e],n=h[t];return i.some(e=>r>=Math.min(e.from.row,e.to.row)&&r<=Math.max(e.from.row,e.to.row)&&n>=Math.min(e.from.col,e.to.col)&&n<=Math.max(e.from.col,e.to.col))}:null}}#h(e,t,i,r){return this.#g(this.#p(e,t,i,r),i)}#p(e,t,i,r){const n=i?.includeHeaders??this.config.includeHeaders??!1,o=i?.processCell??this.config.processCell;return{header:n?e.map(e=>e.header||e.field):null,rows:t.map((t,i)=>e.map((e,n)=>{if(r&&!r(i,n))return"";const s=c(t,e);return o?o(s,e.field,t):this.#f(e,s,t)}))}}#g(e,t){const i=t?.delimiter??this.config.delimiter??"\t",r=t?.newline??this.config.newline??"\n",n=[];e.header&&n.push(e.header.join(i));for(const o of e.rows)n.push(o.join(i));return n.join(r)}#f(e,t,i){if(e.format)try{const r=e.format(t,i);return null==r?"":String(r)}catch{}if(e.renderer||e.viewRenderer){const t=this.#m(e.field,i);if(null!=t)return t}return function(e){return null==e?"":e instanceof Date?e.toISOString():"object"==typeof e?JSON.stringify(e):String(e)}(t)}#m(e,t){const i=this.gridElement;if(!i)return null;const r=this.rows.indexOf(t);if(-1===r)return null;const n=i.querySelector(`.cell[data-row="${r}"][data-field="${e}"]`);return n?n.textContent?.trim()??null:null}#s(e){const t=e.closest(".cell[data-field]");if(!t)return null;const i=t.dataset.field,r=t.dataset.row;if(!i||!r)return null;const n=parseInt(r,10);if(isNaN(n))return null;const o=this.columns.findIndex(e=>e.field===i);return-1===o?null:{row:n,col:o}}getSelectionAsText(e){const{columns:t,rows:i,contains:r}=this.#u(e);return 0===t.length||0===i.length?"":this.#h(t,i,e,r)}async copy(e){const{columns:t,rows:i,contains:r}=this.#u(e);if(0===t.length||0===i.length)return"";const n=this.#p(t,i,e,r),o=this.#g(n,e),s=i.map((e,i)=>t.map((t,n)=>r&&!r(i,n)?"":se(c(e,t)))),l=t.map(e=>e.field);return await async function(e,t){if(t&&"undefined"!=typeof ClipboardItem&&navigator.clipboard?.write)try{return await navigator.clipboard.write([new ClipboardItem({"text/plain":new Blob([e],{type:"text/plain"}),"text/html":new Blob([t],{type:"text/html"})})]),!0}catch{}try{return await navigator.clipboard.writeText(e),!0}catch(i){A("TBW100",`Clipboard API failed: ${i}`);const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",t.style.pointerEvents="none",document.body.appendChild(t),t.select();const r=document.execCommand("copy");return document.body.removeChild(t),r}}(o,te(n.header,n.rows,{v:1,fields:l,rows:s})),this.lastCopied={text:o,timestamp:Date.now()},this.#i={text:o,rawRows:s,fields:l},this.emit("copy",{text:o,rowCount:i.length,columnCount:t.length}),o}async copyRows(e,t){return 0===e.length?"":this.copy({...t,rowIndices:e})}async paste(){const e=await async function(){try{return await navigator.clipboard.readText()}catch{return""}}();return e?ie(e,this.config):null}getLastCopied(){return this.lastCopied}};function de(e){le=e}var ce="3.8.2",ue=Symbol.for(`@toolbox-web/grid:feature-registry@${ce}/v1`),he=Symbol.for(`@toolbox-web/grid:feature-registry-warned@${ce}/v1`);function ge(e,t){let i=Reflect.get(globalThis,e);return void 0===i&&(i=t(),Reflect.set(globalThis,e,i)),i}var pe=ge(ue,()=>/* @__PURE__ */new Map),fe=ge(he,()=>/* @__PURE__ */new Set),me=()=>"undefined"!=typeof window&&("localhost"===window.location?.hostname||"127.0.0.1"===window.location?.hostname);function we(e,t,i){me()&&pe.has(e)&&!i?.override&&A("TBW030",`Feature "${e}" was re-registered. Previous registration overwritten.`),pe.set(e,{factory:t,name:e})}var be={undoRedo:["editing"],clipboard:["selection"]};function ve(e,t){const i=pe.get(e);if(i)return i.factory(t);if(me()&&!fe.has(e)){fe.add(e);const t=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();A("TBW031",`Feature "${e}" is configured but not registered.\nAdd this import to enable it:\n\n import '@toolbox-web/grid/features/${t}';\n`)}}de(function(e){const t=[];for(const[r,n]of Object.entries(e))void 0!==n&&!1!==n&&t.push(r);!function(e){const t=new Set(e);for(const i of e){const e=be[i];if(e)for(const r of e)t.has(r)||me()&&A("TBW032",`Feature "${i}" requires "${r}" to be enabled. Add "${r}" to your features configuration.`)}}(t);const i=[];for(const r of t){const t=ve(r,e[r]);t&&i.push(t)}return function(e){if(e.length<2)return e;const t=/* @__PURE__ */new Map;for(const s of e)t.set(s.name,s);const i=[],r=/* @__PURE__ */new Set,n=/* @__PURE__ */new Set,o=e=>{if(r.has(e)||n.has(e))return;n.add(e);const s=e.constructor.dependencies??[];for(const i of s){const e=t.get(i.name);e&&o(e)}n.delete(e),r.add(e),i.push(e)};for(const s of e)o(s);return i}(i)}),we("clipboard",e=>new ae("boolean"==typeof e?{}:e??{}));function ye(e){if(null==e)return 100;if("number"==typeof e)return e;const t=parseFloat(e);return isNaN(t)?100:t}function Ce(e){return e.map(e=>ye(e.width))}function xe(e){const t=[];let i=0;for(const r of e)t.push(i),i+=ye(r.width);return t}function Re(e){return e.reduce((e,t)=>e+ye(t.width),0)}function Se(e,t,i,r,n){const o=i.length;if(0===o)return{startCol:0,endCol:0,visibleColumns:[]};let s=function(e,t,i){let r=0,n=t.length-1;for(;r<n;){const o=Math.floor((r+n)/2);t[o]+i[o]<=e?r=o+1:n=o}return r}(e,i,r);s=Math.max(0,s-n);const l=e+t;let a=s;for(let c=s;c<o;c++){if(i[c]>=l){a=c-1;break}a=c}a=Math.min(o-1,a+n);const d=[];for(let c=s;c<=a;c++)d.push(c);return{startCol:s,endCol:a,visibleColumns:d}}var Ee=class extends Y{name="columnVirtualization";get defaultConfig(){return{autoEnable:!0,threshold:30,overscan:3}}isVirtualized=!1;startCol=0;endCol=0;scrollLeft=0;totalWidth=0;columnWidths=[];columnOffsets=[];originalColumns=[];attach(e){super.attach(e);const t=this.columns;this.columnWidths=Ce(t),this.columnOffsets=xe(t),this.totalWidth=Re(t),this.endCol=t.length-1}detach(){this.#w(),this.columnWidths=[],this.columnOffsets=[],this.originalColumns=[],this.isVirtualized=!1,this.startCol=0,this.endCol=0,this.scrollLeft=0,this.totalWidth=0}#w(){const e=this.gridElement;if(!e)return;const t=e.querySelector(".header-row");t&&(t.style.paddingLeft="",t.style.minWidth=""),e.querySelectorAll(".data-grid-row").forEach(e=>{e.style.paddingLeft=""});const i=e.querySelector(".rows-viewport .rows");i&&(i.style.width="");const r=e.querySelector(".rows-body");r&&(r.style.minWidth="")}processColumns(e){(0===this.originalColumns.length||e.length>=this.originalColumns.length)&&(this.originalColumns=e,this.columnWidths=Ce(e),this.columnOffsets=xe(e),this.totalWidth=Re(e));const t=this.originalColumns,i=(r=t.length,n=this.config.threshold??30,!!(this.config.autoEnable??!0)&&r>n);var r,n;if(this.isVirtualized=i??!1,!i)return this.startCol=0,this.endCol=t.length-1,[...t];const o=this.grid?.clientWidth||800,s=Se(this.scrollLeft,o,this.columnOffsets,this.columnWidths,this.config.overscan??3);return this.startCol=s.startCol,this.endCol=s.endCol,s.visibleColumns.map(e=>t[e])}afterRender(){if(!this.isVirtualized)return;const e=this.gridElement;if(!e)return;const t=this.columnOffsets[this.startCol]??0,i=e.querySelector(".header-row"),r=e.querySelectorAll(".data-grid-row");i&&(i.style.paddingLeft=`${t}px`,i.style.minWidth=`${this.totalWidth}px`),r.forEach(e=>{e.style.paddingLeft=`${t}px`});const n=e.querySelector(".rows-viewport .rows");n&&(n.style.width=`${this.totalWidth}px`);const o=e.querySelector(".rows-body");o&&(o.style.minWidth=`${this.totalWidth}px`)}onScroll(e){this.isVirtualized&&(Math.abs(e.scrollLeft-this.scrollLeft)<1||(this.scrollLeft=e.scrollLeft,this.requestColumnsRender()))}getIsVirtualized(){return this.isVirtualized}getVisibleColumnRange(){return{start:this.startCol,end:this.endCol}}scrollToColumn(e){const t=this.columnOffsets[e]??0,i=this.gridElement;i&&(i.scrollLeft=t)}getColumnOffset(e){return this.columnOffsets[e]??0}getTotalWidth(){return this.totalWidth}};we("columnVirtualization",e=>new Ee("boolean"==typeof e?{}:e??{}));function Ae(e,t){return("function"==typeof e?e(t):e).filter(e=>!0!==e.hidden&&("function"!=typeof e.hidden||!e.hidden(t)))}function _e(e,t){return!0===e.disabled||"function"==typeof e.disabled&&e.disabled(t)}function ke(e,t,i,r){const n=document.createElement("div");n.className="tbw-context-menu",n.setAttribute("role","menu");const o=e.some(e=>!e.separator&&e.icon);for(const s of e){if(s.separator){const e=document.createElement("div");e.className="tbw-context-menu-separator",e.setAttribute("role","separator"),n.appendChild(e);continue}const e=document.createElement("div");e.className="tbw-context-menu-item",s.cssClass&&e.classList.add(s.cssClass),e.setAttribute("role","menuitem"),e.setAttribute("data-id",s.id),e.setAttribute("tabindex","-1");const l=_e(s,t);if(l&&(e.classList.add("disabled"),e.setAttribute("aria-disabled","true")),s.icon){const t=document.createElement("span");t.className="tbw-context-menu-icon",q(t,s.icon),e.appendChild(t)}else if(o){const t=document.createElement("span");t.className="tbw-context-menu-icon",t.innerHTML="&nbsp;",e.appendChild(t)}const a=document.createElement("span");if(a.className="tbw-context-menu-label",a.textContent=s.name,e.appendChild(a),s.shortcut){const t=document.createElement("span");if(t.className="tbw-context-menu-shortcut",Array.isArray(s.shortcut))s.shortcut.forEach((e,i)=>{i>0&&t.appendChild(document.createTextNode("+"));const r=document.createElement("kbd");r.textContent=e,t.appendChild(r)});else{const e=document.createElement("kbd");e.textContent=s.shortcut,t.appendChild(e)}e.appendChild(t)}if(s.subMenu?.length){const n=document.createElement("span");n.className="tbw-context-menu-arrow",n.dataset.icon=U("submenuArrow"),void 0!==r&&("string"==typeof r?q(n,r):r instanceof HTMLElement&&n.appendChild(r.cloneNode(!0))),e.appendChild(n),e.addEventListener("mouseenter",()=>{if(e.querySelector(".tbw-context-menu"))return;if(!s.subMenu)return;const n=ke(Ae(s.subMenu,t),t,i,r);n.classList.add("tbw-context-submenu"),n.style.position="absolute",n.style.left="100%",n.style.top="0",e.style.position="relative",e.appendChild(n)}),e.addEventListener("mouseleave",()=>{const t=e.querySelector(".tbw-context-menu");t&&t.remove()})}l||!s.action||s.subMenu||e.addEventListener("click",e=>{e.stopPropagation(),i(s)}),n.appendChild(e)}return n}var Te="getContextMenuItems",Me=null,Ie=null,Le=0,De=/* @__PURE__ */new Set,Pe=[{id:"copy",name:"Copy",shortcut:"Ctrl+C",action:e=>{e.grid?.query?.("clipboard:copy")}},{separator:!0,id:"sep1",name:""},{id:"export-csv",name:"Export CSV",action:e=>{e.grid?.query?.("export:csv")}}],Fe=class e extends Y{static manifest={queries:[{type:Te,description:"Collects context menu items from other plugins for header right-click menus"}]};name="contextMenu";get defaultConfig(){return{items:Pe}}isOpen=!1;position={x:0,y:0};params=null;menuElement=null;boundHost=null;attach(e){super.attach(e),this.installGlobalHandlers(),Le++,De.add(this)}detach(){this.menuElement&&(this.menuElement.remove(),this.menuElement=null),this.isOpen=!1,this.params=null,this.boundHost=null,De.delete(this),this.uninstallGlobalHandlers()}syncSelectionOnContextMenu(e){if(e<0)return[];const t=(this.grid?.query("getSelectedRowIndices"))?.[0];return t?t.includes(e)?t:(this.grid?.query("selectRows",[e]),[e]):[e]}static CSS_VARS_TO_COPY=["--tbw-color-panel-bg","--tbw-color-fg","--tbw-color-fg-muted","--tbw-color-border","--tbw-color-row-hover","--tbw-color-shadow","--tbw-color-danger","--tbw-border-radius","--tbw-font-family","--tbw-font-size-sm","--tbw-font-size-xs","--tbw-font-size-2xs","--tbw-spacing-xs","--tbw-icon-size","--tbw-menu-min-width","--tbw-menu-item-padding","--tbw-menu-item-gap","--tbw-context-menu-bg","--tbw-context-menu-fg","--tbw-context-menu-border","--tbw-context-menu-radius","--tbw-context-menu-shadow","--tbw-context-menu-hover","--tbw-context-menu-danger","--tbw-context-menu-muted","--tbw-context-menu-min-width","--tbw-context-menu-font-size","--tbw-context-menu-font-family","--tbw-context-menu-item-padding","--tbw-context-menu-item-gap","--tbw-context-menu-icon-size","--tbw-context-menu-shortcut-size","--tbw-context-menu-arrow-size","--tbw-icon-submenu-arrow"];copyGridStyles(t){const i=this.gridElement;if(!i)return;const r=getComputedStyle(i),n=[],o=r.getPropertyValue("color-scheme").trim();o&&n.push(`color-scheme: ${o}`);for(const s of e.CSS_VARS_TO_COPY){const e=r.getPropertyValue(s).trim();e&&n.push(`${s}: ${e}`)}if(n.length>0){const e=t.getAttribute("style")||"";t.setAttribute("style",e+n.join("; ")+";")}}installGlobalHandlers(){if(Ie||"undefined"==typeof document||((Ie=document.createElement("style")).id="tbw-context-menu-styles",Ie.textContent="@layer tbw-plugins{.tbw-context-menu{background:var(--tbw-context-menu-bg,var(--tbw-color-panel-bg));color:var(--tbw-context-menu-fg,var(--tbw-color-fg));border:1px solid var(--tbw-context-menu-border,var(--tbw-color-border));border-radius:var(--tbw-context-menu-radius,var(--tbw-border-radius));box-shadow:var(--tbw-context-menu-shadow,0 2px 10px var(--tbw-color-shadow));min-width:var(--tbw-context-menu-min-width,var(--tbw-menu-min-width));padding:var(--tbw-spacing-xs) 0;z-index:10000;font-size:var(--tbw-context-menu-font-size,var(--tbw-font-size-sm));font-family:var(--tbw-context-menu-font-family,var(--tbw-font-family));position:fixed}.tbw-context-menu-item{padding:var(--tbw-context-menu-item-padding,var(--tbw-menu-item-padding));cursor:pointer;align-items:center;gap:var(--tbw-context-menu-item-gap,var(--tbw-menu-item-gap));display:flex}.tbw-context-menu-item:hover:not(.disabled){background:var(--tbw-context-menu-hover,var(--tbw-color-row-hover))}.tbw-context-menu-item.disabled{opacity:.5;cursor:default}.tbw-context-menu-item.danger{color:var(--tbw-context-menu-danger,var(--tbw-color-danger))}.tbw-context-menu-icon{width:var(--tbw-context-menu-icon-size,var(--tbw-icon-size));text-align:center}.tbw-context-menu-label{flex:1}.tbw-context-menu-shortcut kbd{color:var(--tbw-context-menu-muted,var(--tbw-color-fg-muted));font-size:var(--tbw-context-menu-shortcut-size,var(--tbw-font-size-xs))}.tbw-context-menu-arrow{font-size:var(--tbw-context-menu-arrow-size,var(--tbw-font-size-2xs));color:var(--tbw-context-menu-muted,var(--tbw-color-fg-muted))}.tbw-context-menu-separator{background:var(--tbw-context-menu-border,var(--tbw-color-border));height:1px;margin:var(--tbw-spacing-xs) 0}}",document.head.appendChild(Ie)),!Me){const e=(Me=new AbortController).signal,t=()=>{for(const e of De)e.isMenuOpen()&&e.hideMenu();document.querySelectorAll(".tbw-context-menu").forEach(e=>e.remove())};document.addEventListener("click",t,{signal:e}),document.addEventListener("keydown",e=>{"Escape"===e.key&&t()},{signal:e}),document.addEventListener("scroll",t,{capture:!0,signal:e})}}uninstallGlobalHandlers(){--Le>0||(Me&&(Me.abort(),Me=null),Ie&&(Ie.remove(),Ie=null))}collectPluginItems(e){if(!this.grid)return[];const t=this.grid.query(Te,e),i=[];for(const r of t)Array.isArray(r)&&i.push(...r);return i.sort((e,t)=>(e.order??100)-(t.order??100)),this.insertGroupSeparators(i)}insertGroupSeparators(e){if(e.length<=1)return e;const t=[];let i=-1;for(const r of e){if(r.separator){t.push(r);continue}const e=Math.floor((r.order??100)/10);i>=0&&e!==i&&t.push({id:`__sep-${i}-${e}`,label:"",separator:!0,action:()=>{}}),i=e,t.push(r)}return t}convertPluginItems(e){return e.map(e=>({id:e.id,name:e.label,icon:e.icon,shortcut:e.shortcut,disabled:e.disabled??!1,action:()=>e.action(),separator:e.separator,cssClass:e.cssClass}))}openMenuAt(e,t,i,r=!1){this.params=e,this.position={x:t,y:i};const n=this.collectPluginItems(e);let o=Ae(this.config.items??Pe,e);if(n.length>0){const e=this.convertPluginItems(n);o=o.length>0&&e.length>0?[...o,{id:"__plugin-sep",name:"",separator:!0},...e]:[...o,...e]}var s,l;(o=function(e){const t=[];for(const i of e)i.separator&&(0===t.length||t[t.length-1].separator)||t.push(i);return t.length>0&&t[t.length-1].separator&&t.pop(),t}(o),o.length)&&(document.querySelectorAll(".tbw-context-menu").forEach(e=>e.remove()),this.menuElement=null,this.menuElement=ke(o,e,t=>{t.action&&t.action(e),this.hideMenu()},this.grid?.gridConfig?.icons?.submenuArrow),s=this.menuElement,l=()=>this.hideMenu(),s.addEventListener("keydown",e=>{const t=Array.from(s.querySelectorAll('[role="menuitem"]:not(.disabled)'));if(!t.length)return;const i=document.activeElement,r=t.indexOf(i);switch(e.key){case"ArrowDown":e.preventDefault(),t[r<t.length-1?r+1:0].focus();break;case"ArrowUp":e.preventDefault(),t[r>0?r-1:t.length-1].focus();break;case"Enter":case" ":e.preventDefault(),i&&t.includes(i)&&i.click();break;case"Escape":e.preventDefault(),l()}}),document.body.appendChild(this.menuElement),this.copyGridStyles(this.menuElement),function(e,t,i){e.style.position="fixed",e.style.left=`${t}px`,e.style.top=`${i}px`,e.style.visibility="hidden",e.style.zIndex="10000";const r=e.getBoundingClientRect(),n=window.innerWidth,o=window.innerHeight;let s=t,l=i;t+r.width>n&&(s=t-r.width),i+r.height>o&&(l=i-r.height),s=Math.max(0,s),l=Math.max(0,l),e.style.left=`${s}px`,e.style.top=`${l}px`,e.style.visibility="visible"}(this.menuElement,t,i),this.isOpen=!0,r&&function(e){e.querySelector('[role="menuitem"]:not(.disabled)')?.focus()}(this.menuElement),this.emit("context-menu-open",{params:e,items:o}))}openMenuAtFocusedCell(e){const t=this.grid;if(!t)return!1;const i=t._focusRow,r=t._focusCol;if(i<0||r<0)return!1;const n=this.visibleColumns[r],o=this.rows[i],s=this.gridElement?.querySelector(`[data-row="${i}"][data-col="${r}"]`);let l=0,a=0;if(s){const e=s.getBoundingClientRect();l=e.left+e.width/2,a=e.bottom}const d=this.syncSelectionOnContextMenu(i);return this.openMenuAt({row:o,rowIndex:i,column:n,columnIndex:r,field:n?.field??"",value:o?.[n?.field]??null,isHeader:!1,event:e,selectedRows:d},l,a,!0),!0}handleContextMenu=e=>{const t=e;t.preventDefault();const i=t.target,r=i?.closest("[data-row][data-col]"),n=i?.closest('[part~="header-cell"]');let o;if(r){const e=parseInt(r.getAttribute("data-row")??"-1",10),i=parseInt(r.getAttribute("data-col")??"-1",10),n=this.visibleColumns[i],s=this.rows[e],l=this.syncSelectionOnContextMenu(e);o={row:s,rowIndex:e,column:n,columnIndex:i,field:n?.field??"",value:s?.[n?.field]??null,isHeader:!1,event:t,selectedRows:l}}else{if(!n)return void(-1===t.button&&t.target===this.boundHost&&this.openMenuAtFocusedCell(t));{const e=parseInt(n.getAttribute("data-col")??"-1",10),i=this.visibleColumns[e];o={row:null,rowIndex:-1,column:i,columnIndex:e,field:i?.field??"",value:null,isHeader:!0,event:t,selectedRows:[]}}}this.openMenuAt(o,t.clientX,t.clientY)};afterRender(){const e=this.gridElement;e&&this.boundHost!==e&&(this.boundHost=e,e.addEventListener("contextmenu",this.handleContextMenu,{signal:this.disconnectSignal}))}onKeyDown(e){const t="F10"===e.key&&e.shiftKey,i="ContextMenu"===e.key;if((t||i)&&(e.preventDefault(),this.openMenuAtFocusedCell(e)))return!0}showMenu(e,t,i){const r={row:i.row??null,rowIndex:i.rowIndex??-1,column:i.column??null,columnIndex:i.columnIndex??-1,field:i.field??"",value:i.value??null,isHeader:i.isHeader??!1,event:i.event??new MouseEvent("contextmenu"),selectedRows:i.selectedRows??[]};this.openMenuAt(r,e,t)}hideMenu(){this.menuElement&&(this.menuElement.remove(),this.menuElement=null),this.isOpen&&(this.isOpen=!1)}isMenuOpen(){return this.isOpen}};we("contextMenu",e=>new Fe("boolean"==typeof e?{}:e??{}));var He='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])',Ge={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"},ze={FIELD:"data-field",TRUNCATED:"data-tbw-truncated",GROUP_KEY:"data-group-key"},Oe={ROOT:`.${Ge.ROOT}`,HEADER:`.${Ge.HEADER}`,HEADER_ROW:`.${Ge.HEADER_ROW}`,HEADER_CELL:`.${Ge.HEADER_CELL}`,ROWS_VIEWPORT:`.${Ge.ROWS_VIEWPORT}`,ROWS_CONTAINER:`.${Ge.ROWS_CONTAINER}`,DATA_ROW:`.${Ge.DATA_ROW}`,DATA_CELL:`.${Ge.DATA_CELL}`,GROUP_ROW:`.${Ge.GROUP_ROW}`,CELL_BY_FIELD:e=>`.${Ge.DATA_CELL}[${ze.FIELD}="${e}"]`,SELECTED_ROWS:`.${Ge.DATA_ROW}.${Ge.SELECTED}`,EDITING_CELL:`.${Ge.DATA_CELL}.${Ge.EDITING}`},Ne={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"};function qe(e,t){if(!e)return;if(!1===("effectiveConfig"in e?e.effectiveConfig:void 0)?.a11y?.announcements)return;const i=e.querySelector?.(".tbw-sr-only");i&&(i.textContent="","function"==typeof requestAnimationFrame?requestAnimationFrame(()=>{i.textContent=t}):i.textContent=t)}function $e(e,t,...i){const r=(e&&"effectiveConfig"in e?e.effectiveConfig:void 0)?.a11y?.messages?.[t];return r?r(...i):h[t](...i)}function We(){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 Be(e){return`<span role="checkbox" aria-checked="${e}" aria-label="${e}">${e?"&#x1F5F9;":"&#9744;"}</span>`}function Ve(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 Ke(e){if(!e)return-1;const t=e.getAttribute("data-row");if(t)return parseInt(t,10);const i=e.closest(".data-grid-row");if(!i)return-1;const r=i.parentElement;if(!r)return-1;const n=r.querySelectorAll(":scope > .data-grid-row");for(let o=0;o<n.length;o++)if(n[o]===i)return o;return-1}function je(e){e&&e.querySelectorAll(".cell-focus").forEach(e=>e.classList.remove("cell-focus"))}function Ue(e){try{if("rtl"===getComputedStyle(e).direction)return"rtl"}catch{}try{if("rtl"===e.closest?.("[dir]")?.getAttribute("dir"))return"rtl"}catch{}return"ltr"}function Ye(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 Ze(e,t,i){const r=Ye(t,i);return"string"==typeof r?e.byKey.get(r):r&&"object"==typeof r?e.byRef.get(r):void 0}function Xe(e,t){if(0===e.length)return-1;if(t<=0)return 0;let i=0,r=e.length-1;for(;i<=r;){const n=Math.floor((i+r)/2),o=e[n],s=o.offset+o.height;if(t<o.offset)r=n-1;else{if(!(t>=s))return n;i=n+1}}return Math.max(0,Math.min(i,e.length-1))}function Qe(e,t){const{positionCache:i,heightCache:r,rows:n,start:o,end:s,getPluginHeight:l,getRowId:a}=e;let d=!1;const c=[];t.forEach(e=>{const t=e.dataset.rowIndex;if(!t)return;const u=parseInt(t,10);if(u<o||u>=s||u>=n.length)return;const h=n[u],g=l?.(h,u);if(void 0!==g){const e=i[u];return void((!e.measured||Math.abs(e.height-g)>1)&&(c.push({index:u,height:g}),d=!0))}const p=e.offsetHeight;if(p>0){const e=i[u];(!e.measured||Math.abs(e.height-p)>1)&&(c.push({index:u,height:p}),function(e,t,i,r){const n=Ye(t,r);"string"==typeof n?e.byKey.set(n,i):n&&"object"==typeof n&&e.byRef.set(n,i)}(r,h,p,a),d=!0)}}),function(e,t){if(0===t.length||0===e.length)return;let i=t;for(let o=1;o<t.length;o++)if(t[o].index<t[o-1].index){i=[...t].sort((e,t)=>e.index-t.index);break}let r=0;for(;r<i.length&&i[r].index<0;)r++;if(r>=i.length||i[r].index>=e.length)return;let n=0;for(let o=i[r].index;o<e.length;o++){const t=e[o];for(t.offset+=n;r<i.length&&i[r].index===o;){const e=i[r].height,o=e-t.height;t.measured=!0,0!==o&&(t.height=e,n+=o),r++}}}(i,c);const u=d?function(e){let t=0;for(const i of e)i.measured&&t++;return t}(i):0,h=d?function(e,t){let i=0,r=0;for(const n of e)n.measured&&(i+=n.height,r++);return r>0?i/r:t}(i,e.defaultHeight):0;return{hasChanges:d,measuredCount:u,averageHeight:h}}var Je=335e5;function et(e,t,i=Je){return{rawContentHeight:e,spacerHeight:Math.min(e,i),viewportHeight:t,capped:e>i}}function tt(e,t){if(!t.capped)return e;const i=t.spacerHeight-t.viewportHeight,r=t.rawContentHeight-t.viewportHeight;if(i<=0||r<=0)return e;const n=e*r/i;return n<0?0:n>r?r:n}function it(e,t){if(!t.capped)return e;const i=t.spacerHeight-t.viewportHeight,r=t.rawContentHeight-t.viewportHeight;return i<=0||r<=0?e:e*i/r}function rt(e){"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit()}function nt(e){return void 0!==e._activeEditRows&&-1!==e._activeEditRows}function ot(e,t,i,r){e._focusCol=("rtl"===Ue(e)?!r:r)?Math.min(i,e._focusCol+1):Math.max(0,e._focusCol-1),t.preventDefault()}function st(e,t,i,r,n){(t.ctrlKey||t.metaKey)&&(nt(e)&&rt(e),e._focusRow=n?i:0),e._focusCol=n?r:0,t.preventDefault(),at(e,n?{forceScrollRight:!0}:{forceScrollLeft:!0})}function lt(e,t){if(e._dispatchKeyDown?.(t))return;const i=t.composedPath?.()??[];if(function(e,t,i){if(i&&i!==e&&!i.closest?.(".rows-body"))return!0;if(function(e){if(!e)return!1;const t=e.tagName;return"INPUT"===t||"SELECT"===t||"TEXTAREA"===t||!!e.isContentEditable}(i))switch(t.key){case"Home":case"End":case"ArrowLeft":case"ArrowRight":case"Enter":case"Escape":return!0;case"ArrowUp":case"ArrowDown":if("INPUT"===i.tagName&&"number"===i.type)return!0}const r=e._visibleColumns[e._focusCol]?.type;return nt(e)&&"select"===r&&("ArrowDown"===t.key||"ArrowUp"===t.key)}(e,t,i.length?i[0]:t.target))return;const r=e._rows.length-1,n=e._visibleColumns.length-1;switch(t.key){case"Tab":!function(e,t,i,r){if(t.preventDefault(),!t.shiftKey)return e._focusCol<r?void(e._focusCol+=1):(rt(e),void(e._focusRow<i&&(e._focusRow+=1,e._focusCol=0)));e._focusCol>0?e._focusCol-=1:e._focusRow>0&&(e._activeEditRows===e._focusRow&&rt(e),e._focusRow-=1,e._focusCol=r)}(e,t,r,n);break;case"ArrowDown":nt(e)&&rt(e),e._focusRow=Math.min(r,e._focusRow+1),t.preventDefault();break;case"ArrowUp":nt(e)&&rt(e),e._focusRow=Math.max(0,e._focusRow-1),t.preventDefault();break;case"ArrowRight":ot(e,t,n,!0);break;case"ArrowLeft":ot(e,t,n,!1);break;case"Home":return void st(e,t,r,n,!1);case"End":return void st(e,t,r,n,!0);case"PageDown":e._focusRow=Math.min(r,e._focusRow+20),t.preventDefault();break;case"PageUp":e._focusRow=Math.max(0,e._focusRow-20),t.preventDefault();break;case"Enter":if(function(e,t){const i=e._focusRow,r=e._focusCol,n=e._visibleColumns[r],o=e._rows[i],l=n?.field??"",a=new CustomEvent("cell-activate",{cancelable:!0,detail:{rowIndex:i,colIndex:r,column:n,field:l,value:l&&o?s(o,l):void 0,row:o,cellEl:e.querySelector(`[data-row="${i}"][data-col="${r}"]`),trigger:"keyboard",originalEvent:t}});return e.dispatchEvent(a),a.defaultPrevented}(e,t))return void t.preventDefault();break;default:return}at(e)}function at(e,t){!function(e){if(!e._virtualization?.enabled)return;const{rowHeight:t,container:i,viewportEl:r,scrollMapping:n}=e._virtualization,o=i,s=r?.clientHeight??o?.clientHeight??0;if(!o||s<=0)return;const l=e._getVerticalScrollOffsets?.(e._focusRow)??{top:0,bottom:0};if(l.skipScroll)return;const a=Math.max(0,l.top),d=s-a-Math.max(0,l.bottom);if(d<=0)return;const c=e._focusRow*t,u=n?tt(o.scrollTop,n):o.scrollTop;if(c<u+a){const e=Math.max(0,c-a);o.scrollTop=n?it(e,n):e}else if(c+t>u+a+d){const e=Math.max(0,c-d+t-a);o.scrollTop=n?it(e,n):e}}(e);const i=nt(e)||!!e._isGridEditMode;i||e.refreshVirtualWindow(!1),je(e._bodyEl),Array.from(e._bodyEl.querySelectorAll('[aria-selected="true"]')).forEach(e=>{e.setAttribute("aria-selected","false")});const r=function(e){const t=e._focusRow,i=e._virtualization.start??0,r=e._virtualization.end??e._rows.length;if(t<i||t>=r)return;const n=e._bodyEl.querySelectorAll(".data-grid-row")[t-i];let o=n?.children[e._focusCol];return o&&o.classList?.contains("cell")||(o=n?.querySelector(`.cell[data-col="${e._focusCol}"]`)??n?.querySelector(".cell[data-col]")),o?{rowEl:n??null,cell:o}:void 0}(e);if(!r)return;const{rowEl:n,cell:o}=r;o.classList.add("cell-focus"),o.setAttribute("aria-selected","true"),i&&!t?.forceHorizontalScroll||function(e,t,i,r){const n=e.querySelector(".tbw-scroll-area");if(!n)return;if(r?.forceScrollLeft)return void(n.scrollLeft=0);if(r?.forceScrollRight)return void(n.scrollLeft=n.scrollWidth-n.clientWidth);const o=e._getHorizontalScrollOffsets?.(t??void 0,i)??{left:0,right:0};if(o.skipScroll)return;const s=i.getBoundingClientRect(),l=n.getBoundingClientRect(),a=s.left-l.left+n.scrollLeft,d=a+s.width,c=n.scrollLeft+o.left,u=n.scrollLeft+n.clientWidth-o.right;a<c?n.scrollLeft=a-o.left:d>u&&(n.scrollLeft=d-n.clientWidth+o.right)}(e,n,o,t),function(e,t,i){if(i&&t.classList.contains(Ge.EDITING)){const e=t.querySelector(He);if(e&&document.activeElement!==e)try{e.focus({preventScroll:!0})}catch{}return}if(i){if(t.contains(document.activeElement))return;t.hasAttribute("tabindex")||t.setAttribute("tabindex","-1");try{t.focus({preventScroll:!0})}catch{}return}const r=document.activeElement;r instanceof HTMLElement&&r!==e&&"function"==typeof e.contains&&e.contains(r)&&!r.classList.contains("cell")&&!r.closest(".cell")||r===e||e.focus({preventScroll:!0})}(e,o,i)}function dt(e){return t=>{const i=e.editorParams,r=document.createElement("input");r.type="date",t.value instanceof Date?r.valueAsDate=t.value:"string"==typeof t.value&&t.value&&(r.value=t.value.split("T")[0]),i?.min&&(r.min=i.min),i?.max&&(r.max=i.max),i?.placeholder&&(r.placeholder=i.placeholder);return r.addEventListener("change",()=>{var n;if(r.value)"string"==typeof t.value?t.commit(r.value):t.commit(r.valueAsDate);else if(e.nullable)t.commit(null);else{const e=i?.default;"string"==typeof t.value||"string"==typeof e?t.commit("string"==typeof e?e:`${(n=e??/* @__PURE__ */new Date).getFullYear()}-${String(n.getMonth()+1).padStart(2,"0")}-${String(n.getDate()).padStart(2,"0")}`):t.commit(e instanceof Date?e:/* @__PURE__ */new Date)}}),r.addEventListener("keydown",e=>{"Escape"===e.key&&t.cancel()}),r}}var ct="__tbw_null__";function ut(e){switch(e.type){case"number":return function(e){return t=>{const i=e.editorParams,r=document.createElement("input");r.type="number",r.value=null!=t.value?String(t.value):"",void 0!==i?.min&&(r.min=String(i.min)),void 0!==i?.max&&(r.max=String(i.max)),void 0!==i?.step&&(r.step=String(i.step)),i?.placeholder&&(r.placeholder=i.placeholder);const n=()=>{""===r.value?e.nullable?t.commit(null):t.commit(i?.min??0):t.commit(Number(r.value))};return r.addEventListener("blur",n),r.addEventListener("keydown",e=>{"Enter"===e.key&&n(),"Escape"===e.key&&t.cancel()}),r}}(e);case"boolean":return e=>{const t=document.createElement("input");return t.type="checkbox",t.checked=!!e.value,t.addEventListener("change",()=>e.commit(t.checked)),t};case"date":return dt(e);case"select":return function(e){return t=>{const i=e.editorParams,r=document.createElement("select");if(e.multi&&(r.multiple=!0),e.nullable||i?.includeEmpty){const n=document.createElement("option");n.value=e.nullable?ct:"",n.textContent=e.nullable?i?.emptyLabel??"(Blank)":i?.emptyLabel??"",null==t.value&&(n.selected=!0),r.appendChild(n)}(function(e){const t=e.options;return t?"function"==typeof t?t():t:[]})(e).forEach(i=>{const n=document.createElement("option");n.value=String(i.value),n.textContent=i.label,e.multi&&Array.isArray(t.value)&&t.value.includes(i.value)?n.selected=!0:e.multi||t.value!==i.value||(n.selected=!0),r.appendChild(n)});const n=()=>{if(e.multi){const e=Array.from(r.selectedOptions).map(e=>e.value);t.commit(e)}else e.nullable&&r.value===ct?t.commit(null):t.commit(r.value)};return r.addEventListener("change",n),r.addEventListener("blur",n),r.addEventListener("keydown",e=>{"Escape"===e.key&&t.cancel()}),r}}(e);default:return function(e){return t=>{const i=e.editorParams,r=document.createElement("input");r.type="text",r.value=null!=t.value?String(t.value):"",void 0!==i?.maxLength&&(r.maxLength=i.maxLength),i?.pattern&&(r.pattern=i.pattern),i?.placeholder&&(r.placeholder=i.placeholder);const n=()=>{const i=r.value;""!==i?"string"==typeof t.value&&i===t.value.replace(/[\n\r]/g,"")||("number"==typeof t.value?t.commit(Number(i)):t.commit(i)):e.nullable?t.commit(null):t.commit("")};return r.addEventListener("blur",n),r.addEventListener("keydown",e=>{"Enter"===e.key&&n(),"Escape"===e.key&&t.cancel()}),r}}(e)}}function ht(e,t){return""===e?t?.nullable?null:(t?.editorParams)?.min??0:Number(e)}function gt(e,t,i){if(!(e instanceof HTMLInputElement))return function(e,t,i){return""===e.value||"number"!==t?.type&&"number"!=typeof i?null==i&&""===e.value?t?.nullable?null:"":e.value:Number(e.value)}(e,t,i);switch(e.type){case"checkbox":return e.checked;case"number":return ht(e.value,t);case"date":return function(e,t,i){return e.value?"string"==typeof i?e.value:e.valueAsDate:t?.nullable?null:"string"==typeof i?i||/* @__PURE__ */(new Date).toISOString().slice(0,10):i??/* @__PURE__ */new Date}(e,t,i);default:return function(e,t,i){return"number"==typeof i?ht(e.value,t):""===e.value&&null==i?t?.nullable?null:"":"string"==typeof i&&e.value===i.replace(/[\n\r]/g,"")?i:e.value}(e,t,i)}}var pt=class{#b=/* @__PURE__ */new Map;#v;constructor(e){this.#v=e}setInvalid(e,t,i=""){let r=this.#b.get(e);r||(r=/* @__PURE__ */new Map,this.#b.set(e,r)),r.set(t,i),this.#v(e,t,!0)}clearInvalid(e,t){const i=this.#b.get(e);i&&(i.delete(t),0===i.size&&this.#b.delete(e)),this.#v(e,t,!1)}clearRowInvalid(e){const t=this.#b.get(e);if(t){const i=Array.from(t.keys());this.#b.delete(e),i.forEach(t=>this.#v(e,t,!1))}}clearAllInvalid(){const e=Array.from(this.#b.entries());this.#b.clear(),e.forEach(([e,t])=>{t.forEach((t,i)=>this.#v(e,i,!1))})}isCellInvalid(e,t){return this.#b.get(e)?.has(t)??!1}getInvalidMessage(e,t){return this.#b.get(e)?.get(t)}hasInvalidCells(e){const t=this.#b.get(e);return!!t&&t.size>0}getInvalidFields(e){return new Map(this.#b.get(e)??[])}};function ft(e,t,i){const r=e.get(t);return!!r&&!mt(r,i)}function mt(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(typeof e!=typeof t)return!1;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!mt(e[i],t[i]))return!1;return!0}if("object"==typeof e){const i=e,r=t,n=Object.keys(i),o=Object.keys(r);if(n.length!==o.length)return!1;for(const e of n)if(!mt(i[e],r[e]))return!1;return!0}return!1}function wt(e,t,i){e.set(t,structuredClone(i))}function bt(e,t,i){const r=e.get(t);if(!r)return!1;const n=r,o=i;for(const s of Object.keys(n))o[s]=n[s];return!0}var vt=class{baselines=/* @__PURE__ */new Map;baselinesWereCaptured=!1;newRowIds=/* @__PURE__ */new Set;changedRowIds=/* @__PURE__ */new Set;committedDirtyRowIds=/* @__PURE__ */new Set;clear(){this.changedRowIds.clear(),this.committedDirtyRowIds.clear(),this.baselines.clear(),this.newRowIds.clear(),this.baselinesWereCaptured=!1}capture(e,t){const i=this.baselines.size;!function(e,t,i){for(const r of t)try{const t=i(r);null==t||e.has(t)||e.set(t,structuredClone(r))}catch{}}(this.baselines,e,t),this.baselines.size>i&&(this.baselinesWereCaptured=!0)}drainCapturedFlag(){return this.baselinesWereCaptured?(this.baselinesWereCaptured=!1,this.baselines.size):null}isRowDirty(e,t){return ft(this.baselines,e,t)}hasAnyDirty(e){if(this.newRowIds.size>0)return!0;for(const[t]of this.baselines){const i=e(t);if(i&&ft(this.baselines,t,i))return!0}return!1}isCellDirty(e,t,i){return function(e,t,i,r){const n=e.get(t);return!!n&&!mt(s(n,r),s(i,r))}(this.baselines,e,t,i)}getRowDirtyState(e,t){const i=this.newRowIds.has(e);return{isNew:i,isCommittedDirty:!i&&this.committedDirtyRowIds.has(e)&&ft(this.baselines,e,t),hasBaseline:this.baselines.has(e)}}markPristine(e,t){wt(this.baselines,e,t),this.newRowIds.delete(e),this.changedRowIds.delete(e),this.committedDirtyRowIds.delete(e)}rebaselineCell(e,t,i){const r=this.baselines.get(e);r&&d(r,t,i)}markNew(e){this.newRowIds.add(e),this.committedDirtyRowIds.add(e)}markDirty(e){this.changedRowIds.add(e),this.committedDirtyRowIds.add(e)}markAllPristine(e){for(const[t]of this.baselines){const i=e(t);i&&wt(this.baselines,t,i)}this.newRowIds.clear(),this.changedRowIds.clear(),this.committedDirtyRowIds.clear()}getOriginalRow(e){return function(e,t){const i=e.get(t);return i?structuredClone(i):void 0}(this.baselines,e)}hasBaseline(e){return this.baselines.has(e)}getDirtyRows(e){const t=[];for(const[i,r]of this.baselines){const n=e(i);n&&ft(this.baselines,i,n)&&t.push({id:i,original:structuredClone(r),current:n})}for(const i of this.newRowIds){const r=e(i);r&&t.push({id:i,original:void 0,current:r})}return t}getDirtyRowIds(e){const t=[];for(const[i]of this.baselines){const r=e(i);r&&ft(this.baselines,i,r)&&t.push(i)}for(const i of this.newRowIds)t.push(i);return t}revertRow(e,t){const i=bt(this.baselines,e,t);return i&&(this.changedRowIds.delete(e),this.committedDirtyRowIds.delete(e)),i}revertAll(e){for(const[t]of this.baselines){const i=e(t);i&&bt(this.baselines,t,i)}this.changedRowIds.clear(),this.committedDirtyRowIds.clear()}getChangedRows(e){const t=[];for(const i of this.changedRowIds){const r=e(i);r&&t.push(r)}return t}getChangedRowIds(){return Array.from(this.changedRowIds)}isRowChanged(e){return this.changedRowIds.has(e)}},yt='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])';function Ct(e){return e?.closest?.('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')??null}function xt(e){return"string"==typeof e&&("__proto__"!==e&&"constructor"!==e&&"prototype"!==e)}function Rt(e){}function St(e,t){return!1===e.onBeforeEditClose?.(t)}function Et(e,t,i,r,n,o,l,a){if(!r.editable)return;if(o.classList.contains("editing"))return;const{grid:c,isGridMode:u,config:h,editingCells:g,editorValueCallbacks:p}=e;let f;try{f=c.getRowId?.(t)}catch{}const m=f?e=>c.updateRow(f,e,"cascade"):Rt,w=xt(r.field)?s(t,r.field):void 0;o.classList.add("editing"),g.add(`${i}:${n}`);const b=a??o.parentElement;b&&function(e){e.__editingCellCount=(e.__editingCellCount??0)+1,e.setAttribute("data-has-editing","")}(b);let v=!1;const y=n=>{if(v||!u&&!e.isEditSessionActive())return;const o=f?c._getRowEntry(f):void 0,s=o?.row??t,l=o?.index??i;e.commitCellValue(l,r,n,s)},C=()=>{if(v=!0,xt(r.field)){d((f?c._getRowEntry(f):void 0)?.row??t,r.field,w)}},x=document.createElement("div");x.className="tbw-editor-host",o.firstElementChild&&c.__frameworkAdapter?.releaseCell?.(o),o.innerHTML="",o.appendChild(x),x.addEventListener("keydown",t=>{if(!t.defaultPrevented){if("Enter"===t.key){const e=t.target;if(e&&"true"===e.getAttribute?.("aria-expanded")&&e.hasAttribute?.("aria-controls"))return}if("Enter"===t.key){const n=t.target,o=Ct(n);if(o&&o!==n)return;if(u){t.preventDefault();const e=x.querySelector("input,textarea,select");return void(e&&y(gt(e,r,w)))}if(St(h,t))return;t.stopPropagation(),t.preventDefault(),v=!0,e.exitRowEdit(i,!1)}if("Escape"===t.key){if(u)return t.stopPropagation(),void t.preventDefault();if(St(h,t))return;t.stopPropagation(),t.preventDefault(),C(),e.exitRowEdit(i,!0)}}});const R=r,S=R.__editorTemplate,E=function(e,t){if(t.editor)return t.editor;if(t.__editorTemplate)return"template";if(!t.type)return;const i=e.effectiveConfig?.typeDefaults;if(i?.[t.type]?.editor)return i[t.type].editor;const r=e.__frameworkAdapter;if(r?.getTypeDefault){const i=r.getTypeDefault(t.type,e._hostElement);if(i?.editor)return i.editor}}(c,R)??ut(r),_=w,k=`${i}:${r.field}`,T=[];p.set(k,e=>{for(const t of T)t(e)});const M=e=>{T.push(e)};if("template"===E&&S)!function(e,t,i,r,n,o,s,l,a){const d=i.__editorTemplate;if(!d)return;const c=d.cloneNode(!0),u=i.__compiledEditor;u?c.innerHTML=u({row:r,value:n,field:i.field,column:i,commit:o,cancel:s}):c.querySelectorAll("*").forEach(e=>{1===e.childNodes.length&&e.firstChild?.nodeType===Node.TEXT_NODE&&(e.textContent=e.textContent?.replace(/{{\s*value\s*}}/g,null==n?"":String(n)).replace(/{{\s*row\.([a-zA-Z0-9_]+)\s*}}/g,(e,t)=>{if(!xt(t))return"";const i=r[t];return null==i?"":String(i)})||"")});const h=c.querySelector("input,textarea,select");if(h){h instanceof HTMLInputElement&&"checkbox"===h.type?h.checked=!!n:h.value=String(n??"");let t=!1;h.addEventListener("blur",()=>{t||o(gt(h,i,n))}),h.addEventListener("keydown",r=>{const l=r;if("Enter"===l.key){if(St(e.config,l))return;l.stopPropagation(),l.preventDefault(),t=!0,o(gt(h,i,n)),e.exitRowEdit(a,!1)}if("Escape"===l.key){if(St(e.config,l))return;l.stopPropagation(),l.preventDefault(),s(),e.exitRowEdit(a,!0)}}),h instanceof HTMLInputElement&&"checkbox"===h.type&&h.addEventListener("change",()=>o(h.checked)),l||setTimeout(()=>h.focus({preventScroll:!0}),0)}t.appendChild(c)}(e,x,R,t,w,y,C,l,i),M(e=>{if(null!=e&&"object"==typeof e)return;const t=x.querySelector("input,textarea,select");t&&(t instanceof HTMLInputElement&&"checkbox"===t.type?t.checked=!!e:t.value=String(e??""))});else if("string"==typeof E){const e=document.createElement(E);e.value=_,e.addEventListener("change",()=>y(e.value)),M(t=>{e.value=t}),x.appendChild(e),l||queueMicrotask(()=>{x.querySelector(yt)?.focus({preventScroll:!0})})}else if("function"==typeof E){const i=E({row:t,rowId:f??"",value:_,field:r.field,column:r,commit:y,cancel:C,updateRow:m,onValueChange:M,grid:e.grid});"string"==typeof i?(x.innerHTML=i,function(e,t,i,r){const n=e.querySelector("input,textarea,select");n&&(n.addEventListener("blur",()=>{i(gt(n,t,r))}),n instanceof HTMLInputElement&&"checkbox"===n.type?n.addEventListener("change",()=>i(n.checked)):n instanceof HTMLSelectElement&&n.addEventListener("change",()=>i(gt(n,t,r))))}(x,r,y,w),M(e=>{const t=x.querySelector("input,textarea,select");t&&(t instanceof HTMLInputElement&&"checkbox"===t.type?t.checked=!!e:t.value=String(e??""))})):i instanceof Node?(x.appendChild(i),i instanceof HTMLInputElement||i instanceof HTMLSelectElement||i instanceof HTMLTextAreaElement?M(e=>{i instanceof HTMLInputElement&&"checkbox"===i.type?i.checked=!!e:i.value=String(e??"")}):o.setAttribute("data-editor-managed","")):!i&&x.hasChildNodes()&&o.setAttribute("data-editor-managed",""),l||queueMicrotask(()=>{x.querySelector(yt)?.focus({preventScroll:!0})})}else if(E&&"object"==typeof E){const i=document.createElement("div");i.setAttribute("data-external-editor",""),i.setAttribute("data-field",r.field),x.appendChild(i),o.setAttribute("data-editor-managed","");const n={row:t,rowId:f??"",value:_,field:r.field,column:r,commit:y,cancel:C,updateRow:m,onValueChange:M,grid:e.grid};if(E.mount)try{E.mount({placeholder:i,context:n,spec:E})}catch(I){A("TBW080",`External editor mount error for column '${r.field}': ${I}`,e.grid.id)}else c.dispatchEvent(new CustomEvent("mount-external-editor",{detail:{placeholder:i,spec:E,context:n}}))}!function(e,t){const i="string"==typeof t.header?t.header:t.field;if(!i)return;queueMicrotask(()=>{const t=e.querySelector(yt);t&&(t.hasAttribute("aria-label")||t.hasAttribute("aria-labelledby")||t.hasAttribute("title")||t.id&&e.querySelector(`label[for="${CSS.escape(t.id)}"]`)||t.closest("label")||t.setAttribute("aria-label",i))})}(x,r)}var At=class extends Y{static manifest={ownedProperties:[{property:"editable",level:"column",description:'the "editable" column property',isUsed:e=>!0===e||"function"==typeof e},{property:"editor",level:"column",description:'the "editor" column property'},{property:"editorParams",level:"column",description:'the "editorParams" column property'},{property:"nullable",level:"column",description:'the "nullable" column property (allows null values)'}],events:[{type:"cell-edit-committed",description:"Emitted when a cell edit is committed (for plugin-to-plugin coordination)"}],queries:[{type:"isEditing",description:"Returns whether any cell is currently being edited"},{type:"getCellEditableResolver",description:"Returns a predicate (field, row) => boolean resolving per-cell editability (rowEditable gate + column.editable true/false/function), for consumers like clipboard paste"},{type:"commitCellValue",description:"Commits a single cell value coming from a core row mutation (updateRow/updateRows), running the full edit pipeline: cancelable cell-commit (validation/abortion), dirty tracking, history, and cascade. Returns true (applied), false (vetoed), or undefined (not handled)."}]};name="editing";styles="@layer tbw-plugins{tbw-grid{--tbw-editing-bg:var(--tbw-color-selection);--tbw-editing-row-bg:var(--tbw-editing-bg);--tbw-editing-border:var(--tbw-border-input,1px solid var(--tbw-color-border-strong));--tbw-padding-editing-input:var(--tbw-cell-padding-input,2px 6px);--tbw-font-size-editor:inherit;--tbw-editing-row-outline-color:var(--tbw-color-accent);--tbw-editing-row-outline-width:1px}tbw-grid:not(.tbw-grid-mode) .data-grid-row:has(.editing){background:var(--tbw-editing-row-bg);outline:var(--tbw-editing-row-outline-width) solid var(--tbw-editing-row-outline-color);outline-offset:calc(-1 * var(--tbw-editing-row-outline-width))}tbw-grid .data-grid-row>.cell.editing{min-height:max(var(--tbw-row-height), calc(1lh + 2 * var(--tbw-cell-padding-v,.25em) + var(--tbw-border-width,1px)));justify-content:center;align-items:center;padding:0;display:flex;overflow:hidden}tbw-grid .data-grid-row>.cell.editing input:not([type=checkbox]),tbw-grid .data-grid-row>.cell.editing select,tbw-grid .data-grid-row>.cell.editing textarea{border:var(--tbw-editing-border);width:100%;min-width:0;height:100%;padding:var(--tbw-padding-editing-input);font-size:var(--tbw-font-size-editor);flex:auto;align-self:stretch}tbw-grid .tbw-editor-host{display:contents}tbw-grid{--tbw-invalid-bg:light-dark(#fef2f2,#450a0a);--tbw-invalid-border-color:light-dark(#ef4444,#f87171)}tbw-grid .data-grid-row>.cell[data-invalid=true]{background:var(--tbw-invalid-bg);outline:1px solid var(--tbw-invalid-border-color);outline-offset:-1px}}";get defaultConfig(){return{mode:"row",editOn:"click"}}get#y(){return"grid"===this.config.mode}#C(e,t){const i=this.#x.effectiveConfig?.rowEditable;if(i&&!i(t))return!1;const{editable:r}=e;return"function"==typeof r?r(t):!0===r}#R(e){return!0===e.editable||"function"==typeof e.editable}#S=-1;#E;#A;#_=-1;#k=/* @__PURE__ */new Map;#T=/* @__PURE__ */new Set;#M=/* @__PURE__ */new WeakSet;#I=/* @__PURE__ */new Map;#L=!1;#D=-1;#P;#F=!1;#H=!1;#G=!1;#z=null;#O=new vt;#N=/* @__PURE__ */new Set;#q;get#x(){return this.grid}attach(e){super.attach(e);const t=this.disconnectSignal,i=this.#x;this.#P=new pt((e,t,i)=>{this.#$(e,t,i)}),this.#q={grid:i,isGridMode:this.#y,config:this.config,editingCells:this.#T,editorValueCallbacks:this.#I,isEditSessionActive:()=>-1!==this.#S,commitCellValue:(e,t,i,r)=>this.#W(e,t,i,r),exitRowEdit:(e,t)=>this.#B(e,t)},this.#V(),Object.defineProperty(e,"changedRows",{get:()=>this.changedRows,configurable:!0}),Object.defineProperty(e,"changedRowIds",{get:()=>this.changedRowIds,configurable:!0}),Object.defineProperty(e,"_changedRowIdSet",{get:()=>this.#O.changedRowIds,configurable:!0}),e.resetChangedRows=e=>this.resetChangedRows(e),this.#K(t,i),this.#y&&(i._isGridEditMode=!0,this.gridElement.classList.add("tbw-grid-mode"),this.requestRender(),this.#j(t,i))}#K(e,t){if(document.addEventListener("keydown",e=>{if(!this.#y&&"Escape"===e.key&&-1!==this.#S){if(St(this.config,e))return;this.#B(this.#S,!0)}},{capture:!0,signal:e}),document.addEventListener("mousedown",e=>{if(this.#y)return;if(-1===this.#S)return;const i=t.findRenderedRowElement?.(this.#S);if(!i)return;if((e.composedPath&&e.composedPath()||[]).includes(i))return;const r=e.target;if(!r||this.gridElement.contains(r)||!this.grid.containsFocus?.(r)){if(r&&!this.gridElement.contains(r)){const e=t.findRenderedRowElement?.(this.#S);if(e&&function(e,t){if(!e)return!1;const i=t.querySelectorAll('[aria-expanded="true"][aria-controls]');for(let r=0;r<i.length;r++){const n=i[r].getAttribute("aria-controls");if(!n)continue;const o=t.ownerDocument?.getElementById(n);if(o&&o.contains(e))return!0}return!1}(r,e))return}St(this.config,e)||queueMicrotask(()=>{-1!==this.#S&&this.#B(this.#S,!1)})}},{signal:e}),this.config.focusTrap&&this.gridElement.addEventListener("focusout",e=>{if(this.#y)return;if(-1===this.#S)return;const t=e.relatedTarget;t&&this.grid.containsFocus?.(t)||t&&this.gridElement.contains(t)||queueMicrotask(()=>{-1!==this.#S&&this.#U()})},{signal:e}),this.gridElement.addEventListener("cell-change",e=>{const t=e.detail;if("user"===t.source)return;const i=`${t.rowIndex}:${t.field}`,r=this.#I.get(i);r&&r(t.newValue)},{signal:e}),this.config.dirtyTracking){const t=e=>{const t=e.detail?.action;if(!t)return;const i=this.rows[t.rowIndex];if(!i)return;const r=this.#Y(i);if(!r)return;const n=this.#O.isRowDirty(r,i);this.#Z(r,i,n?"modified":"pristine")};this.gridElement.addEventListener("undo",t,{signal:e}),this.gridElement.addEventListener("redo",t,{signal:e}),this.on("row-inserted",e=>{const t=this.#Y(e.row);null!=t&&this.markAsNew(String(t))})}}#j(e,t){this.gridElement.addEventListener("focusin",e=>{const i=e.target;if(i!==this.gridElement&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')){if(this.#H)return i.blur(),void this.gridElement.focus();const e=t._focusRow,r=t._focusCol,n=this.#z;if(!n||n.rowIndex!==e||n.colIndex!==r){const i=t._visibleColumns?.[r],n=t._rows?.[e];if(i?.field&&n){const t=i.field;this.#z={rowIndex:e,colIndex:r,field:t,value:s(n,t)}}}this.#F=!0}},{signal:e}),this.gridElement.addEventListener("focusout",e=>{const t=e.target,i=e.relatedTarget;if(t&&i){if(t.contains(i))return;const e=Ct(i);if(e&&e!==this.gridElement&&this.gridElement.contains(e))return}i&&(this.gridElement.contains(i)||this.grid.containsFocus?.(i))&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')||(this.#F=!1,this.#z=null)},{signal:e}),this.gridElement.addEventListener("keydown",e=>{if("Escape"===e.key&&this.#F){if(St(this.config,e))return void queueMicrotask(()=>{this.#F&&this.#X()});this.#X(),e.preventDefault(),e.stopPropagation()}},{capture:!0,signal:e}),this.gridElement.addEventListener("mousedown",e=>{e.target.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')&&(this.#H=!1)},{signal:e})}detach(){this.#x._isGridEditMode=!1,this.gridElement.classList.remove("tbw-grid-mode"),this.#S=-1,this.#E=void 0,this.#A=void 0,this.#_=-1,this.#k.clear(),this.#O.clear(),this.#T.clear(),this.#I.clear(),this.#F=!1,this.#H=!1,this.#z=null,this.#G=!1,this.#M=/* @__PURE__ */new WeakSet,super.detach()}handleQuery(e){if("isEditing"===e.type)return this.#y||-1!==this.#S;if("getCellEditableResolver"===e.type){const e=this.#x.effectiveConfig?.columns??[],t=/* @__PURE__ */new Map;for(const i of e)t.set(i.field,i);return(e,i)=>{const r=t.get(e);return!!r&&this.#C(r,i)}}return"commitCellValue"===e.type?this.#Q(e.context):void 0}#Q(e){const t=this.#x,i=(t._visibleColumns??[]).find(t=>t.field===e.field)??t._columns?.find(t=>t.field===e.field),r=e.row??(null!=e.rowId?t._getRowEntry(e.rowId)?.row:void 0)??t._rows?.[e.rowIndex];if("sync"===e.source){if(!r||!xt(e.field))return;d(r,e.field,e.newValue),u(r);const t=this.#Y(r);if(t&&this.config.dirtyTracking){this.#O.rebaselineCell(t,e.field,e.newValue);const i=this.#O.isRowDirty(t,r);i||this.#O.changedRowIds.delete(t),this.#Z(t,r,i?"modified":"pristine")}return!0}if(i&&r&&xt(e.field)){if("history"===e.source){d(r,e.field,e.newValue),u(r);const t=this.#Y(r);if(t&&this.config.dirtyTracking){const e=this.#O.isRowDirty(t,r);e||this.#O.changedRowIds.delete(t),this.#Z(t,r,e?"modified":"pristine")}return!0}return this.#W(e.rowIndex,i,e.newValue,r,e.source),s(r,e.field)===e.newValue}}onCellClick(e){if(this.#y)return!1;const t=this.#x,i=this.config.editOn??t.effectiveConfig?.editOn;if(!1===i||"manual"===i)return!1;if("click"!==i&&"dblclick"!==i)return!1;const r="dblclick"===e.originalEvent.type;if("click"===i&&r)return!1;if("dblclick"===i&&!r)return!1;const{rowIndex:n}=e;return!!t._columns?.some(e=>this.#R(e))&&(!!this.#J(t._rows[n])&&(e.originalEvent.stopPropagation(),this.beginBulkEdit(n),!0))}onKeyDown(e){switch(e.key){case"Escape":return this.#ee(e);case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":return this.#te(e);case"Tab":return this.#ie(e);case" ":case"Spacebar":return this.#re(e);case"Enter":return!(e.shiftKey||e.ctrlKey||e.altKey||e.metaKey)&&this.#ne(e);case"F2":return this.#oe(e);default:return!1}}#ee(e){return this.#y&&this.#F?(this.#X(),this.requestAfterRender(),!0):-1!==this.#S&&!this.#y&&(St(this.config,e)||this.#B(this.#S,!0),!0)}#te(e){const t=Ct(e.target),i=!!t&&t!==this.gridElement,r="ArrowUp"===e.key||"ArrowDown"===e.key;return!(this.#y&&!this.#F&&!i)&&(!(!this.#y||!this.#F&&!i||!r)||!(!r||-1===this.#S||this.#y))}#ie(e){return!(-1===this.#S&&!this.#y)&&(e.preventDefault(),this.#G?(this.#B(this.#S,!1),!0):(this.#se(!e.shiftKey),!0))}#re(e){if(-1!==this.#S)return!1;const t=this.#x,i=t._focusRow,r=t._focusCol;if(i<0||r<0)return!1;const n=t._visibleColumns[r],o=t._rows[i];if(!n||!o||"boolean"!==n.type)return!1;if(!this.#C(n,o))return!1;const l=n.field;return!!xt(l)&&(this.#W(i,n,!s(o,l),o),e.preventDefault(),this.requestRender(),!0)}#ne(e){if(this.#y&&!this.#F)return this.#U(),!0;if(this.#y&&this.#F)return this.#le(e);if(-1!==this.#S){const t=e.target;return(!t||"true"!==t.getAttribute?.("aria-expanded")||!t.hasAttribute?.("aria-controls"))&&!!St(this.config,e)}return this.#ae(e)}#le(e){const t=Ct(e.target);if(t&&t!==e.target)return!0;this.#z=null;const i=document.activeElement;return i&&this.gridElement.contains(i)&&(i.blur(),this.gridElement.focus()),this.#F=!1,this.#H=!0,this.requestAfterRender(),!0}#ae(e){const t=this.#x,i=this.config.editOn??t.effectiveConfig?.editOn;if(!1===i||"manual"===i)return!1;const r=t._focusRow,n=t._focusCol;if(r<0)return!1;const o=t._columns?.some(e=>this.#R(e)),l=t._rows[r];if(!o||!this.#J(l))return!1;const a=t._visibleColumns[n]?.field??"",d=a&&l?s(l,a):void 0,c=this.gridElement.querySelector(`[data-row="${r}"][data-col="${n}"]`),u=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,detail:{rowIndex:r,colIndex:n,field:a,value:d,row:l,cellEl:c,trigger:"keyboard",originalEvent:e}});return this.gridElement.dispatchEvent(u),u.defaultPrevented?(e.preventDefault(),!0):(this.beginBulkEdit(r),!0)}#oe(e){if(-1!==this.#S||this.#y)return!1;const t=this.#x;if(!1===(this.config.editOn??t.effectiveConfig?.editOn))return!1;const i=t._focusRow,r=t._focusCol;if(i<0||r<0)return!1;const n=t._visibleColumns[r],o=t._rows[i];return!!(n&&o&&n.field)&&(!!this.#C(n,o)&&(e.preventDefault(),this.beginCellEdit(i,n.field),!0))}#de(e){const t={};for(const i of Array.from(e.attributes)){if(!i.name.startsWith("data-"))continue;const e=i.name.slice(5).replace(/-([a-z])/g,(e,t)=>t.toUpperCase()).trim();e&&(t[e]=i.value)}return t}#ce(){const e=this.#x,t=e._hostElement;if(!t)return;const i=e.effectiveConfig;if(!i)return;const r=Array.from(t.children).filter(e=>"tbw-grid-type"===e.tagName.toLowerCase());if(!r.length)return;const n=e.__frameworkAdapter,o=i.typeDefaults??={};for(let s=0;s<r.length;s++){const e=r[s],t=e.getAttribute("name")?.trim();if(!t)continue;const i=o[t];if(i?.editor)continue;const l=e.querySelector("tbw-grid-column-editor"),a=l??e;let d=n?.canHandle?.(a)?n.createEditor?.(a):void 0;if(!d&&l){const t=this.#de(e),i=j(l.innerHTML);d=e=>i({row:e.row,value:e.value,field:e.field,column:e.column,typeDefault:t})}d&&(o[t]={...i??{},editor:d})}}processColumns(e){const t=this.#x;this.#ce();const i=t.effectiveConfig?.typeDefaults,r=t.__frameworkAdapter,n=!!i||!!r?.getTypeDefault;return e.map(e=>{const o=e.__element;if(o&&!this.#M.has(o)){this.#M.add(o),null==e.editable&&o.hasAttribute("editable")&&(e.editable="false"!==o.getAttribute("editable"));const t=e;if(!t.__editorTemplate){const e=o.querySelector("tbw-grid-column-editor");e&&(t.__editorTemplate=e)}}if(!e.type||!n)return e;let s;if(i?.[e.type]?.editorParams&&(s=i[e.type].editorParams),!s&&r?.getTypeDefault){const i=r.getTypeDefault(e.type,t._hostElement);i?.editorParams&&(s=i.editorParams)}return s?{...e,editorParams:{...s,...e.editorParams}}:e})}processRows(e){const t=this.#x;if(this.config.dirtyTracking&&t.getRowId&&this.#O.capture(e,e=>{try{return t.getRowId?.(e)}catch{return}}),-1===this.#S||this.#y)return e;const i=this.#E,r=this.#A;if(!i||!r)return e;const n=[...e];let o=-1;for(let s=0;s<n.length;s++)if(this.#Y(n[s])===i){o=s;break}return-1===o?(setTimeout(()=>this.cancelActiveRowEdit(),0),n):(n[o]=r,this.#S!==o&&this.#ue(this.#S,o),n)}afterRender(){const e=this.#x;if(-1!==this.#S&&this.#A&&!this.#y&&e._rows[this.#S]!==this.#A){const t=e._rows.indexOf(this.#A);if(-1===t)return void setTimeout(()=>this.cancelActiveRowEdit(),0);this.#ue(this.#S,t)}if(this.#L&&(this.#L=!1,this.#he(e)),-1!==this.#D){const t=this.#D;this.#D=-1,e.animateRow?.(t,"change")}const t=this.#O.drainCapturedFlag();if(null!=t&&this.emit("baselines-captured",{count:t}),!this.#y&&0!==this.#T.size)for(const i of this.#T){const[t,r]=i.split(":"),n=parseInt(t,10),o=parseInt(r,10),s=this.#ge(n,o);if(!s||s.classList.contains("editing"))continue;const l=e._rows[n],a=e._visibleColumns[o];l&&a&&this.#pe(l,n,a,o,s,!0)}}afterCellRender(e){const{row:t,rowIndex:i,column:r,colIndex:n,cellElement:o}=e,l=this.#C(r,t);if(l)o.removeAttribute("aria-readonly");else if(o.setAttribute("aria-readonly","true"),this.#y&&o.classList.contains("editing")){o.classList.remove("editing");const e=s(t,r.field);o.textContent=null==e?"":String(e)}this.#y&&l&&(o.classList.contains("editing")||this.#pe(t,i,r,n,o,!0,e.rowElement))}afterRowRender(e){if(!this.config.dirtyTracking)return;const t=this.#x.getRowId?.(e.row);if(!t)return;const{isNew:i,isCommittedDirty:r,hasBaseline:n}=this.#O.getRowDirtyState(t,e.row),o=e.rowElement;if(o.classList.toggle("tbw-row-dirty",r),o.classList.toggle("tbw-row-new",i),n){const i=o.querySelectorAll(".cell[data-field]");for(let r=0;r<i.length;r++){const n=i[r],o=n.getAttribute("data-field");o&&n.classList.toggle("tbw-cell-dirty",this.#O.isCellDirty(t,e.row,o))}}else{const e=o.querySelectorAll(".tbw-cell-dirty");for(let t=0;t<e.length;t++)e[t].classList.remove("tbw-cell-dirty")}}onScrollRender(){this.afterRender()}get changedRows(){return this.#O.getChangedRows(e=>this.grid.getRow(e))}get changedRowIds(){return this.#O.getChangedRowIds()}get activeEditRow(){return this.#S}get activeEditCol(){return this.#_}isRowEditing(e){return this.#S===e}isCellEditing(e,t){return this.#T.has(`${e}:${t}`)}isRowChanged(e){const t=this.#x,i=t._rows[e];if(!i)return!1;try{const e=t.getRowId?.(i);return!!e&&this.#O.isRowChanged(e)}catch{return!1}}isRowChangedById(e){return this.#O.isRowChanged(e)}isDirty(e){if(!this.config.dirtyTracking)return!1;if(this.#O.newRowIds.has(e))return!0;const t=this.grid.getRow(e);return!!t&&this.#O.isRowDirty(e,t)}isPristine(e){return!this.isDirty(e)}get dirty(){if(!this.config.dirtyTracking)return!1;const e=this.#x;return this.#O.hasAnyDirty(t=>e._getRowEntry(t)?.row)}get pristine(){return!this.dirty}markAsPristine(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&(this.#O.markPristine(e,t),this.emit("dirty-change",{rowId:e,row:t,original:t,type:"pristine"}))}markAsNew(e){if(!this.config.dirtyTracking)return;this.#O.markNew(e);const t=this.grid.getRow(e);this.emit("dirty-change",{rowId:e,row:t,original:void 0,type:"new"})}markAsDirty(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&(this.#O.markDirty(e),this.#Z(e,t,"modified"))}markAllPristine(){if(!this.config.dirtyTracking)return;const e=this.#x;this.#O.markAllPristine(t=>e._getRowEntry(t)?.row)}getOriginalRow(e){if(this.config.dirtyTracking)return this.#O.getOriginalRow(e)}hasBaseline(e){return!!this.config.dirtyTracking&&this.#O.hasBaseline(e)}getDirtyRows(){if(!this.config.dirtyTracking)return[];const e=this.#x;return this.#O.getDirtyRows(t=>e._getRowEntry(t)?.row)}get dirtyRowIds(){if(!this.config.dirtyTracking)return[];const e=this.#x;return this.#O.getDirtyRowIds(t=>e._getRowEntry(t)?.row)}revertRow(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&this.#O.revertRow(e,t)&&(this.#Z(e,t,"reverted"),this.requestRender())}revertAll(){if(!this.config.dirtyTracking)return;const e=this.#x;this.#O.revertAll(t=>e._getRowEntry(t)?.row),this.requestRender()}setInvalid(e,t,i=""){this.#P.setInvalid(e,t,i)}clearInvalid(e,t){this.#P.clearInvalid(e,t)}clearRowInvalid(e){this.#P.clearRowInvalid(e)}clearAllInvalid(){this.#P.clearAllInvalid()}isCellInvalid(e,t){return this.#P.isCellInvalid(e,t)}getInvalidMessage(e,t){return this.#P.getInvalidMessage(e,t)}hasInvalidCells(e){return this.#P.hasInvalidCells(e)}getInvalidFields(e){return this.#P.getInvalidFields(e)}resetChangedRows(e){const t=this.changedRows,i=this.changedRowIds;this.#O.changedRowIds.clear(),this.#O.committedDirtyRowIds.clear(),this.#V(),e||this.emit("changed-rows-reset",{rows:t,ids:i}),this.#x._rowPool?.forEach(e=>e.classList.remove("changed"))}beginCellEdit(e,t){const i=this.#x,r=i._visibleColumns.findIndex(e=>e.field===t);if(-1===r)return;const n=i._visibleColumns[r],o=i._rows[e];if(!n||!o||!this.#C(n,o))return;const s=this.#ge(e,r);s&&(this.#G=!0,this.#fe(e,r,s))}beginBulkEdit(e){const t=this.#x;if(!1===(this.config.editOn??t.effectiveConfig?.editOn))return;if(!t._columns?.some(e=>this.#R(e)))return;const i=t.findRenderedRowElement?.(e);if(!i)return;const r=t._rows[e];this.#J(r)&&(this.#G=!1,this.#me(e,r),Array.from(i.children).forEach((i,n)=>{const o=t._visibleColumns[n];if(o&&this.#C(o,r)){const t=i;t.classList.contains("editing")||this.#pe(r,e,o,n,t,!0)}}),setTimeout(()=>{let e=i.querySelector(`.cell[data-col="${t._focusCol}"]`);if(e?.classList.contains("editing")||(e=i.querySelector(".cell.editing")),e?.classList.contains("editing")){const t=e.querySelector(yt);try{t?.focus({preventScroll:!0})}catch{}}},0))}commitActiveRowEdit(){-1!==this.#S&&this.#B(this.#S,!1)}cancelActiveRowEdit(){-1!==this.#S&&this.#B(this.#S,!0)}#Y(e){if(e)try{return this.#x.getRowId?.(e)}catch{return}}#ge(e,t){return(this.#x.findRenderedRowElement?.(e))?.querySelector(`.cell[data-col="${t}"]`)??null}#J(e){if(!e)return!0;const t=this.#x.effectiveConfig?.rowEditable;return!t||!1!==t(e)}#Z(e,t,i){this.emit("dirty-change",{rowId:e,row:t,original:this.#O.getOriginalRow(e),type:i})}#X(){this.#we();const e=document.activeElement;e&&this.gridElement.contains(e)&&(e.blur(),this.gridElement.focus()),this.#F=!1,this.#H=!0}#be(e,t,i){i&&(Object.keys(i).forEach(e=>{t[e]=i[e]}),e&&(this.#O.changedRowIds.delete(e),this.#O.committedDirtyRowIds.delete(e),this.clearRowInvalid(e)))}#$(e,t,i){const r=this.#x,n=r._visibleColumns?.findIndex(e=>e.field===t);if(-1===n||void 0===n)return;const o=r._rows?.findIndex(t=>this.#Y(t)===e);if(-1===o||void 0===o)return;const s=this.#ge(o,n);if(s)if(i){s.setAttribute("data-invalid","true"),s.setAttribute("aria-invalid","true");const i=this.#P.getInvalidMessage(e,t);i&&(s.setAttribute("title",i),s.removeAttribute(ze.TRUNCATED))}else s.removeAttribute("data-invalid"),s.removeAttribute("aria-invalid"),s.removeAttribute("title")}#ue(e,t){this.#S=t;const i=/* @__PURE__ */new Set,r=`${e}:`;for(const s of this.#T)s.startsWith(r)?i.add(`${t}:${s.substring(r.length)}`):i.add(s);this.#T.clear();for(const s of i)this.#T.add(s);const n=this.#k.get(e);void 0!==n&&(this.#k.delete(e),this.#k.set(t,n));const o=[];for(const[s,l]of this.#I)s.startsWith(r)&&(o.push([`${t}:${s.substring(r.length)}`,l]),this.#I.delete(s));for(const[s,l]of o)this.#I.set(s,l);this.#V()}#fe(e,t,i){const r=this.#x,n=r._rows[e],o=r._visibleColumns[t];n&&o&&this.#C(o,n)&&(i.classList.contains("editing")||(this.#S!==e&&this.#me(e,n),this.#_=t,this.#pe(n,e,o,t,i,!1)))}#we(){const e=this.#z;if(!e)return;const t=this.#x._rows?.[e.rowIndex];t&&d(t,e.field,e.value);const i=`${e.rowIndex}:${e.field}`,r=this.#I.get(i);if(r&&r(e.value),this.emit("cell-cancel",{rowIndex:e.rowIndex,colIndex:e.colIndex,field:e.field,previousValue:e.value}),t){const e=this.#Y(t);e&&(this.config.dirtyTracking?this.#O.isRowDirty(e,t)||(this.#O.changedRowIds.delete(e),this.#Z(e,t,"reverted")):this.#O.changedRowIds.delete(e))}this.requestRender(),this.#z=null}#U(){const e=this.#x,t=e._focusRow,i=e._focusCol;if(t<0||i<0)return;const r=this.#ge(t,i);if(r?.classList.contains("editing")){const e=r.querySelector(yt);e&&(this.#H=!1,e.focus(),this.#F=!0,e instanceof HTMLInputElement&&("text"===e.type||"number"===e.type)&&e.select())}}#se(e){const t=this.#x,i=t._rows,r=this.#y?t._focusRow:this.#S,n=i[r],o=t._visibleColumns.map((e,t)=>n&&this.#C(e,n)?t:-1).filter(e=>e>=0);if(0===o.length)return;const s=o.indexOf(t._focusCol)+(e?1:-1);if(s>=0&&s<o.length){t._focusCol=o[s];const e=this.#ge(r,o[s]);return e?.classList.contains("editing")&&e.querySelector(yt)?.focus({preventScroll:!0}),void at(t,{forceHorizontalScroll:!0})}const l=r+(e?1:-1);if(l>=0&&l<i.length){const n=i[l],o=t._visibleColumns.map((e,t)=>n&&this.#C(e,n)?t:-1).filter(e=>e>=0);if(0===o.length)return;this.#y?(t._focusRow=l,t._focusCol=e?o[0]:o[o.length-1],at(t,{forceHorizontalScroll:!0}),this.requestAfterRender(),setTimeout(()=>{const e=this.#ge(l,t._focusCol);e?.classList.contains("editing")&&e.querySelector(yt)?.focus({preventScroll:!0})},0)):(this.#B(r,!1),t._focusRow=l,t._focusCol=e?o[0]:o[o.length-1],this.beginBulkEdit(l),at(t,{forceHorizontalScroll:!0}))}}#V(){const e=this.#x;e._activeEditRows=this.#S,e._rowEditSnapshots=this.#k}#me(e,t){this.#S!==e&&(-1!==this.#S&&this.#B(this.#S,!1),this.#k.set(e,{...t}),this.#S=e,this.#A=t,this.#E=this.#Y(t),this.#V(),this.#y||(this.broadcast("edit-open",{rowIndex:e,rowId:this.#E??"",row:t}),qe(this.gridElement,$e(this.gridElement,"editingStarted",e))))}#B(e,t){if(this.#S!==e)return;const i=this.#x,r=this.#k.get(e),n=i.findRenderedRowElement?.(e),{rowId:o,current:s}=this.#ve(e);!t&&n&&s&&this.#ye(n,e,s),t||this.#y||!s||this.emit("before-edit-close",{rowIndex:e,rowId:o??"",row:s}),t&&s?this.#be(o,s,r):!t&&s&&this.#Ce(e,o,s,r),this.#xe(e),this.#L=!0,n?this.#Re(n,i):(this.#he(i),this.#L=!1),!this.#y&&s&&(this.broadcast("edit-close",{rowIndex:e,rowId:o??"",row:s,reverted:t}),t||qe(this.gridElement,$e(this.gridElement,"editingCommitted",e)))}#ve(e){const t=this.#x;let i=this.#E;const r=(i?t._getRowEntry(i):void 0)?.row??this.#A??t._rows[e];return!i&&r&&(i=this.#Y(r)),{rowId:i,current:r}}#ye(e,t,i){const r=this.#x;e.querySelectorAll(".cell.editing").forEach(e=>{const n=Number(e.getAttribute("data-col"));if(isNaN(n))return;const o=r._visibleColumns[n];if(!o)return;if(e.hasAttribute("data-editor-managed"))return;const l=e.querySelector("input,textarea,select");if(!l)return;const a=o.field,d=s(i,a),c=gt(l,o,d);d!==c&&this.#W(t,o,c,i)})}#Ce(e,t,i,r){const n=function(e,t){if(!e)return!1;const i=e,r=t,n=/* @__PURE__ */new Set([...Object.keys(i),...Object.keys(r)]);for(const o of n)if(i[o]!==r[o])return!0;return!1}(r,i),o=t?this.#O.changedRowIds.has(t):n;this.emitCancelable("row-commit",{rowIndex:e,rowId:t??"",row:i,oldValue:r,newValue:i,changed:o,changedRows:this.changedRows,changedRowIds:this.changedRowIds})?r&&this.#be(t,i,r):(t&&this.config.dirtyTracking&&(this.#O.isRowDirty(t,i)?this.#O.committedDirtyRowIds.add(t):this.#O.committedDirtyRowIds.delete(t)),n&&this.isAnimationEnabled&&(this.#D=e))}#xe(e){this.#k.delete(e),this.#S=-1,this.#E=void 0,this.#A=void 0,this.#_=-1,this.#G=!1,this.#V();for(const t of this.#T)t.startsWith(`${e}:`)&&this.#T.delete(t);for(const t of this.#I.keys())t.startsWith(`${e}:`)&&this.#I.delete(t)}#Re(e,t){const i=t.__frameworkAdapter,r=e.querySelectorAll(".cell.editing");i?.releaseCell&&r.forEach(e=>{i.releaseCell(e)}),r.forEach(e=>{e.classList.remove("editing"),function(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing")}(e.parentElement)}),t.refreshVirtualWindow(!0)}#W(e,t,i,r,n="user"){const o=t.field;if(!xt(o))return;const l=s(r,o);if(l===i)return;const a=this.#x,c=this.#Y(r),h=!c||!this.#O.changedRowIds.has(c),g=c?e=>this.grid.updateRow(c,e,"cascade"):Rt;let p=!1;const f=c?e=>{p=!0,this.setInvalid(c,o,e??"")}:()=>{},m=`${c??e}\0${o}`;if(this.#N.has(m))return;let w=!1;this.#N.add(m);try{w=this.emitCancelable("cell-commit",{row:r,rowId:c??"",field:o,oldValue:l,value:i,source:n,rowIndex:e,changedRows:this.changedRows,changedRowIds:this.changedRowIds,firstTimeForRow:h,updateRow:g,setInvalid:f})}finally{this.#N.delete(m)}if(w)return;if(c&&!p&&this.isCellInvalid(c,o)&&this.clearInvalid(c,o),d(r,o,i),u(r),c&&this.#O.changedRowIds.add(c),this.#V(),this.config.dirtyTracking&&c){const e=this.#O.isRowDirty(c,r);this.#Z(c,r,e?"modified":"pristine")}this.emitPluginEvent("cell-edit-committed",{rowIndex:e,field:o,oldValue:l,newValue:i});const b=a.findRenderedRowElement?.(e);b&&b.classList.add("changed")}#pe(e,t,i,r,n,o,s){Et(this.#q,e,t,i,r,n,o,s)}#he(e){queueMicrotask(()=>{try{const t=e._focusRow,i=e._focusCol,r=e.findRenderedRowElement?.(t);if(r){Array.from(e._bodyEl.querySelectorAll(".cell-focus")).forEach(e=>e.classList.remove("cell-focus"));const n=r.querySelector(`.cell[data-row="${t}"][data-col="${i}"]`);n&&(n.classList.add("cell-focus"),n.setAttribute("aria-selected","true"),n.hasAttribute("tabindex")||n.setAttribute("tabindex","-1"),n.focus({preventScroll:!0}))}}catch{}})}};function _t(e,t,i,r={}){const n=r.delimiter??",",o=r.newline??"\n",s={delimiter:n,newline:o,quoting:r.quoteStrings??1?"auto":"never",escapeFormulas:r.escapeFormulas},l=[],a=r.bom?"\ufeff":"";if(!1!==i.includeHeaders){const e=t.map(e=>{const t=e.header||e.field;return J(i.processHeader?i.processHeader(t,e.field):t,s)});l.push(e.join(n))}for(const d of e){const e=t.map(e=>{let t=c(d,e);return i.processCell&&(t=i.processCell(t,e.field,d)),J(t,s)});l.push(e.join(n))}return a+l.join(o)}function kt(e,t){const i=URL.createObjectURL(e),r=document.createElement("a");r.href=i,r.download=t,r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(i)}function Tt(e){return JSON.stringify(Mt(e))}function Mt(e){if(null==e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(Mt);const t={};for(const i of Object.keys(e).sort())t[i]=Mt(e[i]);return t}we("editing",e=>new At(!0===e?{editOn:"dblclick"}:"click"===e||"dblclick"===e||"manual"===e?{editOn:e}:e??void 0));var It=class{#Se=/* @__PURE__ */new Map;#Ee=0;register(e){const t=Tt(e),i=this.#Se.get(t);if(i)return i.id;this.#Ee++;const r=`s${this.#Ee}`;return this.#Se.set(t,{id:r,style:e}),r}getStyleId(e){return this.#Se.get(Tt(e))?.id}get size(){return this.#Se.size}toXml(){if(0===this.#Se.size)return"";let e="\n<Styles>";for(const{id:t,style:i}of this.#Se.values())e+=Lt(t,i);return e+="\n</Styles>",e}};function Lt(e,t){let i=`\n<Style ss:ID="${e}">`;if(t.font&&(i+="<Font",t.font.name&&(i+=` ss:FontName="${t.font.name}"`),t.font.size&&(i+=` ss:Size="${t.font.size}"`),t.font.bold&&(i+=' ss:Bold="1"'),t.font.italic&&(i+=' ss:Italic="1"'),t.font.color&&(i+=` ss:Color="${t.font.color}"`),i+="/>"),t.fill){const e=t.fill.pattern??"Solid";i+=`<Interior ss:Color="${t.fill.color}" ss:Pattern="${e}"/>`}return t.numberFormat&&(i+=`<NumberFormat ss:Format="${t.numberFormat}"/>`),t.alignment&&(i+="<Alignment",t.alignment.horizontal&&(i+=` ss:Horizontal="${t.alignment.horizontal}"`),t.alignment.vertical&&(i+=` ss:Vertical="${t.alignment.vertical}"`),t.alignment.wrapText&&(i+=' ss:WrapText="1"'),i+="/>"),t.borders&&(i+="<Borders>",t.borders.top&&(i+=Dt("Top",t.borders.top)),t.borders.bottom&&(i+=Dt("Bottom",t.borders.bottom)),t.borders.left&&(i+=Dt("Left",t.borders.left)),t.borders.right&&(i+=Dt("Right",t.borders.right)),i+="</Borders>"),i+="</Style>",i}function Dt(e,t){let i=`<Border ss:Position="${e}" ss:LineStyle="Continuous" ss:Weight="${function(e){switch(e){case"Thin":return 1;case"Medium":return 2;case"Thick":return 3}}(t.style)}"`;return t.color&&(i+=` ss:Color="${t.color}"`),i+="/>",i}function Pt(e,t,i,r,n){if(t.cellStyle){const o=t.cellStyle(i,r,n);if(o)return e.register(o)}const o=t.columnStyles?.[r];return o?e.getStyleId(o):t.defaultStyle?e.getStyleId(t.defaultStyle):void 0}function Ft(e,t){const i=Math.min(t.length,50);let r=(e.header??e.field).length;const n=l(e.field);for(let o=0;o<i;o++){const e=n(t[o]),i=null==e?0:String(e).length;i>r&&(r=i)}return r+2}function Ht(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function Gt(e){return null==e?{type:"String",displayValue:""}:"number"!=typeof e||isNaN(e)?e instanceof Date?{type:"DateTime",displayValue:e.toISOString()}:{type:"String",displayValue:Ht(String(e))}:{type:"Number",displayValue:String(e)}}function zt(e,t,i){const r=i.excelStyles,n=r?function(e){const t=new It;if(e.headerStyle&&t.register(e.headerStyle),e.groupHeaderStyle&&t.register(e.groupHeaderStyle),e.defaultStyle&&t.register(e.defaultStyle),e.columnStyles)for(const i of Object.values(e.columnStyles))t.register(i);return t}(r):void 0;let o='<?xml version="1.0" encoding="UTF-8"?>\n<?mso-application progid="Excel.Sheet"?>\n<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"\n xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">';n&&r&&(o+=function(e,t,i,r){if(t.cellStyle)for(const n of i)for(const i of r){const r=t.cellStyle(c(n,i),i.field,n);r&&e.register(r)}return e.toXml()}(n,r,e,t)),o+='\n<Worksheet ss:Name="Sheet1">\n<Table>',r&&(o+=function(e,t,i){const r=i.columnWidths,n=i.autoFitColumns;if(!r&&!n)return"";let o="";for(const s of e){let e=r?.[s.field];null==e&&n&&(e=Ft(s,t)),o+=null!=e?`\n<Column ss:Width="${7*e}"/>`:"\n<Column/>"}return o}(t,e,r));const s=r?.headerStyle&&n?n.getStyleId(r.headerStyle):void 0,l=r?.groupHeaderStyle&&n?n.getStyleId(r.groupHeaderStyle):s;return!1!==i.includeHeaders&&(o+=function(e,t){if(!e.headerRows?.length)return"";const i=t?` ss:StyleID="${t}"`:"";let r="";for(const n of e.headerRows){r+="\n<Row>";for(const e of n.cells){const t=Math.max(1,0|e.span);r+=`<Cell${i}${t>1?` ss:MergeAcross="${t-1}"`:""}><Data ss:Type="String">${Ht(e.label??"")}</Data></Cell>`}r+="</Row>"}return r}(i,l),o+=function(e,t,i){const r=i?` ss:StyleID="${i}"`:"";let n="\n<Row>";for(const o of e){const e=o.header||o.field;n+=`<Cell${r}><Data ss:Type="String">${Ht(t.processHeader?t.processHeader(e,o.field):e)}</Data></Cell>`}return n+"</Row>"}(t,i,s)),o+=function(e,t,i,r,n){let o="";for(const s of e){o+="\n<Row>";for(const e of t){let t=c(s,e);i.processCell&&(t=i.processCell(t,e.field,s));const{type:l,displayValue:a}=Gt(t),d=r&&n?Pt(r,n,t,e.field,s):void 0;o+=`<Cell${d?` ss:StyleID="${d}"`:""}><Data ss:Type="${l}">${a}</Data></Cell>`}o+="</Row>"}return o}(e,t,i,n,r),o+="\n</Table>\n</Worksheet>\n</Workbook>",o}var Ot=class extends Y{static manifest={queries:[{type:"export:csv",description:"Triggers a CSV export"}]};name="export";get defaultConfig(){return{fileName:"export",includeHeaders:!0,onlyVisible:!0,onlySelected:!1}}isExportingFlag=!1;lastExportInfo=null;handleQuery(e){if("export:csv"===e.type)return this.exportCsv(),!0}resolveExportData(e,t){const i=this.config,r={format:e,fileName:t?.fileName??i.fileName??"export",includeHeaders:t?.includeHeaders??i.includeHeaders,processCell:t?.processCell,processHeader:t?.processHeader,processHeaderRow:t?.processHeaderRow,mode:t?.mode??"raw",columns:t?.columns,rowIndices:t?.rowIndices,excelStyles:t?.excelStyles,fileExtension:t?.fileExtension,headerRows:t?.headerRows},n=Z(this.columns,t?.columns,i.onlyVisible);let o;if(t?.rowIndices)o=X(this.rows,t.rowIndices);else if(i.onlySelected){const e=this.getSelectionState();o=e?.selected?.size?X(this.rows,[...e.selected]):[...this.rows]}else o=[...this.rows];if(!1===r.includeHeaders)r.headerRows=void 0;else{const e=r.headerRows??this.#Ae(n);r.headerRows=this.#_e(e,n,r.processHeaderRow)}return{columns:n,rows:o,fullParams:r}}#Ae(e){if(0===e.length)return[];const t=this.grid;if(!t?.query)return[];const i=t.query("collectHeaderRows",{columns:e});if(!i||0===i.length)return[];const r=[];for(const n of i)if(n)if(Array.isArray(n))for(const e of n)e&&Array.isArray(e.cells)&&e.cells.length>0&&r.push(e);else Array.isArray(n.cells)&&n.cells.length>0&&r.push(n);return r}#_e(e,t,i){if(!e||0===e.length)return;const r=t.length,n=[];for(let o=0;o<e.length;o++){const t=e[o];if(!t||!Array.isArray(t.cells)||0===t.cells.length)continue;const s=[];let l=!1,a=0,d=!1;for(const e of t.cells){const t=Math.max(1,0|e.span);if(a+t>r){d=!0;break}a+=t;const n=i?i(e,o):e;null===n?s.push({label:"",span:t}):(s.push({...n,span:t}),""!==(n.label??"")&&(l=!0))}d||(a<r&&s.push({label:"",span:r-a}),l&&n.push({cells:s}))}return n.length>0?n:void 0}resolveCellOutput(e,t,i,r,n){let o=e;if("formatted"===r){const r=this.#ke(t);if(r)try{const t=r(e,i);o=null==t?"":String(t)}catch{o=null==e?"":String(e)}else o="date"===t.type?Ve(e):"boolean"===t.type?!!e:e}return n&&(o=n(o,t.field,i)),o}performExport(e,t){const{columns:i,rows:r,fullParams:n}=this.resolveExportData(e,t);this.isExportingFlag=!0;let o=n.fileName??"export";const s=this.#Te(i);try{switch(e){case"csv":{const e=_t(this.#Me(r,i,n),s,{...n,processCell:void 0},{bom:!0});o=o.endsWith(".csv")?o:`${o}.csv`,function(e,t){kt(new Blob([e],{type:"text/csv;charset=utf-8;"}),t)}(e,o);break}case"excel":{const e=zt(this.#Me(r,i,n),s,{...n,processCell:void 0}),t=n.fileExtension??".xls",l=t.startsWith(".")?t:`.${t}`;o=o.endsWith(l)?o:`${o}${l}`,function(e,t){kt(new Blob([e],{type:"application/vnd.ms-excel;charset=utf-8;"}),t)}(e,o);break}case"json":{const e=this.#Me(r,i,n),t=n.headerRows&&n.headerRows.length>0?{headerRows:n.headerRows,rows:e}:e,s=JSON.stringify(t,null,2);o=o.endsWith(".json")?o:`${o}.json`;kt(new Blob([s],{type:"application/json"}),o);break}}this.lastExportInfo={format:e,timestamp:/* @__PURE__ */new Date},this.emit("export-complete",{format:e,fileName:o,rowCount:r.length,columnCount:i.length})}finally{this.isExportingFlag=!1}}#Me(e,t,i){const r=i.mode??"raw";return e.map(e=>{const n={};for(const o of t){const t=c(e,o);n[o.field]=this.resolveCellOutput(t,o,e,r,i.processCell)}return n})}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}export(e){const{columns:t,rows:i,fullParams:r}=this.resolveExportData("json",e);return this.#Me(i,t,r)}getResolvedColumns(e){return Z(this.columns,e?.columns,this.config.onlyVisible)}formatCsv(e,t,i){const{columns:r,fullParams:n}=this.resolveExportData("csv",t);return _t(e,this.#Te(r),n,i)}formatExcel(e,t){const{columns:i,fullParams:r}=this.resolveExportData("excel",t);return zt(e,this.#Te(i),r)}#Te(e){return e.map(e=>e.valueAccessor?{...e,valueAccessor:void 0}:e)}#ke(e){if(e.format)return e.format;if(!e.type)return;const t=this.grid,i=t?.__frameworkAdapter;return i?.getTypeDefault?i.getTypeDefault(e.type,t?._hostElement)?.format:void 0}exportCsv(e){this.performExport("csv",e)}exportExcel(e){this.performExport("excel",e)}exportJson(e){this.performExport("json",e)}isExporting(){return this.isExportingFlag}getLastExport(){return this.lastExportInfo}};we("export",e=>new Ot("boolean"==typeof e?{}:e??{}));var Nt="(Blank)";function qt(e){return null==e||""===e||"number"==typeof e&&isNaN(e)}function $t(e){if("number"==typeof e)return e;if(e instanceof Date)return e.getTime();const t=Number(e);return isNaN(t)?new Date(e).getTime():t}function Wt(e,t,i){const r=e.field,n=l(r),o=i?e=>i(n(e),e):n;return function(e,t){if("blank"===e.operator)return e=>{const i=t(e);return null==i||""===i||"number"==typeof i&&isNaN(i)};if("notBlank"===e.operator)return e=>{const i=t(e);return null!=i&&""!==i&&!("number"==typeof i&&isNaN(i))}}(e,o)??function(e,t,i){const r=e.operator;if("in"!==r&&"notIn"!==r)return;const n="notIn"===r;if(!Array.isArray(e.value))return n?()=>!0:()=>!1;const o=new Set(e.value);return i?e=>{const r=i(t(e),e),s=Array.isArray(r)?r:null!=r?[r]:[],l=0===s.length?o.has(Nt):s.some(e=>o.has(e));return n?!l:l}:e=>{const i=t(e),r=null==i||""===i?o.has(Nt):o.has(i);return n?!r:r}}(e,n,i)??function(e,t,i,r){const n=e.operator,o="number"===e.type&&r,s=o&&a(t)?t:null;if("greaterThan"===n){const t=$t(e.value);return s?e=>{const i=e[s];return!qt(i)&&i>t}:o?e=>{const r=i(e);return!qt(r)&&r>t}:e=>{const r=i(e);if(qt(r))return!1;const n=$t(r);return!isNaN(n)&&n>t}}if("greaterThanOrEqual"===n){const t=$t(e.value);return s?e=>{const i=e[s];return!qt(i)&&i>=t}:o?e=>{const r=i(e);return!qt(r)&&r>=t}:e=>{const r=i(e);if(qt(r))return!1;const n=$t(r);return!isNaN(n)&&n>=t}}if("lessThan"===n){const t=$t(e.value);return s?e=>{const i=e[s];return!qt(i)&&i<t}:o?e=>{const r=i(e);return!qt(r)&&r<t}:e=>{const r=i(e);if(qt(r))return!1;const n=$t(r);return!isNaN(n)&&n<t}}if("lessThanOrEqual"===n){const t=$t(e.value);return s?e=>{const i=e[s];return!qt(i)&&i<=t}:o?e=>{const r=i(e);return!qt(r)&&r<=t}:e=>{const r=i(e);if(qt(r))return!1;const n=$t(r);return!isNaN(n)&&n<=t}}if("between"===n){const t=$t(e.value),r=$t(e.valueTo);return s?e=>{const i=e[s];if(qt(i))return!1;return i>=t&&i<=r}:o?e=>{const n=i(e);if(qt(n))return!1;return n>=t&&n<=r}:e=>{const n=i(e);if(qt(n))return!1;const o=$t(n);return!isNaN(o)&&o>=t&&o<=r}}}(e,r,o,void 0===i)??function(e,t,i){const r=e.operator,n=t?String(e.value):String(e.value).toLowerCase();if("contains"===r)return t?e=>{const t=i(e);return null!=t&&String(t).includes(n)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().includes(n)};if("notContains"===r)return t?e=>{const t=i(e);return null!=t&&!String(t).includes(n)}:e=>{const t=i(e);return null!=t&&!String(t).toLowerCase().includes(n)};if("equals"===r)return t?e=>{const t=i(e);return null!=t&&String(t)===n}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase()===n};if("notEquals"===r)return t?e=>{const t=i(e);return null!=t&&String(t)!==n}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase()!==n};if("startsWith"===r)return t?e=>{const t=i(e);return null!=t&&String(t).startsWith(n)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().startsWith(n)};if("endsWith"===r)return t?e=>{const t=i(e);return null!=t&&String(t).endsWith(n)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().endsWith(n)}}(e,t,o)??(()=>!0)}function Bt(e,t,i){const r=/* @__PURE__ */new Set;let n=!1;const o=l(t);for(const s of e){const e=o(s);if(i){const t=i(e,s);if(Array.isArray(t)){0===t.length&&(n=!0);for(const e of t)null!=e&&r.add(e)}else null!=t?r.add(t):n=!0}else null!=e&&""!==e?r.add(e):n=!0}return n&&r.add(Nt),[...r].sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:String(e).localeCompare(String(t)))}var Vt="__tbw_expander";function Kt(e){return e.field===Vt}function jt(e){return!0===e.utility}function Ut(e){return e?e.toISOString().split("T")[0]:""}function Yt(e){return e?"string"==typeof e?e:"number"==typeof e?Ut(new Date(e)):"":""}function Zt(e,t,i,r,n,o){const{field:s,column:l}=t,a=function(e){if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-filter-item-height");if(t&&t.trim()){const e=parseFloat(t);if(!isNaN(e)&&e>0)return e}}return 28}(e),d=e=>{if(null==e)return"(Blank)";if(l.format&&!l.filterValue){const t=l.format(e,void 0);if(t)return t}return String(e)};i=i.slice().sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:d(e).localeCompare(d(t)));const c=document.createElement("div");c.className="tbw-filter-search";const u=document.createElement("input");u.type="text",u.placeholder=t.t("filter.search","Search..."),u.className="tbw-filter-search-input",u.value=o.get(s)??"",c.appendChild(u),e.appendChild(c);const h=document.createElement("div");h.className="tbw-filter-actions";const g=document.createElement("label");g.className="tbw-filter-value-item",g.style.padding="0",g.style.margin="0";const p=document.createElement("input");p.type="checkbox",p.className="tbw-filter-checkbox";const f=document.createElement("span");f.textContent=t.t("filter.selectAll","Select All"),g.appendChild(p),g.appendChild(f),h.appendChild(g);const m=/* @__PURE__ */new Map;i.forEach(e=>{const t=null==e?"__null__":String(e);m.set(t,!r.has(e))});const w=()=>{const e=[...m.values()],t=e.every(e=>e),i=e.every(e=>!e);p.checked=t,p.indeterminate=!t&&!i};p.addEventListener("change",()=>{const e=p.checked;for(const t of m.keys())m.set(t,e);w(),R()}),w(),e.appendChild(h);const b=document.createElement("div");b.className="tbw-filter-values";const v=document.createElement("div");v.className="tbw-filter-values-spacer",b.appendChild(v);const y=document.createElement("div");y.className="tbw-filter-values-content",b.appendChild(y);let C=[];const x=(e,t)=>{const i=d(e),r=null==e?"__null__":String(e),n=document.createElement("label");n.className="tbw-filter-value-item",n.style.position="absolute",n.style.top=`calc(var(--tbw-filter-item-height, 28px) * ${t})`,n.style.left="0",n.style.right="0",n.style.boxSizing="border-box";const o=document.createElement("input");o.type="checkbox",o.className="tbw-filter-checkbox",o.checked=m.get(r)??!0,o.dataset.value=r,o.addEventListener("change",()=>{m.set(r,o.checked),w()});const s=document.createElement("span");return s.textContent=i,n.appendChild(o),n.appendChild(s),n},R=()=>{const e=C.length,t=b.clientHeight,i=b.scrollTop;if(v.style.height=e*a+"px",e<=50/3)return y.innerHTML="",y.style.transform="translateY(0px)",void C.forEach((e,t)=>{y.appendChild(x(e,t))});const r=function(e){const{totalRows:t,viewportHeight:i,scrollTop:r,rowHeight:n,overscan:o,maxSpacerHeight:s=Je}=e,l=Math.ceil(i/n),a=t*n,d=et(a,i,s),c=tt(r,d);let u=Math.floor(c/n)-o;u<0&&(u=0);let h=u+l+2*o;return h>t&&(h=t),h===t&&u>0&&(u=Math.max(0,h-l-2*o)),{start:u,end:h,offsetY:u*n,totalHeight:d.spacerHeight,rawContentHeight:a}}({totalRows:e,viewportHeight:t,scrollTop:i,rowHeight:a,overscan:3});y.style.transform=`translateY(${r.offsetY}px)`,y.innerHTML="";for(let n=r.start;n<r.end;n++)y.appendChild(x(C[n],n-r.start))},S=e=>{const r=n.caseSensitive??!1,o=r?e:e.toLowerCase();if(C=i.filter(t=>{const i=d(t),n=r?i:i.toLowerCase();return!e||n.includes(o)}),C.sort((e,t)=>{const i=null==e?"__null__":String(e),r=null==t?"__null__":String(t),n=m.get(i)??!0;return n!==(m.get(r)??!0)?n?-1:1:"number"==typeof e&&"number"==typeof t?e-t:d(e).localeCompare(d(t))}),0===C.length){v.style.height="0px",y.innerHTML="";const e=document.createElement("div");return e.className="tbw-filter-no-match",e.textContent=t.t("filter.noMatches","No matching values"),void y.appendChild(e)}R()};let E;b.addEventListener("scroll",()=>{C.length>0&&R()},{passive:!0}),S(u.value),e.appendChild(b),u.addEventListener("input",()=>{clearTimeout(E),E=setTimeout(()=>{o.set(s,u.value),S(u.value)},n.debounceMs??150)});const A=document.createElement("div");A.className="tbw-filter-buttons";const _=document.createElement("button");_.type="button",_.className="tbw-filter-apply-btn",_.textContent=t.t("filter.apply","Apply"),_.addEventListener("click",()=>{const e=[];for(const[t,r]of m)if(!r)if("__null__"===t)e.push(null);else{const r=i.find(e=>String(e)===t);e.push(void 0!==r?r:t)}t.applySetFilter(e)}),A.appendChild(_);const k=document.createElement("button");k.type="button",k.className="tbw-filter-clear-btn",k.textContent=t.t("filter.clear","Clear Filter"),k.addEventListener("click",()=>{t.clearFilter()}),A.appendChild(k),e.appendChild(A)}function Xt(e,t){if("number"==typeof e)return e;if("string"==typeof e){const i=parseFloat(e);return isNaN(i)?t:i}return t}var Qt=class e extends Y{static manifest={events:[{type:"filter-change",description:"Emitted when filter criteria change. Broadcast to both DOM consumers and plugin bus."}],queries:[{type:"getContextMenuItems",description:"Contributes filter-related items to the header context menu"}]};name="filtering";styles='@layer tbw-plugins{tbw-grid .tbw-quick-filter-input{max-width:300px;height:var(--tbw-input-height,1.75rem);padding:var(--tbw-input-padding,0 .5rem);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);background:var(--tbw-color-bg);color:var(--tbw-color-fg);font-size:var(--tbw-font-size-sm,.8125rem);flex:1}tbw-grid .tbw-quick-filter-input:focus{border-color:var(--tbw-color-accent);outline:none}tbw-grid .header-cell.filtered:before{content:"";top:var(--tbw-spacing-xs,.25rem);right:var(--tbw-spacing-xs,.25rem);width:var(--tbw-indicator-size,.375rem);height:var(--tbw-indicator-size,.375rem);background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));border-radius:50%;position:absolute}tbw-grid .tbw-filter-btn{display:var(--tbw-filter-btn-display,inline-flex);visibility:var(--tbw-filter-btn-visibility,visible);cursor:pointer;margin-left:var(--tbw-spacing-xs,.25rem);opacity:.4;transition:opacity .15s, visibility 0s, display 0s allow-discrete;color:inherit;vertical-align:middle;transition-behavior:allow-discrete;background:0 0;border:none;justify-content:center;align-items:center;padding:2px}tbw-grid .tbw-filter-btn:hover,tbw-grid .tbw-filter-btn.active{opacity:1;visibility:visible;display:inline-flex}tbw-grid .tbw-filter-btn.active{color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6))}tbw-grid .header-row .cell:hover .tbw-filter-btn,tbw-grid .header-row .cell.filtered .tbw-filter-btn{visibility:visible;display:inline-flex}@media (hover:none){tbw-grid .header-row .cell .tbw-filter-btn{visibility:visible;display:inline-flex}}tbw-grid .tbw-filter-btn{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}';get defaultConfig(){return{debounceMs:300,caseSensitive:!1}}isFilteringEnabled(){return!1!==this.grid.effectiveConfig?.filterable}isColumnFilterable(e){return!!this.isFilteringEnabled()&&!1!==e.filterable}getDataRows(){const e=this.sourceRows;if(e.length>0)return e;const t=this.rows;return 0===t.length?t:t.filter(e=>null!=e&&!0!==e.__loading)}getFilterValues(){const e=this.grid.effectiveConfig?.columns;if(!e)return;let t;for(const i of e){if(!i.field)continue;const e=this.getFilterExtractor(i);e&&(t||(t=/* @__PURE__ */new Map),t.set(i.field,e))}return t}getFilterExtractor(e){return e.filterValue?e.filterValue:e.valueAccessor?(t,i)=>c(i,e):void 0}filters=/* @__PURE__ */new Map;cachedResult=null;cacheKey=null;cachedInputRows=null;openPanelField=null;panelElement=null;panelAnchorElement=null;panelButtonElement=null;searchText=/* @__PURE__ */new Map;excludedValues=/* @__PURE__ */new Map;panelAbortController=null;globalStylesInjected=!1;columnLookup=null;columnLookupRef=null;getColumnByField(e){const t=this.grid.effectiveConfig?.columns;if(!t)return;let i=this.columnLookup;if(t!==this.columnLookupRef||!i){i=/* @__PURE__ */new Map;for(const e of t)e.field&&i.set(e.field,e);this.columnLookup=i,this.columnLookupRef=t}return i.get(e)}computeSelected(){const e={},t=[];for(const[i,r]of this.filters)if("set"===r.type)if("in"===r.operator&&Array.isArray(r.value))e[i]=r.value;else if("notIn"===r.operator){const e=this.getColumnByField(i);t.push({field:i,filterValue:e?this.getFilterExtractor(e):void 0})}if(t.length>0){const i=function(e,t){const i=/* @__PURE__ */new Map,r=/* @__PURE__ */new Map;for(const{field:o,filterValue:s}of t)i.set(o,{values:/* @__PURE__ */new Set,hasBlank:!1,hasExtractor:!!s}),r.set(o,l(o));for(const o of e)for(const{field:e,filterValue:n}of t){const t=i.get(e),s=r.get(e)(o);if(n){const e=n(s,o);if(Array.isArray(e)){0===e.length&&(t.hasBlank=!0);for(const i of e)null!=i&&t.values.add(i)}else null!=e?t.values.add(e):t.hasBlank=!0}else null!=s&&""!==s?t.values.add(s):t.hasBlank=!0}const n=/* @__PURE__ */new Map;for(const[o,{values:s,hasBlank:l}]of i)l&&s.add(Nt),n.set(o,[...s].sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:String(e).localeCompare(String(t))));return n}(this.getDataRows(),t);for(const{field:r}of t){const t=this.excludedValues.get(r),n=i.get(r)??[];e[r]=t?n.filter(e=>!t.has(e)):n}}return e}invalidateCache(){this.cachedResult=null,this.cacheKey=null,this.cachedInputRows=null}notifyFilterChange(e,t,i){i?this.emitPluginEvent("filter-change",{filters:e}):(this.broadcast("filter-change",{filters:e,filteredRowCount:t,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.())}syncExcludedValues(e,t){if(t)if("set"===t.type&&"notIn"===t.operator&&Array.isArray(t.value))this.excludedValues.set(e,new Set(t.value));else if("set"===t.type&&"in"===t.operator&&Array.isArray(t.value)){const i=this.getDataRows();if(!i||0===i.length)return void this.excludedValues.delete(e);const r=t.value,n=new Set(r.map(e=>null==e?Nt:e)),o=this.getUniqueValues(e),s=new Set(o.filter(e=>!n.has(e)));this.excludedValues.set(e,s)}else"set"===t.type&&this.excludedValues.delete(e);else this.excludedValues.delete(e)}attach(e){super.attach(e),this.injectGlobalStyles()}detach(){this.filters.clear(),this.invalidateCache(),this.columnLookup=null,this.columnLookupRef=null,this.openPanelField=null,this.panelElement&&(this.dismissTopLayer(this.panelElement),this.panelElement.remove(),this.panelElement=null),this.searchText.clear(),this.excludedValues.clear(),this.panelAbortController?.abort(),this.panelAbortController=null}handleQuery(e){if("filter:get-model"===e.type){if(!this.filters.size)return;return Object.fromEntries(this.filters)}if("getContextMenuItems"===e.type){const t=e.context;if(!t.isHeader)return;const i=t.column;if(!i?.field)return;if(!this.isFilteringEnabled())return;if(!this.isColumnFilterable(i))return;const r=[],n=this.isFieldFiltered(i.field),o=this.filters.size>0;return n&&r.push({id:"filtering/clear-column-filter",label:"Clear Filter",icon:"✕",order:20,action:()=>this.clearFieldFilter(i.field)}),o&&r.push({id:"filtering/clear-all-filters",label:this.t("filter.clearAll","Clear All Filters"),icon:"✕",order:21,disabled:!o,action:()=>this.clearAllFilters()}),r.length>0?r:void 0}}processRows(e){if(!this.filters.size)return e;const t=[...this.filters.values()];if(this.config.filterHandler)return this.cachedResult?this.cachedResult:e;const i=(r=t,JSON.stringify(r.map(e=>({field:e.field,operator:e.operator,value:e.value,valueTo:e.valueTo}))));var r;const n=e===this.cachedInputRows;if(this.cacheKey===i&&this.cachedResult&&n)return this.cachedResult;if(!n)for(const[s,l]of this.filters)"set"===l.type&&"in"===l.operator&&this.syncExcludedValues(s,l);const o=function(e,t,i=!1,r){if(!t.length)return e;const n=t.map(e=>Wt(e,i,r?.get(e.field)));return 1===n.length?e.filter(n[0]):e.filter(e=>{for(let t=0;t<n.length;t++)if(!n[t](e))return!1;return!0})}(e,t,this.config.caseSensitive,this.getFilterValues());return this.cachedResult=o,this.cacheKey=i,this.cachedInputRows=e,o}afterRender(){const e=this.gridElement;e&&e.querySelectorAll('[part~="header-cell"]').forEach(e=>{const t=e.getAttribute("data-col");if(null===t)return;const i=this.visibleColumns[parseInt(t,10)];if(!i||!this.isColumnFilterable(i))return;if(jt(i))return;const r=i.field;if(!r)return;const n=this.filters.has(r);let o=e.querySelector(".tbw-filter-btn");if(o){const t=o.classList.contains("active");return o.classList.toggle("active",n),e.classList.toggle("filtered",n),n?e.setAttribute("aria-description","Filtered"):e.removeAttribute("aria-description"),void(t!==n&&this.setIcon(o,n?"filterActive":"filter"))}o=document.createElement("button"),o.type="button",o.className="tbw-filter-btn",o.setAttribute("aria-label",`Filter ${i.header??r}`),this.setIcon(o,n?"filterActive":"filter"),n&&(o.classList.add("active"),e.classList.add("filtered"),e.setAttribute("aria-description","Filtered")),o.addEventListener("click",e=>{e.stopPropagation(),this.toggleFilterPanel(r,i,o)});const s=e.querySelector(".resize-handle");s?e.insertBefore(o,s):e.appendChild(o)})}setFilter(e,t,i){if(null===t)this.filters.delete(e),this.syncExcludedValues(e,null);else{const i={...t,field:e};this.filters.set(e,i),this.syncExcludedValues(e,i)}if(this.invalidateCache(),this.notifyFilterChange([...this.filters.values()],0,i?.silent),!i?.silent){const i=this.getColumnByField(e)?.header??e;qe(this.gridElement,$e(this.gridElement,null===t?"filterCleared":"filterApplied",i))}this.requestRender()}getFilter(e){return this.filters.get(e)}getFilters(){return[...this.filters.values()]}getFilterModel(){return this.getFilters()}setFilterModel(e,t){this.filters.clear(),this.excludedValues.clear();for(const i of e)this.filters.set(i.field,i),this.syncExcludedValues(i.field,i);this.invalidateCache(),this.notifyFilterChange([...this.filters.values()],0,t?.silent),this.requestRender()}clearAllFilters(e){this.filters.clear(),this.excludedValues.clear(),this.searchText.clear(),this.applyFiltersInternal(e?.silent),e?.silent||qe(this.gridElement,$e(this.gridElement,"allFiltersCleared"))}clearFieldFilter(e,t){if(this.filters.delete(e),this.excludedValues.delete(e),this.searchText.delete(e),this.applyFiltersInternal(t?.silent),!t?.silent){const t=this.getColumnByField(e)?.header??e;qe(this.gridElement,$e(this.gridElement,"filterCleared",t))}}isFieldFiltered(e){return this.filters.has(e)}getFilteredRowCount(){return this.cachedResult?.length??this.rows.length}getActiveFilters(){return this.getFilters()}getUniqueValues(e){const t=this.getColumnByField(e)?.filterValue;return Bt(this.getDataRows(),e,t)}getStaleFilters(){const e=[];for(const[t,i]of this.filters){if("set"!==i.type)continue;const r=this.getUniqueValues(t);if("notIn"===i.operator&&Array.isArray(i.value)){const t=new Set(i.value);0===r.filter(e=>!t.has(e)).length&&e.push(i)}else if("in"===i.operator&&Array.isArray(i.value)){const t=new Set(i.value);0===r.filter(e=>t.has(e)).length&&e.push(i)}}return e}getBlankMode(e){const t=this.filters.get(e);return"blank"===t?.operator?"blanksOnly":"notBlank"===t?.operator?"nonBlanksOnly":"all"}toggleBlankFilter(e,t){if("all"===t){const t=this.filters.get(e);if(t?.valueTo&&"object"==typeof t.valueTo){const i=t.valueTo;this.setFilter(e,i)}else this.setFilter(e,null);return}const i=this.filters.get(e),r=i&&"blank"!==i.operator&&"notBlank"!==i.operator?{type:i.type,operator:i.operator,value:i.value,valueTo:i.valueTo}:i?.valueTo;this.setFilter(e,{type:i?.type??"text",operator:"blanksOnly"===t?"blank":"notBlank",value:"",valueTo:r})}copyGridThemeContext(e){const t=this.gridElement;if(!t)return;for(const r of t.classList)r.startsWith("tbw-")||"selecting"===r||e.classList.add(r);const i=t.dataset.theme;i&&(e.dataset.theme=i)}injectGlobalStyles(){if(this.globalStylesInjected)return;if(document.getElementById("tbw-filter-panel-styles"))return void(this.globalStylesInjected=!0);const e=document.createElement("style");e.id="tbw-filter-panel-styles",e.textContent="@layer tbw-plugins{.tbw-filter-panel{background:var(--tbw-filter-panel-bg,var(--tbw-color-panel-bg,light-dark(#eee,#222)));color:var(--tbw-filter-panel-fg,var(--tbw-color-fg,light-dark(#222,#eee)));border:1px solid var(--tbw-filter-panel-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:var(--tbw-filter-panel-radius,var(--tbw-border-radius,.25rem));box-shadow:0 4px 16px var(--tbw-filter-panel-shadow,var(--tbw-color-shadow,light-dark(#0000001a,#0000004d)));padding:var(--tbw-panel-padding,var(--tbw-spacing-lg,.75rem));z-index:10000;min-width:200px;max-width:280px;max-height:350px;font-family:var(--tbw-font-family,system-ui, sans-serif);font-size:var(--tbw-font-size,.8125rem);transform-origin:top;flex-direction:column;display:flex;position:fixed}.tbw-filter-panel.tbw-filter-panel-above{transform-origin:bottom}.tbw-filter-panel.tbw-filter-panel-animated{animation:tbw-filter-panel-enter var(--tbw-animation-duration,.15s) var(--tbw-animation-easing,ease-out)}.tbw-filter-panel.tbw-filter-panel-above.tbw-filter-panel-animated{animation:tbw-filter-panel-enter-above var(--tbw-animation-duration,.15s) var(--tbw-animation-easing,ease-out)}@keyframes tbw-filter-panel-enter{0%{opacity:0;transform:scaleY(.3)translateY(-10px)}to{opacity:1;transform:scaleY(1)translateY(0)}}@keyframes tbw-filter-panel-enter-above{0%{opacity:0;transform:scaleY(.3)translateY(10px)}to{opacity:1;transform:scaleY(1)translateY(0)}}@supports (anchor-name:--test){.tbw-filter-panel{position-anchor:--tbw-filter-anchor;top:anchor(bottom);right:anchor(right);position-try-fallbacks:flip-inline, flip-block, flip-block flip-inline;margin-inline:0;margin-top:4px;bottom:auto;left:auto}}.tbw-filter-search{margin-bottom:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));min-height:var(--tbw-filter-item-height,28px)}.tbw-filter-search-input{height:var(--tbw-filter-item-height,28px);width:100%;padding:var(--tbw-filter-search-padding,var(--tbw-spacing-sm,.375rem) var(--tbw-spacing-md,.5rem));background:var(--tbw-filter-input-bg,var(--tbw-color-bg,transparent));color:inherit;border:1px solid var(--tbw-filter-input-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:var(--tbw-filter-input-radius,var(--tbw-border-radius,.25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-search-input:focus{border-color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6)) r g b / 15%);outline:none}.tbw-filter-actions{padding:var(--tbw-button-padding-sm,.25rem .125rem);margin-bottom:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));border-bottom:1px solid var(--tbw-filter-divider,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));min-height:var(--tbw-filter-item-height,28px);display:flex}.tbw-filter-actions .tbw-filter-value-item{flex:1}.tbw-filter-values{margin-bottom:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));flex:1;max-height:180px;position:relative;overflow-y:auto}.tbw-filter-values-spacer{width:1px}.tbw-filter-values-content{position:absolute;top:0;left:0;right:0}.tbw-filter-value-item{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));padding:var(--tbw-button-padding-sm,.25rem .125rem);cursor:pointer;height:var(--tbw-filter-item-height,28px);border-radius:3px;display:flex}.tbw-filter-value-item:hover{background:var(--tbw-filter-hover,var(--tbw-color-row-hover,light-dark(#f0f6ff,#1c1c1c)))}.tbw-filter-checkbox{cursor:pointer;accent-color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));margin:0}.tbw-filter-no-match{color:var(--tbw-filter-muted,var(--tbw-color-fg-muted,light-dark(#555,#aaa)));padding:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem)) 0;text-align:center;font-style:italic}.tbw-filter-buttons{gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));padding-top:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));border-top:1px solid var(--tbw-filter-divider,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));display:flex}.tbw-filter-apply-btn{padding:var(--tbw-filter-btn-padding,var(--tbw-button-padding,.375rem .75rem));background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));color:var(--tbw-filter-accent-fg,var(--tbw-color-accent-fg,light-dark(#fff,#000)));border-radius:var(--tbw-border-radius,.25rem);cursor:pointer;font-size:var(--tbw-font-size-sm,.8125rem);font-weight:var(--tbw-filter-btn-font-weight,500);min-height:var(--tbw-filter-btn-min-height,auto);border:none;flex:1}.tbw-filter-apply-btn:hover{filter:brightness(.9)}.tbw-filter-clear-btn{padding:var(--tbw-filter-btn-padding,var(--tbw-button-padding,.375rem .75rem));color:var(--tbw-filter-muted,var(--tbw-color-fg-muted,light-dark(#555,#aaa)));border:1px solid var(--tbw-filter-input-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:var(--tbw-border-radius,.25rem);cursor:pointer;font-size:var(--tbw-font-size-sm,.8125rem);font-weight:var(--tbw-filter-btn-font-weight,500);min-height:var(--tbw-filter-btn-min-height,auto);background:0 0;flex:1}.tbw-filter-clear-btn:hover{background:var(--tbw-filter-hover,var(--tbw-color-row-hover,light-dark(#f0f6ff,#1c1c1c)))}.tbw-filter-range-inputs,.tbw-filter-date-range{align-items:flex-end;gap:var(--tbw-spacing-sm,.375rem);margin-bottom:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));display:flex}.tbw-filter-range-group,.tbw-filter-date-group{gap:var(--tbw-spacing-xs,.25rem);flex-direction:column;flex:1;display:flex}.tbw-filter-range-label{font-size:var(--tbw-font-size-xs,.75rem);color:var(--tbw-filter-muted,var(--tbw-color-fg-muted,light-dark(#555,#aaa)))}.tbw-filter-range-input,.tbw-filter-date-input{width:100%;height:var(--tbw-filter-item-height,28px);padding:var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-sm,.375rem);background:var(--tbw-filter-input-bg,var(--tbw-color-bg,transparent));color:inherit;border:1px solid var(--tbw-filter-input-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:var(--tbw-filter-input-radius,var(--tbw-border-radius,.25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-range-input:focus,.tbw-filter-date-input:focus{border-color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6)) r g b / 15%);outline:none}.tbw-filter-range-separator{color:var(--tbw-filter-muted,var(--tbw-color-fg-muted,light-dark(#555,#aaa)));padding-bottom:var(--tbw-spacing-xs,.25rem)}.tbw-filter-blank-option{align-items:center;gap:var(--tbw-spacing-sm,.375rem);padding:var(--tbw-spacing-xs,.25rem) 0;margin-bottom:var(--tbw-spacing-xs,.25rem);font-size:var(--tbw-font-size-sm,.8125rem);cursor:pointer;-webkit-user-select:none;user-select:none;display:flex}.tbw-filter-blank-checkbox{accent-color:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));cursor:pointer;margin:0}.tbw-filter-date-range.tbw-filter-disabled,.tbw-filter-range-inputs.tbw-filter-disabled,.tbw-filter-range-slider.tbw-filter-disabled{opacity:.4;pointer-events:none}.tbw-filter-range-slider{height:24px;margin:var(--tbw-spacing-md,.5rem) 0 var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));position:relative}.tbw-filter-range-track{background:var(--tbw-filter-input-border,var(--tbw-color-border,light-dark(#d0d0d4,#454545)));border-radius:2px;height:4px;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.tbw-filter-range-fill{background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));border-radius:2px;height:4px;position:absolute;top:50%;transform:translateY(-50%)}.tbw-filter-range-thumb{pointer-events:none;appearance:none;background:0 0;width:100%;height:100%;position:absolute;top:0}.tbw-filter-range-thumb::-webkit-slider-thumb{appearance:none;background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));border:2px solid var(--tbw-filter-panel-bg,var(--tbw-color-panel-bg,light-dark(#eee,#222)));cursor:pointer;pointer-events:all;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-moz-range-thumb{background:var(--tbw-filter-accent,var(--tbw-color-accent,#3b82f6));border:2px solid var(--tbw-filter-panel-bg,var(--tbw-color-panel-bg,light-dark(#eee,#222)));cursor:pointer;pointer-events:all;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-webkit-slider-thumb:hover{transform:scale(1.1)}.tbw-filter-range-thumb::-moz-range-thumb:hover{transform:scale(1.1)}}",document.head.appendChild(e),this.globalStylesInjected=!0}toggleFilterPanel(e,t,i){if(this.openPanelField===e)return void this.closeFilterPanel();this.closeFilterPanel();const r=document.createElement("div");if(r.className="tbw-filter-panel",this.copyGridThemeContext(r),this.isAnimationEnabled&&r.classList.add("tbw-filter-panel-animated"),this.panelElement=r,this.openPanelField=e,i.classList.add("active"),this.panelButtonElement=i,this.config.valuesHandler)return r.innerHTML='<div class="tbw-filter-loading">Loading...</div>',document.body.appendChild(r),this.promoteToTopLayer(r),this.positionPanel(r,i),this.setupPanelCloseHandler(r,i),void this.config.valuesHandler(e,t).then(i=>{this.openPanelField===e&&this.panelElement&&(r.innerHTML="",this.renderPanelContent(e,t,r,i))});const n=Bt(this.getDataRows(),e,this.getFilterExtractor(t));document.body.appendChild(r),this.promoteToTopLayer(r),this.positionPanel(r,i),this.renderPanelContent(e,t,r,n),this.setupPanelCloseHandler(r,i)}renderPanelContent(e,t,i,r){const n=this.filters.get(e);if("in"===n?.operator&&"set"===n.type&&Array.isArray(n.value)&&!this.excludedValues.has(e)){const t=n.value,i=new Set(t.map(e=>null==e?Nt:e)),o=new Set(r.filter(e=>!i.has(e)));this.excludedValues.set(e,o)}let o=this.excludedValues.get(e);o||(o=/* @__PURE__ */new Set,this.excludedValues.set(e,o));const s=this.searchText.get(e)??"",l={field:e,column:t,uniqueValues:r,excludedValues:o,searchText:s,currentFilter:this.filters.get(e),applySetFilter:(t,i)=>{this.applySetFilter(e,t,i),this.closeFilterPanel()},applyTextFilter:(t,i,r)=>{this.applyTextFilter(e,t,i,r),this.closeFilterPanel()},clearFilter:()=>{this.clearFieldFilter(e),this.closeFilterPanel()},closePanel:()=>this.closeFilterPanel(),t:this.translate};let a=!1;if(this.config.filterPanelRenderer&&(this.config.filterPanelRenderer(i,l),a=i.children.length>0),!a&&t.type){const e=this.grid.effectiveConfig.typeDefaults?.[t.type];e?.filterPanelRenderer&&(e.filterPanelRenderer(i,l),a=i.children.length>0)}if(!a){const e=t.filterType??t.type;"number"===e?function(e,t,i,r){const{field:n,column:o}=t,s=o.filterParams,l=o.editorParams,a=i.filter(e=>"number"==typeof e&&!isNaN(e)),d=a.length>0?Math.min(...a):0,c=a.length>0?Math.max(...a):100,u=Xt(s?.min??l?.min,d),h=Xt(s?.max??l?.max,c),g=s?.step??l?.step??1,p=a.length>0?Math.max(u,d):u,f=a.length>0?Math.min(h,c):h,m=r.get(n);let w=p,b=f;const v="blank"===m?.operator;"between"===m?.operator?(w=Xt(m.value,p),b=Xt(m.valueTo,f)):"greaterThanOrEqual"===m?.operator?w=Xt(m.value,p):"lessThanOrEqual"===m?.operator&&(b=Xt(m.value,f));const y=document.createElement("div");y.className="tbw-filter-range-inputs";const C=document.createElement("div");C.className="tbw-filter-range-group";const x=document.createElement("label");x.textContent=t.t("filter.min","Min"),x.className="tbw-filter-range-label";const R=document.createElement("input");R.type="number",R.className="tbw-filter-range-input",R.min=String(u),R.max=String(h),R.step=String(g),R.value=String(w),C.appendChild(x),C.appendChild(R),y.appendChild(C);const S=document.createElement("span");S.className="tbw-filter-range-separator",S.textContent="–",y.appendChild(S);const E=document.createElement("div");E.className="tbw-filter-range-group";const A=document.createElement("label");A.textContent=t.t("filter.max","Max"),A.className="tbw-filter-range-label";const _=document.createElement("input");_.type="number",_.className="tbw-filter-range-input",_.min=String(u),_.max=String(h),_.step=String(g),_.value=String(b),E.appendChild(A),E.appendChild(_),y.appendChild(E),e.appendChild(y);const k=document.createElement("div");k.className="tbw-filter-range-slider";const T=document.createElement("div");T.className="tbw-filter-range-track";const M=document.createElement("div");M.className="tbw-filter-range-fill";const I=document.createElement("input");I.type="range",I.className="tbw-filter-range-thumb tbw-filter-range-thumb-min",I.min=String(u),I.max=String(h),I.step=String(g),I.value=String(w);const L=document.createElement("input");L.type="range",L.className="tbw-filter-range-thumb tbw-filter-range-thumb-max",L.min=String(u),L.max=String(h),L.step=String(g),L.value=String(b),k.appendChild(T),k.appendChild(M),k.appendChild(I),k.appendChild(L),e.appendChild(k);const D=document.createElement("label");D.className="tbw-filter-blank-option";const P=document.createElement("input");P.type="checkbox",P.className="tbw-filter-blank-checkbox",P.checked=v;const F=document.createTextNode("Blank");D.appendChild(P),D.appendChild(F);const H=e=>{R.disabled=e,_.disabled=e,I.disabled=e,L.disabled=e,y.classList.toggle("tbw-filter-disabled",e),k.classList.toggle("tbw-filter-disabled",e)};H(v),P.addEventListener("change",()=>{H(P.checked)}),e.appendChild(D);const G=()=>{const e=parseFloat(I.value),t=parseFloat(L.value),i=h-u,r=(e-u)/i*100,n=(t-u)/i*100;M.style.left=`${r}%`,M.style.width=n-r+"%"};I.addEventListener("input",()=>{const e=Math.min(parseFloat(I.value),parseFloat(L.value));I.value=String(e),R.value=String(e),G()}),L.addEventListener("input",()=>{const e=Math.max(parseFloat(L.value),parseFloat(I.value));L.value=String(e),_.value=String(e),G()}),R.addEventListener("input",()=>{const e=parseFloat(R.value);let t=Number.isFinite(e)?e:u;t=Math.max(u,Math.min(t,parseFloat(_.value))),I.value=String(t),G()}),_.addEventListener("input",()=>{const e=parseFloat(_.value);let t=Number.isFinite(e)?e:h;t=Math.min(h,Math.max(t,parseFloat(R.value))),L.value=String(t),G()}),G();const z=document.createElement("div");z.className="tbw-filter-buttons";const O=document.createElement("button");O.type="button",O.className="tbw-filter-apply-btn",O.textContent=t.t("filter.apply","Apply"),O.addEventListener("click",()=>{if(P.checked)return void t.applyTextFilter("blank","");const e=parseFloat(R.value),i=parseFloat(_.value),r=Number.isFinite(e)?e:p,n=Number.isFinite(i)?i:f;r!==p||n!==f?t.applyTextFilter("between",r,n):t.clearFilter()}),z.appendChild(O);const N=document.createElement("button");N.type="button",N.className="tbw-filter-clear-btn",N.textContent=t.t("filter.clear","Clear Filter"),N.addEventListener("click",()=>{t.clearFilter()}),z.appendChild(N),e.appendChild(z)}(i,l,r,this.filters):"date"===e?function(e,t,i,r){const{field:n,column:o}=t,s=o.filterParams,l=o.editorParams,a=i.filter(e=>e instanceof Date||"string"==typeof e&&!isNaN(Date.parse(e))).map(e=>e instanceof Date?e:new Date(e)).filter(e=>!isNaN(e.getTime())),d=a.length>0?new Date(Math.min(...a.map(e=>e.getTime()))):null,c=a.length>0?new Date(Math.max(...a.map(e=>e.getTime()))):null,u=Yt(s?.min)||Yt(l?.min)||Ut(d),h=Yt(s?.max)||Yt(l?.max)||Ut(c),g=Ut(d)||Yt(s?.min)||Yt(l?.min),p=Ut(c)||Yt(s?.max)||Yt(l?.max),f=r.get(n);let m=g,w=p;const b="blank"===f?.operator;"between"===f?.operator?(m=Yt(f.value)||g,w=Yt(f.valueTo)||p):"greaterThanOrEqual"===f?.operator?m=Yt(f.value)||g:"lessThanOrEqual"===f?.operator&&(w=Yt(f.value)||p);const v=document.createElement("div");v.className="tbw-filter-date-range";const y=document.createElement("div");y.className="tbw-filter-date-group";const C=document.createElement("label");C.textContent=t.t("filter.from","From"),C.className="tbw-filter-range-label";const x=document.createElement("input");x.type="date",x.className="tbw-filter-date-input",u&&(x.min=u),h&&(x.max=h),x.value=m,y.appendChild(C),y.appendChild(x),v.appendChild(y);const R=document.createElement("span");R.className="tbw-filter-range-separator",R.textContent="–",v.appendChild(R);const S=document.createElement("div");S.className="tbw-filter-date-group";const E=document.createElement("label");E.textContent="To",E.className="tbw-filter-range-label";const A=document.createElement("input");A.type="date",A.className="tbw-filter-date-input",u&&(A.min=u),h&&(A.max=h),A.value=w,S.appendChild(E),S.appendChild(A),v.appendChild(S),e.appendChild(v);const _=document.createElement("label");_.className="tbw-filter-blank-option";const k=document.createElement("input");k.type="checkbox",k.className="tbw-filter-blank-checkbox",k.checked=b;const T=document.createTextNode("Show only blank");_.appendChild(k),_.appendChild(T);const M=e=>{x.disabled=e,A.disabled=e,v.classList.toggle("tbw-filter-disabled",e)};M(b),k.addEventListener("change",()=>{M(k.checked)}),e.appendChild(_);const I=document.createElement("div");I.className="tbw-filter-buttons";const L=document.createElement("button");L.type="button",L.className="tbw-filter-apply-btn",L.textContent=t.t("filter.apply","Apply"),L.addEventListener("click",()=>{if(k.checked)return void t.applyTextFilter("blank","");const e=x.value,i=A.value,r=e&&e!==g?e:"",n=i&&i!==p?i:"";r&&n?t.applyTextFilter("between",r,n):r?t.applyTextFilter("greaterThanOrEqual",r):n?t.applyTextFilter("lessThanOrEqual",n):t.clearFilter()}),I.appendChild(L);const D=document.createElement("button");D.type="button",D.className="tbw-filter-clear-btn",D.textContent=t.t("filter.clear","Clear Filter"),D.addEventListener("click",()=>{t.clearFilter()}),I.appendChild(D),e.appendChild(I)}(i,l,r,this.filters):Zt(i,l,r,o,{caseSensitive:this.config.caseSensitive,debounceMs:this.config.debounceMs},this.searchText)}}setupPanelCloseHandler(e,t){this.panelAbortController=new AbortController;const{signal:i}=this.panelAbortController;setTimeout(()=>{i.aborted||document.addEventListener("click",i=>{e.contains(i.target)||i.target===t||this.closeFilterPanel()},{signal:i})},0)}promoteToTopLayer(e){if("function"==typeof e.showPopover){e.setAttribute("popover","manual");try{e.showPopover()}catch{}}}dismissTopLayer(e){if(e.hasAttribute("popover")&&"function"==typeof e.hidePopover)try{e.hidePopover()}catch{}}closeFilterPanel(){const e=this.panelElement;if(e&&(this.dismissTopLayer(e),e.remove(),this.panelElement=null),this.panelAnchorElement&&(this.panelAnchorElement.style.anchorName="",this.panelAnchorElement=null),this.panelButtonElement){const e=this.openPanelField;e&&this.filters.has(e)||this.panelButtonElement.classList.remove("active"),this.panelButtonElement=null}this.openPanelField=null,this.panelAbortController?.abort(),this.panelAbortController=null}static supportsAnchorPositioning=null;static checkAnchorPositioningSupport(){return null===e.supportsAnchorPositioning&&(e.supportsAnchorPositioning=CSS.supports("anchor-name","--test")),e.supportsAnchorPositioning}positionPanel(t,i){const r=i.closest(".header-row")??i;if(r.style.anchorName="--tbw-filter-anchor",this.panelAnchorElement=r,e.checkAnchorPositioningSupport()){r.style.anchorName="",i.style.anchorName="--tbw-filter-anchor",this.panelAnchorElement=i;const e=r.getBoundingClientRect().bottom-i.getBoundingClientRect().bottom;return t.style.marginTop=`${e+4}px`,void requestAnimationFrame(()=>{const e=t.getBoundingClientRect(),r=i.getBoundingClientRect();e.top<r.top&&t.classList.add("tbw-filter-panel-above")})}const n=r.getBoundingClientRect(),o=i.getBoundingClientRect();t.style.position="fixed",t.style.top=`${n.bottom+4}px`,t.style.left=`${o.right}px`,requestAnimationFrame(()=>{const e=t.getBoundingClientRect();t.style.left=o.right-e.width+"px",o.right-e.width<8&&(t.style.left=`${o.left}px`),e.bottom>window.innerHeight-8&&(t.style.top=n.top-e.height-4+"px",t.classList.add("tbw-filter-panel-above"))})}applySetFilter(e,t,i){if(this.excludedValues.set(e,new Set(t)),0===t.length)this.filters.delete(e);else if("in"===this.filters.get(e)?.operator){const r=this.getUniqueValues(e),n=new Set(t),o=r.filter(e=>!n.has(e));this.filters.set(e,{field:e,type:"set",operator:"in",value:o,...void 0!==i&&{valueTo:i}})}else this.filters.set(e,{field:e,type:"set",operator:"notIn",value:t,...void 0!==i&&{valueTo:i}});this.applyFiltersInternal()}applyTextFilter(e,t,i,r){const n=this.getColumnByField(e),o=n?.filterType??n?.type??"text";this.filters.set(e,{field:e,type:o,operator:t,value:i,valueTo:r}),this.applyFiltersInternal()}applyFiltersInternal(e){this.invalidateCache();const t=[...this.filters.values()];if(this.config.filterHandler){this.gridElement.setAttribute("aria-busy","true");const i=this.config.filterHandler(t,this.sourceRows),r=i=>{this.gridElement.removeAttribute("aria-busy"),this.cachedResult=i,this.grid.rows=i,this.notifyFilterChange(t,i.length,e),this.requestRender()};return void(i&&"function"==typeof i.then?i.then(r):r(i))}this.notifyFilterChange(t,0,e),this.requestRender()}getColumnState(e){if(!this.config.trackColumnState)return;const t=this.filters.get(e);return t?{filter:{type:t.type,operator:t.operator,value:t.value,valueTo:t.valueTo}}:void 0}applyColumnState(e,t){if(!this.config.trackColumnState)return;if(!t.filter)return void this.filters.delete(e);const i={field:e,type:t.filter.type,operator:t.filter.operator,value:t.filter.value,valueTo:t.filter.valueTo};this.filters.set(e,i),this.invalidateCache()}};function Jt(e){if(!e.length)return[];const t=[],i=/* @__PURE__ */new Map,r=(e,i)=>{if(!i.length)return;const r=t[t.length-1];r&&r.implicit&&r.firstIndex+r.columns.length===e?r.columns.push(...i):t.push({id:"__implicit__"+e,label:void 0,columns:i,firstIndex:e,implicit:!0})};let n=[],o=0;return e.forEach((e,s)=>{const l=e.group;if(!l)return 0===n.length&&(o=s),void n.push(e);n.length&&(r(o,n.slice()),n=[]);const a="string"==typeof l?l:l.id,d="string"==typeof l?void 0:l.label;d&&!i.has(a)&&i.set(a,d);const c=i.get(a)??d,u=t[t.length-1];u&&!u.implicit&&u.id===a?u.columns.push(e):t.push({id:a,label:c,columns:[e],firstIndex:s})}),n.length&&r(o,n),1===t.length&&t[0].implicit&&t[0].columns.length===e.length?[]:t}function ei(e){const t=function(e){const t=/* @__PURE__ */new Set;for(let i=0;i<e.length;i++){if(!String(e[i].id).startsWith("__implicit__"))continue;if(!e[i].columns.every(e=>e.field?.startsWith("__tbw_")))continue;let r=null;for(let t=i-1;t>=0;t--)if(!String(e[t].id).startsWith("__implicit__")){r=e[t].id;break}let n=null;for(let t=i+1;t<e.length;t++)if(!String(e[t].id).startsWith("__implicit__")){n=e[t].id;break}r&&n&&r===n&&t.add(String(e[i].id))}return t}(e);return{merged:ii(e,t),embedded:t}}function ti(e,t){const i=e.columns[0],r=e.columns[e.columns.length-1],n=i?t.findIndex(e=>e.field===i.field):-1,o=r?t.findIndex(e=>e.field===r.field):-1;return-1!==n&&-1!==o?[n,o]:null}function ii(e,t){const i=[];for(const r of e){if(String(r.id).startsWith("__implicit__")&&t.has(String(r.id)))continue;const e=i[i.length-1];e&&!String(r.id).startsWith("__implicit__")&&e.id===r.id?i[i.length-1]={...e,columns:[...e.columns,...r.columns]}:i.push({...r,columns:[...r.columns]})}return i}we("filtering",e=>"boolean"==typeof e?new Qt:new Qt(e??void 0));function ri(e,t){if(!t.group)return;const i="string"==typeof t.group?t.group:t.group.id,r="string"==typeof t.group?t.group:t.group.label??t.group.id,n=e.get(i);n?n.fields.includes(t.field)||n.fields.push(t.field):e.set(i,{id:i,label:r,fields:[t.field]})}var ni=class extends Y{static manifest={ownedProperties:[{property:"group",level:"column",description:'the "group" column property'},{property:"columnGroups",level:"config",description:'the "columnGroups" config property',isUsed:e=>Array.isArray(e)&&e.length>0}],queries:[{type:"getColumnGrouping",description:"Returns column group metadata for the visibility panel"},{type:"collectHeaderRows",description:"Contributes a group-header row above the leaf header for exports / printers"}]};name="groupingColumns";styles="@layer tbw-plugins{.header-group-row{background:var(--tbw-grouping-columns-header-bg,var(--tbw-color-header-bg));border-bottom:1px solid var(--tbw-grouping-columns-border,var(--tbw-color-border));grid-auto-flow:column;display:grid}.header-group-cell{padding:var(--tbw-button-padding-sm,.25rem .5rem);font-weight:600;font-size:var(--tbw-font-size-sm,.9em);text-transform:uppercase;letter-spacing:.5px;text-overflow:ellipsis;white-space:nowrap;border-right:2px solid var(--tbw-grouping-columns-separator,var(--tbw-color-border-strong,var(--tbw-color-border)));justify-content:center;align-items:center;min-width:0;display:flex;overflow:hidden}.header-group-cell:last-child{border-right:none}.header-row .cell.grouped{border-top:none}.header-row .cell.group-end{border-right:2px solid var(--tbw-grouping-columns-separator,var(--tbw-color-border-strong,var(--tbw-color-border)))}.header-row .cell.group-end:last-child{border-right:none}.rows .cell.group-end{border-right:2px solid var(--tbw-grouping-columns-separator,var(--tbw-color-border-strong,var(--tbw-color-border)))}.rows .cell.group-end:last-child{border-right:none}.header-group-row.no-borders{border-bottom:none}.header-group-row.no-borders .header-group-cell{border-right:none}.header-row.no-group-borders .cell.group-end{border-right:1px solid var(--tbw-color-border)}}";get defaultConfig(){return{showGroupBorders:!0,lockGroupOrder:!1}}groups=[];isActive=!1;#Ie=/* @__PURE__ */new Set;#Le=[];#De=/* @__PURE__ */new Map;attach(e){super.attach(e),this.gridElement.addEventListener("column-move",this.#Pe,{signal:this.disconnectSignal})}detach(){this.groups=[],this.isActive=!1,this.#Ie.clear(),this.#Le=[],this.#De.clear()}#Pe=e=>{if(!this.isActive)return;const t=e,{field:i,columnOrder:r}=t.detail;if(this.config.lockGroupOrder){const e=/* @__PURE__ */new Map;for(const t of this.groups){if(t.id.startsWith("__implicit__"))continue;const i=e.get(t.id);i?i.push(...t.columns):e.set(t.id,[...t.columns])}for(const[,n]of e)if(!this.#Fe(n,r))return t.preventDefault(),void this.#He(i)}this.#Ge(r)};#Ge(e){this.#Ie.clear();const t=/* @__PURE__ */new Map;for(const i of this.groups)for(const e of i.columns)t.set(e.field,i.id);for(let i=0;i<e.length-1;i++)t.get(e[i])!==t.get(e[i+1])&&this.#Ie.add(e[i])}#Fe(e,t){const i=e.map(e=>t.indexOf(e.field)).filter(e=>-1!==e).sort((e,t)=>e-t);return i.length<=1||i.length===i[i.length-1]-i[0]+1}#He(e){const t=this.gridElement?.querySelector(`.header-row [part~="header-cell"][data-field="${e}"]`);t&&(t.style.setProperty("--_flash-color","var(--tbw-color-error)"),t.animate([{backgroundColor:"rgba(from var(--_flash-color) r g b / 30%)"},{backgroundColor:"transparent"}],{duration:400,easing:"ease-out"}))}handleQuery(e){return"getColumnGrouping"===e.type?this.#ze():"collectHeaderRows"===e.type?this.#Oe(e.context):void 0}#Oe(e){const t=e?.columns;if(!Array.isArray(t)||0===t.length)return;const i=Jt(t);if(0===i.length)return;const{merged:r}=ei(i),n=[];for(const o of r){const e=String(o.id).startsWith("__implicit__"),i=o.columns[0],r=o.columns[o.columns.length-1];if(!i||!r)continue;const s=t.findIndex(e=>e.field===i.field),l=t.findIndex(e=>e.field===r.field);if(s<0||l<0)continue;const a=l-s+1;n.push({label:e?"":o.label??o.id,span:a,source:this.name})}return 0!==n.length?n.reduce((e,t)=>e+t.span,0)!==t.length?{cells:[{label:"",span:t.length,source:this.name}]}:{cells:n}:void 0}#ze(){const e=this.#Ne()??this.#qe()??this.#$e();return this.#We(e),e}#Ne(){if(0!==this.#Le.length)return this.#Le.filter(e=>e.children.length>0).map(e=>({id:e.id,label:e.header,fields:[...e.children]}))}#qe(){if(!this.isActive||0===this.groups.length)return;const e=/* @__PURE__ */new Map;for(const t of this.groups){if(t.id.startsWith("__implicit__"))continue;const i=e.get(t.id);if(i)for(const e of t.columns)i.fields.includes(e.field)||i.fields.push(e.field);else e.set(t.id,{id:t.id,label:t.label??t.id,fields:t.columns.map(e=>e.field)})}for(const t of this.columns)t.hidden&&ri(e,t);return Array.from(e.values())}#$e(){const e=/* @__PURE__ */new Map;for(const t of this.columns)ri(e,t);return Array.from(e.values())}#We(e){const t=this.grid?.getColumnOrder();if(!t||0===t.length)return;const i=new Map(t.map((e,t)=>[e,t]));for(const r of e)r.fields.sort((e,t)=>(i.get(e)??1/0)-(i.get(t)??1/0))}static detect(e,t){const i=t?.features?.groupingColumns;if(i&&"object"==typeof i&&Array.isArray(i.columnGroups)&&i.columnGroups.length>0)return!0;if(t?.columnGroups&&Array.isArray(t.columnGroups)&&t.columnGroups.length>0)return!0;const r=t?.columns;return!!Array.isArray(r)&&function(e){return e.some(e=>null!=e.group)}(r)}processColumns(e){const t=this.config?.columnGroups,i=this.grid?.gridConfig?.columnGroups;let r,n;if(t&&Array.isArray(t)&&t.length>0?(i&&Array.isArray(i)&&i.length>0&&this.warn("TBW114","columnGroups defined in both gridConfig and groupingColumns feature config. Using feature config (higher precedence)."),r=t):i&&Array.isArray(i)&&i.length>0&&(r=i),r&&r.length>0){const t=r.map(e=>{return e.id?e:(e.header||E("TBW113",'ColumnGroupDefinition requires either an "id" or a "header" to generate an id from.'),{...e,id:(t=e.header,t.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""))});var t});this.#Le=t,this.#De.clear();for(const e of t)e.renderer&&this.#De.set(e.id,e.renderer);const i=/* @__PURE__ */new Map;for(const e of t)for(const t of e.children)i.set(t,{id:e.id,label:e.header});n=e.map(e=>{const t=i.get(e.field);return t&&!e.group?{...e,group:t}:e})}else this.#Le=[],this.#De.clear(),n=[...e];const o=Jt(n);if(0===o.length)return this.isActive=!1,this.groups=[],n;if(this.#De.size>0)for(const s of o){const e=this.#De.get(s.id);e&&(s.renderer=e)}this.isActive=!0,this.groups=o,this.#Ie.clear();for(const s of o){const e=s.columns[s.columns.length-1];e?.field&&this.#Ie.add(e.field)}return n}afterRender(){if(!this.isActive){const e=(this.gridElement?.querySelector(".header"))?.querySelector(".header-group-row");return void(e&&e.remove())}const e=this.gridElement?.querySelector(".header");if(!e)return;const t=e.querySelector(".header-group-row");t&&t.remove();const i=this.visibleColumns,r=Jt(i);if(0===r.length)return;if(this.#De.size>0)for(const l of r){const e=this.#De.get(l.id);e&&(l.renderer=e)}this.#Ie.clear();const n=ei(r);for(let l=0;l<n.merged.length;l++){const e=n.merged[l],t=e.columns[e.columns.length-1];t?.field&&l<n.merged.length-1&&this.#Ie.add(t.field)}const o=function(e,t,i,r){if(0===e.length)return null;const n=document.createElement("div");n.className="header-group-row",n.setAttribute("role","row");const{merged:o}=r??ei(e);for(const s of o){const e=String(s.id),r=e.startsWith("__implicit__"),o=ti(s,t);if(!o)continue;const[l,a]=o,d=a-l+1,c=r?"":s.label||s.id,u=document.createElement("div");u.className="cell header-group-cell",r&&u.classList.add("implicit-group"),u.setAttribute("role",r?"presentation":"columnheader"),u.setAttribute("data-group",e),u.style.gridColumn=`${l+1} / span ${d}`;const h=!r&&(s.renderer||i)||void 0;if(h&&!r){const t=h({id:e,label:String(c),columns:s.columns,firstIndex:l,isImplicit:!1});t instanceof HTMLElement?u.appendChild(t):"string"==typeof t?q(u,t):u.textContent=c}else u.textContent=c;n.appendChild(u)}return n}(r,i,this.config.groupHeaderRenderer,n);if(o){o.classList.toggle("no-borders",!this.config.showGroupBorders);const t=e.querySelector(".header-row");t?e.insertBefore(o,t):e.appendChild(o)}const s=e.querySelector(".header-row");s&&(s.classList.toggle("no-group-borders",!this.config.showGroupBorders),function(e,t,i,r){if(!t.length||!e)return;const{merged:n,embedded:o}=r??ei(t),s=/* @__PURE__ */new Map;for(const a of n)if(!String(a.id).startsWith("__implicit__"))for(const e of a.columns)e.field&&s.set(e.field,a.id);for(let a=0;a<t.length;a++){const e=t[a];if(String(e.id).startsWith("__implicit__")&&o.has(String(e.id)))for(let i=a-1;i>=0;i--)if(!String(t[i].id).startsWith("__implicit__")){for(const r of e.columns)r.field&&s.set(r.field,t[i].id);break}}const l=Array.from(e.querySelectorAll(".cell[data-field]"));l.forEach(e=>{const t=e.getAttribute("data-field")||"",i=s.get(t);i&&(e.classList.add("grouped"),e.getAttribute("data-group")||e.setAttribute("data-group",i))});for(const a of n){const e=a.columns[a.columns.length-1],t=l.find(t=>t.getAttribute("data-field")===e.field);t&&t.classList.add("group-end")}}(s,r,0,n))}afterCellRender(e){this.isActive&&this.config.showGroupBorders&&e.cellElement.classList.toggle("group-end",this.#Ie.has(e.column.field))}isGroupingActive(){return this.isActive}getGroups(){return this.groups}getGroupColumns(e){return this.groups.filter(t=>t.id===e).flatMap(e=>e.columns)}refresh(){this.requestRender()}};function oi(e,t,i){return i?.valueAccessor?c(e,i):s(e,t)}function si(e){return null==e||""===e||"number"==typeof e&&isNaN(e)}we("groupingColumns",e=>new ni("boolean"==typeof e?{}:e??{}));var li={sum:(e,t,i)=>{let r=0;for(let n=0;n<e.length;n++){const o=oi(e[n],t,i);if(si(o))continue;const s=Number(o);isNaN(s)||(r+=s)}return r},avg:(e,t,i)=>{if(!e.length)return 0;let r=0,n=0;for(let o=0;o<e.length;o++){const s=oi(e[o],t,i);if(si(s))continue;const l=Number(s);isNaN(l)||(r+=l,n++)}return n>0?r/n:0},count:e=>e.length,min:(e,t,i)=>{if(!e.length)return 0;let r=1/0;for(let n=0;n<e.length;n++){const o=oi(e[n],t,i);if(si(o))continue;const s=Number(o);isNaN(s)||s<r&&(r=s)}return r===1/0?0:r},max:(e,t,i)=>{if(!e.length)return 0;let r=-1/0;for(let n=0;n<e.length;n++){const o=oi(e[n],t,i);if(si(o))continue;const s=Number(o);isNaN(s)||s>r&&(r=s)}return r===-1/0?0:r},first:(e,t,i)=>e[0]?oi(e[0],t,i):void 0,last:(e,t,i)=>e.length?oi(e[e.length-1],t,i):void 0},ai=/* @__PURE__ */new Map,di={register(e,t){ai.set(e,t)},unregister(e){ai.delete(e)},get(e){if(void 0!==e)return"function"==typeof e?e:ai.get(e)??li[e]},run(e,t,i,r){const n=this.get(e);return n?n(t,i,r):void 0},has:e=>ai.has(e)||e in li,list:()=>[...Object.keys(li),...ai.keys()]};function ci(e){const t=document.createElement("div");return t.className=`tbw-spinner tbw-spinner--${e}`,t.setAttribute("role","progressbar"),t.setAttribute("aria-label","Loading"),t}function ui(e){const t=document.createElement("div");return t.className="tbw-loading-overlay",t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.appendChild(function(e,t){if(t){const i=t({size:e});if("string"==typeof i){const e=document.createElement("div");return q(e,i),e}return i}return ci(e)}("large",e)),t}function hi(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 i=document.createElement("div");i.className="tbw-row-loading-spinner",t.appendChild(i),e.appendChild(t)}}else e.classList.remove("tbw-row-loading"),e.removeAttribute("aria-busy"),e.querySelector(".tbw-row-loading-overlay")?.remove()}function gi({rows:e,config:t,expanded:i,initialExpanded:r,groupSortDirections:n}){const o=t.groupOn;if("function"!=typeof o)return[];const s={key:"__root__",value:null,depth:-1,rows:[],children:/* @__PURE__ */new Map};if(e.forEach(e=>{let t=o(e);null==t||!1===t?t=["__ungrouped__"]:Array.isArray(t)||(t=[t]);let i=s;t.forEach((t,r)=>{const n=null==t?"∅":String(t),o="__root__"===i.key?n:i.key+"||"+n;let s=i.children.get(n);s||(s={key:o,value:t,depth:r,rows:[],children:/* @__PURE__ */new Map,parent:i},i.children.set(n,s)),s.rows.push(e),i=s})}),1===s.children.size&&s.children.has("__ungrouped__")&&s.children.get("__ungrouped__").rows.length===e.length)return[];const l=/* @__PURE__ */new Map;for(let h=0;h<e.length;h++)l.set(e[h],h);const a=/* @__PURE__ */new Set([...i,...r??[]]),d=e=>{const t=[...e.children.values()],i=e===s?0:e.depth+1,r=n?.get(i)??1;return t.sort((e,t)=>{const i=e.value,n=t.value;return null==i&&null==n?0:null==i?r:null==n?-r:i>n?r:i<n?-r:0}),t},c=[],u=e=>{if(e===s){for(const t of d(e))u(t);return}const t=a.has(e.key);if(c.push({kind:"group",key:e.key,value:e.value,depth:e.depth,rows:e.rows,expanded:t}),t)if(e.children.size)for(const i of d(e))u(i);else e.rows.forEach(e=>c.push({kind:"data",row:e,rowIndex:l.get(e)??-1}))};return u(s),c}function pi(e,t){if(!0===e)return new Set(t);if(!1===e||null==e)/* @__PURE__ */return new Set;if("number"==typeof e){const i=t[e];return i?/* @__PURE__ */new Set([i]):/* @__PURE__ */new Set}return"string"==typeof e?/* @__PURE__ */new Set([e]):Array.isArray(e)?new Set(e):/* @__PURE__ */new Set}function fi({groups:e,expanded:t,groupRows:i,loadingGroups:r,parentPath:n=[]}){const o=[],s=n.length;for(const l of e){const e=[...n,l.key],a=t.has(l.key),d=i.get(l.key)??[],c=r.has(l.key);if(o.push({kind:"group",key:l.key,value:l.value,depth:s,rows:d,expanded:a}),a)if(l.children?.length){const n=fi({groups:l.children,expanded:t,groupRows:i,loadingGroups:r,parentPath:e});o.push(...n)}else c?o.push({kind:"data",row:{__loading:!0,__groupKey:l.key},rowIndex:-1}):d.forEach((e,t)=>{o.push({kind:"data",row:e,rowIndex:t})})}return o}function mi(e,t,i=[]){for(const r of e){const e=[...i,r.key];if(r.key===t)return e;if(r.children?.length){const i=mi(r.children,t,e);if(i.length>0)return i}}return[]}var wi=class extends Y{static manifest={modifiesRowStructure:!0,hookPriority:{processRows:10,onHeaderClick:-1},incompatibleWith:[{name:"tree",reason:"Both plugins transform the entire row model. TreePlugin flattens nested hierarchies while GroupingRowsPlugin groups flat rows with synthetic headers. Use one approach per grid."},{name:"pivot",reason:"PivotPlugin creates its own aggregated row and column structure. Row grouping cannot be applied on top of pivot-generated rows."}],events:[{type:"group-toggle",description:"Emitted when groups are expanded/collapsed. Broadcast to both DOM consumers and plugin bus."},{type:"group-expand",description:"Emitted when a pre-defined group is expanded."},{type:"group-collapse",description:"Emitted when a pre-defined group is collapsed."}],queries:[{type:"canMoveRow",description:"Returns false for group header rows (cannot be reordered)"},{type:"grouping:get-grouped-fields",description:"Returns the column field names that match group depth levels (string[])"},{type:"datasource:viewport-mapping",description:"Translates flat viewport row indices to top-level group indices for ServerSide pagination."}],configRules:[{id:"groupingRows/accordion-defaultExpanded",severity:"warn",message:'"accordion: true" and "defaultExpanded" (non-false) are used together.\n → In accordion mode, only one group can be open at a time.\n → Using defaultExpanded with multiple groups will collapse to one on first toggle.\n → Consider using "defaultExpanded: false" or a single group key/index with accordion mode.',check:e=>!0===e.accordion&&!1!==e.defaultExpanded&&void 0!==e.defaultExpanded&&!("number"==typeof e.defaultExpanded)&&!("string"==typeof e.defaultExpanded)&&(!0===e.defaultExpanded||Array.isArray(e.defaultExpanded)&&e.defaultExpanded.length>1)}]};static dependencies=[{name:"multiSort",required:!1,reason:"Queries sort model for coordinated group sorting"},{name:"serverSide",required:!1,reason:"Consumes datasource events for lazy-loaded grouped data"}];name="groupingRows";styles='@layer tbw-plugins{.group-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-grouping-rows-bg,var(--tbw-color-panel-bg));border-bottom:var(--tbw-row-divider);min-height:var(--tbw-row-height);font-weight:500;display:grid}.group-row .cell{padding:var(--tbw-cell-padding,.125rem .5rem);align-items:center;display:flex}@media (hover:hover){.group-row:hover{background:var(--tbw-grouping-rows-bg-hover,var(--tbw-color-row-hover))}}.group-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;width:var(--tbw-toggle-size,1.25rem);height:var(--tbw-toggle-size,1.25rem);font:inherit;background:0 0;border:0;justify-content:center;align-items:center;margin-right:.25rem;display:inline-flex}.group-toggle:hover{background:var(--tbw-grouping-rows-toggle-hover,var(--tbw-color-row-hover));border-radius:var(--tbw-border-radius,.125rem)}.group-toggle{position:relative}.group-toggle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}@media (pointer:coarse){.group-toggle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}.group-label{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));display:inline-flex}.group-count{color:var(--tbw-grouping-rows-count-color,var(--tbw-color-fg-muted));font-size:var(--tbw-font-size-xs,.85em);font-weight:400}.group-aggregates{align-items:center;gap:var(--tbw-spacing-lg,1rem);margin-left:var(--tbw-spacing-lg,1rem);font-weight:400;font-size:var(--tbw-font-size-sm,.875em);color:var(--tbw-grouping-rows-aggregate-color,var(--tbw-color-fg-muted));display:inline-flex}.group-aggregate{white-space:nowrap}.group-row{padding-left:calc(var(--tbw-group-depth,0) * var(--tbw-group-indent-width,1.25em))}.data-grid-row.tbw-group-slide-in{animation:tbw-group-slide-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-group-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.data-grid-row.tbw-group-fade-in{animation:tbw-group-fade-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-group-fade-in{0%{opacity:0}to{opacity:1}}}';get defaultConfig(){return{defaultExpanded:!1,showRowCount:!0,indentWidth:20,aggregators:{},animation:"slide",accordion:!1}}expandedKeys=/* @__PURE__ */new Set;flattenedRows=[];isActive=!1;previousVisibleKeys=/* @__PURE__ */new Set;keysToAnimate=/* @__PURE__ */new Set;hasAppliedDefaultExpanded=!1;pendingExpansion;groupConfigDirty=!1;preDefinedGroups=[];groupRowsMap=/* @__PURE__ */new Map;loadingGroups=/* @__PURE__ */new Set;groupedFields=[];userGroupSortDirections=/* @__PURE__ */new Map;flatMeta=[];get animationStyle(){return!!this.isAnimationEnabled&&(this.config.animation??"slide")}detach(){(this.gridElement?.querySelector(".rows-body"))?.setAttribute("role","grid"),this.expandedKeys.clear(),this.flattenedRows=[],this.flatMeta=[],this.isActive=!1,this.previousVisibleKeys.clear(),this.keysToAnimate.clear(),this.hasAppliedDefaultExpanded=!1,this.pendingExpansion=void 0,this.groupConfigDirty=!1,this.preDefinedGroups=[],this.groupRowsMap.clear(),this.loadingGroups.clear(),this.groupedFields=[],this.userGroupSortDirections.clear()}getRowHeight(e,t){if(null!=this.config.groupRowHeight)return!0===e.__isGroupRow?this.config.groupRowHeight:void 0}handleQuery(e){if("canMoveRow"===e.type&&!0===e.context?.__isGroupRow)return!1;if("grouping:get-grouped-fields"===e.type)return[...this.groupedFields];if("datasource:viewport-mapping"===e.type){const{viewportStart:t,viewportEnd:i}=e.context;if(0===this.flattenedRows.length)return;if(0===this.preDefinedGroups.length&&!Array.isArray(this.config.groups))return;const r=this.getActiveGroups();return{startNode:this.getTopLevelGroupIndex(t),endNode:this.getTopLevelGroupIndex(i)+1,totalLoadedNodes:r.length}}}getTopLevelGroupIndex(e){let t=-1;const i=Math.min(e,this.flattenedRows.length-1);for(let r=0;r<=i;r++){const e=this.flattenedRows[r];"group"===e.kind&&0===e.depth&&t++}return Math.max(0,t)}attach(e){super.attach(e),this.on("datasource:data",e=>{const t=e;t.claimed||(t.claimed=!0,this.preDefinedGroups=t.rows,this.groupRowsMap.clear(),this.loadingGroups.clear(),this.hasAppliedDefaultExpanded=!1,this.requestRender())}),this.on("datasource:children",e=>{const t=e;if("grouping-rows"!==t.context?.source)return;t.claimed=!0;const i=t.context.groupKey;i&&(this.groupRowsMap.set(i,t.rows),this.loadingGroups.delete(i),this.requestRender())})}onHeaderClick(e){const t=this.groupedFields.indexOf(e.field);if(-1===t)return;if(!e.column.sortable)return;const i=t,r=this.userGroupSortDirections.get(i)??1;return this.userGroupSortDirections.set(i,1===r?-1:1),this.requestRender(),!0}resolveGroupSortDirections(e){const t=this.config;if("function"!=typeof t.groupOn||0===e.length)return void(this.groupedFields=[]);const i=this.columns.map(e=>e.field),r=function(e,t,i){const r=/* @__PURE__ */new Map;if(0===e.length)return r;const n=e[0];let o=t(n);if(null==o||!1===o)return r;Array.isArray(o)||(o=[o]);for(let s=0;s<o.length;s++){const e=o[s];for(const t of i)if(n[t]===e){r.set(s,t);break}}return r}([...e],t.groupOn,i);if(this.groupedFields=[...r.values()],0===r.size)return;const n=new Map(this.userGroupSortDirections);if(n.size<r.size){const e=/* @__PURE__ */new Map,t=this.grid?.query?.("sort:get-model",null);if(Array.isArray(t)&&t.length>0){const i=t[0];if(Array.isArray(i))for(const t of i)e.set(t.field,"desc"===t.direction?-1:1)}if(0===e.size){const t=this.grid._sortState;t&&e.set(t.field,t.direction)}for(const[i,o]of r)if(!n.has(i)){const t=e.get(o);void 0!==t&&n.set(i,t)}}return n.size>0?n:void 0}static detect(e,t){return"function"==typeof t?.groupOn||"boolean"==typeof t?.enableRowGrouping||Array.isArray(t?.groups)}processRows(e){const t=this.pendingExpansion;if(this.pendingExpansion=void 0,this.groupConfigDirty=!1,this.preDefinedGroups.length>0||Array.isArray(this.config.groups))return this.preDefinedGroups.length>0||Array.isArray(this.config.groups)&&this.config.groups.length>0?this.processPreDefinedGroups():(this.isActive=!1,this.flattenedRows=[],[]);const i=this.config;if("function"!=typeof i.groupOn)return this.isActive=!1,this.flattenedRows=[],[...e];const r=this.resolveGroupSortDirections(e),n=gi({rows:[...e],config:i,expanded:/* @__PURE__ */new Set,groupSortDirections:r});if(0===n.length)return this.isActive=!1,this.flattenedRows=[],[...e];let o;const s=void 0!==t;let l;if(s?o=t:this.hasAppliedDefaultExpanded||0!==this.expandedKeys.size||!1===i.defaultExpanded||(o=i.defaultExpanded??!1),void 0!==o){const e=function(e){return e.filter(e=>"group"===e.kind).map(e=>e.key)}(n);l=pi(o,e),(s||l.size>0)&&(this.expandedKeys=new Set(l),this.hasAppliedDefaultExpanded=!0)}const a=gi({rows:[...e],config:i,expanded:this.expandedKeys,initialExpanded:l,groupSortDirections:r});this.isActive=!0,this.flattenedRows=a,this.computeFlatMeta(),s&&this.broadcast("group-toggle",{expandedKeys:[...this.expandedKeys]}),this.keysToAnimate.clear();const d=/* @__PURE__ */new Set;return a.forEach((e,t)=>{if("data"===e.kind){const e=`data-${t}`;d.add(e),this.previousVisibleKeys.has(e)||this.keysToAnimate.add(e)}}),this.previousVisibleKeys=d,a.map(e=>{return"group"===e.kind?{__isGroupRow:!0,__groupKey:e.key,__groupValue:e.value,__groupDepth:e.depth,__groupRows:e.rows,__groupExpanded:e.expanded,__groupRowCount:(t=e,"group"!==t.kind?0:t.rows.length),__rowCacheKey:`group:${e.key}`}:e.row;var t})}onCellClick(e){const t=e.row;if(t?.__isGroupRow&&e.originalEvent.target?.closest(`.${Ge.GROUP_TOGGLE}`))return this.toggle(t.__groupKey),!0}onKeyDown(e){if(" "!==e.key)return;const t=this.grid._focusRow,i=this.rows[t];return i?.__isGroupRow?(e.preventDefault(),this.toggle(i.__groupKey),this.requestRenderWithFocus(),!0):void 0}renderRow(e,t,i){if(!0===e?.__loading&&e?.__groupKey){t.className="data-grid-row",t.__isCustomRow=!0,t.innerHTML="";const e=document.createElement("div");return e.className="cell",e.style.gridColumn="1 / -1",e.setAttribute("role","gridcell"),e.textContent=" ",t.appendChild(e),hi(t,!0),!0}if(!e?.__isGroupRow)return!1;const r=this.config;if(r.groupRowRenderer){const i=()=>{this.toggle(e.__groupKey)},n=r.groupRowRenderer({key:e.__groupKey,value:e.__groupValue,depth:e.__groupDepth,rows:e.__groupRows,expanded:e.__groupExpanded,toggleExpand:i});if(n)return t.className="data-grid-row group-row",t.__isCustomRow=!0,t.setAttribute("data-group-depth",String(e.__groupDepth)),"string"==typeof n?q(t,n):t.replaceChildren(n),!0}const n=()=>{this.toggle(e.__groupKey)};t.className="data-grid-row group-row",t.__isCustomRow=!0,t.setAttribute("data-group-depth",String(e.__groupDepth)),t.setAttribute("role","row"),t.setAttribute("aria-expanded",String(e.__groupExpanded)),t.classList.toggle("tbw-row-expanded",!!e.__groupExpanded);const o=this.flatMeta[i];return o&&(t.setAttribute("aria-level",String(o.level)),t.setAttribute("aria-setsize",String(o.setSize)),t.setAttribute("aria-posinset",String(o.posInSet))),t.style.setProperty("--tbw-group-depth",String(e.__groupDepth||0)),void 0!==r.indentWidth&&t.style.setProperty("--tbw-group-indent-width",`${r.indentWidth}px`),t.style.height="",t.innerHTML="",!1!==r.fullWidth?this.renderFullWidthGroupRow(e,t,n):this.renderPerColumnGroupRow(e,t,n),!0}afterRender(){const e=this.gridElement?.querySelector(".rows");if(!e)return;const t=this.gridElement?.querySelector(".rows-body");t&&"treegrid"!==t.getAttribute("role")&&t.setAttribute("role","treegrid");for(const n of e.querySelectorAll(".data-grid-row:not(.group-row)")){const e=n.querySelector(".cell[data-row]"),t=e?parseInt(e.getAttribute("data-row")??"-1",10):-1,i=this.flatMeta[t];i&&(n.setAttribute("aria-level",String(i.level)),n.setAttribute("aria-setsize",String(i.setSize)),n.setAttribute("aria-posinset",String(i.posInSet)))}const i=this.animationStyle;if(!1===i||0===this.keysToAnimate.size)return;const r="fade"===i?"tbw-group-fade-in":"tbw-group-slide-in";for(const n of e.querySelectorAll(".data-grid-row:not(.group-row)")){const e=n.querySelector(".cell[data-row]"),t=e?parseInt(e.getAttribute("data-row")??"-1",10):-1,i="data"===this.flattenedRows[t]?.kind?`data-${t}`:void 0;i&&this.keysToAnimate.has(i)&&(n.classList.add(r),n.addEventListener("animationend",()=>n.classList.remove(r),{once:!0}))}this.keysToAnimate.clear()}computeFlatMeta(){const e=this.flattenedRows,t=new Array(e.length),i=/* @__PURE__ */new Map,r=/* @__PURE__ */new Map;let n=null,o=0;for(const d of e)if("group"===d.kind){n&&r.set(n.key,o),n=d,o=0;const e=`${d.key.split("||").slice(0,-1).join("||")}@${d.depth}`;i.set(e,(i.get(e)??0)+1)}else o++;n&&r.set(n.key,o);const s=/* @__PURE__ */new Map;let l=null,a=0;for(let d=0;d<e.length;d++){const n=e[d];if("group"===n.kind){const e=`${n.key.split("||").slice(0,-1).join("||")}@${n.depth}`,r=(s.get(e)??0)+1;s.set(e,r),t[d]={level:n.depth+1,setSize:i.get(e)??1,posInSet:r},l=n,a=0}else{a++;const i=l?.depth??-1,n=l?r.get(l.key)??1:e.length;t[d]={level:i+2,setSize:n,posInSet:a}}}this.flatMeta=t}processPreDefinedGroups(){const e=this.preDefinedGroups.length>0?this.preDefinedGroups:Array.isArray(this.config.groups)?this.config.groups:[];if(0===e.length)return this.isActive=!1,this.flattenedRows=[],[];if(!this.hasAppliedDefaultExpanded&&0===this.expandedKeys.size&&!1!==this.config.defaultExpanded){const t=this.collectGroupKeys(e),i=pi(this.config.defaultExpanded??!1,t);i.size>0&&(this.expandedKeys=new Set(i),this.hasAppliedDefaultExpanded=!0)}const t=fi({groups:e,expanded:this.expandedKeys,groupRows:this.groupRowsMap,loadingGroups:this.loadingGroups});this.isActive=!0,this.flattenedRows=t,this.computeFlatMeta(),this.keysToAnimate.clear();const i=/* @__PURE__ */new Set;return t.forEach((e,t)=>{if("data"===e.kind){const e=`data-${t}`;i.add(e),this.previousVisibleKeys.has(e)||this.keysToAnimate.add(e)}}),this.previousVisibleKeys=i,t.map(t=>{if("group"===t.kind){const i=this.findGroupDefinition(e,t.key)?.rowCount??t.rows.length;return{__isGroupRow:!0,__groupKey:t.key,__groupValue:t.value,__groupDepth:t.depth,__groupRows:t.rows,__groupExpanded:t.expanded,__groupRowCount:i,__rowCacheKey:`group:${t.key}`}}return t.row})}collectGroupKeys(e){const t=[];for(const i of e)t.push(i.key),i.children?.length&&t.push(...this.collectGroupKeys(i.children));return t}getActiveGroups(){return this.preDefinedGroups.length>0?this.preDefinedGroups:Array.isArray(this.config.groups)?this.config.groups:[]}findGroupDefinition(e,t){for(const i of e){if(i.key===t)return i;if(i.children?.length){const e=this.findGroupDefinition(i.children,t);if(e)return e}}}createToggleButton(e,t){const i=document.createElement("button");return i.type="button",i.className=`${Ge.GROUP_TOGGLE}${e?` ${Ge.EXPANDED}`:""}`,i.setAttribute("aria-label",e?"Collapse group":"Expand group"),this.setIcon(i,e?"collapse":"expand"),i.addEventListener("click",e=>{e.stopPropagation(),t()}),i}getGroupLabelText(e,t,i){const r=this.config;return r.formatLabel?r.formatLabel(e,t,i):String(e)}renderFullWidthGroupRow(e,t,i){const r=this.config,n=r.aggregators??{},o=e.__groupRows??[],s=document.createElement("div");s.className="cell group-full",s.style.gridColumn="1 / -1",s.setAttribute("role","gridcell"),s.setAttribute("data-col","0"),s.appendChild(this.createToggleButton(e.__groupExpanded,i));const l=document.createElement("span");if(l.className=Ge.GROUP_LABEL,l.textContent=this.getGroupLabelText(e.__groupValue,e.__groupDepth||0,e.__groupKey),s.appendChild(l),!1!==r.showRowCount){const t=document.createElement("span");t.className=Ge.GROUP_COUNT,t.textContent=`(${e.__groupRowCount??e.__groupRows?.length??0})`,s.appendChild(t)}const a=Object.entries(n);if(a.length>0){const e=document.createElement("span");e.className="group-aggregates";for(const[t,i]of a){const r=this.columns.find(e=>e.field===t),n=di.run(i,o,t,r);if(null!=n){const i=document.createElement("span");i.className="group-aggregate",i.setAttribute("data-field",t),i.textContent=`${r?.header??t}: ${n}`,e.appendChild(i)}}e.children.length>0&&s.appendChild(e)}t.appendChild(s)}renderPerColumnGroupRow(e,t,i){const r=this.config,n=r.aggregators??{},o=this.columns,s=e.__groupRows??[],l=(this.gridElement?.querySelector(".body"))?.style.gridTemplateColumns||"";l&&(t.style.display="grid",t.style.gridTemplateColumns=l);let a=!1;o.forEach((o,l)=>{const d=document.createElement("div");if(d.className="cell group-cell",d.setAttribute("data-col",String(l)),d.setAttribute("role","gridcell"),Kt(o))return d.setAttribute("data-field",o.field),void t.appendChild(d);if(a){const e=n[o.field];if(e){const t=di.run(e,s,o.field,o);d.textContent=null!=t?String(t):""}else d.textContent=""}else{a=!0,d.appendChild(this.createToggleButton(e.__groupExpanded,i));const t=document.createElement("span"),l=n[o.field];if(l){const i=di.run(l,s,o.field,o);t.textContent=String(null!=i?i:e.__groupValue)}else t.textContent=this.getGroupLabelText(e.__groupValue,e.__groupDepth||0,e.__groupKey);if(d.appendChild(t),!1!==r.showRowCount){const e=document.createElement("span");e.className=Ge.GROUP_COUNT,e.textContent=` (${s.length})`,d.appendChild(e)}}t.appendChild(d)})}expandAll(){if(this.groupConfigDirty)return this.pendingExpansion=!0,this.expandedKeys=/* @__PURE__ */new Set,void this.requestRender();this.expandedKeys=function(e){const t=/* @__PURE__ */new Set;for(const i of e)"group"===i.kind&&t.add(i.key);return t}(this.flattenedRows),this.broadcast("group-toggle",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}collapseAll(){if(this.groupConfigDirty)return this.pendingExpansion=!1,this.expandedKeys=/* @__PURE__ */new Set,void this.requestRender();this.expandedKeys=/* @__PURE__ */new Set,this.broadcast("group-toggle",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}toggle(e){const t=!this.expandedKeys.has(e),i=this.config,r=this.flattenedRows.find(t=>"group"===t.kind&&t.key===e);if(i.accordion&&t&&r){const t=/* @__PURE__ */new Set;for(const i of this.expandedKeys)if(e.startsWith(i+"||")||i.startsWith(e+"||"))e.startsWith(i+"||")&&t.add(i);else{const e=this.flattenedRows.find(e=>"group"===e.kind&&e.key===i);e&&e.depth!==r.depth&&t.add(i)}t.add(e),this.expandedKeys=t}else this.expandedKeys=function(e,t){const i=new Set(e);return i.has(t)?i.delete(t):i.add(t),i}(this.expandedKeys,e);this.broadcast("group-toggle",{key:e,expanded:this.expandedKeys.has(e),value:r?.value,depth:r?.depth??0,expandedKeys:[...this.expandedKeys]});const n=this.getActiveGroups();if(n.length>0){const i=mi(n,e);if(t){if(this.emit("group-expand",{groupKey:e,groupPath:i}),!this.groupRowsMap.has(e)){const t=this.findGroupDefinition(n,e);t&&(this.loadingGroups.add(e),this.grid?.query?.("datasource:fetch-children",{context:{source:"grouping-rows",groupKey:e,group:t,groupPath:i}}))}}else this.emit("group-collapse",{groupKey:e,groupPath:i})}const o=this.expandedKeys.has(e),s=null!=r?.value?String(r.value):e;if(o){const e=r?.rows?.length??0;qe(this.gridElement,$e(this.gridElement,"groupExpanded",s,e))}else qe(this.gridElement,$e(this.gridElement,"groupCollapsed",s));this.requestRender()}isExpanded(e){return this.expandedKeys.has(e)}expand(e){this.expandedKeys.has(e)||(this.expandedKeys=/* @__PURE__ */new Set([...this.expandedKeys,e]),this.requestRender())}collapse(e){if(this.expandedKeys.has(e)){const t=new Set(this.expandedKeys);t.delete(e),this.expandedKeys=t,this.requestRender()}}getGroupState(){const e=this.flattenedRows.filter(e=>"group"===e.kind);return{isActive:this.isActive,expandedCount:this.expandedKeys.size,totalGroups:e.length,expandedKeys:[...this.expandedKeys]}}getRowCount(){return this.flattenedRows.length}refreshGroups(){this.requestRender()}getExpandedGroups(){return[...this.expandedKeys]}getFlattenedRows(){return this.flattenedRows}isGroupingActive(){return this.isActive}setGroupOn(e,t){this.config.groupOn=e,this.groupConfigDirty=!0,void 0!==t&&(this.pendingExpansion=t,this.expandedKeys=/* @__PURE__ */new Set,this.hasAppliedDefaultExpanded=!1),this.requestRender()}setGroups(e){this.preDefinedGroups=e,this.groupRowsMap.clear(),this.loadingGroups.clear(),this.expandedKeys.clear(),this.hasAppliedDefaultExpanded=!1,this.requestRender()}getGroups(){return this.preDefinedGroups.length>0?[...this.preDefinedGroups]:Array.isArray(this.config.groups)?[...this.config.groups]:[]}setGroupRows(e,t){this.groupRowsMap.set(e,t),this.loadingGroups.delete(e),this.requestRender()}setGroupLoading(e,t){t?this.loadingGroups.add(e):this.loadingGroups.delete(e),this.requestRender()}clearGroupRows(e){null!=e?this.groupRowsMap.delete(e):this.groupRowsMap.clear(),this.requestRender()}};function bi(e,t){return e.has(t)?e.delete(t):e.add(t),e}we("groupingRows",e=>new wi("boolean"==typeof e?{}:e??{}));var vi=class e extends Y{name="masterDetail";styles='@layer tbw-plugins{tbw-grid .cell[data-field=__tbw_expander]{justify-content:center;align-items:center;padding:0;display:flex;border-right:none!important}tbw-grid .header-row .cell[data-field=__tbw_expander]{display:none}tbw-grid .master-detail-expander{justify-content:center;align-items:center;width:100%;height:100%;display:flex}tbw-grid .master-detail-toggle{cursor:pointer;opacity:.7;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:inline-flex}tbw-grid .master-detail-toggle:hover{opacity:1}tbw-grid .master-detail-toggle{position:relative}tbw-grid .master-detail-toggle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}@media (pointer:coarse){tbw-grid .master-detail-toggle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}tbw-grid .master-detail-row{background:var(--tbw-master-detail-bg,var(--tbw-color-row-alt));border-bottom:1px solid var(--tbw-master-detail-border,var(--tbw-color-border));grid-column:1/-1;display:grid;overflow:hidden}tbw-grid .master-detail-cell{padding:var(--tbw-detail-padding,var(--tbw-spacing-xl,1rem));overflow:auto}tbw-grid .master-detail-row.tbw-expanding{animation:tbw-detail-expand var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}tbw-grid .master-detail-row.tbw-collapsing{animation:tbw-detail-collapse var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-detail-expand{0%{opacity:0;max-height:0;padding-top:0;padding-bottom:0}to{opacity:1;max-height:var(--tbw-detail-max-height,31.25rem);padding-top:var(--tbw-detail-padding,var(--tbw-spacing-xl,1rem));padding-bottom:var(--tbw-detail-padding,var(--tbw-spacing-xl,1rem))}}@keyframes tbw-detail-collapse{0%{opacity:1;max-height:var(--tbw-detail-max-height,31.25rem)}to{opacity:0;max-height:0}}}';static dependencies=[{name:"serverSide",required:!1,reason:"Fetches detail data via datasource:fetch-children on expand"}];get#x(){return this.grid}get defaultConfig(){return{detailHeight:"auto",expandOnRowClick:!1,animation:"slide"}}attach(e){super.attach(e),this.parseLightDomDetail(),this.on("datasource:children",e=>{const t=e;if("master-detail"!==t.context?.source)return;t.claimed=!0;const i=t.context.row;if(i&&this.expandedRows.has(i)){this.detailDataMap.set(i,t.rows),this.loadingDetails.delete(i);const e=this.detailElements.get(i);e&&(e.remove(),this.detailElements.delete(i),this.measuredDetailHeights.delete(i)),this.requestRender()}})}parseLightDomDetail(){const e=this.gridElement;if(!e)return;const t=e.querySelector("tbw-grid-detail");if(!t)return;const i=this.#x.__frameworkAdapter;if(i?.parseDetailElement){const e=i.parseDetailElement(t);if(e)return void(this.config={...this.config,detailRenderer:e})}const r=t.getAttribute("animation"),n=t.getAttribute("show-expand-column"),o=t.getAttribute("expand-on-row-click"),s=t.getAttribute("height"),l={};null!==r&&(l.animation="false"!==r&&r),null!==n&&(l.showExpandColumn="false"!==n),null!==o&&(l.expandOnRowClick="true"===o),null!==s&&(l.detailHeight="auto"===s?"auto":parseInt(s,10));const a=t.innerHTML.trim();a&&!this.config.detailRenderer&&(l.detailRenderer=(e,t)=>O(B(a,{value:e,row:e}))),Object.keys(l).length>0&&(this.config={...this.config,...l})}get animationStyle(){return!!this.isAnimationEnabled&&(this.config.animation??"slide")}animateExpand(e,t,i){if(!this.isAnimationEnabled||!1===this.animationStyle)return!1;e.classList.add("tbw-expanding");let r=!1;const n=()=>{r||(r=!0,e.classList.remove("tbw-expanding"),void 0!==t&&void 0!==i&&this.#Be(e,t,i))};return e.addEventListener("animationend",n,{once:!0}),setTimeout(n,this.animationDuration+50),!0}animateCollapse(e,t){if(!this.isAnimationEnabled||!1===this.animationStyle)return void t();e.classList.add("tbw-collapsing");const i=()=>{e.classList.remove("tbw-collapsing"),t()};e.addEventListener("animationend",i,{once:!0}),setTimeout(i,this.animationDuration+50)}#Be(e,t,i){if(!e.isConnected)return;const r=e.offsetHeight;if(r>0){const e=this.measuredDetailHeights.get(t);this.measuredDetailHeights.set(t,r),e!==r&&this.grid.invalidateRowHeight(i)}}expandedRows=/* @__PURE__ */new Set;detailElements=/* @__PURE__ */new Map;measuredDetailHeights=/* @__PURE__ */new Map;rowsToAnimate=/* @__PURE__ */new Set;loadingDetails=/* @__PURE__ */new Set;detailDataMap=/* @__PURE__ */new Map;static DEFAULT_DETAIL_HEIGHT=150;getDetailHeight(t){const i=this.detailElements.get(t);if(i&&!i.classList.contains("tbw-expanding")&&!i.classList.contains("tbw-collapsing")){const e=i.offsetHeight;if(e>0)return this.measuredDetailHeights.set(t,e),e}const r=this.measuredDetailHeights.get(t);return r&&r>0?r:"number"==typeof this.config?.detailHeight?this.config.detailHeight:e.DEFAULT_DETAIL_HEIGHT}toggleAndEmit(e,t){if(e?.__isGroupRow)return;this.expandedRows=bi(this.expandedRows,e);const i=this.expandedRows.has(e);i?(this.rowsToAnimate.add(e),this.detailDataMap.has(e)||this.queryBoolean("datasource:is-active")&&(this.loadingDetails.add(e),this.grid.query("datasource:fetch-children",{context:{source:"master-detail",row:e,rowIndex:t}}))):this.loadingDetails.delete(e),this.emit("detail-expand",{rowIndex:t,row:e,expanded:i}),this.requestRender()}detach(){this.expandedRows.clear(),this.detailElements.clear(),this.measuredDetailHeights.clear(),this.rowsToAnimate.clear(),this.loadingDetails.clear(),this.detailDataMap.clear()}processColumns(e){if(!(!0===this.config.showExpandColumn||!1!==this.config.showExpandColumn&&this.config.detailRenderer))return[...e];const t=[...e];if(function(e){return e.find(Kt)}(t))return t;const i=(r=this.name,{field:Vt,header:"",width:32,resizable:!1,sortable:!1,filterable:!1,lockPosition:!0,utility:!0,meta:{expanderColumn:!0,expanderPlugin:r}});var r;return i.viewRenderer=e=>{const{row:t}=e,i=this.expandedRows.has(t),r=document.createElement("span");r.className="master-detail-expander expander-cell";const n=document.createElement("span");return n.className="master-detail-toggle"+(i?" expanded":""),this.setIcon(n,i?"collapse":"expand"),n.setAttribute("role","button"),n.setAttribute("tabindex","0"),n.setAttribute("aria-expanded",String(i)),n.setAttribute("aria-label",i?"Collapse details":"Expand details"),r.appendChild(n),r},[i,...t]}onRowClick(e){if(this.config.expandOnRowClick&&this.config.detailRenderer)return this.toggleAndEmit(e.row,e.rowIndex),!1}onCellClick(e){if((e.originalEvent?.target)?.classList.contains("master-detail-toggle"))return this.toggleAndEmit(e.row,e.rowIndex),!0;this.expandedRows.size>0&&queueMicrotask(()=>this.#Ve())}onKeyDown(e){if(" "!==e.key)return;const t=this.grid._focusCol,i=this.grid._focusRow,r=this.visibleColumns[t];if(!r||!Kt(r))return;const n=this.rows[i];return n?(e.preventDefault(),this.toggleAndEmit(n,i),this.requestRenderWithFocus(),!0):void 0}afterRender(){this.#Ke(),this.#Ve()}#Ke(){const e=this.gridElement?.querySelector('.header-row .cell[data-field="__tbw_expander"]');if(!e)return;const t=parseInt(e.getAttribute("data-col")||"0",10),i=e.nextElementSibling;i&&(i.style.gridColumn=`${t+1} / ${t+3}`)}onScrollRender(){this.config.detailRenderer&&0!==this.expandedRows.size&&this.#Ve()}#Ve(){const e=this.config.detailRenderer;if(!e)return;const t=this.gridElement?.querySelector(".rows");if(!t)return;const i=this.#je(t);this.#Ue(i);const r=this.columns.length;for(const[n,o]of i){const t=this.rows[n];if(!t)continue;const i=this.expandedRows.has(t);if(o.classList.toggle("tbw-row-expanded",i),!i)continue;const s=this.detailElements.get(t);s?s.previousElementSibling!==o&&o.after(s):this.#Ye(t,n,o,r,e)}}#je(e){const t=this.grid,i=t._rowPool,r=t._virtualization?.start??0,n=t._virtualization?.end??0,o=/* @__PURE__ */new Map;if(i){const t=Math.min(i.length,n-r);for(let n=0;n<t;n++){const t=i[n];t.parentNode===e&&o.set(r+n,t)}return o}for(const s of e.querySelectorAll(".data-grid-row")){const e=s.querySelector(".cell[data-row]"),t=e?parseInt(e.getAttribute("data-row")??"-1",10):-1;t>=0&&o.set(t,s)}return o}#Ue(e){for(const[t,i]of this.detailElements){const r=this.rows.indexOf(t),n=r>=0&&e.has(r);if(this.expandedRows.has(t)&&n)continue;const o=this.#x.__frameworkAdapter;if(o?.unmount){const e=i.querySelector(".master-detail-cell")?.firstElementChild;e&&o.unmount(e)}i.parentNode&&i.remove(),this.detailElements.delete(t)}}#Ye(e,t,i,r,n){const o=function(e,t,i,r){const n=document.createElement("div");n.className="master-detail-row",n.setAttribute("data-detail-for",String(t)),n.setAttribute("role","row");const o=document.createElement("div");o.className="master-detail-cell",o.setAttribute("role","cell"),o.style.gridColumn=`1 / ${r+1}`;const s=i(e,t);return"string"==typeof s?q(o,s):s instanceof HTMLElement&&o.appendChild(s),n.appendChild(o),n}(e,t,n,r);"number"==typeof this.config.detailHeight&&(o.style.height=`${this.config.detailHeight}px`),i.after(o),this.detailElements.set(e,o);const s=this.rowsToAnimate.has(e);s&&this.rowsToAnimate.delete(e),s&&this.animateExpand(o,e,t)||requestAnimationFrame(()=>{this.#Be(o,e,t)})}getRowHeight(e,t){if(this.expandedRows.has(e))return(this.grid.defaultRowHeight??28)+this.getDetailHeight(e)}adjustVirtualStart(e,t,i){if(0===this.expandedRows.size)return e;const r=this.grid?._virtualization?.positionCache;let n=e;if(r&&r.length>0)for(const o of this.expandedRows){const i=this.rows.indexOf(o);i<0||i>=e||r[i].offset+r[i].height>t&&i<n&&(n=i)}else{const r=[];for(const e of this.expandedRows){const t=this.rows.indexOf(e);t>=0&&r.push({index:t,row:e})}r.sort((e,t)=>e.index-t.index);let o=0;for(const{index:s,row:l}of r){const r=s*i+o,a=this.getDetailHeight(l);o+=a,s>=e||r+i+a>t&&s<n&&(n=s)}}return n}expand(e){const t=this.rows[e];t&&!t.__isGroupRow&&(this.rowsToAnimate.add(t),this.expandedRows=function(e,t){return e.add(t),e}(this.expandedRows,t),this.requestRender())}collapse(e){const t=this.rows[e];t&&(this.expandedRows=function(e,t){return e.delete(t),e}(this.expandedRows,t),this.requestRender())}toggle(e){const t=this.rows[e];t&&!t.__isGroupRow&&(this.expandedRows=bi(this.expandedRows,t),this.expandedRows.has(t)&&this.rowsToAnimate.add(t),this.requestRender())}isExpanded(e){const t=this.rows[e];return!!t&&function(e,t){return e.has(t)}(this.expandedRows,t)}expandAll(){for(const e of this.rows)e?.__isGroupRow||(this.rowsToAnimate.add(e),this.expandedRows.add(e));this.requestRender()}collapseAll(){this.expandedRows.clear(),this.requestRender()}getExpandedRows(){const e=[];for(const t of this.expandedRows){const i=this.rows.indexOf(t);i>=0&&e.push(i)}return e}getDetailElement(e){const t=this.rows[e];return t?this.detailElements.get(t):void 0}getDetailData(e){const t=this.rows[e];return t?this.detailDataMap.get(t):void 0}isDetailLoading(e){const t=this.rows[e];return!!t&&this.loadingDetails.has(t)}refreshDetailRenderer(){const e=this.config.detailRenderer;if(this.config={...this.config,detailRenderer:void 0},this.parseLightDomDetail(),!this.config.detailRenderer&&e&&(this.config={...this.config,detailRenderer:e}),this.config.detailRenderer){const e=this.#x;"function"==typeof e.refreshColumns?e.refreshColumns():this.requestRender()}}};we("masterDetail",e=>new vi("boolean"==typeof e?{}:e??{}));var yi=new Intl.Collator(void 0,{sensitivity:"variant"});function Ci(e,t){return null==e&&null==t?0:null==e?1:null==t?-1:"number"==typeof e&&"number"==typeof t?e-t:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():"boolean"==typeof e&&"boolean"==typeof t?e===t?0:e?-1:1:yi.compare("string"==typeof e?e:String(e),"string"==typeof t?t:String(t))}function xi(e,t){const i=e.findIndex(e=>e.field===t);return i>=0?i+1:void 0}function Ri(e,t){return e.find(e=>e.field===t)?.direction}var Si=class extends Y{static manifest={queries:[{type:"sort:get-model",description:"Returns the current multi-sort model as SortModel[]"},{type:"sort:set-model",description:"Sets the multi-sort model from context (SortModel[])"}]};name="multiSort";styles='@layer tbw-plugins{.header-cell[data-sort=asc]:after{content:"↑";margin-left:var(--tbw-spacing-xs,.25em);opacity:.8}.header-cell[data-sort=desc]:after{content:"↓";margin-left:var(--tbw-spacing-xs,.25em);opacity:.8}.sort-indicator{margin-left:var(--tbw-spacing-xs,.25em);opacity:.8}.sort-index{font-size:var(--tbw-font-size-2xs,.7em);background:var(--tbw-multi-sort-badge-bg,var(--tbw-color-panel-bg));color:var(--tbw-multi-sort-badge-color,var(--tbw-color-fg));width:var(--tbw-multi-sort-badge-size,1em);height:var(--tbw-multi-sort-badge-size,1em);margin-left:var(--tbw-spacing-xs,.125em);border-radius:50%;justify-content:center;align-items:center;font-weight:600;display:inline-flex}}';get defaultConfig(){return{maxSortColumns:3,showSortIndex:!0}}sortModel=[];cachedSortResult=null;#Ze=!1;#Xe=[];get#x(){return this.grid}clearCoreSortState(){this.#x._sortState=null}#Qe(e){const t=this.grid?.query?.("grouping:get-grouped-fields",null);if(!Array.isArray(t)||0===t.length)return e;const i=t[0];if(!Array.isArray(i)||0===i.length)return e;const r=new Set(i),n=e.filter(e=>!r.has(e.field));return n.length===e.length?e:n}detach(){this.sortModel=[],this.cachedSortResult=null}handleQuery(e){switch(e.type){case"sort:get-model":return[...this.sortModel];case"sort:set-model":{const t=e.context;return!!Array.isArray(t)&&(this.sortModel=[...t],this.clearCoreSortState(),this.broadcast("sort-change",{sortModel:[...this.sortModel]}),this.requestRender(),!0)}default:return}}processRows(e){if(0===this.sortModel.length)return this.cachedSortResult=null,[...e];const t=this.#x;if(!t._isGridEditMode&&"number"==typeof t._activeEditRows&&-1!==t._activeEditRows&&this.cachedSortResult&&this.cachedSortResult.length===e.length)return[...this.cachedSortResult];const i=this.#Qe(this.sortModel),r=e;return i.length>0&&function(e,t,i){if(!t.length)return;const r=t.map(e=>{const t=i.find(t=>t.field===e.field),r=t?.sortComparator??Ci,n=e.field,o=t?.valueAccessor?e=>c(e,t):e=>e[n];return{field:n,asc:"asc"===e.direction,comparator:r,getValue:o,pinPlaceholders:!t?.sortComparator}}),n=r.some(e=>e.pinPlaceholders)&&function(e){for(let t=0;t<e.length;t++)if(!0===e[t]?.__loading)return!0;return!1}(e),o=e.length,s=r.length,l=new Array(o*s);for(let c=0;c<o;c++){const t=e[c],i=c*s;for(let e=0;e<s;e++)l[i+e]=r[e].getValue(t)}const a=o<=4294967295?new Uint32Array(o):new Array(o);for(let c=0;c<o;c++)a[c]=c;const d=(t,i)=>{if(n){const r=function(e,t){const i=!0===e?.__loading;return i===(!0===t?.__loading)?0:i?1:-1}(e[t],e[i]);if(0!==r)return r}const o=t*s,a=i*s;for(let n=0;n<s;n++){const s=r[n],d=s.comparator(l[o+n],l[a+n],e[t],e[i]);if(0!==d)return s.asc?d:-d}return 0};Uint32Array,a.sort(d);const u=e.slice();for(let c=0;c<o;c++)e[c]=u[a[c]]}(r,i,this.columns),this.cachedSortResult=r,r}onHeaderClick(e){if(!this.columns.find(t=>t.field===e.field)?.sortable)return!1;const t=e.originalEvent.shiftKey,i=this.config.maxSortColumns??3;if(this.sortModel=function(e,t,i,r){const n=e.find(e=>e.field===t);return i?n?"asc"===n.direction?e.map(e=>e.field===t?{...e,direction:"desc"}:e):e.filter(e=>e.field!==t):e.length<r?[...e,{field:t,direction:"asc"}]:e:"asc"===n?.direction?[{field:t,direction:"desc"}]:"desc"===n?.direction?[]:[{field:t,direction:"asc"}]}(this.sortModel,e.field,t,i),this.clearCoreSortState(),this.broadcast("sort-change",{sortModel:[...this.sortModel]}),this.requestRender(),this.grid?.requestStateChange?.(),this.sortModel.length>0){const e=this.sortModel.map(e=>`${this.columns.find(t=>t.field===e.field)?.header??e.field} ${"asc"===e.direction?"ascending":"descending"}`);qe(this.gridElement,$e(this.gridElement,"sortApplied",e.join(", then "),""))}else qe(this.gridElement,$e(this.gridElement,"sortCleared"));return!0}afterRender(){const e=this.gridElement;if(!e)return;const t=!1!==this.config.showSortIndex;e.querySelectorAll(".header-row .cell[data-field]").forEach(e=>{const i=e.getAttribute("data-field");if(!i)return;const r=xi(this.sortModel,i),n=Ri(this.sortModel,i);if(e.querySelector(".sort-index")?.remove(),n){const i=this.updateSortIndicator(e,n);if(t&&this.sortModel.length>1&&void 0!==r){const t=document.createElement("span");t.className="sort-index",t.textContent=String(r),i.nextSibling?e.insertBefore(t,i.nextSibling):e.appendChild(t)}}else e.classList.contains("sortable")&&this.updateSortIndicator(e,null)})}getSortModel(){return[...this.sortModel]}setSortModel(e){if(this.sortModel=[...e],this.clearCoreSortState(),this.broadcast("sort-change",{sortModel:[...e]}),this.requestRender(),this.grid?.requestStateChange?.(),e.length>0){const t=e.map(e=>`${this.columns.find(t=>t.field===e.field)?.header??e.field} ${"asc"===e.direction?"ascending":"descending"}`);qe(this.gridElement,$e(this.gridElement,"sortApplied",t.join(", then "),""))}}clearSort(){this.sortModel=[],this.clearCoreSortState(),this.broadcast("sort-change",{sortModel:[]}),this.requestRender(),this.grid?.requestStateChange?.(),qe(this.gridElement,$e(this.gridElement,"sortCleared"))}getSortIndex(e){return xi(this.sortModel,e)}getSortDirection(e){return Ri(this.sortModel,e)}getColumnState(e){const t=this.sortModel.findIndex(t=>t.field===e);if(-1!==t)return{sort:{direction:this.sortModel[t].direction,priority:t}}}applyColumnState(e,t){if(this.#Ze||(this.#Xe=[...this.sortModel]),t.sort){const i=this.sortModel.findIndex(t=>t.field===e),r={field:e,direction:t.sort.direction};-1!==i?this.sortModel[i]=r:this.sortModel.splice(t.sort.priority,0,r)}else this.sortModel=this.sortModel.filter(t=>t.field!==e);this.clearCoreSortState(),this.#Ze||(this.#Ze=!0,queueMicrotask(()=>{this.#Ze=!1;const e=this.#Xe;this.#Xe=[],function(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i].field!==t[i].field||e[i].direction!==t[i].direction)return!1;return!0}(e,this.sortModel)||(this.broadcast("sort-change",{sortModel:[...this.sortModel]}),this.requestRender())}))}};function Ei(e){return e.pinned??e.meta?.pinned}function Ai(e,t){return function(e,t){return"left"===e||"right"===e?e:"rtl"===t?"start"===e?"right":"left":"start"===e?"left":"right"}(e,t)}function _i(e,t){const i=Ei(e);return!!i&&"left"===Ai(i,t)}function ki(e,t){const i=Ei(e);return!!i&&"right"===Ai(i,t)}function Ti(e){for(let t=0;t<e.length;t++)if(null!=e[t].pinned||null!=e[t].meta?.pinned)return!0;return!1}function Mi(e,t){const i={groupEndAdjustments:{addGroupEnd:/* @__PURE__ */new Set,removeGroupEnd:/* @__PURE__ */new Set},leftOffsets:/* @__PURE__ */new Map,rightOffsets:/* @__PURE__ */new Map,splitGroups:[]},r=Array.from(e.querySelectorAll(".header-row .cell"));if(!r.length)return i;const n=Ue(e),o=/* @__PURE__ */new Map,s=/* @__PURE__ */new Map;let l=0;for(const u of t)if(_i(u,n)){const t=r.find(e=>e.getAttribute("data-field")===u.field);t&&(o.set(u.field,l),t.classList.add(Ge.STICKY_LEFT),t.style.position="sticky",t.style.left=l+"px",e.querySelectorAll(`.data-grid-row .cell[data-field="${u.field}"]`).forEach(e=>{e.classList.add(Ge.STICKY_LEFT),e.style.position="sticky",e.style.left=l+"px"}),l+=t.offsetWidth)}let a=0;for(const u of[...t].reverse())if(ki(u,n)){const t=r.find(e=>e.getAttribute("data-field")===u.field);t&&(s.set(u.field,a),t.classList.add(Ge.STICKY_RIGHT),t.style.position="sticky",t.style.right=a+"px",e.querySelectorAll(`.data-grid-row .cell[data-field="${u.field}"]`).forEach(e=>{e.classList.add(Ge.STICKY_RIGHT),e.style.position="sticky",e.style.right=a+"px"}),a+=t.offsetWidth)}const d=[],c=function(e,t,i,r,n){const o={addGroupEnd:/* @__PURE__ */new Set,removeGroupEnd:/* @__PURE__ */new Set},s=Array.from(e.querySelectorAll(".header-group-row .header-group-cell"));if(!s.length)return o;for(const l of s){const e=l.style.gridColumn;if(!e)continue;const s=e.match(/^(\d+)\s*\/\s*span\s+(\d+)$/);if(!s)continue;const a=parseInt(s[1],10)-1,d=a+parseInt(s[2],10)-1,c=t.slice(a,d+1);if(!c.length)continue;const u=c.every(e=>_i(e,r)),h=c.every(e=>ki(e,r));if(u){const e=c[0].field,t=i.find(t=>t.getAttribute("data-field")===e);t&&(l.classList.add(Ge.STICKY_LEFT),l.style.position="sticky",l.style.left=t.style.left)}else if(h){const e=c[c.length-1].field,t=i.find(t=>t.getAttribute("data-field")===e);t&&(l.classList.add(Ge.STICKY_RIGHT),l.style.position="sticky",l.style.right=t.style.right)}else if(l.classList.contains("implicit-group"))Li(l,c,a,i,r,o);else{const e=c.some(e=>_i(e,r)),t=c.some(e=>ki(e,r));(e||t)&&Di(l,c,a,i,r,o,n)}}return o}(e,t,r,n,d);if(c.addGroupEnd.size>0||c.removeGroupEnd.size>0){for(const t of c.addGroupEnd){const i=r.find(e=>e.getAttribute("data-field")===t);i&&i.classList.add("group-end"),e.querySelectorAll(`.data-grid-row .cell[data-field="${t}"]`).forEach(e=>{e.classList.add("group-end")})}for(const t of c.removeGroupEnd){const i=r.find(e=>e.getAttribute("data-field")===t);i&&i.classList.remove("group-end"),e.querySelectorAll(`.data-grid-row .cell[data-field="${t}"]`).forEach(e=>{e.classList.remove("group-end")})}}return{groupEndAdjustments:c,leftOffsets:o,rightOffsets:s,splitGroups:d}}function Ii(e,t){return _i(e,t)?"left":ki(e,t)?"right":"none"}function Li(e,t,i,r,n,o){const s=[];for(let d=0;d<t.length;d++){const e=Ii(t[d],n),r=s[s.length-1];r&&r.state===e?r.cols.push(t[d]):s.push({state:e,cols:[t[d]],colStart:i+d})}if(s.length<=1)return;const l=e.parentElement;if(!l)return;const a=e.nextSibling;l.removeChild(e);for(const d of s){const t=document.createElement("div");if(t.className=e.className,t.setAttribute("data-group",e.getAttribute("data-group")||""),t.style.gridColumn=`${d.colStart+1} / span ${d.cols.length}`,"left"===d.state){const e=d.cols[0].field,i=r.find(t=>t.getAttribute("data-field")===e);i&&(t.classList.add(Ge.STICKY_LEFT),t.style.position="sticky",t.style.left=i.style.left)}else if("right"===d.state){const e=d.cols[d.cols.length-1].field,i=r.find(t=>t.getAttribute("data-field")===e);i&&(t.classList.add(Ge.STICKY_RIGHT),t.style.position="sticky",t.style.right=i.style.right)}else"none"===d.state&&d.cols.every(e=>String(e.field||"").startsWith("__tbw_"))&&(t.style.borderRightStyle="none");a?l.insertBefore(t,a):l.appendChild(t)}for(let d=0;d<s.length;d++){const e=s[d],t=s[d+1];if("none"!==e.state&&t&&"none"===t.state){const t=e.cols[e.cols.length-1].field;t&&o.addGroupEnd.add(t)}if("none"===e.state&&e.cols.every(e=>String(e.field||"").startsWith("__tbw_"))){const t=e.cols[e.cols.length-1].field;t&&o.removeGroupEnd.add(t)}}}function Di(e,t,i,r,n,o,s){const l=[];for(let y=0;y<t.length;y++){const e=Ii(t[y],n),r=l[l.length-1];r&&r.state===e?r.cols.push(t[y]):l.push({state:e,cols:[t[y]],colStart:i+y})}if(l.length<=1)return;const a=e.parentElement;if(!a)return;const d=e.textContent||"",c=e.getAttribute("data-group")||"",u=e.nextSibling;a.removeChild(e);const h=l.findIndex(e=>"left"===e.state);let g=-1;for(let y=l.length-1;y>=0;y--)if("right"===l[y].state){g=y;break}const p=h>=0?h:g,f=h>=0&&h+1<l.length?h+1:g>=0&&g-1>=0?g-1:-1;let m,w,b,v="";for(let y=0;y<l.length;y++){const t=l[y],i=document.createElement("div");if(i.className=e.className,i.setAttribute("data-group",c),i.style.gridColumn=`${t.colStart+1} / span ${t.cols.length}`,"left"===t.state){const e=t.cols[0].field,n=r.find(t=>t.getAttribute("data-field")===e);n&&(i.classList.add(Ge.STICKY_LEFT),i.style.position="sticky",i.style.left=n.style.left),y===p&&(i.style.borderRightStyle="none",m=i,v=t.cols[t.cols.length-1].field)}else if("right"===t.state){const e=t.cols[t.cols.length-1].field,n=r.find(t=>t.getAttribute("data-field")===e);n&&(i.classList.add(Ge.STICKY_RIGHT),i.style.position="sticky",i.style.right=n.style.right),y===p&&(i.style.borderLeftStyle="none",m=i,v=t.cols[0].field)}if(y===f){i.style.overflow="visible";const e=document.createElement("span");e.textContent=d,e.style.position="relative",e.style.zIndex="36",e.style.display="block",e.style.overflow="hidden",e.style.textOverflow="ellipsis",e.style.whiteSpace="nowrap",i.appendChild(e),w=i,b=e}u?a.insertBefore(i,u):a.appendChild(i)}m&&w&&b&&v&&s.push({groupId:c,label:d,pinnedFragment:m,scrollableFragment:w,floatLabel:b,pinnedField:v,isTransferred:!1,floatOffset:0})}function Pi(e){e.querySelectorAll(`.${Ge.STICKY_LEFT}, .${Ge.STICKY_RIGHT}`).forEach(e=>{e.classList.remove(Ge.STICKY_LEFT,Ge.STICKY_RIGHT),e.style.position="",e.style.left="",e.style.right=""})}we("multiSort",e=>!0===e||"multi"===e?new Si:new Si("single"===e?{maxSortColumns:1}:e));var Fi="canMoveColumn",Hi=class extends Y{static manifest={hookPriority:{processColumns:-10},ownedProperties:[{property:"pinned",level:"column",description:'the "pinned" column property',isUsed:e=>"left"===e||"right"===e||"start"===e||"end"===e}],queries:[{type:Fi,description:"Prevents pinned columns from being moved/reordered"},{type:"getStickyOffsets",description:"Returns the offsets for left/right pinned columns"},{type:"getContextMenuItems",description:"Contributes pin/unpin items to the header context menu"}]};name="pinnedColumns";get defaultConfig(){return{}}isApplied=!1;leftOffsets=/* @__PURE__ */new Map;rightOffsets=/* @__PURE__ */new Map;#Je={addGroupEnd:/* @__PURE__ */new Set,removeGroupEnd:/* @__PURE__ */new Set};#et=[];#tt=[];#M=/* @__PURE__ */new WeakSet;detach(){this.leftOffsets.clear(),this.rightOffsets.clear(),this.isApplied=!1,this.#Je={addGroupEnd:/* @__PURE__ */new Set,removeGroupEnd:/* @__PURE__ */new Set},this.#et=[],this.#tt=[],this.#M=/* @__PURE__ */new WeakSet}static detect(e,t){const i=t?.columns;return!!Array.isArray(i)&&Ti(i)}processColumns(e){const t=[...e];for(const r of t){const e=r.__element;if(!e||this.#M.has(e))continue;if(this.#M.add(e),null!=r.pinned)continue;const t=e.getAttribute("pinned");"left"!==t&&"right"!==t&&"start"!==t&&"end"!==t||(r.pinned=t)}if(this.isApplied=Ti(t),!this.isApplied)return t;const i=this.gridElement;return function(e,t="ltr"){const i=[],r=[],n=[];for(const o of e){const e=Ei(o);e?"left"===Ai(e,t)?i.push(o):n.push(o):r.push(o)}return[...i,...r,...n]}(t,i?Ue(i):"ltr")}afterRender(){if(!this.isApplied)return;const e=this.gridElement,t=[...this.columns];if(!Ti(t))return Pi(e),void(this.isApplied=!1);queueMicrotask(()=>{const i=Mi(e,t);this.#Je=i.groupEndAdjustments,this.leftOffsets=i.leftOffsets,this.rightOffsets=i.rightOffsets,this.#et=i.splitGroups,this.#it()})}afterCellRender(e){if(!this.isApplied)return;const t=e.column.field,i=e.cellElement,r=this.leftOffsets.get(t);if(void 0!==r)i.classList.contains(Ge.STICKY_LEFT)||i.classList.add(Ge.STICKY_LEFT),i.style.position="sticky",i.style.left=r+"px";else{const e=this.rightOffsets.get(t);void 0!==e&&(i.classList.contains(Ge.STICKY_RIGHT)||i.classList.add(Ge.STICKY_RIGHT),i.style.position="sticky",i.style.right=e+"px")}this.#Je.addGroupEnd.has(t)?e.cellElement.classList.add("group-end"):this.#Je.removeGroupEnd.has(t)&&e.cellElement.classList.remove("group-end")}onScroll(e){this.#it()}#it(){if(!this.isApplied||0===this.#et.length)return;const e=this.gridElement;for(const t of this.#et){const i=t.pinnedFragment.getBoundingClientRect(),r=t.scrollableFragment.getBoundingClientRect().right<=i.right;if(r&&!t.isTransferred?(t.pinnedFragment.textContent=t.label,t.pinnedFragment.style.overflow="hidden",t.pinnedFragment.style.textOverflow="ellipsis",t.pinnedFragment.style.whiteSpace="nowrap",t.pinnedFragment.style.borderRightStyle="",t.floatLabel.style.visibility="hidden",t.floatLabel.style.transform="",t.floatOffset=0,this.#Je.addGroupEnd.add(t.pinnedField),e.querySelectorAll(`.header-row .cell[data-field="${t.pinnedField}"], .data-grid-row .cell[data-field="${t.pinnedField}"]`).forEach(e=>e.classList.add("group-end")),t.isTransferred=!0):!r&&t.isTransferred&&(t.pinnedFragment.textContent="",t.pinnedFragment.style.overflow="",t.pinnedFragment.style.textOverflow="",t.pinnedFragment.style.whiteSpace="",t.pinnedFragment.style.borderRightStyle="none",t.floatLabel.style.visibility="",t.floatLabel.style.transform="",t.floatOffset=0,this.#Je.addGroupEnd.delete(t.pinnedField),e.querySelectorAll(`.header-row .cell[data-field="${t.pinnedField}"], .data-grid-row .cell[data-field="${t.pinnedField}"]`).forEach(e=>e.classList.remove("group-end")),t.isTransferred=!1),!t.isTransferred){const e=t.floatLabel.getBoundingClientRect().left-t.floatOffset,r=i.left;e<r?(t.floatOffset=r-e,t.floatLabel.style.transform=`translateX(${t.floatOffset}px)`):(t.floatOffset=0,t.floatLabel.style.transform="")}}}handleQuery(e){switch(e.type){case Fi:return null==Ei(e.context)&&void 0;case"getStickyOffsets":return{left:Object.fromEntries(this.leftOffsets),right:Object.fromEntries(this.rightOffsets)};case"getContextMenuItems":{const t=e.context;if(!t.isHeader)return;const i=t.column;if(!i?.field)return;if(i.lockPinning||i.meta?.lockPinning)return;const r=[];return null!=Ei(i)?r.push({id:"pinned/unpin",label:this.t("pinnedColumns.unpin","Unpin Column"),icon:"📌",order:40,action:()=>this.setPinPosition(i.field,void 0)}):(r.push({id:"pinned/pin-left",label:this.t("pinnedColumns.pinLeft","Pin Left"),icon:"⬅",order:40,action:()=>this.setPinPosition(i.field,"left")}),r.push({id:"pinned/pin-right",label:this.t("pinnedColumns.pinRight","Pin Right"),icon:"➡",order:41,action:()=>this.setPinPosition(i.field,"right")})),r}default:return}}setPinPosition(e,t){const i=this.columns;if(!i?.length)return;const r=i.findIndex(t=>t.field===e);if(-1===r)return;const n=this.gridElement;if(t)0===this.#tt.length&&(this.#tt=i.map(e=>e.field)),n.columns=i.map(i=>{if(i.field!==e)return i;const r={...i};return r.pinned=t,r});else{const t={...i[r]};delete t.pinned;const o=[...i];o.splice(r,1);const s=this.#tt.indexOf(e);if(s>=0){let e=o.length;for(let t=0;t<o.length;t++)if(!Ei(o[t])&&this.#tt.indexOf(o[t].field)>s){e=t;break}o.splice(e,0,t)}else o.splice(Math.min(r,o.length),0,t);o.some(e=>null!=Ei(e))||(this.#tt=[]),n.columns=o}}refreshStickyOffsets(){const e=[...this.columns],t=Mi(this.gridElement,e);this.#Je=t.groupEndAdjustments,this.leftOffsets=t.leftOffsets,this.rightOffsets=t.rightOffsets,this.#et=t.splitGroups}getLeftPinnedColumns(){return function(e,t="ltr"){return e.filter(e=>_i(e,t))}([...this.columns],Ue(this.gridElement))}getRightPinnedColumns(){return function(e,t="ltr"){return e.filter(e=>ki(e,t))}([...this.columns],Ue(this.gridElement))}clearStickyPositions(){Pi(this.gridElement)}getHorizontalScrollOffsets(e,t){if(!this.isApplied)return;let i=0,r=0;if(e){const t=e.querySelectorAll(`.${Ge.STICKY_LEFT}`),n=e.querySelectorAll(`.${Ge.STICKY_RIGHT}`);t.forEach(e=>{i+=e.offsetWidth}),n.forEach(e=>{r+=e.offsetWidth})}else this.gridElement.querySelectorAll(".header-row .cell").forEach(e=>{e.classList.contains(Ge.STICKY_LEFT)?i+=e.offsetWidth:e.classList.contains(Ge.STICKY_RIGHT)&&(r+=e.offsetWidth)});const n=t?.classList.contains(Ge.STICKY_LEFT)||t?.classList.contains(Ge.STICKY_RIGHT);return{left:i,right:r,skipScroll:n}}};function Gi(e,t,i,r){const n=document.createElement("div");n.className="tbw-aggregation-cell tbw-aggregation-cell-full",n.style.gridColumn="1 / -1";const o="function"==typeof t.label?t.label(r,i):t.label;if(o){const e=document.createElement("span");e.className="tbw-aggregation-label",e.textContent=o,n.appendChild(e)}const s=function(e,t,i){const r=e.aggregators&&Object.keys(e.aggregators).length>0,n=e.cells&&Object.keys(e.cells).length>0;if(!r&&!n)return null;const o=document.createElement("span");o.className="tbw-aggregation-aggregates";for(const s of t){const{value:t,formatter:r}=Oi(e,s,i);if(null!=t){const e=document.createElement("span");e.className="tbw-aggregation-aggregate",e.setAttribute("data-field",s.field),e.textContent=`${s.header??s.field}: ${r?r(t,s.field,s):String(t)}`,o.appendChild(e)}}return o.children.length>0?o:null}(t,i,r);s&&n.appendChild(s),e.appendChild(n)}function zi(e,t,i,r){for(const o of i){const i=document.createElement("div");i.className="tbw-aggregation-cell",i.setAttribute("data-field",o.field);const{value:n,formatter:s}=Oi(t,o,r);i.textContent=null!=n?s?s(n,o.field,o):String(n):"",e.appendChild(i)}const n="function"==typeof t.label?t.label(r,i):t.label;if(n){const t=document.createElement("span");t.className="tbw-aggregation-label",t.textContent=n,e.appendChild(t)}}function Oi(e,t,i){let r,n;const o=e.aggregators?.[t.field];if(o)if("object"==typeof(s=o)&&null!==s&&"aggFunc"in s){const e=di.get(o.aggFunc);e&&(r=e(i,t.field,t)),n=o.formatter}else{const e=di.get(o);e&&(r=e(i,t.field,t))}else if(e.cells&&Object.prototype.hasOwnProperty.call(e.cells,t.field)){const n=e.cells[t.field];r="function"==typeof n?n(i,t.field,t):n}var s;return{value:r,formatter:n}}function Ni(e,t,i,r,n){const o=i?.sourceRows,s=i?.rows,l=Array.isArray(o)?o.length:e.length,a=Array.isArray(s)?s.length:e.length,d=l>0?l:a;return{totalRows:d,filteredRows:n?.cachedResult?.length??(a<l?a:d),selectedRows:r?.selected?.size??0,columns:t,rows:e,grid:i}}function qi(){return e=>{const t=document.createElement("span");return t.className="tbw-status-panel tbw-status-panel-row-count",t.textContent=`Total: ${e.totalRows} rows`,t}}function $i(){return e=>{if(e.selectedRows<=0)return null;const t=document.createElement("span");return t.className="tbw-status-panel tbw-status-panel-selected-count",t.textContent=`Selected: ${e.selectedRows}`,t}}function Wi(){return e=>{if(e.filteredRows===e.totalRows)return null;const t=document.createElement("span");return t.className="tbw-status-panel tbw-status-panel-filtered-count",t.textContent=`Filtered: ${e.filteredRows}`,t}}function Bi(e){const t=document.createElement("div");return t.className="tbw-status-panel tbw-status-panel-custom",t.appendChild(e),t}we("pinnedColumns",e=>new Hi);var Vi=/* @__PURE__ */new WeakMap;function Ki(e,t,i){const r=Array.isArray(e.render)?e.render:[{zone:"left",render:e.render}],n=r.map(e=>e.render(t)??null);if(i){const e=Vi.get(i);if(e&&e.length===n.length&&e.every((e,t)=>e===n[t]))return i}const o=document.createElement("div");o.className="tbw-pinned-rows",o.setAttribute("role","presentation"),o.setAttribute("aria-live","polite"),e.id&&o.setAttribute("data-pinned-row-id",e.id);const s=document.createElement("div");s.className="tbw-pinned-rows-left";const l=document.createElement("div");l.className="tbw-pinned-rows-center";const a=document.createElement("div");a.className="tbw-pinned-rows-right";const d={left:s,center:l,right:a};for(let c=0;c<r.length;c++){const e=r[c],t=n[c];if(null==t)continue;const i=e.zone??"left",o=t.classList?.contains("tbw-status-panel");d[i].appendChild(o?t:Bi(t))}return 0===s.children.length&&0===l.children.length&&0===a.children.length?null:(o.appendChild(s),o.appendChild(l),o.appendChild(a),Vi.set(o,n),o)}function ji(e,t,i,r,n=!1){const o=function(e){const t=document.createElement("div");return t.className=`tbw-aggregation-rows tbw-aggregation-rows-${e}`,t.setAttribute("role","presentation"),t}(t);return function(e,t,i,r,n=!1){e.innerHTML="";for(const o of t){const t=document.createElement("div");t.className="tbw-aggregation-row",t.setAttribute("role","presentation"),o.id&&t.setAttribute("data-aggregation-id",o.id),o.fullWidth??n?Gi(t,o,i,r):zi(t,o,i,r),e.appendChild(t)}}(o,[e],i,r,n),o}var Ui=class extends Y{name="pinnedRows";styles="@layer tbw-plugins{.tbw-scroll-area{container-type:inline-size}.tbw-footer,.tbw-header-pinned{z-index:var(--tbw-z-layer-pinned-rows,20);background:var(--tbw-color-panel-bg);flex-shrink:0;min-width:-moz-fit-content;min-width:fit-content}.tbw-pinned-rows{padding:var(--tbw-button-padding,var(--tbw-spacing-md,.5rem) var(--tbw-spacing-lg,.75rem));background:var(--tbw-pinned-rows-bg,var(--tbw-color-panel-bg));border-top:1px solid var(--tbw-pinned-rows-border,var(--tbw-color-border));font-size:var(--tbw-font-size-xs,.75rem);color:var(--tbw-pinned-rows-color,var(--tbw-color-fg-muted));box-sizing:border-box;justify-content:space-between;align-items:center;width:100cqi;min-width:0;min-height:32px;display:flex;position:sticky;left:0}.tbw-pinned-rows+.tbw-pinned-rows{border-top:0}.tbw-pinned-rows-left,.tbw-pinned-rows-center,.tbw-pinned-rows-right{align-items:center;gap:var(--tbw-spacing-xl,1rem);display:flex}.tbw-pinned-rows-left{justify-content:flex-start}.tbw-pinned-rows-center{flex:1;justify-content:center}.tbw-pinned-rows-right{justify-content:flex-end}.tbw-status-panel{white-space:nowrap}.tbw-aggregation-rows{background:var(--tbw-aggregation-bg,var(--tbw-color-header-bg));min-width:-moz-fit-content;min-width:fit-content}.tbw-aggregation-rows-top{border-bottom:1px solid var(--tbw-aggregation-border,var(--tbw-color-border))}.tbw-aggregation-rows-bottom{border-top:1px solid var(--tbw-aggregation-border,var(--tbw-color-border))}.tbw-aggregation-row{grid-template-columns:var(--tbw-column-template);font-size:var(--tbw-aggregation-font-size,.8em);font-weight:var(--tbw-aggregation-font-weight,600);background:inherit;display:grid;position:relative}.tbw-aggregation-row>.tbw-aggregation-label{padding:var(--tbw-cell-padding,.125rem .5rem);background:inherit;z-index:1;pointer-events:none;grid-area:1/1;align-items:center;display:flex;position:sticky;left:0}.tbw-aggregation-row>.tbw-aggregation-cell:first-child{grid-area:1/1}.tbw-aggregation-cell:not(:empty){z-index:2;background:inherit;position:relative}.tbw-aggregation-cell{padding:var(--tbw-cell-padding,.125rem .5rem);min-height:var(--tbw-row-height,1.75rem);border-right:1px solid var(--tbw-color-border-cell);text-overflow:ellipsis;white-space:var(--tbw-cell-white-space,nowrap);align-content:center;align-items:center;display:block;overflow:hidden}.tbw-aggregation-cell:last-child{border-right:0}.tbw-aggregation-cell-full{align-items:center;gap:var(--tbw-spacing-lg,.75rem);border-right:0;grid-column:1/-1;display:flex}.tbw-aggregation-label{white-space:nowrap}.tbw-aggregation-aggregates{align-items:center;gap:var(--tbw-spacing-lg,.75rem);opacity:.85;font-weight:400;display:flex}.tbw-aggregation-aggregate{white-space:nowrap}}";get defaultConfig(){return{slots:[{position:"bottom",render:[{zone:"left",render:qi()},{zone:"left",render:Wi()},{zone:"right",render:$i()}]}]}}footerWrapper=null;headerWrapper=null;detach(){this.cleanup()}afterRender(){const e=this.gridElement;if(!e)return;const t=e.querySelector(".tbw-scroll-area")??e.querySelector(".tbw-grid-content")??e.querySelector(".tbw-grid-root");if(!t)return;this.footerWrapper&&!t.contains(this.footerWrapper)&&(this.footerWrapper=null),this.headerWrapper&&!t.contains(this.headerWrapper)&&(this.headerWrapper=null);const i=this.getSelectionState(),r=this.getFilterState(),n=Ni(this.sourceRows,this.columns,this.gridElement,i,r);this.renderSlotMode(t,e,n)}renderSlotMode(e,t,i){const r=this.config.slots??[],n=r.filter(e=>"top"===e.position),o=r.filter(e=>"top"!==e.position);n.length>0?(this.headerWrapper||(this.headerWrapper=document.createElement("div"),this.headerWrapper.className="tbw-header-pinned",e.insertBefore(this.headerWrapper,e.firstChild)),this.populateSlotWrapper(this.headerWrapper,n,"top",i)):this.headerWrapper&&(this.headerWrapper.remove(),this.headerWrapper=null),o.length>0?(this.footerWrapper||(this.footerWrapper=document.createElement("div"),this.footerWrapper.className="tbw-footer",e.appendChild(this.footerWrapper)),this.populateSlotWrapper(this.footerWrapper,o,"bottom",i)):this.footerWrapper&&(this.footerWrapper.remove(),this.footerWrapper=null)}populateSlotWrapper(e,t,i,r){const n=/* @__PURE__ */new Map;for(let l=0;l<e.children.length;l++){const t=e.children[l],i=t.getAttribute("data-pinned-row-id");i&&n.set(i,t)}const o=[];for(const l of t){const e="render"in l&&null!=l.render?Ki(l,r,l.id?n.get(l.id)??null:null):ji(l,i,this.visibleColumns,this.sourceRows,this.config.fullWidth);e&&o.push(e)}const s=e.children;if(s.length===o.length){let e=!0;for(let t=0;t<o.length;t++)if(s[t]!==o[t]){e=!1;break}if(e)return}e.replaceChildren(...o)}cleanup(){this.footerWrapper&&(this.footerWrapper.remove(),this.footerWrapper=null),this.headerWrapper&&(this.headerWrapper.remove(),this.headerWrapper=null)}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}getFilterState(){try{return this.grid?.getPluginState?.("filtering")??null}catch{return null}}refresh(){this.requestRender()}getContext(){const e=this.getSelectionState(),t=this.getFilterState();return Ni(this.rows,this.columns,this.gridElement,e,t)}};function Yi(e,t){const i=/* @__PURE__ */new Map;for(const n of t)i.set(n.field,(i.get(n.field)??0)+1);const r=/* @__PURE__ */new Set;return t.map((t,n)=>{const o=function(e,t){return[...e,t].join("|")}(e,t.field);if((i.get(t.field)??0)<2)return o;const s="string"==typeof t.aggFunc?t.aggFunc:"custom",l=`${o}|${s}`,a=`${t.field}\0${s}`;return r.has(a)?`${l}|${n+1}`:(r.add(a),l)})}function Zi(e,t){const i=t.rowGroupFields??[],r=t.columnGroupFields??[],n=t.valueFields??[],o=function(e,t,i="asc"){if(0===t.length)return["value"];const r=/* @__PURE__ */new Set;for(const o of e){const e=t.map(e=>String(o[e]??"")).join("|");r.add(e)}const n=[...r].sort();return"desc"===i?n.reverse():n}(e,r,t.sortColumns),s=er(e,i,r,o,n,0,"");t.sortRows&&nr(s,t.sortRows,n);const l=function(e,t,i){const r={},n=t.flatMap(e=>Yi([e],i));function o(e){for(const t of e)if(t.isGroup&&t.children?.length)t.children&&o(t.children);else for(const e of n)r[e]=(r[e]??0)+(t.values[e]??0)}return o(e),r}(s,o,n);return{rows:s,columnKeys:o,totals:l,grandTotal:Object.values(l).reduce((e,t)=>e+t,0)}}function Xi(e,t){const{aggFunc:i,field:r}=t;if("function"==typeof i){const t=[];for(let i=0;i<e.length;i++){const n=e[i][r];if(null==n||""===n)continue;const o=Number(n);isNaN(o)||t.push(o)}return t.length>0?i(t):null}if("first"===i){for(let t=0;t<e.length;t++){const i=e[t][r];if(null==i||""===i)continue;const n=Number(i);if(!isNaN(n))return n}return null}if("last"===i){for(let t=e.length-1;t>=0;t--){const i=e[t][r];if(null==i||""===i)continue;const n=Number(i);if(!isNaN(n))return n}return null}let n="min"===i?1/0:"max"===i?-1/0:0,o=0;for(let s=0;s<e.length;s++){const t=e[s][r];if(null==t||""===t)continue;const l=Number(t);isNaN(l)||(o++,"min"===i?l<n&&(n=l):"max"===i?l>n&&(n=l):"count"!==i&&(n+=l))}return 0===o?null:"avg"===i?n/o:"count"===i?o:n}function Qi(e,t,i,r,n){let o=0,s=0,l=1/0,a=-1/0,d=null,c=null;for(let u=0;u<e.length;u++){const i=e[u][t];if(null==i||""===i)continue;const r=Number(i);isNaN(r)||(0===s&&(d=r),c=r,o+=r,s++,r<l&&(l=r),r>a&&(a=r))}for(let u=0;u<i.length;u++){const e=i[u];if(e.field!==t||"function"==typeof e.aggFunc)continue;let h;h=0===s?null:"avg"===e.aggFunc?o/s:"count"===e.aggFunc?s:"min"===e.aggFunc?l:"max"===e.aggFunc?a:"first"===e.aggFunc?d:"last"===e.aggFunc?c:o,n[r[u]]=h}}function Ji(e,t,i,r){for(let n=0;n<t.length;n++){const o=t[n];let s=!1,l=0;for(let e=0;e<t.length;e++)t[e].field===o.field&&(e<n&&(s=!0),"function"!=typeof t[e].aggFunc&&l++);if(!s){l>1&&Qi(e,o.field,t,i,r);for(let s=n;s<t.length;s++){const n=t[s];n.field===o.field&&(l>1&&"function"!=typeof n.aggFunc||(r[i[s]]=Xi(e,n)))}}}}function er(e,t,i,r,n,o,s){const l=[];if(0===t.length){const t=tr(e,i,r,n),a=ir(t);return l.push({rowKey:s||"all",rowLabel:s||"All",depth:o,values:t,total:a,isGroup:!1,rowCount:e.length}),l}const a=t[0],d=t.slice(1),c=d.length>0,u=function(e,t){const i=/* @__PURE__ */new Map;for(const r of e){const e=String(r[t]??""),n=i.get(e);n?n.push(r):i.set(e,[r])}return i}(e,a);for(const[h,g]of u){const e=s?`${s}|${h}`:h,t=tr(g,i,r,n),a=ir(t);let u;c&&(u=er(g,d,i,r,n,o+1,e)),l.push({rowKey:e,rowLabel:h||"(blank)",depth:o,values:t,total:a,isGroup:c,children:u,rowCount:g.length})}return l}function tr(e,t,i,r){const n={};if(0===t.length)return Ji(e,r,Yi(["value"],r),n),n;const o=/* @__PURE__ */new Map;for(let s=0;s<e.length;s++){const i=e[s];let r=String(i[t[0]]??"");for(let e=1;e<t.length;e++)r+="|",r+=String(i[t[e]]??"");const n=o.get(r);n?n.push(i):o.set(r,[i])}for(const s of i){const e=Yi([s],r),t=o.get(s);if(t&&0!==t.length)Ji(t,r,e,n);else for(const i of e)n[i]=null}return n}function ir(e){let t=0;for(const i of Object.values(e))t+=i??0;return t}function rr(e){const t=[];function i(e){if(e.isGroup&&t.push(e.rowKey),e.children)for(const t of e.children)i(t)}for(const r of e)i(r);return t}function nr(e,t,i){const r="desc"===t.direction?-1:1;e.sort((e,n)=>"value"===t.by&&(t.valueField??i[0]?.field)?((e.total??0)-(n.total??0))*r:e.rowLabel.localeCompare(n.rowLabel)*r);for(const n of e)n.children?.length&&nr(n.children,t,i)}function or(e,t,i){if(0===t.length)return;const r=new Set(i.map(e=>e.field)),n=t.map(e=>"value"===e.by?e.valueField?t=>((e,t)=>{if(null!=e.values[t])return"number"==typeof e.values[t]?e.values[t]:0;if(r.has(t)){const i=`|${t}`;let r=0,n=!1;for(const t of Object.keys(e.values))t.endsWith(i)&&(r+="number"==typeof e.values[t]?e.values[t]:0,n=!0);if(n)return r}return e.total??0})(t,e.valueField):e=>e.total??0:null);e.sort((e,i)=>{for(let r=0;r<t.length;r++){const o=t[r],s="desc"===o.direction?-1:1;let l=0;if("value"===o.by){const t=n[r];l=(t(e)-t(i))*s}else l=e.rowLabel.localeCompare(i.rowLabel)*s;if(0!==l)return l}return 0});for(const o of e)o.children?.length&&or(o.children,t,i)}we("pinnedRows",e=>new Ui("boolean"==typeof e?{}:e??{}));var sr;function lr(){return"function"==typeof HTMLElement.prototype?.showPopover}function ar(e){return"inline"===e.effectiveConfig?.a11y?.dragAlternatives||(void 0===sr&&(sr=globalThis.matchMedia?.("(hover: none)")??null),sr?.matches??!1)}function dr(e,t){let i=null,r=!1,n=!1;const o=new AbortController;function s(){r&&i&&(r=!1,lr()&&i.hidePopover(),i.hidden=!0)}return document.addEventListener("pointerdown",e=>{r&&i&&!e.composedPath().includes(i)&&s()},{capture:!0,signal:o.signal}),document.addEventListener("keydown",e=>{"Escape"===e.key&&s()},{capture:!0,signal:o.signal}),{get element(){return i},open(l,a,d){if(n||0===d.length)return;i||(i=function(){const i=document.createElement("div");return i.id=e,i.className=t,i.setAttribute("popover","manual"),i.setAttribute("role","group"),i.hidden=!0,i.addEventListener("focusout",e=>{const t=e.relatedTarget;t instanceof Node&&!i.contains(t)&&s()},{signal:o.signal}),i}());const c=l.closest("tbw-grid, [data-tbw-grid]")??document.body;i.parentNode!==c&&c.appendChild(i),i.setAttribute("aria-label",a),i.replaceChildren();for(const e of d){const r=document.createElement("button");r.type="button",r.className=`${t}-item`,r.textContent=e.label,r.disabled=!0===e.disabled,r.addEventListener("click",()=>{s(),e.run()}),i.appendChild(r)}i.hidden=!1,!r&&lr()&&i.showPopover(),r=!0,function(e){if(!i)return;const t=e.getBoundingClientRect(),r=i.getBoundingClientRect(),n=Math.max(4,Math.min(t.left,window.innerWidth-r.width-4)),o=t.bottom+6,s=o+r.height<=window.innerHeight?o:Math.max(4,t.top-6-r.height);i.style.left=`${Math.round(n)}px`,i.style.top=`${Math.round(s)}px`}(l),i.querySelector("button:not([disabled])")?.focus()},close:s,dispose(){n=!0,s(),o.abort(),i?.remove(),i=null}}}var cr=null,ur=["sum","avg","count","min","max","first","last"];function hr(e,t,i,r,n=(e,t)=>t){const o=new AbortController,s={config:t,callbacks:r,signal:o.signal,t:n},l=document.createElement("div");return l.className="tbw-pivot-panel",l.appendChild(mr(n("pivot.options","Options"),()=>function(e,t){const{config:i,callbacks:r,signal:n,t:o}=t,s=document.createElement("div");return s.className="tbw-pivot-options",s.appendChild(yr(o("pivot.enable","Enable Pivot View"),e,e=>{r.onTogglePivot(e)},n)),s.appendChild(yr(o("pivot.showRowTotals","Show Row Totals"),i.showTotals??!0,e=>{r.onOptionChange("showTotals",e)},n)),s.appendChild(yr(o("pivot.showGrandTotal","Show Grand Total"),i.showGrandTotal??!0,e=>{r.onOptionChange("showGrandTotal",e)},n)),s}(i,s))),l.appendChild(mr(n("pivot.rowGroups","Row Groups"),()=>wr("rowGroups",s))),l.appendChild(mr(n("pivot.columnGroups","Column Groups"),()=>wr("columnGroups",s))),l.appendChild(mr(n("pivot.values","Values"),()=>function(e){const{config:t,callbacks:i,signal:r}=e,n=document.createElement("div");n.className="tbw-pivot-drop-zone tbw-pivot-values-zone",n.setAttribute("data-zone","values");const o=t.valueFields??[];if(0===o.length){const t=document.createElement("div");t.className="tbw-pivot-placeholder",t.textContent=e.t("pivot.dropNumericFields","Drag numeric fields here"),n.appendChild(t)}else for(const s of o)n.appendChild(vr(s,e));return n.addEventListener("dragover",e=>{e.preventDefault(),n.classList.add("drag-over")},{signal:r}),n.addEventListener("dragleave",()=>{n.classList.remove("drag-over")},{signal:r}),n.addEventListener("drop",e=>{e.preventDefault(),n.classList.remove("drag-over");const t=e.dataTransfer?.getData("text/plain");t&&i.onAddValueField(t,"sum")},{signal:r}),n}(s))),l.appendChild(mr(n("pivot.availableFields","Available Fields"),()=>function(e){const{config:t,callbacks:i,signal:r}=e,n=document.createElement("div");n.className="tbw-pivot-available-fields";const o=i.getAvailableFields(),s=/* @__PURE__ */new Set([...t.rowGroupFields??[],...t.columnGroupFields??[],...t.valueFields?.map(e=>e.field)??[]]),l=o.filter(e=>!s.has(e.field));if(0===l.length){const t=document.createElement("div");t.className="tbw-pivot-placeholder",t.textContent=e.t("pivot.allFieldsUsed","All fields are in use"),n.appendChild(t)}else{const t=document.createElement("div");if(t.className="tbw-pivot-fields-list",l.length>=6){const i=document.createElement("input");i.type="text",i.placeholder=e.t("pivot.filterFields","Filter fields…"),i.className="tbw-pivot-field-search",i.addEventListener("input",()=>{const e=i.value.toLowerCase();for(const i of t.querySelectorAll(".tbw-pivot-field-chip")){const t=i;t.style.display=t.textContent?.toLowerCase().includes(e)?"":"none"}},{signal:r}),n.appendChild(i)}for(const i of l){const n=document.createElement("div");n.className="tbw-pivot-field-chip available",n.textContent=i.header,n.draggable=!0,n.title=e.t("pivot.availableChipHint","Drag into a zone, or click to choose one"),pr(n,i.header,e.t),n.addEventListener("dragstart",e=>{e.dataTransfer?.setData("text/plain",i.field),n.classList.add(Ge.DRAGGING)},{signal:r}),n.addEventListener("dragend",()=>{n.classList.remove(Ge.DRAGGING)},{signal:r}),n.addEventListener("click",()=>gr(n,i.header,fr(i.field,e)),{signal:r}),t.appendChild(n)}n.appendChild(t)}return n}(s))),e.appendChild(l),()=>{o.abort(),cr?.dispose(),cr=null,l.remove()}}function gr(e,t,i){cr??=dr("tbw-pivot-chip-menu","tbw-pivot-chip-menu"),cr.open(e,t,i)}function pr(e,t,i){e.setAttribute("role","button"),e.tabIndex=-1,e.setAttribute("aria-label",`${t} — ${i("pivot.chipHint","drag, or activate for move options")}`)}function fr(e,t){const{callbacks:i,t:r}=t;return[{label:r("pivot.addToRowGroups","Add to Row Groups"),run:()=>i.onAddFieldToZone(e,"rowGroups")},{label:r("pivot.addToColumnGroups","Add to Column Groups"),run:()=>i.onAddFieldToZone(e,"columnGroups")},{label:r("pivot.addToValues","Add to Values"),run:()=>i.onAddValueField(e,"sum")}]}function mr(e,t){const i=document.createElement("div");i.className="tbw-pivot-section";const r=document.createElement("div");r.className="tbw-pivot-section-header",r.textContent=e;const n=document.createElement("div");return n.className="tbw-pivot-section-content",n.appendChild(t()),i.appendChild(r),i.appendChild(n),i}function wr(e,t){const{config:i,callbacks:r,signal:n}=t,o=document.createElement("div");o.className="tbw-pivot-drop-zone",o.setAttribute("data-zone",e);const s="rowGroups"===e?i.rowGroupFields??[]:i.columnGroupFields??[];if(0===s.length){const e=document.createElement("div");e.className="tbw-pivot-placeholder",e.textContent=t.t("pivot.dropFields","Drag fields here"),o.appendChild(e)}else for(const l of s)o.appendChild(br(l,e,t));return o.addEventListener("dragover",e=>{e.preventDefault(),o.classList.add("drag-over")},{signal:n}),o.addEventListener("dragleave",()=>{o.classList.remove("drag-over")},{signal:n}),o.addEventListener("drop",t=>{t.preventDefault(),o.classList.remove("drag-over");const i=t.dataTransfer?.getData("text/plain"),n=t.dataTransfer?.getData("source-zone");if(!i)return;const s=o.querySelectorAll(".tbw-pivot-field-chip");let l=s.length;for(let e=0;e<s.length;e++){const i=s[e].getBoundingClientRect();if(t.clientY<i.top+i.height/2){l=e;break}}!n||n===e||"rowGroups"!==n&&"columnGroups"!==n?n===e?r.onReorderFieldInZone(i,e,l):r.onAddFieldToZone(i,e):r.onMoveFieldBetweenZones(i,n,e)},{signal:n}),o}function br(e,t,i){const{callbacks:r,signal:n}=i,o=document.createElement("div");o.className="tbw-pivot-field-chip",o.draggable=!0;const s=r.getAvailableFields().find(t=>t.field===e)?.header??e,l=document.createElement("span");l.className="tbw-pivot-chip-label",l.textContent=s,pr(l,s,i.t);const a=document.createElement("button");return a.type="button",a.className="tbw-pivot-chip-remove",a.innerHTML="×",a.title=i.t("pivot.removeField","Remove field"),a.addEventListener("click",i=>{i.stopPropagation(),r.onRemoveFieldFromZone(e,t)},{signal:n}),o.appendChild(l),o.appendChild(a),o.addEventListener("dragstart",i=>{i.dataTransfer?.setData("text/plain",e),i.dataTransfer?.setData("source-zone",t),o.classList.add(Ge.DRAGGING)},{signal:n}),o.addEventListener("dragend",()=>{o.classList.remove(Ge.DRAGGING)},{signal:n}),o.addEventListener("click",()=>gr(o,s,function(e,t,i){const{config:r,callbacks:n,t:o}=i,s="rowGroups"===t?r.rowGroupFields??[]:r.columnGroupFields??[],l=s.indexOf(e),a="rowGroups"===t?"columnGroups":"rowGroups";return[{label:o("pivot.moveUp","Move up"),disabled:l<=0,run:()=>n.onReorderFieldInZone(e,t,l-1)},{label:o("pivot.moveDown","Move down"),disabled:l<0||l>=s.length-1,run:()=>n.onReorderFieldInZone(e,t,l+2)},{label:"columnGroups"===a?o("pivot.moveToColumnGroups","Move to Column Groups"):o("pivot.moveToRowGroups","Move to Row Groups"),run:()=>n.onMoveFieldBetweenZones(e,t,a)},{label:o("pivot.moveToValues","Move to Values"),run:()=>n.onAddValueField(e,"sum")},{label:o("pivot.removeField","Remove field"),run:()=>n.onRemoveFieldFromZone(e,t)}]}(e,t,i)),{signal:n}),o}function vr(e,t){const{callbacks:i,signal:r}=t,n=document.createElement("div");n.className="tbw-pivot-field-chip tbw-pivot-value-chip";const o=i.getAvailableFields().find(t=>t.field===e.field),s=document.createElement("div");s.className="tbw-pivot-value-label-wrapper";const l=document.createElement("span");l.className="tbw-pivot-chip-label",l.textContent=o?.header??e.field;const a="function"==typeof e.aggFunc,d=document.createElement("select");if(d.className="tbw-pivot-agg-select",d.title=t.t("pivot.aggFunction","Aggregation function"),a){const e=document.createElement("option");e.value="__custom__",e.textContent=t.t("pivot.customAgg","CUSTOM"),e.selected=!0,d.appendChild(e),d.disabled=!0}for(const u of ur){const t=document.createElement("option");t.value=u,t.textContent=u.toUpperCase(),a||(t.selected=u===e.aggFunc),d.appendChild(t)}d.addEventListener("change",()=>{i.onUpdateValueAggFunc(e.field,d.value)},{signal:r});const c=document.createElement("button");return c.type="button",c.className="tbw-pivot-chip-remove",c.innerHTML="×",c.title=t.t("pivot.removeValueField","Remove value field"),c.addEventListener("click",t=>{t.stopPropagation(),i.onRemoveValueField(e.field)},{signal:r}),s.appendChild(l),s.appendChild(d),n.appendChild(s),n.appendChild(c),n}function yr(e,t,i,r){const n=document.createElement("label");n.className="tbw-pivot-checkbox";const o=document.createElement("input");o.type="checkbox",o.checked=t,o.addEventListener("change",()=>i(o.checked),{signal:r});const s=document.createElement("span");return s.textContent=e,n.appendChild(o),n.appendChild(s),n}function Cr(e,t,i,r=(e,t)=>t){return t.className="data-grid-row pivot-grand-total-row",t.innerHTML="",i.forEach((i,n)=>{const o=document.createElement("div");if(o.className="cell",o.setAttribute("data-col",String(n)),0===n){const e=document.createElement("span");e.className="pivot-label",e.textContent=r("pivot.grandTotal","Grand Total"),o.appendChild(e)}else{const t=e[i.field];o.textContent=null!=t?i.format?i.format(t,e):String(t):""}t.appendChild(o)}),!0}var xr=class e extends Y{static manifest={modifiesRowStructure:!0,hookPriority:{onHeaderClick:-10,processRows:100},incompatibleWith:[{name:"groupingRows",reason:"PivotPlugin creates its own aggregated row and column structure. Row grouping cannot be applied on top of pivot-generated rows."},{name:"tree",reason:"PivotPlugin replaces the entire row and column structure with aggregated pivot data. Tree hierarchy cannot coexist with pivot aggregation."},{name:"serverSide",reason:"PivotPlugin requires the full dataset to compute aggregations. ServerSidePlugin lazy-loads rows in blocks, so pivot aggregation cannot be performed client-side."}],queries:[{type:"sort:get-sort-config",description:"Returns the current pivot sort configuration"}]};static dependencies=[{name:"multiSort",required:!1,reason:"Queries sort model for pivot column sorting"},{name:"shell",required:!1,severity:"warn",when:e=>!0===e.showToolPanel,reason:"PivotPlugin renders its tool panel in a shell host when showToolPanel is enabled"}];name="pivot";styles='@layer tbw-plugins{.pivot-group-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-pivot-group-bg,var(--tbw-color-row-alt));min-height:var(--tbw-row-height);border-bottom:var(--tbw-row-divider);font-weight:600;display:grid}@media (hover:hover){.pivot-group-row:hover{background:var(--tbw-pivot-group-hover,var(--tbw-color-row-hover))}}.pivot-leaf-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-pivot-leaf-bg,var(--tbw-color-bg));min-height:var(--tbw-row-height);border-bottom:var(--tbw-row-divider);display:grid}.pivot-grand-total-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-pivot-grand-total-bg,var(--tbw-color-header-bg));min-height:var(--tbw-row-height);border-top:2px solid var(--tbw-color-border-strong);font-weight:700;display:grid}.pivot-grand-total-row>.cell{padding:var(--tbw-cell-padding);border-right:1px solid var(--tbw-color-border-cell);align-items:center;min-width:0;display:flex;overflow:hidden}.pivot-grand-total-row>.cell:last-child{border-right:0}.pivot-grand-total-footer{z-index:var(--tbw-z-layer-pinned-rows,20);background:var(--tbw-pivot-grand-total-bg,var(--tbw-color-header-bg));min-width:-moz-fit-content;min-width:fit-content;position:sticky;bottom:0}.pivot-group-row>.cell,.pivot-leaf-row>.cell{padding:var(--tbw-cell-padding);border-right:1px solid var(--tbw-color-border-cell);align-items:center;min-width:0;display:flex;overflow:hidden}.pivot-group-row>.cell:last-child,.pivot-leaf-row>.cell:last-child{border-right:0}.pivot-toggle{width:var(--tbw-pivot-toggle-size,var(--tbw-toggle-size,1.25em));height:var(--tbw-pivot-toggle-size,var(--tbw-toggle-size,1.25em));margin-right:var(--tbw-spacing-sm,.375em);cursor:pointer;color:var(--tbw-pivot-toggle-color,var(--tbw-color-fg-muted));border-radius:var(--tbw-border-radius);transition:background var(--tbw-transition-duration,.12s) var(--tbw-transition-ease,ease), color var(--tbw-transition-duration,.12s) var(--tbw-transition-ease,ease);background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}.pivot-toggle:hover{background:var(--tbw-pivot-toggle-hover-bg,var(--tbw-color-row-hover));color:var(--tbw-pivot-toggle-hover-color,var(--tbw-color-fg))}.pivot-toggle{position:relative}.pivot-toggle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}@media (pointer:coarse){.pivot-toggle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}.pivot-toggle:focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}.pivot-label{font-weight:inherit}.pivot-count{color:var(--tbw-pivot-count-color,var(--tbw-color-fg-muted));font-size:.9em;font-weight:400}.pivot-total-row{border-top:2px solid var(--tbw-pivot-border,var(--tbw-color-border-strong));font-weight:700}[data-pivot-depth="1"]{--tbw-pivot-depth:1}[data-pivot-depth="2"]{--tbw-pivot-depth:2}[data-pivot-depth="3"]{--tbw-pivot-depth:3}[data-pivot-depth="4"]{--tbw-pivot-depth:4}.tbw-pivot-panel{gap:var(--tbw-panel-padding,var(--tbw-spacing-lg,.75rem));padding:var(--tbw-panel-padding,var(--tbw-spacing-lg,.75rem));height:100%;font-size:var(--tbw-font-size-sm,.8125rem);flex-direction:column;display:flex;overflow-y:auto}.tbw-pivot-section{border:1px solid var(--tbw-pivot-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius);background:var(--tbw-pivot-section-bg,var(--tbw-color-bg))}.tbw-pivot-section-header{padding:var(--tbw-button-padding,var(--tbw-spacing-md,.5rem) var(--tbw-spacing-lg,.75rem));background:var(--tbw-pivot-header-bg,var(--tbw-color-header-bg));border-bottom:1px solid var(--tbw-pivot-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius) var(--tbw-border-radius) 0 0;font-weight:600}.tbw-pivot-section-content{padding:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem))}.tbw-pivot-toggle-wrapper{align-items:center;display:flex}.tbw-pivot-toggle-label{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));cursor:pointer;display:flex}.tbw-pivot-toggle-label input{width:var(--tbw-icon-size,1rem);height:var(--tbw-icon-size,1rem);cursor:pointer}.tbw-pivot-drop-zone{min-height:60px;padding:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));border:2px dashed var(--tbw-pivot-drop-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius);background:var(--tbw-pivot-drop-bg,var(--tbw-color-row-alt));gap:var(--tbw-spacing-sm,.375rem);flex-wrap:wrap;align-content:flex-start;transition:all .15s;display:flex}.tbw-pivot-drop-zone.drag-over{border-color:var(--tbw-color-accent);background:var(--tbw-pivot-drop-active,var(--tbw-focus-background))}.tbw-pivot-placeholder{color:var(--tbw-color-fg-muted);padding:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));text-align:center;width:100%;font-style:italic}.tbw-pivot-field-chip{align-items:center;gap:var(--tbw-spacing-sm,.375rem);padding:var(--tbw-button-padding-sm,var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-md,.5rem));background:var(--tbw-pivot-chip-bg,var(--tbw-color-header-bg));border:1px solid var(--tbw-pivot-chip-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius);cursor:grab;font-size:var(--tbw-font-size-xs,.75rem);transition:all .15s;display:inline-flex}.tbw-pivot-field-chip:hover{background:var(--tbw-pivot-chip-hover,var(--tbw-color-row-hover));border-color:var(--tbw-color-accent)}.tbw-pivot-field-chip.available{background:var(--tbw-color-bg)}.tbw-pivot-field-chip.dragging{opacity:.5;cursor:grabbing}.tbw-pivot-chip-label{white-space:nowrap;text-overflow:ellipsis;max-width:120px;overflow:hidden}.tbw-pivot-chip-remove{width:var(--tbw-icon-size,1rem);height:var(--tbw-icon-size,1rem);color:var(--tbw-color-fg-muted);font-size:var(--tbw-font-size-sm,.875rem);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-weight:700;transition:all .15s;display:flex}.tbw-pivot-chip-remove:hover{background:var(--tbw-pivot-chip-remove-hover-bg,var(--tbw-color-accent));color:var(--tbw-pivot-chip-remove-hover-fg,var(--tbw-color-accent-fg))}.tbw-pivot-chip-menu{min-width:12rem;padding:var(--tbw-spacing-xs,.25rem);background:var(--tbw-color-panel-bg,light-dark(#fff,#1f1f1f));color:var(--tbw-color-fg,light-dark(#1a1a1a,#f0f0f0));border:1px solid var(--tbw-color-border,light-dark(#d0d0d0,#3a3a3a));border-radius:var(--tbw-border-radius,.25rem);box-shadow:var(--tbw-shadow-md,0 4px 12px #00000040);font:inherit;z-index:10001;flex-direction:column;margin:0;display:flex;position:fixed}.tbw-pivot-chip-menu[hidden]{display:none}.tbw-pivot-chip-menu-item{min-height:var(--tbw-touch-target-min,24px);padding:var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-sm,.5rem);text-align:start;border-radius:min(var(--tbw-border-radius,.25rem), 6px);color:inherit;font:inherit;cursor:pointer;background:0 0;border:none}.tbw-pivot-chip-menu-item:hover:not(:disabled){background:var(--tbw-color-row-hover,light-dark(#f0f0f0,#2a2a2a))}.tbw-pivot-chip-menu-item:disabled{opacity:.5;cursor:default}.tbw-pivot-value-chip{padding:var(--tbw-button-padding-sm,var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-md,.5rem))}.tbw-pivot-value-label-wrapper{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));flex:1;min-width:0;display:flex}.tbw-pivot-agg-select{padding:var(--tbw-spacing-xs,.125rem) var(--tbw-spacing-xs,.25rem);font-size:var(--tbw-font-size-xs,.6875rem);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);background:var(--tbw-color-bg);cursor:pointer}.tbw-pivot-available-fields{gap:var(--tbw-spacing-sm,.375rem);flex-direction:column;min-height:40px;display:flex}.tbw-pivot-field-search{border:1px solid var(--tbw-color-border,#d0d5dd);border-radius:var(--tbw-radius-sm,.25rem);width:100%;font-size:var(--tbw-font-size-sm,.875rem);background:var(--tbw-color-bg,#fff);color:var(--tbw-color-fg,#1a1a2e);outline:none;padding:.25rem .5rem}.tbw-pivot-field-search:focus{border-color:var(--tbw-color-primary,#3b82f6)}.tbw-pivot-fields-list{gap:var(--tbw-spacing-sm,.375rem);flex-wrap:wrap;display:flex}.tbw-pivot-options{gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));flex-direction:column;display:flex}.tbw-pivot-checkbox{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));cursor:pointer;display:flex}.tbw-pivot-checkbox input{width:var(--tbw-icon-size-sm,.875rem);height:var(--tbw-icon-size-sm,.875rem);cursor:pointer}.pivot-group-row.tbw-pivot-slide-in,.pivot-leaf-row.tbw-pivot-slide-in{animation:tbw-pivot-slide-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-pivot-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.pivot-group-row.tbw-pivot-fade-in,.pivot-leaf-row.tbw-pivot-fade-in{animation:tbw-pivot-fade-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-pivot-fade-in{0%{opacity:0}to{opacity:1}}}';static PANEL_ID="pivot";get defaultConfig(){return{active:!0,showTotals:!0,showGrandTotal:!0,showToolPanel:!0,animation:"slide"}}isActive=!1;hasInitialized=!1;pivotResult=null;fieldHeaderMap=/* @__PURE__ */new Map;expandedKeys=/* @__PURE__ */new Set;defaultExpanded=!0;userHasToggledExpand=!1;originalColumns=[];panelContainer=null;grandTotalFooter=null;previousVisibleKeys=/* @__PURE__ */new Set;keysToAnimate=/* @__PURE__ */new Set;valueFormatters=/* @__PURE__ */new Map;columnTotals={};activeSortField=null;activeSortDir=null;hasValidPivotConfig(){return(this.config.valueFields?.length??0)>0}get animationStyle(){return!!this.isAnimationEnabled&&(this.config.animation??"slide")}detach(){this.isActive=!1,this.hasInitialized=!1,this.pivotResult=null,this.fieldHeaderMap.clear(),this.originalColumns=[],this.panelContainer=null,this.cleanupGrandTotalFooter(),this.previousVisibleKeys.clear(),this.keysToAnimate.clear(),this.userHasToggledExpand=!1,this.valueFormatters.clear(),this.columnTotals={},this.activeSortField=null,this.activeSortDir=null,this.config.sortRows=void 0}getToolPanel(){if(!1!==(this.config?.showToolPanel??this.userConfig?.showToolPanel??!0))return{id:e.PANEL_ID,title:this.t("pivot.panelTitle","Pivot"),icon:"⊞",tooltip:"Configure pivot table",order:90,render:e=>this.renderPanel(e)}}processRows(e){if(!this.hasInitialized&&!1!==this.config.active&&this.hasValidPivotConfig()&&(this.hasInitialized=!0,this.isActive=!0),!this.isActive)return[...e];const t=function(e){const t=[];return e.rowGroupFields?.length||e.columnGroupFields?.length||t.push("At least one row or column group field is required"),e.valueFields?.length||t.push("At least one value field is required"),t}(this.config);if(t.length>0)return this.warn(`Config errors: ${t.join(", ")}`),[...e];this.buildFieldHeaderMap(),this.buildValueFormatters(),this.defaultExpanded=this.config.defaultExpanded??!0,this.pivotResult=Zi(e,this.config);const i=this.getMultiSortConfigs();if(i&&or(this.pivotResult.rows,i,this.config.valueFields??[]),0===this.expandedKeys.size&&!this.userHasToggledExpand){const e=rr(this.pivotResult.rows);this.expandedKeys=function(e,t){if(!0===e||void 0===e)return new Set(t);if(!1===e)/* @__PURE__ */return new Set;if("number"==typeof e){const i=t[e];return i?/* @__PURE__ */new Set([i]):/* @__PURE__ */new Set}return"string"==typeof e?/* @__PURE__ */new Set([e]):Array.isArray(e)?new Set(e):/* @__PURE__ */new Set}(this.defaultExpanded,e)}this.config.valueDisplayMode&&"raw"!==this.config.valueDisplayMode&&(this.columnTotals=function(e,t,i){const r={},n=t.flatMap(e=>Yi([e],i));return function e(t){for(const i of t)if(i.isGroup&&i.children?.length)i.children&&e(i.children);else for(const e of n)r[e]=(r[e]??0)+(i.values[e]??0)}(e),r}(this.pivotResult.rows,this.pivotResult.columnKeys,this.config.valueFields??[]));const r=this.config.indentWidth??20,n=!0===this.defaultExpanded||void 0===this.defaultExpanded,o=function(e,t,i=!0){const r=[];function n(e){r.push(e);const o=t?t.has(e.rowKey):i;if(e.children&&o)for(const t of e.children)n(t)}for(const o of e)n(o);return r}(this.pivotResult.rows,this.expandedKeys,n).map(e=>({__pivotRowKey:e.rowKey,__pivotLabel:e.rowLabel,__pivotDepth:e.depth,__pivotIsGroup:e.isGroup,__pivotHasChildren:Boolean(e.children?.length),__pivotExpanded:this.expandedKeys.has(e.rowKey),__pivotRowCount:e.rowCount??0,__pivotIndent:e.depth*r,__pivotTotal:e.total,...e.values}));this.keysToAnimate.clear();const s=/* @__PURE__ */new Set;for(const l of o){const e=l.__pivotRowKey;s.add(e),!this.previousVisibleKeys.has(e)&&l.__pivotDepth>0&&this.keysToAnimate.add(e)}return this.previousVisibleKeys=s,this.config.grandTotalInRowModel&&this.config.showGrandTotal&&this.pivotResult&&o.push({__pivotRowKey:"__grandTotal",__pivotLabel:"Grand Total",__pivotIsGrandTotal:!0,__pivotDepth:0,__pivotTotal:this.pivotResult.grandTotal,...this.pivotResult.totals}),o}processColumns(e){if(!this.isActive||!this.pivotResult)return[...e];const t=[],i=(this.config.rowGroupFields??[]).map(e=>this.fieldHeaderMap.get(e)??e).join(" / ");t.push({field:"__pivotLabel",header:i||"Group",width:200,sortable:!0});const r=this.config.valueFields??[];for(const n of this.pivotResult.columnKeys){const e=Yi([n],r);for(let i=0;i<r.length;i++){const o=r[i],s=e[i],l=o.header||this.fieldHeaderMap.get(o.field)||o.field,a="function"==typeof o.aggFunc?"custom":o.aggFunc,d=this.valueFormatters.get(i);t.push({field:s,header:`${n} - ${l} (${a})`,width:120,type:"number",sortable:!0,...d?{format:e=>null!=e?d(Number(e)):""}:{}})}}return this.config.showTotals&&t.push({field:"__pivotTotal",header:"Total",width:100,type:"number",sortable:!0}),t}renderRow(e,t,i){const r=e;return r.__pivotIsGrandTotal?Cr(r,t,this.gridColumns,this.translate):r.__pivotRowKey&&r.__pivotHasChildren?function(e,t,i){return t.className="data-grid-row pivot-group-row",t.setAttribute("data-pivot-depth",String(e.__pivotDepth??0)),t.setAttribute("data-pivot-key",String(e.__pivotRowKey??"")),t.setAttribute("role","row"),t.innerHTML="",i.columns.forEach((r,n)=>{const o=document.createElement("div");if(o.className="cell",o.setAttribute("data-col",String(n)),o.setAttribute("data-row",String(i.rowIndex)),o.setAttribute("role","gridcell"),0===n){const t=Number(e.__pivotIndent)||0;o.style.paddingLeft=`${t}px`;const r=String(e.__pivotRowKey),n=document.createElement("button");n.type="button",n.className="pivot-toggle",n.setAttribute("aria-label",e.__pivotExpanded?"Collapse group":"Expand group"),i.setIcon(n,e.__pivotExpanded?"collapse":"expand"),n.addEventListener("click",e=>{e.stopPropagation(),i.onToggle(r)}),o.appendChild(n);const s=document.createElement("span");s.className="pivot-label",s.textContent=String(e.__pivotLabel??""),o.appendChild(s);const l=document.createElement("span");l.className="pivot-count",l.textContent=` (${Number(e.__pivotRowCount)||0})`,o.appendChild(l)}else{const t=e[r.field];o.textContent=null!=t?r.format?r.format(t,e):String(t):""}t.appendChild(o)}),!0}(r,t,{columns:this.gridColumns,rowIndex:i,onToggle:e=>this.toggle(e),setIcon:(e,t)=>this.setIcon(e,t)}):void 0!==r.__pivotRowKey&&this.isActive?function(e,t,i,r){return t.className="data-grid-row pivot-leaf-row",t.setAttribute("data-pivot-depth",String(e.__pivotDepth??0)),t.setAttribute("data-pivot-key",String(e.__pivotRowKey??"")),t.innerHTML="",i.forEach((i,n)=>{const o=document.createElement("div");if(o.className="cell",o.setAttribute("data-col",String(n)),o.setAttribute("data-row",String(r)),o.setAttribute("role","gridcell"),0===n){const t=Number(e.__pivotIndent)||0;o.style.paddingLeft=`${t+20}px`;const i=document.createElement("span");i.className="pivot-label",i.textContent=String(e.__pivotLabel??""),o.appendChild(i)}else{const t=e[i.field];o.textContent=null!=t?i.format?i.format(t,e):String(t):""}t.appendChild(o)}),!0}(r,t,this.gridColumns,i):(this.cleanupPivotStyling(t),!1)}cleanupPivotStyling(e){(e.classList.contains("pivot-group-row")||e.classList.contains("pivot-leaf-row")||e.classList.contains("pivot-grand-total-row"))&&(e.classList.remove("pivot-group-row","pivot-leaf-row","pivot-grand-total-row"),e.classList.add("data-grid-row"),e.removeAttribute("data-pivot-depth"),e.innerHTML="")}onKeyDown(e){if(" "!==e.key)return;if(!this.isActive)return;const t=this.grid._focusRow,i=this.rows[t];return i?.__pivotIsGroup&&i.__pivotHasChildren?(e.preventDefault(),this.toggle(i.__pivotRowKey),this.requestRenderWithFocus(),!0):void 0}handleQuery(e){if("sort:get-sort-config"===e.type){const e=this.getMultiSortConfigs();return e||(this.config.sortRows??null)}}onHeaderClick(e){if(!this.isActive)return!1;const t=e.field;if(!this.isPivotField(t))return!1;if(this.isMultiSortActive())return!1;const i=this.mapFieldToSortConfig(t);if(!i)return!1;const r=this.activeSortDir;let n;n=this.activeSortField!==t?"asc":"asc"===r?"desc":null,this.activeSortField=n?t:null,this.activeSortDir=n,this.config.sortRows=n?{...i,direction:n}:void 0,this.emit("pivot-config-change",{property:"sortRows"}),this.refresh();const o=this.gridElement;if(o){const i=e.column.header??t;qe(o,n?$e(o,"sortApplied",i,"asc"===n?"ascending":"descending"):$e(o,"sortCleared"))}return!0}isPivotField(e){return"__pivotLabel"===e||"__pivotTotal"===e||e.includes("|")}isMultiSortActive(){const e=this.grid?.query?.("sort:get-model",null);return Array.isArray(e)&&e.length>0}getMultiSortConfigs(){const e=this.grid?.query?.("sort:get-model",null);if(!e||0===e.length)return null;const t=e[0];if(!Array.isArray(t)||0===t.length)return null;const i=[];for(const r of t){if(!this.isPivotField(r.field))continue;const e=this.mapFieldToSortConfig(r.field);e&&i.push({...e,direction:r.direction})}return i.length>0?i:null}mapFieldToSortConfig(e){return"__pivotLabel"===e?{by:"label"}:"__pivotTotal"===e?{by:"value"}:e.includes("|")?{by:"value",valueField:e}:null}afterRender(){this.isActive&&this.config.showGrandTotal&&this.pivotResult&&!this.config.grandTotalInRowModel?this.renderGrandTotalFooter():this.cleanupGrandTotalFooter(),this.isActive&&!this.isMultiSortActive()&&this.updateSortIndicators();const e=this.animationStyle;if(!1===e||0===this.keysToAnimate.size)return;const t=this.gridElement?.querySelector(".rows");if(!t)return;const i="fade"===e?"tbw-pivot-fade-in":"tbw-pivot-slide-in";for(const r of t.querySelectorAll(".pivot-group-row, .pivot-leaf-row")){const e=r.dataset.pivotKey;e&&this.keysToAnimate.has(e)&&(r.classList.add(i),r.addEventListener("animationend",()=>r.classList.remove(i),{once:!0}))}this.keysToAnimate.clear()}updateSortIndicators(){const e=this.gridElement;if(!e)return;const t=this.activeSortField,i=this.activeSortDir,r=t?null:this.config.sortRows,n=e.querySelectorAll(".header-row .cell[data-field]");for(const o of n){const e=o.getAttribute("data-field");if(!e||!this.isPivotField(e))continue;let n=null;t===e?n=i:r&&("label"===r.by&&"__pivotLabel"===e?n=r.direction??"asc":"value"!==r.by||"__pivotTotal"!==e||r.valueField?"value"===r.by&&r.valueField&&e===r.valueField&&(n=r.direction??"asc"):n=r.direction??"asc"),this.updateSortIndicator(o,n)}}renderGrandTotalFooter(){if(!this.pivotResult)return;const e=this.gridElement;if(!e)return;const t=e.querySelector(".tbw-scroll-area")??e.querySelector(".tbw-grid-content")??e.querySelector(".tbw-grid-root");if(!t)return;this.grandTotalFooter||(this.grandTotalFooter=document.createElement("div"),this.grandTotalFooter.className="pivot-grand-total-footer",t.appendChild(this.grandTotalFooter));Cr({__pivotRowKey:"__grandTotal",__pivotLabel:"Grand Total",__pivotIsGrandTotal:!0,__pivotTotal:this.pivotResult.grandTotal,...this.pivotResult.totals},this.grandTotalFooter,this.gridColumns,this.translate),this.grandTotalFooter.setAttribute("role","presentation")}cleanupGrandTotalFooter(){this.grandTotalFooter&&(this.grandTotalFooter.remove(),this.grandTotalFooter=null)}toggle(e){this.userHasToggledExpand=!0;const t=this.expandedKeys.has(e);t?this.expandedKeys.delete(e):this.expandedKeys.add(e),this.emitToggle(e,!t),this.requestRender()}expand(e){this.userHasToggledExpand=!0,this.expandedKeys.add(e),this.emitToggle(e,!0),this.requestRender()}collapse(e){this.userHasToggledExpand=!0,this.expandedKeys.delete(e),this.emitToggle(e,!1),this.requestRender()}expandAll(){this.userHasToggledExpand=!0,this.expandAllKeys(),this.requestRender()}collapseAll(){this.userHasToggledExpand=!0,this.expandedKeys.clear(),this.requestRender()}expandAllKeys(){if(!this.pivotResult)return;const e=rr(this.pivotResult.rows);for(const t of e)this.expandedKeys.add(t)}isExpanded(e){return this.expandedKeys.has(e)}getExpandedGroups(){return[...this.expandedKeys]}enablePivot(){0===this.originalColumns.length&&this.captureOriginalColumns(),this.isActive=!0,this.emit("pivot-state-change",{active:!0}),this.requestRender()}disablePivot(){this.isActive=!1,this.pivotResult=null,this.emit("pivot-state-change",{active:!1}),this.requestRender()}isPivotActive(){return this.isActive}getPivotResult(){return this.pivotResult}setRowGroupFields(e){this.config.rowGroupFields=e,this.emitConfigChange("rowGroupFields"),this.refresh()}setColumnGroupFields(e){this.config.columnGroupFields=e,this.emitConfigChange("columnGroupFields"),this.refresh()}setValueFields(e){this.config.valueFields=e,this.emitConfigChange("valueFields"),this.refresh()}refresh(){this.pivotResult=null,this.requestRender()}#rt(){return this.grid.getPluginByName("shell")}showPanel(){const t=this.#rt();t?.openToolPanel(),t?.expandedToolPanelSections.includes(e.PANEL_ID)||t?.toggleToolPanelSection(e.PANEL_ID)}hidePanel(){this.#rt()?.closeToolPanel()}togglePanel(){const t=this.#rt();t?.isToolPanelOpen||t?.openToolPanel(),t?.toggleToolPanelSection(e.PANEL_ID)}isPanelVisible(){const t=this.#rt();return!!t?.isToolPanelOpen&&t.expandedToolPanelSections.includes(e.PANEL_ID)}get gridColumns(){return this.grid.columns??[]}refreshIfActive(){this.isActive&&this.refresh(),this.refreshPanel()}buildFieldHeaderMap(){const e=this.getAvailableFields();this.fieldHeaderMap.clear();for(const t of e)this.fieldHeaderMap.set(t.field,t.header)}getAvailableFields(){return this.originalColumns.length>0?this.originalColumns:this.captureOriginalColumns()}captureOriginalColumns(){try{const e=this.grid.getAllColumns?.()??this.grid.columns??[];return this.originalColumns=e.filter(e=>!e.field.startsWith("__pivot")).map(e=>({field:e.field,header:e.header??e.field})),this.originalColumns}catch{return[]}}renderPanel(e){return this.panelContainer=e,0===this.originalColumns.length&&this.captureOriginalColumns(),hr(e,this.config,this.isActive,{onTogglePivot:e=>{e?this.enablePivot():this.disablePivot(),this.refreshPanel()},onAddFieldToZone:(e,t)=>{this.addFieldToZone(e,t),this.emitConfigChange("rowGroups"===t?"rowGroupFields":"columnGroupFields",e,t)},onRemoveFieldFromZone:(e,t)=>{this.removeFieldFromZone(e,t),this.emitConfigChange("rowGroups"===t?"rowGroupFields":"columnGroupFields",e,t)},onReorderFieldInZone:(e,t,i)=>{this.reorderFieldInZone(e,t,i),this.emitConfigChange("rowGroups"===t?"rowGroupFields":"columnGroupFields",e,t)},onMoveFieldBetweenZones:(e,t,i)=>{this.moveFieldBetweenZones(e,t,i),this.emitConfigChange("rowGroups"===i?"rowGroupFields":"columnGroupFields",e,i)},onAddValueField:(e,t)=>{this.addValueField(e,t),this.emitConfigChange("valueFields",e,"values")},onRemoveValueField:e=>{this.removeValueField(e),this.emitConfigChange("valueFields",e,"values")},onUpdateValueAggFunc:(e,t)=>{this.updateValueAggFunc(e,t),this.emitConfigChange("valueFields",e,"values")},onOptionChange:(e,t)=>{this.config[e]=t,this.emitConfigChange(e),this.isActive&&this.refresh()},getAvailableFields:()=>this.getAvailableFields()},this.translate)}refreshPanel(){this.panelContainer&&(this.panelContainer.innerHTML="",this.renderPanel(this.panelContainer))}addFieldToZone(e,t){if("rowGroups"===t){const t=this.config.rowGroupFields??[];t.includes(e)||(this.config.rowGroupFields=[...t,e])}else{const t=this.config.columnGroupFields??[];t.includes(e)||(this.config.columnGroupFields=[...t,e])}this.removeFromOtherZones(e,t),this.refreshIfActive()}removeFieldFromZone(e,t){"rowGroups"===t?this.config.rowGroupFields=(this.config.rowGroupFields??[]).filter(t=>t!==e):this.config.columnGroupFields=(this.config.columnGroupFields??[]).filter(t=>t!==e),this.refreshIfActive()}reorderFieldInZone(e,t,i){const r="rowGroups"===t?[...this.config.rowGroupFields??[]]:[...this.config.columnGroupFields??[]],n=r.indexOf(e);-1!==n&&n!==i&&(r.splice(n,1),r.splice(i>n?i-1:i,0,e),"rowGroups"===t?this.config.rowGroupFields=r:this.config.columnGroupFields=r,this.refreshIfActive())}moveFieldBetweenZones(e,t,i){"rowGroups"===t?this.config.rowGroupFields=(this.config.rowGroupFields??[]).filter(t=>t!==e):this.config.columnGroupFields=(this.config.columnGroupFields??[]).filter(t=>t!==e),"rowGroups"===i?this.config.rowGroupFields=[...this.config.rowGroupFields??[],e]:this.config.columnGroupFields=[...this.config.columnGroupFields??[],e],this.refreshIfActive()}removeFromOtherZones(e,t){"rowGroups"!==t&&(this.config.rowGroupFields=(this.config.rowGroupFields??[]).filter(t=>t!==e)),"columnGroups"!==t&&(this.config.columnGroupFields=(this.config.columnGroupFields??[]).filter(t=>t!==e)),"values"!==t&&(this.config.valueFields=(this.config.valueFields??[]).filter(t=>t.field!==e))}addValueField(e,t){const i=this.config.valueFields??[];i.some(t=>t.field===e)||(this.config.valueFields=[...i,{field:e,aggFunc:t}]),this.removeFromOtherZones(e,"values"),this.refreshIfActive()}removeValueField(e){this.config.valueFields=(this.config.valueFields??[]).filter(t=>t.field!==e),this.refreshIfActive()}updateValueAggFunc(e,t){const i=this.config.valueFields??[],r=i.findIndex(t=>t.field===e);r>=0&&(i[r]={...i[r],aggFunc:t},this.config.valueFields=[...i]),this.isActive&&this.refresh()}emitToggle(e,t){const i=this.rows.find(t=>t.__pivotRowKey===e);this.emit("pivot-toggle",{key:e,expanded:t,label:i?.__pivotLabel??e,depth:i?.__pivotDepth??0})}emitConfigChange(e,t,i){this.emit("pivot-config-change",{property:e,field:t,zone:i})}buildValueFormatters(){this.valueFormatters.clear();const e=this.config.valueFields??[];for(let t=0;t<e.length;t++){const i=e[t];if(i.format)this.valueFormatters.set(t,i.format);else if(this.originalColumns.find(e=>e.field===i.field)){const e=(this.grid.getAllColumns?.()??this.grid.columns??[]).find(e=>e.field===i.field);if(e?.format){const i=e.format;this.valueFormatters.set(t,e=>i(e,{}))}}}}};we("pivot",e=>new xr(e??void 0));var Rr="tbw-print-isolation-style";async function Sr(e,t={}){const{orientation:i="landscape"}=t,r=e.id;document.querySelectorAll(`#${CSS.escape(r)}`).length>1&&A("TBW093",`Multiple elements found with id="${r}". Print isolation may not work correctly. Ensure each grid has a unique ID.`,r,"print"),document.getElementById(Rr)?.remove();const n=function(e,t){const i=document.createElement("style");return i.id=Rr,i.textContent=`\n /* Print isolation: hide everything except the target grid */\n @media print {\n /* Hide all body children by default */\n body > *:not(#${e}) {\n display: none !important;\n }\n\n /* But show the grid and ensure it's not hidden by ancestor rules */\n #${e} {\n display: block !important;\n position: static !important;\n visibility: visible !important;\n opacity: 1 !important;\n overflow: visible !important;\n height: auto !important;\n width: 100% !important;\n max-height: none !important;\n margin: 0 !important;\n padding: 0 !important;\n transform: none !important;\n }\n\n /* If grid is nested, we need to show its ancestors too */\n #${e},\n #${e} * {\n visibility: visible !important;\n }\n\n /* Walk up the DOM and show all ancestors of the grid */\n body *:has(> #${e}),\n body *:has(#${e}) {\n display: block !important;\n visibility: visible !important;\n opacity: 1 !important;\n overflow: visible !important;\n height: auto !important;\n position: static !important;\n transform: none !important;\n background: transparent !important;\n border: none !important;\n padding: 0 !important;\n margin: 0 !important;\n }\n\n /* Hide siblings of ancestors (everything that's not in the path to the grid) */\n body *:has(#${e}) > *:not(:has(#${e})):not(#${e}) {\n display: none !important;\n }\n\n /* Page settings */\n @page {\n size: ${t};\n margin: 1cm;\n }\n\n /* Ensure proper print styling */\n body {\n margin: 0 !important;\n padding: 0 !important;\n background: white !important;\n color-scheme: light !important;\n }\n }\n\n /* Screen: also apply isolation for print preview */\n @media screen {\n /* When this stylesheet is active, we're about to print */\n /* No screen-specific rules needed - isolation only applies to print */\n }\n `,i}(r,i);return document.head.appendChild(n),new Promise(e=>{const t=()=>{window.removeEventListener("afterprint",t),document.getElementById(Rr)?.remove(),e()};window.addEventListener("afterprint",t),window.print(),setTimeout(()=>{window.removeEventListener("afterprint",t),document.getElementById(Rr)?.remove(),e()},5e3)})}var Er={button:!1,orientation:"landscape",warnThreshold:500,maxRows:0,includeTitle:!0,includeTimestamp:!0,title:"",isolate:!1},Ar=class extends Y{name="print";version="1.0.0";styles=".tbw-print-header,.tbw-print-footer{display:none}@media print{tbw-grid{color-scheme:light only;-webkit-print-color-adjust:exact;-moz-print-color-adjust:exact;print-color-adjust:exact;border:none!important;border-radius:0!important;height:auto!important;overflow:visible!important}tbw-grid .tbw-grid-content,tbw-grid .tbw-scroll-area,tbw-grid .rows-body{height:auto!important;max-height:none!important;overflow:visible!important}tbw-grid .rows-container,tbw-grid .rows-viewport,tbw-grid .rows{height:auto!important;max-height:none!important;overflow:visible!important;transform:none!important}tbw-grid .rows-viewport .rows{position:static!important}tbw-grid .resize-handle,tbw-grid [part=sort-indicator],tbw-grid .tbw-filter-btn,tbw-grid .tool-panel,tbw-grid .tool-panel-content,tbw-grid .tbw-shell-header,tbw-grid .shell-toolbar,tbw-grid .tool-panel-toggle,tbw-grid [data-print-hide],tbw-grid .expander-cell,tbw-grid .tree-toggle,tbw-grid .context-menu,tbw-grid .faux-vscroll{display:none!important}tbw-grid .tbw-print-header{padding:var(--tbw-spacing-md,.5em) 0;margin-bottom:var(--tbw-spacing-md,.5em);border-bottom:2px solid var(--tbw-print-border,var(--tbw-color-border-strong));justify-content:space-between;align-items:baseline;font-family:inherit;display:flex}.tbw-print-header-title{font-size:1.25em;font-weight:700}.tbw-print-header-timestamp{font-size:var(--tbw-font-size-sm,.875em);color:var(--tbw-print-muted,var(--tbw-color-fg-muted))}tbw-grid .tbw-print-footer{margin-top:var(--tbw-spacing-md,.5em);padding-top:var(--tbw-spacing-md,.5em);border-top:1px solid var(--tbw-print-border,var(--tbw-color-border));font-size:var(--tbw-font-size-xs,.75em);color:var(--tbw-print-muted,var(--tbw-color-fg-muted));text-align:end;display:block}tbw-grid .data-grid-row{break-inside:avoid;page-break-inside:avoid}tbw-grid .cell{border:1px solid var(--tbw-print-cell-border,var(--tbw-color-border))!important}tbw-grid .header-row,tbw-grid .data-grid-row{padding-inline-end:1px}tbw-grid .data-grid-row:hover,tbw-grid .cell:hover{background:inherit!important}@page{margin:1cm}}";#nt=!1;#ot=null;#st=null;#lt=null;#at=null;#dt=null;#ct=null;get#x(){return this.grid}isPrinting(){return this.#nt}async print(e){if(this.#nt)return void this.warn("TBW090","Print already in progress");const t=this.gridElement;if(!t)return void this.warn("TBW091","Grid not available");const i={...Er,...this.config,...e},r=this.rows.length;let n=r,o=!1;if(i.warnThreshold>0&&r>i.warnThreshold){const e=i.maxRows>0?`\n\nNote: Output will be limited to ${i.maxRows.toLocaleString()} rows.`:"";if(!confirm(`This grid has ${r.toLocaleString()} rows. Printing large datasets may cause performance issues or browser slowdowns.${e}\n\nClick OK to continue, or Cancel to abort.`))return}i.maxRows>0&&r>i.maxRows&&(n=i.maxRows,o=!0),this.#nt=!0;const s=performance.now();this.emit("print-start",{rowCount:n,limitApplied:o,originalRowCount:r});try{const e=this.#x;this.#st={bypassThreshold:e._virtualization?.bypassThreshold??24},this.#ut(),o&&(this.#lt=this.sourceRows,this.grid.rows=this.sourceRows.slice(0,n),await new Promise(e=>setTimeout(e,50))),(i.includeTitle||i.includeTimestamp)&&this.#ht(i),await this.#gt(),await new Promise(e=>requestAnimationFrame(e)),await new Promise(e=>requestAnimationFrame(e)),t.classList.add(`print-${i.orientation}`),await new Promise(e=>requestAnimationFrame(e)),await new Promise(e=>requestAnimationFrame(e)),i.isolate?await this.#pt(i):await this.#ft(),this.emit("print-complete",{success:!0,rowCount:n,duration:Math.round(performance.now()-s)})}catch(l){k("TBW092",`Print failed: ${l}`,this.gridElement?.id,this.name),this.emit("print-complete",{success:!1,rowCount:0,duration:Math.round(performance.now()-s)})}finally{this.#mt(),this.#nt=!1}}#ht(e){const t=this.gridElement;if(t){if(this.#at=document.createElement("div"),this.#at.className="tbw-print-header",e.includeTitle){const t=e.title||this.grid.effectiveConfig?.shell?.header?.title||"Grid Data",i=document.createElement("div");i.className="tbw-print-header-title",i.textContent=t,this.#at.appendChild(i)}if(e.includeTimestamp){const e=document.createElement("div");e.className="tbw-print-header-timestamp",e.textContent=`Printed: ${/* @__PURE__ */(new Date).toLocaleString()}`,this.#at.appendChild(e)}t.insertBefore(this.#at,t.firstChild),this.#dt=document.createElement("div"),this.#dt.className="tbw-print-footer",this.#dt.textContent=`Page generated from ${window.location.hostname}`,t.appendChild(this.#dt)}}async#gt(){const e=this.#x;if(!e._virtualization)return;const t=this.rows.length;e._virtualization.bypassThreshold=t+100,e.refreshVirtualWindow(!0),await new Promise(e=>setTimeout(e,100))}async#ft(){return new Promise(e=>{const t=()=>{window.removeEventListener("afterprint",t),e()};window.addEventListener("afterprint",t),window.print(),setTimeout(()=>{"undefined"!=typeof window&&window.removeEventListener("afterprint",t),e()},1e3)})}async#pt(e){const t=this.gridElement;t&&await Sr(t,{orientation:e.orientation})}#ut(){const e=this.columns;if(e){this.#ot=/* @__PURE__ */new Map;for(const t of e)t.field&&(!0===t.printHidden||!0===t.utility&&!1!==t.printHidden)&&(this.#ot.set(t.field,!t.hidden),this.grid.setColumnVisible(t.field,!1))}}#wt(){if(this.#ot){for(const[e,t]of this.#ot)this.grid.setColumnVisible(e,t);this.#ot=null}}#mt(){const e=this.gridElement;if(!e)return;this.#wt(),e.classList.remove("print-portrait","print-landscape"),null!==this.#ct&&(e.style.transform="",e.style.transformOrigin="",e.style.width="",this.#ct=null),this.#at&&(this.#at.remove(),this.#at=null),this.#dt&&(this.#dt.remove(),this.#dt=null);const t=this.#x;this.#st&&t._virtualization&&(t._virtualization.bypassThreshold=this.#st.bypassThreshold,t.refreshVirtualWindow(!0),this.#st=null),null!==this.#lt&&(this.grid.rows=this.#lt,this.#lt=null)}afterRender(){this.config?.button&&!this.#bt&&(this.#vt(),this.#bt=!0)}#bt=!1;#vt(){this.#x.registerToolbarContent?.({id:"print-button",order:900,render:e=>{const t=document.createElement("button");t.className="tbw-toolbar-btn tbw-print-btn",t.title=this.t("print.buttonTitle","Print grid"),t.type="button",this.setIcon(t,"print"),t.addEventListener("click",()=>{this.print()},{signal:this.disconnectSignal}),e.appendChild(t)}})}};function _r(e){if(!0===e.lockPosition)return!1;if(!0===e.utility)return!1;const t=e.meta??{};return!0!==t.lockPosition&&!0!==t.suppressMovable}function kr(e,t,i){if(t===i)return e;if(t<0||t>=e.length)return e;if(i<0||i>e.length)return e;const r=[...e],[n]=r.splice(t,1);return r.splice(i,0,n),r}we("print",e=>!0===e?new Ar:new Ar(e??void 0));var Tr="canMoveColumn",Mr="getContextMenuItems",Ir=class extends Y{name="reorderColumns";aliases=["reorder"];styles='@layer tbw-plugins{.header-row>.cell[draggable=true]{cursor:grab;position:relative}.header-row>.cell.dragging{opacity:.5;cursor:grabbing}.header-row>.cell.drop-before:before{content:"";background:var(--tbw-reorder-indicator,var(--tbw-color-accent));z-index:1;width:2px;position:absolute;top:0;bottom:0;left:0}.header-row>.cell.drop-after:after{content:"";background:var(--tbw-reorder-indicator,var(--tbw-color-accent));z-index:1;width:2px;position:absolute;top:0;bottom:0;right:0}.cell.flip-animating{transition:transform var(--tbw-animation-duration,.2s) ease-out;will-change:transform;z-index:1}@keyframes reorder-fade-in{0%{opacity:0}to{opacity:1}}.cell.fade-animating{animation:reorder-fade-in var(--tbw-animation-duration,.2s) ease-out backwards}.header-row>.cell>.tbw-col-move-btn,.header-group-row>.cell>.tbw-col-move-btn{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px);background:var(--tbw-color-header-bg);color:var(--tbw-color-header-fg,inherit);font:inherit;border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius,.25rem);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--tbw-transition-duration,.12s) var(--tbw-transition-ease,ease);flex-shrink:0;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}:is(.header-row>.cell>.tbw-col-move-btn,.header-group-row>.cell>.tbw-col-move-btn):hover{border-color:var(--tbw-color-accent)}.header-row>.cell:hover>.tbw-col-move-btn,.header-row>.cell:focus-within>.tbw-col-move-btn,.header-row>.cell.cell-focus>.tbw-col-move-btn,.header-group-row>.cell:hover>.tbw-col-move-btn,.header-group-row>.cell:focus-within>.tbw-col-move-btn{opacity:1;pointer-events:auto}@media (hover:none){.header-row>.cell>.tbw-col-move-btn,.header-group-row>.cell>.tbw-col-move-btn{opacity:1;pointer-events:auto}}.tbw-col-move-menu{background:var(--tbw-color-panel-bg,light-dark(#fff,#1e1e1e));min-width:10rem;color:var(--tbw-color-panel-fg,light-dark(#1a1a1a,#eaeaea));border:1px solid var(--tbw-color-border,light-dark(#d0d0d0,#3a3a3a));border-radius:var(--tbw-border-radius,.25rem);box-shadow:var(--tbw-shadow-panel,0 4px 12px light-dark(#0003,#00000080));z-index:10001;flex-direction:column;margin:0;padding:4px;display:flex;position:fixed}.tbw-col-move-menu[hidden]{display:none}.tbw-col-move-menu-item{min-height:var(--tbw-touch-target-min,24px);text-align:start;color:inherit;font:inherit;border-radius:min(var(--tbw-border-radius,.25rem), 6px);cursor:pointer;background:0 0;border:0;padding:4px 8px}.tbw-col-move-menu-item:hover:not(:disabled){background:var(--tbw-color-row-hover,light-dark(#00000010,#ffffff14))}.tbw-col-move-menu-item:disabled{opacity:.5;cursor:default}}';static manifest={queries:[{type:Tr,description:"Authoritative check for whether a column may be reordered (honors lockPosition)."},{type:Mr,description:"Contributes the click-only column move actions (WCAG 2.2 SC 2.5.7) to the header context menu."}]};handleQuery(e){if(e.type===Tr){const t=e.context;return t?_r(t):void 0}if(e.type===Mr){const t=e.context;if(!t?.isHeader)return;return this.#yt(t.field)?.map((e,t)=>({id:`reorder-${t}`,label:e.label,disabled:e.disabled,action:e.run,order:50+t}))}}get defaultConfig(){return{animation:"flip"}}get animationType(){return!!this.isAnimationEnabled&&(void 0!==this.config.animation?this.config.animation:"flip")}get animationDuration(){return void 0!==this.config.animationDuration?this.config.animationDuration:super.animationDuration}isDragging=!1;draggedField=null;draggedIndex=null;dropIndex=null;draggedGroupFields=[];originalColumnOrder=null;moveMenu=null;get#x(){return this.grid}canMoveColumnWithPlugins(e){return!(!e||!_r(e))&&!this.grid.query(Tr,e).includes(!1)}#Ct(e,t,i){this.#xt(e,`Move column ${String(i?.header??t)}`,e=>this.#Rt(e,t))}#xt(e,t,i){const r=e.querySelector(":scope > .tbw-col-move-btn");if(!ar(this.grid))return void r?.remove();if(r)return;const n=document.createElement("button");n.type="button",n.className="tbw-col-move-btn",n.tabIndex=-1,n.draggable=!1,n.textContent="↔",n.setAttribute("aria-label",t),n.addEventListener("pointerdown",e=>e.stopPropagation()),n.addEventListener("click",e=>{e.stopPropagation(),e.preventDefault(),i(n)}),e.appendChild(n)}#yt(e){const t=this.columns.find(t=>t.field===e);if(!this.canMoveColumnWithPlugins(t))return null;const i=this.getColumnOrder(),r=i.indexOf(e);if(-1===r)return null;const n=i.findIndex(e=>this.#St(e));let o=-1;for(let s=i.length-1;s>=0;s--)if(this.#St(i[s])){o=s;break}return[{label:"Move left",disabled:!this.#Et(i,r,-1),run:()=>this.moveColumn(e,r-1)},{label:"Move right",disabled:!this.#Et(i,r,1),run:()=>this.moveColumn(e,r+1)},{label:"Move to start",disabled:-1===n||n===r,run:()=>this.moveColumn(e,n)},{label:"Move to end",disabled:-1===o||o===r,run:()=>this.moveColumn(e,o)}]}#Rt(e,t){const i=this.#yt(t);if(!i)return;const r=this.columns.find(e=>e.field===t);this.moveMenu??=dr("tbw-col-move-menu","tbw-col-move-menu"),this.moveMenu.open(e,`Move column ${String(r?.header??t)}`,i)}#At(e){const t=this.visibleColumns,i=[];return e.querySelectorAll(".header-group-row > .cell[data-group]").forEach(e=>{const t=e.getAttribute("data-group");if(!t)return;const r=this.getGroupFragmentFields(e,t);r.length>0&&i.push({id:t,fields:r})}),i.sort((e,i)=>t.findIndex(t=>t.field===e.fields[0])-t.findIndex(e=>e.field===i.fields[0]))}#_t(e,t){if(!t.every(e=>this.#St(e)))return null;const i=this.#At(e),r=i.findIndex(e=>e.fields[0]===t[0]);if(-1===r)return null;const n=e=>!!e&&e.fields.every(e=>this.#St(e)),o=(e,t)=>e<=t&&i.slice(e,t+1).every(n),s=(e,i)=>()=>this.executeGroupBlockMove(t,e.fields,i);return[{label:"Move left",disabled:!n(i[r-1]),run:s(i[r-1]??{fields:t},!0)},{label:"Move right",disabled:!n(i[r+1]),run:s(i[r+1]??{fields:t},!1)},{label:"Move to start",disabled:0===r||!o(0,r-1),run:s(i[0],!0)},{label:"Move to end",disabled:r===i.length-1||!o(r+1,i.length-1),run:s(i[i.length-1],!1)}]}#kt(e,t,i){const r=this.gridElement;if(!r)return;const n=this.#_t(r,i);n&&(this.moveMenu??=dr("tbw-col-move-menu","tbw-col-move-menu"),this.moveMenu.open(e,`Move group ${this.#Tt(t)}`,n))}#Tt(e){return e.textContent?.replace("↔","").trim()||(e.getAttribute("data-group")??"")}#St(e){return this.canMoveColumnWithPlugins(this.columns.find(t=>t.field===e))}#Et(e,t,i){const r=t+i;return!(r<0||r>=e.length)&&this.#St(e[r])}clearDragClasses(){this.gridElement?.querySelectorAll(".header-row > .cell, .header-group-row > .cell").forEach(e=>{e.classList.remove(Ge.DRAGGING,"drop-target","drop-before","drop-after")})}attach(e){super.attach(e),this.gridElement.addEventListener("column-reorder-request",e=>{const t=e.detail;t?.field&&"number"==typeof t.toIndex&&this.moveColumn(t.field,t.toIndex)},{signal:this.disconnectSignal})}detach(){this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.draggedGroupFields=[],this.moveMenu?.dispose(),this.moveMenu=null}afterRender(){const e=this.gridElement;e&&(this.originalColumnOrder||(this.originalColumnOrder=this.columns.map(e=>e.field)),e.querySelectorAll(".header-row > .cell").forEach(e=>{const t=e,i=t.getAttribute("data-field");if(!i)return;const r=this.columns.find(e=>e.field===i);if(!this.canMoveColumnWithPlugins(r))return t.draggable=!1,void t.querySelector(":scope > .tbw-col-move-btn")?.remove();t.draggable=!0,this.#Ct(t,i,r),t.getAttribute("data-dragstart-bound")||(t.setAttribute("data-dragstart-bound","true"),t.addEventListener("contextmenu",e=>{this.grid.getPluginByName("contextMenu")||(e.preventDefault(),this.#Rt(t,i))}),t.addEventListener("dragstart",e=>{const r=this.getColumnOrder().indexOf(i);this.isDragging=!0,this.draggedField=i,this.draggedIndex=r,this.draggedGroupFields=[],e.dataTransfer&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",i)),t.classList.add(Ge.DRAGGING)}),t.addEventListener("dragend",()=>{this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.draggedGroupFields=[],this.clearDragClasses()}),t.addEventListener("dragover",e=>{if(e.preventDefault(),!this.isDragging)return;if(this.draggedField===i&&0===this.draggedGroupFields.length)return;if(this.draggedGroupFields.includes(i))return;const r=t.getBoundingClientRect(),n=r.left+r.width/2,o=this.getColumnOrder().indexOf(i);if(this.dropIndex=e.clientX<n?o:o+1,this.clearDragClasses(),this.draggedGroupFields.length>0)for(const t of this.draggedGroupFields)this.gridElement?.querySelector(`.header-row > .cell[data-field="${t}"]`)?.classList.add(Ge.DRAGGING);else this.draggedField&&this.gridElement?.querySelector(`.header-row > .cell[data-field="${this.draggedField}"]`)?.classList.add(Ge.DRAGGING);t.classList.add("drop-target"),t.classList.toggle("drop-before",e.clientX<n),t.classList.toggle("drop-after",e.clientX>=n)}),t.addEventListener("dragleave",()=>{t.classList.remove("drop-target","drop-before","drop-after")}),t.addEventListener("drop",e=>{if(e.preventDefault(),!this.isDragging)return;if(this.draggedGroupFields.length>0){if(this.draggedGroupFields.includes(i))return;const r=t.getBoundingClientRect(),n=e.clientX<r.left+r.width/2;return void this.executeGroupBlockMove(this.draggedGroupFields,[i],n)}const r=this.draggedField,n=this.draggedIndex,o=this.dropIndex;if(!this.isDragging||null===r||null===n||null===o)return;const s=o>n?o-1:o,l=kr(this.getColumnOrder(),n,s),a={field:r,fromIndex:n,toIndex:s,columnOrder:l};this.emitCancelable("column-move",a)||this.updateColumnOrder(l)}))}),queueMicrotask(()=>this.setupGroupHeaderDrag(e)))}setupGroupHeaderDrag(e){e.querySelectorAll(".header-group-row > .cell[data-group]").forEach(t=>{const i=t,r=i.getAttribute("data-group");if(!r||r.startsWith("__implicit__"))return;const n=this.getGroupFragmentFields(i,r);0!==n.length&&n.every(e=>{const t=this.columns.find(t=>t.field===e);return this.canMoveColumnWithPlugins(t)})&&(i.draggable=!0,i.style.cursor="grab",this.#xt(i,`Move group ${this.#Tt(i)}`,e=>this.#kt(e,i,n)),i.getAttribute("data-group-drag-bound")||(i.setAttribute("data-group-drag-bound","true"),i.addEventListener("contextmenu",e=>{e.preventDefault(),e.stopPropagation(),this.#kt(i,i,n)}),i.addEventListener("dragstart",t=>{this.isDragging=!0,this.draggedField=null,this.draggedIndex=null,this.draggedGroupFields=[...n],t.dataTransfer&&(t.dataTransfer.effectAllowed="move",t.dataTransfer.setData("text/plain",`group:${r}`)),i.classList.add(Ge.DRAGGING);for(const i of n)e.querySelector(`.header-row > .cell[data-field="${i}"]`)?.classList.add(Ge.DRAGGING)}),i.addEventListener("dragend",()=>{this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.draggedGroupFields=[],this.clearDragClasses()}),i.addEventListener("dragover",e=>{if(e.preventDefault(),!this.isDragging)return;if(this.draggedGroupFields.length>0&&this.draggedGroupFields.length===n.length&&this.draggedGroupFields.every(e=>n.includes(e)))return;const t=i.getBoundingClientRect(),r=t.left+t.width/2,o=e.clientX<r;this.clearDragClasses(),i.classList.add("drop-target"),i.classList.toggle("drop-before",o),i.classList.toggle("drop-after",!o)}),i.addEventListener("dragleave",()=>{i.classList.remove("drop-target","drop-before","drop-after")}),i.addEventListener("drop",e=>{if(e.preventDefault(),!this.isDragging)return;const t=i.getBoundingClientRect(),r=e.clientX<t.left+t.width/2;if(this.draggedGroupFields.length>0){if(this.draggedGroupFields.length===n.length&&this.draggedGroupFields.every(e=>n.includes(e)))return;this.executeGroupBlockMove(this.draggedGroupFields,n,r)}else if(this.draggedField){const e=this.getColumnOrder(),t=r?n[0]:n[n.length-1],i=e.indexOf(this.draggedField),o=r?e.indexOf(t):e.indexOf(t)+1;if(-1===i||-1===o)return;const s=o>i?o-1:o,l=kr(e,i,s);this.emitCancelable("column-move",{field:this.draggedField,fromIndex:i,toIndex:s,columnOrder:l})||this.updateColumnOrder(l)}})))})}getGroupFragmentFields(e,t){const i=e.style.gridColumn,r=/(\d+)\s*\/\s*span\s+(\d+)/.exec(i);if(!r)return[];const n=parseInt(r[1],10),o=parseInt(r[2],10),s=this.visibleColumns,l=[];for(let a=n-1;a<n-1+o&&a<s.length;a++){const e=s[a];e&&l.push(e.field)}return l}executeGroupBlockMove(e,t,i){const r=this.getColumnOrder(),n=r.filter(t=>!e.includes(t)),o=i?t[0]:t[t.length-1],s=n.indexOf(o);if(-1===s)return;const l=i?s:s+1,a=r.filter(t=>e.includes(t));n.splice(l,0,...a),this.emitCancelable("column-move",{field:e[0],fromIndex:r.indexOf(e[0]),toIndex:l,columnOrder:n})||this.updateColumnOrder(n)}onKeyDown(e){if(!e.altKey||"ArrowLeft"!==e.key&&"ArrowRight"!==e.key)return;const t=this.#x,i=t._focusCol,r=t._visibleColumns;if(i<0||i>=r.length)return;const n=r[i];if(!this.canMoveColumnWithPlugins(n))return;const o=this.getColumnOrder(),s=o.indexOf(n.field);if(-1===s)return;const l="ArrowLeft"===e.key?s-1:s+1;if(l<0||l>=o.length)return;const a=r.find(e=>e.field===o[l]);return this.canMoveColumnWithPlugins(a)?(this.moveColumn(n.field,l),t._focusCol=l,at(this.#x),e.preventDefault(),e.stopPropagation(),!0):void 0}getColumnOrder(){return this.grid.getColumnOrder()}moveColumn(e,t){const i=this.getColumnOrder(),r=i.indexOf(e);if(-1===r)return;const n=kr(i,r,t);this.emitCancelable("column-move",{field:e,fromIndex:r,toIndex:t,columnOrder:n})||this.updateColumnOrder(n)}setColumnOrder(e){this.updateColumnOrder(e)}resetColumnOrder(){const e=this.originalColumnOrder??this.columns.map(e=>e.field);this.updateColumnOrder(e)}captureHeaderPositions(){const e=/* @__PURE__ */new Map;return this.gridElement?.querySelectorAll(".header-row > .cell[data-field]").forEach(t=>{const i=t.getAttribute("data-field");i&&e.set(i,t.getBoundingClientRect().left)}),e}animateFLIP(e){const t=this.gridElement;if(!t||0===e.size)return;const i=/* @__PURE__ */new Map;if(t.querySelectorAll(".header-row > .cell[data-field]").forEach(t=>{const r=t.getAttribute("data-field");if(!r)return;const n=e.get(r);if(void 0===n)return;const o=n-t.getBoundingClientRect().left;Math.abs(o)>1&&i.set(r,o)}),0===i.size)return;const r=[];if(t.querySelectorAll(".cell[data-field]").forEach(e=>{const t=i.get(e.getAttribute("data-field")??"");if(void 0!==t){const i=e;i.style.transform=`translateX(${t}px)`,r.push(i)}}),0===r.length)return;t.offsetHeight;const n=this.animationDuration;requestAnimationFrame(()=>{r.forEach(e=>{e.classList.add("flip-animating"),e.style.transform=""}),setTimeout(()=>{r.forEach(e=>{e.style.transform="",e.classList.remove("flip-animating")})},n+50)})}animateFade(e){const t=this.gridElement;if(!t)return void e();const i=this.captureHeaderPositions();e();const r=/* @__PURE__ */new Set;if(t.querySelectorAll(".header-row > .cell[data-field]").forEach(e=>{const t=e.getAttribute("data-field");if(!t)return;const n=i.get(t);if(void 0===n)return;const o=e.getBoundingClientRect().left;Math.abs(n-o)>1&&r.add(t)}),0===r.size)return;const n=[];if(t.querySelectorAll(".cell[data-field]").forEach(e=>{const t=e.getAttribute("data-field");if(t&&r.has(t)){const t=e;t.classList.add("fade-animating"),n.push(t)}}),0===n.length)return;const o=this.animationDuration;setTimeout(()=>{n.forEach(e=>e.classList.remove("fade-animating"))},o+50)}updateColumnOrder(e){const t=this.animationType;if("flip"===t&&this.gridElement){const t=this.captureHeaderPositions();this.grid.setColumnOrder(e),"function"==typeof this.grid.forceLayout?this.grid.forceLayout().then(()=>{this.animateFLIP(t)}):requestAnimationFrame(()=>{this.animateFLIP(t)})}else"fade"===t?this.animateFade(()=>this.grid.setColumnOrder(e)):this.grid.setColumnOrder(e);this.grid.requestStateChange?.()}};we("reorderColumns",e=>new Ir("boolean"==typeof e?{}:e??{}));var Lr=0,Dr=/* @__PURE__ */new Set,Pr="tbw-responsive-column-fade",Fr="data-responsive-column-fade";function Hr(e){for(const t of e.getAnimations?.()??[])t.id===Pr&&(t.finished?.catch(()=>{}),t.cancel())}function Gr(e){return e.startsWith("minmax(")?e.includes("fr")?"minmax(0px, 0fr)":"minmax(0px, 0px)":e.endsWith("fr")?"0fr":e.endsWith("%")?"0%":"0px"}var zr=class extends Y{name="responsive";version="1.0.0";styles='tbw-grid[data-responsive-transition]::view-transition-group(*){animation-duration:var(--tbw-responsive-duration,.2s)}tbw-grid[data-responsive-transition] .data-grid-row>.cell{view-transition-class:tbw-responsive-cell}tbw-grid[data-responsive-transition]::view-transition-group(.tbw-responsive-cell){animation-timing-function:ease-in-out}tbw-grid[data-responsive-transition]::view-transition-old(.tbw-responsive-cell){object-fit:none;object-position:right center;width:100%;height:100%}tbw-grid[data-responsive-transition]::view-transition-new(.tbw-responsive-cell){object-fit:none;object-position:right center;width:100%;height:100%}tbw-grid[data-responsive-transition]::view-transition-old(.tbw-responsive-cell){animation-duration:calc(var(--tbw-responsive-duration,.2s) * .35)}tbw-grid[data-responsive-transition]::view-transition-new(.tbw-responsive-cell){animation-duration:calc(var(--tbw-responsive-duration,.2s) * .35)}tbw-grid[data-responsive-animate] .data-grid-row,tbw-grid[data-responsive-animate] .data-grid-row>.cell{transition:opacity var(--tbw-responsive-duration,.2s) ease-out, transform var(--tbw-responsive-duration,.2s) ease-out}tbw-grid[data-responsive][data-responsive-animate] .data-grid-row{animation:responsive-card-enter var(--tbw-responsive-duration,.2s) ease-out}@keyframes responsive-card-enter{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}tbw-grid[data-responsive] .header{display:none!important}tbw-grid[data-responsive] .footer-row{display:none}tbw-grid[data-responsive] .tbw-scroll-area{overflow-x:hidden;min-width:0!important}tbw-grid[data-responsive] .rows-body-wrapper{min-width:0!important}tbw-grid[data-responsive] .data-grid-row:not(.group-row){padding:var(--tbw-cell-padding);border-bottom:1px solid var(--tbw-color-border);background:var(--tbw-color-bg);padding-inline-start:var(--tbw-spacing-xl);position:relative;contain:none!important;content-visibility:visible!important;grid-template-columns:none!important;display:block!important}tbw-grid[data-responsive] .data-grid-row:not(.group-row):nth-child(2n){background:var(--tbw-color-row-alt)}tbw-grid[data-responsive] .data-grid-row:not(.group-row):hover{background:var(--tbw-color-row-hover)}tbw-grid[data-responsive] .data-grid-row:not(.group-row)[aria-selected=true]{background:var(--tbw-color-selection)}tbw-grid[data-responsive] .data-grid-row:not(.group-row)[aria-selected=true]:before{content:"";background:var(--tbw-color-accent);inset-inline-start:0;width:4px;position:absolute;top:0;bottom:0}tbw-grid[data-responsive] .data-grid-row:not(.group-row,.responsive-card){height:auto!important;min-height:auto!important}tbw-grid[data-responsive] .data-grid-row:not(.group-row)>.cell{padding:var(--tbw-spacing-xs) var(--tbw-spacing-md);justify-content:space-between;align-items:center;white-space:normal!important;border:none!important;background:0 0!important;border-inline-end:none!important;width:100%!important;min-width:0!important;height:auto!important;min-height:auto!important;line-height:1.5!important;display:flex!important;position:static!important;left:auto!important;right:auto!important;overflow:visible!important}tbw-grid[data-responsive] .data-grid-row:not(.group-row)>.cell:before{content:attr(data-header) ": ";color:var(--tbw-color-header-fg);min-width:100px;flex-shrink:0;margin-inline-end:var(--tbw-spacing-md);font-weight:600}tbw-grid[data-responsive] .data-grid-row:not(.group-row)>.cell:after{content:none}tbw-grid[data-responsive] .cell[data-utility],tbw-grid[data-responsive] .data-grid-row>.cell[data-responsive-hidden],tbw-grid[data-responsive] .data-grid-row>.cell[data-responsive-value-only]:before{display:none!important}tbw-grid[data-responsive] .data-grid-row>.cell[data-responsive-value-only]{font-weight:500;justify-content:flex-start!important}tbw-grid[data-responsive][data-responsive-hide-header] .data-grid-row:not(.group-row)>.cell:before{display:none!important}tbw-grid:not([data-responsive]) .cell[data-responsive-hidden]{pointer-events:none;opacity:0;border-inline-width:0!important;padding-inline:0!important;overflow:hidden!important}tbw-grid[data-responsive-column-fade] :is(.header-row,.data-grid-row){transition:grid-template-columns var(--tbw-responsive-duration,.2s) ease-out}tbw-grid[data-responsive] .tbw-footer,tbw-grid[data-responsive] .tbw-header-pinned,tbw-grid[data-responsive] .tbw-pinned-rows,tbw-grid[data-responsive] .tbw-aggregation-rows{display:none!important}tbw-grid[data-responsive] .tbw-pinned-rows,tbw-grid[data-responsive] .tbw-aggregation-rows,tbw-grid[data-responsive] .tbw-aggregation-row{min-width:0!important}tbw-grid[data-responsive] .data-grid-row.responsive-card{padding:var(--tbw-cell-padding);border-bottom:1px solid var(--tbw-color-border);display:block!important}tbw-grid[data-responsive] .data-grid-row.responsive-card>*{width:100%}tbw-grid[data-responsive] .data-grid-row.responsive-card .cell:before{display:none}';static manifest={queries:[{type:"isCardMode",description:"Returns whether the grid is currently in responsive card mode"}]};#Mt;#It=!1;#Lt;#Dt=!1;#Pt=0;#Ft;#Ht=Number.NEGATIVE_INFINITY;#Gt=++Lr;#zt=`tbw-responsive-row-${this.#Gt}-`;#Ot=`tbw-responsive-cell-${this.#Gt}-`;#Nt=0;#qt=/* @__PURE__ */new Set;#$t=Dr;#Wt=/* @__PURE__ */new Set;#Bt=Dr;#Vt=/* @__PURE__ */new Set;#Kt=/* @__PURE__ */new Set;#jt=0;#Ut;#Yt=!1;#Zt=null;#Xt=[];get#x(){return this.grid}isResponsive(){return this.#It}setResponsive(e){e!==this.#It&&(this.#It=e,this.#Qt(),this.emit("responsive-change",{isResponsive:e,width:this.#Pt,breakpoint:this.config.breakpoint??0}))}setBreakpoint(e){this.config.breakpoint=e,this.#Ft=void 0,this.#Jt(this.#Pt)}setCardRenderer(e){this.config.cardRenderer=e,this.#It&&this.requestRender()}getWidth(){return this.#Pt}getActiveBreakpoint(){return this.#Zt}attach(e){super.attach(e),this.#ei(),this.#ti(this.config.hiddenColumns),this.config.breakpoints?.length&&(this.#Xt=[...this.config.breakpoints].sort((e,t)=>t.maxWidth-e.maxWidth)),this.#ii(),this.#ri(),this.#ni=void 0,this.#oi=void 0,this.#It&&this.requestRender(),this.#Mt=new ResizeObserver(e=>{this.#si(e[0]?.contentRect.width??0)}),this.#Mt.observe(this.gridElement)}#si(e){if(this.#Pt=e,e===this.#Ft)return;const t=this.config.debounceMs??100,i=performance.now()-this.#Ht;if(clearTimeout(this.#Lt),i>=t)return this.#Ft=e,void this.#Jt(e);this.#Lt=setTimeout(()=>{this.#Ft=this.#Pt,this.#Jt(this.#Pt)},t-i)}#ei(){const e=this.gridElement;if(!e)return;const t=e.querySelector("tbw-grid-responsive-card");if(!t)return;const i=this.#x.__frameworkAdapter;if(i?.parseResponsiveCardElement){const e=i.parseResponsiveCardElement(t);e&&(this.config={...this.config,cardRenderer:e})}const r=t.getAttribute("breakpoint"),n=t.getAttribute("card-row-height"),o=t.getAttribute("hidden-columns"),s=t.getAttribute("hide-header"),l=t.getAttribute("debounce-ms"),a={};if(null!==r){const e=parseInt(r,10);isNaN(e)||(a.breakpoint=e)}if(null!==n&&(a.cardRowHeight="auto"===n?"auto":parseInt(n,10)),null!==o&&(a.hiddenColumns=o.split(",").map(e=>e.trim()).filter(e=>e.length>0)),null!==s&&(a.hideHeader="false"!==s),null!==l){const e=parseInt(l,10);isNaN(e)||(a.debounceMs=e)}const d=t.innerHTML.trim();!d||this.config.cardRenderer||i?.parseResponsiveCardElement||(a.cardRenderer=e=>{const t=B(d,{value:e,row:e}),i=document.createElement("div");return i.className="tbw-responsive-card-content",q(i,t),i}),Object.keys(a).length>0&&(this.config={...this.config,...a})}#ti(e){this.#qt=/* @__PURE__ */new Set,this.#Wt.clear();for(const t of e??[])"string"==typeof t?this.#qt.add(t):t.showValue?this.#Wt.add(t.field):this.#qt.add(t.field);this.#li()}get#ai(){return this.#Xt.length>0?null!==this.#Zt:this.#It}#li(){const e=this.#ai?this.#qt:Dr;for(const t of this.#$t)e.has(t)||this.#di(t,!1);for(const t of e)this.#$t.has(t)||this.#di(t,!0);this.#ci()}#di(e,t){(t?this.#Kt:this.#Vt).delete(e),(t?this.#Vt:this.#Kt).add(e)}#ci(){const e=this.#ui;e<=0||0===this.#Vt.size&&0===this.#Kt.size?this.#hi():(this.#jt=performance.now()+e,this.gridElement?.setAttribute(Fr,""),clearTimeout(this.#Ut),this.#Ut=setTimeout(()=>this.#hi(),e))}#hi(){clearTimeout(this.#Ut),this.#Ut=void 0,this.#jt=0,this.#Vt.clear(),this.#Kt.clear(),this.gridElement?.removeAttribute(Fr);for(const e of this.gridElement?.querySelectorAll(".cell[data-field]")??[])Hr(e)}#gi(e,t,i,r){Hr(e);const n=t?[{opacity:1},{opacity:0}]:[{opacity:0},{opacity:1}],o=e.animate?.(n,{duration:i,easing:"ease-out",fill:t?"forwards":"none"});o&&(o.id=Pr,o.currentTime=r)}#pi(e){const t=this.#x?._gridTemplate??"";if(!t)return;const i=this.visibleColumns,r=function(e){const t=[];let i=0,r=0;for(let n=0;n<e.length;n++){const o=e[n];"("===o?i++:")"===o?i--:" "===o&&0===i&&(n>r&&t.push(e.slice(r,n)),r=n+1)}return r<e.length&&t.push(e.slice(r)),t}(t);let n=!1;if(e.size>0&&r.length===i.length)for(let o=0;o<i.length;o++){const t=i[o]?.field;t&&e.has(t)&&(r[o]=Gr(r[o]),n=!0)}(n||this.#Yt)&&(this.gridElement.style.setProperty("--tbw-column-template",n?r.join(" "):t),this.#Yt=n)}detach(){if(this.#Mt?.disconnect(),this.#Mt=void 0,this.#hi(),clearTimeout(this.#Lt),this.#Lt=void 0,this.#Ft=void 0,this.#Ht=Number.NEGATIVE_INFINITY,this.gridElement){this.gridElement.removeAttribute("data-responsive"),this.gridElement.removeAttribute("data-responsive-animate"),this.gridElement.removeAttribute("data-responsive-hide-header"),this.gridElement.removeAttribute("data-responsive-transition");for(const e of this.gridElement.querySelectorAll(".cell[data-responsive-hidden], .cell[data-responsive-value-only]"))e.removeAttribute("data-responsive-hidden"),e.removeAttribute("data-responsive-value-only"),e.removeAttribute("aria-hidden");this.#fi()}this.#$t=Dr,this.#Bt=Dr,super.detach()}handleQuery(e){if("isCardMode"===e.type)return this.#It}afterRender(){this.#mi();const e=this.#Xt.length>0?null!==this.#Zt:this.#It,t=e?this.#qt:Dr,i=e?this.#Wt:Dr,r=this.#Vt.size>0||this.#Kt.size>0,n=this.#$t.size>0||this.#Bt.size>0;if(this.#$t=t,this.#Bt=i,this.#pi(this.#It?Dr:t),0===t.size&&0===i.size&&!r&&!n)return;const o=this.#ui,s=r?Math.min(o,Math.max(0,o-(this.#jt-performance.now()))):0,l=this.gridElement.querySelectorAll(".cell[data-field]");for(const a of l){const e=a.getAttribute("data-field");if(!e)continue;const r=this.#Vt.has(e);(r||this.#Kt.has(e))&&this.#gi(a,r,o,s),t.has(e)?(a.setAttribute("data-responsive-hidden",""),a.setAttribute("aria-hidden","true"),a.removeAttribute("data-responsive-value-only")):i.has(e)?(a.setAttribute("data-responsive-value-only",""),a.removeAttribute("data-responsive-hidden"),a.removeAttribute("aria-hidden")):(a.removeAttribute("data-responsive-hidden"),a.removeAttribute("data-responsive-value-only"),a.removeAttribute("aria-hidden"))}}#Jt(e){if(this.#Xt.length>0)return void this.#wi(e);const t=this.config.breakpoint??0;0!==t||this.#Dt||(this.#Dt=!0,this.warn("TBW110","No breakpoint configured. Responsive mode is disabled. Set a breakpoint based on your grid's column count."));const i=t>0&&e<t;i!==this.#It&&(this.#It=i,this.#Ht=performance.now(),this.#Qt(),this.emit("responsive-change",{isResponsive:i,width:e,breakpoint:t}))}#wi(e){let t=null;for(const i of this.#Xt)e<=i.maxWidth&&(t=i);if(t!==this.#Zt){this.#Zt=t,this.#Ht=performance.now(),t?.hiddenColumns?this.#ti(t.hiddenColumns):this.#ti(this.config.hiddenColumns);const i=!0===t?.cardLayout,r=i!==this.#It;r&&(this.#It=i),this.#Qt(r),this.emit("responsive-change",{isResponsive:this.#It,width:e,breakpoint:t?.maxWidth??0})}}#Qt(e=!0){this.#ii(),e&&this.#hi();const t=e?this.#bi():null;if(!t)return e&&this.#vi(),void this.requestRender();const i=this.gridElement,r=this.#yi(),n=++this.#Nt;"none"!==r&&this.#Ci(r),i.setAttribute("data-responsive-transition","");const o=t(async()=>{this.#vi(),await(this.#x.forceLayout?.()),"none"!==r&&this.#Ci(r)}),s=()=>{n===this.#Nt&&(i.removeAttribute("data-responsive-transition"),"none"!==r&&this.#fi())};o.finished.then(s,s),o.ready?.catch(()=>{})}get#xi(){const{animation:e,animate:t}=this.config;return void 0!==e?e:!1!==t&&"fade"}get#ui(){return!1!==this.#xi&&this.isAnimationEnabled?this.config.animationDuration??200:0}#ii(){this.gridElement.style.setProperty("--tbw-responsive-duration",`${this.#ui}ms`)}#bi(){if(!1===this.#xi||!this.isAnimationEnabled)return null;const e=this.gridElement,t=e.startViewTransition;return"function"==typeof t?t.bind(e):null}get#Ri(){return"function"==typeof this.gridElement?.startViewTransition}#Ci(e){const t=this.gridElement.querySelectorAll(".data-grid-row[aria-rowindex]");for(const i of t){const t=i.getAttribute("aria-rowindex");if("rows"!==e)for(const e of i.querySelectorAll(":scope > .cell[aria-colindex]")){const i=`${this.#Ot}${t}-${e.getAttribute("aria-colindex")}`;e.style.setProperty("view-transition-name",i)}else i.style.setProperty("view-transition-name",`${this.#zt}${t}`)}}#yi(){const e=this.#xi;if("morph-cells"===e){const e=this.gridElement.querySelectorAll(".data-grid-row > .cell[aria-colindex]").length;return e>0&&e<=150?"cells":"rows"}return"morph-rows"===e?"rows":"none"}#fi(){const e=this.gridElement.querySelectorAll(".data-grid-row, .data-grid-row > .cell");for(const t of e)t.style.removeProperty("view-transition-name")}#Si;#ri(){this.gridElement.toggleAttribute("data-responsive",this.#It),this.gridElement.toggleAttribute("data-responsive-animate",!1!==this.#xi&&!this.#Ri),this.gridElement.toggleAttribute("data-responsive-hide-header",this.#It&&!0===this.config.hideHeader)}#vi(){this.#ri();const e=this.#x;if(this.#It){e._virtualization&&(this.#Si=e._virtualization.rowHeight);const t=this.gridElement.querySelector(".tbw-scroll-area");t&&(t.scrollLeft=0)}else{const t=this.gridElement.querySelectorAll(".data-grid-row");for(const e of t)e.style.height="",e.classList.remove("responsive-card");this.#Si&&this.#Si>0&&e._virtualization&&(e._virtualization.rowHeight=this.#Si,this.#Si=void 0),this.#ni=void 0,this.#oi=void 0,this.#Ei=void 0}}renderRow(e,t,i){if(!this.#It||!this.config.cardRenderer)return;if(e.__isGroupRow)return;t.replaceChildren();const r=this.config.cardRenderer(e,i);t.className="data-grid-row responsive-card";const n=this.config.cardRowHeight;return t.style.height="auto"===n||void 0===n?"auto":`${this.#Ai()}px`,r.hasAttribute("role")||(r.setAttribute("role","gridcell"),r.setAttribute("aria-colindex","1")),t.appendChild(r),!0}onKeyDown(e){if(!this.#It)return!1;if(this.config.cardRenderer&&["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(e.key))return!1;const t=this.rows.length-1,i=this.visibleColumns.length-1;switch(e.key){case"ArrowDown":if(this.grid._focusCol<i)return this.grid._focusCol+=1,e.preventDefault(),at(this.#x),!0;if(this.grid._focusRow<t)return this.grid._focusRow+=1,this.grid._focusCol=0,e.preventDefault(),at(this.#x),!0;break;case"ArrowUp":if(this.grid._focusCol>0)return this.grid._focusCol-=1,e.preventDefault(),at(this.#x),!0;if(this.grid._focusRow>0)return this.grid._focusRow-=1,this.grid._focusCol=i,e.preventDefault(),at(this.#x),!0;break;case"ArrowRight":if(this.grid._focusRow<t)return this.grid._focusRow+=1,e.preventDefault(),at(this.#x),!0;break;case"ArrowLeft":if(this.grid._focusRow>0)return this.grid._focusRow-=1,e.preventDefault(),at(this.#x),!0}return!1}#ni;#oi;#Ei;#Ai(){const e=this.config.cardRowHeight,t=this.#ni;return"number"==typeof e&&e>0?t&&t>e?t:e:t&&t>0?t:80}#_i(){return this.#oi&&this.#oi>0?this.#oi:this.#Si??28}#ki(){for(const e of this.rows)if(e.__isGroupRow)return!0;return!1}getRowHeight(e,t){if(this.#It&&this.config.cardRenderer)return e.__isGroupRow?this.#_i():this.#Ai()}#Ti(){let e=0;for(const t of this.rows)t.__isGroupRow||e++;return e}#Mi=!1;#mi(){if(!this.#It)return;let e=!1;const t=this.#x,i=this.#ki(),r=this.#Ti();if(r!==this.#Ei&&(this.#Ei=r,e=!0),i){const t=this.gridElement.querySelector(".data-grid-row.group-row");if(t){const i=t.getBoundingClientRect().height;i>0&&i!==this.#oi&&(this.#oi=i,e=!0)}}const n=this.config.cardRenderer?".data-grid-row.responsive-card":".data-grid-row:not(.group-row)",o=this.gridElement.querySelector(n);if(o){const r=o.getBoundingClientRect().height;r>0&&r!==this.#ni&&(this.#ni=r,e=!0,!i&&t._virtualization&&(t._virtualization.rowHeight=r))}e&&!this.#Mi&&(this.#Mi=!0,queueMicrotask(()=>{this.#Mi=!1,this.grid&&this.#It&&this.#x.refreshVirtualWindow?.(!0,!0)}))}};we("responsive",e=>new zr("boolean"==typeof e?{}:e??{}));var Or=/* @__PURE__ */new Map;function Nr(e){const t=Or.get(e);if(!t)return;if(t.hasPrimitives)return;const i=[];for(const r of t.refs){const e=r.deref();if(void 0===e)return;i.push(e)}return i}function qr(e){Or.delete(e)}function $r(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID)return crypto.randomUUID();if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues){const e=/* @__PURE__ */new Uint32Array(2);return crypto.getRandomValues(e),`drag-${Date.now().toString(36)}-${e[0].toString(36)}${e[1].toString(36)}`}return`drag-${Date.now().toString(36)}-${(++Wr).toString(36)}`}var Wr=0,Br=null;function Vr(){return Br}function Kr(){Br=null}var jr="application/x-tbw-grid-rows+json";function Ur(e){const t=e.match(/^application\/x-tbw-grid-rows\+json;zone=(.*)$/);if(!t)return null;try{return decodeURIComponent(t[1])}catch{return t[1]}}function Yr(e){return JSON.stringify(e)}function Zr(e,t,i,r){if(!e)return{overIndex:null,insertIndex:r,isBefore:!1};const n=i(e);if(n<0)return{overIndex:null,insertIndex:r,isBefore:!1};const o=e.getBoundingClientRect(),s=t<o.top+o.height/2;return{overIndex:n,insertIndex:s?n:n+1,isBefore:s}}var Xr="__tbw_row_drag",Qr=null,Jr=/* @__PURE__ */new Set;function en(){if("undefined"==typeof BroadcastChannel)return null;if(Qr)return Qr;try{(Qr=new BroadcastChannel("tbw-row-drag-drop")).addEventListener("message",e=>{const t=e.data;if(t&&"tbw-row-drag-drop:transfer"===t.type)for(const i of Array.from(Jr))try{i(t)}catch{}})}catch{Qr=null}return Qr}var tn=/* @__PURE__ */new Set;var rn=class e extends Y{name="rowDragDrop";styles='@layer tbw-plugins{[data-field=__tbw_row_drag]{justify-content:center;align-items:center;display:flex}.dg-row-drag-handle{cursor:grab;-webkit-user-select:none;user-select:none;min-width:1em;min-height:1em;color:var(--tbw-row-reorder-handle-color,var(--tbw-color-fg-muted));transition:color var(--tbw-transition-duration,.12s) var(--tbw-transition-ease,ease);font-size:var(--tbw-font-size,1em);letter-spacing:-2px;justify-content:center;align-items:center;display:flex;position:relative}.dg-row-drag-handle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}.dg-row-drag-handle:hover{color:var(--tbw-row-reorder-handle-hover,var(--tbw-color-fg))}.dg-row-drag-handle:active{cursor:grabbing}@media (hover:none){.dg-row-drag-handle{color:var(--tbw-row-reorder-handle-hover,var(--tbw-color-fg))}}@media (pointer:coarse){.dg-row-drag-handle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}.data-grid-row.dragging{opacity:.6}.data-grid-row[draggable=true]{cursor:grab}.data-grid-row[draggable=true].dragging{cursor:grabbing}.tbw-row-drag-clone{pointer-events:none;position:fixed;top:-10000px;left:-10000px}.tbw-row-drag-count{pointer-events:none;background:var(--tbw-row-reorder-indicator,var(--tbw-color-accent));color:var(--tbw-color-accent-fg);box-shadow:0 2px 6px var(--tbw-color-shadow);z-index:9999;border-radius:999px;padding:2px 8px;font:600 12px/1.4 system-ui,sans-serif;position:fixed;top:-1000px;left:-1000px}.data-grid-row.drop-target{position:relative}.data-grid-row.drop-target.drop-before:before,.data-grid-row.drop-target.drop-after:after{content:"";height:var(--tbw-drop-indicator-width,2px);background-color:var(--tbw-drop-indicator-color,var(--tbw-row-reorder-indicator,var(--tbw-color-accent)));z-index:10;pointer-events:none;position:absolute;left:0;right:0}.data-grid-row.drop-target.drop-before:before{top:0}.data-grid-row.drop-target.drop-after:after{bottom:0}.tbw-grid--drop-target-active{outline:2px dashed var(--tbw-drop-indicator-color,var(--tbw-color-accent));outline-offset:-2px}.tbw-grid--drop-target-rejected{outline:2px dashed var(--tbw-color-danger);outline-offset:-2px}.tbw-grid--auto-scrolling{cursor:ns-resize}.data-grid-row.flip-animating{transition:transform var(--tbw-animation-duration,.2s) ease-out;will-change:transform;z-index:1}.tbw-row-move-menu{min-width:10rem;padding:var(--tbw-spacing-xs,.25rem);background:var(--tbw-color-panel-bg,light-dark(#fff,#1f1f1f));color:var(--tbw-color-fg,light-dark(#1a1a1a,#f0f0f0));border:1px solid var(--tbw-color-border,light-dark(#d0d0d0,#3a3a3a));border-radius:var(--tbw-border-radius,.25rem);box-shadow:var(--tbw-shadow-md,0 4px 12px #00000040);font:inherit;z-index:10001;flex-direction:column;margin:0;display:flex;position:fixed}.tbw-row-move-menu[hidden]{display:none}.tbw-row-move-menu-item{min-height:var(--tbw-touch-target-min,24px);padding:var(--tbw-spacing-xs,.25rem) var(--tbw-spacing-sm,.5rem);text-align:start;border-radius:min(var(--tbw-border-radius,.25rem), 6px);color:inherit;font:inherit;cursor:pointer;background:0 0;border:none}.tbw-row-move-menu-item:hover:not(:disabled){background:var(--tbw-color-row-hover,light-dark(#f0f0f0,#2a2a2a))}.tbw-row-move-menu-item:disabled{opacity:.5;cursor:default}}';static manifest={events:[{type:"row-move",description:"Intra-grid row reorder.",cancelable:!0},{type:"row-drag-start",description:"Cross-grid drag started on this grid.",cancelable:!0},{type:"row-drag-end",description:"Drag finished on this grid (regardless of outcome)."},{type:"row-drop",description:"Cross-grid drop landing on this grid.",cancelable:!0},{type:"row-transfer",description:"Cross-grid transfer completed (fires on both grids)."}]};get defaultConfig(){return{enableKeyboard:!0,dragHandlePosition:"left",dragHandleWidth:40,debounceMs:150,animation:"flip",operation:"move",autoScroll:!0,dragFrom:"handle"}}shouldRenderDragHandle(){const e=this.config.showDragHandle;return!1!==e&&(!0===e||"row"!==this.config.dragFrom)}get rowIsDraggable(){return"row"===this.config.dragFrom||"both"===this.config.dragFrom}get animationType(){return!!this.isAnimationEnabled&&(void 0!==this.config.animation?this.config.animation:"flip")}isDragging=!1;draggedRowIndex=null;draggedRows=[];draggedIndices=[];dragSessionId=null;dragAccepted=!1;dropRowIndex=null;pendingMove=null;debounceTimer=null;lastFocusCol=0;autoScroller=null;gridId="";remoteTransferListener=e=>this.onRemoteTransfer(e);moveMenu=null;get internalGrid(){return this.grid}attach(e){super.attach(e);const t=this.gridElement;var i;t&&(this.gridId=t.id||`tbw-grid-${$r().slice(0,8)}`,t.id||(t.id=this.gridId),this.setupDelegatedDragListeners(),i=this.remoteTransferListener,Jr.add(i),en(),tn.add(this))}detach(){this.clearDebounceTimer(),this.autoScroller?.stop(),this.autoScroller=null,function(e){if(Jr.delete(e),0===Jr.size&&Qr){try{Qr.close()}catch{}Qr=null}}(this.remoteTransferListener),tn.delete(this),this.moveMenu?.dispose(),this.moveMenu=null,this.dragSessionId&&qr(this.dragSessionId),Kr(),this.resetDragState(),super.detach()}processColumns(e){if(!this.shouldRenderDragHandle())return[...e];const t={field:Xr,header:"",width:this.config.dragHandleWidth??40,resizable:!1,sortable:!1,filterable:!1,lockPosition:!0,utility:!0,viewRenderer:()=>{const e=document.createElement("div");return e.className="dg-row-drag-handle",e.setAttribute("aria-label","Drag to reorder, or activate for move options"),e.setAttribute("role","button"),e.setAttribute("tabindex","-1"),e.draggable=!0,e.addEventListener("click",t=>{t.stopPropagation(),this.openMoveMenu(e)}),this.setIcon(e,"dragHandle"),e}};return"right"===this.config.dragHandlePosition?[...e,t]:[t,...e]}afterRender(){this.applyRowDraggable()}onScrollRender(){this.applyRowDraggable()}applyRowDraggable(){const e=this.internalGrid._bodyEl;if(!e)return;const t=this.rowIsDraggable,i=e.querySelectorAll(".data-grid-row");for(const r of i)t?"true"!==r.getAttribute("draggable")&&r.setAttribute("draggable","true"):r.hasAttribute("draggable")&&r.removeAttribute("draggable")}onKeyDown(e){if(!this.config.enableKeyboard)return;if(!e.ctrlKey||"ArrowUp"!==e.key&&"ArrowDown"!==e.key)return;const t=this.internalGrid,i=t._focusRow,r=t._rows??this.sourceRows;if(i<0||i>=r.length)return;const n="up"==("ArrowUp"===e.key?"up":"down")?i-1:i+1;if(n<0||n>=r.length)return;const o=r[i];return this.canMoveRow(i,n)?(this.handleKeyboardMove(o,i,n,t._focusCol),e.preventDefault(),e.stopPropagation(),!0):void 0}onCellClick(){this.flushPendingMove()}moveRow(e,t){const i=[...this.sourceRows];e<0||e>=i.length||t<0||t>=i.length||e!==t&&this.canMoveRow(e,t)&&this.executeIntraGridMove(i[e],e,t,"keyboard")}canMoveRow(e,t){const i=this.internalGrid._rows??this.sourceRows;if(e<0||e>=i.length)return!1;if(t<0||t>=i.length)return!1;if(e===t)return!1;const r=i[e],n=this.grid?.query?.("canMoveRow",r);if(Array.isArray(n)&&n.includes(!1))return!1;if(this.config.canDrag&&!this.config.canDrag(r,e))return!1;if(this.config.canDrop){const i={sessionId:"intra",sourceGridId:this.gridId,dropZone:this.config.dropZone??"",rows:[r],rowIndices:[e],operation:"move"};if(!this.config.canDrop(i,t))return!1}return!0}setupDelegatedDragListeners(){const e=this.gridElement;if(!e)return;const t=this.disconnectSignal;e.addEventListener("dragstart",e=>this.onDragStart(e),{signal:t}),e.addEventListener("dragend",()=>this.onDragEnd(),{signal:t}),e.addEventListener("dragover",e=>this.onDragOver(e),{signal:t}),e.addEventListener("dragleave",e=>this.onDragLeave(e),{signal:t}),e.addEventListener("drop",e=>this.onDrop(e),{signal:t})}onDragStart(e){const t=e.target;if(!t)return;const i=t.closest(".dg-row-drag-handle");let r=null,n=!1;if(i)r=i.closest(".data-grid-row"),n=!0;else if(this.rowIsDraggable){if(this.isInteractiveDragOrigin(t))return;r=t.closest(".data-grid-row")}if(!r)return;const o=this.getRowIndex(r);if(o<0)return;const{rows:s,indices:l}=this.resolveDraggedRows(o);if(0===s.length)return;if(this.config.canDrag&&!this.config.canDrag(s[0],o))return void e.preventDefault();const a=this.config.operation??"move",d=this.config.dropZone??"",c=$r(),u={rows:s,indices:l,operation:a,dropZone:d};if(this.emitCancelable("row-drag-start",u))return void e.preventDefault();this.isDragging=!0,this.draggedRowIndex=o,this.draggedRows=s,this.draggedIndices=l,this.dragSessionId=c,this.dragAccepted=!1;const h=this.config.serializeRow??(e=>e),g={sessionId:c,sourceGridId:this.gridId,dropZone:d,rows:s.map(h),rowIndices:l,operation:a};if(e.dataTransfer){e.dataTransfer.effectAllowed="copy"===a?"copyMove":"move";try{e.dataTransfer.setData(jr,Yr(g)),d&&e.dataTransfer.setData(`${jr};zone=${encodeURIComponent(d)}`,Yr(g)),e.dataTransfer.setData("text/plain",function(e,t){const i=t.filter(e=>!e.utility&&"string"==typeof e.field&&""!==e.field),r=[];for(const n of e){const e=i.map(e=>{const t=n[e.field];return null==t?"":String(t).replace(/[\t\r\n]+/g," ")});r.push(e.join("\t"))}return r.join("\n")}(s,this.columns))}catch{}if(s.length>1){const t=document.createElement("div");t.className="tbw-row-drag-count",t.textContent=`${s.length} rows`,document.body.appendChild(t);try{e.dataTransfer.setDragImage(t,10,10)}catch{}setTimeout(()=>t.remove(),0)}else this.attachRowCloneDragImage(e,r,n?i:null)}!function(e,t){const i=[];let r=!1;for(const n of t)null!==n&&"object"==typeof n?i.push(new WeakRef(n)):r=!0;Or.set(e,{refs:i,hasPrimitives:r})}(c,s),function(e,t){Br={sessionId:e,payload:t}}(c,g),r.classList.add(Ge.DRAGGING),this.gridElement.classList.add("tbw-grid--drag-source")}static INTERACTIVE_DRAG_SELECTORS='input,textarea,select,button,a,[contenteditable=""],[contenteditable="true"],.dg-cell-editor,.tbw-checkbox-cell';isInteractiveDragOrigin(t){return null!==t.closest(e.INTERACTIVE_DRAG_SELECTORS)}attachRowCloneDragImage(e,t,i){if(!e.dataTransfer)return;const r=t.getBoundingClientRect(),n=t.cloneNode(!0);n.classList.add("tbw-row-drag-clone"),n.classList.remove("dragging","drop-target","drop-before","drop-after","flip-animating","row-focus"),n.removeAttribute("aria-selected"),n.style.width=`${r.width}px`,n.style.height=`${r.height}px`,this.gridElement.appendChild(n);let o=e.clientX-r.left,s=e.clientY-r.top;if(i){const e=i.getBoundingClientRect();o=e.left-r.left+e.width/2,s=e.top-r.top+e.height/2}o=Math.max(0,Math.min(r.width,o)),s=Math.max(0,Math.min(r.height,s));try{e.dataTransfer.setDragImage(n,o,s)}catch{}setTimeout(()=>n.remove(),0)}onDragOver(e){const t=e.dataTransfer;if(!t)return;const i=t.types?Array.from(t.types):[];if(!function(e){for(const t of e)if("application/x-tbw-grid-rows+json"===t||t.startsWith("application/x-tbw-grid-rows+json;"))return!0;return!1}(i)&&!this.isDragging)return;const r=this.config.dropZone??"",n=Vr(),o=this.isDragging&&n?.payload.sourceGridId===this.gridId;if(!o){if(!r)return;if(!(function(e,t){for(const i of e)if(Ur(i)===t)return i;return null}(i,r)||n&&n.payload.dropZone===r))return}e.preventDefault(),t&&(t.dropEffect=n?.payload.operation??this.config.operation??"move");const s=e.target.closest(".data-grid-row"),l=this.internalGrid._rows??[],a=Zr(s,e.clientY,e=>this.getRowIndex(e),l.length);if(o&&null!==a.overIndex&&a.overIndex===this.draggedRowIndex)this.clearDropTargetClasses();else{if(n&&this.config.canDrop){const e=this.config.canDrop(n.payload,a.insertIndex);if(this.gridElement.classList.toggle("tbw-grid--drop-target-active",e),this.gridElement.classList.toggle("tbw-grid--drop-target-rejected",!e),!e)return void this.clearDropTargetClasses()}else this.gridElement.classList.add("tbw-grid--drop-target-active");this.dropRowIndex=a.insertIndex,this.applyDropPositionClasses(s,a.isBefore),!1!==this.config.autoScroll&&(this.ensureAutoScroller(),this.autoScroller?.onPointerMove(e.clientY))}}onDragLeave(e){const t=e.target.closest(".data-grid-row");t&&t.classList.remove("drop-target","drop-before","drop-after"),e.currentTarget&&!this.gridElement.contains(e.relatedTarget)&&(this.gridElement.classList.remove("tbw-grid--drop-target-active","tbw-grid--drop-target-rejected"),this.autoScroller?.stop())}onDrop(e){e.preventDefault(),this.autoScroller?.stop(),this.gridElement.classList.remove("tbw-grid--drop-target-active","tbw-grid--drop-target-rejected"),this.clearDropTargetClasses();const t=e.dataTransfer;if(!t)return;let i=Vr()?.payload??null,r=null;if(i){const e=Nr(i.sessionId);e&&(r=e)}else{if(i=function(e){if(!e)return null;try{const t=JSON.parse(e);if("string"!=typeof t?.sessionId||"string"!=typeof t?.sourceGridId||"string"!=typeof t?.dropZone||!Array.isArray(t?.rows)||!Array.isArray(t?.rowIndices)||"move"!==t.operation&&"copy"!==t.operation)return null;for(const e of t.rowIndices)if("number"!=typeof e||!Number.isInteger(e)||e<0)return null;return t}catch{return null}}(t.getData(jr)),i){const e=Nr(i.sessionId);e&&(r=e)}}if(!i)return;const n=e.target.closest(".data-grid-row"),o=this.internalGrid._rows??[],s=Zr(n,e.clientY,e=>this.getRowIndex(e),o.length);let l=this.dropRowIndex??s.insertIndex;const a=i.sourceGridId===this.gridId,d=this.config.dropZone??"";if(a){const e=i.rowIndices[0];if(1===i.rowIndices.length&&l>e&&l--,e===l)return;const t=(r??i.rows)[0];if(!this.canMoveRow(e,l))return;return void this.executeIntraGridMove(t,e,l,"drag")}if(!d||d!==i.dropZone)return;if(this.config.canDrop&&!this.config.canDrop(i,l))return this.gridElement.classList.add("tbw-grid--drop-target-rejected"),void setTimeout(()=>this.gridElement.classList.remove("tbw-grid--drop-target-rejected"),200);const c=this.config.deserializeRow??(e=>e),u=r??i.rows.map(e=>c(e)),h={payload:i,sourceGridId:i.sourceGridId,targetIndex:l,operation:i.operation};if(this.emitCancelable("row-drop",h))return;const g=[...o];g.splice(l,0,...u),this.grid.rows=g;const p=this.findPeerOnGrid(i.sourceGridId);if("move"===i.operation&&p){const e=document.getElementById(i.sourceGridId);if(e){const t=(e._rows??e.rows??[]).slice(),r=[...i.rowIndices].sort((e,t)=>t-e);for(const e of r)e>=0&&e<t.length&&t.splice(e,1);e.rows=t}}p&&(p.dragAccepted=!0);const f={rows:u,fromGridId:i.sourceGridId,toGridId:this.gridId,fromIndices:i.rowIndices,toIndex:l,operation:i.operation};this.emit("row-transfer",f),p?p.emitTransfer(f):function(e){const t=en();if(t)try{t.postMessage(e)}catch{}}({type:"tbw-row-drag-drop:transfer",sessionId:i.sessionId,sourceGridId:i.sourceGridId,toGridId:this.gridId,dropZone:d,rowIndices:i.rowIndices,toIndex:l,operation:i.operation,serializedRows:i.rows})}onRemoteTransfer(e){if(e.sourceGridId!==this.gridId)return;const t=this.config.dropZone??"";if(!t||e.dropZone!==t)return;const i=this.config.deserializeRow??(e=>e),r=e.serializedRows.map(e=>i(e));if("move"===e.operation){const t=(this.internalGrid._rows??this.sourceRows).slice(),i=[...e.rowIndices].sort((e,t)=>t-e);for(const e of i)e>=0&&e<t.length&&t.splice(e,1);this.grid.rows=t}this.dragAccepted=!0,this.emit("row-transfer",{rows:r,fromGridId:e.sourceGridId,toGridId:e.toGridId,fromIndices:e.rowIndices,toIndex:e.toIndex,operation:e.operation})}onDragEnd(){if(this.dragSessionId&&qr(this.dragSessionId),Kr(),this.autoScroller?.stop(),this.gridElement.classList.remove("tbw-grid--drag-source"),this.isDragging){const e={rows:this.draggedRows,indices:this.draggedIndices,accepted:this.dragAccepted};this.emit("row-drag-end",e)}this.clearDragClasses(),this.resetDragState()}emitTransfer(e){this.emit("row-transfer",e)}findPeerOnGrid(e){const t=document.getElementById(e);return t?.getPluginByName?t.getPluginByName("rowDragDrop")??null:null}peersInDropZone(){const e=this.config.dropZone??"";if(!e)return[];const t=[];for(const i of tn){const r=i;r!==this&&((r.config.dropZone??"")===e&&t.push(r))}return t}get gridLabel(){const e=this.gridElement;return e?.getAttribute("aria-label")||e?.id||"grid"}openMoveMenu(e){const t=e.closest(".data-grid-row");if(!t)return;const i=this.getRowIndex(t);if(i<0)return;const r=this.internalGrid._rows??this.sourceRows,n=[{label:"Move up",disabled:0===i||!this.canMoveRow(i,i-1),run:()=>this.moveRow(i,i-1)},{label:"Move down",disabled:i>=r.length-1||!this.canMoveRow(i,i+1),run:()=>this.moveRow(i,i+1)},{label:"Move to top",disabled:0===i||!this.canMoveRow(i,0),run:()=>this.moveRow(i,0)},{label:"Move to bottom",disabled:i>=r.length-1||!this.canMoveRow(i,r.length-1),run:()=>this.moveRow(i,r.length-1)}],o="copy"===(this.config.operation??"move")?"Copy to":"Send to";for(const s of this.peersInDropZone())n.push({label:`${o} ${s.gridLabel}`,run:()=>this.transferToPeer(s,i)});this.moveMenu??=dr("tbw-row-move-menu","tbw-row-move-menu"),this.moveMenu.open(e,`Move row ${i+1}`,n)}transferToPeer(e,t){const i=this.config.dropZone??"";if(!i)return;const{rows:r,indices:n}=this.resolveDraggedRows(t);if(0===r.length)return;if(this.config.canDrag&&!this.config.canDrag(r[0],t))return;const o=this.config.operation??"move";if(this.emitCancelable("row-drag-start",{rows:r,indices:n,operation:o,dropZone:i}))return;const s=this.config.serializeRow??(e=>e),l={sessionId:$r(),sourceGridId:this.gridId,dropZone:i,rows:r.map(s),rowIndices:n,operation:o},a=e.acceptTransfer(l,r);if(a<0)return;if("move"===o){const e=[...this.internalGrid._rows??this.sourceRows];for(const t of[...n].sort((e,t)=>t-e))t>=0&&t<e.length&&e.splice(t,1);this.grid.rows=e}const d={rows:r,fromGridId:this.gridId,toGridId:e.gridId,fromIndices:n,toIndex:a,operation:o};e.emitTransfer(d),this.emit("row-transfer",d)}acceptTransfer(e,t){const i=this.config.dropZone??"";if(!i||i!==e.dropZone)return-1;const r=this.internalGrid._rows??this.sourceRows,n=r.length;if(this.config.canDrop&&!this.config.canDrop(e,n))return-1;const o={payload:e,sourceGridId:e.sourceGridId,targetIndex:n,operation:e.operation};return this.emitCancelable("row-drop",o)?-1:(this.grid.rows=[...r,...t],n)}resolveDraggedRows(e){const t=this.internalGrid._rows??this.sourceRows,i=t[e],r=this.grid?.getPluginByName?.("selection");if(r?.getSelectedRowIndices){const i=r.getSelectedRowIndices();if(i.includes(e)&&i.length>1){const e=[...i].sort((e,t)=>e-t);return{rows:e.map(e=>t[e]),indices:e}}}return{rows:[i],indices:[e]}}ensureAutoScroller(){if(this.autoScroller)return;const e=this.gridElement.querySelector(".rows-viewport");if(!e)return;const t="object"==typeof this.config.autoScroll?this.config.autoScroll:void 0;this.autoScroller=function(e,t={},i){const r=t.edgeSize??60,n=t.speed??8,o=t.maxSpeed??24;let s=null,l=null,a=!1;const d=e=>{e!==a&&(a=e,i?.(e))},c=()=>{if(s=null,null===l)return void d(!1);const t=e.getBoundingClientRect();let i=0;if(l<t.top+r){const e=1-Math.max(0,l-t.top)/r;i=-Math.round(n+(o-n)*e)}else if(l>t.bottom-r){const e=1-Math.max(0,t.bottom-l)/r;i=Math.round(n+(o-n)*e)}if(0===i)return void d(!1);const a=e.scrollTop;e.scrollTop=a+i,e.scrollTop!==a?(d(!0),s=requestAnimationFrame(c)):d(!1)};return{onPointerMove(e){l=e,null===s&&(s=requestAnimationFrame(c))},stop(){null!==s&&(cancelAnimationFrame(s),s=null),l=null,d(!1)},get isScrolling(){return a}}}(e,t,e=>{this.gridElement.classList.toggle("tbw-grid--auto-scrolling",e)})}applyDropPositionClasses(e,t){this.clearDropTargetClasses(),e&&(e.classList.add("drop-target"),e.classList.toggle("drop-before",t),e.classList.toggle("drop-after",!t))}clearDropTargetClasses(){this.gridElement?.querySelectorAll(".data-grid-row.drop-target").forEach(e=>{e.classList.remove("drop-target","drop-before","drop-after")})}clearDragClasses(){this.gridElement?.querySelectorAll(".data-grid-row").forEach(e=>{e.classList.remove(Ge.DRAGGING,"drop-target","drop-before","drop-after")})}resetDragState(){this.isDragging=!1,this.draggedRowIndex=null,this.draggedRows=[],this.draggedIndices=[],this.dragSessionId=null,this.dragAccepted=!1,this.dropRowIndex=null,this.pendingMove=null}getRowIndex(e){const t=e.querySelector(".cell[data-row]");return t?parseInt(t.getAttribute("data-row")??"-1",10):-1}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}handleKeyboardMove(e,t,i,r){this.pendingMove?this.pendingMove.currentIndex=i:this.pendingMove={originalIndex:t,currentIndex:i,row:e},this.lastFocusCol=r;const n=this.internalGrid,o=[...n._rows??this.sourceRows],[s]=o.splice(t,1);o.splice(i,0,s),n._rows=o,n._focusRow=i,n._focusCol=r,n.refreshVirtualWindow(!0),at(n),this.clearDebounceTimer(),this.debounceTimer=setTimeout(()=>this.flushPendingMove(),this.config.debounceMs??300)}flushPendingMove(){if(this.clearDebounceTimer(),!this.pendingMove)return;const{originalIndex:e,currentIndex:t,row:i}=this.pendingMove;if(this.pendingMove=null,e===t)return;const r=this.internalGrid,n={row:i,fromIndex:e,toIndex:t,rows:[...r._rows??this.sourceRows],source:"keyboard"};this.emitCancelable("row-move",n)&&(r._rows=[...this.sourceRows],r._focusRow=e,r._focusCol=this.lastFocusCol,r.refreshVirtualWindow(!0),at(r))}executeIntraGridMove(e,t,i,r){const n=[...this.sourceRows],[o]=n.splice(t,1);n.splice(i,0,o);const s={row:e,fromIndex:t,toIndex:i,rows:n,source:r};if(!this.emitCancelable("row-move",s))if("flip"===this.animationType&&this.gridElement){const e=this.captureRowPositions();this.grid.rows=n,requestAnimationFrame(()=>{this.gridElement.offsetHeight,this.animateFLIP(e,t,i)})}else this.grid.rows=n}captureRowPositions(){const e=/* @__PURE__ */new Map;return this.gridElement?.querySelectorAll(".data-grid-row").forEach(t=>{const i=this.getRowIndex(t);i>=0&&e.set(i,t.getBoundingClientRect().top)}),e}animateFLIP(e,t,i){const r=this.gridElement;if(!r||0===e.size)return;const n=Math.min(t,i),o=Math.max(t,i),s=[];if(r.querySelectorAll(".data-grid-row").forEach(r=>{const l=r,a=this.getRowIndex(l);if(a<0||a<n||a>o)return;let d;d=a===i?t:t<i?a+1:a-1;const c=e.get(d);if(void 0===c)return;const u=c-l.getBoundingClientRect().top;Math.abs(u)>1&&s.push({el:l,deltaY:u})}),0===s.length)return;s.forEach(({el:e,deltaY:t})=>{e.style.transform=`translateY(${t}px)`}),r.offsetHeight;const l=this.animationDuration;requestAnimationFrame(()=>{s.forEach(({el:e})=>{e.classList.add("flip-animating"),e.style.transform=""}),setTimeout(()=>{s.forEach(({el:e})=>{e.style.transform="",e.classList.remove("flip-animating")})},l+50)})}};we("rowDragDrop",e=>!0===e?new rn:new rn(e??void 0));var nn=null,on=/* @__PURE__ */new Set;function sn(e){const t=e.matches?"coarse":"fine";on.forEach(e=>e(t))}function ln(){const e=nn||("function"!=typeof globalThis.matchMedia?null:("function"==typeof(nn=globalThis.matchMedia("(pointer: coarse)")).addEventListener?nn.addEventListener("change",sn):"function"==typeof nn.addListener&&nn.addListener(sn),nn));return e?function(e){return e.matches?"coarse":"fine"}(e):"fine"}function an(e){const t=/* @__PURE__ */new Set(["cell","row","column","range"]);if("string"==typeof e){if(!t.has(e))throw new Error(`[SelectionPlugin] Invalid selection mode: "${e}". Expected one of: 'cell' | 'row' | 'column' | 'range'.`);return{primary:e,columnEnabled:"column"===e,bothAxes:!1}}if(!Array.isArray(e))throw new Error(`[SelectionPlugin] Invalid selection mode: expected string or array, got ${typeof e}.`);if(0===e.length)throw new Error("[SelectionPlugin] Invalid selection mode: array must contain at least one mode.");for(const r of e)if(!t.has(r))throw new Error(`[SelectionPlugin] Invalid selection mode in array: "${r}". Expected one of: 'cell' | 'row' | 'column' | 'range'.`);if(new Set(e).size!==e.length)throw new Error(`[SelectionPlugin] Invalid selection mode: array contains duplicate entries (${e.join(", ")}).`);if(1===e.length)return an(e[0]);if(e.length>2)throw new Error(`[SelectionPlugin] Invalid selection mode: arrays of more than 2 modes are not supported. Got [${e.join(", ")}].`);if(!e.includes("column"))throw new Error(`[SelectionPlugin] Invalid selection mode: [${e.join(", ")}]. Two-mode arrays must include 'column' (the only valid combinations are ['row','column'], ['cell','column'], ['range','column']). Other in-row modes don't compose meaningfully.`);const i=e.find(e=>"column"!==e);if("column"===i)throw new Error(`[SelectionPlugin] Invalid selection mode: [${e.join(", ")}].`);return{primary:i,columnEnabled:!0,bothAxes:!0}}function dn(e){const t=[];for(const i of e)!0!==i.utility&&"string"==typeof i.field&&i.field.length>0&&t.push(i.field);return t}function cn(e,t){return t.indexOf(e)}function un(e){return{startRow:Math.min(e.startRow,e.endRow),startCol:Math.min(e.startCol,e.endCol),endRow:Math.max(e.startRow,e.endRow),endCol:Math.max(e.startCol,e.endCol)}}function hn(e){const t=un(e);return{from:{row:t.startRow,col:t.startCol},to:{row:t.endRow,col:t.endCol}}}function gn(e,t,i){return i.some(i=>function(e,t,i){const r=un(i);return e>=r.startRow&&e<=r.endRow&&t>=r.startCol&&t<=r.endCol}(e,t,i))}function pn(e){const t=[],i=un(e);for(let r=i.startRow;r<=i.endRow;r++)for(let e=i.startCol;e<=i.endCol;e++)t.push({row:r,col:e});return t}function fn(e,t){return{startRow:e.row,startCol:e.col,endRow:t.row,endCol:t.col}}function mn(e,t){const i=un(e),r=un(t);return i.startRow===r.startRow&&i.startCol===r.startCol&&i.endRow===r.endRow&&i.endCol===r.endCol}var wn=/* @__PURE__ */new WeakMap;function bn(e,t,i,r){const{onMove:n,onEnd:o,onCancel:s,onPromote:l}=i,a=r?.threshold??0,d=r?.longPressDuration??0,c=r?.longPressSlop??8,u=e.pointerId;if(!function(e,t){let i=wn.get(e);return i||(i=/* @__PURE__ */new Set,wn.set(e,i)),!i.has(t)&&(i.add(t),!0)}(t,u))return()=>{};const h=e.clientX,g=e.clientY;let p=0===a&&0===d,f=!1,m=null,w=!1;function b(){return p=!0,function(){try{return t.setPointerCapture(u),!0}catch{return w=!0,!1}}()?(l?.(),!0):(y(),!1)}function v(){if(!f){var e,i;f=!0,null!==m&&(clearTimeout(m),m=null),t.removeEventListener("pointermove",C),t.removeEventListener("pointerup",x),t.removeEventListener("pointercancel",R),t.removeEventListener("lostpointercapture",S),document.removeEventListener("keydown",E,!0),e=t,i=u,wn.get(e)?.delete(i);try{t.hasPointerCapture(u)&&t.releasePointerCapture(u)}catch{}}}function y(){f||(v(),s?.())}function C(e){const t=e;if(t.pointerId!==u||f)return;const i=t.clientX-h,r=t.clientY-g,o=Math.sqrt(i*i+r*r);if(!p){if(d>0)return o>c?void y():void 0;if(a>0&&o<a)return;if(!b())return}n(t)}function x(e){const t=e;if(t.pointerId!==u||f)return;const i=p;v(),i?o(t):s?.()}function R(e){e.pointerId!==u||f||y()}function S(e){e.pointerId!==u||f||y()}function E(e){"Escape"!==e.key||f||y()}return t.addEventListener("pointermove",C),t.addEventListener("pointerup",x),t.addEventListener("pointercancel",R),t.addEventListener("lostpointercapture",S),document.addEventListener("keydown",E,!0),p&&(b(),w)?()=>{}:(d>0&&(m=setTimeout(()=>{m=null,f||b()},d)),y)}var vn="tbw-selection-toolbar",yn=class{#Ii=null;#Li=null;#Di=null;#Pi=null;get mounted(){return null!==this.#Ii}get element(){return this.#Ii}show(e,t,i,r){this.#Pi=r,this.#Ii||this.#Fi(e),this.#Li&&(this.#Li.textContent=`${t} selected`),this.#Ii?.setAttribute("data-selected-count",String(t)),this.#Di&&(this.#Di.hidden=!i)}destroy(){this.#Ii?.remove(),this.#Ii=null,this.#Li=null,this.#Di=null,this.#Pi=null}#Fi(e){const t=e.ownerDocument.createElement("div");t.className=vn,t.setAttribute("role","toolbar"),t.setAttribute("aria-label","Selection");const i=e.ownerDocument.createElement("span");i.className=`${vn}-count`,i.setAttribute("aria-live","polite"),t.appendChild(i);const r=e.ownerDocument.createElement("div");r.className=`${vn}-actions`,t.appendChild(r),r.appendChild(this.#Hi(e,"select-all","Select all",()=>this.#Pi?.selectAll())),r.appendChild(this.#Hi(e,"clear","Clear",()=>this.#Pi?.clear()));const n=this.#Hi(e,"more","More…",e=>this.#Pi?.more(e));n.setAttribute("aria-haspopup","menu"),r.appendChild(n),r.appendChild(this.#Hi(e,"done","Done",()=>this.#Pi?.done())),e.prepend(t),this.#Ii=t,this.#Li=i,this.#Di=n}#Hi(e,t,i,r){const n=e.ownerDocument.createElement("button");return n.type="button",n.className=`${vn}-btn`,n.dataset.action=t,n.textContent=i,n.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),r(n)}),n}},Cn="tbw-range-handle",xn=class{#Gi=null;#zi=null;#Pi=null;#Oi=null;render(e,t,i,r){this.#Pi=r,t?(this.#Gi??=this.#Ni(e,"start"),this.#zi??=this.#Ni(e,"end"),this.#qi(e,this.#Gi,i(t.startRow,t.startCol),"start"),this.#qi(e,this.#zi,i(t.endRow,t.endCol),"end"),this.setArmed(this.#Oi)):this.#$i()}setArmed(e){this.#Oi=e;for(const[t,i]of[[this.#Gi,"start"],[this.#zi,"end"]]){if(!t)continue;const r=e===i;t.classList.toggle("armed",r),t.setAttribute("aria-pressed",String(r))}}destroy(){this.#Gi?.remove(),this.#zi?.remove(),this.#Gi=null,this.#zi=null,this.#Pi=null,this.#Oi=null}#$i(){this.#Gi&&(this.#Gi.hidden=!0),this.#zi&&(this.#zi.hidden=!0)}#qi(e,t,i,r){if(!t)return;if(!i)return void(t.hidden=!0);t.hidden=!1;const n=i.getBoundingClientRect?.(),o=e.getBoundingClientRect?.();if(!n||!o)return;const s="start"===r?n.left-o.left:n.right-o.left,l="start"===r?n.top-o.top:n.bottom-o.top;t.style.left=`${s}px`,t.style.top=`${l}px`}#Ni(e,t){const i=e.ownerDocument.createElement("div");return i.className=`${Cn} ${Cn}-${t}`,i.dataset.corner=t,i.setAttribute("role","button"),i.setAttribute("tabindex","-1"),i.setAttribute("aria-pressed","false"),i.setAttribute("aria-label","start"===t?"Selection start corner — drag, or activate to place it with a tap":"Selection end corner — drag, or activate to place it with a tap"),i.addEventListener("pointerdown",e=>this.#Wi(e,i,t)),e.appendChild(i),i}#Wi(e,t,i){if(0!==e.button&&"mouse"===e.pointerType)return;e.preventDefault(),e.stopPropagation();const r=this.#Pi;if(!r)return;t.classList.add("dragging");let n=!1;bn(e,t,{onMove:e=>{n=!0;const t=r.cellAt(e.clientX,e.clientY);t&&r.resize(i,t.row,t.col)},onEnd:()=>{t.classList.remove("dragging"),n?r.commit():r.arm(i)},onCancel:()=>{t.classList.remove("dragging"),r.commit()}})}};function Rn(e){if("string"==typeof e)return e;if(Array.isArray(e)){const t=e.find(e=>"column"!==e);if(t)return t;if(e.includes("column"))return"column"}return"cell"}var Sn="__tbw_checkbox",En=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","Home","End","PageUp","PageDown"];var An=class extends Y{static manifest={queries:[{type:"getSelection",description:"Get the current selection state"},{type:"selectRows",description:"Select specific rows by index (row mode only)"},{type:"getSelectedRowIndices",description:"Get sorted array of selected row indices"},{type:"getSelectedRows",description:"Get actual row objects for the current selection (works in all modes)"},{type:"getSelectedColumns",description:"Get field names of selected columns (column mode only)"},{type:"selectColumns",description:"Select specific columns by field name (column mode only)"},{type:"getContextMenuItems",description:"Contribute the non-dragging range-extension action (WCAG 2.2 SC 2.5.7)"}],configRules:[{id:"selection/range-dblclick",severity:"warn",message:'"triggerOn: \'dblclick\'" has no effect when mode is "range".\n → Range selection uses drag interaction (mousedown → mousemove), not click events.\n → The "triggerOn" option only affects "cell" and "row" selection modes.',check:e=>"range"===Rn(e.mode)&&"dblclick"===e.triggerOn},{id:"selection/column-checkbox",severity:"warn",message:'"checkbox: true" only renders in row mode.\n → Column selection has no checkbox UI; activate columns via Ctrl+Click on a header or Ctrl+Space on a focused cell.',check:e=>!!e.checkbox&&"row"!==Rn(e.mode)}]};name="selection";styles='@layer tbw-plugins{tbw-grid.selecting .data-grid-row>.cell{-webkit-user-select:none;user-select:none}tbw-grid:has(.selection){-webkit-user-select:none;user-select:none}:is(tbw-grid:has(.selection)[data-selection-mode=row] .cell-focus,tbw-grid:has(.selection)[data-selection-mode=row] .row-focus,tbw-grid:has(.selection)[data-selection-mode=range] .cell-focus){outline:none}tbw-grid .data-grid-row.row-focus{background-color:var(--tbw-focus-background,rgba(from var(--tbw-color-accent) r g b / 12%));outline:none;position:relative}tbw-grid .data-grid-row.row-focus:after{content:"";pointer-events:none;border-width:0;border-style:var(--tbw-selection-border-style,var(--tbw-border-style));border-color:var(--tbw-range-border-color,var(--tbw-color-accent));border-top-width:var(--tbw-selection-border-width,var(--tbw-border-width));border-bottom-width:var(--tbw-selection-border-width,var(--tbw-border-width));z-index:26;position:absolute;inset:0}tbw-grid .data-grid-row.row-focus+.data-grid-row.row-focus:after{border-top-width:0}tbw-grid .data-grid-row.row-focus:has(+.data-grid-row.row-focus):after{border-bottom-width:0}tbw-grid .data-grid-row.row-focus>.cell.sticky-left,tbw-grid .data-grid-row.row-focus>.cell.sticky-right{background:linear-gradient(var(--tbw-focus-background,rgba(from var(--tbw-color-accent) r g b / 12%)) 0 0), var(--tbw-color-panel-bg)}tbw-grid .data-grid-row.row-focus[data-selectable=false]>.cell.sticky-left,tbw-grid .data-grid-row.row-focus[data-selectable=false]>.cell.sticky-right{background:var(--tbw-color-row-alt)}tbw-grid .data-grid-row>.cell.selected{background-color:var(--tbw-range-selection-bg);position:relative}tbw-grid .data-grid-row>.cell.selected:after{content:"";pointer-events:none;border:0 var(--tbw-selection-border-style,var(--tbw-border-style)) var(--tbw-range-border-color);z-index:1;position:absolute;inset:0}tbw-grid .data-grid-row>.cell.selected.top:after{border-top-width:var(--tbw-selection-border-width,var(--tbw-border-width))}tbw-grid .data-grid-row>.cell.selected.bottom:after{border-bottom-width:var(--tbw-selection-border-width,var(--tbw-border-width))}tbw-grid .data-grid-row>.cell.selected.first:after{border-left-width:var(--tbw-selection-border-width,var(--tbw-border-width))}tbw-grid .data-grid-row>.cell.selected.last:after{border-right-width:var(--tbw-selection-border-width,var(--tbw-border-width))}tbw-grid .data-grid-row[data-selectable=false]{cursor:not-allowed;opacity:var(--tbw-selection-disabled-opacity,.65)}tbw-grid .data-grid-row[data-selectable=false].row-focus{background-color:var(--tbw-color-row-alt)}tbw-grid .data-grid-row>.cell[data-selectable=false]{cursor:not-allowed;opacity:var(--tbw-selection-disabled-opacity,.65)}tbw-grid .data-grid-row>.cell[data-selectable=false].selected{background-color:var(--tbw-selection-warning-bg,rgba(from var(--tbw-color-error) r g b / 50%))}tbw-grid .tbw-selection-summary{font-size:var(--tbw-font-size-sm,.8125rem);color:var(--tbw-color-fg-muted);white-space:nowrap}tbw-grid .data-grid-row>.cell[data-field=__tbw_checkbox],tbw-grid .header-row>.cell[data-field=__tbw_checkbox]{text-align:center;cursor:pointer;justify-content:center;align-items:center;padding:0;display:flex}tbw-grid .tbw-select-row-checkbox{pointer-events:none;cursor:pointer;margin:0}tbw-grid .tbw-checkbox-header{cursor:pointer;justify-content:center;align-items:center;height:100%;display:flex}tbw-grid .tbw-select-all-checkbox{cursor:pointer;margin:0}@media (pointer:coarse){tbw-grid .tbw-select-row-checkbox,tbw-grid .tbw-select-all-checkbox{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}tbw-grid .header-row>.cell.column-selected,tbw-grid .data-grid-row>.cell.column-selected,tbw-grid .data-grid-row>.cell.column-selected.sticky-left,tbw-grid .data-grid-row>.cell.column-selected.sticky-right,tbw-grid .header-row>.cell.column-selected.sticky-left,tbw-grid .header-row>.cell.column-selected.sticky-right{background:linear-gradient(var(--tbw-column-selection-bg,rgba(from var(--tbw-color-accent) r g b / 12%)) 0 0), var(--tbw-color-panel-bg)}tbw-grid .tbw-selection-toolbar{z-index:30;background:var(--tbw-color-panel-bg);border-bottom:1px solid var(--tbw-color-border);justify-content:space-between;align-items:center;gap:8px;padding:4px 8px;font-size:13px;display:flex;position:sticky;top:0}tbw-grid .tbw-selection-toolbar-count{white-space:nowrap;font-weight:600}tbw-grid .tbw-selection-toolbar-actions{align-items:center;gap:4px;display:flex}tbw-grid .tbw-selection-toolbar-btn{min-height:var(--tbw-touch-target-min,24px);border-radius:min(var(--tbw-border-radius,4px), 6px);color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;padding:0 10px}tbw-grid .tbw-selection-toolbar-btn:hover,tbw-grid .tbw-selection-toolbar-btn:focus-visible{background:var(--tbw-color-row-hover,light-dark(#f0f0f0,#2a2a2a))}tbw-grid .tbw-selection-toolbar-btn[data-action=done]{color:var(--tbw-color-accent-text,var(--tbw-color-accent));font-weight:600}tbw-grid .tbw-range-handle{z-index:25;width:var(--tbw-touch-target-min,24px);height:var(--tbw-touch-target-min,24px);background:radial-gradient(circle, var(--tbw-color-accent) 0 5px, transparent 5px);cursor:crosshair;touch-action:none;position:absolute;translate:-50% -50%}tbw-grid .tbw-range-handle[hidden]{display:none}tbw-grid .tbw-range-handle.dragging{scale:1.3}tbw-grid .tbw-range-handle.armed{outline:2px solid var(--tbw-color-accent);outline-offset:-4px;border-radius:50%;scale:1.3}}';get defaultConfig(){return{mode:"cell",triggerOn:"click",enabled:!0,multiSelect:!0,touchMode:"transient"}}get touchSelectionActive(){return this.#Bi}#Bi=!1;#Vi=!1;#Ki=new yn;#ji=new xn;#Ui=null;#Yi=null;#Zi=null;selected=/* @__PURE__ */new Set;lastSelected=null;anchor=null;ranges=[];activeRange=null;cellAnchor=null;isDragging=!1;pendingKeyboardUpdate=null;pendingRowKeyUpdate=null;selectedCell=null;selectedColumns=/* @__PURE__ */new Set;columnAnchor=null;columnHead=null;activeAxis="none";#Xi={primary:"cell",columnEnabled:!1,bothAxes:!1};lastSyncedFocusRow=-1;lastSyncedFocusCol=-1;announceTimer=null;explicitSelection=!1;isSelectionEnabled(){return!1!==this.config.enabled&&!1!==this.grid.effectiveConfig?.selectable}checkSelectable(e,t){const{isSelectable:i}=this.config;if(!i)return!0;const r=this.rows[e];return!!r&&i(r,e,void 0!==t?this.visibleColumns[t]:void 0,t)}isRowSelectable(e){return this.checkSelectable(e)}isCellSelectable(e,t){return this.checkSelectable(e,t)}attach(e){super.attach(e),this.#Xi=an(this.config.mode),this.on("filter-change",()=>this.clearSelectionSilent()),this.on("group-toggle",()=>this.clearSelectionSilent()),this.on("tree-expand",()=>this.clearSelectionSilent()),this.on("sort-change",()=>this.clearSelectionSilent()),this.on("edit-open",({rowIndex:e,row:t})=>{this.isSelectionEnabled()&&(null==t||e<0||"row"===this.#Xi.primary&&this.isRowSelectable(e)&&(this.selected.has(e)||(!1===this.config.multiSelect&&this.selected.clear(),this.selected.add(e),this.lastSelected=e,this.anchor=e,this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender())))});let t=-1;e.addEventListener("data-change",e=>{const{sourceRowCount:i}=e.detail,r=this.selected.size>0||this.ranges.length>0||null!==this.selectedCell;-1!==t&&i!==t&&r&&this.clearSelectionSilent(),t=i},{signal:this.disconnectSignal}),e.addEventListener("contextmenu",e=>{if(this.#Ji())return;const t=e.target?.closest?.(".cell[data-row][data-col]");if(!t)return;const i=parseInt(t.getAttribute("data-row")??"-1",10),r=parseInt(t.getAttribute("data-col")??"-1",10),n=this.#er(i,r);n&&(e.preventDefault(),this.#tr(t,n))},{signal:this.disconnectSignal})}handleQuery(e){if("getSelection"===e.type)return this.getSelection();if("getSelectedRowIndices"===e.type)return this.getSelectedRowIndices();if("getSelectedRows"===e.type)return this.getSelectedRows();if("selectRows"===e.type)return this.selectRows(e.context),!0;if("getSelectedColumns"===e.type)return this.getSelectedColumns();if("selectColumns"===e.type){const t=e.context;return this.#ir(t),!0}if("getContextMenuItems"===e.type){const t=e.context;if(!t||t.isHeader)return;const i=this.#er(t.rowIndex,t.columnIndex);if(!i)return;return i.map((e,t)=>({id:`selection-extend-${t}`,label:e.label,disabled:e.disabled,action:()=>e.run(),order:60+t}))}}detach(){(this.gridElement?.querySelector(".rows-body"))?.removeAttribute("aria-multiselectable"),this.#Ki.destroy(),this.#ji.destroy(),this.#Zi?.dispose(),this.#Zi=null,this.#Ui=null,this.#Yi=null,this.#Bi=!1,this.selected.clear(),this.ranges=[],this.activeRange=null,this.cellAnchor=null,this.isDragging=!1,this.selectedCell=null,this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,this.activeAxis="none",this.pendingKeyboardUpdate=null,this.pendingRowKeyUpdate=null,this.lastSyncedFocusRow=-1,this.lastSyncedFocusCol=-1,this.announceTimer&&(clearTimeout(this.announceTimer),this.announceTimer=null)}clearSelectionSilent(){this.selected.clear(),this.ranges=[],this.activeRange=null,this.cellAnchor=null,this.selectedCell=null,this.lastSelected=null,this.anchor=null,this.lastSyncedFocusRow=-1,this.lastSyncedFocusCol=-1,"column"!==this.activeAxis&&(this.activeAxis="none"),this.requestAfterRender()}#rr(e){const t=e.pointerType;return"touch"===t||"pen"===t||"mouse"!==t&&"coarse"===ln()}#nr(e){return!!this.isRowSelectable(e)&&(this.#Bi=!0,this.selected.clear(),this.selected.add(e),this.anchor=e,this.lastSelected=e,this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!0)}exitTouchSelection(){this.#Bi&&(this.#Bi=!1,"transient"===(this.config.touchMode??"transient")&&(this.selected.clear(),this.anchor=null,this.lastSelected=null,this.emit("selection-change",this.#Qi())),this.requestAfterRender())}#or(e){const t=this.anchor??e,i=Math.min(t,e),r=Math.max(t,e);for(let n=i;n<=r;n++)this.isRowSelectable(n)&&this.selected.add(n);this.lastSelected=e,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}#Ji(){const e=this.grid?.getPluginByName?.("contextMenu")??this.grid?.getPluginByName?.("context-menu");return"function"==typeof e?.showMenu?e:void 0}#sr(e,t){return this.gridElement?.querySelector(`.cell[data-row="${e}"][data-col="${t}"]`)??null}#lr(e,t){const i=this.gridElement,r=((i?.ownerDocument)?.elementFromPoint?.(e,t))?.closest?.(".cell[data-row][data-col]");if(!r||!i?.contains?.(r))return null;const n=parseInt(r.getAttribute("data-row")??"-1",10),o=parseInt(r.getAttribute("data-col")??"-1",10);return n>=0&&o>=0?{row:n,col:o}:null}#ar(e,t,i){const r=this.ranges[this.ranges.length-1];if(!r)return;const n=un(r),o="start"===e?{row:n.endRow,col:n.endCol}:{row:n.startRow,col:n.startCol},s=fn(o,{row:t,col:i});mn(r,s)||(this.ranges[this.ranges.length-1]=s,this.activeRange=s,this.cellAnchor=o,this.emit("selection-change",this.#Qi()),this.requestAfterRender())}#er(e,t){if("range"!==this.#Xi.primary)return null;if(!this.isSelectionEnabled())return null;if(e<0||t<0)return null;if(!this.isCellSelectable(e,t))return null;const i=this.#Yi;return i?i.row===e&&i.col===t?null:[{label:"Extend selection to here",run:()=>this.#dr(e,t)}]:null}#dr(e,t){const i=this.#Yi;if(!i)return;const r=fn(i,{row:e,col:t});this.ranges=[r],this.activeRange=r,this.cellAnchor=i,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}#tr(e,t){this.#Zi??=dr("tbw-range-extend-menu","tbw-range-extend-menu"),this.#Zi.open(e,"Selection",t)}#cr(e){this.#Ui=this.#Ui===e?null:e,this.#ji.setArmed(this.#Ui),this.gridElement&&qe(this.gridElement,this.#Ui?"Select a cell to place the selection corner":"Selection corner placement cancelled")}#ur(){return!!this.#Ui&&(this.#Ui=null,this.#ji.setArmed(null),!0)}#hr(e){if(!e)return;this.#Bi?this.#Ki.show(e,this.selected.size,void 0!==this.#Ji(),{selectAll:()=>this.selectAll(),clear:()=>this.clearSelection(),done:()=>this.exitTouchSelection(),more:e=>this.#gr(e)}):this.#Ki.destroy();const t=this.#Vi&&"range"===this.#Xi.primary&&this.ranges.length>0?this.ranges[this.ranges.length-1]:null,i=t?un(t):null;i||this.#ur(),this.#ji.render(e,i,(e,t)=>this.#sr(e,t),{cellAt:(e,t)=>this.#lr(e,t),resize:(e,t,i)=>this.#ar(e,t,i),commit:()=>this.requestAfterRender(),arm:e=>this.#cr(e)})}#gr(e){const t=this.#Ji();if(!t)return;const i=e.getBoundingClientRect?.(),r=this.lastSelected??-1;t.showMenu(i?.left??0,i?.bottom??0,{row:r>=0?this.rows[r]:null,rowIndex:r,selectedRows:this.getSelectedRowIndices()})}onCellClick(e){if(!this.isSelectionEnabled())return!1;const{triggerOn:t="click"}=this.config;if(e.originalEvent.type!==t)return!1;switch(this.#Xi.primary){case"cell":return this.#pr(e);case"row":return this.#fr(e);case"range":return this.#mr(e);default:return!1}}#pr(e){const{rowIndex:t,colIndex:i}=e;if(e.column&&jt(e.column))return!1;if(!this.isCellSelectable(t,i))return!1;const r=this.selectedCell;return r&&r.row===t&&r.col===i||(this.selectedCell={row:t,col:i},this.emit("selection-change",this.#Qi()),this.requestAfterRender()),!1}#fr(e){const{rowIndex:t,originalEvent:i,column:r}=e;if(!this.isRowSelectable(t))return!1;const n=!1!==this.config.multiSelect,o=i.shiftKey&&n,s=(i.ctrlKey||i.metaKey||this.#Bi)&&n,l=!0===r?.checkboxColumn;if(o&&null!==this.anchor){const e=Math.min(this.anchor,t),i=Math.max(this.anchor,t);s||this.selected.clear();for(let t=e;t<=i;t++)this.isRowSelectable(t)&&this.selected.add(t)}else if(s||l&&n)this.selected.has(t)?this.selected.delete(t):this.selected.add(t),this.anchor=t;else{if(1===this.selected.size&&this.selected.has(t))return!1;this.selected.clear(),this.selected.add(t),this.anchor=t}return this.lastSelected=t,this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!1}#mr(e){const{rowIndex:t,colIndex:i,originalEvent:r}=e;if(e.column&&jt(e.column))return!1;if(!this.isCellSelectable(t,i))return!1;if(this.#Ui){const e=this.#Ui;return this.#ur(),this.#ar(e,t,i),!0}this.#Vi=this.#rr(r);const n=r.shiftKey,o=(r.ctrlKey||r.metaKey)&&!1!==this.config.multiSelect;if(n&&this.cellAnchor){const e=fn(this.cellAnchor,{row:t,col:i}),r=this.ranges.length>0?this.ranges[this.ranges.length-1]:null;if(r&&mn(r,e))return!1;o?this.ranges.length>0?this.ranges[this.ranges.length-1]=e:this.ranges.push(e):this.ranges=[e],this.activeRange=e}else{const e={startRow:t,startCol:i,endRow:t,endCol:i};if(o)this.ranges.push(e);else{if(1===this.ranges.length&&mn(this.ranges[0],e))return!1;this.ranges=[e]}this.activeRange=e,this.cellAnchor={row:t,col:i},this.#Yi={row:t,col:i}}return this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!1}onKeyDown(e){if(!this.isSelectionEnabled())return!1;if(this.#Xi.columnEnabled&&this.#wr(e))return!0;const t=this.#Xi.primary;if("Escape"===e.key&&this.#ur())return!0;if("Escape"===e.key&&this.#Bi)return this.exitTouchSelection(),!0;if("Escape"===e.key)return this.#br(t);const i=En.includes(e.key);switch(t){case"cell":return!!i&&this.#vr();case"row":return this.#yr(e);case"range":return this.#Cr(e,i);default:return!1}}#wr(e){if(!e.ctrlKey&&!e.metaKey)return!1;if(" "===e.key||"Spacebar"===e.key){const t=this.visibleColumns[this.grid._focusCol];return!(!t||jt(t)||"string"!=typeof t.field)&&(e.preventDefault(),e.stopPropagation(),this.selectColumn(t.field,{toggle:!0}),!0)}if(e.shiftKey&&"column"===this.activeAxis&&!1!==this.config.multiSelect&&("ArrowLeft"===e.key||"ArrowRight"===e.key)){const t=dn(this.visibleColumns),i="ArrowLeft"===e.key?"left":"right",r=function(e,t,i){if(0===t.length)return null;if(null===e)return null;const r=cn(e,t);if(r<0)return null;const n="left"===i?Math.max(0,r-1):Math.min(t.length-1,r+1);return n===r?null:t[n]}(this.columnHead,t,i);return null!==r&&null!==this.columnAnchor&&(e.preventDefault(),e.stopPropagation(),this.selectColumn(r,{range:!0}),!0)}return!1}#br(e){return!this.grid.query("isEditing").some(Boolean)&&("column"===this.activeAxis?(this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,this.activeAxis="none"):"cell"===e?this.selectedCell=null:"row"===e?(this.selected.clear(),this.anchor=null):"range"===e&&(this.ranges=[],this.activeRange=null,this.cellAnchor=null),this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!0)}#vr(){return queueMicrotask(()=>{const e=this.grid._focusRow,t=this.grid._focusCol;this.selectedCell=this.isCellSelectable(e,t)?{row:e,col:t}:null,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}),!1}#yr(e){const t=!1!==this.config.multiSelect;if("ArrowUp"===e.key||"ArrowDown"===e.key||"PageUp"===e.key||"PageDown"===e.key||(e.ctrlKey||e.metaKey)&&("Home"===e.key||"End"===e.key)){const i=e.shiftKey&&t;return i&&null===this.anchor&&(this.anchor=this.grid._focusRow),this.explicitSelection=!0,this.pendingRowKeyUpdate={shiftKey:i},queueMicrotask(()=>this.requestAfterRender()),!1}return this.#xr(e,t)}#Cr(e,t){if(!t)return this.#xr(e,!1!==this.config.multiSelect);const i=e.shiftKey&&"Tab"!==e.key;return i&&!this.cellAnchor&&(this.cellAnchor={row:this.grid._focusRow,col:this.grid._focusCol}),this.pendingKeyboardUpdate={shiftKey:i},queueMicrotask(()=>this.requestAfterRender()),!1}#xr(e,t){return!(!t||"a"!==e.key||!e.ctrlKey&&!e.metaKey)&&(!this.grid.query("isEditing").some(Boolean)&&(e.preventDefault(),e.stopPropagation(),this.selectAll(),!0))}onCellMouseDown(e){if(!this.isSelectionEnabled())return;if("row"===this.#Xi.primary){if(void 0===e.rowIndex||e.rowIndex<0)return;if(!1===this.config.multiSelect)return;if(!this.#rr(e.originalEvent))return;if(e.column&&jt(e.column))return;return this.#Bi?(this.#or(e.rowIndex),!0):this.#nr(e.rowIndex)||void 0}if("range"!==this.#Xi.primary)return;if(void 0===e.rowIndex||void 0===e.colIndex)return;if(e.rowIndex<0)return;if(this.#Ui)return!0;if(this.#Vi=this.#rr(e.originalEvent),2===e.originalEvent.button&&gn(e.rowIndex,e.colIndex,this.ranges))return;if(e.column&&jt(e.column))return;if(!this.isCellSelectable(e.rowIndex,e.colIndex))return;if(e.originalEvent.shiftKey&&this.cellAnchor)return;this.isDragging=!0;const t=e.rowIndex,i=e.colIndex,r=(e.originalEvent.ctrlKey||e.originalEvent.metaKey)&&!1!==this.config.multiSelect,n={startRow:t,startCol:i,endRow:t,endCol:i};return!r&&1===this.ranges.length&&mn(this.ranges[0],n)?(this.cellAnchor={row:t,col:i},this.#Rr(e,t,i),!0):(this.cellAnchor={row:t,col:i},this.#Rr(e,t,i),r||(this.ranges=[]),this.ranges.push(n),this.activeRange=n,this.emit("selection-change",this.#Qi()),this.requestAfterRender(),!0)}#Rr(e,t,i){2!==e.originalEvent.button&&(this.#Yi={row:t,col:i})}onCellMouseMove(e){if(!this.isSelectionEnabled())return;if("range"!==this.#Xi.primary)return;if(!this.isDragging||!this.cellAnchor)return;if(void 0===e.rowIndex||void 0===e.colIndex)return;if(e.rowIndex<0)return;let t=e.colIndex;const i=this.visibleColumns[t];if(i&&jt(i)){const e=this.visibleColumns.findIndex(e=>!jt(e));e>=0&&(t=e)}const r=fn(this.cellAnchor,{row:e.rowIndex,col:t}),n=this.ranges.length>0?this.ranges[this.ranges.length-1]:null;return n&&mn(n,r)||(this.ranges.length>0?this.ranges[this.ranges.length-1]=r:this.ranges.push(r),this.activeRange=r,this.emit("selection-change",this.#Qi()),this.requestAfterRender()),!0}onCellMouseUp(e){if(this.isSelectionEnabled()&&"range"===this.#Xi.primary)return this.isDragging?(this.isDragging=!1,!0):void 0}onHeaderClick(e){if(!this.isSelectionEnabled())return!1;if(!this.#Xi.columnEnabled)return!1;if(e.column&&jt(e.column))return!1;const t=e.originalEvent;if(!t.ctrlKey&&!t.metaKey)return!1;const i=e.field;if(!i)return!1;t.preventDefault(),"function"==typeof t.stopPropagation&&t.stopPropagation();const r=!0===t.shiftKey&&!1!==this.config.multiSelect&&null!==this.columnAnchor;return this.selectColumn(i,r?{range:!0}:{toggle:!0}),!0}processColumns(e){if(this.config.checkbox&&"row"===this.#Xi.primary){if(e.some(e=>e.field===Sn))return e;const t=this.#Sr(),i=e.findIndex(Kt),r=i>=0?i+1:0;return[...e.slice(0,r),t,...e.slice(r)]}return e}#Sr(){return{field:Sn,header:"",width:32,resizable:!1,sortable:!1,lockPosition:!0,utility:!0,checkboxColumn:!0,headerRenderer:()=>{const e=document.createElement("label");if(e.className="tbw-checkbox-header",!1===this.config.multiSelect)return e;const t=document.createElement("input");t.type="checkbox",t.className="tbw-select-all-checkbox";const i=document.createElement("span");return i.className="tbw-sr-only",i.textContent=$e(this.gridElement,"selectAllRows"),t.addEventListener("click",e=>{e.stopPropagation(),e.target.checked?this.selectAll():this.clearSelection()}),e.addEventListener("click",e=>e.stopPropagation()),e.append(t,i),e},renderer:e=>{const t=document.createElement("input");t.type="checkbox",t.className="tbw-select-row-checkbox";const i=e.cellEl,r=i?parseInt(i.getAttribute("data-row")??"-1",10):-1;return r>=0&&(t.checked=this.selected.has(r)),t.setAttribute("aria-label",$e(this.gridElement,"selectRow",Math.max(r,0))),t}}}#Er(e){e.querySelectorAll(".tbw-select-row-checkbox").forEach(e=>{const t=e.closest(".cell"),i=t?Ke(t):-1;i>=0&&(e.checked=this.selected.has(i))});const t=e.querySelector(".tbw-select-all-checkbox");if(t){const e=this.rows.length;let i=0;if(this.config.isSelectable)for(let t=0;t<e;t++)this.isRowSelectable(t)&&i++;else i=e;const r=i>0&&this.selected.size>=i,n=this.selected.size>0;t.checked=r,t.indeterminate=n&&!r}}#Ar(){return this.gridElement?.hasAttribute("data-has-focus")??!1}#_r(e){const t=this.grid._focusRow,i=this.grid._focusCol;if(!this.#Ar())return this.lastSyncedFocusRow=t,void(this.lastSyncedFocusCol=i);if("row"===e){if(this.explicitSelection)return this.explicitSelection=!1,void(this.lastSyncedFocusRow=t);t!==this.lastSyncedFocusRow&&(this.lastSyncedFocusRow=t,this.isRowSelectable(t)&&(this.selected.has(t)&&1===this.selected.size||(this.selected.clear(),this.selected.add(t),this.lastSelected=t,this.anchor=t,this.emit("selection-change",this.#Qi()))))}if("cell"===e){if(this.explicitSelection)return this.explicitSelection=!1,this.lastSyncedFocusRow=t,void(this.lastSyncedFocusCol=i);if((t!==this.lastSyncedFocusRow||i!==this.lastSyncedFocusCol)&&(this.lastSyncedFocusRow=t,this.lastSyncedFocusCol=i,this.isCellSelectable(t,i))){const e=this.selectedCell;e&&e.row===t&&e.col===i||(this.selectedCell={row:t,col:i},this.emit("selection-change",this.#Qi()))}}}#kr(){const e=this.gridElement;if(!e)return;const t=this.#Xi.primary,i=this.#Xi.columnEnabled,r=!!this.config.isSelectable,n=e.querySelector(".rows-body");if(n){const e=!1!==this.config.multiSelect;n.setAttribute("aria-multiselectable",e?"true":"false")}e.querySelectorAll(".cell").forEach(e=>{const t=e.classList.contains(Ge.SELECTED)||e.classList.contains("column-selected");e.classList.remove(Ge.SELECTED,"top","bottom","first","last","column-selected"),t&&e.removeAttribute("aria-selected"),r&&e.removeAttribute("data-selectable")});const o=e.querySelectorAll(".data-grid-row");if(o.forEach(e=>{e.classList.remove(Ge.SELECTED,"row-focus"),e.setAttribute("aria-selected","false"),r&&e.removeAttribute("data-selectable")}),i&&e.querySelectorAll(".header-row > .cell").forEach(e=>{e.classList.remove("column-selected"),e.removeAttribute("aria-selected")}),"row"===t&&(je(e),o.forEach(e=>{const t=Ke(e.querySelector(".cell[data-row]"));t>=0&&(r&&!this.isRowSelectable(t)&&e.setAttribute("data-selectable","false"),this.selected.has(t)&&(e.classList.add(Ge.SELECTED,"row-focus"),e.setAttribute("aria-selected","true")))}),this.config.checkbox&&this.#Er(e)),"cell"!==t&&"range"!==t||!r||e.querySelectorAll(".cell[data-row][data-col]").forEach(e=>{const t=parseInt(e.getAttribute("data-row")??"-1",10),i=parseInt(e.getAttribute("data-col")??"-1",10);t>=0&&i>=0&&(this.isCellSelectable(t,i)||e.setAttribute("data-selectable","false"))}),"range"===t&&this.ranges.length>0){je(e);const t=this.ranges.map(un),i=(e,i)=>{for(const r of t)if(e>=r.startRow&&e<=r.endRow&&i>=r.startCol&&i<=r.endCol)return!0;return!1};e.querySelectorAll(".cell[data-row][data-col]").forEach(e=>{const t=parseInt(e.getAttribute("data-row")??"-1",10),r=parseInt(e.getAttribute("data-col")??"-1",10);if(t>=0&&r>=0){const n=this.visibleColumns[r];if(n&&jt(n))return;i(t,r)&&(e.classList.add(Ge.SELECTED),e.setAttribute("aria-selected","true"),i(t-1,r)||e.classList.add("top"),i(t+1,r)||e.classList.add("bottom"),i(t,r-1)||e.classList.add("first"),i(t,r+1)||e.classList.add("last"))}})}if(i&&this.selectedColumns.size>0){const t=this.visibleColumns.map(e=>"string"==typeof e.field?e.field:void 0);e.querySelectorAll(".header-row > .cell[data-col]").forEach(e=>{const i=parseInt(e.getAttribute("data-col")??"-1",10),r=i>=0?t[i]:void 0;r&&this.selectedColumns.has(r)&&(e.classList.add("column-selected"),e.setAttribute("aria-selected","true"))}),e.querySelectorAll(".cell[data-col]:not(.header-row .cell)").forEach(e=>{if(e.closest(".header-row"))return;const i=parseInt(e.getAttribute("data-col")??"-1",10);if(i<0)return;const r=this.visibleColumns[i];if(!r||jt(r))return;const n=t[i];n&&this.selectedColumns.has(n)&&(e.classList.add("column-selected"),e.setAttribute("aria-selected","true"))})}}afterRender(){if(!this.isSelectionEnabled())return;const e=this.gridElement;if(!e)return;const t=e.querySelector(".tbw-grid-root"),i=this.#Xi.primary;if(this.pendingRowKeyUpdate&&"row"===i){const{shiftKey:e}=this.pendingRowKeyUpdate;this.pendingRowKeyUpdate=null;const t=this.grid._focusRow;if(e&&null!==this.anchor){this.selected.clear();const e=Math.min(this.anchor,t),i=Math.max(this.anchor,t);for(let t=e;t<=i;t++)this.isRowSelectable(t)&&this.selected.add(t)}else this.isRowSelectable(t)?(this.selected.clear(),this.selected.add(t),this.anchor=t):this.selected.clear();this.lastSelected=t,this.emit("selection-change",this.#Qi())}if(this.pendingKeyboardUpdate&&"range"===i){const{shiftKey:e}=this.pendingKeyboardUpdate;this.pendingKeyboardUpdate=null;const t=this.grid._focusRow,i=this.grid._focusCol;if(e&&this.cellAnchor){const e=fn(this.cellAnchor,{row:t,col:i});this.ranges=[e],this.activeRange=e}else e||(this.ranges=[],this.activeRange=null,this.cellAnchor={row:t,col:i});this.emit("selection-change",this.#Qi())}this.#_r(i),this.gridElement.setAttribute("data-selection-mode",i),t&&t.classList.toggle("selecting",this.isDragging),this.#kr(),this.#hr(t)}onScrollRender(){this.isSelectionEnabled()&&this.#kr()}getSelection(){const e=this.#Qi();return{mode:this.config.mode,activeAxis:e.activeAxis,ranges:e.ranges,selectedColumns:e.selectedColumns,anchor:this.cellAnchor}}getSelectedCells(){return function(e){const t=/* @__PURE__ */new Map;for(const i of e)for(const e of pn(i))t.set(`${e.row},${e.col}`,e);return[...t.values()]}(this.ranges)}isCellSelected(e,t){return gn(e,t,this.ranges)}selectAll(){const{mode:e,multiSelect:t}=this.config;if(!1!==t)if("row"===e){this.selected.clear();for(let e=0;e<this.rows.length;e++)this.isRowSelectable(e)&&this.selected.add(e);this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}else if("range"===e){const e=this.rows.length,t=this.columns.length;if(e>0&&t>0){const i={startRow:0,startCol:0,endRow:e-1,endCol:t-1};this.ranges=[i],this.activeRange=i,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}}}selectRows(e){if("row"!==this.#Xi.primary)return;const t=!1===this.config.multiSelect&&e.length>1?[e[e.length-1]]:e;this.selected.clear();for(const i of t)i>=0&&i<this.rows.length&&this.isRowSelectable(i)&&this.selected.add(i);this.anchor=t.length>0?t[t.length-1]:null,this.explicitSelection=!0,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}getSelectedRowIndices(){return[...this.selected].sort((e,t)=>e-t)}getSelectedRows(){const e=this.#Xi.primary,t=this.rows;if("row"===e)return this.getSelectedRowIndices().filter(e=>e>=0&&e<t.length).map(e=>t[e]);if("cell"===e&&this.selectedCell){const{row:e}=this.selectedCell;return e>=0&&e<t.length?[t[e]]:[]}if("range"===e&&this.ranges.length>0){const e=/* @__PURE__ */new Set;for(const i of this.ranges){const r=Math.max(0,Math.min(i.startRow,i.endRow)),n=Math.min(t.length-1,Math.max(i.startRow,i.endRow));for(let t=r;t<=n;t++)e.add(t)}return[...e].sort((e,t)=>e-t).map(e=>t[e])}return[]}#ir(e){if(!this.#Xi.columnEnabled)return;const t=dn(this.visibleColumns),i=new Set(t),r=[],n=/* @__PURE__ */new Set;for(const s of e)i.has(s)&&!n.has(s)&&(n.add(s),r.push(s));this.#Tr("column"),this.selectedColumns.clear();for(const s of r)this.selectedColumns.add(s);const o=r.length>0?r[r.length-1]:null;this.columnAnchor=o,this.columnHead=o,this.activeAxis=this.selectedColumns.size>0?"column":"none",this.emit("selection-change",this.#Qi()),this.requestAfterRender()}selectColumn(e,t={}){if(!this.#Xi.columnEnabled)return;const i=dn(this.visibleColumns);if(i.includes(e)){if(this.#Tr("column"),!1===this.config.multiSelect)this.selectedColumns.clear(),this.selectedColumns.add(e),this.columnAnchor=e,this.columnHead=e;else if(t.range&&this.columnAnchor){const t=function(e,t,i){const r=cn(e,i),n=cn(t,i);if(-1===r||-1===n)return[];const o=Math.min(r,n),s=Math.max(r,n);return i.slice(o,s+1)}(this.columnAnchor,e,i);this.selectedColumns.clear();for(const e of t)this.selectedColumns.add(e);this.columnHead=e}else t.toggle?(this.selectedColumns.has(e)?this.selectedColumns.delete(e):this.selectedColumns.add(e),this.columnAnchor=e,this.columnHead=e):(this.selectedColumns.clear(),this.selectedColumns.add(e),this.columnAnchor=e,this.columnHead=e);this.activeAxis=this.selectedColumns.size>0?"column":"none",this.emit("selection-change",this.#Qi()),this.requestAfterRender()}}deselectColumn(e){this.#Xi.columnEnabled&&this.selectedColumns.delete(e)&&(0===this.selectedColumns.size&&(this.columnAnchor=null,this.columnHead=null,"column"===this.activeAxis&&(this.activeAxis="none")),this.emit("selection-change",this.#Qi()),this.requestAfterRender())}selectAllColumns(){if(!this.#Xi.columnEnabled)return;if(!1===this.config.multiSelect)return;const e=dn(this.visibleColumns);if(0!==e.length){this.#Tr("column"),this.selectedColumns.clear();for(const t of e)this.selectedColumns.add(t);this.columnAnchor=e[0],this.columnHead=e[e.length-1],this.activeAxis="column",this.emit("selection-change",this.#Qi()),this.requestAfterRender()}}clearColumnSelection(){0!==this.selectedColumns.size&&(this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,"column"===this.activeAxis&&(this.activeAxis="none"),this.emit("selection-change",this.#Qi()),this.requestAfterRender())}getSelectedColumns(){return 0===this.selectedColumns.size?[]:dn(this.visibleColumns).filter(e=>this.selectedColumns.has(e))}clearSelection(){this.selectedCell=null,this.selected.clear(),this.anchor=null,this.ranges=[],this.activeRange=null,this.cellAnchor=null,this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,this.activeAxis="none",this.emit("selection-change",this.#Qi()),this.requestAfterRender()}setRanges(e){this.ranges=e.map(e=>({startRow:e.from.row,startCol:e.from.col,endRow:e.to.row,endCol:e.to.col})),this.activeRange=this.ranges.length>0?this.ranges[this.ranges.length-1]:null,this.emit("selection-change",this.#Qi()),this.requestAfterRender()}#Qi(){const e=this.#Xi.primary,t="row"===e&&this.selected.size>0||"cell"===e&&null!==this.selectedCell||"range"===e&&this.ranges.length>0;let i;this.#Xi.bothAxes&&t&&this.selectedColumns.size>0&&(this.selectedColumns.clear(),this.columnAnchor=null,this.columnHead=null,this.gridElement&&qe(this.gridElement,$e(this.gridElement,"selectionAxisChanged","row"))),i=t?"row"===e?"row":"cell"===e?"cell":"range":this.selectedColumns.size>0?"column":"none",this.activeAxis=i;const r=function(e,t,i,r,n,o){if("column"===t&&r.selectedColumns.size>0)return{mode:e,activeAxis:"column",ranges:[],selectedColumns:o.filter(e=>r.selectedColumns.has(e))};if("cell"===i&&r.selectedCell)return{mode:e,activeAxis:"cell",ranges:[{from:{row:r.selectedCell.row,col:r.selectedCell.col},to:{row:r.selectedCell.row,col:r.selectedCell.col}}],selectedColumns:[]};if("row"===i&&r.selected.size>0){const t=[...r.selected].sort((e,t)=>e-t),i=[];let o=t[0],s=o;for(let e=1;e<t.length;e++)t[e]===s+1?s=t[e]:(i.push({from:{row:o,col:0},to:{row:s,col:n-1}}),o=t[e],s=o);return i.push({from:{row:o,col:0},to:{row:s,col:n-1}}),{mode:e,activeAxis:"row",ranges:i,selectedColumns:[]}}return"range"===i&&r.ranges.length>0?{mode:e,activeAxis:"range",ranges:(s=r.ranges,s.map(hn)),selectedColumns:[]}:{mode:e,activeAxis:"none",ranges:[],selectedColumns:[]};var s}(this.config.mode,i,e,{selectedCell:this.selectedCell,selected:this.selected,ranges:this.ranges,selectedColumns:this.selectedColumns},this.columns.length,dn(this.visibleColumns));return this.announceTimer&&clearTimeout(this.announceTimer),this.announceTimer=setTimeout(()=>{if("column"===r.activeAxis){const e=r.selectedColumns;if(1===e.length){const t=e[0],i=this.columns.find(e=>e.field===t),r="string"==typeof i?.header&&i.header||t;qe(this.gridElement,$e(this.gridElement,"columnSelected",r))}else e.length>1?qe(this.gridElement,$e(this.gridElement,"columnSelectionChanged",e.length)):qe(this.gridElement,$e(this.gridElement,"columnSelectionCleared"))}else{const e="row"===r.activeAxis?this.selected.size:r.ranges.length;e>0&&qe(this.gridElement,$e(this.gridElement,"selectionChanged",e))}},150),r}#Tr(e){if(this.#Xi.bothAxes&&"column"===e){if(!(this.selected.size>0||null!==this.selectedCell||this.ranges.length>0))return;this.selected.clear(),this.lastSelected=null,this.anchor=null,this.selectedCell=null,this.ranges=[],this.activeRange=null,this.cellAnchor=null,this.gridElement&&qe(this.gridElement,$e(this.gridElement,"selectionAxisChanged","column"))}}};function _n(e,t){return null==e&&null==t?0:null==e?-1:null==t||e>t?1:e<t?-1:0}function kn(e,t,i){const r=[...e];return Mn(r,t.field,t.direction,i),r}function Tn(e,t,i){const r=e.length;if(r<2)return;const n=new Array(r),o=new Uint8Array(r),s=new Array(r);for(let a=0;a<r;a++){const i=e[a];s[a]=a,n[a]=t(i),o[a]=!0===i?.__loading?1:0}s.sort((e,t)=>{const r=o[e];if(r!==o[t])return r?1:-1;const s=n[e],l=n[t];return null==s&&null==l?0:null==s?-i:null==l||s>l?i:s<l?-i:0});const l=new Array(r);for(let a=0;a<r;a++)l[a]=e[s[a]];for(let a=0;a<r;a++)e[a]=l[a]}function Mn(e,t,i,r){const n=r.find(e=>e.field===t),o=n?.sortComparator;if(o)if(n?.valueAccessor)e.sort((e,t)=>o(c(e,n),c(t,n),e,t)*i);else{const r=l(t);e.sort((e,t)=>o(r(e),r(t),e,t)*i)}else n?.valueAccessor?function(e,t,i){Tn(e,e=>c(e,t),i)}(e,n,i):function(e,t,i){a(t)?e.sort((e,r)=>{const n=function(e,t){const i=!0===e?.__loading;return i===(!0===t?.__loading)?0:i?1:-1}(e,r);if(0!==n)return n;const o=e[t],s=r[t];return null==o&&null==s?0:null==o?-i:null==s||o>s?i:o<s?-i:0}):Tn(e,l(t),i)}(e,t,i)}function In(e,t,i,r){e._rows=t,e.__rowRenderEpoch++;for(let n=0;n<e._rowPool.length;n++)e._rowPool[n].__epoch=-1;e._schedulerRenderHeader(),e.refreshVirtualWindow(!0),Ln(e,i,r)}function Ln(e,t,i){const r={field:t.field,direction:i};e.dispatchEvent(new CustomEvent("sort-change",{detail:r})),e._pluginManager?.emitPluginEvent?.("sort-change",r),qe(e,$e(e,0===i?"sortCleared":"sortApplied",t.header??t.field,1===i?"ascending":"descending")),e.requestStateChange?.()}function Dn(e){return e._pluginManager?._hasRowStructurePlugins??!1}function Pn(e,t){if(e._sortState&&e._sortState.field===t.field)if(1===e._sortState.direction)Fn(e,t,-1);else{if(e._sortState=null,Dn(e))return e._requestSchedulerPhase(4,"sort-clear"),void Ln(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=[],e._schedulerRenderHeader();const i=e._headerRowEl?.querySelectorAll('[role="columnheader"].sortable');if(i)for(let t=0;t<i.length;t++){const r=i[t];r.getAttribute("aria-sort")&&("ascending"!==r.getAttribute("aria-sort")&&"descending"!==r.getAttribute("aria-sort")||e._sortState)||r.setAttribute("aria-sort","none")}e.refreshVirtualWindow(!0),Ln(e,t,0)}else e._sortState||(e.__originalOrder=e._rows.slice()),Fn(e,t,1)}function Fn(e,t,i){if(e._sortState={field:t.field,direction:i},Dn(e))return e._requestSchedulerPhase(4,"sort-apply"),void Ln(e,t,i);const r={field:t.field,direction:i},n=e._columns,o=e.effectiveConfig?.sortHandler??kn;if(o===kn)return Mn(e._rows,r.field,i,n),void In(e,e._rows,t,i);const s=o(e._rows,r,n);s&&"function"==typeof s.then?s.then(r=>{In(e,r,t,i)}):In(e,s,t,i)}function Hn(e,t){return Math.floor(e/t)}function Gn(){return new DOMException("Aborted","AbortError")}function zn(e,t,i,r,n){const o=function(e,t){return{start:e*t,end:(e+1)*t}}(t,i);return function(e,t){return t.aborted?Promise.reject(Gn()):"object"!=typeof(i=e)||null===i||"function"!=typeof i.subscribe||"function"==typeof i.then?new Promise((i,r)=>{const n=()=>r(Gn());t.addEventListener("abort",n,{once:!0}),Promise.resolve(e).then(e=>{t.removeEventListener("abort",n),i(e)},e=>{t.removeEventListener("abort",n),r(e)})}):new Promise((i,r)=>{let n=!1;const o=e.subscribe({next:e=>{n||(n=!0,i(e),o.unsubscribe())},error:e=>{n||(n=!0,r(e))},complete:()=>{n||(n=!0,r(/* @__PURE__ */new Error("getRows observable completed without emitting a value")))}});n||t.addEventListener("abort",()=>{n||(n=!0,o.unsubscribe(),r(Gn()))},{once:!0})});var i}(e.getRows({startNode:o.start,endNode:o.end,pageSize:o.end-o.start,sortModel:r.sortModel,filterModel:r.filterModel,signal:n}),n)}function On(e,t,i){const r=Hn(e,t),n=i.get(r);if(n)return n[e%t]}function Nn(e){let t=null;return{async getRows({startNode:i,endNode:r,signal:n}){const{rows:o,total:s}=await(i=>(t||(t=fetch(e,{signal:i}).then(async t=>{if(!t.ok)throw new Error(`Failed to fetch "${e}": ${t.status} ${t.statusText}`);const i=await t.json();if(Array.isArray(i))return{rows:i,total:i.length};const r=i??{},n=Array.isArray(r.rows)?r.rows:[];return{rows:n,total:"number"==typeof r.totalNodeCount?r.totalNodeCount:n.length}}).catch(e=>{throw t=null,e})),t))(n);return{rows:o.slice(i,r),totalNodeCount:s}}}}we("selection",e=>new An("cell"===e||"row"===e||"range"===e?{mode:e}:e??void 0));var qn=class extends Y{static manifest={modifiesRowStructure:!0,hookPriority:{processRows:-10},incompatibleWith:[{name:"pivot",reason:"PivotPlugin requires the full dataset to compute aggregations. ServerSidePlugin lazy-loads rows in blocks, so pivot aggregation cannot be performed client-side."}],events:[{type:"datasource:data",description:"Root data page/block loaded"},{type:"datasource:children",description:"Child data loaded for a parent context"},{type:"datasource:loading",description:"Loading state changed"},{type:"datasource:error",description:"Fetch operation failed"}],queries:[{type:"datasource:fetch-children",description:"Request child rows for a parent context"},{type:"datasource:is-active",description:"Check if ServerSide plugin has an active data source"}]};name="serverSide";get defaultConfig(){return{maxConcurrentRequests:2}}dataSource=null;totalNodeCount=0;infiniteScrollMode=!1;loadedBlocks=/* @__PURE__ */new Map;loadingBlocks=/* @__PURE__ */new Set;blockControllers=/* @__PURE__ */new Map;lastRequestId=0;scrollDebounceTimer;managedNodes=[];attach(e){if(super.attach(e),this.on("sort-change",()=>{"local"===this.config.sortMode?this.requestRender():this.onModelChange()}),this.on("filter-change",()=>{"local"===this.config.filterMode?this.requestRender():this.onModelChange()}),this.config.dataSource)return void this.setDataSource(this.config.dataSource);const t=this.gridElement?.getAttribute("data-src");t&&this.setDataSource(Nn(t))}detach(){this.dataSource=null,this.totalNodeCount=0,this.infiniteScrollMode=!1,this.loadedBlocks.clear(),this.loadingBlocks.clear(),this.abortAllBlocks(),this.managedNodes=[],this.lastRequestId=0,this.scrollDebounceTimer&&(clearTimeout(this.scrollDebounceTimer),this.scrollDebounceTimer=void 0)}abortAllBlocks(){for(const e of this.blockControllers.values())e.abort();this.blockControllers.clear()}getEnrichmentParams(){const e="local"===this.config.sortMode,t="local"===this.config.filterMode,i=e?void 0:this.grid?.query?.("sort:get-model",null),r=t?void 0:this.grid?.query?.("filter:get-model",null);let n=i?.[0];const o=this.grid;if(!e&&!n&&o?._sortState){const{field:e,direction:t}=o._sortState;n=[{field:e,direction:1===t?"asc":"desc"}]}return{sortModel:n,filterModel:r?.[0]}}getViewportMapping(e,t){const i={viewportStart:e,viewportEnd:t},r=this.grid?.query?.("datasource:viewport-mapping",i);return r?.[0]?r[0]:{startNode:e,endNode:t,totalLoadedNodes:this.totalNodeCount}}onModelChange(){this.dataSource&&(this.abortAllBlocks(),this.loadedBlocks.clear(),this.loadingBlocks.clear(),this.managedNodes=[],this.totalNodeCount=0,this.infiniteScrollMode=!1,this.requestRender(),this.loadRequiredBlocks())}applyServerResult(e,t,i){void 0!==e.lastNode?(this.totalNodeCount=e.lastNode+1,this.infiniteScrollMode=!1):-1===e.totalNodeCount?this.infiniteScrollMode=!0:(this.totalNodeCount=e.totalNodeCount,this.infiniteScrollMode=!1),this.infiniteScrollMode&&e.rows.length<i&&(this.totalNodeCount=t*i+e.rows.length,this.infiniteScrollMode=!1)}getInfiniteScrollEstimate(e){let t=0;for(const[i,r]of this.loadedBlocks){const n=i*e+r.length;n>t&&(t=n)}return t+e}loadRequiredBlocks(){if(!this.dataSource)return;const{_virtualization:e}=this.grid,t=this.config.pageSize??100,i=this.getViewportMapping(e.start,e.end),r=Math.max(0,this.config.loadThreshold??0),n=Math.max(0,i.startNode-r),o=this.totalNodeCount>0?this.totalNodeCount:1/0,s=Math.min(o,i.endNode+r);if(s<=n)return;const l=function(e,t,i){const r=Hn(e,i),n=Hn(t-1,i),o=[];for(let s=r;s<=n;s++)o.push(s);return o}(n,s,t),a=this.getEnrichmentParams(),d=this.grid?.getAttribute?.("id")??void 0;for(const c of l){if(this.loadedBlocks.has(c)||this.loadingBlocks.has(c))continue;if(this.loadingBlocks.size>=(this.config.maxConcurrentRequests??2)){_("TBW143","Concurrent request limit reached, deferring block load",d);break}this.loadingBlocks.add(c);const e=new AbortController;this.blockControllers.set(c,e),this.broadcast("datasource:loading",{loading:!0}),zn(this.dataSource,c,t,a,e.signal).then(i=>{if(this.blockControllers.delete(c),e.signal.aborted)return this.loadingBlocks.delete(c),void(0===this.loadingBlocks.size&&this.broadcast("datasource:loading",{loading:!1}));this.loadedBlocks.set(c,i.rows);const r=this.managedNodes.length;this.applyServerResult(i,c,t),this.loadingBlocks.delete(c);const n=c*t;for(let e=0;e<i.rows.length;e++)n+e<this.managedNodes.length&&(this.managedNodes[n+e]=i.rows[e]);const o={rows:i.rows,totalNodeCount:i.totalNodeCount,startNode:n,endNode:n+i.rows.length,claimed:!1};this.broadcast("datasource:data",o),0===this.loadingBlocks.size&&this.broadcast("datasource:loading",{loading:!1}),0===r||o.claimed||this.managedNodes.length<(Number.isFinite(this.totalNodeCount)?this.totalNodeCount:0)?this.requestRender():this.requestVirtualRefresh(),this.loadRequiredBlocks()}).catch(t=>{if(this.blockControllers.delete(c),this.loadingBlocks.delete(c),e.signal.aborted)return void(0===this.loadingBlocks.size&&this.broadcast("datasource:loading",{loading:!1}));const i=t instanceof Error?t:new Error(String(t));k(R,`getRows() failed: ${i.message}`,d),this.broadcast("datasource:error",{error:i}),0===this.loadingBlocks.size&&this.broadcast("datasource:loading",{loading:!1})})}}processRows(e){if(!this.dataSource)return[...e];const t=this.config.pageSize??100,i=this.infiniteScrollMode?this.getInfiniteScrollEstimate(t):Number.isFinite(this.totalNodeCount)&&this.totalNodeCount>=0?this.totalNodeCount:0;for(;this.managedNodes.length<i;){const e=this.managedNodes.length;this.managedNodes.push({__loading:!0,__index:e})}this.managedNodes.length=i;for(let n=0;n<i;n++){const e=On(n,t,this.loadedBlocks);e&&(this.managedNodes[n]=e)}const r=this.grid;if("local"===this.config.sortMode&&r?._sortState){const e=r._columns??[],t=(r.effectiveConfig?.sortHandler??kn)(this.managedNodes,r._sortState,e);return t&&"function"==typeof t.then?(t.catch(()=>{}),this.managedNodes):t}return this.managedNodes}onScroll(e){this.dataSource&&(this.loadRequiredBlocks(),this.scrollDebounceTimer&&clearTimeout(this.scrollDebounceTimer),this.scrollDebounceTimer=setTimeout(()=>{this.loadRequiredBlocks()},100))}handleQuery(e){switch(e.type){case"datasource:is-active":return null!=this.dataSource;case"datasource:fetch-children":{const{context:t}=e.context;return void this.fetchChildren(t)}}}fetchChildren(e){if(!this.dataSource)return;const t=this.grid?.getAttribute?.("id")??void 0;if(!this.dataSource.getChildRows)return void A("TBW142",`Plugin "${e.source}" requested child rows but getChildRows() is not implemented on the dataSource`,t);const i=this.getEnrichmentParams();this.broadcast("datasource:loading",{loading:!0,context:e}),this.dataSource.getChildRows({context:e,sortModel:i.sortModel,filterModel:i.filterModel}).then(t=>{const i={rows:t.rows,context:e,claimed:!1};this.broadcast("datasource:children",i),this.broadcast("datasource:loading",{loading:!1,context:e})}).catch(i=>{const r=i instanceof Error?i:new Error(String(i));k("TBW141",`getChildRows() failed: ${r.message}`,t),this.broadcast("datasource:error",{error:r,context:e}),this.broadcast("datasource:loading",{loading:!1,context:e})})}setDataSource(e){this.abortAllBlocks(),this.dataSource=e,this.loadedBlocks.clear(),this.loadingBlocks.clear(),this.managedNodes=[],this.totalNodeCount=0,this.infiniteScrollMode=!1;const t=this.config.pageSize??100,i=this.getEnrichmentParams(),r=this.grid?.getAttribute?.("id")??void 0,n=new AbortController;this.blockControllers.set(0,n),this.loadingBlocks.add(0),this.broadcast("datasource:loading",{loading:!0}),zn(e,0,t,i,n.signal).then(e=>{if(this.blockControllers.delete(0),this.loadingBlocks.delete(0),n.signal.aborted)return void this.broadcast("datasource:loading",{loading:!1});this.loadedBlocks.set(0,e.rows),this.applyServerResult(e,0,t);const i={rows:e.rows,totalNodeCount:e.totalNodeCount,startNode:0,endNode:e.rows.length,claimed:!1};this.broadcast("datasource:data",i),this.broadcast("datasource:loading",{loading:!1}),this.requestRender(),(this.config.loadThreshold??0)>0&&this.loadRequiredBlocks()}).catch(e=>{if(this.blockControllers.delete(0),this.loadingBlocks.delete(0),n.signal.aborted)return void this.broadcast("datasource:loading",{loading:!1});const t=e instanceof Error?e:new Error(String(e));k(R,`getRows() failed: ${t.message}`,r),this.broadcast("datasource:error",{error:t}),this.broadcast("datasource:loading",{loading:!1})})}refresh(){if(!this.dataSource)return;const e=this.dataSource;this.abortAllBlocks(),this.loadedBlocks.clear(),this.loadingBlocks.clear(),this.managedNodes=[],this.totalNodeCount=0,this.infiniteScrollMode=!1,this.setDataSource(e)}purgeCache(){this.abortAllBlocks(),this.loadedBlocks.clear(),this.managedNodes=[]}getTotalNodeCount(){return this.totalNodeCount}isNodeLoaded(e){const t=Hn(e,this.config.pageSize??100);return this.loadedBlocks.has(t)}getLoadedBlockCount(){return this.loadedBlocks.size}};we("serverSide",e=>!0===e?new qn:new qn(e??void 0));function $n(){return"function"==typeof HTMLElement.prototype?.showPopover}function Wn(e,t){const i=document.createElement("button");return i.type="button",i.className="tbw-size-popover-btn",i.setAttribute("aria-label",e),i.textContent=t,i}function Bn(e){const t=e.step??16;let i,r=null,n=null,o=null,s=!1,l=!1;const a=new AbortController;function d(){s&&r&&(s=!1,$n()&&r.hidePopover(),r.hidden=!0,o?.removeAttribute("data-tbw-size-open"),o=null)}function c(){n&&(n.value=String(Math.round(e.getSize(i))))}function u(t){Number.isFinite(t)&&(e.setSize(i,t),c())}return document.addEventListener("pointerdown",e=>{s&&r&&!e.composedPath().includes(r)&&d()},{capture:!0,signal:a.signal}),document.addEventListener("keydown",e=>{"Escape"===e.key&&d()},{capture:!0,signal:a.signal}),{get element(){return r},open(h,g){if(l)return;i=h,o?.removeAttribute("data-tbw-size-open"),o=g,g.setAttribute("data-tbw-size-open",""),r||(r=function(){const r=document.createElement("div");r.id=e.id,r.className="tbw-size-popover",r.setAttribute("popover","manual"),r.setAttribute("role","group"),r.hidden=!0;const o=Wn("Narrower","−"),s=Wn("Wider","+"),l=Wn("Reset size","Reset"),h=document.createElement("input");return h.type="number",h.className="tbw-size-popover-input",h.min="0",h.step="any",h.setAttribute("aria-label","Size in pixels"),o.addEventListener("click",()=>u(e.getSize(i)-t),{signal:a.signal}),s.addEventListener("click",()=>u(e.getSize(i)+t),{signal:a.signal}),l.addEventListener("click",()=>{e.reset(i),c()},{signal:a.signal}),h.addEventListener("change",()=>u(h.valueAsNumber),{signal:a.signal}),r.addEventListener("focusout",e=>{const t=e.relatedTarget;t instanceof Node&&!r.contains(t)&&d()},{signal:a.signal}),r.append(o,h,s,l),n=h,r}());const p=e.getHost(h)??document.body;r.parentNode!==p&&p.appendChild(r),r.setAttribute("aria-label",e.getLabel(h)),c(),r.hidden=!1,!s&&$n()&&r.showPopover(),s=!0,function(e){if(!r)return;const t=e.getBoundingClientRect(),i=r.getBoundingClientRect(),n=(e,t)=>Math.max(4,Math.min(e,t-4)),o=n(t.left+t.width/2-i.width/2,window.innerWidth-i.width),s=t.bottom+6,l=t.top-6-i.height,a=t.height>3*i.height;let d;d=!a&&s+i.height<=window.innerHeight?s:!a&&l>=4?l:n(t.top+t.height/2-i.height/2,window.innerHeight-i.height),r.style.left=`${Math.round(o)}px`,r.style.top=`${Math.round(d)}px`}(g),n?.focus()},close:d,dispose(){l=!0,d(),a.abort(),r?.remove(),r=null,n=null}}}function Vn(e,t){if(t)for(const i in t){const r=t[i];null!=r&&e.setAttribute(i,r)}}function Kn(e,t,i){const r=document.createElement(e);if(Vn(r,t),i)for(const n of i)null!=n&&("string"==typeof n?r.appendChild(document.createTextNode(n)):r.appendChild(n));return r}function jn(e,t){const i=document.createElement("div");return e&&(i.className=e),Vn(i,t),i}function Un(e,t,i){const r=document.createElement("button");return r.type="button",e&&(r.className=e),Vn(r,t),i&&("string"==typeof i?r.textContent=i:r.appendChild(i)),r}var Yn=document.createElement("template");function Zn(){return Yn.content.cloneNode(!0)}function Xn(e){const t=document.createDocumentFragment(),i=jn(e.hasShell?`${Ge.ROOT} has-shell`:Ge.ROOT);if(e.hasShell&&e.shellBody)e.shellHeader&&i.appendChild(e.shellHeader),i.appendChild(e.shellBody);else{const e=jn("tbw-grid-content");e.appendChild(Zn()),i.appendChild(e)}return t.appendChild(i),t}function Qn(e){const t=jn("tbw-shell-header",{part:"shell-header",role:"presentation"});if(e.title){const i=jn("tbw-shell-title");i.textContent=e.title,t.appendChild(i)}const i=jn("tbw-shell-content",{part:"shell-content",role:"presentation","data-light-dom-header-content":""});t.appendChild(i);const r=jn("tbw-shell-toolbar",{part:"shell-toolbar",role:"presentation"});for(const s of e.configButtons)s.hasRender&&r.appendChild(jn("tbw-toolbar-content-slot",{"data-toolbar-content":s.id}));for(const s of e.apiButtons)s.hasRender&&r.appendChild(jn("tbw-toolbar-content-slot",{"data-toolbar-content":s.id}));const n=e.configButtons.some(e=>e.hasRender)||e.apiButtons.some(e=>e.hasRender),o=e.hasPanels&&!1!==e.showToggle;if(n&&o&&r.appendChild(jn("tbw-toolbar-separator")),o){const t=Un(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&&q(t,e.toolPanelIcon),r.appendChild(t)}return t.appendChild(r),t}function Jn(e){const t=Un(e?"tbw-tool-panel-close tbw-tool-panel-close--inline":"tbw-tool-panel-close",{part:"tool-panel-close","data-panel-close":"",title:"Close panel","aria-label":"Close panel","aria-controls":"tbw-tool-panel"});return t.textContent="✕",t}function eo(){const e=jn("tbw-tool-panel-header",{part:"tool-panel-header"});return e.appendChild(Jn(!1)),e}function to(e,t,i,r){const n=!!e.title||!i,o=r&&n,s=jn(`tbw-accordion-section${e.isExpanded?" expanded":""}${i?" single":""}${o?" has-inline-close":""}`,{"data-section":e.id});if(n){const r=function(e,t,i){const r=Un("tbw-accordion-header",{"aria-expanded":String(e.isExpanded),"aria-controls":`tbw-section-${e.id}`});if(i&&r.setAttribute("aria-disabled","true"),e.icon){const t=Kn("span",{class:"tbw-accordion-icon"});q(t,e.icon),r.appendChild(t)}const n=Kn("span",{class:"tbw-accordion-title"});if(n.textContent=e.title??"",r.appendChild(n),!i){const e=Kn("span",{class:"tbw-accordion-chevron","data-icon":"expand"});void 0!==t.expandIcon&&q(e,t.expandIcon),r.appendChild(e)}return r}(e,t,i);if(o){const e=jn("tbw-accordion-header-row");e.appendChild(r),e.appendChild(Jn(!0)),s.appendChild(e)}else s.appendChild(r)}else r&&s.appendChild(eo());return s.appendChild(jn("tbw-accordion-content",{id:`tbw-section-${e.id}`,role:"presentation"})),s}function io(e){const t=e.mode??"overlay",i=jn("tbw-shell-body",{"data-mode":t}),r=jn("tbw-grid-content");r.appendChild(Zn());const n=e.panels.length>0?function(e,t){const i=1===e.panels.length,r=Kn("aside",{class:e.isPanelOpen?"tbw-tool-panel open":"tbw-tool-panel",part:"tool-panel","data-position":e.position,role:"presentation",id:"tbw-tool-panel",..."dropdown"===t?{popover:"manual"}:{}});r.appendChild(jn("tbw-tool-panel-resize",{"data-resize-handle":"","data-handle-position":"left"===e.position?"right":"left",role:"button",tabindex:"-1","aria-label":"Tool panel width — drag, or activate to set a width"}));const n=!0===e.showCloseButton&&i;e.showCloseButton&&!i&&r.appendChild(eo());const o=jn("tbw-tool-panel-content",{role:"presentation"}),s=jn("tbw-accordion");for(const l of e.panels)s.appendChild(to(l,e,i,n));return o.appendChild(s),r.appendChild(o),r}(e,t):null;return"left"===e.position&&n?(i.appendChild(n),i.appendChild(r)):(i.appendChild(r),n&&i.appendChild(n)),i}Yn.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';function ro(e){return e?"string"==typeof e?O(e):e.outerHTML:""}function no(e){return!!e?.header?.title||(!!e?.header?.toolbarContents?.length||(!!e?.toolPanels?.length||(!!e?.headerContents?.length||(!!e?.header?.lightDomContent?.length||!!e?.header?.hasToolButtonsContainer))))}function oo(e){return!1!==e?.header?.visible}function so(e,t){if(t.contains(e))return!0;const i=e.getRootNode();return i instanceof ShadowRoot&&i.host===t}function lo(e,t,i){const r=e.querySelector(".tbw-tool-panel"),n=e.querySelector("[data-resize-handle]"),o=e.querySelector(".tbw-shell-body");if(!r||!n||!o)return()=>{};const s=t?.toolPanel?.position??"right";let l=0,a=0,d=0,c=!1,u=!1,h=null,g=null;const p=()=>o.getBoundingClientRect().width-20,f=e=>{if(!c)return;e.preventDefault(),u=!0;const t="left"===s?e.clientX-l:l-e.clientX,i=Math.min(d,Math.max(200,a+t));r.style.width=`${i}px`},m=e=>{if(c&&(c=!1,h=null,n.classList.remove("resizing"),r.style.transition="",document.body.style.cursor="",document.body.style.userSelect="",e)){const e=r.getBoundingClientRect().width;i(e)}},w=e=>{c||0!==e.button&&"mouse"===e.pointerType||(e.preventDefault(),c=!0,u=!1,l=e.clientX,a=r.getBoundingClientRect().width,d=p(),n.classList.add("resizing"),r.style.transition="none",document.body.style.cursor="col-resize",document.body.style.userSelect="none",h=bn(e,n,{onMove:f,onEnd:()=>{const e=!u;m(!e),e&&(g??=Bn({id:"tbw-tool-panel-width-popover",step:32,getSize:e=>e.getBoundingClientRect().width,setSize:(e,t)=>{const r=Math.min(p(),Math.max(200,t));e.style.width=`${r}px`,i(r)},reset:e=>{e.style.width="",i(e.getBoundingClientRect().width)},getLabel:()=>"Tool panel width",getHost:e=>e.closest("tbw-grid, [data-tbw-grid]")}),g.open(r,n))},onCancel:()=>{r.style.width=`${a}px`,m(!1)}}))};return n.addEventListener("pointerdown",w),()=>{n.removeEventListener("pointerdown",w),h?.(),h=null,g?.dispose(),g=null}}function ao(e,t){const i=t.lightDomHeaderContent.length>0&&!t.lightDomContentMoved,r=t.headerContents.size>0;if(!i&&!r)return;const n=e.querySelector(".tbw-shell-content");if(!n)return;if(i){for(const e of t.lightDomHeaderContent)e.style.display="",n.appendChild(e);t.lightDomContentMoved=!0}const o=[...t.headerContents.values()].sort((e,t)=>(e.order??100)-(t.order??100));for(const s of o){const e=t.headerContentCleanups.get(s.id);e&&(e(),t.headerContentCleanups.delete(s.id));let i=n.querySelector(`[data-header-content="${s.id}"]`);i||(i=document.createElement("div"),i.setAttribute("data-header-content",s.id),n.appendChild(i));const r=s.render(i);r&&t.headerContentCleanups.set(s.id,r)}}function co(e,t,i){if(t.isPanelOpen)for(const[r,n]of t.toolPanels){const i=t.expandedSections.has(r),o=e.querySelector(`[data-section="${r}"]`),s=o?.querySelector(".tbw-accordion-content");if(!o||!s)continue;o.classList.toggle("expanded",i);const l=o.querySelector(".tbw-accordion-header");if(l&&l.setAttribute("aria-expanded",String(i)),i){if(0===s.children.length){const e=n.render(s);e&&t.panelCleanups.set(r,e)}}else{const e=t.panelCleanups.get(r);e&&(e(),t.panelCleanups.delete(r)),s.innerHTML=""}}}function uo(e,t){const i=e.querySelector("[data-panel-toggle]");i&&(i.classList.toggle("active",t.isPanelOpen),i.setAttribute("aria-pressed",String(t.isPanelOpen)))}function ho(e,t){const i=e.querySelector(".tbw-tool-panel");i&&(i.classList.toggle("open",t.isPanelOpen),t.isPanelOpen||(i.style.width=""))}var go="--tbw-tool-panel-anchor",po=0;function fo(){return"undefined"!=typeof CSS&&"function"==typeof CSS.supports&&CSS.supports("anchor-name",go)}function mo(e,t,i,r){const n=e.querySelector(".tbw-tool-panel");if(n){if(t.dropdownAnchorEl=i,n.dataset.anchor=r?"corner":"below",n.hasAttribute("popover")&&"function"==typeof n.showPopover)try{n.showPopover()}catch{}if(fo()){const e=`${go}-${++po}`;t.dropdownAnchorName=e,i.style.setProperty("anchor-name",e),n.style.setProperty("position-anchor",e),n.style.removeProperty("top"),n.style.removeProperty("left"),n.style.removeProperty("right")}else!function(e,t,i){const r=t.getBoundingClientRect(),n=e.getAttribute("data-position")??"right";if(e.style.position="fixed",e.style.top=`${Math.round((i?r.top:r.bottom)+4)}px`,"left"===n)e.style.left=`${Math.round(r.left)}px`,e.style.right="auto";else{const t="undefined"!=typeof window?window.innerWidth:0;e.style.left="auto",e.style.right=`${Math.round(t-r.right)}px`}}(n,i,r)}}function wo(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 bo(e,t,i){const r=void 0!==i?.toolPanel?ro(i.toolPanel):void 0,n=void 0!==i?.expand?ro(i.expand):void 0,o=void 0!==i?.collapse?ro(i.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:r,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:o,showCloseButton:!1===e.header?.visible&&!0!==e.toolPanel?.locked&&"dropdown"!==(e.toolPanel?.mode??"overlay"),panels:l.map(e=>({id:e.id,title:e.title,icon:ro(e.icon),isExpanded:t.expandedSections.has(e.id)}))}}}function vo(e,t,i,r){const n=e.querySelector(`.${Ge.ROOT}`),o=n?.querySelector(".tbw-grid-content");if(!n||!o)return function(e,t,i,r){const n=no(t),o=[];for(let s=e.firstChild;s;s=s.nextSibling)1===s.nodeType&&s.classList.contains(Ge.ROOT)||o.push(s);e.replaceChildren();for(const s of o)e.appendChild(s);if(n){const{headerOptions:n,bodyOptions:o}=bo(t,i,r),s=Xn({hasShell:!0,shellHeader:oo(t)?Qn(n):void 0,shellBody:io(o)});e.appendChild(s)}else{const t=Xn({hasShell:!1});e.appendChild(t)}return n}(e,t,i,r);o.remove();const s=no(t);if(n.replaceChildren(),s){n.className=`${Ge.ROOT} has-shell`;const{headerOptions:e,bodyOptions:s}=bo(t,i,r),l=oo(t)?Qn(e):void 0,a=io(s),d=a.querySelector(".tbw-grid-content");d&&d.replaceWith(o),l&&n.appendChild(l),n.appendChild(a)}else n.className=Ge.ROOT,n.appendChild(o);return s}function yo(e,t){let i=!1;const r={get isInitialized(){return i},setInitialized(e){i=e},get isPanelOpen(){return e.isPanelOpen},get expandedSections(){return[...e.expandedSections]},openToolPanel(i,n){if(0===e.toolPanels.size)return void A("TBW071","No tool panels registered",t.id);let o;if(void 0!==i&&(e.toolPanels.has(i)?o=i:A(y,`Tool panel "${i}" not found`,t.id)),e.isPanelOpen&&o&&e.expandedSections.has(o))return;if(e.isPanelOpen&&o&&!e.expandedSections.has(o))return void r.toggleToolPanelSection(o);if(e.isPanelOpen)return;if(e.isPanelOpen=!0,0===e.expandedSections.size&&e.toolPanels.size>0)if(o)e.expandedSections.add(o);else{const i=t.effectiveConfig?.shell?.toolPanel?.defaultOpen;if(i&&e.toolPanels.has(i))e.expandedSections.add(i);else{const t=[...e.toolPanels.values()].sort((e,t)=>(e.order??100)-(t.order??100))[0];t&&e.expandedSections.add(t.id)}}else if(o&&!e.expandedSections.has(o)){for(const t of[...e.expandedSections])e.expandedSections.delete(t);e.expandedSections.add(o)}const s=t._renderRoot;if(uo(s,e),ho(s,e),co(s,e,t._accordionIcons),"dropdown"===t.effectiveConfig?.shell?.toolPanel?.mode){const{el:i,corner:r}=function(e){if(e)return{el:e,corner:!1};const i=t._renderRoot.querySelector("[data-panel-toggle]");return i?{el:i,corner:!1}:{el:t._hostElement,corner:!0}}(n?.anchor);mo(s,e,i,r)}t._emit("tool-panel-open",{sections:r.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 i=t._renderRoot;uo(i,e),ho(i,e),"dropdown"===t.effectiveConfig?.shell?.toolPanel?.mode&&function(e,t){const i=e.querySelector(".tbw-tool-panel");if(i){if(i.hasAttribute("popover")&&"function"==typeof i.hidePopover)try{i.hidePopover()}catch{}i.style.removeProperty("position-anchor"),i.style.removeProperty("position"),i.style.removeProperty("top"),i.style.removeProperty("left"),i.style.removeProperty("right"),delete i.dataset.anchor}t.dropdownAnchorEl&&(t.dropdownAnchorEl.style.removeProperty("anchor-name"),t.dropdownAnchorEl=null),t.dropdownAnchorName=null}(i,e),t._emit("tool-panel-close",{})},toggleToolPanel(t){e.isPanelOpen?r.closeToolPanel():r.openToolPanel(void 0,t)},reanchorOpenDropdown(){if(!e.isPanelOpen)return;if("dropdown"!==t.effectiveConfig?.shell?.toolPanel?.mode)return;const i=e.dropdownAnchorEl;if(i&&i.isConnected&&e.dropdownAnchorName&&i.style.getPropertyValue("anchor-name")===e.dropdownAnchorName)return;if(!e.dropdownAnchorName&&i&&i.isConnected&&i!==t._hostElement&&"below"===t._renderRoot.querySelector(".tbw-tool-panel")?.dataset.anchor)return;const r=t._renderRoot.querySelector("[data-panel-toggle]");if(r&&r!==t._hostElement){if(e.dropdownAnchorName&&fo()&&function(e,t,i){const r=t.dropdownAnchorName;if(!r)return!1;const n=e.querySelector(".tbw-tool-panel");if(!n)return!1;const o=t.dropdownAnchorEl;if(o&&o!==i&&o.style.removeProperty("anchor-name"),i.style.setProperty("anchor-name",r),n.style.setProperty("position-anchor",r),n.style.removeProperty("top"),n.style.removeProperty("left"),n.style.removeProperty("right"),n.dataset.anchor="below",t.dropdownAnchorEl=i,n.hasAttribute("popover")&&"function"==typeof n.showPopover)try{n.showPopover()}catch{}return!0}(t._renderRoot,e,r))return;mo(t._renderRoot,e,r,!1)}else i!==t._hostElement||mo(t._renderRoot,e,t._hostElement,!0)},toggleToolPanelSection(i){const r=e.toolPanels.get(i);if(!r)return void A(y,`Tool panel section "${i}" not found`,t.id);if(1===e.toolPanels.size)return;const n=t._renderRoot,o=e.expandedSections.has(i);if(o){const t=e.panelCleanups.get(i);t&&(t(),e.panelCleanups.delete(i)),r.onClose?.(),e.expandedSections.delete(i),Co(n,i,!1)}else{for(const[t,r]of e.toolPanels)if(t!==i&&e.expandedSections.has(t)){const i=e.panelCleanups.get(t);i&&(i(),e.panelCleanups.delete(t)),r.onClose?.(),e.expandedSections.delete(t),Co(n,t,!1);const o=n.querySelector(`[data-section="${t}"] .tbw-accordion-content`);o&&(o.innerHTML="")}e.expandedSections.add(i),Co(n,i,!0),function(e,t,i){const r=t.toolPanels.get(i);if(!r?.render)return;const n=e.querySelector(`[data-section="${i}"] .tbw-accordion-content`);if(!n)return;const o=r.render(n);o&&t.panelCleanups.set(i,o)}(n,e,i)}t._emit("tool-panel-section-toggle",{id:i,expanded:!o})},getToolPanels:()=>[...e.toolPanels.values()],registerToolPanel(r){e.toolPanels.has(r.id)?A(C,`Tool panel "${r.id}" already registered`,t.id):(e.toolPanels.set(r.id,r),(i||t._hostElement.isConnected)&&t.refreshShellHeader?.())},unregisterToolPanel(r){if(e.expandedSections.has(r)){const t=e.panelCleanups.get(r);t&&(t(),e.panelCleanups.delete(r)),e.expandedSections.delete(r)}e.toolPanels.delete(r),(i||t._hostElement.isConnected)&&t.refreshShellHeader?.()},getHeaderContents:()=>[...e.headerContents.values()],registerHeaderContent(r){e.headerContents.has(r.id)?A(x,`Header content "${r.id}" already registered`,t.id):(e.headerContents.set(r.id,r),i?ao(t._renderRoot,e):t._hostElement.isConnected&&t.refreshShellHeader?.())},unregisterHeaderContent(i){const r=e.headerContentCleanups.get(i);r&&(r(),e.headerContentCleanups.delete(i)),e.headerContents.get(i)?.onDestroy?.(),e.headerContents.delete(i),t._renderRoot.querySelector(`[data-header-content="${i}"]`)?.remove()},getToolbarContents:()=>[...e.toolbarContents.values()].sort((e,t)=>(e.order??0)-(t.order??0)),registerToolbarContent(r){e.toolbarContents.has(r.id)?A("TBW075",`Toolbar content "${r.id}" already registered`,t.id):(e.toolbarContents.set(r.id,r),(i||t._hostElement.isConnected)&&t.refreshShellHeader?.())},unregisterToolbarContent(r){const n=e.toolbarContentCleanups.get(r);n&&(n(),e.toolbarContentCleanups.delete(r));const o=e.toolbarContents.get(r);o?.onDestroy&&o.onDestroy(),e.toolbarContents.delete(r),i&&t.refreshShellHeader?.()}};return r}function Co(e,t,i){const r=e.querySelector(`[data-section="${t}"]`);r&&r.classList.toggle("expanded",i)}var xo=class extends Y{name="shell";styles='@layer tbw-base{tbw-grid .tbw-shell-header{min-height:var(--tbw-shell-header-height);background:var(--tbw-shell-header-bg);border-bottom:1px solid var(--tbw-shell-header-border);flex-shrink:0;align-items:center;gap:8px;padding:0 8px;display:flex}tbw-grid .tbw-shell-title{font-size:var(--tbw-shell-title-font-size);font-weight:var(--tbw-shell-title-font-weight);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}tbw-grid .tbw-shell-content{flex:1;align-items:center;gap:12px;min-width:0;display:flex;overflow:hidden}tbw-grid .tbw-shell-toolbar{align-items:center;gap:var(--tbw-toolbar-button-gap);flex-shrink:0;display:flex}tbw-grid .tbw-toolbar-btn{width:var(--tbw-toolbar-button-size);height:var(--tbw-toolbar-button-size);border-radius:var(--tbw-border-radius);color:var(--tbw-color-fg);cursor:pointer;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease), border-color var(--tbw-transition-duration) var(--tbw-transition-ease);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;font-size:16px;display:inline-flex}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{background:var(--tbw-color-border);width:1px;height:20px;margin:0 4px}tbw-grid .tbw-shell-body{flex:1;min-height:0;display:flex;position:relative;overflow:visible}tbw-grid .tbw-tool-panel{overflow-clip-margin:var(--tbw-tool-panel-resize-overhang,12px);background:var(--tbw-tool-panel-bg);border-left:1px solid var(--tbw-tool-panel-border);width:0;transition:width var(--tbw-tool-panel-transition);z-index:var(--tbw-z-layer-toolpanel,31);box-shadow:-2px 0 8px var(--tbw-color-shadow);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0;overflow:clip}tbw-grid .tbw-tool-panel[data-position=left]{border-left:none;border-right:1px solid var(--tbw-tool-panel-border);box-shadow:2px 0 8px var(--tbw-color-shadow);left:0;right:auto}tbw-grid .tbw-tool-panel.open{width:min(var(--tbw-tool-panel-width), 100% - 20px);max-width:calc(100% - 20px)}tbw-grid .tbw-shell-body[data-mode=push] .tbw-tool-panel{box-shadow:none;z-index:auto;border-left:none;border-right:none;flex-shrink:0;position:relative;inset:auto}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[popover]{width:var(--tbw-tool-panel-width);border:1px solid var(--tbw-tool-panel-border);border-radius:var(--tbw-border-radius,6px);max-width:calc(100vw - 16px);height:auto;max-height:min(70vh,480px);box-shadow:0 8px 24px var(--tbw-color-shadow);margin:4px 0 0;padding:0;transition:none;display:none;position:fixed;inset:auto;overflow:hidden auto}:is(tbw-grid .tbw-tool-panel[popover]:popover-open,tbw-grid .tbw-tool-panel[popover].open){width:var(--tbw-tool-panel-width);display:flex}tbw-grid .tbw-tool-panel[popover] .tbw-tool-panel-resize{display:none}@supports (anchor-name:--x){tbw-grid .tbw-tool-panel[popover]{top:anchor(bottom);right:anchor(right);position-try-fallbacks:flip-block, flip-inline, flip-block flip-inline;left:auto}tbw-grid .tbw-tool-panel[popover][data-anchor=corner]{top:anchor(top)}tbw-grid .tbw-tool-panel[popover][data-position=left]{left:anchor(left);right:auto}}tbw-grid .tbw-tool-panel-resize{width:calc(var(--tbw-tool-panel-resize-overhang,12px) * 2);cursor:col-resize;z-index:10;touch-action:none;-webkit-user-select:none;user-select:none;background:0 0;position:absolute;top:0;bottom:0}tbw-grid .tbw-tool-panel-resize:before{content:"";width:6px;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease);background:0 0;position:absolute;top:0;bottom:0}tbw-grid .tbw-tool-panel-resize[data-handle-position=left]{left:calc(3px - var(--tbw-tool-panel-resize-overhang,12px))}tbw-grid .tbw-tool-panel-resize[data-handle-position=left]:before{left:calc(var(--tbw-tool-panel-resize-overhang,12px) - 3px)}tbw-grid .tbw-tool-panel-resize[data-handle-position=right]{right:calc(3px - var(--tbw-tool-panel-resize-overhang,12px))}tbw-grid .tbw-tool-panel-resize[data-handle-position=right]:before{right:calc(var(--tbw-tool-panel-resize-overhang,12px) - 3px)}tbw-grid .tbw-tool-panel-resize:hover:before,tbw-grid .tbw-tool-panel-resize.resizing:before,tbw-grid .tbw-tool-panel-resize[data-tbw-size-open]:before{background:var(--tbw-color-accent)}tbw-grid .tbw-tool-panel:not(.open) .tbw-tool-panel-resize{display:none}tbw-grid .tbw-tool-panel-header{min-height:var(--tbw-tool-panel-header-height);border-bottom:1px solid var(--tbw-tool-panel-border);flex-shrink:0;justify-content:flex-end;align-items:center;padding:0 12px;display:flex}tbw-grid .tbw-tool-panel-title{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}tbw-grid .tbw-tool-panel-close{border-radius:var(--tbw-border-radius);width:24px;height:24px;color:var(--tbw-color-fg-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;font-size:14px;display:inline-flex}tbw-grid .tbw-tool-panel-close:hover{background:var(--tbw-color-row-hover);color:var(--tbw-color-fg)}tbw-grid .tbw-accordion-header-row{align-items:stretch;display:flex}tbw-grid .tbw-accordion-header-row .tbw-accordion-header{flex:1;min-width:0}tbw-grid .tbw-tool-panel-close--inline{flex-shrink:0;align-self:center;margin-inline-end:8px}tbw-grid .tbw-tool-panel-content{flex:1;overflow:auto}tbw-grid .tbw-accordion{flex-direction:column;gap:0;display:flex}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:0 0}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{width:100%;color:var(--tbw-color-fg);text-align:start;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;gap:8px;padding:10px 12px;font-size:13px;font-weight:600;display:flex}tbw-grid .tbw-accordion-header:hover{background:var(--tbw-color-row-hover)}tbw-grid .tbw-accordion-chevron{width:16px;height:16px;color:var(--tbw-color-fg-muted);flex-shrink:0;justify-content:center;align-items:center;font-size:10px;transition:transform .15s;display:inline-flex}tbw-grid .tbw-accordion-icon{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;font-size:14px;display:inline-flex}tbw-grid .tbw-accordion-title{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}tbw-grid .tbw-accordion-content{display:none}}';#Mr;#Ir;#Lr;#Dr;#Pr;#Fr;#Hr;#Gr=!1;get hasState(){return void 0!==this.#Mr}ensureState(e){if(this.#Mr)return;const t={toolPanels:/* @__PURE__ */new Map,headerContents:/* @__PURE__ */new Map,toolbarContents:/* @__PURE__ */new Map,hasToolButtonsContainer:!1,lightDomHeaderContent:[],lightDomTitle:null,lightDomToolPanelIds:/* @__PURE__ */new Set,adapterBoundToolPanelIds:/* @__PURE__ */new Set,lightDomToolbarContentIds:/* @__PURE__ */new Set,apiToolPanelIds:/* @__PURE__ */new Set,apiHeaderContentIds:/* @__PURE__ */new Set,isPanelOpen:!1,expandedSections:/* @__PURE__ */new Set,headerContentCleanups:/* @__PURE__ */new Map,panelCleanups:/* @__PURE__ */new Map,toolbarContentCleanups:/* @__PURE__ */new Map,lightDomContentMoved:!1,dropdownAnchorEl:null,dropdownAnchorName:null};this.#Mr=t,this.#Ir=yo(t,e)}get shellState(){return this.#Mr}get shellController(){return this.#Ir}get isToolPanelOpen(){return!!this.hasState&&this.shellController.isPanelOpen}get expandedToolPanelSections(){return this.hasState?this.shellController.expandedSections:[]}openToolPanel(e,t){this.shellController?.openToolPanel(e,t)}closeToolPanel(){this.shellController?.closeToolPanel()}toggleToolPanel(e){this.shellController?.toggleToolPanel(e)}toggleToolPanelSection(e){this.shellController?.toggleToolPanelSection(e)}getToolPanels(){return this.hasState?this.shellController.getToolPanels():[]}registerToolPanel(e){this.hasState&&(this.shellState.apiToolPanelIds.add(e.id),this.shellController.registerToolPanel(e))}unregisterToolPanel(e){this.hasState&&(this.shellState.apiToolPanelIds.delete(e),this.shellController.unregisterToolPanel(e))}getHeaderContents(){return this.hasState?this.shellController.getHeaderContents():[]}registerHeaderContent(e){this.hasState&&(this.shellState.apiHeaderContentIds.add(e.id),this.shellController.registerHeaderContent(e))}unregisterHeaderContent(e){this.hasState&&(this.shellState.apiHeaderContentIds.delete(e),this.shellController.unregisterHeaderContent(e))}getToolbarContents(){return this.hasState?this.shellController.getToolbarContents():[]}registerToolbarContent(e){this.shellController?.registerToolbarContent(e)}unregisterToolbarContent(e){this.shellController?.unregisterToolbarContent(e)}attach(e){super.attach(e),this.ensureState(e);const t=()=>this.syncLightDom();this.#Fr=t,e._registerLightDomHandler("tbw-grid-header",t),e._registerLightDomHandler("tbw-grid-tool-buttons",t),e._registerLightDomHandler("tbw-grid-tool-panel",t)}#zr(e){const t=e._hostElement;!function(e,t){const i=e.querySelector("tbw-grid-header");if(!i)return;if(!t.lightDomTitle){const e=i.getAttribute("title");e&&(t.lightDomTitle=e)}const r=i.querySelectorAll("tbw-grid-header-content");r.length>0&&0===t.lightDomHeaderContent.length&&(t.lightDomHeaderContent=Array.from(r)),i.style.display="none"}(t,this.shellState),function(e,t,i){const r=e.querySelector(":scope > tbw-grid-tool-buttons");if(!r)return;t.hasToolButtonsContainer=!0;const n="light-dom-toolbar-content";if(t.lightDomToolbarContentIds.has(n))return;const o={id:n,order:0,render:i?.(r)??(e=>{for(;r.firstChild;)e.appendChild(r.firstChild);return()=>{for(;e.firstChild;)r.appendChild(e.firstChild)}})};t.toolbarContents.set(n,o),t.lightDomToolbarContentIds.add(n),r.style.display="none"}(t,this.shellState),function(e,t,i){e.querySelectorAll(":scope > tbw-grid-tool-panel").forEach(e=>{const r=e,n=r.getAttribute("id"),o=r.getAttribute("title")??void 0;if(!n)return void A("TBW070",`Tool panel missing required id attribute: title="${o??""}"`);const s=r.getAttribute("icon")??void 0,l=r.getAttribute("tooltip")??void 0,a=parseInt(r.getAttribute("order")??"100",10);let d;const c=i?.(r);if(c)d=c;else{const e=r.innerHTML.trim();d=t=>{const i=document.createElement("div");return q(i,e),t.appendChild(i),()=>i.remove()}}const u=t.toolPanels.get(n);if(u&&!t.lightDomToolPanelIds.has(n))return A(C,`Tool panel "${n}" is already provided by a plugin or the grid API; ignoring the matching light-DOM <tbw-grid-tool-panel>.`),void(r.style.display="none");if(u){if(c){const e=!t.adapterBoundToolPanelIds.has(n),i=u.title!==o||u.order!==a||u.icon!==s||u.tooltip!==l;if(u.render=d,u.title=o,u.order=a,u.icon=s,u.tooltip=l,t.adapterBoundToolPanelIds.add(n),e||i){const e=t.panelCleanups.get(n);e&&(e(),t.panelCleanups.delete(n))}}return}const h={id:n,title:o,icon:s,tooltip:l,order:a,render:d};t.toolPanels.set(n,h),t.lightDomToolPanelIds.add(n),c&&t.adapterBoundToolPanelIds.add(n),r.style.display="none"})}(t,this.shellState,e._getToolPanelRendererFactory())}syncLightDom(){const e=this.grid;if(!e||!this.hasState)return;const t=this.shellState,i=t.lightDomTitle,r=t.hasToolButtonsContainer;this.#zr(e);const n=t.lightDomTitle,o=t.hasToolButtonsContainer;(n&&!i||o&&!r)&&(e._requestConfigMerge(),e._renderRoot.querySelector(".tbw-shell-header")&&(wo(t),this.afterStructuralRender()))}parseLightDom(){const e=this.grid;e&&this.hasState&&this.#zr(e)}beforeStructuralRender(){this.hasState&&wo(this.shellState)}needsStructuralRerender(){const e=this.grid;if(!e||!this.hasState)return!1;const t=e._renderRoot,i=!!t.querySelector(".has-shell"),r=!!t.querySelector(".tbw-tool-panel"),n=t.querySelectorAll(".tbw-accordion-section").length,o=t.querySelector(".tbw-tool-panel")?.dataset.position??"right",s=t.querySelector(".tbw-shell-body")?.dataset.mode??"overlay",l=e.effectiveConfig?.shell;return i!==no(l)||!r&&(l?.toolPanels?.length??0)>0||r&&(l?.toolPanels?.length??0)!==n||r&&o!==(l?.toolPanel?.position??"right")||r&&s!==(l?.toolPanel?.mode??"overlay")}#Or(e){const t=this.shellState,i=e._hostElement.id;for(const o of[...t.toolPanels.keys()])t.lightDomToolPanelIds.has(o)||t.apiToolPanelIds.has(o)||(t.panelCleanups.get(o)?.(),t.panelCleanups.delete(o),t.toolPanels.delete(o));for(const o of[...t.headerContents.keys()])t.apiHeaderContentIds.has(o)||(t.headerContentCleanups.get(o)?.(),t.headerContentCleanups.delete(o),t.headerContents.delete(o));const{toolPanels:r,headerContents:n}=e._pluginShellContributions();for(const o of r)t.apiToolPanelIds.has(o.id)||(t.lightDomToolPanelIds.has(o.id)&&(A(C,`Tool panel "${o.id}" is provided by a plugin; ignoring the matching light-DOM <tbw-grid-tool-panel>.`,i),t.panelCleanups.get(o.id)?.(),t.panelCleanups.delete(o.id),t.lightDomToolPanelIds.delete(o.id),t.adapterBoundToolPanelIds.delete(o.id)),t.toolPanels.set(o.id,o));for(const o of n)t.apiHeaderContentIds.has(o.id)||(t.headerContents.has(o.id)&&(A(x,`Header content "${o.id}" is provided by a plugin; ignoring the matching light-DOM definition.`,i),t.headerContentCleanups.get(o.id)?.(),t.headerContentCleanups.delete(o.id)),t.headerContents.set(o.id,o))}processConfig(e){if(!this.hasState)return;const t=this.shellState,i=this.grid;i&&(this.#zr(i),this.#Or(i));const r=this.resolvedConfig;if(e.shell={...r,...e.shell},e.shell.header={...r.header,...e.shell.header},t.lightDomTitle&&!e.shell.header.title&&(e.shell.header.title=t.lightDomTitle),t.lightDomHeaderContent?.length>0&&(e.shell.header.lightDomContent=t.lightDomHeaderContent),t.hasToolButtonsContainer&&(e.shell.header.hasToolButtonsContainer=!0),t.toolPanels.size>0){const i=Array.from(t.toolPanels.values());i.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.toolPanels=i}if(t.headerContents.size>0){const i=Array.from(t.headerContents.values());i.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.headerContents=i}const n=Array.from(t.toolbarContents.values()),o=this.grid?._sourceConfig?.shell?.header?.toolbarContents??[],s=new Set(o.map(e=>e.id)),l=[...o];for(const a of n)s.has(a.id)||l.push(a);l.sort((e,t)=>(e.order??0)-(t.order??0)),e.shell.header.toolbarContents=l}afterStructuralRender(){const e=this.grid;if(!e||!this.hasState)return;const t=this.shellState;vo(e._renderRoot,e.effectiveConfig?.shell,{isPanelOpen:t.isPanelOpen,expandedSections:t.expandedSections},e.effectiveConfig?.icons)&&(this.#Nr(e),this.shellController.setInitialized(!0),this.#qr(e))}afterRender(){const e=this.grid;if(!e||!this.hasState)return;const t=this.shellState;this.#$r(e),t.isPanelOpen&&co(e._renderRoot,t),t.isPanelOpen?(this.shellController.reanchorOpenDropdown(),this.#Wr(e)):this.#Br()}#$r(e){const t=e._renderRoot.querySelector(".tbw-shell-header");if(!t)return;const i=e.effectiveConfig?.shell?.header?.title??this.shellState.lightDomTitle;let r=t.querySelector(".tbw-shell-title");i?(r||(r=document.createElement("h2"),r.className="tbw-shell-title",r.setAttribute("part","shell-title"),t.insertBefore(r,t.firstChild)),r.textContent=i):r&&r.remove()}#Wr(e){"dropdown"===e.effectiveConfig?.shell?.toolPanel?.mode?"undefined"!=typeof MutationObserver&&(this.#Hr||(this.#Hr=new MutationObserver(()=>{this.grid&&this.hasState&&this.shellState.isPanelOpen?this.shellController.reanchorOpenDropdown():this.#Br()})),this.#Gr||(this.#Hr.observe(e._renderRoot,{childList:!0,subtree:!0}),this.#Gr=!0)):this.#Br()}#Br(){this.#Hr&&this.#Gr&&(this.#Hr.disconnect(),this.#Gr=!1)}#qr(e){const t=this.shellState,i=e._renderRoot,r=e.effectiveConfig?.shell;ao(i,t),function(e,t,i){const r=t?.header?.toolbarContents??[],n=[...i.toolbarContents.values()],o=new Set(r.map(e=>e.id)),s=[...r];for(const l of n)o.has(l.id)||s.push(l);for(const l of s){if(i.toolbarContentCleanups.has(l.id))continue;if(!l.render)continue;const t=e.querySelector(`[data-toolbar-content="${l.id}"]`);if(!t)continue;const r=l.render(t);r&&i.toolbarContentCleanups.set(l.id,r)}}(i,r,t);const n=r?.toolPanel,o=n?.defaultOpen;o&&t.toolPanels.has(o)&&t.expandedSections.add(o);const s=!0===n?.locked||"open"===n?.initialState||void 0===n?.initialState&&void 0!==o&&t.toolPanels.has(o);!t.isPanelOpen&&t.toolPanels.size>0&&s&&this.openToolPanel(),t.isPanelOpen&&(ho(i,t),co(i,t,(e.effectiveConfig,e.effectiveConfig)),uo(i,t),this.shellController.reanchorOpenDropdown())}#Nr(e){const t=e._renderRoot,i=e.effectiveConfig?.shell,r=this.shellState;!function(e,t,i,r){const n=e.querySelector(".tbw-shell-toolbar");n&&n.addEventListener("click",e=>{e.target.closest("[data-panel-toggle]")&&r.onPanelToggle()});const o=e.querySelector(".tbw-tool-panel");o&&r.onPanelClose&&o.addEventListener("click",e=>{e.target.closest("[data-panel-close]")&&r.onPanelClose()});const s=e.querySelector(".tbw-accordion");s&&s.addEventListener("click",e=>{const t=e.target.closest(".tbw-accordion-header");if(t){const e=t.closest("[data-section]")?.getAttribute("data-section");e&&r.onSectionToggle(e)}})}(t,0,0,{onPanelToggle:()=>this.toggleToolPanel(),onSectionToggle:e=>this.toggleToolPanelSection(e),onPanelClose:()=>this.closeToolPanel()}),this.#Lr?.(),this.#Lr=lo(t,i,t=>{e._hostElement.style.setProperty("--tbw-tool-panel-width",`${t}px`)}),this.#Dr?.(),this.#Dr=function(e,t,i,r){const n=t?.toolPanel?.mode;if("dropdown"!==n&&!t?.toolPanel?.closeOnClickOutside)return()=>{};if("push"===n)return()=>{};const o=t=>{if(!i.isPanelOpen)return;const n=i.dropdownAnchorEl;for(const i of t.composedPath()){if(null!=n&&i===n)return;if(i instanceof Element&&(i.classList?.contains("tbw-tool-panel")||i.matches?.("[data-panel-toggle]"))&&so(i,e))return}r()};return document.addEventListener("mousedown",o),()=>document.removeEventListener("mousedown",o)}(e._hostElement,i,r,()=>this.closeToolPanel()),this.#Pr?.(),this.#Pr=function(e,t,i){if("push"===e?.toolPanel?.mode)return()=>{};const r=e=>{"Escape"!==e.key||e.defaultPrevented||t.isPanelOpen&&i()};return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)}(i,r,()=>this.closeToolPanel())}#Vr(){this.#Lr?.(),this.#Lr=void 0,this.#Dr?.(),this.#Dr=void 0,this.#Pr?.(),this.#Pr=void 0}detach(){super.detach()}disposeShellState(){this.#Vr(),this.#Br(),this.#Hr=void 0;const e=this.grid;e&&this.#Fr&&(e._unregisterLightDomHandler("tbw-grid-header"),e._unregisterLightDomHandler("tbw-grid-tool-buttons"),e._unregisterLightDomHandler("tbw-grid-tool-panel"),this.#Fr=void 0),this.#Mr&&(!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)e.toolPanels.get(t)?.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.#Mr),this.#Ir?.setInitialized(!1))}};we("shell",e=>new xo("boolean"==typeof e?{}:e??{}));var Ro=class extends Y{name="stickyRows";styles="@layer tbw-plugins{.tbw-sticky-rows{z-index:var(--tbw-z-layer-sticky-rows,22);background:var(--tbw-color-bg,var(--tbw-color-panel-bg));width:-moz-fit-content;width:fit-content;min-width:100%;display:block;position:absolute;top:0;left:0;overflow:visible}.tbw-sticky-rows:empty{display:none}.tbw-sticky-rows .tbw-sticky-row{box-shadow:0 1px 0 var(--tbw-color-border);background:var(--tbw-color-bg,var(--tbw-color-panel-bg))}.tbw-sticky-rows[data-mode=push] .tbw-sticky-row{will-change:transform}}";get defaultConfig(){return{mode:"push",maxStacked:1/0}}container=null;stickyIndices=[];cloneCache=/* @__PURE__ */new Map;displayedIndices=[];templateClone=null;lastPushOffset=0;settlePassScheduled=!1;detach(){this.container?.remove(),this.container=null,this.cloneCache.clear(),this.templateClone=null,this.stickyIndices=[],this.displayedIndices=[],this.lastPushOffset=0,this.settlePassScheduled=!1}afterRender(){this.settlePassScheduled=!1,this.recomputeStickyIndices(),this.ensureContainer(),this.primeCloneCache(),this.refreshClonesInWindow(),this.refreshDisplay()}onScrollRender(){this.primeCloneCache(),this.refreshDisplay(),this.maybeScheduleSettlePass()}onScroll(e){this.refreshDisplay(e.scrollTop)}getVerticalScrollOffsets(e){if(this.container&&0!==this.displayedIndices.length)return null!=e&&this.displayedIndices.includes(e)?{top:0,bottom:0,skipScroll:!0}:{top:this.container.offsetHeight,bottom:0}}maybeScheduleSettlePass(){this.settlePassScheduled||this.stickyIndices.some(e=>null!=this.findRenderedRow(e))&&(this.settlePassScheduled=!0,this.requestAfterRender())}resolvePredicate(){const e=this.config.isSticky;if("function"==typeof e)return e;if("string"==typeof e){const t=e;return e=>null!=e&&"object"==typeof e&&Boolean(e[t])}return()=>!1}recomputeStickyIndices(){const e=this.rows,t=this.resolvePredicate(),i=[];for(let r=0;r<e.length;r++)t(e[r],r)&&i.push(r);(i.length!==this.stickyIndices.length||i.some((e,t)=>e!==this.stickyIndices[t]))&&this.cloneCache.clear(),this.stickyIndices=i}ensureContainer(){const e=this.gridElement;if(!e)return;const t=e.querySelector(".rows-viewport");t?this.container&&t.contains(this.container)||(this.container=document.createElement("div"),this.container.className="tbw-sticky-rows",this.container.setAttribute("role","presentation"),this.container.dataset.mode=this.config.mode??"push",this.config.className&&this.container.classList.add(this.config.className),t.insertBefore(this.container,t.firstChild)):this.container=null}offsetOf(e){const t=this.getVirtualState(),i=t?.positionCache;return i&&i[e]?i[e].offset:e*(t?.rowHeight??28)}heightOf(e){const t=this.getVirtualState(),i=t?.positionCache;return i&&i[e]?i[e].height:t?.rowHeight??28}getVirtualState(){return this.grid?._virtualization}getCurrentScrollTop(){const e=this.getVirtualState(),t=e?.container?.scrollTop;return"number"==typeof t?t:"number"!=typeof e?.start||"number"!=typeof e?.rowHeight||e.positionCache&&e.positionCache.length?e?.positionCache&&"number"==typeof e.start&&e.positionCache[e.start]?e.positionCache[e.start].offset:0:e.start*e.rowHeight}computeDisplay(e){if("stack"===this.config.mode){const t=this.config.maxStacked??1/0,i=[];let r=0;for(const n of this.stickyIndices)if(i.length<t){if(!(this.offsetOf(n)<e+r))break;i.push(n),r+=this.heightOf(n)}else{const t=this.heightOf(i[0]);if(!(this.offsetOf(n)<e+r-t))break;i.shift(),r-=t,i.push(n),r+=this.heightOf(n)}if(i.length===t&&i.length>0){const t=this.findNextSticky(i[i.length-1]);if(null!=t){const n=this.offsetOf(t)-(e+r);if(n<0){const e=this.heightOf(i[0]);return{indices:i,pushOffset:Math.min(-n,e)}}}}return{indices:i,pushOffset:0}}const t=[];for(const o of this.stickyIndices){if(!(this.offsetOf(o)<e))break;t.push(o)}if(0===t.length)return{indices:t,pushOffset:0};const i=t[t.length-1],r=this.findNextSticky(i);let n=0;if(null!=r){const t=this.heightOf(i),o=this.offsetOf(r)-e;o<t&&(n=t-Math.max(0,o))}return{indices:[i],pushOffset:n}}findRenderedRow(e){const t=this.gridElement;return t?t.querySelector(`.rows .data-grid-row .cell[data-row="${e}"]`)?.parentElement??null:null}buildClone(e){const t=this.findRenderedRow(e);if(!t)return this.cloneCache.get(e)??null;const i=t.cloneNode(!0);return i.classList.add("tbw-sticky-row"),i.removeAttribute("aria-rowindex"),i.setAttribute("aria-hidden","true"),i.dataset.stickyRow=String(e),i.classList.remove("row-focus","cell-focus"),i.querySelectorAll(".cell-focus, .row-focus").forEach(e=>e.classList.remove("cell-focus","row-focus")),i.removeAttribute("tabindex"),i.querySelectorAll("[tabindex]").forEach(e=>e.removeAttribute("tabindex")),this.templateClone=i.cloneNode(!0),this.cloneCache.set(e,i),i}synthesizeClone(e){const t=this.templateClone,i=this.rows[e];if(!t||null==i)return null;const r=t.cloneNode(!0),n=Array.from(r.querySelectorAll(".cell"));if(n.some(e=>null!=e.firstElementChild))return null;r.dataset.stickyRow=String(e),r.dataset.syntheticStickyRow="",r.removeAttribute("aria-rowindex");const o=this.visibleColumns;for(const s of n){s.setAttribute("data-row",String(e));const t=s.getAttribute("data-field"),r=t?o.find(e=>e.field===t):void 0,n=r?c(i,r,e):null;s.textContent=null==n?"":String(n)}return r}refreshClonesInWindow(){if(this.displayedIndices.length)for(const e of this.displayedIndices)if(this.findRenderedRow(e)){const t=this.buildClone(e),i=this.container?.querySelector(`[data-sticky-row="${e}"]`);t&&i&&i!==t&&i.replaceWith(t)}}primeCloneCache(){if(this.stickyIndices.length)for(const e of this.stickyIndices)this.findRenderedRow(e)&&this.buildClone(e)}refreshDisplay(e){if(!this.container)return;const t=e??this.getCurrentScrollTop(),{indices:i,pushOffset:r}=this.computeDisplay(t);if(this.container.dataset.mode!==this.config.mode&&(this.container.dataset.mode=this.config.mode??"push"),i.length!==this.displayedIndices.length||!i.every((e,t)=>e===this.displayedIndices[t])){const e=document.createDocumentFragment(),t=[];for(const r of i){let i=this.cloneCache.get(r)??null;i=this.buildClone(r)??i,i||(i=this.synthesizeClone(r),i&&this.cloneCache.set(r,i)),i&&(e.appendChild(i),t.push(r))}this.container.replaceChildren(e),this.displayedIndices=t}r!==this.lastPushOffset&&(this.container.style.transform=r>0?`translateY(${-r}px)`:"",this.lastPushOffset=r)}findNextSticky(e){for(const t of this.stickyIndices)if(t>e)return t;return null}};we("stickyRows",e=>new Ro(e??{isSticky:()=>!1}));function So(e){return e.scrollWidth>e.clientWidth}function Eo(e,t){const i=t;return!!i&&e.contains(i)}function Ao(){return"function"==typeof HTMLElement.prototype?.showPopover}var _o=/* @__PURE__ */new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Tab"]),ko="tbw-tooltip-popover",To=class extends Y{name="tooltip";styles='@layer tbw-plugins{.tbw-tooltip-popover{padding:var(--tbw-tooltip-padding,var(--tbw-spacing-sm,.375rem) var(--tbw-spacing-md,.5rem));background:var(--tbw-tooltip-bg,light-dark(#333338,#484850));color:var(--tbw-tooltip-fg,light-dark(#f5f5f5,#f0f0f0));border:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));border-radius:var(--tbw-tooltip-radius,var(--tbw-border-radius,.25rem));box-shadow:none;filter:var(--tbw-tooltip-shadow,drop-shadow(0 4px 4px #00000073));font-family:var(--tbw-font-family,system-ui, sans-serif);font-size:var(--tbw-tooltip-font-size,var(--tbw-font-size-sm,.9285em));max-width:var(--tbw-tooltip-max-width,300px);white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;pointer-events:auto;-webkit-user-select:text;user-select:text;z-index:10001;margin:0}.tbw-tooltip-popover.tbw-tooltip-multiline{white-space:pre;word-wrap:normal;overflow-wrap:normal;max-width:none}.tbw-tooltip-popover:after{content:"";width:var(--tbw-tooltip-arrow-size,14px);height:var(--tbw-tooltip-arrow-size,14px);left:var(--tbw-tooltip-arrow-offset,16px);background:inherit;pointer-events:none;position:absolute}.tbw-tooltip-popover:not(.tbw-tooltip-above):after{top:calc(var(--tbw-tooltip-arrow-size,14px) / -2);border-top:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));border-left:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));clip-path:polygon(0 0,100% 0,0 100%);transform:rotate(45deg)}.tbw-tooltip-popover.tbw-tooltip-above:after{bottom:calc(var(--tbw-tooltip-arrow-size,14px) / -2);border-bottom:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));border-right:1px solid var(--tbw-tooltip-border,light-dark(#222226,#6a6a72));clip-path:polygon(100% 0,100% 100%,0 100%);transform:rotate(45deg)}@supports (anchor-name:--test){.tbw-tooltip-popover{position-anchor:--tbw-tooltip-anchor;top:calc(anchor(bottom) + 11px);bottom:auto;left:anchor(left)}.tbw-tooltip-popover.tbw-tooltip-above{top:auto;bottom:calc(anchor(top) + 11px)}}}';static manifest={ownedProperties:[{property:"cellTooltip",level:"column",description:'the "cellTooltip" column property'},{property:"headerTooltip",level:"column",description:'the "headerTooltip" column property'}],configRules:[]};#Kr=null;#jr=null;#Ur=!1;#Yr=null;#Zr=null;get#Xr(){return!1!==this.config.header}get#Qr(){return!1!==this.config.cell}get#Jr(){return!1!==this.config.focus}get#en(){return this.config.hideDelay??120}attach(e){super.attach(e)}detach(){this.#tn(),null!==this.#Zr&&(cancelAnimationFrame(this.#Zr),this.#Zr=null),this.#in(),this.#Kr?.remove(),this.#Kr=null,this.#Ur=!1,super.detach()}afterRender(){this.#rn(),this.#nn()}#rn(){if(this.#Kr)return;const e=document.createElement("div");e.className="tbw-tooltip-popover",e.setAttribute("popover","hint"),e.id=ko,e.setAttribute("role","tooltip"),e.style.overflow="visible",e.style.margin="0",document.body.appendChild(e),this.#Kr=e,e.addEventListener("mouseenter",()=>this.#tn(),{signal:this.disconnectSignal}),e.addEventListener("mouseleave",()=>this.#on(),{signal:this.disconnectSignal})}#sn(e,t){if(this.#Kr){if(this.#tn(),this.#ln(),e.style.setProperty("anchor-name","--tbw-tooltip-anchor"),e.setAttribute("aria-describedby",ko),this.#jr=e,this.#Kr.textContent=t,this.#Kr.classList.toggle("tbw-tooltip-multiline",t.includes("\n")),Ao())try{this.#Kr.showPopover()}catch{}"undefined"!=typeof CSS&&!0===CSS.supports?.("anchor-name","--test")?this.#Kr.classList.toggle("tbw-tooltip-above",this.#an(e)):this.#dn(e)}}#in(){if(this.#tn(),this.#Kr){if(Ao())try{this.#Kr.hidePopover()}catch{}this.#Kr.classList.remove("tbw-tooltip-above")}this.#ln()}get#cn(){return null!==this.#jr}#on(){this.#tn(),this.#en<=0?this.#in():this.#Yr=setTimeout(()=>{this.#Yr=null,this.#in()},this.#en)}#tn(){null!==this.#Yr&&(clearTimeout(this.#Yr),this.#Yr=null)}#ln(){this.#jr&&("--tbw-tooltip-anchor"===this.#jr.style.getPropertyValue("anchor-name")&&this.#jr.style.removeProperty("anchor-name"),this.#jr.getAttribute("aria-describedby")===ko&&this.#jr.removeAttribute("aria-describedby"),this.#jr=null)}#an(e){if(!this.#Kr)return!1;const t=e.getBoundingClientRect(),i=t.top-11,r=window.innerHeight-t.bottom-11;return this.#Kr.offsetHeight<=i||i>=r}#dn(e){if(!this.#Kr)return;const t=e.getBoundingClientRect(),i=this.#an(e);this.#Kr.style.position="fixed",this.#Kr.style.left=`${t.left}px`,i?(this.#Kr.style.top="",this.#Kr.style.bottom=window.innerHeight-t.top+11+"px"):(this.#Kr.style.top=`${t.bottom+11}px`,this.#Kr.style.bottom=""),this.#Kr.classList.toggle("tbw-tooltip-above",i)}#nn(){if(this.#Ur)return;const e=this.gridElement?.querySelector(".tbw-grid-root");e&&(this.#Ur=!0,e.addEventListener("mouseover",e=>this.#un(e),{signal:this.disconnectSignal}),e.addEventListener("mouseout",e=>this.#hn(e),{signal:this.disconnectSignal}),document.addEventListener("keydown",e=>this.#gn(e),{capture:!0,signal:this.disconnectSignal}),this.gridElement.addEventListener("keydown",e=>this.#pn(e),{signal:this.disconnectSignal}))}#un(e){const t=e.target;if(!t?.closest)return;const i=t.closest('[part~="header-cell"]');if(i&&this.#Xr)return void(Eo(i,e.relatedTarget)||this.#fn(i));const r=t.closest("[data-row][data-col]");if(r&&this.#Qr&&!r.style.getPropertyValue("anchor-name")){if(Eo(r,e.relatedTarget))return;this.#mn(r)}}#hn(e){const t=e.target;if(!t?.closest)return;const i=t.closest('[part~="header-cell"], [data-row][data-col]');i&&(Eo(i,e.relatedTarget)||this.#on())}#gn(e){"Escape"===e.key&&this.#cn&&this.#in()}#pn(e){this.#Jr&&this.#Qr&&"Escape"!==e.key&&(_o.has(e.key)?(null!==this.#Zr&&cancelAnimationFrame(this.#Zr),this.#Zr=requestAnimationFrame(()=>{this.#Zr=null,this.#wn()})):this.#in())}#wn(){const e=this.gridElement?.querySelector(".cell-focus");if(!e||!e.hasAttribute("data-row"))return void this.#in();if(e===this.#jr)return;if(e.style.getPropertyValue("anchor-name"))return void this.#in();const t=this.#jr;this.#mn(e),this.#jr===t&&this.#in()}#fn(e){const t=parseInt(e.getAttribute("data-col")??"-1",10);if(t<0)return;const i=this.visibleColumns[t];if(!i)return;const r=function(e,t){const i=e.headerTooltip;if(!1===i)return null;if("string"==typeof i)return i;if("function"==typeof i)return i({column:e,value:e.header??e.field});const r=t.querySelector("span:first-child")??t;return So(r)&&r.textContent?.trim()||null}(i,e);r&&this.#sn(e,r)}#mn(e){const t=parseInt(e.getAttribute("data-row")??"-1",10),i=parseInt(e.getAttribute("data-col")??"-1",10);if(t<0||i<0)return;const r=this.visibleColumns[i];if(!r)return;const n=this.rows[t],o=n?.[r.field],s=function(e,t,i,r,n){const o=e.cellTooltip;return!1===o?null:"string"==typeof o?o:"function"==typeof o?o({value:r,row:i,column:e,field:e.field,grid:n}):So(t)&&t.textContent?.trim()||null}(r,e,n,o,this.grid);s&&this.#sn(e,s)}};function Mo(e,t,i){return void 0!==e.id?String(e.id):i?`${i}-${t}`:String(t)}function Io(e,t){const i=new Set(e);return i.has(t)?i.delete(t):i.add(t),i}function Lo(e,t,i=null,r=0){const n=t.childrenField??"children",o=/* @__PURE__ */new Set;for(let s=0;s<e.length;s++){const l=e[s],a=Mo(l,s,i),d=l[n];if(Array.isArray(d)&&d.length>0){o.add(a);const e=Lo(d,t,a,r+1);for(const t of e)o.add(t)}}return o}function Do(e,t,i,r=null,n=0){const o=i.childrenField??"children";for(let s=0;s<e.length;s++){const l=e[s],a=Mo(l,s,r);if(a===t)return[a];const d=l[o];if(Array.isArray(d)&&d.length>0){const e=Do(d,t,i,a,n+1);if(e)return[a,...e]}}return null}function Po(e,t,i,r){const n=Do(e,t,i);if(!n)return r;const o=new Set(r);for(let s=0;s<n.length-1;s++)o.add(n[s]);return o}function Fo(e,t){const i=Math.min(t,e.length-1);if(i<0)return 0;let r=i;for(;r>0&&e[r].depth>0;)r--;let n=0;for(let o=0;o<=r;o++)0===e[o].depth&&n++;return n-1}function Ho(e){let t=0;for(const i of e)0===i.depth&&t++;return t}function Go(e,t="children",i){if(!Array.isArray(e)||0===e.length)return!1;for(const r of e){if(!r)continue;const e=r[t];if(Array.isArray(e)&&e.length>0)return!0;if(null!=e&&!Array.isArray(e)&&e)return!0;if(i?.(r))return!0}return!1}we("tooltip",e=>!0===e?new To:new To(e??void 0));var zo=class extends Y{static manifest={modifiesRowStructure:!0,hookPriority:{processRows:10},incompatibleWith:[{name:"groupingRows",reason:"Both plugins transform the entire row model. TreePlugin flattens nested hierarchies while GroupingRowsPlugin groups flat rows with synthetic headers. Use one approach per grid."},{name:"pivot",reason:"PivotPlugin replaces the entire row and column structure with aggregated pivot data. Tree hierarchy cannot coexist with pivot aggregation."}],events:[{type:"tree-expand",description:"Emitted when tree expansion state changes (toggle, expand all, collapse all). Broadcast to both DOM consumers and plugin bus."},{type:"tree-load-start",description:"Emitted when lazy child loading starts for a node whose children are not yet loaded."},{type:"tree-load-end",description:"Emitted when lazy child loading completes and children have been merged into the parent row."},{type:"tree-load-error",description:"Emitted when lazy child loading fails. The node leaves its loading state and can be retried."}],queries:[{type:"canMoveRow",description:"Returns false for rows with children (parent nodes cannot be reordered)"},{type:"datasource:viewport-mapping",description:"Translates flat viewport row indices to top-level node indices for ServerSide pagination."}]};static dependencies=[{name:"multiSort",required:!1,reason:"Queries sort model for coordinated tree sorting"},{name:"serverSide",required:!1,reason:"Consumes datasource events for lazy-loaded tree data"}];name="tree";styles='@layer tbw-plugins{tbw-grid .cell[data-field=__tbw_expander]{justify-content:flex-start;align-items:center;padding:0;display:flex;border-inline-end:none!important}tbw-grid .header-row .cell[data-field=__tbw_expander]{display:none}tbw-grid .header-row .cell[data-field=__tbw_expander]+.cell{grid-column:1/3}tbw-grid .tree-cell-wrapper{vertical-align:middle;align-items:center;padding-inline-start:calc(var(--tbw-tree-depth,0) * var(--tbw-tree-indent-width,var(--tbw-tree-toggle-size,1.25em)));display:inline-flex;overflow:visible}tbw-grid .tree-expander{box-sizing:border-box;justify-content:flex-start;align-items:center;width:100%;height:100%;display:flex}tbw-grid .tree-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;width:var(--tbw-tree-toggle-size,1.25em);height:var(--tbw-tree-toggle-size,1.25em);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}tbw-grid .tree-toggle:hover{color:var(--tbw-tree-accent,var(--tbw-color-accent))}tbw-grid .tree-toggle{position:relative}tbw-grid .tree-toggle:after{content:"";inline-size:var(--tbw-touch-target-min,24px);block-size:var(--tbw-touch-target-min,24px);position:absolute;inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}tbw-grid .tree-spacer{width:var(--tbw-tree-toggle-size,1.25em);height:var(--tbw-tree-toggle-size,1.25em);flex-shrink:0;display:inline-block}@media (pointer:coarse){tbw-grid .tree-toggle,tbw-grid .tree-spacer{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}tbw-grid .tree-loading{--tbw-spinner-size:var(--tbw-tree-toggle-size,1.25em);flex-shrink:0}tbw-grid .data-grid-row.tbw-tree-slide-in{animation:tbw-tree-slide-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}tbw-grid .data-grid-row.tbw-tree-fade-in{animation:tbw-tree-fade-in var(--tbw-animation-duration,.2s) var(--tbw-animation-easing,ease-out) forwards}@keyframes tbw-tree-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}@keyframes tbw-tree-fade-in{0%{opacity:0}to{opacity:1}}}';get defaultConfig(){return{childrenField:"children",autoDetect:!0,defaultExpanded:!1,indentWidth:20,showExpandIcons:!0,animation:"slide"}}expandedKeys=/* @__PURE__ */new Set;initialExpansionDone=!1;flattenedRows=[];rowKeyMap=/* @__PURE__ */new Map;previousVisibleKeys=/* @__PURE__ */new Set;keysToAnimate=/* @__PURE__ */new Set;sortState=null;loadingKeys=/* @__PURE__ */new Set;loadedKeys=/* @__PURE__ */new Set;#bn=/* @__PURE__ */new Map;#vn=/* @__PURE__ */new WeakMap;#yn=/* @__PURE__ */new WeakMap;originalTreeColumnRenderer;wrappedTreeColumnField;#Cn=!1;#xn=!1;detach(){(this.gridElement?.querySelector(".rows-body"))?.setAttribute("role","grid"),this.expandedKeys.clear(),this.initialExpansionDone=!1,this.flattenedRows=[],this.rowKeyMap.clear(),this.previousVisibleKeys.clear(),this.keysToAnimate.clear(),this.sortState=null,this.loadingKeys.clear(),this.loadedKeys.clear();for(const e of this.#bn.values())e.abort();this.#bn.clear(),this.originalTreeColumnRenderer=void 0,this.wrappedTreeColumnField=void 0,this.#Cn=!1}handleQuery(e){if("canMoveRow"===e.type){const t=e.context,i=this.config.childrenField??"children",r=t?.[i];if(Array.isArray(r)&&r.length>0)return!1}if("datasource:viewport-mapping"===e.type){const{viewportStart:t,viewportEnd:i}=e.context;if(0===this.flattenedRows.length)return;return{startNode:Fo(this.flattenedRows,t),endNode:Fo(this.flattenedRows,i)+1,totalLoadedNodes:Ho(this.flattenedRows)}}}attach(e){super.attach(e),this.on("datasource:data",e=>{const t=e;t.claimed||(t.claimed=!0)}),this.on("datasource:children",e=>{const t=e;if("tree"!==t.context?.source)return;t.claimed=!0;const i=t.context.parentNode;if(i){const e=this.#Rn(i);this.#Sn(i,t.rows??[]),this.loadingKeys.delete(e),this.broadcast("tree-load-end",{key:e,row:i,depth:this.rowKeyMap.get(e)?.depth??0,childCount:t.rows?.length??0}),this.requestRender()}}),this.on("datasource:error",e=>{const t=e;if("tree"!==t.context?.source)return;const i=t.context.parentNode;if(!i)return;const r=this.#Rn(i);this.loadingKeys.delete(r)&&(this.broadcast("tree-load-error",{key:r,row:i,depth:this.rowKeyMap.get(r)?.depth??0,error:t.error}),this.requestRender())})}get animationStyle(){return!!this.isAnimationEnabled&&(this.config.animation??"slide")}detect(e){if(!this.config.autoDetect)return!1;const t=e,i=this.config.childrenField??function(e){if(!Array.isArray(e)||0===e.length)return null;const t=["children","items","nodes","subRows","nested"];for(const i of e)if(i&&"object"==typeof i)for(const e of t){const t=i[e];if(Array.isArray(t)&&t.length>0)return e}return null}(t)??"children";return Go(t,i)}processRows(e){const t=this.config.childrenField??"children",i=e;if(0===i.length||!Go(i,t,this.config.hasChildren))return this.flattenedRows=[],this.rowKeyMap.clear(),this.previousVisibleKeys.clear(),this.#En(),[...e];const r=this.resolveEffectiveSortState();this.config.defaultExpanded&&!this.initialExpansionDone&&(this.expandedKeys=Lo(i,this.config),this.initialExpansionDone=!0),this.flattenedRows=this.#An(i,this.expandedKeys,r,null,0),this.#yn=/* @__PURE__ */new WeakMap,this.rowKeyMap.clear(),this.keysToAnimate.clear();const n=/* @__PURE__ */new Set;for(const o of this.flattenedRows)this.rowKeyMap.set(o.key,o),this.#yn.set(o.data,o),n.add(o.key),!this.previousVisibleKeys.has(o.key)&&o.depth>0&&this.keysToAnimate.add(o.key);return this.previousVisibleKeys=n,this.#En(),this.flattenedRows.map(e=>e.data)}#En(){this.#xn||(this.#xn=!0,queueMicrotask(()=>{this.#xn=!1,this.grid&&this.#Cn!==this.flattenedRows.length>0&&this.requestColumnsRender()}))}#_n(e,t,i){if(void 0!==e.id){const t=String(e.id);return this.#vn.set(e,t),t}const r=this.#vn.get(e);if(void 0!==r)return r;const n=i?`${i}-${t}`:String(t);return this.#vn.set(e,n),n}#An(e,t,i,r,n){const o=this.config.childrenField??"children";for(let d=0;d<e.length;d++)this.#_n(e[d],d,r);const s=i?this.#kn(e,i.field,i.direction):e,l=[],a=this.config.hasChildren;for(let d=0;d<s.length;d++){const e=s[d],c=this.#_n(e,d,r),u=e[o],h=Array.isArray(u)&&u.length>0,g=h||(a?a(e):null!=u&&!Array.isArray(u)&&!!u),p=t.has(c);l.push({key:c,data:e,depth:n,hasChildren:g,isExpanded:p,parentKey:r,posInSet:d+1,setSize:s.length}),h&&p&&l.push(...this.#An(u,t,i,c,n+1))}return l}#kn(e,t,i){const r=this.grid,n=r?._columns??[],o={field:t,direction:i},s=[...e],l=(r?.effectiveConfig?.sortHandler??kn)(s,o,n);return l&&"function"==typeof l.then?(l.catch(()=>{}),kn(s,o,n)):l}#Rn(e){return this.#vn.get(e)??String(e.id??"?")}#Sn(e,t){e[this.config.childrenField??"children"]=t,this.loadedKeys.add(this.#Rn(e))}#Tn(e,t){if(this.loadedKeys.has(t))return!1;const i=e[this.config.childrenField??"children"];if(Array.isArray(i)&&i.length>0)return!1;const r=this.config.hasChildren;return r?r(e):null!=i&&!Array.isArray(i)&&!!i}requestLazyChildren(e){const{key:t,depth:i,data:r}=e;if(this.loadingKeys.has(t))return;if(!this.#Tn(r,t))return;const n=this.queryBoolean("datasource:is-active"),{loadChildren:o}=this.config;(n||o)&&(this.loadingKeys.add(t),this.broadcast("tree-load-start",{key:t,row:r,depth:i}),n?this.grid.query("datasource:fetch-children",{context:{source:"tree",parentNode:r,nodePath:[t]}}):this.#Mn(t,r,i))}#Mn(e,t,i){const r=this.config.loadChildren,n=new AbortController;this.#bn.set(e,n);const o=()=>!n.signal.aborted&&(this.#bn.delete(e),this.loadingKeys.delete(e),!0),s=r=>{if(!o())return;const n=r??[];this.#Sn(t,n),this.broadcast("tree-load-end",{key:e,row:t,depth:i,childCount:n.length}),this.requestRender()},l=r=>{o()&&(this.broadcast("tree-load-error",{key:e,row:t,depth:i,error:r}),this.requestRender())};let a;try{a=r({row:t,key:e,depth:i,signal:n.signal})}catch(d){return void l(d)}if(a&&"function"==typeof a.subscribe){let e=!1,t=null;const i=()=>{e=!0,t?.unsubscribe(),t=null},r=a.subscribe({next:e=>{s(e),i()},error:e=>{l(e),i()}});return e?void r.unsubscribe():(t=r,void n.signal.addEventListener("abort",i,{once:!0}))}Promise.resolve(a).then(s,l)}resolveEffectiveSortState(){const e=this.grid?.query?.("sort:get-model",null);if(Array.isArray(e)&&e.length>0){const t=e[0];if(Array.isArray(t)&&t.length>0)return{field:t[0].field,direction:"desc"===t[0].direction?-1:1}}return this.sortState}processColumns(e){if(0===this.flattenedRows.length){const t=[...e];if(this.#Cn){const e=t.findIndex(e=>e.field===this.wrappedTreeColumnField);e>=0&&(t[e]={...t[e],viewRenderer:this.originalTreeColumnRenderer})}return this.#Cn=!1,this.originalTreeColumnRenderer=void 0,this.wrappedTreeColumnField=void 0,t}const t=[...e];if(0===t.length)return t;const{treeColumn:i}=this.config;let r=0;if(i){const e=t.findIndex(e=>e.field===i);e>=0&&(r=e)}const n=t[r],o=n.field;this.wrappedTreeColumnField!==o&&(this.originalTreeColumnRenderer=n.viewRenderer,this.wrappedTreeColumnField=o);const s=this.originalTreeColumnRenderer,l=()=>this.config,a=this.setIcon.bind(this);return t[r]={...n,viewRenderer:e=>{const{row:t,value:i}=e,{showExpandIcons:r=!0,indentWidth:n}=l(),o=this.#yn.get(t),d=o?.depth??0,c=document.createElement("span");if(c.className="tree-cell-wrapper",c.style.setProperty("--tbw-tree-depth",String(d)),void 0!==n&&c.style.setProperty("--tbw-tree-indent-width",`${n}px`),r)if(o&&this.loadingKeys.has(o.key)){const e=ci("small");e.classList.add("tree-loading"),c.appendChild(e)}else if(o&&o.hasChildren){const e=document.createElement("span");e.className=`${Ge.TREE_TOGGLE}${o.isExpanded?` ${Ge.EXPANDED}`:""}`,a(e,o.isExpanded?"collapse":"expand"),e.setAttribute("data-tree-key",o.key),c.appendChild(e)}else{const e=document.createElement("span");e.className="tree-spacer",c.appendChild(e)}const u=document.createElement("span");if(u.className="tree-content",s){const t=s(e);t instanceof Node?u.appendChild(t):"string"==typeof t&&q(u,t)}else u.textContent=null!=i?String(i):"";return c.appendChild(u),c}},this.#Cn=!0,t}onCellClick(e){const t=e.originalEvent?.target;if(!t?.classList.contains(Ge.TREE_TOGGLE))return!1;const i=t.getAttribute("data-tree-key");if(!i)return!1;const r=this.rowKeyMap.get(i);return!!r&&(this.expandedKeys=Io(this.expandedKeys,i),this.expandedKeys.has(i)&&this.requestLazyChildren(r),this.broadcast("tree-expand",{key:i,row:r.data,expanded:this.expandedKeys.has(i),depth:r.depth,expandedKeys:[...this.expandedKeys]}),this.requestRender(),!0)}onKeyDown(e){if(" "!==e.key)return;const t=this.grid._focusRow,i=this.flattenedRows[t];return i?.hasChildren?(e.preventDefault(),this.expandedKeys=Io(this.expandedKeys,i.key),this.expandedKeys.has(i.key)&&this.requestLazyChildren(i),this.broadcast("tree-expand",{key:i.key,row:i.data,expanded:this.expandedKeys.has(i.key),depth:i.depth,expandedKeys:[...this.expandedKeys]}),this.requestRenderWithFocus(),!0):void 0}onHeaderClick(e){if(0===this.flattenedRows.length||!e.column.sortable)return!1;const t=this.grid?.query?.("sort:get-model",null);if(Array.isArray(t)&&t.length>0)return!1;const{field:i}=e.column;this.sortState&&this.sortState.field===i?1===this.sortState.direction?this.sortState={field:i,direction:-1}:this.sortState=null:this.sortState={field:i,direction:1};const r=this.grid;return void 0!==r._sortState&&(r._sortState=this.sortState?{...this.sortState}:null),this.broadcast("sort-change",{field:i,direction:this.sortState?.direction??0}),this.requestRender(),!0}afterRender(){const e=this.gridElement?.querySelector(".rows-body");e&&"treegrid"!==e.getAttribute("role")&&e.setAttribute("role","treegrid");const t=this.gridElement?.querySelector(".rows");if(!t)return;const i=this.animationStyle,r=!1!==i&&this.keysToAnimate.size>0,n="fade"===i?"tbw-tree-fade-in":"tbw-tree-slide-in";for(const o of t.querySelectorAll(".data-grid-row")){const e=o.querySelector(".cell[data-row]"),t=e?parseInt(e.getAttribute("data-row")??"-1",10):-1,i=this.flattenedRows[t];i&&(o.setAttribute("aria-level",String(i.depth+1)),o.setAttribute("aria-setsize",String(i.setSize)),o.setAttribute("aria-posinset",String(i.posInSet)),i.hasChildren?o.setAttribute("aria-expanded",String(i.isExpanded)):o.hasAttribute("aria-expanded")&&o.removeAttribute("aria-expanded"),o.classList.toggle("tbw-row-expanded",i.hasChildren&&i.isExpanded),this.loadingKeys.has(i.key)?o.setAttribute("aria-busy","true"):o.hasAttribute("aria-busy")&&o.removeAttribute("aria-busy"),r&&i.key&&this.keysToAnimate.has(i.key)&&(o.classList.add(n),o.addEventListener("animationend",()=>o.classList.remove(n),{once:!0})))}this.keysToAnimate.clear()}expand(e){this.expandedKeys.add(e);const t=this.rowKeyMap.get(e);t&&this.requestLazyChildren(t),this.requestRender()}collapse(e){this.expandedKeys.delete(e),this.requestRender()}toggle(e){this.expandedKeys=Io(this.expandedKeys,e);const t=this.rowKeyMap.get(e);t?(this.expandedKeys.has(e)&&this.requestLazyChildren(t),this.broadcast("tree-expand",{key:e,row:t.data,expanded:this.expandedKeys.has(e),depth:t.depth,expandedKeys:[...this.expandedKeys]})):this.emitPluginEvent("tree-expand",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}expandAll(){this.expandedKeys=Lo(this.rows,this.config),this.emitPluginEvent("tree-expand",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}collapseAll(){this.expandedKeys=/* @__PURE__ */new Set,this.emitPluginEvent("tree-expand",{expandedKeys:[...this.expandedKeys]}),this.requestRender()}isExpanded(e){return this.expandedKeys.has(e)}getExpandedKeys(){return[...this.expandedKeys]}getFlattenedRows(){return[...this.flattenedRows]}getRowMeta(e){return this.#yn.get(e)}getRowByKey(e){return this.rowKeyMap.get(e)?.data}expandToKey(e){this.expandedKeys=Po(this.rows,e,this.config,this.expandedKeys),this.requestRender()}};function Oo(e,t){const i=t.renderer||t.viewRenderer;if(i)return i;if(!t.type)return;const r=e.__frameworkAdapter;if(r?.getTypeDefault){const i=r.getTypeDefault(t.type,e._hostElement);if(i?.renderer)return i.renderer}}function No(e,t){if(t.format)return t.format;if(!t.type)return;const i=e.__frameworkAdapter;if(i?.getTypeDefault){const r=i.getTypeDefault(t.type,e._hostElement);if(r?.format)return r.format}}function qo(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing"),e.querySelectorAll(`.cell.${Ge.EDITING}`).forEach(e=>e.classList.remove(Ge.EDITING))}we("tree",e=>new zo("boolean"==typeof e?{}:e??{}));var $o=document.createElement("template");$o.innerHTML='<div class="cell" role="gridcell" part="cell"></div>';var Wo=document.createElement("template");function Bo(){return Wo.content.firstElementChild.cloneNode(!0)}function Vo(e){e.__cellDisplayCache=void 0,e.__cellCacheEpoch=void 0,e.__hasSpecialColumns=void 0}function Ko(e){const t=e.getAttribute("data-dynamic-classes");if(!t)return;const i=t.split(" ");for(let r=0;r<i.length;r++)i[r]&&e.classList.remove(i[r])}function jo(e,t){const i="string"==typeof t?t.split(/\s+/):t;if(!i||0===i.length)return void e.removeAttribute("data-dynamic-classes");let r="";for(let n=0;n<i.length;n++){const t=i[n];t&&"string"==typeof t&&(e.classList.add(t),r+=(r?" ":"")+t)}e.setAttribute("data-dynamic-classes",r)}function Uo(e,t,i,r,n,o,s,l){e._afterCellRender?.({row:o,rowIndex:s,column:r,colIndex:n,value:l,cellElement:i,rowElement:t})}function Yo(e,t,i){for(let r=0;r<i;r++)if(t[r].externalView&&!e.querySelector(`.cell[data-col="${r}"] [data-external-view]`))return!0;return!1}function Zo(e,t,i,r,n,o,s){const l=function(e){return(e.__editingCellCount??0)>0}(t),a=!!e._isGridEditMode&&!s||e._activeEditRows===r;return o?l&&!a?(qo(t),us(e,t,i,r),t.__epoch=n,void(t.__rowDataRef=i)):(ss(e,t,i,r),void(s&&(t.__rowDataRef=i))):l&&a?(ss(e,t,i,r),void(t.__rowDataRef=i)):(function(e){e.__isCustomRow&&(e.className="data-grid-row",e.setAttribute("role","row"),e.__isCustomRow=!1)}(t),l&&qo(t),us(e,t,i,r),t.__epoch=n,void(t.__rowDataRef=i))}function Xo(e,t,i){let r=!1;const n=e._changedRowIdSet;if(n&&n.size>0)try{const t=e.getRowId?.(i);t&&(r=n.has(t))}catch{}r!==t.classList.contains("changed")&&t.classList.toggle("changed",r)}function Qo(e,t,i){const r=e.effectiveConfig?.rowClass;if(r){Ko(t);try{jo(t,r(i))}catch(n){A("TBW060",`rowClass callback error: ${n}`,e.id),t.removeAttribute("data-dynamic-classes")}}}function Jo(e){return null!=e&&(!0===e.__isGroupRow||!0===e.__loading||!0===e.__pivotIsGrandTotal||void 0!==e.__pivotRowKey)}function es(e,t,i,r,n){const o=Math.max(0,i-t),s=e._bodyEl,l=e._visibleColumns,a=l.length,d=function(e){let t=e.__cachedHeaderRowCount;return void 0===t&&(t=e.querySelector(".header-group-row")?2:1,e.__cachedHeaderRowCount=t),t}(e);!function(e,t,i){for(;e._rowPool.length<t;)e._rowPool.push(Bo());if(e._rowPool.length<=t)return;const r=e.__frameworkAdapter,n=r?.releaseCell;r?.beginBatch?.(e);try{for(let o=t;o<e._rowPool.length;o++){const t=e._rowPool[o];if(n){const e=t.children;for(let t=0;t<e.length;t++){const i=e[t];i.firstElementChild&&n.call(r,i)}}t.parentNode===i&&t.remove()}e._rowPool.length=t}finally{r?.endBatch?.(e)}}(e,o,s);const c=n&&!1!==e.__hasRenderRowPlugins,u=e._hasAfterRowRenderHook?.()??!1,h=!!e.effectiveConfig?.rowClass,g=e._virtualization?.variableHeights&&"function"==typeof e.effectiveConfig?.rowHeight?e.effectiveConfig.rowHeight:null;for(let p=0;p<o;p++){const i=t+p,o=e._rows[i],f=e._rowPool[p],m=i+d+1;if(f.__ariaRowIndex!==m&&(f.__ariaRowIndex=m,f.setAttribute("aria-rowindex",String(m))),c&&n(o,f,i)){f.__epoch=r,f.__rowDataRef=o,h&&!Jo(o)&&Qo(e,f,o),f.parentNode!==s&&s.appendChild(f);continue}let w=f.children.length;w>a&&f.lastElementChild?.classList.contains("tbw-row-loading-overlay")&&w--;const b=f.__rowDataRef!==o;let v=f.__epoch===r&&w===a;if(v&&b&&Yo(f,l,a)&&(v=!1),Zo(e,f,o,i,r,v,b),Xo(e,f,o),Qo(e,f,o),g){const e=g(o,i);void 0!==e&&e>0?f.style.setProperty("--tbw-row-height",`${e}px`):f.style.removeProperty("--tbw-row-height")}u&&e._afterRowRender?.({row:o,rowIndex:i,rowElement:f}),f.parentNode!==s&&s.appendChild(f)}}function ts(e,t){t!==e.classList.contains("cell-focus")&&(e.classList.toggle("cell-focus",t),e.setAttribute("aria-selected",String(t)))}function is(e,t,i,r,n){const o=i.cellClass;if(o){Ko(t);try{jo(t,o(c(r,i,n),r,i))}catch(s){A("TBW061",`cellClass callback error for column '${i.field}': ${s}`,e.id),t.removeAttribute("data-dynamic-classes")}}}Wo.innerHTML='<div class="data-grid-row" role="row" part="row"></div>';var rs=/Reflect\.|\bProxy\b|ownKeys\(/;function ns(e,t,i){null!==i?(t.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(t),q(t,i),K(t)):t.textContent=""}function os(e,t,i,r,n,o,s,l){const a=Oo(e,r);let d;if(a)d=c(o,r,s),function(e,t,i,r,n,o){const s=o({row:r,value:n,field:i.field,column:i,grid:e,cellEl:t});"string"==typeof s?(e.__frameworkAdapter?.releaseCell?.(t),q(t,s)):s instanceof Node?s.parentElement!==t&&(e.__frameworkAdapter?.releaseCell?.(t),t.innerHTML="",t.appendChild(s)):null==s&&(e.__frameworkAdapter?.releaseCell?.(t),t.textContent=null==n?"":String(n))}(e,i,r,o,d,a);else if(r.__compiledView){d=c(o,r,s);const t=r.__compiledView({row:o,value:d,field:r.field,column:r});ns(e,i,r.__compiledView.__blocked?null:t)}else if(r.__viewTemplate){d=c(o,r,s);const t=r.__viewTemplate.innerHTML;ns(e,i,rs.test(t)?null:B(t,{row:o,value:d}))}else{if(r.externalView)return;d=c(o,r,s),function(e,t,i,r,n){t.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(t);const o=No(e,i);if(o){let l;try{const e=o(n,r);l=null==e?"":String(e)}catch(s){A(v,`Format error in column '${i.field}': ${s}`,e.id),l=null==n?"":String(n)}t.textContent=l}else"date"===i.type?t.textContent=Ve(n):"boolean"===i.type?t.innerHTML=Be(!!n):t.textContent=null==n?"":String(n)}(e,i,r,o,d)}l&&Uo(e,t,i,r,n,o,s,d)}function ss(e,t,i,r){const n=t.children,o=e._visibleColumns,s=o.length,l=n.length,a=s<l?s:l,d=String(r),u=e._hasAfterCellRenderHook?.()??!1;if(!function(e,t,i){const r=e.__hasSpecialColumns;if(void 0!==r)return r;let n=!1;const o=e.__frameworkAdapter;for(let s=0;s<i;s++){const i=t[s];if(i.__viewTemplate||i.__compiledView||i.renderer||i.viewRenderer||i.externalView||i.format||i.cellClass||"date"===i.type||"boolean"===i.type||i.type&&o?.getTypeDefault?.(i.type,e._hostElement)?.renderer||i.type&&o?.getTypeDefault?.(i.type,e._hostElement)?.format){n=!0;break}}return e.__hasSpecialColumns=n,n}(e,o,s))return void function(e,t,i,r,n,o,s,l,a){const d=e._focusRow,u=e._focusCol;for(let h=0;h<n;h++){const n=i[h];if(n.classList.contains(Ge.EDITING))continue;n.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(n);const g=r[h],p=c(o,g,s);n.textContent=null==p?"":String(p),n.getAttribute("data-row")!==l&&n.setAttribute("data-row",l),ts(n,d===s&&u===h),a&&Uo(e,t,n,g,h,o,s,p)}}(e,t,n,o,a,i,r,d,u);if(function(e,t,i){for(let r=0;r<i;r++)if(t[r].externalView&&!e[r].querySelector("[data-external-view]"))return!0;return!1}(n,o,a))return void us(e,t,i,r);const h=e._focusRow,g=e._focusCol;for(let c=0;c<a;c++){const s=o[c],l=n[c];l.getAttribute("data-row")!==d&&l.setAttribute("data-row",d);const a=l.classList.contains(Ge.EDITING);a||ts(l,h===r&&g===c),is(e,l,s,i,r),a||os(e,t,l,s,c,i,r,u)}}function ls(e,t,i){const r=$o.content.firstElementChild.cloneNode(!0);return r.setAttribute("aria-colindex",String(t+1)),r.setAttribute("data-col",String(t)),r.setAttribute("data-row",String(i)),r.setAttribute("data-field",e.field),r.setAttribute("data-header",e.header??e.field),e.type&&r.setAttribute("data-type",e.type),r}function as(e,t,i,r,n,o){const s=Oo(e,i);if(s)return function(e,t,i,r,n,o){const s=r({row:o,value:n,field:i.field,column:i,grid:e,cellEl:t});return"string"==typeof s?(q(t,s),!0):(s instanceof Node?s.parentElement!==t&&(t.textContent="",t.appendChild(s)):null==s&&(t.textContent=null==n?"":String(n)),!1)}(e,t,i,s,r,n);if(i.externalView)return function(e,t,i,r,n){const o=i.externalView,s=document.createElement("div");s.setAttribute("data-external-view",""),s.setAttribute("data-field",i.field),t.appendChild(s);const l={row:n,value:r,field:i.field,column:i,grid:e};if(o.mount)try{o.mount({placeholder:s,context:l,spec:o})}catch(a){A("TBW063",`External view mount error for column '${i.field}': ${a}`,e.id)}else queueMicrotask(()=>{try{e.dispatchEvent(new CustomEvent("mount-external-view",{bubbles:!0,composed:!0,detail:{placeholder:s,spec:o,context:l}}))}catch(a){A("TBW064",`External view event dispatch error for column '${i.field}': ${a}`,e.id)}});s.setAttribute("data-mounted","")}(e,t,i,r,n),!1;const l=i.__compiledView;if(l){const e=l({row:n,value:r,field:i.field,column:i});return l.__blocked?(t.textContent="",t.setAttribute("data-blocked-template","")):q(t,e),!0}const a=i.__viewTemplate;if(a){const e=a.innerHTML;return/Reflect\.|\bProxy\b|ownKeys\(/.test(e)?(t.textContent="",t.setAttribute("data-blocked-template",""),!1):(q(t,B(e,{row:n,value:r})),!0)}return function(e,t,i,r){r||"date"!==t.type?r||"boolean"!==t.type?e.textContent=null==i?"":String(i):e.innerHTML=Be(!!i):e.textContent=Ve(i)}(t,i,r,o),!1}function ds(e,t){if(t){K(e);const t=e.textContent||"";/Proxy|Reflect\.ownKeys/.test(t)&&(e.textContent=t.replace(/Proxy|Reflect\.ownKeys/g,"").trim(),/Proxy|Reflect\.ownKeys/.test(e.textContent||"")&&(e.textContent=""))}e.hasAttribute("data-blocked-template")&&(e.textContent||"").trim().length&&(e.textContent="")}function cs(e,t,i){("function"==typeof t.editable?t.editable(i):t.editable)?e.tabIndex=0:"boolean"===t.type&&(e.hasAttribute("tabindex")||(e.tabIndex=0))}function us(e,t,i,r){!function(e,t){t.classList.remove("tbw-row-loading"),t.removeAttribute("aria-busy");const i=e.__frameworkAdapter;if(i?.releaseCell){i.beginBatch?.(e);try{const e=t.children;for(let t=e.length-1;t>=0;t--)i.releaseCell(e[t]);t.innerHTML=""}finally{i.endBatch?.(e)}}else t.innerHTML=""}(e,t);const n=e._visibleColumns,o=n.length,s=e._focusRow,l=e._focusCol,a=e._hasAfterCellRenderHook?.()??!1,d=document.createDocumentFragment();for(let h=0;h<o;h++){const o=n[h],g=ls(o,h,r);let p=c(i,o,r);const f=No(e,o);if(f)try{p=f(p,i)}catch(u){A(v,`Format error in column '${o.field}': ${u}`,e.id)}ds(g,as(e,g,o,p,i,!!f)),cs(g,o,i),s===r&&l===h?(g.classList.add("cell-focus"),g.setAttribute("aria-selected","true")):g.setAttribute("aria-selected","false"),is(e,g,o,i,r),a&&Uo(e,t,g,o,h,i,r,p),d.appendChild(g)}t.appendChild(d)}function hs(e,t,i){if(t.target?.closest(".resize-handle"))return;const r=Ke(i.querySelector(".cell[data-row]"));if(r<0)return;const n=e._rows[r];if(!n)return;if(e._dispatchRowClick?.(t,r,n,i))return;const o=t.target?.closest(".cell[data-col]");if(o){const i=Number(o.getAttribute("data-col"));if(!isNaN(i)){if(e._dispatchCellClick?.(t,r,i,o))return;const n=e._focusRow!==r||e._focusCol!==i;if(e._focusRow=r,e._focusCol=i,o.classList.contains(Ge.EDITING)){n&&(je(e._bodyEl??e),o.classList.add("cell-focus"));const i=t.target,r=o.contains(i)&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')?i:o.querySelector(He);try{r?.focus({preventScroll:!0})}catch{}return}at(e)}}}function gs(e,t,i){const r=[...e.undoStack,t];for(;r.length>i;)r.shift();return{undoStack:r,redoStack:[]}}function ps(e){if(0===e.undoStack.length)return{newState:e,action:null};const t=[...e.undoStack],i=t.pop();return i?{newState:{undoStack:t,redoStack:[...e.redoStack,i]},action:i}:{newState:e,action:null}}function fs(e){if(0===e.redoStack.length)return{newState:e,action:null};const t=[...e.redoStack],i=t.pop();return i?{newState:{undoStack:[...e.undoStack,i],redoStack:t},action:i}:{newState:e,action:null}}var ms=class extends Y{static dependencies=[{name:"editing",required:!0,reason:"UndoRedoPlugin tracks cell edit history"}];name="undoRedo";get defaultConfig(){return{maxHistorySize:100}}undoStack=[];redoStack=[];#In=!1;#Ln=null;#Dn=0;#Pn(e,t){const i=this.rows[e.rowIndex];if(i){try{const r=this.grid.getRowId(i);if(r)return void this.grid.updateRow(r,{[e.field]:t},"history")}catch{}d(i,e.field,t)}}#Fn(e){const t=this.grid,i=t._visibleColumns?.findIndex(t=>t.field===e.field)??-1;if(i<0)return;t._focusRow=e.rowIndex,t._focusCol=i;const r=t.findRenderedRowElement?.(e.rowIndex);if(!r)return;const n=r.querySelector(`.cell[data-col="${i}"]`);n?.classList.contains(Ge.EDITING)&&n.querySelector(He)?.focus({preventScroll:!0})}#Hn(e,t){if(this.#In=!0,"compound"===e.type){const i="undo"===t?[...e.actions].reverse():e.actions;for(const e of i)this.#Pn(e,"undo"===t?e.oldValue:e.newValue)}else this.#Pn(e,"undo"===t?e.oldValue:e.newValue);this.#In=!1}#Gn(e){const t="compound"===e.type?e.actions[e.actions.length-1]:e;t&&this.#Fn(t)}attach(e){super.attach(e),this.on("cell-edit-committed",e=>{this.#In||this.recordEdit(e.rowIndex,e.field,e.oldValue,e.newValue)})}detach(){this.undoStack=[],this.redoStack=[],this.#Ln=null,this.#Dn=0}onKeyDown(e){const t=(e.ctrlKey||e.metaKey)&&"z"===e.key&&!e.shiftKey,i=(e.ctrlKey||e.metaKey)&&("y"===e.key||"z"===e.key&&e.shiftKey);if(!t&&!i)return!1;const r=t?"undo":"redo";return this.#zn(e.target)?(this.#On(e.target,r),!0):(e.preventDefault(),this.#Nn(r),!0)}#Nn(e){const t={undoStack:this.undoStack,redoStack:this.redoStack},i="undo"===e?ps(t):fs(t);i.action&&(this.#Hn(i.action,e),this.undoStack=i.newState.undoStack,this.redoStack=i.newState.redoStack,this.emit(e,{action:i.action,type:e}),this.#Gn(i.action),this.requestRenderWithFocus())}#zn(e){return e instanceof Element&&!!e.closest('input, textarea, [contenteditable=""], [contenteditable="true"]')}#On(e,t){const i="undo"===t?"historyUndo":"historyRedo";let r=!1;const n=e=>{e.inputType===i&&(r=!0)};e.addEventListener("beforeinput",n,{capture:!0}),queueMicrotask(()=>{e.removeEventListener("beforeinput",n,{capture:!0}),r||this.#Nn(t)})}recordEdit(e,t,i,r){const n=function(e,t,i,r){return{type:"cell-edit",rowIndex:e,field:t,oldValue:i,newValue:r,timestamp:Date.now()}}(e,t,i,r);if(this.#Ln)return void this.#Ln.push(n);const o=gs({undoStack:this.undoStack,redoStack:this.redoStack},n,this.config.maxHistorySize??100);this.undoStack=o.undoStack,this.redoStack=o.redoStack}beginTransaction(){0===this.#Dn&&(this.#Ln=[]),this.#Dn++}endTransaction(){if(0===this.#Dn&&E("TBW112","No transaction in progress. Call beginTransaction() first."),this.#Dn--,this.#Dn>0)return;const e=this.#Ln;if(this.#Ln=null,!e||0===e.length)return;const t=1===e.length?e[0]:{type:"compound",actions:e,timestamp:Date.now()};const i=gs({undoStack:this.undoStack,redoStack:this.redoStack},t,this.config.maxHistorySize??100);this.undoStack=i.undoStack,this.redoStack=i.redoStack}undo(){const e=ps({undoStack:this.undoStack,redoStack:this.redoStack});return e.action&&(this.#Hn(e.action,"undo"),this.undoStack=e.newState.undoStack,this.redoStack=e.newState.redoStack,this.#Gn(e.action),this.requestRenderWithFocus()),e.action}redo(){const e=fs({undoStack:this.undoStack,redoStack:this.redoStack});return e.action&&(this.#Hn(e.action,"redo"),this.undoStack=e.newState.undoStack,this.redoStack=e.newState.redoStack,this.#Gn(e.action),this.requestRenderWithFocus()),e.action}canUndo(){return{undoStack:this.undoStack,redoStack:this.redoStack}.undoStack.length>0}canRedo(){return{undoStack:this.undoStack,redoStack:this.redoStack}.redoStack.length>0}clearHistory(){const e={undoStack:[],redoStack:[]};this.undoStack=e.undoStack,this.redoStack=e.redoStack,this.#Ln=null,this.#Dn=0}getUndoStack(){return[...this.undoStack]}getRedoStack(){return[...this.redoStack]}};we("undoRedo",e=>new ms("boolean"==typeof e?{}:e??{}));var ws=class e extends Y{static dependencies=[{name:"shell",required:!0,reason:"VisibilityPlugin renders its column list in a shell tool panel"},{name:"reorder",required:!1,reason:"Enables drag-to-reorder columns in visibility panel"}];static manifest={queries:[{type:"getContextMenuItems",description:'Contributes "Hide column" item to the header context menu'}]};name="visibility";static PANEL_ID="columns";styles='@layer tbw-plugins{.tbw-visibility-content{flex-direction:column;height:100%;display:flex}.tbw-visibility-list{padding:var(--tbw-panel-padding,var(--tbw-spacing-md,.5rem));flex:1;overflow-y:auto}.tbw-visibility-row{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));padding:var(--tbw-menu-item-padding,.375rem .25rem);cursor:pointer;font-size:var(--tbw-font-size-sm,.8125rem);border-radius:var(--tbw-border-radius,.25rem);display:flex;position:relative}.tbw-visibility-row:hover{background:var(--tbw-visibility-hover,var(--tbw-color-row-hover))}.tbw-visibility-row input[type=checkbox]{cursor:pointer}.tbw-visibility-row.locked span{color:var(--tbw-color-fg-muted)}.tbw-visibility-handle{cursor:grab;color:var(--tbw-color-fg-muted);font-size:var(--tbw-font-size-2xs,.625rem);letter-spacing:-2px;-webkit-user-select:none;user-select:none;flex-shrink:0}.tbw-visibility-row.reorderable:hover .tbw-visibility-handle{color:var(--tbw-color-fg)}.tbw-visibility-label{align-items:center;gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem));cursor:pointer;flex:1;display:flex}.tbw-visibility-row.dragging{opacity:.5;cursor:grabbing}.tbw-visibility-row.drop-before:before{content:"";background:var(--tbw-visibility-indicator,var(--tbw-color-accent));height:2px;position:absolute;top:0;left:0;right:0}.tbw-visibility-row.drop-after:after{content:"";background:var(--tbw-visibility-indicator,var(--tbw-color-accent));height:2px;position:absolute;bottom:0;left:0;right:0}.tbw-visibility-show-all{margin:var(--tbw-panel-padding,var(--tbw-spacing-md,.5rem));padding:var(--tbw-button-padding,.5rem .75rem);border:1px solid var(--tbw-visibility-border,var(--tbw-color-border));border-radius:var(--tbw-border-radius,.25rem);background:var(--tbw-visibility-btn-bg,var(--tbw-color-header-bg));color:var(--tbw-color-fg);cursor:pointer;font-size:var(--tbw-font-size-sm,.8125rem)}.tbw-visibility-show-all:hover{background:var(--tbw-visibility-hover,var(--tbw-color-row-hover))}.tbw-visibility-group-header{padding:var(--tbw-menu-item-padding,.375rem .25rem);font-size:var(--tbw-font-size-sm,.8125rem);color:var(--tbw-color-fg);border-bottom:1px solid var(--tbw-color-border);margin-top:var(--tbw-spacing-sm,.25rem);align-items:center;font-weight:600;display:flex;position:relative}.tbw-visibility-group-header:first-child{margin-top:0}.tbw-visibility-group-header .tbw-visibility-label{gap:var(--tbw-panel-gap,var(--tbw-spacing-md,.5rem))}.tbw-visibility-group-header.reorderable{cursor:grab}.tbw-visibility-group-header.reorderable:hover{background:var(--tbw-visibility-hover,var(--tbw-color-row-hover))}.tbw-visibility-group-header .tbw-visibility-handle{cursor:grab;color:var(--tbw-color-fg-muted);font-size:var(--tbw-font-size-2xs,.625rem);letter-spacing:-2px;-webkit-user-select:none;user-select:none;flex-shrink:0}.tbw-visibility-group-header.reorderable:hover .tbw-visibility-handle{color:var(--tbw-color-fg)}@media (hover:none){.tbw-visibility-row.reorderable .tbw-visibility-handle,.tbw-visibility-group-header.reorderable .tbw-visibility-handle{color:var(--tbw-color-fg)}}@media (pointer:coarse){.tbw-visibility-handle{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px);justify-content:center;align-items:center;display:inline-flex}}.tbw-visibility-group-header.dragging{opacity:.5;cursor:grabbing}.tbw-visibility-group-header.drop-before:before{content:"";background:var(--tbw-visibility-indicator,var(--tbw-color-accent));height:2px;position:absolute;top:0;left:0;right:0}.tbw-visibility-group-header.drop-after:after{content:"";background:var(--tbw-visibility-indicator,var(--tbw-color-accent));height:2px;position:absolute;bottom:0;left:0;right:0}.tbw-visibility-row--grouped{padding-left:calc(var(--tbw-panel-padding,var(--tbw-spacing-md,.5rem)) + .75rem)}.tbw-visibility-move-menu{background:var(--tbw-color-panel-bg,light-dark(#fff,#1e1e1e));min-width:10rem;color:var(--tbw-color-panel-fg,light-dark(#1a1a1a,#eaeaea));border:1px solid var(--tbw-color-border,light-dark(#d0d0d0,#3a3a3a));border-radius:var(--tbw-border-radius,.25rem);box-shadow:var(--tbw-shadow-panel,0 4px 12px light-dark(#0003,#00000080));font:inherit;z-index:10001;flex-direction:column;margin:0;padding:4px;display:flex;position:fixed}.tbw-visibility-move-menu[hidden]{display:none}.tbw-visibility-move-menu-item{min-height:var(--tbw-touch-target-min,24px);text-align:start;color:inherit;font:inherit;border-radius:min(var(--tbw-border-radius,.25rem), 6px);cursor:pointer;background:0 0;border:0;padding:4px 8px}.tbw-visibility-move-menu-item:hover:not(:disabled){background:var(--tbw-color-row-hover,light-dark(#00000010,#ffffff14))}.tbw-visibility-move-menu-item:disabled{opacity:.5;cursor:default}}';get defaultConfig(){return{}}columnListElement=null;isDragging=!1;draggedField=null;draggedIndex=null;dropIndex=null;draggedGroupId=null;draggedGroupFields=[];moveMenu=null;clearDragClasses(e){e.querySelectorAll(".tbw-visibility-row, .tbw-visibility-group-header").forEach(e=>{e.classList.remove(Ge.DRAGGING,"drop-target","drop-before","drop-after")})}attach(e){super.attach(e),this.gridElement.addEventListener("column-move",()=>{this.columnListElement&&requestAnimationFrame(()=>{this.columnListElement&&this.rebuildToggles(this.columnListElement)})},{signal:this.disconnectSignal})}detach(){this.columnListElement=null,this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.moveMenu?.dispose(),this.moveMenu=null}processColumns(e){for(const t of e){const e=t.__element;e&&(void 0===t.hidden&&e.hasAttribute("hidden")&&"false"!==e.getAttribute("hidden")&&(t.hidden=!0),void 0===t.lockVisible&&e.hasAttribute("lock-visible")&&"false"!==e.getAttribute("lock-visible")&&(t.lockVisible=!0))}return e}handleQuery(e){if("getContextMenuItems"===e.type){const t=e.context;if(!t.isHeader)return;const i=t.column;if(!i?.field)return;if(i.lockVisible||i.meta?.lockVisibility)return;return[{id:"visibility/hide-column",label:this.t("columns.hideColumn","Hide Column"),icon:"👁",order:30,action:()=>this.hideColumn(i.field)}]}}getToolPanel(){return{id:e.PANEL_ID,title:this.t("columns.panelTitle","Columns"),icon:"☰",tooltip:"Column visibility",order:100,render:e=>this.renderPanelContent(e)}}#rt(){return this.grid.getPluginByName("shell")}show(){this.#rt()?.openToolPanel(e.PANEL_ID)}hide(){this.#rt()?.closeToolPanel()}toggle(){const t=this.#rt();t?.isToolPanelOpen||t?.openToolPanel(),t?.toggleToolPanelSection(e.PANEL_ID)}isColumnVisible(e){return this.grid.isColumnVisible(e)}setColumnVisible(e,t){this.grid.setColumnVisible(e,t)}getVisibleColumns(){return this.grid.getAllColumns().filter(e=>e.visible).map(e=>e.field)}getHiddenColumns(){return this.grid.getAllColumns().filter(e=>!e.visible).map(e=>e.field)}showAll(){this.grid.showAllColumns()}toggleColumn(e){this.grid.toggleColumnVisibility(e)}showColumn(e){this.setColumnVisible(e,!0)}hideColumn(e){this.setColumnVisible(e,!1)}getAllColumns(){return this.grid.getAllColumns()}isPanelVisible(){const t=this.#rt();return!!t?.isToolPanelOpen&&t.expandedToolPanelSections.includes(e.PANEL_ID)}renderPanelContent(e){const t=document.createElement("div");t.className="tbw-visibility-content";const i=document.createElement("div");i.className="tbw-visibility-list",t.appendChild(i);const r=document.createElement("button");return r.type="button",r.className="tbw-visibility-show-all",r.textContent=this.t("columns.showAll","Show All"),r.addEventListener("click",()=>{this.grid.showAllColumns(),this.rebuildToggles(i)}),t.appendChild(r),this.columnListElement=i,this.rebuildToggles(i),e.appendChild(t),()=>{this.columnListElement=null,this.moveMenu?.close(),t.remove()}}hasReorderPlugin(){const e=this.grid?.getPluginByName?.("reorder");return!(!e||"function"!=typeof e.moveColumn)}canMoveColumn(e){const t=this.grid.columns.find(t=>t.field===e.field);if(!t)return!1;const i=this.grid.query("canMoveColumn",t);return i.length>0&&!i.includes(!1)}rebuildToggles(e){const t=this.hasReorderPlugin();e.innerHTML="";const i=this.grid.getAllColumns().filter(e=>!e.utility),r=this.currentFragments();if(r.every(e=>!e.group))this.renderFlatColumnList(i,t,e);else for(const n of r)if(n.group)this.renderGroupSection(n.group,n.columns,t,e);else{const r=i.indexOf(n.columns[0]);e.appendChild(this.createColumnRow(n.columns[0],r,t,e))}}currentFragments(){const e=this.grid.getAllColumns().filter(e=>!e.utility),t=this.grid.query("getColumnGrouping")?.flat().filter(e=>e&&e.fields.length>0)??[];if(0===t.length)return e.map(e=>({group:null,columns:[e]}));const i=/* @__PURE__ */new Map;for(const r of t)for(const e of r.fields)i.set(e,r);return this.computeFragments(e,i)}computeFragments(e,t){const i=[];let r=null,n=[];for(const o of e){const e=t.get(o.field)??null;e&&r&&e.id===r.id?n.push(o):(n.length>0&&i.push({group:r,columns:n}),r=e,n=[o])}return n.length>0&&i.push({group:r,columns:n}),i}renderGroupSection(e,t,i,r){const n=t.map(e=>e.field),o=document.createElement("div");o.className="tbw-visibility-group-header",o.setAttribute("data-group-id",e.id),i&&(o.draggable=!0,o.classList.add("reorderable"),this.setupGroupDragListeners(o,e,n,r));const s=document.createElement("label");s.className="tbw-visibility-label";const l=document.createElement("input");l.type="checkbox";const a=t.filter(e=>e.visible).length,d=t.every(e=>e.lockVisible);a===t.length?(l.checked=!0,l.indeterminate=!1):0===a?(l.checked=!1,l.indeterminate=!1):(l.checked=!1,l.indeterminate=!0),l.disabled=d,l.addEventListener("change",()=>{const e=l.checked;for(const i of t)i.lockVisible||this.grid.setColumnVisible(i.field,e);setTimeout(()=>this.rebuildToggles(r),0)});const c=document.createElement("span");if(c.textContent=e.label,s.appendChild(l),s.appendChild(c),o.appendChild(s),i){const t=document.createElement("span");t.className="tbw-visibility-handle",this.setIcon(t,"dragHandle"),t.title=this.t("columns.dragGroupHandle","Drag to reorder group, or click for move options"),this.wireMoveHandle(t,e.label,()=>this.groupMoveActions(n)),o.insertBefore(t,s)}r.appendChild(o);const u=this.grid.getAllColumns().filter(e=>!e.utility);for(const h of t){const e=u.findIndex(e=>e.field===h.field),t=this.createColumnRow(h,e,i,r);t.classList.add("tbw-visibility-row--grouped"),r.appendChild(t)}}renderFlatColumnList(e,t,i){const r=this.grid.getAllColumns().filter(e=>!e.utility);for(const n of e){const e=r.findIndex(e=>e.field===n.field);i.appendChild(this.createColumnRow(n,e,t,i))}}createColumnRow(e,t,i,r){const n=e.header||e.field,o=document.createElement("div");o.className=e.lockVisible?"tbw-visibility-row locked":"tbw-visibility-row",o.setAttribute("data-field",e.field),o.setAttribute("data-index",String(t)),i&&this.canMoveColumn(e)&&(o.draggable=!0,o.classList.add("reorderable"),this.setupDragListeners(o,e.field,t,r));const s=document.createElement("label");s.className="tbw-visibility-label";const l=document.createElement("input");l.type="checkbox",l.checked=e.visible,l.disabled=e.lockVisible??!1,l.addEventListener("change",()=>{this.grid.toggleColumnVisibility(e.field),setTimeout(()=>this.rebuildToggles(r),0)});const a=document.createElement("span");if(a.textContent=n,s.appendChild(l),s.appendChild(a),i&&this.canMoveColumn(e)){const t=document.createElement("span");t.className="tbw-visibility-handle",this.setIcon(t,"dragHandle"),t.title=this.t("columns.dragHandle","Drag to reorder, or click for move options"),this.wireMoveHandle(t,n,()=>this.columnMoveActions(e.field)),o.appendChild(t)}return o.appendChild(s),o}wireMoveHandle(e,t,i){e.setAttribute("role","button"),e.tabIndex=-1,e.setAttribute("aria-label",`${t} — ${this.t("columns.moveHandleHint","drag, or activate for move options")}`),e.addEventListener("click",()=>{this.moveMenu??=dr("tbw-visibility-move-menu","tbw-visibility-move-menu"),this.moveMenu.open(e,t,i())})}requestColumnMove(e,t,i){const r=i>t?i-1:i;if(r===t)return;const n=this.grid.getAllColumns(),o=n.filter(e=>!e.utility)[r]?.field,s=o?n.findIndex(e=>e.field===o):n.length;this.emit("column-reorder-request",{field:e,fromIndex:t,toIndex:s})}columnMoveActions(e){const t=this.grid.getAllColumns().filter(e=>!e.utility),i=t.findIndex(t=>t.field===e),r=e=>e>=0&&e<t.length&&this.canMoveColumn(t[e]);return[{label:this.t("columns.moveUp","Move up"),disabled:!r(i-1),run:()=>this.requestColumnMove(e,i,i-1)},{label:this.t("columns.moveDown","Move down"),disabled:!r(i+1),run:()=>this.requestColumnMove(e,i,i+2)},{label:this.t("columns.moveToTop","Move to top"),disabled:i<=0||!r(0),run:()=>this.requestColumnMove(e,i,0)},{label:this.t("columns.moveToBottom","Move to bottom"),disabled:i<0||i>=t.length-1||!r(t.length-1),run:()=>this.requestColumnMove(e,i,t.length)}]}groupMoveActions(e){const t=this.currentFragments(),i=t.findIndex(t=>t.columns[0]?.field===e[0]),r=e=>t[e].columns.map(e=>e.field),n=i<=0,o=i<0||i>=t.length-1;return[{label:this.t("columns.moveUp","Move up"),disabled:n,run:()=>this.executeGroupDrop(e,r(i-1),!0)},{label:this.t("columns.moveDown","Move down"),disabled:o,run:()=>this.executeGroupDrop(e,r(i+1),!1)},{label:this.t("columns.moveToTop","Move to top"),disabled:n,run:()=>this.executeGroupDrop(e,r(0),!0)},{label:this.t("columns.moveToBottom","Move to bottom"),disabled:o,run:()=>this.executeGroupDrop(e,r(t.length-1),!1)}]}setupGroupDragListeners(e,t,i,r){e.addEventListener("dragstart",n=>{this.isDragging=!0,this.draggedGroupId=t.id,this.draggedGroupFields=[...i],this.draggedField=null,this.draggedIndex=null,n.dataTransfer&&(n.dataTransfer.effectAllowed="move",n.dataTransfer.setData("text/plain",`group:${t.id}`)),e.classList.add(Ge.DRAGGING),r.querySelectorAll(".tbw-visibility-row--grouped").forEach(e=>{const t=e.getAttribute("data-field");t&&this.draggedGroupFields.includes(t)&&e.classList.add(Ge.DRAGGING)})}),e.addEventListener("dragend",()=>{this.isDragging=!1,this.draggedGroupId=null,this.draggedGroupFields=[],this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.clearDragClasses(r)}),e.addEventListener("dragover",t=>{if(t.preventDefault(),!this.isDragging)return;if(this.draggedGroupFields.length===i.length&&this.draggedGroupFields.every(e=>i.includes(e)))return;if(!this.draggedGroupId)return;const n=e.getBoundingClientRect(),o=n.top+n.height/2,s=t.clientY<o;this.clearDragClasses(r),e.classList.add("drop-target"),e.classList.toggle("drop-before",s),e.classList.toggle("drop-after",!s)}),e.addEventListener("dragleave",()=>{e.classList.remove("drop-target","drop-before","drop-after")}),e.addEventListener("drop",t=>{if(t.preventDefault(),!this.isDragging||!this.draggedGroupId)return;if(this.draggedGroupFields.length===i.length&&this.draggedGroupFields.every(e=>i.includes(e)))return;const r=e.getBoundingClientRect(),n=t.clientY<r.top+r.height/2;this.executeGroupDrop(this.draggedGroupFields,i,n)})}executeGroupDrop(e,t,i){const r=this.grid.getAllColumns().map(e=>e.field),n=r.filter(t=>!e.includes(t)),o=i?t[0]:t[t.length-1],s=n.indexOf(o);if(-1===s)return;const l=i?s:s+1,a=r.filter(t=>e.includes(t));n.splice(l,0,...a);const d=this.grid.getPluginByName?.("reorder");d?.setColumnOrder&&d.gridElement?d.setColumnOrder(n):this.grid.setColumnOrder(n),requestAnimationFrame(()=>{this.columnListElement&&this.rebuildToggles(this.columnListElement)})}setupDragListeners(e,t,i,r){e.addEventListener("dragstart",r=>{this.isDragging=!0,this.draggedField=t,this.draggedIndex=i,this.draggedGroupId=null,this.draggedGroupFields=[],r.dataTransfer&&(r.dataTransfer.effectAllowed="move",r.dataTransfer.setData("text/plain",t)),e.classList.add(Ge.DRAGGING)}),e.addEventListener("dragend",()=>{this.isDragging=!1,this.draggedField=null,this.draggedIndex=null,this.dropIndex=null,this.clearDragClasses(r)}),e.addEventListener("dragover",n=>{if(n.preventDefault(),!this.isDragging)return;if(this.draggedGroupId){if(e.classList.contains("tbw-visibility-row--grouped"))return}else if(this.draggedField===t)return;const o=e.getBoundingClientRect(),s=o.top+o.height/2;this.dropIndex=n.clientY<s?i:i+1,this.clearDragClasses(r),this.draggedGroupId?(r.querySelector(`.tbw-visibility-group-header[data-group-id="${this.draggedGroupId}"]`)?.classList.add(Ge.DRAGGING),r.querySelectorAll(".tbw-visibility-row--grouped").forEach(e=>{const t=e.getAttribute("data-field");t&&this.draggedGroupFields.includes(t)&&e.classList.add(Ge.DRAGGING)})):this.draggedField&&r.querySelector(`.tbw-visibility-row[data-field="${this.draggedField}"]`)?.classList.add(Ge.DRAGGING),e.classList.add("drop-target"),e.classList.toggle("drop-before",n.clientY<s),e.classList.toggle("drop-after",n.clientY>=s)}),e.addEventListener("dragleave",()=>{e.classList.remove("drop-target","drop-before","drop-after")}),e.addEventListener("drop",i=>{if(i.preventDefault(),!this.isDragging)return;if(this.draggedGroupId&&this.draggedGroupFields.length>0){if(e.classList.contains("tbw-visibility-row--grouped"))return;const r=e.getBoundingClientRect(),n=i.clientY<r.top+r.height/2;return void this.executeGroupDrop(this.draggedGroupFields,[t],n)}const r=this.draggedField,n=this.draggedIndex,o=this.dropIndex;if(null===r||null===n||null===o)return;const s=o>n?o-1:o;if(s!==n){const e=this.grid.getAllColumns(),t=e.filter(e=>!e.utility)[s]?.field,i={field:r,fromIndex:n,toIndex:t?e.findIndex(e=>e.field===t):e.length};this.emit("column-reorder-request",i)}})}};function bs(e){return e.charAt(0).toUpperCase()+e.slice(1)}function vs(e){return"id"===e.toLowerCase()?"ID":e.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/[_-]/g," ").split(" ").filter(Boolean).map(bs).join(" ")}we("visibility",e=>new ws("boolean"==typeof e?{}:e??{}));var ys=/* @__PURE__ */new Set(["string","number","boolean","date","datetime","currency"]);function Cs(e){const t=e.lastIndexOf(":");if(t>0){const i=e.slice(t+1).toLowerCase();if(ys.has(i)){const r=e.slice(0,t);return{field:r,header:vs(r),type:i}}}return{field:e,header:vs(e)}}function xs(e){return e.map(e=>"string"==typeof e?Cs(e):e)}function Rs(e,t){return t?e.map(e=>({...t,...e})):e}function Ss(e){return e.some(e=>"string"==typeof e)}var Es={STRETCH:"stretch",FIXED:"fixed"},As={AUTO:"auto",MERGE:"merge"};function _s(e,t){if(!(e&&e.length||t&&t.length))return[];if(!e||!e.length)return t||[];if(!t||!t.length)return e;const i={},r=t;for(let s=0;s<r.length;s++){const e=r[s],t=i[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.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.__headerTemplate&&(t.__headerTemplate=e.__headerTemplate),e.__element&&!t.__element&&(t.__element=e.__element);const i=e.renderer||e.viewRenderer,r=t.renderer||t.viewRenderer;i&&!r&&(t.viewRenderer=i,e.renderer&&(t.renderer=i)),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 i[e.field]={...e}}const n=e.map(e=>{const t=i[e.field];if(!t)return e;const r={...e};t.header&&!r.header&&(r.header=t.header),t.type&&!r.type&&(r.type=t.type),r.sortable=e.sortable||t.sortable,!0!==e.resizable&&!0!==t.resizable||(r.resizable=!0),null!=t.width&&null==r.width&&(r.width=t.width),null!=t.minWidth&&null==r.minWidth&&(r.minWidth=t.minWidth),t.__viewTemplate&&(r.__viewTemplate=t.__viewTemplate),t.__headerTemplate&&(r.__headerTemplate=t.__headerTemplate),t.__element&&!r.__element&&(r.__element=t.__element);const n=t.renderer||t.viewRenderer,o=r.renderer||r.viewRenderer;return n&&!o&&(r.viewRenderer=n,t.renderer&&(r.renderer=n)),t.editor&&!r.editor&&(r.editor=t.editor),r.headerRenderer||r.headerLabelRenderer||(t.headerRenderer?r.headerRenderer=t.headerRenderer:t.headerLabelRenderer&&(r.headerLabelRenderer=t.headerLabelRenderer)),delete i[e.field],r}),o=Object.keys(i);for(let s=0;s<o.length;s++)n.push(i[o[s]]);return n}function ks(e,t){try{e.part?.add?.(t)}catch{}const i=e.getAttribute("part");i?i.split(/\s+/).includes(t)||e.setAttribute("part",i+" "+t):e.setAttribute("part",t)}function Ts(e){const t=e.effectiveConfig?.fitMode||e.fitMode||Es.STRETCH;if(t!==Es.STRETCH&&t!==Es.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 o=0;o<n.length;o++){const t=n[o];if(t.width)continue;const s=i[o];let l=s?s.scrollWidth:0;for(let i=0;i<e._rowPool.length;i++){const t=e._rowPool[i].children[o];if(t){const e=t.scrollWidth;e>l&&(l=e)}}l>0&&(t.width=l+2,t.__autoSized=!0,r=!0)}r&&Ls(e),e.__didInitialAutoSize=!0}var Ms=/^(?:\d+(?:\.\d+)?(?:px|%|fr|em|rem|ch|vw|vh|vmin|vmax)|calc\(.+\)|min-content|max-content|minmax\(.+\)|fit-content\(.+\)|auto)$/i;function Is(e,t){return"number"==typeof e?`${e}px`:(Ms.test(e)||A("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 Ls(e){(e.effectiveConfig?.fitMode||e.fitMode||Es.STRETCH)===Es.STRETCH?e._gridTemplate=e._visibleColumns.map(e=>{if(null!=e.width)return Is(e.width,e.field);const t=e.minWidth;return null!=t?`minmax(${t}px, 1fr)`:"1fr"}).join(" ").trim():e._gridTemplate=e._visibleColumns.map(e=>null!=e.width?Is(e.width,e.field):"max-content").join(" "),e.style.setProperty("--tbw-column-template",e._gridTemplate)}function Ds(e,t){return!1!==e.effectiveConfig?.sortable&&!0===t.sortable}function Ps(e,t){return!1!==e.effectiveConfig?.resizable&&!1!==t.resizable}function Fs(e,t){const i=document.createElement("span");ks(i,"sort-indicator"),i.setAttribute("aria-hidden","true");const r=e._sortState?.field===t.field?e._sortState.direction:0,n=1===r?"sortAsc":-1===r?"sortDesc":"sortNone";i.dataset.icon=U(n);const o=e.icons?.[n];return void 0!==o&&function(e,t){"string"==typeof t?q(e,t):t instanceof HTMLElement&&e.replaceChildren(t.cloneNode(!0))}(i,o),i}function Hs(e,t,i){const r=document.createElement("div");r.className="resize-handle",r.setAttribute("role","button"),r.setAttribute("tabindex","-1");const n=e._visibleColumns[t];return r.setAttribute("aria-label",`Width of column ${String(n?.header??n?.field??t+1)}`),r.addEventListener("pointerdown",n=>{0!==n.button&&"mouse"===n.pointerType||(n.stopPropagation(),n.preventDefault(),e._resizeController.start(n,t,i,r))}),r.addEventListener("dblclick",i=>{i.stopPropagation(),i.preventDefault(),e._resizeController.resetColumn(t)}),r}function Gs(e,t,i,r){r.classList.add(Ge.SORTABLE),r.tabIndex=0;const n=e._sortState?.field===t.field?e._sortState.direction:0;r.setAttribute("aria-sort",0===n?"none":1===n?"ascending":"descending"),r.addEventListener("click",i=>{e._resizeController?.isResizing||e._dispatchHeaderClick?.(i,t,r)||Pn(e,t)}),r.addEventListener("keydown",i=>{if("Enter"===i.key||" "===i.key){if(i.preventDefault(),e._dispatchHeaderClick?.(i,t,r))return;Pn(e,t)}})}function zs(e){e._headerRowEl=e.findHeaderRow();const t=e._headerRowEl;t&&(t.innerHTML="",e._visibleColumns.forEach((i,r)=>{const n=document.createElement("div");n.className="cell",ks(n,"header-cell"),n.setAttribute("role","columnheader"),n.setAttribute("aria-colindex",String(r+1)),n.setAttribute("data-field",i.field),n.setAttribute("data-col",String(r)),i.type&&n.setAttribute("data-type",i.type);const o=i.header??i.field,s=e._sortState?.field===i.field?e._sortState.direction:0,l=1===s?"asc":-1===s?"desc":null;if(i.headerRenderer){const t={column:i,value:o,sortState:l,filterActive:!1,cellEl:n,renderSortIcon:()=>Ds(e,i)?Fs(e,i):null,renderFilterButton:()=>null};!function(e,t){null!=t&&("string"==typeof t?e.appendChild(N(t)):t instanceof Node&&e.appendChild(t))}(n,i.headerRenderer(t)),Ds(e,i)&&Gs(e,i,0,n),Ps(e,i)&&(n.classList.add("resizable"),n.appendChild(Hs(e,r,n)))}else if(i.headerLabelRenderer){const t={column:i,value:o},s=i.headerLabelRenderer(t),l=document.createElement("span");null==s?l.textContent=o:"string"==typeof s?q(l,s):s instanceof Node&&l.appendChild(s),n.appendChild(l),Ds(e,i)&&(Gs(e,i,0,n),n.appendChild(Fs(e,i))),Ps(e,i)&&(n.classList.add("resizable"),n.appendChild(Hs(e,r,n)))}else if(i.__headerTemplate)Array.from(i.__headerTemplate.childNodes).forEach(e=>n.appendChild(e.cloneNode(!0))),Ds(e,i)&&(Gs(e,i,0,n),n.appendChild(Fs(e,i))),Ps(e,i)&&(n.classList.add("resizable"),n.appendChild(Hs(e,r,n)));else{const t=document.createElement("span");t.textContent=o,n.appendChild(t),n.setAttribute("aria-label",o),Ds(e,i)&&(Gs(e,i,0,n),n.appendChild(Fs(e,i))),Ps(e,i)&&(n.classList.add("resizable"),n.appendChild(Hs(e,r,n)))}t.appendChild(n)}),t.querySelectorAll(`.cell.${Ge.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 Os(e,t){if(t&&t.length){const e={};return t.forEach(t=>{t.type&&(e[t.field]=t.type)}),{columns:t,typeMap:e}}const i=e[0]||{},r=Object.keys(i).map(e=>{const t=i[e],r=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:r}}),n={};return r.forEach(e=>{n[e.field]=e.type||"string"}),{columns:r,typeMap:n}}var Ns={STYLE:1,VIRTUALIZATION:2,HEADER:3,ROWS:4,COLUMNS:5,FULL:6},qs=class{#qn;#$n=0;#Wn=0;#Bn=null;#Vn=null;#Kn=null;#jn=!1;constructor(e){this.#qn=e}requestPhase(e,t){e>this.#$n&&(this.#$n=e),0===this.#Wn&&(this.#Un(),this.#Wn=requestAnimationFrame(()=>this.#Yn()))}whenReady(){return this.#Bn?this.#Bn:Promise.resolve()}setInitialReadyResolver(e){this.#Kn=e}cancel(){0!==this.#Wn&&(cancelAnimationFrame(this.#Wn),this.#Wn=0),this.#$n=0,this.#Vn&&(this.#Vn(),this.#Vn=null,this.#Bn=null)}get isPending(){return 0!==this.#$n}get pendingPhase(){return this.#$n}#Un(){this.#Bn||(this.#Bn=new Promise(e=>{this.#Vn=e}))}#Yn(){if(this.#Wn=0,!this.#qn._schedulerIsConnected)return this.#$n=0,void(this.#Vn&&(this.#Vn(),this.#Vn=null,this.#Bn=null));const e=this.#$n;this.#$n=0,e>=Ns.COLUMNS&&this.#qn._schedulerMergeConfig(),e>=Ns.ROWS&&this.#qn._schedulerProcessRows(),e>=Ns.COLUMNS&&(this.#qn._schedulerProcessColumns(),this.#qn._schedulerUpdateTemplate()),e>=Ns.HEADER&&this.#qn._schedulerRenderHeader(),e>=Ns.VIRTUALIZATION&&this.#qn.refreshVirtualWindow(!0,!0),e>=Ns.STYLE&&this.#qn._schedulerAfterRender();const t=!this.#jn;t&&(this.#jn=!0,this.#Kn?.()),this.#Vn&&(this.#Vn(),this.#Vn=null,this.#Bn=null),0!==e&&this.#Zn(e,t)}#Zn(e,t){const i=this.#qn._virtualization,r=i?.enabled?{start:i.start,end:i.end}:null,n={phase:e,initial:t,rowCount:this.#qn._rows?.length??0,visibleRange:r};this.#qn._hostElement.dispatchEvent(new CustomEvent("render",{detail:n,bubbles:!0,composed:!0}))}},$s="--tbw-row-height",Ws=/* @__PURE__ */new Set(["field","header","order","group","hidden","utility"]);var Bs=class{#Xn;#Qn;#Jn;#eo;#to;#io;#ro;#no={};#oo={};#so=!0;#lo;#ao;#do;#co;#qn;#uo=!1;constructor(e){this.#qn=e}get original(){return this.#no}get effective(){return this.#oo}get columns(){return this.#oo.columns??[]}set columns(e){this.#oo.columns=e}get lightDomColumnsCache(){return this.#to}set lightDomColumnsCache(e){this.#to=e}get originalColumnNodes(){return this.#ro}set originalColumnNodes(e){this.#ro=e}get initialColumnState(){return this.#co}set initialColumnState(e){this.#co=e}get sourcesChanged(){return this.#so}markSourcesChanged(){this.#so=!0}setGridConfig(e){this.#Xn!==e&&(this.#Xn=e,this.#so=!0,this.#to=void 0)}getGridConfig(){return this.#Xn}setColumns(e){this.#Qn=e,this.#so=!0}getColumns(){return this.#Qn}setFitMode(e){this.#Jn=e,this.#so=!0}getFitMode(){return this.#Jn}setColumnInference(e){this.#eo!==e&&(this.#eo=e,this.#so=!0)}getColumnInference(){return this.#eo}merge(){const e=(this.#oo.columns?.length??0)>0;if(!this.#so&&e)return;const t=this.#ho();this.#so=!1,this.#no=t,Object.freeze(this.#no),this.#no.columns&&Object.freeze(this.#no.columns),this.#oo=this.#go(this.#no),this.#po()}#go(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}#po(){const e=this.#oo;"number"==typeof e.rowHeight&&e.rowHeight>0?(this.#qn._virtualization.rowHeight=e.rowHeight,this.#qn.style.setProperty($s,`${e.rowHeight}px`),this.#uo=!0):this.#uo&&(this.#qn.style.removeProperty($s),this.#uo=!1),"fixed"===e.fitMode&&this.columns.forEach(e=>{null==e.width&&(e.width="number"==typeof e.minWidth&&Number.isFinite(e.minWidth)&&e.minWidth>0?e.minWidth:80)}),this.#qn._applyAnimationConfig(e)}#ho(){const e=this.#Xn?{...this.#Xn}:{},t=Array.isArray(e.columns)?[...e.columns]:[],i=(this.#to??[]).map(e=>({...e}));let r=_s(t,i);this.#Qn&&this.#Qn.length&&(r=_s(this.#Qn,i));const n=this.#qn.sourceRows;if("merge"===(this.#eo??e.columnInference??"auto")&&n.length){r=function(e,t){if(!t.length)return e;const i=/* @__PURE__ */new Map;for(const o of t)i.set(o.field,o);const r=new Set(e.map(e=>e.field)),n=e.map(e=>{const t=i.get(e.field);if(!t)return e;const r={...e};for(const[i,n]of Object.entries(t))void 0!==n&&Object.assign(r,{[i]:n});return r});for(const o of t)r.has(o.field)||n.push(o);return n}(Os(n).columns,r)}else 0===r.length&&n.length&&(r=Os(n).columns);if(this.#io&&Object.keys(this.#io).length>0){const t={...this.#io},i=e.typeDefaults??{};for(const e of Object.keys(i)){const r=i[e],n=t[e];t[e]=n?{...n,...r}:r}e.typeDefaults=t}return r.length&&(!function(e){const t=[],i=[];for(const o of e)"number"==typeof o.order&&Number.isFinite(o.order)&&o.order>=0?t.push({col:o,order:Math.floor(o.order)}):i.push(o);if(0===t.length)return e;t.sort((e,t)=>e.order-t.order);const r=[];let n=0;for(const{col:o,order:s}of t){for(;r.length<s&&n<i.length;)r.push(i[n++]);const e=Math.min(s,r.length);r.splice(e,0,o)}for(;n<i.length;)r.push(i[n++]);e.length=0,e.push(...r)}(r),e.typeDefaults&&function(e,t){for(const i of e){const e=i.type?t[i.type]:void 0;if(e)for(const t of Object.keys(e)){if(Ws.has(t))continue;const r=Reflect.get(e,t);void 0!==r&&null==Reflect.get(i,t)&&("renderer"!==t&&"viewRenderer"!==t||null==i.renderer&&null==i.viewRenderer)&&Reflect.set(i,t,r)}}}(r,e.typeDefaults),r.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)}),r.forEach(e=>{e.__viewTemplate&&!e.__compiledView&&(e.__compiledView=j(e.__viewTemplate.innerHTML)),e.__editorTemplate&&!e.__compiledEditor&&(e.__compiledEditor=j(e.__editorTemplate.innerHTML))}),e.columns=r),this.#Jn&&(e.fitMode=this.#Jn),e.fitMode||(e.fitMode="stretch"),this.#eo&&(e.columnInference=this.#eo),this.#qn._pluginManager?.processConfig?.(e),e.columnState&&!this.#co&&(this.#co=e.columnState),e}collectState(e){const t=this.columns,i=this.#fo();return{columns:t.map((t,r)=>{const n={field:t.field,order:r,visible:!t.hidden},o=t;void 0!==o.__renderedWidth?n.width=o.__renderedWidth:void 0!==t.width&&(n.width="string"==typeof t.width?parseFloat(t.width):t.width);const s=i.get(t.field);s&&(n.sort=s);for(const i of e)if(i.getColumnState){const e=i.getColumnState(t.field);e&&Object.assign(n,e)}return n})}}applyState(e,t){if(!e.columns||0===e.columns.length)return;const i=this.columns,r=new Map(e.columns.map(e=>[e.field,e])),n=i.map(e=>{const t=r.get(e.field);if(!t)return e;const i={...e};return void 0!==t.width&&(i.width=t.width,i.__renderedWidth=t.width),void 0!==t.visible&&(i.hidden=!t.visible),i});n.sort((e,t)=>(r.get(e.field)?.order??1/0)-(r.get(t.field)?.order??1/0)),this.columns=n;const o=e.columns.filter(e=>void 0!==e.sort).sort((e,t)=>(e.sort?.priority??0)-(t.sort?.priority??0));if(o.length>0){const e=o[0];e.sort&&(this.#qn._sortState={field:e.field,direction:"asc"===e.sort.direction?1:-1})}else this.#qn._sortState=null;for(const s of t)if(s.applyColumnState)for(const t of e.columns)s.applyColumnState(t.field,t)}resetState(e){this.#co=void 0,this.#qn._sortState=null,this.#oo=this.#go(this.#no),this.#po();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)}#fo(){const e=/* @__PURE__ */new Map,t=this.#qn._sortState;return t&&e.set(t.field,{direction:1===t.direction?"asc":"desc",priority:0}),e}requestStateChange(e){this.#ao&&clearTimeout(this.#ao),this.#ao=setTimeout(()=>{this.#ao=void 0;const t=this.collectState(e);this.#qn._emit("column-state-change",t)},100)}setColumnVisible(e,t){const i=this.columns,r=i.find(t=>t.field===e);return!!r&&(!(!t&&r.lockVisible)&&(!(!t&&0===i.filter(t=>!t.hidden&&t.field!==e).length)&&(!!r.hidden!=!t&&(r.hidden=!t,this.#qn._emit("column-visibility",{field:e,visible:t,visibleColumns:i.filter(e=>!e.hidden).map(e=>e.field)}),this.#qn._clearRowPool(),this.#qn._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.#qn._emit("column-visibility",{visibleColumns:e.map(e=>e.field)}),this.#qn._clearRowPool(),this.#qn._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])),i=[];for(const r of e){const e=t.get(r);e&&(i.push(e),t.delete(r))}for(const r of t.values())i.push(r);this.columns=i,this.#qn._invalidateVisibleColumnsCache(),zs(this.#qn),Ls(this.#qn),this.#qn._requestSchedulerPhase(Ns.COLUMNS,"configManager")}parseLightDomColumns(e){if(this.#to||(this.#ro=Array.from(e.querySelectorAll("tbw-grid-column")),this.#to=this.#ro.length?function(e){return Array.from(e.querySelectorAll("tbw-grid-column")).map(e=>{const t=e.getAttribute("field")||"";if(!t)return null;const i=t.includes(":")?Cs(t):void 0,r={field:i?.field??t,type:e.getAttribute("type")||i?.type||void 0,header:e.getAttribute("header")||i?.header||void 0,sortable:e.hasAttribute("sortable")&&"false"!==e.getAttribute("sortable"),__element:e},n=e.getAttribute("width");if(n){const e=parseFloat(n);!isNaN(e)&&/^\d+(\.\d+)?$/.test(n.trim())?r.width=e:r.width=n}const o=e.getAttribute("minWidth")||e.getAttribute("min-width");if(o){const e=parseFloat(o);isNaN(e)||(r.minWidth=e)}const s=e.getAttribute("order");if(s){const e=parseInt(s,10);Number.isFinite(e)&&e>=0&&(r.order=e)}e.hasAttribute("resizable")&&(r.resizable="false"!==e.getAttribute("resizable"));const l=e.getAttribute("options");l&&(r.options=l.split(",").map(e=>{const[t,i]=e.includes(":")?e.split(":"):[e.trim(),e.trim()];return{value:t.trim(),label:i?.trim()||t.trim()}}));const a=e.querySelector("tbw-grid-column-view"),d=e.querySelector("tbw-grid-column-editor"),c=e.querySelector("tbw-grid-column-header");a&&(r.__viewTemplate=a),c&&(r.__headerTemplate=c);const u=globalThis.DataGridElement?.getAdapters?.()??[],h=a??e,g=u.find(e=>e.canHandle(h));if(g){const e=g.createRenderer(h);e&&(r.viewRenderer=e)}const p=d??e,f=u.find(e=>e.canHandle(p));if(f){const e=f.createEditor(p);e&&(r.editor=e)}const m=u.find(t=>t.canHandle(e)&&(t.createHeaderRenderer||t.createHeaderLabelRenderer));if(m){const t=m.createHeaderRenderer?.(e);t&&(r.headerRenderer=t);const i=m.createHeaderLabelRenderer?.(e);i&&(r.headerLabelRenderer=i)}return r}).filter(e=>!!e)}(e):[]),!this.#io){const t=function(e){const t=globalThis.DataGridElement?.getAdapters?.()??[];return Array.from(e.children).filter(e=>"tbw-grid-type"===e.tagName.toLowerCase()).map(e=>{const i=e.getAttribute("name")?.trim();if(!i)return null;const r=Array.from(e.children).find(e=>"tbw-grid-column-view"===e.tagName.toLowerCase()),n=r??e,o=t.find(e=>e.canHandle(n))?.createRenderer(n),s={};for(const t of Array.from(e.attributes)){if(!t.name.startsWith("data-"))continue;const e=t.name.slice(5).replace(/-([a-z])/g,(e,t)=>t.toUpperCase()).trim();e&&(s[e]=t.value)}return{name:i,params:s,viewTemplate:r,viewRenderer:o}}).filter(e=>null!==e)}(e),i={};for(const e of t){const t={};let r=!1;if(e.viewRenderer)t.renderer=e.viewRenderer,r=!0;else if(e.viewTemplate){const i=j(e.viewTemplate.innerHTML);t.renderer=t=>i({row:t.row,value:t.value,field:t.field,column:t.column,typeDefault:e.params}),r=!0}r&&(i[e.name]=t)}this.#io=i}}clearLightDomCache(){this.#to=void 0,this.#io=void 0}#mo=/* @__PURE__ */new Map;registerLightDomHandler(e,t){this.#mo.set(e.toLowerCase(),t)}unregisterLightDomHandler(e){this.#mo.delete(e.toLowerCase())}observeLightDOM(e){this.#lo&&this.#lo.disconnect();const t=/* @__PURE__ */new Set,i=()=>{this.#do=void 0;for(const e of t)this.#mo.get(e)?.();t.clear()};this.#lo=new MutationObserver(e=>{for(const i of e){for(const e of i.addedNodes){if(e.nodeType!==Node.ELEMENT_NODE)continue;const i=e.tagName.toLowerCase();this.#mo.has(i)&&t.add(i)}for(const e of i.removedNodes){if(e.nodeType!==Node.ELEMENT_NODE)continue;const i=e.tagName.toLowerCase();this.#mo.has(i)&&t.add(i)}if("attributes"===i.type&&i.target.nodeType===Node.ELEMENT_NODE){const e=i.target.tagName.toLowerCase();this.#mo.has(e)&&t.add(e)}}t.size>0&&!this.#do&&(this.#do=setTimeout(i,0))}),this.#lo.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["title","field","header","width","hidden","id","icon","tooltip","order","name","type"]})}dispose(){this.#lo?.disconnect(),this.#ao&&clearTimeout(this.#ao),this.#do&&(clearTimeout(this.#do),this.#do=void 0)}};function Vs(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 Ks(e,t){const i=(t??Vs)(e);if("string"==typeof i){const e=document.createElement("div");return e.className="tbw-empty-message",q(e,i),e}return i}function js(e){e?.remove()}function Us(e,t,i,r,n,o,s,l){if(!e)return;if(!function(e,t,i){return!(e||t>0||null===i)}(t,i,n))return js(s.el),s.el=void 0,s.renderer=void 0,s.target=void 0,s.sourceRows=void 0,void(s.filteredOut=void 0);const a=r.length,d=a>0&&0===i;if(s.el&&s.renderer===n&&s.target===o&&s.sourceRows===r&&s.filteredOut===d)return;const c="grid"===o?e:e.querySelector(".rows-container")??e;js(s.el),s.el=function(e,t,i="rows"){const r=document.createElement("div");return r.className="tbw-empty-overlay",r.setAttribute("role","presentation"),r.setAttribute("data-overlay-target",i),r.appendChild(Ks(e,t)),r}({sourceRowCount:a,filteredOut:d},n??void 0,o),function(e,t){e.appendChild(t)}(c,s.el),s.renderer=n,s.target=o,s.sourceRows=r,s.filteredOut=d;const u=s.el.textContent?.trim();l&&u&&qe(l,u)}var Ys=/* @__PURE__ */new WeakMap,Zs=ze.TRUNCATED;function Xs(e,t){const i=Ke(t),r=function(e){if(!e)return-1;const t=e.getAttribute("data-col");return t?parseInt(t,10):-1}(t);if(i<0||r<0)return;e._focusRow=i,e._focusCol=r,je(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 Qs(e,t,i,r){let n=null;const o=i.composedPath?.();if(n=o&&o.length>0?o[0]:i.target,!n||!t.contains(n)||!n.closest?.("[data-col]")){const e=document.elementFromPoint(i.clientX,i.clientY);e&&(n=e)}const l=n?.closest?.("[data-col]"),a=n?.closest?.(".data-grid-row"),d=n?.closest?.(".header-row");let c,u,h,g,p,f;return l&&(c=parseInt(l.getAttribute("data-row")??"-1",10),u=parseInt(l.getAttribute("data-col")??"-1",10),c>=0&&u>=0&&(h=e._rows[c],f=e._visibleColumns[u],g=f?.field,p=h&&g?s(h,g):void 0)),{type:r,row:h,rowIndex:void 0!==c&&c>=0?c:void 0,colIndex:void 0!==u&&u>=0?u:void 0,field:g,value:p,column:f,originalEvent:i,cellElement:l??void 0,rowElement:a??void 0,isHeader:!!d,cell:void 0!==c&&void 0!==u&&c>=0&&u>=0?{row:c,col:u}:void 0}}function Js(e,t,i){if(0!==i.button&&"mouse"===i.pointerType)return;if(Ys.get(e))return;const r=function(e){return"touch"===e.pointerType||"pen"===e.pointerType||"mouse"!==e.pointerType&&"coarse"===ln()}(i);let n=null;const o=()=>{const r=Qs(e,t,i,"mousedown");return e._dispatchCellMouseDown?.(r)??!1};if(!r){if(!o())return;Ys.set(e,!0)}bn(i,t,{onPromote:()=>{if(r){if(!o())return;Ys.set(e,!0),n=function(e){if(!e)return()=>{};const t=e.style.touchAction;return e.style.touchAction="none",()=>{e.style.touchAction=t}}(e._bodyEl),function(e){const t=e.ownerDocument;if(!t)return;let i=null;const r=t=>{const i=t.target;i&&e.contains(i)&&(t.preventDefault(),t.stopPropagation(),n())},n=()=>{null!==i&&clearTimeout(i),i=null,t.removeEventListener("contextmenu",r,!0)};t.addEventListener("contextmenu",r,!0),i=setTimeout(n,700)}(t)}},onMove:i=>{if(!Ys.get(e))return;const r=Qs(e,t,i,"mousemove");e._dispatchCellMouseMove?.(r)},onEnd:i=>{if(n?.(),n=null,!Ys.get(e))return;const r=Qs(e,t,i,"mouseup");e._dispatchCellMouseUp?.(r),Ys.set(e,!1)},onCancel:()=>{n?.(),n=null,Ys.set(e,!1)}},r?{longPressDuration:400}:{threshold:3})}function el(e,t,i,r){t.addEventListener("keydown",t=>lt(e,t),{signal:r}),i.addEventListener("pointerdown",t=>Js(e,i,t),{signal:r}),i.addEventListener("mouseover",t=>{if(e.getPluginByName?.("tooltip"))return;const i=t.target.closest(".cell");if(!i)return;const r=t.relatedTarget;r&&i.contains(r)||function(e){const t=e.hasAttribute(Zs);if(e.title&&!t)return;const i=e.scrollWidth>e.clientWidth?(e.textContent??"").trim():"";i?(e.title=i,e.setAttribute(Zs,"")):t&&(e.removeAttribute("title"),e.removeAttribute(Zs))}(i)},{signal:r,passive:!0})}var tl=class{#qn;#wo=/* @__PURE__ */new Set;#bo=/* @__PURE__ */new Map;#vo=null;constructor(e){this.#qn=e,this.#yo()}focusCell(e,t){const i=this.#qn,r=i._rows.length-1;if(r<0)return;let n;if("string"==typeof t){if(n=i._visibleColumns.findIndex(e=>e.field===t),n<0)return}else n=t;const o=i._visibleColumns.length-1;o<0||(i._focusRow=Math.max(0,Math.min(e,r)),i._focusCol=Math.max(0,Math.min(n,o)),at(i))}get focusedCell(){const e=this.#qn;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 i=this.#qn._virtualization;if(!i.enabled)return;const r=i.container;if(!r)return;const n=this.#qn._rows.length;if(0===n)return;const o=Math.max(0,Math.min(e,n-1)),s=t?.align??"nearest",l=t?.behavior??"instant";let a,d;const c=i.positionCache;i.variableHeights&&c&&c.length>o?(a=c[o].offset,d=c[o].height):(a=o*i.rowHeight,d=i.rowHeight);const u=i.viewportEl?.clientHeight??r.clientHeight??0;if(u<=0)return;const h=this.#qn._getVerticalScrollOffsets?.(o)??{top:0,bottom:0};if(h.skipScroll)return;const g=Math.max(0,h.top),p=u-g-Math.max(0,h.bottom);if(p<=0)return;const f=r.scrollTop,m=a+d,w=f+g,b=f+g+p;let v;switch(s){case"start":v=a-g;break;case"center":v=a-g-p/2+d/2;break;case"end":v=m-p-g;break;default:if(a>=w&&m<=b)return;v=a<w?a-g:m-p-g}v=Math.max(0,v);const y=it(v,i.scrollMapping);"smooth"===l&&"0"!==getComputedStyle(this.#qn).getPropertyValue("--tbw-animation-enabled").trim()?r.scrollTo({top:y,behavior:"smooth"}):r.scrollTop=y}scrollToRowById(e,t){const i=this.#qn._getRowEntry(e);i&&this.scrollToRow(i.index,t)}registerExternalFocusContainer(e){if(this.#wo.has(e))return;this.#wo.add(e);const t=new AbortController,i=t.signal,r=this.#qn;e.addEventListener("focusin",e=>{r.dataset.hasFocus="",this.#Co(e.target)},{signal:i}),e.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&this.containsFocus(t)||delete r.dataset.hasFocus,null===t&&this.#xo()},{signal:i}),this.#bo.set(e,()=>t.abort())}unregisterExternalFocusContainer(e){this.#wo.delete(e);const t=this.#bo.get(e);t&&(t(),this.#bo.delete(e))}containsFocus(e){const t=e??document.activeElement;return!!t&&(!!this.#qn.contains(t)||this.isInExternalFocusContainer(t))}isInExternalFocusContainer(e){for(const t of this.#wo)if(t.contains(e))return!0;return!1}#yo(){const e=this.#qn;e.addEventListener("focusin",e=>this.#Co(e.target),{capture:!0}),e.addEventListener("focusout",e=>{null===e.relatedTarget&&this.#xo()})}#Co(e){if(!(e instanceof HTMLElement))return;if(e===this.#qn)return;const t=e.closest?.(".cell");t&&!t.classList.contains("editing")||this.isInExternalFocusContainer(e)||(this.#vo=e)}#xo(){queueMicrotask(()=>{this.#qn.isConnected&&document.activeElement===document.body&&this.restoreLastFocus()})}restoreLastFocus(){const e=this.#vo;if(!e)return!1;if(!e.isConnected)return this.#vo=null,!1;if(e===document.activeElement)return!0;try{e.focus({preventScroll:!0})}catch{return!1}return document.activeElement===e}get lastFocusedElement(){return this.#vo?.isConnected?this.#vo:null}};var il="function"==typeof requestIdleCallback;function rl(e){il?cancelIdleCallback(e):clearTimeout(e)}function nl(e){let t=null,i=null,r=!1,n=null,o=null,s=null,l=null,a=null;const d=()=>{null!==a&&(clearTimeout(a),a=null)},c=t=>{const i=e._visibleColumns[t];return null!=i?.__renderedWidth?i.__renderedWidth:"number"==typeof i?.width?i.width:(t=>(e._headerRowEl??e.findHeaderRow?.())?.querySelectorAll(".cell")[t])(t)?.getBoundingClientRect().width??0},u=(t,i)=>{const r=e._visibleColumns[t];if(!r)return null;const o=Math.max(function(e){return"number"==typeof e?.minWidth&&Number.isFinite(e.minWidth)&&e.minWidth>0?e.minWidth:40}(r),i);return r.width=o,r.__userResized=!0,r.__renderedWidth=o,null==n&&(n=requestAnimationFrame(()=>{n=null,e.updateTemplate?.()})),e.dispatchEvent(new CustomEvent("column-resize",{detail:{field:r.field,width:o}})),o},h=e=>{if(!t)return;const i=e.clientX-t.startX;0!==i&&(r=!0),u(t.colIndex,t.startWidth+i)};let g=!1;const p=()=>{g=!0,requestAnimationFrame(()=>{g=!1})},f=i=>{i&&p(),null!==o&&(document.documentElement.style.cursor=o,o=null),null!==s&&(document.body.style.userSelect=s,s=null),t=null,i&&e.requestStateChange&&e.requestStateChange()};function m(t){const i=e._visibleColumns[t];i&&(d(),i.__userResized=!1,i.__renderedWidth=void 0,i.width=i.__originalWidth,e.updateTemplate?.(),e.requestStateChange?.(),e.dispatchEvent(new CustomEvent("column-resize-reset",{detail:{field:i.field,width:i.width}})))}return{get isResizing(){return null!==t||g},start(n,g,w,b){const v=function(e){return"pointerId"in e?e:new PointerEvent("pointerdown",{pointerId:1,pointerType:"mouse",isPrimary:!0,clientX:e.clientX,clientY:e.clientY,button:e.button,buttons:e.buttons})}(n);n.preventDefault(),i?.(),i=null,d(),r=!1;const y=e._headerRowEl??e.findHeaderRow?.();y&&function(t,i){const r=i.querySelectorAll(".cell");for(let n=0;n<e._visibleColumns.length;n++){if(n===t)continue;const i=e._visibleColumns[n];if(null==i.width&&!i.__userResized){const e=r[n]?.getBoundingClientRect().width;e&&(i.width=Math.round(e),i.__userResized=!0,i.__renderedWidth=i.width)}}}(g,y);const C=e._visibleColumns[g],x="number"==typeof C?.width?C.width:void 0,R=C?.__renderedWidth??x??w.getBoundingClientRect().width;t={startX:v.clientX,colIndex:g,startWidth:R,startConfiguredWidth:C?.width,startRenderedWidth:C?.__renderedWidth,startUserResized:C?.__userResized??!1},null===o&&(o=document.documentElement.style.cursor),document.documentElement.style.cursor="e-resize",null===s&&(s=document.body.style.userSelect),document.body.style.userSelect="none";const S=b??w;i=bn(v,S,{onMove:h,onEnd:()=>{i=null,r?f(!0):(p(),f(!1),a=setTimeout(()=>{a=null,function(t,i){l??=Bn({id:"tbw-column-size-popover",getSize:c,setSize:(t,i)=>{u(t,i),e.requestStateChange?.()},reset:m,getLabel:t=>{const i=e._visibleColumns[t];return`Width of column ${String(i?.header??i?.field??t+1)}`},getHost:()=>e}),l.open(t,i)}(g,S)},300))},onCancel:()=>{i=null,(()=>{const i=t;if(i){const t=e._visibleColumns[i.colIndex];t&&(t.width=i.startConfiguredWidth,t.__renderedWidth=i.startRenderedWidth,t.__userResized=i.startUserResized,e.updateTemplate?.(),e.dispatchEvent(new CustomEvent("column-resize",{detail:{field:t.field,width:i.startWidth}}))),p()}f(!1)})()}})},resetColumn:m,setColumnWidth(t,i){null!=u(t,i)&&e.requestStateChange?.()},getColumnWidth:c,dispose(){i?.(),i=null,f(null!==t),d(),l?.dispose(),l=null,null!=n&&(cancelAnimationFrame(n),n=null)}}}var ol="data-animating",sl={change:"--tbw-row-change-duration",insert:"--tbw-row-insert-duration",remove:"--tbw-row-remove-duration"},ll={change:500,insert:300,remove:200};function al(e,t){const i=sl[t],r=getComputedStyle(e).getPropertyValue(i);if(r){const e=function(e){const t=e.trim().toLowerCase();return t.endsWith("ms")?parseFloat(t):t.endsWith("s")?1e3*parseFloat(t):parseFloat(t)}(r);if(!isNaN(e)&&e>0)return e}return ll[t]}function dl(e,t,i){if(t<0)return Promise.resolve(!1);const r=e.findRenderedRowElement?.(t);return r?new Promise(e=>{!function(e,t,i){e.removeAttribute(ol),e.offsetWidth,e.setAttribute(ol,t);const r=al(e,t);setTimeout(()=>{"remove"!==t&&e.removeAttribute(ol),i?.()},r)}(r,i,()=>e(!0))}):Promise.resolve(!1)}function cl(e,t){if(t)return t(e);const i=e;return"id"in i&&null!=i.id?String(i.id):"_id"in i&&null!=i._id?String(i._id):void 0}var ul=class{#qn;constructor(e){this.#qn=e}getRow(e){return this.#qn._getRowEntry(e)?.row}#Ro(e,t,i,r,n){const o=this.#qn,l=[];for(const[a,c]of Object.entries(r)){if("__proto__"===a||"constructor"===a||"prototype"===a)continue;const h=s(t,a);if(h===c)continue;const g=o.query?.("commitCellValue",{rowIndex:i,rowId:e,row:t,field:a,oldValue:h,newValue:c,source:n});g?.includes(!1)||(g?.includes(!0)||(d(t,a,c),u(t)),l.push({field:a,oldValue:h,newValue:c}),o.dispatchEvent(new CustomEvent("cell-change",{detail:{row:t,rowId:e,rowIndex:i,field:a,oldValue:h,newValue:c,changes:r,source:n},bubbles:!0,composed:!0})))}return l}updateRow(e,t,i="api"){const r=this.#qn,n=r._getSourceRowEntry(e);if(!n)return void A(b,`Row with ID "${e}" not found. Ensure the row exists and getRowId is correctly configured.`,r.id);const{row:o,index:s}=n;this.#Ro(e,o,s,t,i).length>0&&(Vo(r),r._requestSchedulerPhase(Ns.VIRTUALIZATION,"updateRow"),r._emitDataChange())}updateRows(e,t="api"){const i=this.#qn;let r=!1;for(const{id:n,changes:o}of e){const e=i._getSourceRowEntry(n);if(!e){A(b,`Row with ID "${n}" not found. Ensure the row exists and getRowId is correctly configured.`,i.id);continue}const{row:s,index:l}=e;this.#Ro(n,s,l,o,t).length>0&&(r=!0)}r&&(Vo(i),i._requestSchedulerPhase(Ns.VIRTUALIZATION,"updateRows"),i._emitDataChange())}async insertRow(e,t,i=!0){const r=this.#qn,n=Math.max(0,Math.min(e,r._rows.length));r.sourceRows=[...r.sourceRows,t];const o=[...r._rows];o.splice(n,0,t),r._rows=o,r._sortState&&(r.__originalOrder=[...r.__originalOrder,t]),this.#So(),r._emitPluginEvent("row-inserted",{row:t,index:n}),r._emitDataChange(),i&&(await new Promise(e=>requestAnimationFrame(()=>e())),await dl(r,n,"insert"))}async removeRow(e,t=!0){const i=this.#qn,r=i._rows[e];if(!r)return;t&&await dl(i,e,"remove");const n=i._rows.indexOf(r);if(n<0)return r;const o=[...i._rows];o.splice(n,1),i._rows=o;const s=i.sourceRows.indexOf(r);if(s>=0){const e=[...i.sourceRows];e.splice(s,1),i.sourceRows=e}if(i._sortState){const e=i.__originalOrder.indexOf(r);if(e>=0){const t=[...i.__originalOrder];t.splice(e,1),i.__originalOrder=t}}return this.#So(),i._emitDataChange(),t&&this.#Eo(),r}async applyTransaction(e,t=!0){const i={added:[],updated:[],removed:[]};return await this.#Ao(e,i,t),this.#_o(e,i),this.#ko(e,i),this.#To(i),t&&await this.#Mo(i),i}async#Ao(e,t,i){if(!e.remove?.length)return;const r=this.#qn;for(const{id:n}of e.remove){const e=r._getRowEntry(n);if(!e)continue;const{row:o}=e;if(i){const e=r._rows.indexOf(o);e>=0&&await dl(r,e,"remove")}const s=r._rows.indexOf(o);if(s<0){t.removed.push(o);continue}const l=[...r._rows];l.splice(s,1),r._rows=l;const a=r.sourceRows.indexOf(o);if(a>=0){const e=[...r.sourceRows];e.splice(a,1),r.sourceRows=e}if(r._sortState){const e=r.__originalOrder.indexOf(o);if(e>=0){const t=[...r.__originalOrder];t.splice(e,1),r.__originalOrder=t}}t.removed.push(o)}}#_o(e,t){if(!e.update?.length)return;const i=this.#qn,r=new Set(e.remove?.map(e=>e.id));for(const{id:n,changes:o}of e.update){if(r.has(n))continue;const e=i._getRowEntry(n);if(!e)continue;const{row:l,index:a}=e;let c=!1;for(const[t,r]of Object.entries(o)){const e=s(l,t);e!==r&&(c=!0,d(l,t,r),u(l),i.dispatchEvent(new CustomEvent("cell-change",{detail:{row:l,rowId:n,rowIndex:a,field:t,oldValue:e,newValue:r,changes:o,source:"api"},bubbles:!0,composed:!0})))}c&&t.updated.push(l)}}#ko(e,t){if(!e.add?.length)return;const i=this.#qn;for(const r of e.add)i.sourceRows=[...i.sourceRows,r],i._rows=[...i._rows,r],i._sortState&&(i.__originalOrder=[...i.__originalOrder,r]),t.added.push(r)}#To(e){const t=this.#qn,i=e.added.length>0||e.removed.length>0,r=e.updated.length>0;i?this.#So():r&&(Vo(t),t._requestSchedulerPhase(Ns.VIRTUALIZATION,"applyTransaction")),(i||r)&&t._emitDataChange()}async#Mo(e){const t=this.#qn;if(e.added.length>0){await new Promise(e=>requestAnimationFrame(()=>e()));for(const i of e.added){const e=t._rows.indexOf(i);e>=0&&await dl(t,e,"insert")}}for(const i of e.updated){const e=t._rows.indexOf(i);e>=0&&await dl(t,e,"change")}e.removed.length>0&&this.#Eo()}#So(){const e=this.#qn;Vo(e),e._rebuildRowIdMap(),e.__rowRenderEpoch++;for(let t=0;t<e._rowPool.length;t++)e._rowPool[t].__epoch=-1;e.refreshVirtualWindow(!0)}#Eo(){const e=this.#qn;requestAnimationFrame(()=>{const t=e.querySelectorAll('[data-animating="remove"]');for(let e=0;e<t.length;e++)t[e].removeAttribute("data-animating")})}#Io=null;#Lo=[];#Do=null;applyTransactionAsync(e){return this.#Io||(this.#Io={add:[],update:[],remove:[]}),e.add&&this.#Io.add.push(...e.add),e.update&&this.#Io.update.push(...e.update),e.remove&&this.#Io.remove.push(...e.remove),new Promise(e=>{this.#Lo.push(e),null===this.#Do&&(this.#Do=requestAnimationFrame(()=>{this.#Do=null;const e=this.#Io,t=this.#Lo;this.#Io=null,this.#Lo=[],this.applyTransaction(e,!1).then(e=>{for(const i of t)i(e)})}))})}},hl="tbw-grid",gl=hl;function pl(){return gl}var fl="tbw-grid-styles",ml="",wl=/* @__PURE__ */new Map;function bl(){const e=function(){const e=pl();return"tbw-grid"===e?fl:`${fl}-${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 vl(e){const t=pl();return"tbw-grid"===t?e:e.replace(/(?<![-\w])tbw-grid(?![-\w])/g,t)}function yl(){const e=bl(),t=Array.from(wl.values()).join("\n");e.textContent=`${ml}\n\n/* Plugin Styles */\n${t}`}async function Cl(e){if(ml)return;if("string"==typeof e&&e.length>0)return ml=vl(e),void yl();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){A("TBW120",`Failed to extract grid.css from document stylesheets: ${e}`)}return null}();t?(ml=vl(t),yl()):"undefined"!=typeof process&&"test"===process.env.NODE_ENV||A("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 xl(e){e.startY=null,e.startX=null,e.lastY=null,e.lastX=null,e.lastTime=null,e.locked=!1}function Rl(e){e.momentumRaf&&(cancelAnimationFrame(e.momentumRaf),e.momentumRaf=0)}function Sl(e,t){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 i=.95,r=1;let n=performance.now();const o=()=>{const s=performance.now(),l=s-n;n=s;const a=l/16,d=Math.pow(i,a);e.velocityY*=d,e.velocityX*=d;const c=16*e.velocityY,u=16*e.velocityX,h=Math.abs(c)>=r,g=Math.abs(u)>=r;h&&(t.fauxScrollbar.scrollTop+=c),g&&t.scrollArea&&(t.scrollArea.scrollLeft+=u),e.momentumRaf=h||g?requestAnimationFrame(o):0};e.momentumRaf=requestAnimationFrame(o)}(e,t),xl(e)}function El(e,t,i,r){e.addEventListener("pointerdown",i=>{"touch"===i.pointerType&&null===t.activePointerId&&(t.activePointerId=i.pointerId,e.setPointerCapture(i.pointerId),function(e,t,i){Rl(i),i.startY=t,i.startX=e,i.lastY=t,i.lastX=e,i.lastTime=performance.now(),i.velocityY=0,i.velocityX=0,i.locked=!1}(i.clientX,i.clientY,t))},{passive:!0,signal:r}),e.addEventListener("pointermove",e=>{e.pointerId===t.activePointerId&&function(e,t,i,r){if(null===i.lastY||null===i.lastX)return!1;const n=performance.now(),o=i.lastY-t,s=i.lastX-e;if(null!==i.lastTime){const e=n-i.lastTime;e>0&&(i.velocityY=o/e,i.velocityX=s/e)}if(i.lastY=t,i.lastX=e,i.lastTime=n,i.locked){const{scrollTop:e,scrollHeight:t,clientHeight:i}=r.fauxScrollbar;if(o>0&&e<t-i||o<0&&e>0?r.fauxScrollbar.scrollTop+=o:0!==o&&window.scrollBy(0,o),r.scrollArea){const{scrollLeft:e,scrollWidth:t,clientWidth:i}=r.scrollArea;s>0&&e<t-i||s<0&&e>0?r.scrollArea.scrollLeft+=s:0!==s&&window.scrollBy(s,0)}return!0}const l=null!==i.startY?Math.abs(i.startY-t):0,a=null!==i.startX?Math.abs(i.startX-e):0;if(l<3&&a<3)return!1;const d=l>=a,{scrollHeight:c,clientHeight:u}=r.fauxScrollbar,h=c-u>0;let g=!1;if(r.scrollArea){const{scrollWidth:e,clientWidth:t}=r.scrollArea;g=e-t>0}return!!(d&&h||!d&&g)&&(i.locked=!0,r.fauxScrollbar.scrollTop+=o,r.scrollArea&&(r.scrollArea.scrollLeft+=s),!0)}(e.clientX,e.clientY,t,i)&&e.preventDefault()},{passive:!1,signal:r}),e.addEventListener("pointerup",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Sl(t,i))},{passive:!0,signal:r}),e.addEventListener("pointercancel",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,xl(t))},{passive:!0,signal:r}),e.addEventListener("lostpointercapture",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,xl(t))},{passive:!0,signal:r})}var Al=[{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}],_l=[{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 kl(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function Tl(e){return`import '@toolbox-web/grid/features/${kl(e)}';`}function Ml(e){return`import { ${Ll(e)}Plugin } from '@toolbox-web/grid/plugins/${kl(e)}';`}function Il(e){const t=e?.features;return!!t&&"object"==typeof t&&Object.keys(t).length>0}function Ll(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Dl(e,t){return e.some(e=>e.name===t)}var Pl=class{#qn;state;#Po=0;#Fo=0;constructor(e,t){this.#qn=e,this.state={enabled:!0,rowHeight:28,bypassThreshold:24,start:0,end:0,container:null,viewportEl:null,totalHeightEl:null,positionCache:null,heightCache:{byKey:/* @__PURE__ */new Map,byRef:/* @__PURE__ */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}}#Ho(){const e=this.state,t=e.container??this.#qn._hostElement,i=e.viewportEl??t,r=t?.clientHeight??0;return{fauxHeight:r,viewportHeight:i?.clientHeight??0,scrollAreaHeight:e.scrollAreaEl?e.scrollAreaEl.clientHeight:r}}updateCachedGeometry(){const e=this.state,t=e.container,i=e.viewportEl??t;i&&(e.cachedViewportHeight=i.clientHeight),t&&(e.cachedFauxHeight=t.clientHeight);const r=e.scrollAreaEl;r&&(e.cachedScrollAreaHeight=r.clientHeight)}calculateTotalSpacerHeight(e,t=!1){const i=this.state;let r,n,o;t?(({fauxHeight:r,viewportHeight:n,scrollAreaHeight:o}=this.#Ho()),i.cachedFauxHeight=r,i.cachedViewportHeight=n,i.cachedScrollAreaHeight=o):(r=i.cachedFauxHeight,n=i.cachedViewportHeight,o=i.cachedScrollAreaHeight||r);const s=o-n,l=Math.max(0,r-o);let a;return a=i.variableHeights&&i.positionCache?function(e){if(0===e.length)return 0;const t=e[e.length-1];return t.offset+t.height}(i.positionCache):e*i.rowHeight,i.scrollMapping=et(a,n),i.scrollMapping.spacerHeight+s+l}initializePositionCache(){const e=this.state;if(!e.variableHeights)return;const t=this.#qn,i=t._rows,r=e.rowHeight||28,n=t.effectiveConfig?.rowHeight,o="function"==typeof n?n:void 0,s=t.effectiveConfig?.getRowId,l=s?e=>s(e):void 0;e.positionCache=function(e,t,i,r,n){const o=new Array(e.length);let s=0;for(let l=0;l<e.length;l++){const a=e[l];let d=n?.(a,l),c=void 0!==d;void 0===d&&(d=Ze(t,a,r.rowId),c=void 0!==d),void 0===d&&(d=i,c=!1),o[l]={offset:s,height:d,measured:c},s+=d}return o}(i,e.heightCache,r,{rowId:l},(e,i)=>{const r=t._getPluginRowHeight(e,i);if(void 0!==r)return r;if(o){const t=o(e,i);if(void 0!==t&&t>0)return t}});const a=function(e,t,i,r){let n=0,o=0;for(let s=0;s<e.length;s++){const i=e[s];i.measured&&void 0===r?.(t[s],s)&&(o+=i.height,n++)}return{measuredCount:n,averageHeight:n>0?o/n:i}}(e.positionCache,i,r,(e,i)=>t._getPluginRowHeight(e,i));e.measuredCount=a.measuredCount,a.measuredCount>0&&(e.averageHeight=a.averageHeight)}invalidateRowHeight(e,t){const i=this.state;if(!i.variableHeights)return;if(!i.positionCache)return;const r=this.#qn._rows;if(e<0||e>=r.length)return;const n=r[e];let o=t;void 0===o&&(o=this.#qn._getPluginRowHeight(n,e)),void 0===o&&(o=i.rowHeight);const s=i.positionCache[e];if(s&&!(Math.abs(s.height-o)<1)&&(function(e,t,i){if(t<0||t>=e.length)return;const r=e[t],n=i-r.height;if(r.measured=!0,0!==n){r.height=i;for(let i=t+1;i<e.length;i++)e[i].offset+=n}}(i.positionCache,e,o),i.totalHeightEl)){const e=this.calculateTotalSpacerHeight(r.length);i.totalHeightEl.style.height=`${e}px`}}measureRenderedRowHeights(e,t){const i=this.state;if(!i.variableHeights)return;if(!i.positionCache)return;const r=this.#qn,n=r._bodyEl;if(!n)return;const o=n.querySelectorAll(".data-grid-row"),s=r.effectiveConfig?.getRowId,l=r._rows,a=Qe({positionCache:i.positionCache,heightCache:i.heightCache,rows:l,defaultHeight:i.rowHeight,start:e,end:t,getPluginHeight:(e,t)=>r._getPluginRowHeight(e,t),getRowId:s?e=>s(e):void 0},o);if(a.hasChanges&&(i.measuredCount=a.measuredCount,i.averageHeight=a.averageHeight,i.totalHeightEl)){const e=this.calculateTotalSpacerHeight(l.length);i.totalHeightEl.style.height=`${e}px`}}#Go(e,t){const i=this.#qn;return i._renderVisibleRows(0,e),t||i._afterPluginRender(),!0}#zo(e,t,i,r){const n=this.state,o=this.#qn,s=i||0!==n.start||n.end!==t;if(n.start=0,n.end=t,o._renderVisibleRows(0,t,o.__rowRenderEpoch),i){n.variableHeights&&this.initializePositionCache();let i=n.container?.scrollTop??0;if(n.totalHeightEl){const e=this.calculateTotalSpacerHeight(t,!0);n.totalHeightEl.style.height=`${e}px`;const r=e-n.cachedFauxHeight;i>r&&(i=r>0?r:0)}e.style.transform=`translateY(${-i}px)`}return o._updateAriaCounts(t,o._visibleColumns.length),r||o._afterPluginRender(),s}#Oo(e,t){const i=this.state,r=i.positionCache;let n;i.variableHeights&&r&&r.length>0?(n=Xe(r,e),-1===n&&(n=0)):n=Math.floor(e/i.rowHeight),n-=n%2,n<0&&(n=0),t>0&&n>t-1&&(n=t-1);const o=this.#qn._adjustPluginVirtualStart(n,e,i.rowHeight);return void 0!==o&&o<n&&(n=o-o%2,n<0&&(n=0)),n}#No(e,t,i){const r=this.state,n=r.rowHeight,o=r.positionCache;let s;if(r.variableHeights&&o&&o.length>0){const r=t+3*n;let l=0;for(s=e;s<i&&l<r;)l+=o[s].height,s++;const a=Math.ceil(t/n)+3;s-e<a&&(s=Math.min(e+a,i))}else s=e+Math.ceil(t/n)+3;return s>i?i:s}#qo(e){const t=this.state;queueMicrotask(()=>{if(!t.totalHeightEl)return;const i=this.calculateTotalSpacerHeight(e);0===t.cachedFauxHeight&&t.cachedViewportHeight>0||(t.totalHeightEl.style.height=`${i}px`)})}#$o(){const e=this.state;this.#Po||(this.#Po=requestAnimationFrame(()=>{this.#Po=0;const t=this.#qn;if(!t._schedulerIsConnected||!e.totalHeightEl)return void(this.#Fo=0);const{fauxHeight:i,viewportHeight:r,scrollAreaHeight:n}=this.#Ho();r!==e.cachedViewportHeight||n!==e.cachedScrollAreaHeight||i!==e.cachedFauxHeight?this.#Fo>=3?this.#Fo=0:(this.#Fo++,t._requestSchedulerPhase(Ns.VIRTUALIZATION,"geometry-drift")):this.#Fo=0}))}refreshVirtualWindow(e=!1,t=!1){const i=this.state,r=this.#qn,n=r._bodyEl;if(!n)return!1;const o=r._rows.length;if(!i.enabled)return this.#Go(o,t);if(e&&this.#$o(),o<=i.bypassThreshold)return this.#zo(n,o,e,t);const s=i.container,l=i.viewportEl??s,a=e?i.cachedViewportHeight=l.clientHeight:i.cachedViewportHeight||(i.cachedViewportHeight=l.clientHeight),d=tt(s.scrollTop,i.scrollMapping);e&&i.variableHeights&&this.initializePositionCache();const c=this.#Oo(d,o),u=this.#No(c,a,o);if(!e&&c===i.start&&u===i.end)return!1;i.start=c,i.end=u;const h=e?i.cachedFauxHeight=s.clientHeight:i.cachedFauxHeight||(i.cachedFauxHeight=s.clientHeight);if(e&&i.scrollAreaEl&&(i.cachedScrollAreaHeight=i.scrollAreaEl.clientHeight),0===h&&a>0)return r._requestSchedulerPhase(Ns.VIRTUALIZATION,"stale-refs-retry"),!1;e&&i.totalHeightEl&&(i.totalHeightEl.style.height=`${this.calculateTotalSpacerHeight(o)}px`);const g=i.positionCache,p=i.variableHeights&&g&&g[c]?g[c].offset:c*i.rowHeight;return n.style.transform=`translateY(${-(d-p)}px)`,r._renderVisibleRows(c,u,r.__rowRenderEpoch),e&&i.variableHeights&&this.measureRenderedRowHeights(c,u),r._updateAriaCounts(o,r._visibleColumns.length),e&&!t&&(r._afterPluginRender(),this.#qo(o)),!0}#Wo=!1;#Bo=null;#Vo=0;#Ko;#jo=!1;#Uo(){return this.#qn._pluginManager?.hasRowHeightPlugin?.()??!1}configureVariableHeights(){const e=this.state,t=this.#qn.effectiveConfig?.rowHeight,i=this.#Uo(),r="number"==typeof t&&t>0?t:null;"function"==typeof t||i?e.variableHeights&&r===this.#Bo||(e.variableHeights=!0,e.rowHeight=r??(e.rowHeight||28),this.initializePositionCache(),this.#Wo="function"!=typeof t&&null===r):!i&&"function"!=typeof t&&e.variableHeights?(e.variableHeights=!1,e.positionCache=null,this.#Wo=!1):null!==r?(e.rowHeight=r,e.variableHeights=!1):requestAnimationFrame(()=>this.#Yo()),this.#Bo=r}#Yo(){const e=this.#qn,t=this.state;if(this.#Uo())return;const i=e.effectiveConfig?.rowHeight;if("number"==typeof i&&i>0)return;const r=e._bodyEl;if(!r?.querySelector(".data-grid-row"))return;const n=this.#Zo(),o=[];for(const g of r.querySelectorAll(".data-grid-row")){if(g.style.getPropertyValue("--tbw-row-height"))continue;let e=0;g.querySelectorAll(".cell").forEach(t=>{const i=t.offsetHeight;i>e&&(e=i)});const t=Math.max(g.getBoundingClientRect().height,e);t>0&&o.push(t)}if(0===o.length)return;o.sort((e,t)=>e-t);const s=o.length>>1,l=o.length%2==1?o[s]:(o[s-1]+o[s])/2,a=t.rowHeight,d=this.#Vo,c=n>0&&d>0&&Math.abs(n-d)>1,u=n>0&&0===d,h=l>0&&l-a>1;if(n>0&&(this.#Vo=n),c||u||h){const i=c||u?Math.max(n,l):l;Math.abs(i-a)>1&&(t.rowHeight=i,e._requestSchedulerPhase(Ns.VIRTUALIZATION,"measureRowHeight"))}}#Zo(){const e=this.#qn._hostElement;if(!e)return 0;const t=getComputedStyle(e).getPropertyValue("--tbw-row-height").trim();if(!t)return 0;if(t.endsWith("px"))return parseFloat(t)||0;const i=this.#qn._bodyEl?.querySelector('.data-grid-row:not([style*="--tbw-row-height"]) > .cell');if(!i)return 0;const r=parseFloat(getComputedStyle(i).minHeight);return r>0?r:0}afterRenderRowHeights(){this.state.enabled&&this.#Xo(),this.#Wo&&this.#qn._bodyEl?.querySelector(".data-grid-row")&&(this.#Wo=!1,requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.#Qo()||(this.#Wo=!0)})}))}#Qo(){if(null!==this.#Bo)return!0;const e=this.#qn._bodyEl?.querySelector(".data-grid-row");if(!e)return!1;let t=0;e.querySelectorAll(".cell").forEach(e=>{const i=e.offsetHeight;i>t&&(t=i)});const i=Math.max(e.getBoundingClientRect().height,t);if(i<=0)return!1;const r=this.state;return Math.abs(i-r.rowHeight)>1&&(r.rowHeight=i),this.initializePositionCache(),r.totalHeightEl&&(r.totalHeightEl.style.height=`${this.calculateTotalSpacerHeight(this.#qn._rows.length)}px`),!0}#Xo(){if(this.#jo)return;const e=this.#qn._bodyEl?.querySelector(".data-grid-row");e&&(this.#jo=!0,this.#Ko?.disconnect(),this.#Ko=new ResizeObserver(()=>this.#Yo()),this.#Ko.observe(e))}disposeRowHeightObserver(){this.#Ko&&(this.#Ko.disconnect(),this.#Ko=void 0,this.#jo=!1,this.#Vo=0)}},Fl=class{grid;plugins=[];getPlugins(){return this.plugins}pluginMap=/* @__PURE__ */new Map;cellRenderers=/* @__PURE__ */new Map;headerRenderers=/* @__PURE__ */new Map;cellEditors=/* @__PURE__ */new Map;_hasAfterCellRender=!1;_hasAfterRowRender=!1;_hasProcessRows=!1;_hasRowStructurePlugins=!1;#Jo=/* @__PURE__ */new Map;eventListeners=/* @__PURE__ */new Map;queryHandlers=/* @__PURE__ */new Map;constructor(e){this.grid=e}attachAll(e){const t=this.#es(e);for(const i of t)this.attach(i)}#es(e){if(e.length<2)return e;const t=/* @__PURE__ */new Map,i=/* @__PURE__ */new Map,r=[];for(const n of e){const e=n.constructor,o=t.get(e);if(!o){t.set(e,n),r.push(n);continue}const s=i.get(o)??[];s.push(n),i.set(o,s)}if(0===i.size)return r;for(const[n,o]of i)n.mergeConfigsFrom(o);return r}attach(e){if(function(e,t,i,r){const n=e.name,o=e.constructor.dependencies??[];for(const s of o){if(s.when&&!s.when(e.resolvedConfig))continue;const o=s.name,l=s.required??!0,a=s.reason;if(t.some(e=>e.name===o))continue;const d=s.severity??(l?"error":void 0);if(!d)continue;const c="error"===d?"requires":"recommends",u=a??`${Ll(n)}Plugin ${c} ${Ll(o)}Plugin`;"error"===d?Il(r)?E(m,`Plugin dependency error:\n\n${u}.\n\n → Enable the required feature in gridConfig.features (pass \`true\` for defaults, or a config object — see the docs):\n ${Tl(o)}\n ${Tl(n)}\n features: {\n ${o}: true,\n ${n}: true,\n }`,i):E(m,`Plugin dependency error:\n\n${u}.\n\n → Add the required plugin to gridConfig.plugins BEFORE ${Ll(n)}Plugin:\n ${Ml(o)}\n plugins: [new ${Ll(o)}Plugin(), new ${Ll(n)}Plugin()]\n → Tip: the feature-based API is recommended and orders dependencies for you — features: { ${o}: true, ${n}: true }`,i):We()&&("warn"===d?A(w,`${u}.`,i):_(w,`${u}.`,i))}}(e,this.plugins,this.grid.getAttribute("id")??void 0,this.grid.effectiveConfig??this.grid.gridConfig),this.pluginMap.set(e.constructor,e),this.plugins.push(e),e.cellRenderers)for(const[t,i]of Object.entries(e.cellRenderers))this.cellRenderers.set(t,i);if(e.headerRenderers)for(const[t,i]of Object.entries(e.headerRenderers))this.headerRenderers.set(t,i);if(e.cellEditors)for(const[t,i]of Object.entries(e.cellEditors))this.cellEditors.set(t,i);this.registerQueryHandlers(e),e.attach(this.grid),this.#ts();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 i of t.queries){let t=this.queryHandlers.get(i.type);t||(t=/* @__PURE__ */new Set,this.queryHandlers.set(i.type,t)),t.add(e)}}unregisterQueryHandlers(e){for(const[t,i]of this.queryHandlers)i.delete(e),0===i.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.#Jo.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 i of this.#is("processRows")){const e=i.processRows(t);e!==t&&(t=e)}return t}processColumns(e){let t=[...e];for(const i of this.#is("processColumns"))t=i.processColumns(t);return t}processConfig(e){for(const t of this.#is("processConfig"))t.processConfig(e)}beforeRender(){for(const e of this.plugins)e.beforeRender?.()}afterStructuralRender(){for(const e of this.#is("afterStructuralRender"))e.afterStructuralRender()}beforeStructuralRender(){for(const e of this.plugins)e.beforeStructuralRender?.()}parseLightDom(){for(const e of this.plugins)e.parseLightDom?.()}syncLightDom(){for(const e of this.plugins)e.syncLightDom?.()}needsStructuralRerender(){let e=!1;for(const t of this.plugins)t.needsStructuralRerender?.()&&(e=!0);return e}afterRender(){for(const e of this.#is("afterRender"))e.afterRender()}afterCellRender(e){for(const t of this.#is("afterCellRender"))t.afterCellRender(e)}hasAfterCellRenderHook(){return this._hasAfterCellRender}afterRowRender(e){for(const t of this.#is("afterRowRender"))t.afterRowRender(e)}hasAfterRowRenderHook(){return this._hasAfterRowRender}#ts(){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.#Jo.clear()}#is(e){let t=this.#Jo.get(e);if(t)return t;t=this.plugins.filter(t=>e in t&&"function"==typeof t[e]);const i=t=>{const i=t.constructor.manifest?.hookPriority;return i?i[e]??0:0};return t.some(e=>0!==i(e))&&t.sort((e,t)=>i(e)-i(t)),this.#Jo.set(e,t),t}onScrollRender(){for(const e of this.#is("onScrollRender"))e.onScrollRender()}getRowHeight(e,t){for(const i of this.plugins)if("function"==typeof i.getRowHeight){const r=i.getRowHeight(e,t);if(void 0!==r)return r}}hasRowHeightPlugin(){for(const e of this.plugins)if("function"==typeof e.getRowHeight)return!0;return!1}adjustVirtualStart(e,t,i){let r=e;for(const n of this.plugins)if("function"==typeof n.adjustVirtualStart){const o=n.adjustVirtualStart(e,t,i);o<r&&(r=o)}return r}renderRow(e,t,i){for(const r of this.plugins)if(r.renderRow?.(e,t,i))return!0;return!1}queryPlugins(e){const t=[],i=this.queryHandlers.get(e.type);if(i&&i.size>0){for(const r of i){const i=r.handleQuery?.(e);void 0!==i&&t.push(i)}return t}for(const r of this.plugins){const i=r.handleQuery?.(e);void 0!==i&&t.push(i)}return t}subscribe(e,t,i){let r=this.eventListeners.get(t);r||(r=/* @__PURE__ */new Map,this.eventListeners.set(t,r)),r.set(e,i)}unsubscribe(e,t){const i=this.eventListeners.get(t);i&&(i.delete(e),0===i.size&&this.eventListeners.delete(t))}unsubscribeAll(e){for(const[t,i]of this.eventListeners)i.delete(e),0===i.size&&this.eventListeners.delete(t)}emitPluginEvent(e,t){const i=this.eventListeners.get(e);if(i)for(const n of i.values())try{n(t)}catch(r){k("TBW024",`Error in plugin event handler for "${e}": ${r}`,this.grid.getAttribute("id")??void 0)}}onKeyDown(e){for(const t of this.#is("onKeyDown"))if(t.onKeyDown(e))return!0;return!1}onCellClick(e){for(const t of this.#is("onCellClick"))if(t.onCellClick(e))return!0;return!1}onRowClick(e){for(const t of this.#is("onRowClick"))if(t.onRowClick(e))return!0;return!1}onHeaderClick(e){for(const t of this.#is("onHeaderClick"))if(t.onHeaderClick(e))return!0;return!1}onScroll(e){for(const t of this.#is("onScroll"))t.onScroll(e)}onCellMouseDown(e){for(const t of this.#is("onCellMouseDown"))if(t.onCellMouseDown(e))return!0;return!1}onCellMouseMove(e){for(const t of this.#is("onCellMouseMove"))if(t.onCellMouseMove(e))return!0;return!1}onCellMouseUp(e){for(const t of this.#is("onCellMouseUp"))if(t.onCellMouseUp(e))return!0;return!1}getHorizontalScrollOffsets(e,t){let i=0,r=0,n=!1;for(const o of this.plugins){const s=o.getHorizontalScrollOffsets?.(e,t);s&&(i+=s.left,r+=s.right,s.skipScroll&&(n=!0))}return{left:i,right:r,skipScroll:n}}getVerticalScrollOffsets(e){let t=0,i=0,r=!1;for(const n of this.plugins){const o=n.getVerticalScrollOffsets?.(e);o&&(t+=o.top,i+=o.bottom,o.skipScroll&&(r=!0))}return{top:t,bottom:i,skipScroll:r}}getToolPanels(){const e=[];for(const t of this.plugins){const i=t.getToolPanel?.();i&&e.push({plugin:t,panel:i})}return e.sort((e,t)=>(e.panel.order??0)-(t.panel.order??0))}getHeaderContents(){const e=[];for(const t of this.plugins){const i=t.getHeaderContent?.();i&&e.push({plugin:t,content:i})}return e.sort((e,t)=>(e.content.order??0)-(t.content.order??0))}},Hl=class e extends HTMLElement{static tagName=hl;static version="3.8.2";static get activeTag(){return pl()}static set activeTag(e){!function(e){gl=e}(e)}static#rs=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","column-inference","loading"]}get#ns(){return this}#os=!1;#Bn;#Vn;#ss=[];get#oo(){return this.#ls?.effective??{}}#as=!1;#ds=!1;#cs={rows:!1,columns:!1,gridConfig:!1,fitMode:!1,columnInference:!1};#us;#hs=0;#gs=null;#ps=0;#fs=!1;#ms=0;#ws;#bs={startY:null,startX:null,lastY:null,lastX:null,lastTime:null,velocityY:0,velocityX:0,momentumRaf:0,locked:!1,activePointerId:null};#vs;#Mt;#ys;#Cs={scrollTop:0,scrollLeft:0,scrollHeight:0,scrollWidth:0,clientHeight:0,clientWidth:0};#xs;#Rs;#Ss;#Es;#As;#_s;get _pluginManager(){return this.#xs}#ks=!1;#Ts;#Ms;#co;#ls;#Is=/* @__PURE__ */new Map;#Ls=!1;#Ds=/* @__PURE__ */new Set;#Ps=/* @__PURE__ */new Map;#Fs;#Hs={};#Gs=/* @__PURE__ */new Map;#zs=!1;_rows=[];#Os=[];get _columns(){return this.#oo.columns??[]}set _columns(e){this.#oo.columns=e,this.#Ns=void 0}#Ns;get _visibleColumns(){return this.#Ns??=this._columns.filter(e=>!e.hidden)}_invalidateVisibleColumnsCache(){this.#Ns=void 0}_headerRowEl;_bodyEl;_rowPool=[];_resizeController;get _virtualization(){return this.#Es.state}set _virtualization(e){Object.assign(this.#Es.state,e)}_focusRow=0;_focusCol=0;_restoreFocusAfterRender=!1;_sortState=null;_gridTemplate="";__rowRenderEpoch=0;__didInitialAutoSize=!1;get __lightDomColumnsCache(){return this.#ls?.lightDomColumnsCache}set __lightDomColumnsCache(e){this.#ls&&(this.#ls.lightDomColumnsCache=e)}get __originalColumnNodes(){return this.#ls?.originalColumnNodes}set __originalColumnNodes(e){this.#ls&&(this.#ls.originalColumnNodes=e)}__originalOrder=[];__frameworkAdapter;__rowsBodyEl=null;get rows(){return this._rows}set rows(e){const t=Array.isArray(e)?e:[],i=this.#ss;this.#ss=t,i!==t&&this.#qs("rows")}get sourceRows(){return this.#ss}set sourceRows(e){this.#ss=Array.isArray(e)?e:[]}get columns(){return[...this._columns]}set columns(e){const t=Array.isArray(e)?xs(e):e,i=this.#ls?.getColumns();this.#ls?.setColumns(t),i!==t&&this.#qs("columns")}get gridConfig(){return this.#oo}set gridConfig(e){e&&this.__frameworkAdapter?.processConfig&&(e=this.__frameworkAdapter.processConfig(e));const t=this.#ls?.getGridConfig();this.#ls?.setGridConfig(e),t!==e&&(this.#ls.clearLightDomCache(),this.#qs("gridConfig"))}get _sourceConfig(){return this.#ls?.getGridConfig()}get fitMode(){return this.#oo.fitMode??"stretch"}set fitMode(e){const t=this.#ls?.getFitMode();this.#ls?.setFitMode(e),t!==e&&this.#qs("fitMode")}get columnInference(){return this.#oo.columnInference??"auto"}set columnInference(e){const t=this.#ls?.getColumnInference();this.#ls?.setColumnInference(e),t!==e&&this.#qs("columnInference")}get loading(){return this.#Ls}set loading(e){const t=this.#Ls;this.#Ls=e,t!==e&&(e?(this.setAttribute("loading",""),this.setAttribute("aria-busy","true")):(this.removeAttribute("loading"),this.removeAttribute("aria-busy")),this.#$s(),this.#Ws())}setRowLoading(e,t){const i=this.#Ds.has(e);t?this.#Ds.add(e):this.#Ds.delete(e),i!==t&&this.#Bs(e,t)}setCellLoading(e,t,i){let r=this.#Ps.get(e);const n=r?.has(t)??!1;i?(r||(r=/* @__PURE__ */new Set,this.#Ps.set(e,r)),r.add(t)):(r?.delete(t),0===r?.size&&this.#Ps.delete(e)),n!==i&&this.#Vs(e,t,i)}isRowLoading(e){return this.#Ds.has(e)}isCellLoading(e,t){return this.#Ps.get(e)?.has(t)??!1}clearAllLoading(){this.loading=!1;for(const e of this.#Ds)this.#Bs(e,!1);this.#Ds.clear();for(const[e,t]of this.#Ps)for(const i of t)this.#Vs(e,i,!1);this.#Ps.clear()}get effectiveConfig(){return this.#oo}get disconnectSignal(){return this.#vs||(this.#vs=new AbortController),this.#vs.signal}constructor(){super(),this.#Ks(),this.#Bn=new Promise(e=>this.#Vn=e),this.#Es=new Pl(this),this.#As=new tl(this),this.#_s=new ul(this),this.#us=new qs(this),this.#us.setInitialReadyResolver(()=>this.#Vn?.()),this.#ls=new Bs(this)}async#Ks(){await Cl('@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(#eee,#222);--tbw-color-fg:light-dark(#222,#eee);--tbw-color-fg-muted:light-dark(#555,#aaa);--tbw-color-accent:#3b82f6;--tbw-color-accent-fg:light-dark(#fff,#000);--tbw-color-accent-text:light-dark(#1d4ed8,#93c5fd);--tbw-color-success:light-dark(#357937,#4cae4f);--tbw-color-warning:#f59f0a;--tbw-color-error:light-dark(#d33131,#e06c6c);--tbw-color-danger:var(--tbw-color-error);--tbw-color-selection:light-dark(#fff7d6,#333);--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(#777,#666);--tbw-color-border-cell:var(--tbw-color-border);--tbw-color-border-header:var(--tbw-color-border);--tbw-color-shadow:light-dark(#0000001a,#0000004d);--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-touch-target-min:24px;--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;contain:content;width:100%;height:100%;min-height:0;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);outline:none;display:block;position:relative;overflow:clip}tbw-grid,tbw-grid *{box-sizing:border-box}tbw-grid>tbw-grid-column,tbw-grid>tbw-grid-type{display:none}tbw-grid .tbw-grid-root{flex-direction:column;height:100%;display:flex;position:relative}tbw-grid .tbw-grid-root.has-shell{flex-direction:column;height:100%;display:flex}tbw-grid .tbw-grid-root:has(.selected){-webkit-user-select:none;user-select:none}tbw-grid .tbw-grid-content{touch-action:none;flex-direction:row;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}tbw-grid .tbw-scroll-area{overflow-anchor:none;flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:auto hidden}tbw-grid .rows-body-wrapper{flex-direction:row;flex:1;width:100%;min-width:-moz-fit-content;min-width:fit-content;min-height:0;display:flex}tbw-grid .rows-body{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:visible}tbw-grid .rows-container{flex-direction:row;flex:1;min-height:0;display:flex;position:relative;overflow:visible}tbw-grid .rows-viewport{touch-action:none;flex:1;min-width:0;display:block;position:relative;overflow:clip}tbw-grid .rows-viewport .rows{will-change:transform;min-width:100%;z-index:var(--tbw-z-layer-rows,1);position:absolute;top:0;left:0}tbw-grid .faux-vscroll{width:auto;z-index:var(--tbw-z-layer-header,30);touch-action:none;flex-shrink:0;position:sticky;inset-inline-end:0;overflow:hidden auto}tbw-grid .faux-vscroll-spacer{width:1px}tbw-grid .tbw-sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}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{z-index:25;position:sticky}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)}.tbw-size-popover{padding:var(--tbw-spacing-xs,.25rem);align-items:center;gap:var(--tbw-spacing-xs,.25rem);background:var(--tbw-color-panel-bg,light-dark(#fff,#232528));color:var(--tbw-color-fg,light-dark(#1a1a1a,#f0f0f0));border:1px solid var(--tbw-color-border,light-dark(#d0d0d4,#454545));border-radius:var(--tbw-border-radius,.25rem);box-shadow:0 4px 12px var(--tbw-color-shadow,#0000004d);font-family:var(--tbw-font-family,system-ui, sans-serif);font-size:var(--tbw-font-size-sm,.9285em);z-index:10001;--tbw-size-popover-radius:min(var(--tbw-border-radius,.25rem), 6px);margin:0;line-height:1;display:flex;position:fixed;inset:auto}.tbw-size-popover[hidden]{display:none}.tbw-size-popover button,.tbw-size-popover input{min-height:var(--tbw-touch-target-min,26px);border-radius:var(--tbw-size-popover-radius);color:inherit;font:inherit;line-height:1}:is(.tbw-size-popover button,.tbw-size-popover input):focus-visible{outline:var(--tbw-focus-outline,2px solid var(--tbw-color-accent,#4a90d9));outline-offset:var(--tbw-focus-outline-offset,1px)}.tbw-size-popover button{min-width:var(--tbw-touch-target-min,26px);padding:0 var(--tbw-spacing-sm,.5rem);cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.tbw-size-popover button:hover{background:var(--tbw-color-row-hover,light-dark(#f0f0f0,#2a2a2a));border-color:var(--tbw-color-border-strong,light-dark(#777,#666))}.tbw-size-popover button:active{background:var(--tbw-color-accent,#4a90d9);color:var(--tbw-color-accent-fg,#fff)}.tbw-size-popover input{width:5ch;padding:0 var(--tbw-spacing-xs,.25rem);background:var(--tbw-color-bg,light-dark(#fff,#1a1c20));text-align:center;border:1px solid var(--tbw-color-border,light-dark(#d0d0d4,#454545));appearance:textfield}.tbw-size-popover input::-webkit-outer-spin-button{appearance:none;margin:0}.tbw-size-popover input::-webkit-inner-spin-button{appearance:none;margin:0}}\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{vertical-align:middle;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}tbw-grid [data-icon=expand]:empty:before{-webkit-mask-image:var(--tbw-icon-expand-mask);-webkit-mask-image:var(--tbw-icon-expand-mask);-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);-webkit-mask-image:var(--tbw-icon-collapse-mask);-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);-webkit-mask-image:var(--tbw-icon-sort-asc-mask);-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);-webkit-mask-image:var(--tbw-icon-sort-desc-mask);-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);-webkit-mask-image:var(--tbw-icon-sort-none-mask);-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);-webkit-mask-image:var(--tbw-icon-submenu-arrow-mask);-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);-webkit-mask-image:var(--tbw-icon-drag-handle-mask);-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);-webkit-mask-image:var(--tbw-icon-tool-panel-mask);-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);-webkit-mask-image:var(--tbw-icon-print-mask);-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);-webkit-mask-image:var(--tbw-icon-filter-mask);-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);-webkit-mask-image:var(--tbw-icon-filter-active-mask);-webkit-mask-image:var(--tbw-icon-filter-active-mask);mask-image:var(--tbw-icon-filter-active-mask)}.tbw-context-menu [data-icon]:empty:before{vertical-align:middle;width:1em;height:1em;display:inline-block}.tbw-context-menu [data-icon=submenu-arrow]:empty:before{content:var(--tbw-icon-submenu-arrow,"▶")}}\n@layer tbw-base{tbw-grid .header{z-index:var(--tbw-z-layer-header,30);background:var(--tbw-color-header-bg);flex-shrink:0;display:block;overflow:visible}tbw-grid .header-group-row{grid-template-columns:var(--tbw-column-template);background:var(--tbw-color-header-bg);z-index:var(--tbw-z-layer-header,30);display:grid}tbw-grid .header-group-cell{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:flex-start;align-items:center;justify-content:var(--tbw-align-header-group,var(--tbw-align-header,flex-start));display:flex}tbw-grid .header-group-cell:not(:last-child){border-right:2px solid var(--tbw-color-border)}tbw-grid .header-row{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);display:grid}tbw-grid .header-row>.cell{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);align-items:center;gap:4px;min-width:0;display:flex;overflow:visible}tbw-grid .header-row>.cell>span:first-child{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:inherit;flex:1;overflow:hidden}tbw-grid .header-row>.cell>span[part~=sort-indicator]{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;flex-shrink:0}tbw-grid .header-row>.cell:hover>span[part~=sort-indicator]{visibility:visible;display:inline-flex}tbw-grid .header-row>.cell[aria-sort=ascending]>span[part~=sort-indicator],tbw-grid .header-row>.cell[aria-sort=descending]>span[part~=sort-indicator]{visibility:visible;opacity:1;color:var(--tbw-sort-indicator-active-color);display:inline-flex}tbw-grid .header-row>.cell:last-child{border-right:0}tbw-grid .header-row>.cell:last-child .resize-handle{width:max(var(--tbw-resize-hit-area,18px), var(--tbw-touch-target-min,24px));right:0}tbw-grid .header-row>.cell:last-child .resize-handle:before{left:auto;right:0;transform:none}tbw-grid .header-row>.cell:last-child.resizable{padding-inline-end:max(var(--tbw-cell-padding-h,.5em), var(--tbw-touch-target-min,24px))}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{padding-inline-end:max(var(--tbw-cell-padding-h,.5em), calc(var(--tbw-touch-target-min,24px) / 2));position:relative}tbw-grid .header-row>.cell.sticky-left,tbw-grid .header-row>.cell.sticky-right,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{top:0;right:calc(max(var(--tbw-resize-hit-area,18px), var(--tbw-touch-target-min,24px)) / -2);width:max(var(--tbw-resize-hit-area,18px), var(--tbw-touch-target-min,24px));cursor:e-resize;-webkit-user-select:none;user-select:none;touch-action:none;z-index:20;background:0 0;height:100%;position:absolute}tbw-grid .resize-handle:before{content:"";width:var(--tbw-resize-handle-width);background:var(--tbw-resize-handle-color);border-radius:var(--tbw-resize-handle-border-radius);height:100%;transition:background .12s;position:absolute;top:0;left:50%;transform:translate(-50%)}tbw-grid .resize-handle:after{content:"";width:var(--tbw-resize-handle-width);background:var(--tbw-resize-indicator-color,var(--tbw-color-accent));opacity:0;pointer-events:none;z-index:1000;height:0;transition:opacity .12s,height 0s .12s;position:absolute;top:100%;left:50%;transform:translate(-50%)}:is(tbw-grid .resize-handle:hover,tbw-grid .resize-handle[data-tbw-size-open]):before{background:var(--tbw-resize-handle-color-hover)}:is(tbw-grid .resize-handle:hover,tbw-grid .resize-handle[data-tbw-size-open]):after{height:100vh;opacity:var(--tbw-resize-indicator-opacity,.6);transition:opacity .12s,height}@media (pointer:coarse){tbw-grid>.cell.sortable>span[part~=sort-indicator]{min-width:var(--tbw-touch-target-min,24px);min-height:var(--tbw-touch-target-min,24px)}}}\n@layer tbw-base{tbw-grid .data-grid-row{grid-template-columns:var(--tbw-column-template);contain:layout style;display:grid}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{padding:var(--tbw-cell-padding,2px 8px);border-bottom:var(--tbw-row-divider);min-height:var(--tbw-row-height);border-right:1px solid var(--tbw-color-border-cell);min-width:0;white-space:var(--tbw-cell-white-space,nowrap);text-overflow:ellipsis;align-content:center;display:block;overflow:hidden}tbw-grid .data-grid-row>.cell>*{text-overflow:ellipsis;white-space:inherit;min-width:0;overflow:hidden}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]{width:var(--tbw-checkbox-size);height:var(--tbw-checkbox-size);vertical-align:middle;margin:0}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-loading-overlay{z-index:1000;pointer-events:all;background:light-dark(#ffffffb3,#00000080);justify-content:center;align-items:center;animation:.15s ease-out tbw-fade-in;display:flex;position:absolute;inset:0}.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:.8s linear infinite tbw-spin}.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{pointer-events:none;position:relative}.tbw-row-loading-overlay{z-index:26;pointer-events:none;background:light-dark(#ffffffb3,#00000080);align-items:center;animation:.15s ease-out tbw-fade-in;display:flex;position:absolute;inset:0}.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:.8s linear infinite tbw-spin}.cell.tbw-cell-loading{pointer-events:none;position:relative}.cell.tbw-cell-loading:before{content:"";z-index:26;background:light-dark(#ffffffb3,#00000080);animation:.15s ease-out tbw-fade-in;position:absolute;inset:0}.cell.tbw-cell-loading:after{--_spinner-size:calc(var(--tbw-row-height,28px) * .5);content:"";left:var(--tbw-spacing-sm);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));z-index:27;border-radius:50%;margin:auto 0;animation:.8s linear infinite tbw-spin;position:absolute;top:0;bottom:0}}\n@layer tbw-base{.tbw-empty-overlay{padding:var(--tbw-spacing-md,12px);text-align:center;color:var(--tbw-color-text-secondary,var(--tbw-color-text));z-index:999;pointer-events:all;background:light-dark(#fff9,#0006);justify-content:center;align-items:center;animation:.15s ease-out tbw-fade-in;display:flex;position:absolute;inset:0}.tbw-empty-message{font-family:var(--tbw-font-family,inherit);font-size:var(--tbw-font-size-md,14px);-webkit-user-select:text;user-select:text;max-width:480px;line-height:1.4}}\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!important;--tbw-animation-duration:0s!important}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:#0000}20%{background-color:var(--tbw-row-change-color)}to{background-color:#0000}}@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;max-height:var(--tbw-row-height,28px);transform:translateY(0)}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-offset:-2px;outline:2px solid highlight!important}tbw-grid .data-grid-row[aria-selected=true]{color:highlighttext!important;background:highlight!important}}@media (prefers-reduced-motion:reduce){tbw-grid[data-animation-mode=reduced-motion]{--tbw-animation-enabled:0!important;--tbw-animation-duration:0s!important}tbw-grid[data-animation-mode=reduced-motion] .data-grid-row[data-animating]{animation:none}}}\n')}getPlugin(e){return this.#xs?.getPlugin(e)}getPluginByName(e){return this.#xs?.getPluginByName(e)}requestRender(){this.#us.requestPhase(Ns.ROWS,"plugin:requestRender")}requestColumnsRender(){this.#us.requestPhase(Ns.COLUMNS,"plugin:requestColumnsRender")}requestRenderWithFocus(){this._restoreFocusAfterRender=!0,this.#us.requestPhase(Ns.ROWS,"plugin:requestRenderWithFocus")}updateTemplate(){Ls(this)}requestAfterRender(){this.#us.requestPhase(Ns.STYLE,"plugin:requestAfterRender")}requestVirtualRefresh(){this._virtualization.start=-1,this.refreshVirtualWindow(!1)}#js(){this.#xs=new Fl(this);const e=this.#oo?.plugins,t=Array.isArray(e)?e:[],i=this.#oo?.features;let r,n=[];if(i&&le&&(n=le(i).map(e=>this.#Us(e))),0===n.length)r=t;else if(0===t.length)r=n;else{const e=new Set(t.map(e=>e.name));r=[...n.filter(t=>!e.has(t.name)),...t]}this.#xs.attachAll(r)}#Us(e){const t=this.#Is.get(e.name);return t&&t!==e?(t.refreshUserConfigFrom(e),t):(this.#Is.set(e.name,e),e)}#Ys(){!function(e){let t=!1;for(const{name:i,styles:r}of e)wl.has(i)||(wl.set(i,vl(r)),t=!0);t&&yl()}(this.#xs?.getPluginStyles()??[])}#Zs(){const e=this.#oo?.plugins,t=Array.isArray(e)?e:[],i=this.#oo?.features??void 0,r=i!==this.#Ss;if((this.#Rs===t||void 0!==this.#Rs&&this.#Rs.length===t.length&&this.#Rs.every((e,i)=>e===t[i]))&&!r)return void(this.#Rs=t);this.#xs&&this.#xs.detachAll(),this.#js(),this.#Ys(),this.#Rs=t,this.#Ss=i,this.#Es.configureVariableHeights(),this.#ls.markSourcesChanged(),this.#ls.merge();const n=this.#fs;if(this.#fs=this.#xs?.getAll().some(e=>e.onScroll)??!1,!n&&this.#fs){const e=this.#ns.querySelector(".tbw-grid-content")??this.#ns.querySelector(".tbw-grid-root");this.#Xs(e)}}#Qs(){this.#xs?.detachAll()}#Js(){const t=e.getAdapters();if(0===t.length&&!this.__frameworkAdapter)return;const i=this.__frameworkAdapter;return e=>{if(i?.createToolPanelRenderer){const t=i.createToolPanelRenderer(e);if(t)return t}for(const i of t)if(i.createToolPanelRenderer){const t=i.createToolPanelRenderer(e);if(t)return t}}}_registerLightDomHandler(e,t){this.#ls.registerLightDomHandler(e,t)}_unregisterLightDomHandler(e){this.#ls.unregisterLightDomHandler(e)}_requestConfigMerge(){this.#ls.markSourcesChanged(),this.#ls.merge()}_getToolPanelRendererFactory(){return this.#Js()}connectedCallback(){this.hasAttribute("tabindex")||(this.tabIndex=0),this.hasAttribute("version")||this.setAttribute("version",e.version),this.hasAttribute("data-tbw-grid")||this.setAttribute("data-tbw-grid",""),this.id||(this.id="tbw-grid-"+ ++e.#rs),this._rows=Array.isArray(this.#ss)?[...this.#ss]:[],this.#vs&&(this.#vs.abort(),this.#ks=!1),this.#vs=new AbortController,this.#ys&&(rl(this.#ys),this.#ys=void 0),this.#zr(),this.#ls.parseLightDomColumns(this),this.#ls.merge(),this.#js();const t=this.#oo?.plugins;var i,r;this.#Rs=Array.isArray(t)?t:[],this.#Ss=this.#oo?.features??void 0,this.#os||(this.#el(),this.#Ys(),this.#os=!0),this.#tl(),this.#ys=(i=()=>{this.#il()},r={timeout:100},il?requestIdleCallback(i,r):window.setTimeout(()=>{const e=Date.now();i({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-e))})},1))}disconnectedCallback(){this.#ys&&(rl(this.#ys),this.#ys=void 0),this.#ms&&(clearTimeout(this.#ms),this.#ms=0),this.#Qs(),(this.#xs?.getPluginByName("shell"))?.disposeShellState?.(),Rl(this.#bs),this.#vs&&(this.#vs.abort(),this.#vs=void 0),this.#Ts?.abort(),this.#Ts=void 0,this.#ks=!1,this._resizeController&&this._resizeController.dispose(),this.#Mt&&(this.#Mt.disconnect(),this.#Mt=void 0),this.#Es.disposeRowHeightObserver(),Vo(this),this.#rl.clear(),this._virtualization.heightCache?.byKey.clear(),this.#Rs=void 0,this.#Ss=void 0;for(let e=0;e<this._rowPool.length;e++)this._rowPool[e].remove();this._rowPool.length=0,this.__rowsBodyEl=null,this.#as=!1}attributeChangedCallback(e,t,i){if("loading"===e){const e=null!==i&&"false"!==i;return void(this.loading!==e&&(this.loading=e))}if(t!==i&&i&&"null"!==i&&"undefined"!==i)if("rows"===e||"columns"===e||"grid-config"===e)try{const t=JSON.parse(i);"rows"===e?this.rows=t:"columns"===e?this.columns=t:"grid-config"===e&&(this.gridConfig=t)}catch{A("TBW130",`Invalid JSON for '${e}' attribute: ${i}`,this.id)}else"fit-mode"===e?this.fitMode=i:"column-inference"===e&&(this.columnInference=i)}#nl(){const e=this.#ns.querySelector(".tbw-grid-content")??this.#ns.querySelector(".tbw-grid-root");return 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"),e}#tl(){const e=this.#nl();if(this.setAttribute("data-upgraded",""),this.#as=!0,this._resizeController?.dispose(),this._resizeController=nl(this),this.#ol(),this.#Xs(e),this.#ks)return;this.#ks=!0;const t=this.disconnectSignal;el(this,this,this.#ns,t),this.#Es.configureVariableHeights(),queueMicrotask(()=>this.#sl()),this.#us.requestPhase(Ns.FULL,"afterConnect")}#Xs(e){this.#Ts?.abort(),this.#Ts=new AbortController;const t=this.#Ts.signal,i=e?.querySelector(".faux-vscroll"),r=e?.querySelector(".rows");if(this._virtualization.container=i??this,this.#fs=this.#xs?.getAll().some(e=>e.onScroll)??!1,i&&r){i.addEventListener("scroll",()=>{if(!this._virtualization.enabled&&!this.#fs)return;const e=i.scrollTop;r.style.transform=`translateY(${function(e,t,i){if(t<=e.bypassThreshold)return-i;const r=tt(i,e.scrollMapping),n=e.positionCache;let o;if(e.variableHeights&&n&&n.length>0){let t=Xe(n,r);-1===t&&(t=0);const i=t-t%2;o=n[i]?.offset??i*e.rowHeight}else{const t=Math.floor(r/e.rowHeight);o=(t-t%2)*e.rowHeight}return-(r-o)}(this._virtualization,this._rows.length,e)}px)`,this.#gs=e,this.#hs||(this.#hs=requestAnimationFrame(()=>{this.#hs=0,null!==this.#gs&&(this.#ll(this.#gs),this.#gs=null)}))},{passive:!0,signal:t});const e=this.#ns.querySelector(".tbw-scroll-area");this.#Ms=e,this._virtualization.scrollAreaEl=e,e&&this.#fs&&e.addEventListener("scroll",()=>{this.#ps||(this.#ps=requestAnimationFrame(()=>{this.#ps=0;const t=this.#Cs;t.scrollTop=i.scrollTop,t.scrollLeft=e.scrollLeft,t.scrollHeight=i.scrollHeight,t.scrollWidth=e.scrollWidth,t.clientHeight=i.clientHeight,t.clientWidth=e.clientWidth,this.#xs?.onScroll(t)}))},{passive:!0,signal:t});const n=this.#ns.querySelector(".tbw-grid-content");if(n){const e={fauxScrollbar:i,scrollArea:this.#Ms};!function(e,t,i){const{fauxScrollbar:r,scrollArea:n}=t;e.addEventListener("wheel",t=>{try{if(e.querySelector("select:open"))return}catch{}const i=t.shiftKey||Math.abs(t.deltaX)>Math.abs(t.deltaY);if(i&&n){const e=t.shiftKey?t.deltaY:t.deltaX,{scrollLeft:i,scrollWidth:r,clientWidth:o}=n;(e>0&&i<r-o||e<0&&i>0)&&(t.preventDefault(),n.scrollLeft+=e)}else if(!i){const{scrollTop:e,scrollHeight:i,clientHeight:n}=r;(t.deltaY>0&&e<i-n||t.deltaY<0&&e>0)&&(t.preventDefault(),r.scrollTop+=t.deltaY)}},{passive:!1,signal:i})}(n,e,t),El(n,this.#bs,e,t)}}var n,o,s;this._bodyEl&&(n=this,o=this._bodyEl,s=t,o.addEventListener("mousedown",e=>{const t=e.target.closest(".cell[data-col]");if(!t)return;if(t.classList.contains(Ge.EDITING))return;const i=e.target;i.draggable||i.closest('[draggable="true"]')||e.preventDefault(),Xs(n,t)},{signal:s}),o.addEventListener("click",e=>{const t=e.target.closest(".data-grid-row");if(t&&hs(n,e,t),!document.activeElement?.closest(`.cell.${Ge.EDITING}`)){const t=e.target.closest("tbw-grid, [data-tbw-grid]");t&&t.focus({preventScroll:!0})}},{signal:s}),o.addEventListener("dblclick",e=>{const t=e.target.closest(".data-grid-row");t&&hs(n,e,t)},{signal:s})),this.#Mt?.disconnect(),this._virtualization.viewportEl&&(this.#Mt=new ResizeObserver(()=>{this.#al(),this.#us.requestPhase(Ns.VIRTUALIZATION,"resize-observer")}),this.#Mt.observe(this._virtualization.viewportEl)),function(e,t,i,r){t.addEventListener("focusin",()=>{e.dataset.hasFocus=""},{signal:r}),t.addEventListener("focusout",r=>{const n=r.relatedTarget;n&&(t.contains(n)||i.isInExternalFocusContainer(n))||delete e.dataset.hasFocus},{signal:r})}(this,this.#ns,this.#As,t)}addEventListener(e,t,i){super.addEventListener(e,t,i)}removeEventListener(e,t,i){super.removeEventListener(e,t,i)}on(e,t){const i=e=>{t(e.detail,e)};return this.addEventListener(e,i),()=>this.removeEventListener(e,i)}#dl(e,t){this.#as&&this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}_emitDataChange(){this.#dl("data-change",{rowCount:this._rows.length,sourceRowCount:this.#ss.length}),function(e,t,i){if(i===t.lastAnnouncedSourceCount)return;const r=t.lastAnnouncedSourceCount;t.lastAnnouncedSourceCount=i,0===i&&r<0||qe(e,$e(e,"dataLoaded",i))}(this,this.#cl,this.#ss.length)}#sl(){(this._bodyEl?.querySelectorAll(".data-grid-row"))?.forEach((e,t)=>{const i=t===this._focusRow;e.setAttribute("aria-selected",String(i)),e.querySelectorAll(".cell").forEach((e,t)=>{e.setAttribute("aria-selected",String(i&&t===this._focusCol))})})}#qs(e){this.#cs[e]=!0,this.#ds||(this.#ds=!0,queueMicrotask(()=>this.#ul()))}#ul(){if(!this.#ds||!this.#as)return void(this.#ds=!1);const e=this.#cs;if(this.#ds=!1,this.#cs={rows:!1,columns:!1,gridConfig:!1,fitMode:!1,columnInference:!1},e.gridConfig)return this.#hl(),void(e.rows&&this.#gl());(e.columns||e.columnInference)&&this.#pl(),e.rows&&this.#gl(),e.fitMode&&this.#fl()}#gl(){this._rows=Array.isArray(this.#ss)?[...this.#ss]:[],this.#zs=!0,this.#us.requestPhase(Ns.ROWS,"applyRowsUpdate")}#ml(){this.#zs&&this._rebuildRowIdMap()}_rebuildRowIdMap(){this.#zs=!1,this.#Gs.clear();const e=this.#oo.getRowId;for(let t=0;t<this._rows.length;t++){const i=cl(this._rows[t],e);void 0!==i&&this.#Gs.set(i,{row:this._rows[t],index:t})}}#pl(){Vo(this),this.#ls.merge(),this.#ol()}#fl(){if(this.#ls.merge(),"fixed"===this.#oo.fitMode)this.__didInitialAutoSize=!1,Ts(this);else{for(let e=0;e<this._columns.length;e++){const t=this._columns[e];!t.__userResized&&t.__autoSized&&delete t.width}Ls(this)}}#hl(){this.#ls.parseLightDomColumns(this),this.#ls.merge(),this.#Zs(),this.#Es.configureVariableHeights(),this.#ls.markSourcesChanged(),this.#ls.merge();const e=this.#ls.initialColumnState;if(e){this.#ls.initialColumnState=void 0,this.#co=void 0;const t=this.#xs?.getAll()??[];this.#ls.applyState(e,t)}if(this.#xs?.needsStructuralRerender())return this.#xs?.beforeStructuralRender(),this.#el(),this.#Ys(),this.#tl(),void this._rebuildRowIdMap();this._rebuildRowIdMap(),this.#us.requestPhase(Ns.COLUMNS,"applyGridConfigUpdate")}#wl(){if(this.__rowRenderEpoch++,this.#xs){const e=this.#Os.length>0?this.#Os:this._columns,t=e.filter(e=>!e.hidden),i=e.filter(e=>e.hidden),r=this.#xs.processColumns([...t]);if(r!==t){const n=new Set(r.map(e=>e.field));!t.some(e=>n.has(e.field))&&r.length>0?this._columns=[...r,...i]:this._columns=this.#bl(e,r,i)}else this._columns=[...e]}}#bl(e,t,i){if(0===i.length)return t;const r=/* @__PURE__ */new Map;for(const l of t)r.set(l.field,l);const n=new Set(e.map(e=>e.field)),o=[];for(const l of t)n.has(l.field)||o.push(l);const s=[];for(const l of e){const e=r.get(l.field);e?s.push(e):l.hidden&&s.push(l)}for(const l of o){const e=t.indexOf(l),i=t.slice(e+1).find(e=>n.has(e.field));if(!i){s.push(l);continue}const r=s.findIndex(e=>e.field===i.field);-1===r?s.push(l):s.splice(r,0,l)}return s}#vl(){Vo(this);const e=this.#ss;if(!Array.isArray(e))return this._rows=[],this._rebuildRowIdMap(),this._virtualization.variableHeights&&this.#Es.initializePositionCache(),void this._emitDataChange();if(!this._sortState&&this.#oo.initialSort){const{field:e,direction:t}=this.#oo.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,i=!1){if(!e._sortState)return t;const r=e.effectiveConfig?.sortHandler??kn;if(r===kn)return i||(e.__originalOrder=t.slice()),Mn(t,e._sortState.field,e._sortState.direction,e._columns),t;i||(e.__originalOrder=t);const n=r(t,e._sortState,e._columns);return n&&"function"==typeof n.then?t:n}(this,this._sortState?[...e]:e,!0),i=this.#xs?.processRows(t)??t;this._rows=i,this.#zs=!0,this._emitDataChange()}_renderVisibleRows(e,t,i=this.__rowRenderEpoch){if(this.#ws||(this.#ws=(e,t,i)=>this.#xs?.renderRow(e,t,i)??!1),es(this,e,t,i,this.#ws),this.#Ds.size>0)for(const r of this.#Ds)this.#Bs(r,!0)}#cl={rowCount:-1,colCount:-1,ariaLabel:void 0,ariaLabelledBy:void 0,ariaDescribedBy:void 0,ariaRoleDescription:void 0,lastAnnouncedSourceCount:-1};_updateAriaCounts(e,t){!function(e,t,i,r,n){if(r===e.rowCount&&n===e.colCount)return!1;const o=e.rowCount;e.rowCount=r,e.colCount=n,t&&(t.setAttribute("aria-rowcount",String(r)),t.setAttribute("aria-colcount",String(n))),r!==o&&i&&(r>0?i.setAttribute("role","rowgroup"):i.removeAttribute("role"))}(this.#cl,this.__rowsBodyEl,this._bodyEl,e,t)}_requestSchedulerPhase(e,t){this.#us.requestPhase(e,t)}_getPluginRowHeight(e,t){return this.#xs?.getRowHeight?.(e,t)}_adjustPluginVirtualStart(e,t,i){return this.#xs?.adjustVirtualStart(e,t,i)}_afterPluginRender(){this.#xs?.afterRender()}_emitPluginEvent(e,t){this.#xs?.emitPluginEvent(e,t)}_schedulerMergeConfig(){this.#ls.parseLightDomColumns(this),this.#ls.merge(),this.#Zs(),function(e,t,i){const r=Al,n=_l,o=/* @__PURE__ */new Map;function s(e,t,i,r=!1){o.has(e)||o.set(e,{description:t,fields:[],isConfigProperty:r});const n=o.get(e);n.fields.includes(i)||n.fields.push(i)}const l=e.features;function a(e){return!!l&&!1===l[e]}for(const c of n){const i=e[c.property];if((c.isUsed?c.isUsed(i):void 0!==i)&&!Dl(t,c.pluginName)&&!a(c.pluginName)){const e=c.description||`the "${c.property}" ${c.level} property`;s(c.pluginName,e,c.property,!0)}}const d=e.columns;if(d&&d.length>0)for(const c of d)for(const e of r){const i=c[e.property];if((e.isUsed?e.isUsed(i):void 0!==i)&&!Dl(t,e.pluginName)&&!a(e.pluginName)){const t=c.field||"<unknown>",i=e.description||`the "${e.property}" ${e.level} property`;s(e.pluginName,i,t)}}if(o.size>0){const t=Il(e),r=[];for(const[e,{description:i,fields:n,isConfigProperty:s}]of o){const o=n.slice(0,3).join(", ")+(n.length>3?`, ... (${n.length} total)`:""),l=s?`Config uses ${i}`:`Column(s) [${o}] use ${i}`;t?r.push(`${l}, but the required feature is not enabled.\n → Enable it in gridConfig.features (pass \`true\` for defaults, or a config object — see the docs):\n ${Tl(e)}\n features: { ${e}: true }`):r.push(`${l}, but the required plugin is not loaded.\n → Add it to gridConfig.plugins:\n ${Ml(e)}\n plugins: [new ${Ll(e)}Plugin(), ...]\n → Tip: the feature-based API is recommended — ${Tl(e)} then features: { ${e}: true }`)}E([...o.values()].some(e=>e.isConfigProperty)?"TBW002":"TBW001",`Configuration error:\n\n${r.join("\n\n")}\n\nThis validation helps catch misconfigurations early. The properties listed above require their respective plugins to function.`,i)}}(this.#oo,this.#xs?.getPlugins()??[],this.id),function(e,t){const i=[],r=[];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=`[${Ll(n.name)}Plugin] Configuration warning: ${t.message}`;"error"===t.severity?i.push(e):r.push(e)}}}if(r.length>0&&We())for(const n of r)A("TBW004",n,t);i.length>0&&E("TBW003",`Configuration error:\n\n${i.join("\n\n")}`,t)}(this.#xs?.getPlugins()??[],this.id),function(e,t){if(!We())return;const i=new Set(e.map(e=>e.name)),r=/* @__PURE__ */new Set;for(const n of e){const e=n.constructor.manifest;if(e?.incompatibleWith)for(const o of e.incompatibleWith)if(i.has(o.name)){const e=[n.name,o.name].sort().join("↔");if(r.has(e))continue;r.add(e),A("TBW022",`${Ll(n.name)}Plugin and ${Ll(o.name)}Plugin are both loaded, but they are currently incompatible.\n\n → ${o.reason}\n\n Consider removing one of these plugins to avoid unexpected behavior.`,t)}}}(this.#xs?.getPlugins()??[],this.id),this.#yl(),this.#Os=[...this._columns]}_schedulerProcessColumns(){this.#wl()}_schedulerProcessRows(){this.#vl()}_schedulerRenderHeader(){zs(this)}_schedulerUpdateTemplate(){Ls(this)}_schedulerAfterRender(){this.#xs?.afterRender(),this.#Ws(),this._virtualization.enabled&&this._virtualization.totalHeightEl&&queueMicrotask(()=>{if(!this._virtualization.totalHeightEl)return;const e=this.#Es.calculateTotalSpacerHeight(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`}),"fixed"!==this.#oo.fitMode||this.__didInitialAutoSize||(this.__didInitialAutoSize=!0,Ts(this)),this._restoreFocusAfterRender&&(this._restoreFocusAfterRender=!1,at(this)),this.#Es.afterRenderRowHeights(),this.#Ls&&this.#$s()}get _schedulerIsConnected(){return this.isConnected&&this.#as}get _hostElement(){return this}get _renderRoot(){return this.#ns}_emit(e,t){this.#dl(e,t)}get _accordionIcons(){return{expand:this.#oo?.icons?.expand??p.expand,collapse:this.#oo?.icons?.collapse??p.collapse}}_pluginShellContributions(){return{toolPanels:(this.#xs?.getToolPanels()??[]).map(e=>e.panel),headerContents:(this.#xs?.getHeaderContents()??[]).map(e=>e.content)}}_clearRowPool(){const e=this.__frameworkAdapter,t=e?.releaseCell;if(t){e?.beginBatch?.(this);try{for(let i=0;i<this._rowPool.length;i++){const r=this._rowPool[i].children;for(let i=0;i<r.length;i++){const n=r[i];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.#ol()}_applyAnimationConfig(e){const t={...g,...e.animation},i=t.mode??"reduced-motion";let r=1;!1===i||"off"===i?r=0:!0!==i&&"on"!==i||(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 i?i?"on":"off":i}#yl(){!function(e,t,i){if(!t)return!1;let r=!1;const n=i?.gridAriaLabelledBy,o=n?void 0:function(e){const t=e?.gridAriaLabel;return t||(e?.shell?.header?.title??void 0)}(i);n!==e.ariaLabelledBy&&(e.ariaLabelledBy=n,n?t.setAttribute("aria-labelledby",n):t.removeAttribute("aria-labelledby"),r=!0),o!==e.ariaLabel&&(e.ariaLabel=o,o?t.setAttribute("aria-label",o):t.removeAttribute("aria-label"),r=!0);const s=i?.gridAriaDescribedBy;s!==e.ariaDescribedBy&&(e.ariaDescribedBy=s,s?t.setAttribute("aria-describedby",s):t.removeAttribute("aria-describedby"),r=!0);const l=i?.gridAriaRoleDescription;l!==e.ariaRoleDescription&&(e.ariaRoleDescription=l,l?t.setAttribute("aria-roledescription",l):t.removeAttribute("aria-roledescription"),r=!0)}(this.#cl,this.__rowsBodyEl,this.#oo)}#$s(){const e=this.querySelector(".tbw-grid-root");var t;e&&(this.#Ls?(this.#Fs||(this.#Fs=ui(this.#oo?.loadingRenderer)),function(e,t){e.appendChild(t)}(e,this.#Fs)):(t=this.#Fs,t?.remove()))}#Ws(){Us(this.querySelector(".tbw-grid-root"),this.#Ls,this._rows.length,this.#ss,this.#oo?.emptyRenderer,this.#oo?.emptyOverlay??"rows",this.#Hs,this)}#Bs(e,t){this.#ml();const i=this.#Gs.get(e);if(!i)return;const r=this.findRenderedRowElement?.(i.index);r&&hi(r,t)}#Vs(e,t,i){this.#ml();const r=this.#Gs.get(e);if(!r)return;const n=this.findRenderedRowElement?.(r.index);if(!n)return;const o=this._visibleColumns.findIndex(e=>e.field===t);if(o<0)return;const s=n.children[o];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,i)}#ol(){if(this.isConnected&&this._headerRowEl&&this._bodyEl){if(this.#ls.parseLightDomColumns(this),this.#co){const e=this.#co;this.#co=void 0,this.#ls.merge();const t=this.#xs?.getAll()??[];this.#ls.applyState(e,t)}this._bodyEl&&(this._bodyEl.style.display="",this._bodyEl.style.gridTemplateColumns=""),this.#us.requestPhase(Ns.FULL,"setup")}}#ll(e){const t=this._virtualization.container,i=this.#Ms,r=i?.scrollLeft??0,n=t?.scrollHeight??0,o=i?.scrollWidth??0,s=t?.clientHeight??0,l=i?.clientWidth??0;if(this.refreshVirtualWindow(!1)&&this.#xs?.onScrollRender(),this._virtualization.variableHeights&&(this.#ms&&clearTimeout(this.#ms),this.#ms=window.setTimeout(()=>{this.#ms=0,this.#Es.measureRenderedRowHeights(this._virtualization.start,this._virtualization.end)},100)),this.#fs){const t=this.#Cs;t.scrollTop=e,t.scrollLeft=r,t.scrollHeight=n,t.scrollWidth=o,t.clientHeight=s,t.clientWidth=l,this.#xs?.onScroll(t)}this.#dl("tbw-scroll",{scrollTop:e,scrollHeight:n,clientHeight:s,direction:"vertical"})}findHeaderRow(){return this.#ns.querySelector(".header-row")}findRenderedRowElement(e){const t=this._virtualization,i=e-t.start;return i>=0&&i<this._rowPool.length&&i<t.end-t.start?this._rowPool[i]:null}_dispatchCellClick(e,t,i,r){const n=this._rows[t],o=this._visibleColumns[i];if(!n||!o)return!1;const l=o.field,a=s(n,l),d=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,composed:!0,detail:{rowIndex:t,colIndex:i,column:o,field:l,value:a,row:n,cellEl:r,trigger:"pointer",originalEvent:e}});if(this.dispatchEvent(d),d.defaultPrevented)return!0;const c={row:n,rowIndex:t,colIndex:i,column:o,field:l,value:a,cellEl:r,originalEvent:e},u=this.#xs?.onCellClick(c)??!1;return this.#dl("cell-click",c),u}_dispatchRowClick(e,t,i,r){if(!i)return!1;const n={rowIndex:t,row:i,rowEl:r,originalEvent:e},o=this.#xs?.onRowClick(n)??!1;return this.#dl("row-click",n),o}_dispatchHeaderClick(e,t,i){if(!t)return!1;const r={colIndex:this._columns.indexOf(t),field:t.field,column:t,headerEl:i,originalEvent:e};return this.#xs?.onHeaderClick(r)??!1}_dispatchKeyDown(e){return this.#xs?.onKeyDown(e)??!1}_getHorizontalScrollOffsets(e,t){return this.#xs?.getHorizontalScrollOffsets(e,t)??{left:0,right:0}}_getVerticalScrollOffsets(e){return this.#xs?.getVerticalScrollOffsets(e)??{top:0,bottom:0}}query(e,t){return this.#xs?.queryPlugins({type:e,context:t})??[]}_dispatchCellMouseDown(e){return this.#xs?.onCellMouseDown(e)??!1}_dispatchCellMouseMove(e){this.#xs?.onCellMouseMove(e)}_dispatchCellMouseUp(e){this.#xs?.onCellMouseUp(e)}_afterCellRender(e){this.#xs?.afterCellRender(e)}_hasAfterCellRenderHook(){return this.#xs?.hasAfterCellRenderHook()??!1}_afterRowRender(e){this.#xs?.afterRowRender(e)}_hasAfterRowRenderHook(){return this.#xs?.hasAfterRowRenderHook()??!1}async ready(){return this.#Bn}async forceLayout(){return 0===this.#us.pendingPhase&&this.#us.requestPhase(Ns.FULL,"forceLayout"),this.#us.whenReady()}async getConfig(){return Object.freeze({...this.#oo||{}})}getRowId(e){return function(e,t,i){const r=cl(e,i);return void 0===r&&E("TBW040",'Cannot determine row ID. Configure getRowId in gridConfig or ensure rows have an "id" property.',t),r}(e,this.id,this.#oo.getRowId)}getRow(e){return this.#_s.getRow(e)}_getRowEntry(e){return this.#ml(),this.#Gs.get(e)}_getSourceRowEntry(e){const t=this._getRowEntry(e);if(t)return t;const i=this.#oo.getRowId,r=this.#ss;for(let n=0;n<r.length;n++)if(cl(r[n],i)===e)return{row:r[n],index:-1}}updateRow(e,t,i="api"){this.#_s.updateRow(e,t,i)}updateRows(e,t="api"){this.#_s.updateRows(e,t)}animateRow(e,t){return dl(this,e,t)}animateRows(e,t){return function(e,t,i){return Promise.all(t.map(t=>dl(e,t,i))).then(e=>e.filter(Boolean).length)}(this,e,t)}animateRowById(e,t){return function(e,t,i){const r=e._rows??[],n=e.getRowId;if(!n)return Promise.resolve(!1);const o=r.findIndex(e=>{if(null==e)return!1;try{return n(e)===t}catch{return!1}});return o<0?Promise.resolve(!1):dl(e,o,i)}(this,e,t)}async insertRow(e,t,i=!0){return this.#_s.insertRow(e,t,i)}async removeRow(e,t=!0){return this.#_s.removeRow(e,t)}async applyTransaction(e,t=!0){return this.#_s.applyTransaction(e,t)}applyTransactionAsync(e){return this.#_s.applyTransactionAsync(e)}focusCell(e,t){this.#As.focusCell(e,t)}get focusedCell(){return this.#As.focusedCell}scrollToRow(e,t){this.#As.scrollToRow(e,t)}scrollToRowById(e,t){this.#As.scrollToRowById(e,t)}setColumnVisible(e,t){const i=this.#ls.setColumnVisible(e,t);return i&&this.requestStateChange(),i}toggleColumnVisibility(e){const t=this.#ls.toggleColumnVisibility(e);return t&&this.requestStateChange(),t}isColumnVisible(e){return this.#ls.isColumnVisible(e)}showAllColumns(){this.#ls.showAllColumns(),this.requestStateChange()}getAllColumns(){return this.#ls.getAllColumns()}setColumnOrder(e){this.#ls.setColumnOrder(e),this.requestStateChange()}getColumnOrder(){return this.#ls.getColumnOrder()}getColumnState(){const e=this.#xs?.getAll()??[];return this.#ls.collectState(e)}get columnState(){return this.getColumnState()}applyColumnState(e){e&&(this.#os?this.#Cl(e):(this.#co=e,this.#ls.initialColumnState=e))}#Cl(e){const t=this._columns,i=this._sortState,r=this.#xs?.getAll()??[];if(this.#ls.applyState(e,r),!e.columns.some(e=>void 0!==e.sort)&&this.#xl(t,i))return this.#Ns=void 0,Ls(this),void this.#us.requestPhase(Ns.STYLE,"column-width");this.#ol()}#xl(e,t){const i=this._columns,r=this._sortState;if(t?.field!==r?.field||t?.direction!==r?.direction)return!1;if(e.length!==i.length)return!1;for(let n=0;n<e.length;n++){const t=e[n],r=i[n];if(t.field!==r.field)return!1;if(!!t.hidden!=!!r.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=[],zs(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 i=this._columns.find(t=>t.field===e);i&&(t?(this._sortState||(this.__originalOrder=this._rows.slice()),Fn(this,i,"desc"===t?-1:1)):Pn(this,i))}requestStateChange(){const e=this.#xs?.getAll()??[];this.#ls.requestStateChange(e)}resetColumnState(){this.#co=void 0,this.__originalOrder=[];const e=this.#xs?.getAll()??[];this.#ls.resetState(e),this.#ls.merge(),this.#ol()}get defaultRowHeight(){return this._virtualization.rowHeight}#Rl=!1;refreshShellHeader(){this.#Rl||(this.#Rl=!0,queueMicrotask(()=>{this.#Rl=!1,this.isConnected&&(this.#zr(),this.#ls.markSourcesChanged(),this.#ls.merge(),this.#xs?.beforeStructuralRender(),this.#xs?.afterStructuralRender(),this.#Sl())}))}#Sl(){const e=this.#nl();this._resizeController?.dispose(),this._resizeController=nl(this),this.#Xs(e),this.#us.requestPhase(Ns.COLUMNS,"shellRefresh")}#rl=/* @__PURE__ */new Map;registerStyles(e,t){let i=this.#rl.get(e);i||(i=new CSSStyleSheet,this.#rl.set(e,i)),i.replaceSync(t),this.#El()}unregisterStyles(e){this.#rl.delete(e)&&this.#El()}getRegisteredStyles(){return Array.from(this.#rl.keys())}#El(){const e=Array.from(this.#rl.values()),t=document.adoptedStyleSheets.filter(e=>!Array.from(this.#rl.values()).includes(e));document.adoptedStyleSheets=[...t,...e]}registerExternalFocusContainer(e){this.#As.registerExternalFocusContainer(e)}unregisterExternalFocusContainer(e){this.#As.unregisterExternalFocusContainer(e)}containsFocus(e){return this.#As.containsFocus(e)}get lastFocusedElement(){return this.#As.lastFocusedElement}restoreLastFocus(){return this.#As.restoreLastFocus()}#zr(){this.#xs?.parseLightDom()}#il(){const e=()=>{this.#ls.clearLightDomCache(),this.#ol()};this.#ls.registerLightDomHandler("tbw-grid-column",e),this.#ls.registerLightDomHandler("tbw-grid-detail",e),this.#ls.registerLightDomHandler("tbw-grid-type",e),this.#ls.observeLightDOM(this)}refreshColumns(){this.#ls.clearLightDomCache(),Vo(this),this.#ls.parseLightDomColumns(this),this.#xs?.syncLightDom(),this.#us.requestPhase(Ns.COLUMNS,"refreshColumns")}#al(){this.#Es.updateCachedGeometry()}refreshVirtualWindow(e=!1,t=!1){return this.#Es.refreshVirtualWindow(e,t)}invalidateRowHeight(e,t){this.#Es.invalidateRowHeight(e,t)}#el(){this.#zr(),this.#ls.markSourcesChanged(),this.#ls.merge(),function(e){const t=[];for(let i=e.firstChild;i;i=i.nextSibling)1===i.nodeType&&i.classList.contains(Ge.ROOT)||t.push(i);e.replaceChildren();for(const i of t)e.appendChild(i);e.appendChild(Xn({hasShell:!1}))}(this.#ns),this.#xs?.afterStructuralRender()}};!function(){const e=Hl.tagName,t=customElements.get(e);if(!t)return customElements.define(e,Hl),void(Hl.activeTag=e);if(t.version===Hl.version)return void(Hl.activeTag=e);const i=`${e}-v${Hl.version.replace(/[^a-zA-Z0-9]+/g,"-").toLowerCase()}`;customElements.get(i)||customElements.define(i,Hl),Hl.activeTag=i}(),globalThis.DataGridElement||(globalThis.DataGridElement=Hl);var Gl=["canHandle","createRenderer","createEditor","processConfig","getTypeDefault","createToolPanelRenderer","parseDetailElement","parseResponsiveCardElement","releaseCell","unmount","beginBatch","endBatch"];function zl(e){const t=document.createElement(Hl.activeTag);return e&&(t.gridConfig=e),t}function Ol(e,t,i){let r=document,n=!1;return"boolean"==typeof t?n=t:t&&(r=t,n=!!i),n?customElements.whenDefined(Hl.activeTag).then(()=>r.querySelector(e)):r.querySelector(e)}export{Nt as BLANK_FILTER_VALUE,Y as BaseGridPlugin,Gl as CORE_CONSUMED_ADAPTER_METHODS,ae as ClipboardPlugin,As as ColumnInferenceModeEnum,Ee as ColumnVirtualizationPlugin,Fe as ContextMenuPlugin,h as DEFAULT_A11Y_MESSAGES,g as DEFAULT_ANIMATION_CONFIG,p as DEFAULT_GRID_ICONS,Hl as DataGridElement,Hl as GridElement,At as EditingPlugin,Ot as ExportPlugin,Qt as FilteringPlugin,Es as FitModeEnum,Ne as GridCSSVars,Ge as GridClasses,ze as GridDataAttrs,Oe as GridSelectors,ni as GroupingColumnsPlugin,wi as GroupingRowsPlugin,Je as MAX_ELEMENT_HEIGHT_PX,vi as MasterDetailPlugin,Si as MultiSortPlugin,Hi as PinnedColumnsPlugin,Ui as PinnedRowsPlugin,xr as PivotPlugin,Fl as PluginManager,Ar as PrintPlugin,Xr as ROW_DRAG_HANDLE_FIELD,Ns as RenderPhase,Ir as ReorderPlugin,zr as ResponsivePlugin,rn as RowDragDropPlugin,An as SelectionPlugin,qn as ServerSidePlugin,Ro as StickyRowsPlugin,To as TooltipPlugin,zo as TreePlugin,ms as UndoRedoPlugin,ws as VisibilityPlugin,Rs as applyColumnDefaults,kn as builtInSort,et as computeScrollMapping,zl as createGrid,_n as defaultComparator,ut as defaultEditorFor,oe as defaultPasteHandler,ne as emitPasteRejected,Wi as filteredCountPanel,it as fromVirtualScrollTop,n as getByPath,Ss as hasColumnShorthands,u as invalidateAccessorCache,xs as normalizeColumns,Cs as parseColumnShorthand,r as parseFieldPath,Sr as printGridIsolated,Ol as queryGrid,s as readCellField,c as resolveCellValue,re as resolveColumnPaste,qi as rowCountPanel,$i as selectedCountPanel,o as setByPath,de as setFeatureResolver,tt as toVirtualScrollTop,d as writeCellField};
2
2
  //# sourceMappingURL=all.js.map