@kanunilabs/datagrid 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,5 +9,5 @@ or serve the worker as a file and point at it:
9
9
  Next.js: copy datagrid.worker.js from node_modules/@kanunilabs/datagrid-core/dist/ into public/, then <DataGrid worker={{ url: '/datagrid.worker.js' }} />
10
10
  Silence this by turning the worker off on purpose: <DataGrid worker={{ enabled: false }} />
11
11
  Cause:`,e))}var us=1e5,rs=12,ns=2e3,is=500,pi=2e5;function mi(){return new Promise(e=>{if(typeof MessageChannel>"u"){setTimeout(e,0);return}let t=new MessageChannel;t.port1.onmessage=()=>{t.port1.close(),e()},t.port2.postMessage(void 0)})}var Ge=class extends Error{constructor(e){super(`[datagrid] ${e}`),this.name="WorkerRequestAbandoned"}},gu=class extends Error{constructor(){super("[datagrid] compute cancelled"),this.name="WorkerRequestCancelled"}};function as(){return typeof Worker<"u"}function Wi(e,t){if(e){if("nodes"in e){for(let u of e.nodes)Wi(u,t);return}t.add(e.columnId)}}function Ar(e,t){let u=new Set;for(let r of t.sort)u.add(r.columnId);if(Wi(t.filter,u),(t.searchText??"").trim().length>0)for(let r of e.getOrder())e.getState(r)?.visible&&u.add(r);return[...u].filter(r=>e.getState(r)!==void 0)}var pu=class{mode="client";rows;options;fallback;threshold;worker=null;workerBroken=!1;dataVersion=0;encodeToken=0;initializedVersion=-1;encodedColumns=new Set;lastTimings={encodeMs:0,workerMs:0,projectMs:0};getLastTimings(){return this.lastTimings}encodedMeta=new Map;requestCounter=0;pending=new Map;pendingAggregate=new Map;nodeCache=new Ni;constructor(e,t){this.rows=e,this.options=t,this.threshold=t.threshold??es,this.fallback=new Jl(e,{keyGetter:t.keyGetter,locale:t.locale,nodeCache:this.nodeCache})}getTotalCount(){return this.rows.length}setData(e){this.rows=e,this.fallback.setData(e),this.encodedMeta.clear(),this.nodeCache.invalidate(),this.dataVersion++,this.settlePending("data replaced while a worker request was in flight")}patchData(e,t,u){this.rows=e,this.fallback.patchData(e,t,u);let r=this.dataVersion;this.dataVersion++,this.tryPatchWorker(r,t,u),this.settlePending("data replaced while a worker request was in flight")}tryPatchWorker(e,t,u){if(!this.worker||this.workerBroken||!u||this.initializedVersion!==e)return;if(t.length===0){this.postPatch(e,[]);return}let r=[];for(let n of this.encodedColumns){let i=this.encodedMeta.get(n);if(!i)return;let a=i.usesSortValue?l=>u.getSortValue(l,n):l=>u.getCellValue(l,n),s=[];if(i.kind==="numeric"){let l=i.dataType==="date"?Ki:Vi,m=[],c=i.hasSearch?[]:void 0;for(let h of t){let E=a(this.rows[h]);if(Au(E))m.push(Number.NaN),c?.push(null);else{if(!i.hasSearch&&typeof E!="number")return;m.push(l(E)),c?.push(String(E))}s.push(h)}r.push({columnId:n,kind:"numeric",indices:s,numbers:m,labels:c})}else{let l=[];for(let m of t){let c=a(this.rows[m]);l.push(Au(c)?null:String(c)),s.push(m)}r.push({columnId:n,kind:"text",indices:s,labels:l})}}this.postPatch(e,r)}postPatch(e,t){let u={action:"patchRows",gridId:this.options.gridId,fromVersion:e,toVersion:this.dataVersion,patches:t};this.worker.postMessage(u),this.initializedVersion=this.dataVersion}getSourceRows(){return this.rows}usesWorker(){return this.options.enabled!==!1&&!this.workerBroken&&as()&&this.rows.length>=this.threshold}async getRows(e,t){if(!this.usesWorker()||_l(e,t.sort)||typeof t.externalFilter=="function")return this.fallback.compute(e,t);try{let u=performance.now(),r=await this.computeOnWorker(e,t);return this.lastTimings.workerMs=Math.round(performance.now()-u)-this.lastTimings.encodeMs,this.buildResult(r)}catch(u){if(u instanceof Ge||u instanceof gu)throw u;return this.workerBroken=!0,this.teardownWorker(),ts(u,this.options.debugMode===!0),this.fallback.compute(e,t)}}buildResult(e){let t=performance.now(),u=this.nodeCache.project(e,this.rows,this.options.keyGetter);return this.lastTimings.projectMs=Math.round(performance.now()-t),{nodes:u,visibleCount:e.length,totalCount:this.rows.length}}ensureWorker(){if(this.worker)return this.worker;let e=this.options.workerUrl,t=e?new Worker(e,{type:"module"}):new Worker(Xl());return t.onmessage=u=>this.onMessage(u.data),t.onerror=u=>{let r=new Error(`datagrid worker error: ${u.message??"unknown"}`);this.pending.forEach(n=>n.reject(r)),this.pending.clear(),this.pendingAggregate.forEach(n=>n.reject(r)),this.pendingAggregate.clear()},this.worker=t,t}onMessage(e){if(e.action==="result"){if(e.dataVersion!==this.dataVersion)return;let t=this.pending.get(e.requestId);if(!t)return;this.pending.delete(e.requestId),t.resolve(new Uint32Array(e.order))}else if(e.action==="aggregated"){if(e.dataVersion!==this.dataVersion)return;let t=this.pendingAggregate.get(e.requestId);if(!t)return;this.pendingAggregate.delete(e.requestId),t.resolve(e)}else if(e.action==="error"){let t=this.pending.get(e.requestId)??this.pendingAggregate.get(e.requestId);if(!t)return;this.pending.delete(e.requestId),this.pendingAggregate.delete(e.requestId),t.reject(new Error(e.message))}else if(e.action==="progress"){if(e.dataVersion!==this.dataVersion||!this.pending.has(e.requestId))return;this.options.onPhaseProgress?.(e.phase,e.fraction)}else if(e.action==="cancelled"){let t=this.pending.get(e.requestId);if(!t)return;this.pending.delete(e.requestId),t.reject(new gu)}}cancel(){if(this.encodeToken++,!this.worker||this.pending.size===0)return;let e={action:"cancel",gridId:this.options.gridId};this.worker.postMessage(e)}async encodeOne(e,t,u,r,n,i){if(!r)return Ol(this.rows,e,t,u);let a=Hi(this.rows,e,t,u),s=ns;for(;;){let l=performance.now(),m=a.step(s),c=performance.now()-l;if(!m)break;let h=c>0?Math.round(s*rs/c):pi;if(s=Math.min(pi,Math.max(is,h)),await mi(),this.encodeToken!==i)throw new Ge("encode cancelled");n?.(a.done/a.total)}return a.finish()}toWire(e,t,u,r,n){if(this.encodedMeta.set(t,{kind:r.kind,hasSearch:r.kind==="numeric"&&!!r.searchCodes,usesSortValue:u,dataType:e.getDataType(t)}),r.kind==="numeric"){let a={columnId:t,kind:"numeric",buffer:r.values.buffer};return n.push(a.buffer),r.searchCodes&&r.searchDictionary&&(a.searchBuffer=r.searchCodes.buffer,a.searchDictionary=r.searchDictionary,n.push(a.searchBuffer)),a}let i={columnId:t,kind:"text",buffer:r.codes.buffer,dictionary:r.dictionary};return n.push(i.buffer),i}async sendColumns(e,t,u,r,n=!1){let i=this.dataVersion,a=[],s=[],l=this.rows.length>=us&&u.length>0,m=this.encodeToken;for(let h=0;h<u.length;h++){if(l){if(await mi(),this.encodeToken!==m)throw new Ge("encode cancelled");n||this.options.onEncodeProgress?.(h/u.length)}let E=t.getDef(u[h])?.calculateSortValue!=null,g=await this.encodeOne(t,u[h],E,l,n?void 0:w=>this.options.onEncodeProgress?.((h+w)/u.length),m);a.push(this.toWire(t,u[h],E,g,s))}l&&!n&&this.options.onEncodeProgress?.(1);let c=r?{action:"init",gridId:this.options.gridId,dataVersion:i,rowCount:this.rows.length,columns:a}:{action:"addColumns",gridId:this.options.gridId,dataVersion:i,columns:a};if(e.postMessage(c,s),r)this.initializedVersion=i,this.encodedColumns=new Set(u);else for(let h of u)this.encodedColumns.add(h)}async computeOnWorker(e,t){let u=this.ensureWorker(),r=Ar(e,t),n=this.initializedVersion!==this.dataVersion,i=n?r:r.filter(c=>!this.encodedColumns.has(c));if(this.lastTimings={encodeMs:0,workerMs:0,projectMs:0},n||i.length>0){let c=performance.now();if(await this.sendColumns(u,e,i,n),this.lastTimings.encodeMs=Math.round(performance.now()-c),this.initializedVersion!==this.dataVersion)throw new Ge("data replaced while columns were being encoded")}let a=++this.requestCounter,s=e.getOrder().filter(c=>e.getState(c)?.visible),l=new Promise((c,h)=>{this.pending.set(a,{resolve:c,reject:h})}),m={action:"compute",gridId:this.options.gridId,dataVersion:this.dataVersion,requestId:a,sort:t.sort,filter:t.filter,searchText:t.searchText,searchColumns:s,searchLabelHits:$n(yr(e,s,wr(t.searchText))),locale:this.options.locale??"en"};return u.postMessage(m),l}async aggregate(e,t,u){if(!this.usesWorker()||!Ri(u))return null;try{let r=this.ensureWorker(),n=new Set(Ar(e,t));n.add(u.categoryColumnId);for(let g of u.series)n.add(g.columnId);if(this.initializedVersion!==this.dataVersion)return null;let i=[...n].filter(g=>!this.encodedColumns.has(g));if(i.length>0&&(await this.sendColumns(r,e,i,!1,!0),this.initializedVersion!==this.dataVersion))throw new Ge("data replaced while columns were being encoded");let a=++this.requestCounter,s=e.getOrder().filter(g=>e.getState(g)?.visible),l=new Promise((g,w)=>{this.pendingAggregate.set(a,{resolve:g,reject:w})}),m={action:"aggregate",gridId:this.options.gridId,dataVersion:this.dataVersion,requestId:a,filter:t.filter,searchText:t.searchText,searchColumns:s,searchLabelHits:$n(yr(e,s,wr(t.searchText))),locale:this.options.locale??"en",categoryColumnId:u.categoryColumnId,series:u.series.map(g=>({columnId:g.columnId,aggregate:g.aggregate,label:g.label??e.getDef(g.columnId)?.headerName??g.columnId})),maxCategories:u.maxCategories,otherBucket:u.otherBucket,categoryOrder:u.categoryOrder,categoryBucket:u.categoryBucket,otherLabel:u.otherLabel};r.postMessage(m);let c=await l,h=c.categories.length,E=new Float64Array(c.values);return{categories:c.categories,series:u.series.map((g,w)=>({label:c.seriesLabels[w]??g.columnId,columnId:g.columnId,aggregate:g.aggregate,values:E.subarray(w*h,(w+1)*h)})),truncated:c.truncated,otherIndex:c.otherIndex,rowCount:c.rowCount,categoryCount:c.categoryCount,rankingExact:c.rankingExact,bucket:c.bucket,bucketStarts:c.bucketStarts?new Float64Array(c.bucketStarts):void 0,bucketEnds:c.bucketEnds?new Float64Array(c.bucketEnds):void 0}}catch(r){return r instanceof Ge||r instanceof gu||this.options.debugMode&&console.error("[datagrid] worker chart aggregation failed, using main thread:",r),null}}teardownWorker(){if(this.worker){try{let e={action:"dispose",gridId:this.options.gridId};this.worker.postMessage(e)}catch{}this.worker.terminate(),this.worker=null,this.initializedVersion=-1,this.encodedColumns.clear()}}dispose(){this.settlePending("grid disposed while a worker request was in flight"),this.teardownWorker(),this.rows=[]}settlePending(e){if(this.pending.size===0&&this.pendingAggregate.size===0)return;let t=new Ge(e);this.pending.forEach(u=>u.reject(t)),this.pending.clear(),this.pendingAggregate.forEach(u=>u.reject(t)),this.pendingAggregate.clear()}};var os=class{mode;selected=new Set;allMatching=!1;anchor=null;constructor(e="none"){this.mode=e}getMode(){return this.mode}setMode(e){if(e===this.mode)return!1;if(this.mode=e,e==="none")this.clear();else if(e==="single"&&this.allMatching)this.clear();else if(e==="single"&&this.selected.size>1){let t=this.selected.values().next().value;this.selected=new Set([t])}return!0}isSelected(e){return this.allMatching?!this.selected.has(e):this.selected.has(e)}getSelectedKeys(){return[...this.selected]}getSelectionDescriptor(){return{allMatching:this.allMatching,keys:[...this.selected]}}isAllMatching(){return this.allMatching}getSelectedCount(e){return this.allMatching?e===void 0?0:Math.max(0,e-this.selected.size):this.selected.size}selectAllMatching(){return this.mode!=="multiple"||this.allMatching&&this.selected.size===0?!1:(this.allMatching=!0,this.selected=new Set,!0)}getAnchor(){return this.anchor}select(e){return this.mode==="none"||!this.allMatching&&this.selected.size===1&&this.selected.has(e)?!1:(this.allMatching=!1,this.selected=new Set([e]),this.anchor=e,!0)}toggle(e){return this.mode==="none"?!1:this.isSelected(e)?(this.allMatching?this.selected.add(e):this.selected.delete(e),!0):(this.allMatching?this.selected.delete(e):this.mode==="single"?this.selected=new Set([e]):this.selected.add(e),this.anchor=e,!0)}selectRange(e,t,u=!1){if(this.mode!=="multiple")return this.select(e);let r=this.anchor??e,n=t.indexOf(r),i=t.indexOf(e);if(n===-1||i===-1)return this.select(e);let a=Math.min(n,i),s=Math.max(n,i),l=u&&!this.allMatching?new Set(this.selected):new Set;for(let m=a;m<=s;m++)l.add(t[m]);return!this.allMatching&&cr(l,this.selected)?!1:(this.allMatching=!1,this.selected=l,!0)}selectAll(e){if(this.mode!=="multiple")return!1;let t=new Set(e);return!this.allMatching&&cr(t,this.selected)?!1:(this.allMatching=!1,this.selected=t,this.anchor=e[0]??null,!0)}clear(){return!this.allMatching&&this.selected.size===0?!1:(this.allMatching=!1,this.selected=new Set,!0)}setSelectedKeys(e){if(this.mode==="none")return!1;let t=new Set(this.mode==="single"?e.slice(0,1):e);return!this.allMatching&&cr(t,this.selected)?!1:(this.allMatching=!1,this.selected=t,this.anchor=t.size>0?[...t][t.size-1]:null,!0)}handleRowClick(e,t,u){if(this.mode==="none")return!1;let r=!!(t.ctrlKey||t.metaKey);return t.shiftKey&&this.mode==="multiple"?this.selectRange(e,u,r):r?this.toggle(e):this.select(e)}retainKeys(e){let t=!1;for(let u of this.selected)e.has(u)||(this.selected.delete(u),t=!0);return this.anchor!==null&&!e.has(this.anchor)&&(this.anchor=null),t}};function cr(e,t){if(e.size!==t.size)return!1;for(let u of e)if(!t.has(u))return!1;return!0}function ls(e){return{count:e.length,keyAt:t=>e[t],indexOf:t=>e.indexOf(t)}}function Xe(e,t,u){return e<t?t:e>u?u:e}function hr(e){return e.rows??ls(e.rowKeys??[])}var ss=class{position=null;get(){return this.position}isFocused(e,t){return this.position?.rowKey===e&&this.position?.columnId===t}set(e){return e?.rowKey===this.position?.rowKey&&e?.columnId===this.position?.columnId?!1:(this.position=e,!0)}clear(){return this.set(null)}getIndices(e){if(!this.position)return null;let t=hr(e).indexOf(this.position.rowKey),u=e.columnIds.indexOf(this.position.columnId);return t===-1||u===-1?null:{rowIndex:t,columnIndex:u}}move(e,t){let{columnIds:u}=t,r=hr(t);if(r.count===0||u.length===0)return!1;let n=Math.max(1,t.pageSize??10),i=this.getIndices(t);if(!i){let E=r.keyAt(0);return E===void 0?!1:this.set({rowKey:E,columnId:u[0]})}let a=r.count-1,s=u.length-1,{rowIndex:l,columnIndex:m}=i,c=l;switch(e){case"up":l=Xe(l-1,0,a);break;case"down":l=Xe(l+1,0,a);break;case"left":m=Xe(m-1,0,s);break;case"right":m=Xe(m+1,0,s);break;case"pageUp":l=Xe(l-n,0,a);break;case"pageDown":l=Xe(l+n,0,a);break;case"rowStart":m=0;break;case"rowEnd":m=s;break;case"gridStart":l=0,m=0;break;case"gridEnd":l=a,m=s;break}if(t.isFocusable){let E=l>c?1:l<c?-1:0;l=this.skipUnfocusable(r,l,E,t.isFocusable,c)}let h=r.keyAt(l);return h===void 0?!1:this.set({rowKey:h,columnId:u[m]})}skipUnfocusable(e,t,u,r,n){if(r(e.keyAt(t),t))return t;let i=u===0?-1:u;for(let a=t+i;a>=0&&a<e.count;a+=i)if(r(e.keyAt(a),a))return a;for(let a=t-i;a>=0&&a<e.count;a-=i)if(r(e.keyAt(a),a))return a;return n}reconcile(e,t){if(!this.position)return!1;let{columnIds:u}=e,r=hr(e);if(r.count===0||u.length===0)return this.clear();let n=r.indexOf(this.position.rowKey)!==-1,i=u.includes(this.position.columnId)?this.position.columnId:u[0];if(n)return this.set({rowKey:this.position.rowKey,columnId:i});let a=Xe(t??0,0,r.count-1),s=r.keyAt(a);return s===void 0?this.clear():this.set({rowKey:s,columnId:i})}},ce=(e,t=!0)=>({type:e,preventDefault:t});function Ui(e){let t=!!(e.ctrlKey||e.metaKey),u=!!e.shiftKey;switch(e.key){case"ArrowUp":return ce(u?"extendSelectionUp":"up");case"ArrowDown":return ce(u?"extendSelectionDown":"down");case"ArrowLeft":return ce("left");case"ArrowRight":return ce("right");case"PageUp":return ce("pageUp");case"PageDown":return ce("pageDown");case"Home":return ce(t?"gridStart":"rowStart");case"End":return ce(t?"gridEnd":"rowEnd");case" ":case"Spacebar":return ce("toggleSelection");case"Enter":return ce("activate");case"Escape":return ce("clearSelection");case"a":case"A":return t?ce("selectAll"):null;case"c":case"C":return t?ce("copy",!1):null;default:return null}}function ds(e){return e==="up"||e==="down"||e==="left"||e==="right"||e==="pageUp"||e==="pageDown"||e==="rowStart"||e==="rowEnd"||e==="gridStart"||e==="gridEnd"}var cs="__dg_";function hs(e){return e.startsWith(cs)}function ps(e){return e.filter(t=>!hs(t))}function br(e){return e.replace(/[\t\r\n]+/g," ")}function ms(e,t,u){let r=u.getCellValue(e.data,t);return br(yu(u.getDef(t),r,e.data))}function gs(e,t,u={}){let r=u.columnIds??ps(t.runtime().map(i=>i.state.id));if(r.length===0)return"";let n=[];if(u.includeGroupHeaders){let i=r.map(s=>Ne(t.getDef(s))),a=i.reduce((s,l)=>Math.max(s,l.length),0);for(let s=0;s<a;s++){let l=null;n.push(i.map(m=>{let c=m[s]??"",h=c===""?null:m.slice(0,s+1).join("\0"),E=h!==null&&h===l;return l=h,E?"":br(c)}).join(" "))}}(u.includeHeaders||u.includeGroupHeaders)&&n.push(r.map(i=>br(t.getDef(i)?.headerName??t.getDef(i)?.field??i)).join(" "));for(let i of e)et(i)&&n.push(r.map(a=>ms(i,a,t)).join(" "));return n.join(`
12
- `)}var fs=5,Cs=35e5,ws=16e6,ys=4,Es=3;function gi(e){let t=[],u=[],r=[];for(let g of e)g.state.pinned==="left"?t.push(g):g.state.pinned==="right"?r.push(g):u.push(g);let n=[],i=0;for(let g of t)n.push(i),i+=g.state.width;let a=[0],s=0;for(let g of u)s+=g.state.width,a.push(s);let l=new Array(u.length).fill(null),m=[],c=i;for(let g=0;g<u.length;g++)u[g].state.pinned==="sticky"&&(l[g]=c,c+=u[g].state.width,m.push(g));let h=new Array(r.length),E=0;for(let g=r.length-1;g>=0;g--)h[g]=E,E+=r[g].state.width;return{left:t,center:u,right:r,leftWidth:i,centerWidth:s,rightWidth:E,totalWidth:i+s+E,centerOffsets:a,leftOffsets:n,rightOffsets:h,centerStickyOffsets:l,stickyIndices:m}}var As={left:[],center:[],right:[],leftWidth:0,centerWidth:0,rightWidth:0,totalWidth:0,centerOffsets:[0],leftOffsets:[],rightOffsets:[],centerStickyOffsets:[],stickyIndices:[]};function fi(e,t,u){let r=0,n=u-1,i=0;for(;r<=n;){let a=r+n>>1;e[a]<=t?(i=a,r=a+1):n=a-1}return i}function pr(e,t,u){return e<t?t:e>u?u:e}var bs=class{rowCount=0;heights;overscanY;overscanX;viewportWidth=0;viewportHeight=0;scrollTop=0;scrollLeft=0;maxScrollOffset=Cs;leadWidth=0;headerOffset=0;footerOffset=0;maxCanvasHeight=ws;layout=As;window;constructor(e={}){this.heights=new Wo(e.rowHeight??28),this.overscanY=Math.max(0,e.overscanY??fs),this.overscanX=Math.max(0,e.overscanX??Es),this.window=this.compute()}setRowCount(e){let t=Math.max(0,e|0);return t===this.rowCount?!1:(this.rowCount=t,this.commit())}setRowHeight(e){return this.heights.setBase(e)?this.commit():!1}setRowHeights(e){return this.heights.setOverrides(e)?this.commit():!1}getRowHeightAt(e){return this.heights.heightOf(e)}getRowOffset(e){return this.heights.offsetOf(e)}hasUniformRows(){return this.heights.isUniform()}setMaxScrollOffset(e){if(!Number.isFinite(e)||e<=0)return!1;let t=Math.floor(e);return t===this.maxScrollOffset?!1:(this.maxScrollOffset=t,this.commit())}setLeadWidth(e){return this.leadWidth=Math.max(0,e),!1}setChromeOffsets(e,t){let u=Number.isFinite(e)&&e>0?Math.round(e):0,r=Number.isFinite(t)&&t>0?Math.round(t):0;return this.headerOffset=u,this.footerOffset=r,!1}setMaxCanvasHeight(e){if(!Number.isFinite(e)||e<=0)return!1;let t=Math.floor(e);return t===this.maxCanvasHeight?!1:(this.maxCanvasHeight=t,this.commit())}setViewportSize(e,t){let u=Math.max(0,e),r=Math.max(0,t);return u===this.viewportWidth&&r===this.viewportHeight?!1:(this.viewportWidth=u,this.viewportHeight=r,this.commit())}setScroll(e,t){let u=Math.max(0,e),r=Math.max(0,t);return u===this.scrollTop&&r===this.scrollLeft?!1:(this.scrollTop=u,this.scrollLeft=r,this.commit())}setColumnLayout(e){return this.layout=e,this.commit()}getWindow(){return this.window}getColumnLayout(){return this.layout}getRowHeight(){return this.heights.getBase()}getScroll(){return{scrollTop:this.scrollTop,scrollLeft:this.scrollLeft}}getVisibleCenterColumns(){return this.layout.center.slice(this.window.columns.start,this.window.columns.end)}ensureVisible(e,t){let u={};if(e>=0&&e<this.rowCount){let l=this.heights.offsetOf(e),m=l+this.heights.heightOf(e),c=this.virtualTop();l<c?u.scrollTop=this.physicalTop(l,Math.floor):m>c+this.viewportHeight&&(u.scrollTop=this.physicalTop(m-this.viewportHeight,Math.ceil)+this.headerOffset+this.footerOffset)}let{center:r,centerOffsets:n,leftWidth:i,rightWidth:a,stickyIndices:s}=this.layout;if(t!=null&&t>=0&&t<r.length){let l=Math.max(0,this.viewportWidth-this.leadWidth-i-a),m=0;for(let E of s)E<t&&(m+=r[E].state.width);let c=n[t],h=n[t+1];s.includes(t)&&c<this.scrollLeft||(c<this.scrollLeft+m?u.scrollLeft=Math.max(0,c-m):h>this.scrollLeft+l&&(u.scrollLeft=h-l))}return u.scrollTop===void 0&&u.scrollLeft===void 0?null:u}commit(){let e=this.compute(),t=this.window,u=e.rows.start!==t.rows.start||e.rows.end!==t.rows.end||e.rows.offsetY!==t.rows.offsetY||e.rows.totalHeight!==t.rows.totalHeight||e.rows.contentHeight!==t.rows.contentHeight||e.columns.start!==t.columns.start||e.columns.end!==t.columns.end||e.columns.offsetX!==t.columns.offsetX;return u&&(this.window=e),u}compute(){return{rows:this.computeRowWindow(),columns:this.computeColumnWindow()}}scrollGeometry(){let e=this.heights.totalHeight(this.rowCount),t=Math.min(e,this.maxCanvasHeight,this.maxScrollOffset+this.viewportHeight);return{canvas:t,physicalRange:t-this.viewportHeight,virtualRange:e-this.viewportHeight}}virtualTop(){let{physicalRange:e,virtualRange:t}=this.scrollGeometry();return e<=0||t<=e?this.scrollTop:this.scrollTop>=e-ys?t+this.footerOffset:this.scrollTop*t/e}physicalTop(e,t=Math.round){let{physicalRange:u,virtualRange:r}=this.scrollGeometry();return u<=0||r<=u?e:pr(t(e*u/r),0,u)}computeRowWindow(){let e=this.heights.totalHeight(this.rowCount),{canvas:t}=this.scrollGeometry(),u=t<e;if(this.rowCount===0||this.viewportHeight===0)return{start:0,end:0,offsetY:0,totalHeight:t,contentHeight:e,compressed:u};let r=this.virtualTop(),n=this.rowCount-1,i=pr(this.heights.indexAt(r),0,n),a=pr(this.heights.indexAt(r+this.viewportHeight-1),0,n),s=Math.max(0,i-this.overscanY),l=Math.min(this.rowCount,a+1+this.overscanY),m=this.heights.offsetOf(s)-(r-this.scrollTop);if(u){let c=m+this.heights.offsetOf(l)-this.heights.offsetOf(s);c>t&&(m-=c-t)}return{start:s,end:l,offsetY:m,totalHeight:t,contentHeight:e,compressed:u}}computeColumnWindow(){let{center:e,centerOffsets:t,leftWidth:u,rightWidth:r}=this.layout,n=e.length;if(n===0||this.viewportWidth===0)return{start:0,end:n===0?0:n,offsetX:0};let i=Math.max(0,this.viewportWidth-u-r);if(i===0)return{start:0,end:0,offsetX:0};let a=this.scrollLeft,s=this.scrollLeft+i,l=fi(t,a,n),m=fi(t,s-1,n),c=Math.max(0,l-this.overscanX),h=Math.min(n,m+1+this.overscanX);return{start:c,end:h,offsetX:t[c]}}};function vs(e){let{getParentKey:t,parentField:u}=e;if(t)return n=>t(n)??null;let r=u??"parentId";return n=>n[r]??null}function xs(e,t,u){let r=new Map,n=new Map,i=new Map;for(let l=0;l<e.length;l++)i.set(t(e[l]),l);for(let l=0;l<e.length;l++){let m=t(e[l]),c=u(e[l]);c!==null&&(c===m||!i.has(c))&&(c=null),n.set(m,c);let h=r.get(c);h?h.push(m):r.set(c,[m])}let a=new Set;for(let l of n.keys()){if(a.has(l))continue;let m=new Set,c=l;for(;c!==null&&!a.has(c);){if(m.has(c)){let h=n.get(c)??null;n.set(c,null);let E=r.get(h);if(E){let w=E.indexOf(c);w>=0&&E.splice(w,1)}let g=r.get(null);g?g.push(c):r.set(null,[c]);break}m.add(c),c=n.get(c)??null}for(let h of m)a.add(h)}let s=r.get(null);return s&&s.sort((l,m)=>(i.get(l)??0)-(i.get(m)??0)),{childrenOf:r,parentOf:n,sourceIndexOf:i}}function Ds(e,t){let{index:u,sourceRows:r,isExpanded:n}=t,i=new Map,a=new Map;for(let g=0;g<e.length;g++)i.set(e[g].key,e[g]),a.set(e[g].key,g);let s=e.length!==u.sourceIndexOf.size,l=new Set(i.keys());if(s)for(let g of i.keys()){let w=u.parentOf.get(g)??null;for(;w!==null&&!l.has(w);)l.add(w),w=u.parentOf.get(w)??null}let m=g=>{let w=g.filter(D=>l.has(D));return w.sort((D,S)=>{let T=a.get(D),N=a.get(S);return T!==void 0&&N!==void 0?T-N:T!==void 0?-1:N!==void 0?1:(u.sourceIndexOf.get(D)??0)-(u.sourceIndexOf.get(S)??0)}),w},c=[],h=[],E=m(u.childrenOf.get(null)??[]);for(let g=E.length-1;g>=0;g--)h.push({key:E[g],depth:0});for(;h.length>0;){let{key:g,depth:w}=h.pop(),D=m(u.childrenOf.get(g)??[]),S=D.length>0,T=S&&(s||n(g)),N=i.get(g),O=u.sourceIndexOf.get(g)??-1,z={depth:w,hasChildren:S,expanded:T,ancestorOnly:N===void 0};if(c.push(N?{...N,tree:z}:{kind:"data",key:g,sourceIndex:O,data:r[O],tree:z}),T)for(let Z=D.length-1;Z>=0;Z--)h.push({key:D[Z],depth:w+1})}return{nodes:c}}var vr=(()=>{if(typeof MessageChannel>"u")return u=>{setTimeout(u,0)};let e=new MessageChannel,t=[];return e.port1.onmessage=()=>{let u=t.shift();u&&u()},e.port1.unref?.(),e.port2.unref?.(),u=>{t.push(u),e.port2.postMessage(null)}})();function Rt(){return new Promise(e=>vr(e))}var mu=1e5,mr=32768,Ci=65536;async function Fs(e){let{rows:t,getValue:u,collator:r,shouldAbort:n,onProgress:i}=e,a=()=>n?n():!1,s=new Map;for(let w=0;w<t.length;w+=mu){if(a())return null;let D=Math.min(t.length,w+mu);for(let S=w;S<D;S++){let T=u(t[S]),N=T==null?"":String(T);s.has(N)||s.set(N,T)}i?.(D/t.length*.2),D<t.length&&await Rt()}let l=[...s.keys()],m=[];for(let w=0;w<l.length;w+=mr){if(a())return null;m.push(l.slice(w,w+mr).sort(r.compare)),i?.(.2+Math.min(l.length,w+mr)/Math.max(1,l.length)*.2),await Rt()}m.length===0&&(m=[[]]);let c=Math.max(1,Math.ceil(Math.log2(Math.max(2,m.length)))),h=0;for(;m.length>1;){let w=[];for(let D=0;D<m.length;D+=2){if(D+1===m.length){w.push(m[D]);continue}let S=m[D],T=m[D+1],N=new Array(S.length+T.length),O=0,z=0,Z=0,j=Ci;for(;O<S.length&&z<T.length;)if(r.compare(S[O],T[z])<=0?N[Z++]=S[O++]:N[Z++]=T[z++],--j===0){if(a())return null;await Rt(),j=Ci}for(;O<S.length;)N[Z++]=S[O++];for(;z<T.length;)N[Z++]=T[z++];if(w.push(N),a())return null;await Rt()}m=w,h++,i?.(.4+Math.min(1,h/c)*.5)}let E=m[0],g=new Array(E.length);for(let w=0;w<E.length;w+=mu){if(a())return null;let D=Math.min(E.length,w+mu);for(let S=w;S<D;S++){let T=E[S];g[S]={label:T,value:s.get(T)}}D<E.length&&await Rt()}return i?.(1),g}function Ss(e){let t={};for(let[u,r]of Object.entries(e)){let n=Object.values(r);n.length!==0&&(t[u]=n.length===1?n[0]:{logic:"and",nodes:n})}return t}var Bs=class{state={sort:[],filter:null,columnFilters:{},columnFilterParts:{},filterEnabled:!0,searchText:"",groupBy:[],collapsedGroups:[],expandedDetails:[],page:0,pageSize:50};listeners=new Set;version=0;multiSort;collapsedCache=null;expandedCache=null;constructor(e={}){this.multiSort=e.multiSort??!1}getState(){return this.state}getVersion(){return this.version}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}commit(e,t="data",u){e.collapsedGroups!==this.state.collapsedGroups&&(this.collapsedCache=u?.collapsed??null),e.expandedDetails!==this.state.expandedDetails&&(this.expandedCache=u?.expanded??null),this.state=e,this.version++,this.listeners.forEach(r=>r(this.state,t))}collapsedSet(){return this.collapsedCache||(this.collapsedCache=new Set(this.state.collapsedGroups)),this.collapsedCache}expandedSet(){return this.expandedCache||(this.expandedCache=new Set(this.state.expandedDetails)),this.expandedCache}commitCollapsed(e){this.commit({...this.state,collapsedGroups:[...e]},"view",{collapsed:e})}commitExpanded(e){this.commit({...this.state,expandedDetails:[...e]},"view",{expanded:e})}toggleSort(e,t=!1){let u=this.state.sort,r=u.find(a=>a.columnId===e),n=r?r.direction==="asc"?"desc":null:"asc",i;this.multiSort&&t?(i=u.filter(a=>a.columnId!==e),n&&i.push({columnId:e,direction:n})):i=n?[{columnId:e,direction:n}]:[],this.commit({...this.state,sort:i})}setSort(e){let t=this.multiSort?e.slice():e.slice(0,1);this.commit({...this.state,sort:t})}clearSort(){this.state.sort.length!==0&&this.commit({...this.state,sort:[]})}setFilter(e){this.commit({...this.state,filter:e})}setFilterEnabled(e){e!==this.state.filterEnabled&&this.commit({...this.state,filterEnabled:e})}setColumnFilter(e,t,u){let r={...this.state.columnFilterParts};if(u===void 0)t?r[e]={[It]:t}:delete r[e];else{let n={...r[e]??{}};delete n[It],t?n[u]=t:delete n[u],Object.keys(n).length>0?r[e]=n:delete r[e]}this.commit({...this.state,columnFilterParts:r,columnFilters:Ss(r)})}getColumnFilter(e,t){return t!==void 0?this.state.columnFilterParts[e]?.[t]??null:this.state.columnFilters[e]??null}clearColumnFilters(){Object.keys(this.state.columnFilters).length!==0&&this.commit({...this.state,columnFilters:{},columnFilterParts:{}})}effectiveFilter(){let e=[];this.state.filter&&e.push(this.state.filter);for(let t of Object.values(this.state.columnFilters))e.push(t);return e.length===0?null:e.length===1?e[0]:{logic:"and",nodes:e}}setSearchText(e){e!==this.state.searchText&&this.commit({...this.state,searchText:e})}setGroupBy(e){let t=e==null?[]:typeof e=="string"?[e]:[...e],u=this.state.groupBy;return t.length===u.length&&t.every((r,n)=>r===u[n])?!1:(this.commit({...this.state,groupBy:t,collapsedGroups:[]}),!0)}isGroupCollapsed(e){return this.collapsedSet().has(e)}toggleGroup(e){let t=this.collapsedSet(),u=new Set(t);u.delete(e)||u.add(e),this.commitCollapsed(u)}setCollapsedGroups(e){this.commitCollapsed(new Set(e))}isDetailExpanded(e){return this.expandedSet().has(e)}toggleDetail(e){let t=new Set(this.expandedSet());t.delete(e)||t.add(e),this.commitExpanded(t)}setExpandedDetails(e){this.commitExpanded(new Set(e))}setPage(e){let t=Math.max(0,Math.floor(e));t!==this.state.page&&this.commit({...this.state,page:t},"page")}setPageSize(e){let t=Math.max(1,Math.floor(e));t!==this.state.pageSize&&this.commit({...this.state,pageSize:t,page:0},"page")}clampPage(e){let t=Math.max(0,e-1);return this.state.page<=t?this.state.page:(this.state={...this.state,page:t},this.version++,t)}resetPage(){this.state.page!==0&&this.commit({...this.state,page:0},"page")}applyState(e){this.commit({...e})}reset(){this.commit({sort:[],filter:null,columnFilters:{},columnFilterParts:{},filterEnabled:!0,searchText:"",groupBy:[],collapsedGroups:[],expandedDetails:[],page:0,pageSize:this.state.pageSize})}};function gr(e,t){return e.toLowerCase().endsWith(`.${t}`)?e:`${e}.${t}`}var ks=[];function $i(e,t){if(!e)return null;if("nodes"in e){let u=e.nodes.map(r=>$i(r,t)).filter(r=>r!==null);return u.length===0?null:{logic:e.logic,nodes:u}}return t(e.columnId)?e:null}var xr="__dg_pending_row_",Rs=e=>`${xr}${e}`;function Ns(e){if(typeof e!="string"||!e.startsWith(xr))return null;let t=Number(e.slice(xr.length));return Number.isInteger(t)&&t>=0?t:null}function Ts(e){return e==null?[]:typeof e=="string"?[e]:[...e]}var Ms="\0",wi="",fr=1e3,Is=150,Ls=60,qi=class{gridId;events=new jo;columns;store;rowModel;debugMode;locale;text;virtual;selection;focus=new ss;keyGetter;rowKeyField;summaryDefs;pendingReaders;historyDelegate;editingDelegate;summaryValues={};treeData;treeParent=null;treeIndex=null;treeIndexEpoch=-1;treeToggled=new Set;treeExpandedByDefault;warnedTreeGrouping=!1;lastPagination=null;firstDataRenderedSent=!1;cellRevision=0;collapsedByDefault;groupSummaries;showGroupedColumns;masterDetail;editForm=null;getRowHeightFn;measuredRowHeights=new Map;lastResult={nodes:[],visibleCount:0,totalCount:0};spanCache=new Map;spanCacheResult=null;viewNodes=[];allViewNodes=[];paginationEnabled;infiniteScroll;infinitePageSize;infiniteLimit;exportDefaults={};exportPageSize;exportMaxRows;exportToken=0;computeToken=0;lastComputeTimings={};summaryPassSeq=0;remoteFetchQueued=!1;viewportWidth=0;viewportHeight=0;leadWidth=0;externalFilter=null;asyncQueue=[];asyncCallbacks=[];asyncTimer=null;asyncTransactionWait;lastScrollTop=-1;lastScrollLeft=-1;scrollEndTimer=null;overlayOverride=null;lastFocusedRowKey=null;deferredSelection;rowIndexCache=null;dataNodeCache=null;dataKeyCache=null;nodeByKey=null;groupTree=null;groupTreeSignature=null;dataEpoch=0;distinctCache=new Map;distinctFullInflight=new Map;distinctTruncated=new Set;distinctEpoch=-1;localeCollator=null;summaryBasis=null;busy={busy:!1,progress:null,phase:null,cancellable:!1};exportAbort=null;busyDepth=0;unsubscribeStore;disposed=!1;constructor(e){this.gridId=e.gridId,this.asyncTransactionWait=e.asyncTransactionWait??50,this.debugMode=e.debugMode??!1,this.locale=e.locale??"en",this.text=Pt(e.locale,e.messages),this.columns=new Gl(e.columns,{defaultColumnDef:e.defaultColumnDef,debugMode:this.debugMode}),this.store=new Bs({multiSort:e.sorting?.multi??!1});let t=To(e.rowKey);if(this.keyGetter=t,this.rowKeyField=typeof e.rowKey=="string"?e.rowKey:null,Qa(e.dataSource)?this.rowModel=new Xn(e.dataSource,{keyGetter:t,blockSize:e.remote?.blockSize,maxBlocks:e.remote?.maxBlocks,onError:u=>this.events.emit("dataError",{error:u}),debugMode:this.debugMode}):this.rowModel=new pu(e.dataSource,{gridId:e.gridId,keyGetter:t,locale:e.locale,enabled:e.worker?.enabled,threshold:e.worker?.threshold,workerUrl:e.worker?.url,debugMode:this.debugMode,onEncodeProgress:u=>u>=1?this.setBusy("computing",null):this.setBusy("encoding",Math.round(u*100)),onPhaseProgress:(u,r)=>this.setBusy(u,r===null?null:Math.round(r*100))}),this.exportPageSize=Math.max(1,e.remote?.exportPageSize??1e3),this.exportMaxRows=Math.max(1,e.remote?.exportMaxRows??1e5),this.selection=new os(e.selection?.mode??"none"),this.deferredSelection=e.selection?.deferred??!1,this.summaryDefs=e.summaries??[],this.treeData=e.tree??null,this.treeData&&(this.treeParent=vs(this.treeData)),this.treeExpandedByDefault=this.treeData?.defaultExpanded??!1,this.collapsedByDefault=e.grouping?.collapsedByDefault??!1,this.groupSummaries=e.grouping?.groupSummaries??!1,this.showGroupedColumns=e.grouping?.showGroupedColumns??!1,e.grouping?.groupBy){this.store.setGroupBy(e.grouping.groupBy);let u=this.store.getState().groupBy;this.remote()?.setGrouping(u.map(r=>({columnId:r})),u)}this.paginationEnabled=e.pagination?.enabled??!1,this.infiniteScroll=e.scrolling?.mode==="infinite",this.infinitePageSize=Math.max(1,e.scrolling?.pageSize??100),this.infiniteLimit=this.infinitePageSize,e.pagination?.pageSize&&this.store.setPageSize(e.pagination.pageSize),this.virtual=new bs({rowHeight:e.rowHeight,overscanY:e.virtualization?.overscanY,overscanX:e.virtualization?.overscanX}),this.virtual.setColumnLayout(gi(this.layoutRuntime())),this.getRowHeightFn=e.getRowHeight,this.masterDetail=e.masterDetail?{height:Math.max(1,e.masterDetail.height??160),expandedByDefault:e.masterDetail.expandedByDefault??!1}:null,this.unsubscribeStore=this.store.subscribe((u,r)=>{this.events.emit("stateUpdated",{scope:r,state:this.getViewState()}),r==="page"&&this.emitPaginationChanged(!1),r==="view"||r==="page"&&this.rowModel.mode==="client"?this.reproject():this.recompute()}),this.recompute()}getRows(){return this.viewNodes}getDataRows(){return this.dataNodes()}getDataRowNode(e){if(!this.nodeByKey){let t=new Map,u=this.dataNodes();for(let r=0;r<u.length;r++)t.has(u[r].key)||t.set(u[r].key,u[r]);this.nodeByKey=t}return this.nodeByKey.get(e)}getRowByKey(e){return this.getDataRowNode(e)?.data}forEachNode(e){let t=this.rowModel.getSourceRows?.();if(!t){this.forEachNodeAfterFilterAndSort(e);return}for(let u=0;u<t.length;u++)e(Ke(t[u],this.keyGetter(t[u]),u),u)}forEachNodeAfterFilterAndSort(e){let t=this.dataNodes();for(let u=0;u<t.length;u++)e(t[u],u)}forEachDisplayedNode(e){let t=this.viewNodes;for(let u=0;u<t.length;u++)e(t[u],u)}dataNodes(){if(this.dataNodeCache)return this.dataNodeCache;let e=[];for(let t of this.lastResult.nodes)t&&t.kind==="data"&&e.push(t);return this.dataNodeCache=e,e}invalidateResultCaches(){this.dataNodeCache=null,this.dataKeyCache=null,this.nodeByKey=null,this.groupTree=null,this.groupTreeSignature=null}ensureGroupTree(e){let t=this.groupSummaries&&this.summaryDefs.length>0,u=`${e.join(Ms)}#${t?this.summaryDefs.map(r=>`${r.columnId}:${r.type}`).join(","):""}`;return this.groupTree&&this.groupTreeSignature===u?this.groupTree:(this.setBusy("grouping",null),this.groupTree=co(this.dataNodes(),this.columns,{columnIds:e,summaries:t?this.summaryDefs:void 0}),this.groupTreeSignature=u,this.groupTree)}getVisibleCount(){return this.lastResult.visibleCount}getTotalCount(){return this.rowModel.getTotalCount()}getColumnModel(){return this.columns}getColumnStates(){return this.columns.getColumnStates()}getSort(){return this.store.getState().sort}getFilter(){return this.store.getState().filter}getSearchText(){return this.store.getState().searchText}getVirtualWindow(){return this.virtual.getWindow()}getColumnLayout(){return this.virtual.getColumnLayout()}getVisualColumnIds(){let e=this.getColumnLayout(),t=[];for(let u of e.left)t.push(u.state.id);for(let u of e.center)t.push(u.state.id);for(let u of e.right)t.push(u.state.id);return t}getColumnIdAt(e){if(e<0)return null;let t=this.getColumnLayout();if(e<t.left.length)return t.left[e].state.id;let u=e-t.left.length;return u<t.center.length?t.center[u].state.id:t.right[u-t.center.length]?.state.id??null}getVisualColumnCount(){let e=this.getColumnLayout();return e.left.length+e.center.length+e.right.length}getRowHeight(){return this.virtual.getRowHeight()}isUsingWorker(){return this.rowModel instanceof pu&&this.rowModel.usesWorker()}getVisibleCenterColumns(){return this.virtual.getVisibleCenterColumns()}setViewportSize(e,t){let u=this.viewportWidth,r=this.viewportHeight,n=e!==u||t!==r;this.viewportWidth=e,this.viewportHeight=t;let i=this.emitIfWindowChanged(this.virtual.setViewportSize(e,t));return n&&this.events.emit("gridSizeChanged",{width:e,height:t,previousWidth:u,previousHeight:r}),i}setMaxScrollOffset(e){return this.emitIfWindowChanged(this.virtual.setMaxScrollOffset(e))}setChromeOffsets(e,t){this.virtual.setChromeOffsets(e,t)}setLeadWidth(e){this.leadWidth=e,this.virtual.setLeadWidth(e)}setMaxCanvasHeight(e){return this.emitIfWindowChanged(this.virtual.setMaxCanvasHeight(e))}setScroll(e,t){let u=this.emitIfWindowChanged(this.virtual.setScroll(e,t));return u&&this.rowModel.mode==="remote"&&this.scheduleRemoteFetch(),this.publishScroll(e,t),u}publishScroll(e,t){if(e===this.lastScrollTop&&t===this.lastScrollLeft)return;this.lastScrollTop=e,this.lastScrollLeft=t;let u=this.virtual.getWindow(),r={scrollTop:e,scrollLeft:t,firstRow:u.rows.start,lastRow:u.rows.end};this.events.emit("bodyScroll",r),this.scrollEndTimer!==null&&clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(()=>{this.scrollEndTimer=null,!this.disposed&&this.events.emit("bodyScrollEnd",r)},Is)}showLoadingOverlay(){this.setOverlayOverride("loading")}showNoRowsOverlay(){this.setOverlayOverride("noRows")}hideOverlay(){this.setOverlayOverride(null)}getOverlay(){return this.overlayOverride==="none"?null:this.overlayOverride!==null?this.overlayOverride:this.busy.busy?"loading":this.getVisibleCount()===0?"noRows":null}setOverlayOverride(e){this.overlayOverride!==e&&(this.overlayOverride=e,this.events.emit("overlayChanged",{overlay:this.getOverlay(),manual:e!==null}))}notifyRowDrag(e,t){let u=e==="enter"?"rowDragEnter":e==="move"?"rowDragMove":"rowDragLeave";this.events.emit(u,{rowKey:t.rowKey,row:this.getRowByKey(t.rowKey),overKey:t.overKey??null,position:t.position??null,fromGridId:t.fromGridId??this.gridId})}notifyRowDragEnd(e){this.events.emit("rowDragEnd",{rowKey:e.rowKey,row:this.getRowByKey(e.rowKey),overKey:e.overKey??null,position:e.position??null,fromGridId:e.fromGridId??this.gridId,dropped:e.dropped})}scheduleRemoteFetch(){this.remoteFetchQueued||this.disposed||(this.remoteFetchQueued=!0,queueMicrotask(()=>{this.remoteFetchQueued=!1,this.disposed||this.recompute(!0)}))}setRowHeight(e){let t=this.virtual.setRowHeight(e);t&&this.measuredRowHeights.size>0&&(this.measuredRowHeights=new Map,this.rebuildRowHeights()),t?this.emitIfWindowChanged(!0):this.events.emit("viewportChanged",{window:this.virtual.getWindow()})}ensureVisible(e,t){return this.virtual.ensureVisible(e,t)}scrollToRow(e){let t=this.rowAxis().indexOf(e);if(t<0)return;let u=this.ensureVisible(t);u&&this.events.emit("scrollRequested",u)}revealRow(e,t=3){if(this.disposed)return;let u=()=>{if(!this.editForm?.atTop||String(this.editForm.rowKey)!==String(e))return!1;let i=this.ensureVisible(0);return i&&this.events.emit("scrollRequested",i),!0};if(u())return;if(this.rowAxis().indexOf(e)>=0){this.scrollToRow(e);return}let r=t,n=this.events.on("contentReady",()=>{if(this.disposed||this.rowAxis().indexOf(e)>=0){if(n(),this.disposed||u())return;this.scrollToRow(e);return}--r<=0&&n()})}scrollToCell(e,t){let u=this.rowAxis().indexOf(e);if(u<0)return;let r=this.getColumnLayout().center.findIndex(i=>i.state.id===t),n=this.ensureVisible(u,r===-1?void 0:r);n&&this.events.emit("scrollRequested",n)}getSelectionMode(){return this.selection.getMode()}setSelectionMode(e){this.selection.setMode(e)&&this.emitSelectionChanged()}isRowSelected(e){return this.selection.isSelected(e)}getSelectedKeys(){return this.selection.isAllMatching()?this.dataNodes().filter(e=>this.selection.isSelected(e.key)).map(e=>e.key):this.selection.getSelectedKeys()}getSelectionDescriptor(){return this.selection.getSelectionDescriptor()}getSelectedCount(){return this.selection.getSelectedCount(this.lastResult.visibleCount)}isAllMatchingSelected(){return this.selection.isAllMatching()}getSelectedRows(){return this.dataNodes().filter(e=>this.selection.isSelected(e.key)).map(e=>e.data)}getFocusedNode(){let e=this.focus.get();if(!e)return;let t=this.rowAxis().indexOf(e.rowKey);return t>=0?this.viewNodes[t]:void 0}getFocusedRowKey(){return this.focus.get()?.rowKey??null}getFocusedRowIndex(){let e=this.getFocusedRowKey();return e===null?-1:this.rowAxis().indexOf(e)}focusRow(e){let t=this.focus.get()?.columnId??this.layoutRuntime()[0]?.state.id;t&&this.focus.set({rowKey:e,columnId:t})&&(this.emitFocusChanged(),this.scrollToRow(e))}selectRow(e){this.selection.select(e)&&this.emitSelectionChanged()}toggleRow(e){this.selection.toggle(e)&&this.emitSelectionChanged()}setSelectedKeys(e){this.selection.setSelectedKeys(e)&&this.emitSelectionChanged()}selectAll(){(this.deferredSelection?this.selection.selectAllMatching():this.selection.selectAll(this.dataKeys()))&&this.emitSelectionChanged()}clearSelection(){this.selection.clear()&&this.emitSelectionChanged()}handleRowClick(e,t={}){this.selection.handleRowClick(e,t,this.dataKeys())&&this.emitSelectionChanged()}notifyCell(e,t,u,r){let n=t.kind==="data"?t.data:void 0;this.events.emit(e,{rowKey:t.key,rowIndex:u,columnId:r,value:n===void 0?void 0:this.columns.getCellValue(n,r),row:n,node:t})}notifyCellValueChanged(e){this.events.emit("cellValueChanged",{...e,row:this.getRowByKey(e.rowKey)})}notifyEditingStarted(e){this.events.emit("cellEditingStarted",e)}notifyEditingStopped(e){this.events.emit("cellEditingStopped",e)}notifyRowEditingStarted(e){this.events.emit("rowEditingStarted",{...e,row:this.getRowByKey(e.rowKey)})}notifyRowEditingStopped(e){this.events.emit("rowEditingStopped",{...e,row:this.getRowByKey(e.rowKey)})}notifyHistoryStarted(e,t){this.events.emit(e==="undo"?"undoStarted":"redoStarted",{label:t})}notifyHistoryEnded(e,t){this.events.emit(e==="undo"?"undoEnded":"redoEnded",t)}setHistoryDelegate(e){this.historyDelegate=e??void 0}undo(){return this.historyDelegate?.undo()??!1}redo(){return this.historyDelegate?.redo()??!1}canUndo(){return this.historyDelegate?.canUndo()??!1}canRedo(){return this.historyDelegate?.canRedo()??!1}getHistoryDepth(){return this.historyDelegate?.depth()??{undo:0,redo:0}}setEditingDelegate(e){this.editingDelegate=e??void 0}startEditingCell(e,t){return this.editingDelegate?.startEditingCell(e,t)??!1}stopEditing(e){return this.editingDelegate?.stopEditing(e?.cancel??!1)??Promise.resolve(!1)}getEditingCells(){return this.editingDelegate?.getEditingCells()??[]}isEditing(){return this.getEditingCells().length>0}notifyRow(e,t,u){this.events.emit(e,{rowKey:t.key,rowIndex:u,row:t.kind==="data"?t.data:void 0,node:t})}getFocus(){return this.focus.get()}isCellFocused(e,t){return this.focus.isFocused(e,t)}focusCell(e,t){this.focus.set({rowKey:e,columnId:t})&&this.emitFocusChanged()}clearFocus(){this.focus.clear()&&this.emitFocusChanged()}moveFocus(e){let t=this.focus.move(e,this.focusContext());return t&&this.emitFocusChanged(),t}getFocusIndices(){return this.focus.getIndices(this.focusContext())}executeCommand(e){let{type:t}=e;if(ds(t))return this.moveFocus(t);switch(t){case"toggleSelection":{let u=this.getFocusedNode();return u?(u.kind==="group"?this.toggleGroup(String(u.key)):u.kind==="data"&&this.toggleRow(u.key),!0):!1}case"extendSelectionUp":case"extendSelectionDown":{let u=this.moveFocus(t==="extendSelectionUp"?"up":"down"),r=this.focus.get();return r&&this.selection.getMode()==="multiple"&&this.selection.selectRange(r.rowKey,this.dataKeys(),!1)&&this.emitSelectionChanged(),u}case"selectAll":return this.selectAll(),!0;case"clearSelection":return this.clearSelection(),!0;case"activate":return!1;case"copy":return!1;default:return!1}}getClipboardText(e={}){let t=this.lastResult.nodes.filter(u=>this.selection.isSelected(u.key));if(t.length===0){let u=this.focus.get();if(!u)return"";t=this.lastResult.nodes.filter(r=>r.key===u.rowKey)}return t.length===0?"":gs(t,this.columns,e)}notifyClipboardGesture(e,t,u){let r=`${e}Start`,n=`${e}End`;this.events.emit(r,{cellCount:t});let i=!1;try{return i=u(),i}finally{this.events.emit(n,{cellCount:t,performed:i})}}dataKeys(){if(this.dataKeyCache)return this.dataKeyCache;let e=this.dataNodes(),t=new Array(e.length);for(let u=0;u<e.length;u++)t[u]=e[u].key;return this.dataKeyCache=t,t}rowAxis(){let e=this.viewNodes;return{count:e.length,keyAt:t=>e[t]?.key??(t>=0&&t<e.length?Rs(t):void 0),indexOf:t=>{let u=Ns(t);if(u!==null&&u<e.length&&!e[u])return u;if(!this.rowIndexCache){let r=new Map;for(let n=0;n<e.length;n++){let i=e[n];i&&!r.has(i.key)&&r.set(i.key,n)}this.rowIndexCache=r}return this.rowIndexCache.get(t)??-1}}}focusContext(){return{isFocusable:this.masterDetail!==null||this.editForm!==null?(e,t)=>{let u=this.viewNodes[t]?.kind;return u==="data"||u==="group"}:void 0,rows:this.rowAxis(),columnIds:this.columns.runtime().map(e=>e.state.id),pageSize:Math.max(1,this.virtual.getWindow().rows.end-this.virtual.getWindow().rows.start-2)}}emitSelectionChanged(){this.events.emit("selectionChanged",{selectedKeys:this.selection.getSelectedKeys(),selectedCount:this.selection.getSelectedCount()})}emitFocusChanged(){let e=this.focus.get();this.events.emit("focusChanged",{focus:e});let t=e?.rowKey??null;if(t!==this.lastFocusedRowKey){let u=this.lastFocusedRowKey;this.lastFocusedRowKey=t,this.events.emit("focusedRowChanged",{rowKey:t,previousRowKey:u,row:t===null?void 0:this.getFocusedRow()})}}getFocusedRow(){let e=this.getFocusedNode();return e&&e.kind==="data"?e.data:void 0}toggleSort(e,t=!1){this.assertColumn(e)&&(this.store.toggleSort(e,t),this.emitSortChanged())}setSort(e){this.store.setSort(e),this.emitSortChanged()}clearSort(){this.store.clearSort(),this.emitSortChanged()}setFilter(e){this.store.setFilter(e),this.store.resetPage(),this.resetReveal(),this.emitFilterChanged()}setColumnFilter(e,t,u){this.assertColumn(e)&&(this.store.setColumnFilter(e,t,u),this.store.resetPage(),this.resetReveal(),this.emitFilterChanged())}getColumnFilter(e,t){return this.store.getColumnFilter(e,t)}clearColumnFilters(){this.store.clearColumnFilters(),this.emitFilterChanged()}getEffectiveFilter(){return this.store.effectiveFilter()}isFilterEnabled(){return this.store.getState().filterEnabled}runningFilter(){return this.isFilterEnabled()?this.store.effectiveFilter():null}setExternalFilter(e){this.externalFilter=e,this.events.emit("filterChanged",{filter:this.runningFilter(),searchText:this.store.getState().searchText}),this.recompute()}isExternalFilterPresent(){return this.externalFilter!==null}refreshExternalFilter(){this.externalFilter!==null&&this.recompute()}setFilterEnabled(e){this.isFilterEnabled()!==e&&(this.store.setFilterEnabled(e),this.resetReveal(),this.emitFilterChanged())}getDistinctValues(e,t=fr){return this.getDistinctValueSet(e,t).entries}getDistinctValueSet(e,t=fr){this.distinctEpoch!==this.dataEpoch&&(this.distinctCache.clear(),this.distinctTruncated.clear(),this.distinctEpoch=this.dataEpoch);let u=`${e} ${t}`,r=this.distinctCache.get(u);if(r)return{entries:r,truncated:this.distinctTruncated.has(u)};let n=this.rowModel.getSourceRows?.()??[],i=this.columns.getDef(e),a=new Map,s=!1;for(let m of n){let c=this.columns.getCellValue(m,e),h=c==null?"":String(c),E=c==null?"":yu(i,c,m);if(!a.has(h)&&(a.set(h,{value:c,label:E}),a.size>t)){a.delete(h),s=!0;break}}let l=[...a.values()].sort((m,c)=>this.collator().compare(m.label,c.label));return this.distinctCache.set(u,l),s?this.distinctTruncated.add(u):this.distinctTruncated.delete(u),{entries:l,truncated:s}}searchDistinctValues(e,t,u=fr){let r=t.trim().toLowerCase();if(!r)return this.getDistinctValueSet(e,u);let n=this.rowModel.getSourceRows?.()??[],i=this.columns.getDef(e),a=new Map,s=!1;for(let l of n){let m=this.columns.getCellValue(l,e),c=m==null?"":String(m),h=m==null?"":yu(i,m,l);if(!(!h.toLowerCase().includes(r)||a.has(c))&&(a.set(c,{value:m,label:h}),a.size>u)){a.delete(c),s=!0;break}}return{entries:[...a.values()].sort((l,m)=>this.collator().compare(l.label,m.label)),truncated:s}}async getDistinctValueSetAsync(e,t){if(this.remote())return{entries:await this.getDistinctValuesAsync(e),truncated:!1};this.distinctEpoch!==this.dataEpoch&&(this.distinctCache.clear(),this.distinctTruncated.clear(),this.distinctEpoch=this.dataEpoch);let u=`${e} full`,r=this.distinctCache.get(u);if(r)return{entries:r,truncated:!1};let n=this.distinctFullInflight.get(e);if(!n){let i=this.dataEpoch;n=Fs({rows:this.rowModel.getSourceRows?.()??[],getValue:a=>this.columns.getCellValue(a,e),collator:this.collator(),shouldAbort:()=>this.disposed,onProgress:t}).then(a=>(this.distinctFullInflight.delete(e),a===null?[]:(i===this.dataEpoch&&this.distinctEpoch===i&&(this.distinctCache.set(u,a),this.distinctTruncated.delete(u)),a))),this.distinctFullInflight.set(e,n)}return{entries:await n,truncated:!1}}canListDistinctValues(){let e=this.remote();return e===null||e.supportsDistinctValues()}async getDistinctValuesAsync(e,t=1e3){let u=this.remote();return u?u.supportsDistinctValues()?(await u.loadDistinctValues(e,t)).map(r=>({value:r.value,label:r.label??(r.value==null?"":String(r.value))})).sort((r,n)=>this.collator().compare(r.label,n.label)):[]:this.getDistinctValues(e,t)}collator(){return this.localeCollator||(this.localeCollator=new Intl.Collator(this.locale,{numeric:!0,sensitivity:"base"})),this.localeCollator}bumpDataEpoch(){this.dataEpoch++}setSearchText(e){this.store.setSearchText(e),this.store.resetPage(),this.resetReveal(),this.emitFilterChanged()}emitFilterChanged(){this.events.emit("filterChanged",{filter:this.store.effectiveFilter(),searchText:this.store.getState().searchText})}setColumnWidth(e,t,u=!0){let r=this.columns.getState(e)?.width;this.columns.setWidth(e,t);let n=this.columns.getState(e);n&&r!==void 0&&(n.width!==r||u)&&this.events.emit("columnResized",{columnId:e,width:n.width,previousWidth:r,finished:u}),this.emitColumnStateChanged()}sizeColumnsToFit(e={}){let t=(e.width??this.viewportWidth)-this.leadWidth;if(!Number.isFinite(t)||t<=0)return;let u=new Set(e.skip??[]),r=this.columns.getOrder().filter(c=>this.columns.getState(c)?.visible&&!u.has(c));if(r.length===0)return;let n=0;for(let c of this.columns.getOrder())!this.columns.getState(c)?.visible||!u.has(c)||(n+=this.columns.getState(c)?.width??0);let i=t-n;if(i<=0)return;let a=new Set(r),s=new Map;for(let c of r)s.set(c,this.columns.getState(c)?.width??0);for(let c=0;c<=r.length&&a.size>0;c++){let h=0;for(let w of a)h+=s.get(w)??0;if(h<=0)break;let E=i/h,g=!1;for(let w of[...a]){let D=(s.get(w)??0)*E,S=this.columns.getDef(w),T=S?.minWidth??Ls,N=S?.maxWidth??Number.POSITIVE_INFINITY;if(D<T||D>N){let O=Math.min(Math.max(D,T),N);s.set(w,O),a.delete(w),i-=O,g=!0}else s.set(w,D)}if(!g)break}let l=0;for(let c of r)l+=s.get(c)??0;let m=0;r.forEach((c,h)=>{let E=h===r.length-1?Math.round(l)-m:Math.round(s.get(c)??0);m+=E,this.columns.setWidth(c,E)}),this.emitColumnStateChanged()}setBandCollapsed(e,t){let u=typeof e=="string"?[e]:e;this.columns.setBandCollapsed(u,t)&&(this.events.emit("columnGroupOpened",{band:[...u],open:!t}),this.emitColumnStateChanged())}toggleBand(e){let t=typeof e=="string"?[e]:e;this.setBandCollapsed(t,!this.columns.isBandCollapsed(t))}isBandCollapsed(e){return this.columns.isBandCollapsed(typeof e=="string"?[e]:e)}isBandCollapsible(e){return this.columns.isBandCollapsible(typeof e=="string"?[e]:e)}setColumnPinned(e,t){let u=this.columns.getState(e)?.pinned;this.columns.setPinned(e,t);let r=this.columns.getState(e);r&&u!==void 0&&r.pinned!==u&&this.events.emit("columnPinned",{columnId:e,pinned:r.pinned,previous:u}),this.emitColumnStateChanged()}setColumnVisible(e,t){let u=this.columns.getState(e)?.visible;this.columns.setVisible(e,t);let r=this.columns.getState(e);r&&u!==void 0&&r.visible!==u&&this.events.emit("columnVisible",{columnId:e,visible:r.visible}),this.emitColumnStateChanged(),this.recompute()}moveColumn(e,t){let u=this.columns.getOrder().indexOf(e);this.columns.moveColumn(e,t);let r=this.columns.getOrder().indexOf(e);u!==-1&&r!==u&&this.events.emit("columnMoved",{columnId:e,fromIndex:u,toIndex:r}),this.emitColumnStateChanged()}applyColumnStates(e){this.columns.applyColumnStates(e),this.emitColumnStateChanged(),this.recompute()}resetColumnState(){this.columns.resetColumnStates(),this.emitColumnStateChanged(),this.recompute()}setColumns(e){this.columns.setColumns(e),this.bumpDataEpoch(),this.emitColumnStateChanged(),this.recompute()}getGroupLevels(){return this.store.getState().groupBy}getGroupSummaries(){return this.groupSummaries}setGroupSummaries(e){this.groupSummaries!==e&&(this.groupSummaries=e,this.groupTree=null,this.groupTreeSignature=null,this.reproject())}getGroupBy(){return this.store.getState().groupBy[0]??null}groupBy(e){let t=e==null?[]:typeof e=="string"?[e]:[...e];for(let r of t)if(!this.assertColumn(r))return;let u=this.store.getState().groupBy;t.length===u.length&&t.every((r,n)=>r===u[n])||(this.remote()?.setGrouping(t.map(r=>({columnId:r})),t),this.store.setGroupBy(t),this.emitColumnStateChanged(),this.resetReveal(),this.events.emit("groupChanged",{groupBy:t[0]??null,levels:t}))}remote(){return this.rowModel instanceof Xn?this.rowModel:null}clearGrouping(){this.groupBy(null)}isGroupCollapsed(e){return this.store.isGroupCollapsed(e)}toggleGroup(e){let t=this.remote();if(t?.isGrouped()){t.toggleGroupPath(e)&&this.recompute();return}this.store.toggleGroup(e)}expandAllGroups(){this.remote()?.isGrouped()||this.store.setCollapsedGroups([])}collapseAllGroups(){let e=this.remote();if(e?.isGrouped()){e.setExpandedPaths([]),this.recompute();return}let t=this.store.getState().groupBy;t.length!==0&&this.store.setCollapsedGroups(po(this.ensureGroupTree(t)))}setEditFormRow(e,t={}){let u=e===null?null:{rowKey:e,height:Math.max(1,t.height??260),atTop:t.atTop??!1},r=this.editForm;if(!(r?.rowKey===u?.rowKey&&r?.height===u?.height&&r?.atTop===u?.atTop)&&(this.editForm=u,this.reproject(),u?.atTop)){let n=this.ensureVisible(0);n&&this.events.emit("scrollRequested",n)}}getEditFormRow(){return this.editForm?.rowKey??null}getEditFormHeight(){return this.editForm?.height??0}isDebugMode(){return this.debugMode}hasMasterDetail(){return this.masterDetail!==null}getDetailHeight(){return this.masterDetail?.height??0}isDetailExpanded(e){let t=this.store.isDetailExpanded(e);return this.masterDetail?.expandedByDefault?!t:t}toggleDetail(e){this.masterDetail&&this.store.toggleDetail(e)}collapseAllDetails(){this.masterDetail&&(this.masterDetail.expandedByDefault?this.store.setExpandedDetails(this.dataKeys()):this.store.setExpandedDetails([]))}getDataRowCount(){return this.lastResult.visibleCount}getSummaries(){return this.summaryValues}getSummaryDefs(){return this.summaryDefs}setSummaryDefs(e){this.summaryDefs=e,this.groupTree=null,this.groupTreeSignature=null,this.summaryBasis=null,this.recompute()}getColumnSummary(e){return this.summaryDefs.find(t=>t.columnId===e)??null}setColumnSummary(e,t){let u=this.summaryDefs.filter(r=>r.columnId!==e);if(this.summaryDefs=t===null?u:[...u,{columnId:e,type:t}],this.groupSummaries&&this.store.getState().groupBy.length>0){this.recompute();return}if(this.remote()){this.recompute();return}this.recomputeSummaries(),this.emitColumnStateChanged()}setPendingValueReader(e){this.pendingReaders=e??void 0,this.recomputeSummaries(),this.emitColumnStateChanged()}refreshSummaries(){this.summaryDefs.length!==0&&(this.recomputeSummaries(),this.events.emit("contentReady",{rows:this.lastResult.nodes,totalCount:this.lastResult.totalCount,visibleCount:this.lastResult.visibleCount}))}currentSummaryBasis(e,t){let u=t?this.columns.runtime().map(r=>r.state.id).join(","):"";return[this.dataEpoch,t,u,JSON.stringify(e)].join(wi)}async computeChartData(e,t={}){let u=t.source??e.source??"view",r=!!this.pendingReaders&&(this.pendingReaders.hasPending?.()??!0),n=r?this.pendingReaders:void 0;if(u==="selection"){let a=this.getSelectedKeys();if(a.length>0){let s=[];for(let l of a){let m=this.getDataRowNode(l);m&&s.push(m)}return lr(s,this.columns,e,n)}}let i=this.rowModel instanceof pu?this.rowModel:null;if(i?.usesWorker()&&Ri(e)&&!r){let{searchText:a}=this.store.getState(),s=await i.aggregate(this.columns,{sort:[],filter:u==="all"?null:this.runningFilter(),searchText:u==="all"?"":a},e);if(s)return s}if(u==="all"){let a=this.rowModel.getSourceRows?.()??[],s=new Array(a.length);for(let l=0;l<a.length;l++)s[l]=Ke(a[l],this.keyGetter(a[l]),l);return lr(s,this.columns,e,n)}return lr(this.dataNodes(),this.columns,e,n)}chartBasis(e="view"){if(e==="all")return String(this.dataEpoch);let{searchText:t}=this.store.getState();return[this.currentSummaryBasis(this.runningFilter(),t),this.lastResult.visibleCount].join(wi)}runSummaryPass(e,t,u,r,n){let i=++this.summaryPassSeq;if(e.length<=1e5){this.busyDepth>0&&this.setBusy("aggregating",null);let h=lo(e,this.columns,t,this.pendingReaders);this.summaryValues=u?{...this.summaryValues,...h}:h,r!==null&&(this.summaryBasis=r);return}let a=so(this.columns,t,this.pendingReaders),s=1e5,l=e.length,m=0,c=()=>{if(this.disposed||i!==this.summaryPassSeq||n!==this.computeToken)return;let h=Math.min(l,m+s);if(a.add(e,m,h),m=h,m<l){this.setBusy("aggregating",m/l),vr(c);return}let E=a.finish();this.summaryValues=u?{...this.summaryValues,...E}:E,r!==null&&(this.summaryBasis=r),this.busyDepth===0&&this.setBusy(null,null),this.events.emit("summariesChanged",{values:this.summaryValues})};vr(c)}recomputeSummaries(){this.summaryBasis=null;let e=this.remote();if(e){this.summaryValues=this.summaryDefs.length>0?e.getSummaries():{};return}this.summaryDefs.length>0&&this.rowModel.mode==="client"?this.runSummaryPass(this.lastResult.nodes,this.summaryDefs,!1,null,this.computeToken):this.summaryValues={}}isInfiniteScroll(){return this.infiniteScroll}getRevealedCount(){return this.infiniteScroll?this.viewNodes.length:this.allViewNodes.length}hasMoreRows(){return this.infiniteScroll&&this.viewNodes.length<this.allViewNodes.length}revealMore(){if(!this.infiniteScroll||!this.hasMoreRows())return!1;this.infiniteLimit=Math.min(this.allViewNodes.length,this.infiniteLimit+this.infinitePageSize),this.viewNodes=this.allViewNodes.slice(0,this.infiniteLimit),this.rowIndexCache=null;let e=this.virtual.setRowCount(this.viewNodes.length);return this.events.emit("contentReady",{rows:this.lastResult.nodes,totalCount:this.lastResult.totalCount,visibleCount:this.lastResult.visibleCount}),e&&!this.disposed&&this.events.emit("viewportChanged",{window:this.virtual.getWindow()}),!0}resetReveal(){this.infiniteScroll&&(this.infiniteLimit=this.infinitePageSize)}isPaginated(){return this.paginationEnabled}setPaginationEnabled(e){e!==this.paginationEnabled&&(this.paginationEnabled=e,this.store.resetPage(),this.recompute())}getPage(){return this.store.getState().page}getPageSize(){return this.store.getState().pageSize}getPageCount(){return this.paginationEnabled?Math.max(1,Math.ceil(this.allViewNodes.length/this.store.getState().pageSize)):1}setPage(e){this.store.setPage(Math.min(Math.max(0,e),this.getPageCount()-1))}setPageSize(e){this.store.setPageSize(e)}nextPage(){this.setPage(this.getPage()+1)}previousPage(){this.setPage(this.getPage()-1)}emitPaginationChanged(e){if(!this.paginationEnabled)return;let t=this.store.getState(),u=this.getPageCount();this.lastPagination&&this.lastPagination.page===t.page&&this.lastPagination.pageSize===t.pageSize&&this.lastPagination.pageCount===u||(this.lastPagination={page:t.page,pageSize:t.pageSize,pageCount:u},this.events.emit("paginationChanged",{page:t.page,pageSize:t.pageSize,pageCount:u,fromResultChange:e}))}buildExportModel(e={}){return this.buildExportModelFrom(this.allViewNodes,e)}buildExportModelFrom(e,t={}){return dl({nodes:e,columns:this.columns,options:{columnIds:this.layoutRuntime().map(u=>u.state.id),...t},isSelected:u=>this.selection.isSelected(u),selectionCount:this.selection.getSelectedCount(),summaries:this.summaryDefs.length>0?{defs:this.summaryDefs,values:this.summaryValues}:void 0})}async exportRows(){let e=this.remote();if(!e)return this.allViewNodes;let t=++this.exportToken,{sort:u,searchText:r,groupBy:n}=this.store.getState(),i=await e.loadAllRows({sort:ir(u,n),filter:this.runningFilter(),searchText:r},{maxRows:this.exportMaxRows,pageSize:this.exportPageSize,isCancelled:()=>t!==this.exportToken||this.disposed,onProgress:(a,s)=>this.setBusy("exporting",s>0?Math.round(a/s*100):null)});return this.setBusy("exporting",null),i}setExportDefaults(e){this.exportDefaults={...e}}setEnterpriseEdition(e){this.enterpriseEdition=e}isEnterpriseEdition(){return this.enterpriseEdition}enterpriseEdition=!1;requireEnterprise(e){if(!this.enterpriseEdition)throw new Error(`[datagrid] ${e} is an Enterprise feature. Import EnterpriseDataGrid from @kanunilabs/datagrid-react-enterprise (CSV export is available in Community).`)}async withExportSignal(e,t){if(e.signal)return this.withBusy("exporting",()=>t(e));let u=new AbortController;this.exportAbort=u;try{return await this.withBusy("exporting",()=>t({...e,signal:u.signal}))}finally{this.exportAbort===u&&(this.exportAbort=null)}}async exportToCsv(e={}){return this.withExportSignal(e,async t=>{let u=this.buildExportModelFrom(await this.exportRows(),t);return{blob:await ml(u,t),fileName:gr(t.fileName??this.gridId,"csv"),rowCount:u.rows.length}})}async exportToExcel(e={}){this.requireEnterprise("Excel export");let t={sheetName:this.text.exportSheetName,...this.exportDefaults,...e};return this.withExportSignal(t,async u=>{let r=this.buildExportModelFrom(await this.exportRows(),u);return{blob:await El(r,{...u,onProgress:n=>{u.onProgress?.(n),n>=1&&this.setBusy("exporting",null,!1)}}),fileName:gr(u.fileName??this.gridId,"xlsx"),rowCount:r.rows.length}})}async exportToPdf(e={}){return this.requireEnterprise("PDF export"),this.withExportSignal(e,async t=>{let u=this.buildExportModelFrom(await this.exportRows(),t);return this.setBusy("exporting",null,!1),{blob:await Nl(u,t),fileName:gr(t.fileName??this.gridId,"pdf"),rowCount:u.rows.length}})}getViewState(){let e=this.store.getState();return{version:1,columns:this.columns.getColumnStates(),sort:e.sort,filter:e.filter,columnFilters:e.columnFilters,columnFilterParts:e.columnFilterParts,filterEnabled:e.filterEnabled,searchText:e.searchText,groupBy:e.groupBy,collapsedGroups:e.collapsedGroups,page:e.page,pageSize:e.pageSize}}applyViewState(e){if(e.version!==1){this.debugMode&&console.error("[datagrid] unsupported view state version",e.version);return}this.columns.applyColumnStates(e.columns??[]);let t=new Set(this.columns.getOrder()),u=[],r=i=>t.has(i)?!0:(u.push(i),!1),n=Ts(e.groupBy).filter(r);this.remote()?.setGrouping(n.map(i=>({columnId:i})),n),this.store.applyState({sort:(e.sort??[]).filter(i=>r(i.columnId)),filter:$i(e.filter??null,r),columnFilters:Object.fromEntries(Object.entries(e.columnFilters??{}).filter(([i])=>r(i))),columnFilterParts:Object.fromEntries(Object.entries(e.columnFilterParts??Object.fromEntries(Object.entries(e.columnFilters??{}).map(([i,a])=>[i,{[It]:a}]))).filter(([i])=>r(i))),filterEnabled:e.filterEnabled??!0,searchText:e.searchText??"",groupBy:n,collapsedGroups:e.collapsedGroups??[],expandedDetails:[],page:e.page??0,pageSize:e.pageSize??this.store.getState().pageSize}),u.length>0&&this.debugMode&&console.warn(`[datagrid] saved view referenced unknown column(s): ${[...new Set(u)].join(", ")} \u2014 dropped.`),this.emitColumnStateChanged(),this.emitFilterChanged(),this.recompute()}setData(e){this.rowModel.setData?.(e),this.bumpDataEpoch();let t=this.keyGetter,u=new Set(e.map(r=>t(r)));this.selection.retainKeys(u)&&this.emitSelectionChanged(),this.events.emit("dataUpdated",{totalCount:e.length}),this.recompute()}moveRow(e,t,u="before"){if(this.rowModel.mode==="remote")return this.debugMode&&console.warn("[datagrid] moveRow is a local operation \u2014 the server owns the order of a remote grid. Persist the move from rowDrag.onReorder and let the grid re-query."),!1;if(this.getSort().length>0)return this.debugMode&&console.warn("[datagrid] moveRow ignored: a sort is active, so the sort decides the row order and the move would be invisible. Clear the sort, or keep an order field and update it from rowDrag.onReorder."),!1;let r=this.rowModel.getSourceRows?.()??[],n=Il(r,e,t,u,this.keyGetter);return n.moved?(this.rowModel.setData?.(n.rows),this.bumpDataEpoch(),this.events.emit("rowsChanged",{added:0,updated:0,removed:0}),this.events.emit("dataUpdated",{totalCount:n.rows.length}),this.recompute(),!0):!1}applyTransaction(e){let t=this.remote();if(t){let h=e.update??[];if(!((e.add?.length??0)>0||(e.remove?.length??0)>0)&&h.length>0&&this.remoteUpdateKeepsPlacement(h)){let E=t.patchRows(h);this.invalidateResultCaches(),this.events.emit("rowsChanged",{added:0,updated:E,removed:0}),this.events.emit("dataUpdated",{totalCount:t.getTotalCount()}),this.recompute(!0);return}t.invalidate(),this.recompute(!0),this.events.emit("rowsChanged",{added:0,updated:0,removed:0});return}let u=this.rowModel.getSourceRows?.()??[],r=this.keyGetter,n=new Set;if(e.update)for(let h of e.update)n.add(r(h));let i=new Map;if(n.size>0)for(let h=0;h<u.length;h++){let E=r(u[h]);n.has(E)&&i.set(E,h)}let a=u.slice(),s=0,l=0,m=[];if(e.update)for(let h of e.update){let E=i.get(r(h));E!==void 0&&(a[E]=h,m.push(E),s++)}if(e.remove&&e.remove.length>0){let h=new Set(e.remove.map(g=>yi(g)?g:r(g))),E=a.filter(g=>!h.has(r(g)));l=a.length-E.length,a=E}let c=e.add?.length??0;if(c>0){let h=e.addBeforeKey===void 0?-1:a.findIndex(g=>r(g)===e.addBeforeKey),E=e.add;h>=0?a=a.slice(0,h).concat(E,a.slice(h)):e.addPosition==="first"?a=E.concat(a):a=a.concat(E)}if(!(l>0||c>0)&&this.rowModel.patchData?this.rowModel.patchData(a,m,this.columns):this.rowModel.setData?.(a),this.bumpDataEpoch(),l>0){let h=new Set(a.map(E=>r(E)));this.selection.retainKeys(h)&&this.emitSelectionChanged()}this.events.emit("rowsChanged",{added:c,updated:s,removed:l}),this.events.emit("dataUpdated",{totalCount:a.length}),this.recompute(!0)}applyTransactionAsync(e,t){this.disposed||(this.asyncQueue.push(e),t&&this.asyncCallbacks.push(t),this.asyncTimer===null&&(this.asyncTimer=setTimeout(()=>{this.asyncTimer=null,this.flushAsyncTransactions()},this.asyncTransactionWait)))}flushAsyncTransactions(){if(this.asyncTimer!==null&&(clearTimeout(this.asyncTimer),this.asyncTimer=null),this.asyncQueue.length===0)return;let e=this.asyncQueue,t=this.asyncCallbacks;this.asyncQueue=[],this.asyncCallbacks=[];let u=mo(e,this.keyGetter);go(u)||this.applyTransaction(u),this.events.emit("asyncTransactionsFlushed",{count:e.length});for(let r of t)r()}getPendingAsyncTransactionCount(){return this.asyncQueue.length}remoteUpdateKeepsPlacement(e){let{sort:t,searchText:u,groupBy:r}=this.store.getState(),n=Ar(this.columns,{sort:ir(t,r),filter:this.runningFilter(),searchText:u});if(n.length===0)return!0;for(let i of e){let a=this.getRowByKey(this.keyGetter(i));if(!a)return!1;for(let s of n){let l=this.columns.getCellValue(a,s),m=this.columns.getCellValue(i,s);if(!Object.is(l,m))return!1}}return!0}getRowKeyField(){return this.rowKeyField}getRowKey(e){return this.keyGetter(e)}invalidate(){this.rowModel.invalidate?.(),this.bumpDataEpoch(),this.recompute()}isRemote(){return this.rowModel.mode==="remote"}refresh(){return this.recompute()}flashCells(e={}){this.events.emit("cellsFlashed",{rowKeys:[...e.rowKeys??[]],columnIds:[...e.columnIds??[]],duration:e.duration??700})}refreshCells(){this.cellRevision++,this.events.emit("cellsRefreshed",{revision:this.cellRevision})}isDisposed(){return this.disposed}dispose(){this.disposed||(this.events.emit("gridPreDestroyed",{state:this.getViewState()}),this.disposed=!0,this.unsubscribeStore(),this.scrollEndTimer!==null&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=null),this.asyncTimer!==null&&(clearTimeout(this.asyncTimer),this.asyncTimer=null),this.asyncQueue=[],this.asyncCallbacks=[],this.rowModel.dispose?.(),this.events.clear(),this.lastResult={nodes:[],visibleCount:0,totalCount:0},this.viewNodes=[],this.allViewNodes=[],this.summaryValues={},this.rowIndexCache=null,this.invalidateResultCaches())}serverSummaryRequests(){if(this.summaryDefs.length===0)return;let e=[];for(let t of this.summaryDefs)t.type!=="custom"&&e.push({columnId:t.columnId,type:t.type});return e.length>0?e:void 0}neededRange(){if(this.paginationEnabled){let{page:u,pageSize:r}=this.store.getState(),n=u*r;return{start:n,end:n+r}}let e=this.virtual.getWindow().rows,t=Math.max(1,e.end-e.start);return{start:Math.max(0,e.start-t),end:e.end+t}}getBusy(){return this.busy}foregroundDepth=0;setBusy(e,t,u=!0){let r=e!==null,n=r&&u,i=r&&this.foregroundDepth===0;this.busy.busy===r&&this.busy.phase===e&&this.busy.progress===t&&this.busy.cancellable===n&&this.busy.background===i||(this.busy={busy:r,phase:e,progress:t,cancellable:n,background:i},this.events.emit("busyChanged",this.busy))}async withBusy(e,t,u=!1){this.busyDepth++,u||this.foregroundDepth++,this.setBusy(e,null);try{return await t()}finally{this.busyDepth--,u||this.foregroundDepth--,this.busyDepth===0&&this.setBusy(null,null)}}cancel(){this.disposed||(this.computeToken++,this.exportToken++,this.exportAbort?.abort(),this.exportAbort=null,this.rowModel instanceof pu&&this.rowModel.cancel())}async recompute(e=!1){if(!this.disposed)return this.withBusy("computing",()=>this.recomputeInner(),e)}async recomputeInner(){let e=++this.computeToken,{sort:t,searchText:u,groupBy:r}=this.store.getState(),n=this.runningFilter(),i=ir(t,r),a,s=performance.now();try{a=await this.rowModel.getRows(this.columns,{sort:i,filter:n,searchText:u,externalFilter:this.externalFilter,range:this.neededRange(),summaries:this.serverSummaryRequests()})}catch(w){!(w instanceof Ge)&&!(w instanceof gu)&&(this.events.emit("dataError",{error:w}),this.debugMode&&console.error("[datagrid] row model failed",w));return}if(e!==this.computeToken||this.disposed)return;let l=Math.round(performance.now()-s),m=performance.now(),c=this.remote();if(c)this.summaryValues=this.summaryDefs.length>0?c.getSummaries():{},this.summaryBasis=null;else if(this.summaryDefs.length>0){let w=this.currentSummaryBasis(n,u),D=this.summaryBasis===w,S=D?this.summaryDefs.filter(T=>T.type==="custom"&&T.dependsOnOrder!==!1):this.summaryDefs;S.length>0?this.runSummaryPass(a.nodes,S,D,w,e):this.summaryBasis=w}else this.summaryValues={},this.summaryBasis=null;let h=Math.round(performance.now()-m);this.lastResult=a,this.invalidateResultCaches();let E=performance.now();this.projectView();let g=this.rowModel.getLastTimings?.();this.lastComputeTimings={modelMs:l,summaryMs:h,projectViewMs:Math.round(performance.now()-E),...g}}getComputeTimings(){return this.lastComputeTimings}projectView(){if(this.disposed)return;let e=this.store.getState(),t=e.groupBy,u=this.focus.getIndices(this.focusContext())?.rowIndex,r=this.treeView();r&&t.length>0&&!this.warnedTreeGrouping&&(this.warnedTreeGrouping=!0,this.debugMode&&console.warn("[datagrid] `tree` and grouping are mutually exclusive \u2014 grouping is ignored."));let n=r??(t.length>0&&this.rowModel.mode==="client"?ho(this.ensureGroupTree(t),{collapsedKeys:this.store.collapsedSet(),collapsedByDefault:this.collapsedByDefault}).nodes:this.lastResult.nodes),i=this.masterDetail?Ho(n,{expandedKeys:this.store.expandedSet(),expandedByDefault:this.masterDetail.expandedByDefault,height:this.masterDetail.height}):n,a=this.editForm?zo(i,{rowKey:this.editForm.rowKey,height:this.editForm.height,atTop:this.editForm.atTop}):i;if(this.allViewNodes=a,this.infiniteScroll)this.infiniteLimit=Math.min(this.infiniteLimit,Math.max(this.infinitePageSize,a.length)),this.viewNodes=a.slice(0,this.infiniteLimit);else if(this.paginationEnabled){let{pageSize:l}=e,m=this.store.clampPage(Math.ceil(a.length/l))*l;this.viewNodes=a.slice(m,m+l)}else this.viewNodes=a;this.rowIndexCache=null,this.rebuildRowHeights();let s=this.virtual.setRowCount(this.viewNodes.length);this.focus.reconcile(this.focusContext(),u)&&this.emitFocusChanged(),this.events.emit("contentReady",{rows:this.lastResult.nodes,totalCount:this.lastResult.totalCount,visibleCount:this.lastResult.visibleCount}),this.emitPaginationChanged(!0),!this.firstDataRenderedSent&&this.viewNodes.length>0&&(this.firstDataRenderedSent=!0,this.events.emit("firstDataRendered",{rowCount:this.viewNodes.length})),this.emitIfWindowChanged(s)}treeView(){if(!this.treeData||!this.treeParent||this.rowModel.mode!=="client")return null;let e=this.rowModel.getSourceRows?.();return e?((!this.treeIndex||this.treeIndexEpoch!==this.dataEpoch)&&(this.treeIndex=xs(e,this.keyGetter,this.treeParent),this.treeIndexEpoch=this.dataEpoch),Ds(this.dataNodes(),{index:this.treeIndex,sourceRows:e,isExpanded:t=>this.isTreeRowExpanded(t)}).nodes):null}isTreeRowExpanded(e){return this.treeExpandedByDefault!==this.treeToggled.has(e)}expandTreeRow(e){this.setTreeRowExpanded(e,!0)}collapseTreeRow(e){this.setTreeRowExpanded(e,!1)}toggleTreeRow(e){this.setTreeRowExpanded(e,!this.isTreeRowExpanded(e))}setTreeRowExpanded(e,t){this.treeData&&this.isTreeRowExpanded(e)!==t&&(t===this.treeExpandedByDefault?this.treeToggled.delete(e):this.treeToggled.add(e),this.reproject())}expandAllTreeRows(){this.treeData&&(this.treeExpandedByDefault=!0,this.treeToggled.clear(),this.reproject())}collapseAllTreeRows(){this.treeData&&(this.treeExpandedByDefault=!1,this.treeToggled.clear(),this.reproject())}reproject(){if(!this.disposed){this.busyDepth++,this.setBusy("projecting",null);try{this.projectView()}finally{this.busyDepth--,this.busyDepth===0&&this.setBusy(null,null)}}}emitSortChanged(){this.resetReveal(),this.events.emit("sortChanged",{sort:this.store.getState().sort})}layoutRuntime(){let e=this.columns.runtime();if(this.showGroupedColumns)return e;let t=this.store.getState().groupBy;return t.length===0?e:e.filter(u=>!t.includes(u.state.id))}rebuildRowHeights(){let e=this.measuredRowHeights,t=this.masterDetail!==null||this.editForm!==null;if(!this.getRowHeightFn&&!t&&e.size===0)return this.virtual.setRowHeights(null);let u=this.virtual.getRowHeight(),r=this.viewNodes,n=new Map;for(let i=0;i<r.length;i++){let a=r[i],s;a.kind==="detail"||a.kind==="editform"?s=a.height:s=e.get(a.key)??this.getRowHeightFn?.(a,i),s!==void 0&&s!==u&&n.set(i,Math.max(1,s))}return this.virtual.setRowHeights(n)}setMeasuredRowHeights(e){let t=e.size!==this.measuredRowHeights.size;if(!t){for(let[r,n]of e)if(this.measuredRowHeights.get(r)!==n){t=!0;break}}if(!t)return!1;this.measuredRowHeights=new Map(e);let u=this.rebuildRowHeights();return this.emitIfWindowChanged(u),u}getMeasuredRowHeights(){return this.measuredRowHeights}clearMeasuredRowHeights(){if(this.measuredRowHeights.size===0)return!1;this.measuredRowHeights=new Map;let e=this.rebuildRowHeights();return this.emitIfWindowChanged(e),e}getRowHeightAt(e){return this.virtual.getRowHeightAt(e)}getRowOffset(e){return this.virtual.getRowOffset(e)}getCellSpans(e){let t=this.columns.getDef(e)?.spanRows;if(!t)return ks;this.spanCacheResult!==this.lastResult&&(this.spanCache.clear(),this.spanCacheResult=this.lastResult);let u=this.spanCache.get(e);if(u)return u;let r=Ao(this.lastResult.nodes,n=>this.columns.getCellValue(n,e),typeof t=="function"?t:void 0);return this.spanCache.set(e,r),r}hasCellSpans(){return this.columns.runtime().some(e=>e.def.spanRows)}emitColumnStateChanged(){let e=this.virtual.setColumnLayout(gi(this.layoutRuntime()));this.events.emit("columnStateChanged",{columns:this.columns.getColumnStates()}),this.emitIfWindowChanged(e)}emitIfWindowChanged(e){return e&&!this.disposed&&(this.events.emit("viewportChanged",{window:this.virtual.getWindow()}),this.maybeRevealMore()),e}maybeRevealMore(){if(!this.infiniteScroll||this.disposed)return;let e=this.virtual.getWindow().rows,t=Math.max(1,e.end-e.start);e.end+t<this.infiniteLimit||this.revealMore()}assertColumn(e){let t=!!this.columns.getState(e);return!t&&this.debugMode&&console.error(`[datagrid] unknown column id "${e}".`),t}},Rr={compact:24,normal:28,comfortable:36};var Nr={quartz:{compact:26,normal:36,comfortable:44},balham:{compact:20,normal:25,comfortable:32},material:{compact:32,normal:40,comfortable:52},alpine:{compact:26,normal:34,comfortable:42},kanuni:{compact:24,normal:32,comfortable:40},"kanuni-midnight":{compact:24,normal:32,comfortable:40}};function bu(e,t,u){return e?Nr[e][t??"normal"]:t?Rr[t]:u}function Tr(e){return{sum:e.summarySum,avg:e.summaryAvg,min:e.summaryMin,max:e.summaryMax,count:e.summaryCount,countDistinct:e.summaryDistinct,custom:e.summaryCustom}}var Ps=Tr(Pt("en"));function Mr(e,t=Ps){return e.label??t[e.type]}var Gs=new Set(["sum","avg","min","max"]);function Ir(e,t,u){if(e.valueFormatter)return e.valueFormatter(t??null);if(t==null)return"\u2014";if(!Gs.has(e.type))return t.toLocaleString();if(u?.dataType==="date"){let r=new Date(t);return u.valueFormatter?u.valueFormatter(r,{}):r.toLocaleDateString()}return u?.valueFormatter?u.valueFormatter(t,{}):String(Math.round(t*100)/100)}function _i(e){switch(e){case"number":return["sum","avg","min","max","count","countDistinct"];case"date":return["min","max","count","countDistinct"];default:return["count","countDistinct"]}}var Os=[">=","<=","<>",">","<","="];function ji(e,t,u){let r=t.trim();if(r==="")return null;for(let n of Os)if(r.startsWith(n)){let i=r.slice(n.length).trim();if(i==="")return null;let a=u==="number"?Number(i):Number.NaN;return{columnId:e,operator:n,value:Number.isNaN(a)?i:a}}if(u==="number"){let n=Number(r);return Number.isNaN(n)?{columnId:e,operator:"contains",value:r}:{columnId:e,operator:"=",value:n}}if(u==="boolean"){let n=r.toLowerCase();return n==="true"||n==="false"?{columnId:e,operator:"=",value:n==="true"}:{columnId:e,operator:"contains",value:r}}return u==="date"?{columnId:e,operator:"contains",value:r}:{columnId:e,operator:"contains",value:r}}function Yi(e,t){if(e.scrollHeight<1e6)return null;let u=e.scrollTop;e.scrollTop=1e8;let r=e.scrollTop;if(e.scrollTop=u,r<=0)return null;let n=t.getVirtualWindow().rows.totalHeight-e.clientHeight;return r>=n-4?null:(t.setMaxScrollOffset(r),r)}function vu(e,t){let{controller:u,maxGroupLevels:r,t:n}=t,i=e.columnId,a=u.getColumnModel().getDef(i),s=u.getSort(),l=s.find(N=>N.columnId===i),m=u.getGroupLevels(),c=m.includes(i),h=a?.sortable!==!1,E=u.getColumnStates().find(N=>N.id===i)?.pinned??null,g=a?.groupable!==!1,w=[{id:"sort-asc",label:n.sortAsc,disabled:!h||l?.direction==="asc",onSelect:()=>u.setSort([{columnId:i,direction:"asc"}])},{id:"sort-desc",label:n.sortDesc,disabled:!h||l?.direction==="desc",onSelect:()=>u.setSort([{columnId:i,direction:"desc"}])},{id:"sort-clear",label:n.clearSort,disabled:!l,onSelect:()=>u.setSort(s.filter(N=>N.columnId!==i))},{id:"sep-1",separator:!0},{id:"group",label:c?n.ungroupColumn:n.groupByColumn,disabled:!g,onSelect:()=>{c?u.groupBy(m.filter(N=>N!==i)):u.groupBy([...m,i].slice(-r))}},{id:"group-panel",label:t.groupPanelVisible?n.hideGroupPanel:n.showGroupPanel,onSelect:t.onToggleGroupPanel},{id:"footer",label:t.footerVisible?n.hideFooter:n.showFooter,onSelect:t.onToggleFooter},{id:"sep-2",separator:!0},{id:"hide-column",label:n.hideColumn,disabled:u.getColumnStates().filter(N=>N.visible).length<=1,onSelect:()=>u.setColumnVisible(i,!1)},{id:"field-chooser",label:n.fieldChooser,onSelect:t.onOpenFieldChooser},{id:"sep-3",separator:!0},{id:"best-fit",label:n.bestFit,disabled:a?.resizable===!1,onSelect:()=>t.onBestFit(i)},{id:"best-fit-all",label:n.bestFitAll,onSelect:t.onBestFitAll}],D=u.getColumnStates().filter(N=>N.visible&&N.pinned===E).map(N=>N.id),S=D.indexOf(i),T=a?.reorderable!==!1&&S>=0;return w.push({id:"sep-4",separator:!0},{id:"move-left",label:n.moveLeft,disabled:!T||S<=0,onSelect:()=>u.moveColumn(i,D[S-1])},{id:"move-right",label:n.moveRight,disabled:!T||S<0||S>=D.length-1,onSelect:()=>u.moveColumn(i,D[S+2])},{id:"fixed-position",label:n.fixedPosition,items:[{id:"pin-left",label:n.pinLeft,disabled:E==="left",onSelect:()=>u.setColumnPinned(i,"left")},{id:"pin-right",label:n.pinRight,disabled:E==="right",onSelect:()=>u.setColumnPinned(i,"right")},{id:"pin-sticky",label:n.pinSticky,disabled:E==="sticky",onSelect:()=>u.setColumnPinned(i,"sticky")}]},{id:"unpin",label:n.unpin,disabled:E===null,onSelect:()=>u.setColumnPinned(i,null)}),w}async function Zi(e,t){try{let u=t==="csv"?await e.exportToCsv():t==="excel"?await e.exportToExcel():t==="excel-selected"?await e.exportToExcel({selectedOnly:!0}):await e.exportToPdf();return Pi(u.blob,u.fileName),{completed:!0}}catch(u){return u instanceof ut?{completed:!1}:{completed:!1,error:u instanceof Error?u.message:String(u)}}}var Ji=null;function Vs(){return typeof document>"u"?null:(Ji??=document.createElement("canvas"),Ji.getContext("2d"))}function Qi(e){let t=getComputedStyle(e);return`${t.fontStyle} ${t.fontWeight} ${t.fontSize} ${t.fontFamily}`}function xu(e,t){let u=Vs();if(!u)return null;let r=typeof CSS<"u"&&CSS.escape?CSS.escape(t):t.replace(/"/g,'\\"'),n=e.querySelector(`.kanuni-datagrid-header-cell[data-column-id="${r}"]`),i=e.querySelectorAll(`.kanuni-datagrid-cell[data-column-id="${r}"]`);if(!n&&i.length===0)return null;let a=0;if(n){let s=n.querySelector(".kanuni-datagrid-header-label")??n;u.font=Qi(s),a=u.measureText(s.textContent??"").width+44}if(i.length>0){u.font=Qi(i[0]);for(let s=0;s<i.length;s++){let l=i[s].textContent??"";if(l==="")continue;let m=u.measureText(l).width+20;m>a&&(a=m)}}return a===0?null:Math.round(Math.min(640,Math.max(48,a)))}var gt=60,Ot=36,ft=28,Vt="application/x-kanuni-row",Gt=new Map,Lr=new Set,Gr=5e3,rt=0,Ks=["columnStateChanged","sortChanged"],Hs=["columnStateChanged"],zs=["contentReady","viewportChanged","filterChanged","selectionChanged","focusChanged","summariesChanged","cellsRefreshed"],k=(e,t="div")=>{let u=document.createElement(t);return u.className=e,u},Kt="http://www.w3.org/2000/svg";function Ws(e,t){let u=n=>{t&&console.warn(`[datagrid] ${n} is an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to use it.`)},r={...e};if(r.dataSource!=null&&!Array.isArray(r.dataSource))throw new Error("[datagrid] a server-side DataSource is an Enterprise feature. Pass an array to createGrid, or use createEnterpriseGrid from @kanunilabs/datagrid-enterprise.");if(r.summaries&&(u("footer column totals are"),delete r.summaries),r.columns?.some(n=>n.spanRows)&&(u("cell span/merge (spanRows) is"),r={...r,columns:r.columns.map(n=>n.spanRows?{...n,spanRows:void 0}:n)}),r.tree&&(u("tree data is"),delete r.tree),r.masterDetail&&(u("master-detail is"),delete r.masterDetail),r.grouping){let{groupBy:n,groupSummaries:i}=r.grouping,a=n==null?[]:typeof n=="string"?[n]:n;(a.length>1||i)&&(u("multi-level grouping and group summaries are"),r={...r,grouping:{...r.grouping,groupBy:a.slice(0,1),groupSummaries:!1}})}return r}var Us={columnResize:"use `resizable`",columnReorder:"use `reorderable`",groupPanel:"use `grouping: { panel: true }`",autoColumns:"columns are inferred automatically when `columns` is empty",loadingOverlay:"",onReady:"the controller is returned directly \u2014 use `grid.controller`",className:"style the host element you pass in",style:"style the host element you pass in",toolbarItemsBefore:"",renderRow:"",announcements:"",filterPanelLabels:"",filterIconMode:"",autoSizeStrategy:"",footerMenu:"",showRowCount:"",onOpenFilterBuilder:""},Du=new Set;function $s(e){for(let t of Object.keys(e)){let u=Us[t];u===void 0||u===""||Du.has(t)||(Du.add(t),console.warn(`[datagrid] \`${t}\` is a React-only option \u2014 ${u}.`))}}function qs(){let e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("width","14"),e.setAttribute("height","14"),e.setAttribute("viewBox","0 0 16 16"),e.setAttribute("aria-hidden","true"),e.setAttribute("focusable","false");let t=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("d","M8 1v8m0 0L5 6m3 3 3-3M2 11v2a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","1.5"),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round"),e.appendChild(t),e}function _s(){let e=document.createElementNS(Kt,"svg");e.setAttribute("width","11"),e.setAttribute("height","11"),e.setAttribute("viewBox","0 0 16 16"),e.setAttribute("aria-hidden","true"),e.setAttribute("focusable","false");let t=document.createElementNS(Kt,"path");return t.setAttribute("d","M1.5 2.5h13L9.5 8.6v4.3l-3 1.6V8.6L1.5 2.5Z"),t.setAttribute("fill","currentColor"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","0.6"),t.setAttribute("stroke-linejoin","round"),e.appendChild(t),e}function js(e){let t=document.createElementNS(Kt,"svg");t.setAttribute("width","14"),t.setAttribute("height","14"),t.setAttribute("viewBox","0 0 16 16"),t.setAttribute("aria-hidden","true"),t.setAttribute("focusable","false");let u=document.createElementNS(Kt,"rect");u.setAttribute("x","2"),u.setAttribute("y","2"),u.setAttribute("width","12"),u.setAttribute("height","12"),u.setAttribute("rx","2"),u.setAttribute("fill","none"),u.setAttribute("stroke","currentColor"),u.setAttribute("stroke-width","1.3"),t.appendChild(u);let r=n=>{let i=document.createElementNS(Kt,"path");i.setAttribute("d",n),i.setAttribute("fill","none"),i.setAttribute("stroke","currentColor"),i.setAttribute("stroke-width","1.3"),i.setAttribute("stroke-linecap","round"),t.appendChild(i)};return r("M5 8h6"),e&&r("M8 5v6"),t}function Ys(e,t){let u=e??(t==="number"?"right":"left");return u==="right"?"kanuni-datagrid-cell kanuni-datagrid-cell--number":u==="center"?"kanuni-datagrid-cell kanuni-datagrid-cell--center":"kanuni-datagrid-cell"}function Pr(e){let t="kanuni-datagrid-root";return e.dark&&(t+=" kanuni-datagrid-dark"),e.theme&&(t+=` kanuni-datagrid-theme-${e.theme}`),e.palette&&(t+=` kanuni-datagrid-palette-${e.palette}`),e.density&&(t+=` kanuni-datagrid-density-${e.density}`),t}function Xi(e,t){let{theme:u,palette:r,density:n,dark:i,striped:a=!0,rowNumbers:s=!1,locale:l="en",footer:m=!1,footerMenu:c=!0,footerPosition:h="bottom",notes:E,pinnedTopRows:g=[],pinnedBottomRows:w=[],resizable:D=!0,reorderable:S=!0,filterRow:T=!1,headerFilter:N=!1,filterIconMode:O="hover",filterPanel:z=!1,onOpenFilterBuilder:Z,focusedRow:j=!1,focusedRowKey:J,onFocusedRowChanged:nt,onRowClick:Fu,onRowActivate:Ct,autoSizeStrategy:V="none",renderRow:H,announcements:Y=!0,filterPanelLabels:_,showRowCount:Ee=!1,toolbarColumnChooser:He=!1,cellMenu:Ae=!0,rowMenu:he,headerMenu:ae,rowDrag:ue,alignedGrids:ee,printLayout:ze,renderCellContent:Su,getCellClassName:Bu,onCellPointerDown:Or,onCellPointerEnter:Ht,onCellDoubleClick:Vr,renderDetail:Kr,renderEditForm:ea,enterpriseEdition:Te=!1,stateStoring:Hr,tooltip:ku=!0,filterDebounce:ta,toolbar:zr=!1,highlightSearch:ua=!0,sortable:ra=!0,toolbarItemsAfter:na,toolbarItemsBefore:ia,toolbarExcel:aa=!1,toolbarPdf:oa=!1,searchDebounce:la=200,...sa}=t;$s(t),Ee&&!Du.has("showRowCount:deprecated")&&(Du.add("showRowCount:deprecated"),console.warn("[datagrid] `showRowCount` was retired on 2026-08-15 and does nothing in either renderer. The row count lives in the status bar (Enterprise) or the pager."));let I=Pt(l),{emptyText:da=I.noData,loadingText:ca=I.busy,loadingOverlay:Ru=!0,...pe}=sa,Wr=typeof Ru=="number"?Ru:300,Nu=Tr(I);if(!pe.columns||pe.columns.length===0){let o=Array.isArray(pe.dataSource)?pe.dataSource:[];pe.columns=bi(o)}pe.rowHeight===void 0&&(pe.rowHeight=bu(u,n,28));let ha=Te?pe:Ws(pe,!!t.debugMode),We=Te?E:void 0;!Te&&E&&t.debugMode&&console.warn("[datagrid] cell notes are an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to show them.");let A=new qi(ha);A.setEnterpriseEdition(Te),J!=null&&A.focusRow(J);let $=k(Pr(t));$.style.height="100%",$.setAttribute("role","grid"),$.setAttribute("data-grid-id",t.gridId),u&&$.setAttribute("data-theme",u),$.style.setProperty("--dg-row-height",`${A.getRowHeight()}px`);let U=k("kanuni-datagrid-scroller"),oe=k("kanuni-datagrid-canvas"),we=k("kanuni-datagrid-header");we.setAttribute("role","row");let me=k("kanuni-datagrid-rows");me.style.position="relative";let Q=k("kanuni-datagrid-viewport");me.appendChild(Q);let wt=k("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--top"),Ur=k("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--bottom"),Be=m,Ue=h==="top",ne=k(`kanuni-datagrid-footer-row kanuni-datagrid-footer-row--${Ue?"top":"bottom"}`);if(ne.setAttribute("role","row"),ne.setAttribute("aria-label",I.columnTotalsAria),c){let o=d=>{let p=d.target?.closest(".kanuni-datagrid-footer-cell")?.getAttribute("data-column-id");p&&(d.preventDefault(),Ma(p,{left:d.clientX,top:d.clientY}))};ne.addEventListener("click",o),ne.addEventListener("contextmenu",o)}let zt=k("kanuni-datagrid-bands-host");zt.style.display="contents";let it=k("kanuni-datagrid-filter-row");it.setAttribute("role","row"),oe.append(zt,we),T&&oe.append(it);let Tu=T?2:1;ne.style.setProperty("--dg-pinned-gap",String(Ue?Tu:0)),wt.style.setProperty("--dg-pinned-gap",String(Tu+(Be&&Ue?1:0))),Be&&Ue&&oe.append(ne),g.length>0&&oe.append(wt),oe.append(me),w.length>0&&oe.append(Ur),Be&&!Ue&&oe.append(ne),U.appendChild(oe);let $e=k("kanuni-datagrid-toolbar"),at=k("kanuni-datagrid-pager");at.setAttribute("role","navigation"),at.setAttribute("aria-label","Pagination");let qe=k("kanuni-datagrid-filter-panel"),_e=!!pe.grouping?.panel,le=k("kanuni-datagrid-group-panel");zr&&$.appendChild($e),_e&&$.appendChild(le),$.appendChild(U),z&&$.appendChild(qe),pe.pagination?.enabled&&$.appendChild(at);let yt=k("kanuni-datagrid-loading-overlay"),$r=k("kanuni-datagrid-loading-card"),qr=k("kanuni-datagrid-loading-spinner","span");qr.setAttribute("aria-hidden","true");let _r=k("kanuni-datagrid-loading-label","span");_r.textContent=ca,$r.append(qr,_r),yt.appendChild($r),yt.style.display="none";let Et=k("kanuni-datagrid-sr-only","div");Et.setAttribute("role","status"),Et.setAttribute("aria-live","polite"),Et.setAttribute("aria-atomic","true");let Wt=k("kanuni-datagrid-empty");Wt.textContent=da,Wt.style.display="none",$.append(yt,Wt),Y&&$.appendChild(Et),e.appendChild($);let jr=pe.selection,Ut=(jr?.mode??"none")!=="none"&&(jr?.checkboxColumn??!1),$t=A.hasMasterDetail()&&!!Kr,Mu=s?gt:0,Yr=Mu+($t?ft:0),be=(s?gt:0)+($t?ft:0)+(Ut?Ot:0);A.setLeadWidth(be);let qt=!!ue?.enabled,At=ue?.group??null,Zr=ue?.allowReordering??!0,Jr=ue?.allowDropInsert??At!==null,ke=null,_t=null,jt=!1,je=null,Me=null;function ot(o){je=o;for(let d of Q.querySelectorAll(".kanuni-datagrid-row")){let f=d.getAttribute("data-row-key"),p=o!==null&&f===String(o.key);d.classList.toggle("kanuni-datagrid-row--drop-before",p&&o.side==="before"),d.classList.toggle("kanuni-datagrid-row--drop-after",p&&o.side==="after")}}let Qr=(o,d)=>{let f=d.getBoundingClientRect();return o.clientY<f.top+f.height/2?"before":"after"},Xr=o=>o.dataTransfer?.types.includes(Vt)?ke!==null?Zr:Jr&&At!==null:!1;function en(o,d,f){let p=null;try{let y=o.dataTransfer?.getData(Vt);p=y?JSON.parse(y):null}catch{p=null}if(p){if(p.gridId===A.gridId){if(!Zr)return;if(ue?.onReorder){ue.onReorder({dragKey:p.rowKey,targetKey:d,position:f,row:A.getRowByKey(p.rowKey)});return}A.moveRow(p.rowKey,d,f);return}!Jr||At===null||p.group!==At||ue?.onAdd?.({row:p.row,rowKey:p.rowKey,otherGridId:p.gridId,targetKey:d,position:f})}}let pa=o=>{let d=Ie(o);if(!d||d.node.kind!=="data"||!o.dataTransfer)return;ke=d.node.key,_t=d.node.key,jt=!1;let f={gridId:A.gridId,group:At,rowKey:d.node.key,row:d.node.data};o.dataTransfer.setData(Vt,JSON.stringify(f)),o.dataTransfer.setData("text/plain",String(d.node.key)),o.dataTransfer.effectAllowed="move",A.notifyRowDrag("enter",{rowKey:d.node.key})},ma=o=>{if(!Xr(o))return;o.preventDefault(),o.dataTransfer&&(o.dataTransfer.dropEffect="move");let d=Ie(o);if(!d||d.node.kind!=="data")return;if(ke===d.node.key){Me=null,ot(null);return}let f=o.target.closest(".kanuni-datagrid-row"),p=Qr(o,f),y=je?.key!==d.node.key||je.side!==p;Me={key:d.node.key,side:p},ot({key:d.node.key,side:p}),y&&ke!==null&&A.notifyRowDrag("move",{rowKey:ke,overKey:d.node.key,position:p})},ga=o=>{if(!Xr(o)){ot(null);return}o.preventDefault();let d=Ie(o);if(jt=!0,d&&d.node.kind==="data"){let f=o.target.closest(".kanuni-datagrid-row"),p=Qr(o,f);Me={key:d.node.key,side:p},en(o,d.node.key,p)}else Me=null,en(o,null,"after");ke=null,ot(null)},fa=()=>{_t!==null&&A.notifyRowDragEnd({rowKey:_t,dropped:jt,overKey:Me?.key??null,position:Me?.side??null}),jt=!1,_t=null,ke=null,Me=null,ot(null)},Ca=o=>{let d=o.relatedTarget;d&&me.contains(d)||ke!==null&&(Me=null,ot(null),A.notifyRowDrag("leave",{rowKey:ke}))},bt=ze===void 0||ze===!1?null:(()=>{let o=ze===!0?{}:ze;return{always:o.always??!1,maxRows:o.maxRows??Gr}})(),vt=!1;function Iu(o){vt!==o&&(vt=o,$.classList.toggle("kanuni-datagrid-print",o),o?(rt++,document.documentElement.classList.add("kanuni-datagrid-printing")):(rt--,rt<=0&&(rt=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),Vu())}let tn=null;if(bt&&!bt.always){let o=()=>{let f=A.getRows().length;if(f>bt.maxRows){A.isDebugMode()&&console.warn(`[datagrid] print layout skipped: ${f} rows exceeds maxRows (${bt.maxRows}). Printing the visible rows instead \u2014 use exportPdf() for the whole result.`);return}Iu(!0)},d=()=>Iu(!1);window.addEventListener("beforeprint",o),window.addEventListener("afterprint",d),tn=()=>{window.removeEventListener("beforeprint",o),window.removeEventListener("afterprint",d)}}let Ye=0,ve=[],se=0,Lu=0;function Pu(){let o=A.getColumnLayout(),d=A.getVirtualWindow().columns,f=[],p=(b,x,F,v)=>{let C=b.def;f.push({def:C,id:b.state.id,width:b.state.width,pinned:x,inset:F,className:Ys(C.align,C.dataType)+(x?" kanuni-datagrid-cell--pinned":"")+(C.autoHeight?" kanuni-datagrid-cell--wrap":""),visualIndex:v})};o.left.forEach((b,x)=>p(b,"left",o.leftOffsets[x]+be,x));for(let b=d.start;b<d.end&&b<o.center.length;b++)p(o.center[b],null,0,o.left.length+b);o.right.forEach((b,x)=>p(b,"right",o.rightOffsets[x],o.left.length+o.center.length+x)),ve=f,se=d.offsetX;let y=(o.centerOffsets[Math.min(d.end,o.center.length)]??0)-(o.centerOffsets[Math.min(d.start,o.center.length)]??0);Lu=Math.max(0,o.centerWidth-d.offsetX-y),oe.style.minWidth=`${o.totalWidth+be}px`}let Yt=26;function wa(){let o=A.getColumnLayout(),d=A.getVirtualWindow().columns,f=[...o.left,...o.center.slice(d.start,Math.min(d.end,o.center.length)),...o.right],p=Ei(f);if(zt.textContent="",we.style.top=`${p*Yt}px`,$.style.setProperty("--dg-band-offset",`${p*Yt}px`),p===0)return;Ai(f,p).forEach((b,x)=>{let F=k("kanuni-datagrid-band-row");if(F.style.top=`${x*Yt}px`,F.style.height=`${Yt}px`,be>0){let v=k("kanuni-datagrid-band-cell kanuni-datagrid-band-cell--spacer kanuni-datagrid-band-cell--pinned");v.style.width=`${be}px`,v.style.flex="none",v.style.insetInlineStart="0px",F.appendChild(v)}if(se>0){let v=k("kanuni-datagrid-spacer");v.style.width=`${se}px`,v.style.flex="none",F.appendChild(v)}for(let v of b){let C=k(`kanuni-datagrid-band-cell${v.spacer?" kanuni-datagrid-band-cell--spacer":""}`);if(C.style.width=`${v.width}px`,C.style.flex="none",!v.spacer){if(v.columnIds.length>0){let R=Ne(A.getColumnModel().getDef(v.columnIds[0])).slice(0,x+1);if(R.length===x+1&&A.isBandCollapsible(R)){let M=A.isBandCollapsed(R),L=document.createElement("button");L.type="button",L.className="kanuni-datagrid-band-toggle",L.setAttribute("aria-expanded",String(!M));let P=M?I.expandDetails??"Expand":I.collapseDetails??"Collapse";L.setAttribute("aria-label",P),L.title=P,L.appendChild(js(M)),L.addEventListener("click",K=>{K.stopPropagation(),A.toggleBand(R)}),C.appendChild(L)}}let B=k("kanuni-datagrid-band-label","span");B.textContent=v.label,C.appendChild(B)}F.appendChild(C)}zt.appendChild(F)})}let xt=null,Zt=null;function Jt(o,d){Zt&&Zt!==o&&Zt.classList.remove("kanuni-datagrid-header-cell--drop-before","kanuni-datagrid-header-cell--drop-after"),Zt=o,o&&(o.classList.toggle("kanuni-datagrid-header-cell--drop-before",d==="before"),o.classList.toggle("kanuni-datagrid-header-cell--drop-after",d==="after"))}function un(){if(!xt)return;let o=A.getSelectedCount(),d=A.getVisibleCount(),f=d>0&&o>=d;xt.checked=f,xt.indeterminate=!f&&o>0}function Gu(){wa();let o=A.getSort(),d=new Map(o.map((p,y)=>[p.columnId,{direction:p.direction,order:y}]));if(we.textContent="",xt=null,s){let p=k("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-rownum-cell");p.setAttribute("role","columnheader"),p.style.width=`${gt}px`,p.style.flex="none",p.style.insetInlineStart="0px",we.appendChild(p)}if($t){let p=k("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-detail-toggle-cell");p.setAttribute("role","columnheader"),p.setAttribute("aria-label",I.detailsAria),p.style.width=`${ft}px`,p.style.flex="none",p.style.insetInlineStart=`${Mu}px`,we.appendChild(p)}if(Ut){let p=k("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-select-cell");p.setAttribute("role","columnheader"),p.style.width=`${Ot}px`,p.style.flex="none",p.style.insetInlineStart=`${Yr}px`;let y=document.createElement("input");y.type="checkbox",y.setAttribute("aria-label",I.selectAllRows),y.addEventListener("change",()=>{A.getSelectedCount()>0?A.clearSelection():A.selectAll()}),p.appendChild(y),we.appendChild(p),xt=y,un()}let f=!1;for(let p of ve){if(!p.pinned&&!f){if(se>0){let v=document.createElement("div");v.style.flex=`0 0 ${se}px`,we.appendChild(v)}f=!0}let y=ra&&p.def.sortable!==!1,b=d.get(p.id),x=k(`kanuni-datagrid-header-cell${y?" kanuni-datagrid-header-cell--sortable":""}${p.pinned?" kanuni-datagrid-header-cell--pinned":""}`);x.setAttribute("role","columnheader"),x.setAttribute("data-column-id",p.id),x.setAttribute("aria-sort",b?b.direction==="asc"?"ascending":"descending":"none"),x.style.width=`${p.width}px`,x.style.flex="none",p.pinned==="left"&&(x.style.insetInlineStart=`${p.inset}px`),p.pinned==="right"&&(x.style.insetInlineEnd=`${p.inset}px`);let F=k("kanuni-datagrid-header-label","span");if(p.def.renderHeader){let v=p.def.renderHeader({column:p.def});typeof v=="string"?F.textContent=v:F.appendChild(v)}else F.textContent=p.def.headerName??p.id;if(x.appendChild(F),b){let v=k("kanuni-datagrid-sort-indicator","span");if(v.setAttribute("aria-hidden","true"),v.textContent=b.direction==="asc"?"\u25B2":"\u25BC",x.appendChild(v),o.length>1){let C=k("kanuni-datagrid-sort-order","span");C.setAttribute("aria-hidden","true"),C.textContent=String(b.order+1),x.appendChild(C)}}if(y){let v=p.id;x.addEventListener("click",C=>{A.toggleSort(v,C.shiftKey)})}if(ae!==!1){let v=p.id;x.addEventListener("contextmenu",C=>{C.preventDefault(),Ta(v,{left:C.clientX,top:C.clientY})})}if(N&&p.def.filterable!==!1){let v=document.createElement("button");v.type="button";let C=A.getColumnFilter(p.id)!==null;v.className=`kanuni-datagrid-filter-button${C?" kanuni-datagrid-filter-button--active":""}${O==="always"?" kanuni-datagrid-filter-button--pinned":""}`,v.setAttribute("aria-haspopup","dialog"),v.setAttribute("aria-label",`${p.def.headerName??p.id} filter`),v.appendChild(_s()),v.addEventListener("click",B=>{B.stopPropagation(),Fa(p.id,v)}),x.appendChild(v)}if(S&&p.def.reorderable!==!1&&(x.draggable=!0,x.addEventListener("dragstart",v=>{v.dataTransfer?.setData("text/x-kanuni-column",p.id),v.dataTransfer&&(v.dataTransfer.effectAllowed="move")}),x.addEventListener("dragover",v=>{if(!v.dataTransfer?.types.includes("text/x-kanuni-column"))return;v.preventDefault();let C=x.getBoundingClientRect(),B=v.clientX<C.left+C.width/2;Jt(x,B?"before":"after")}),x.addEventListener("dragleave",v=>{let C=v.relatedTarget;(!C||!x.contains(C))&&Jt(null,"before")}),x.addEventListener("drop",v=>{Jt(null,"before");let C=v.dataTransfer?.getData("text/x-kanuni-column");if(!C||C===p.id)return;v.preventDefault();let B=x.getBoundingClientRect();if(v.clientX<B.left+B.width/2)A.moveColumn(C,p.id);else{let M=ve.findIndex(L=>L.id===p.id);A.moveColumn(C,ve[M+1]?.id)}}),x.addEventListener("dragend",()=>Jt(null,"before"))),D&&p.def.resizable!==!1){let v=k("kanuni-datagrid-resize-handle","span");v.setAttribute("data-resize-handle",p.id),v.setAttribute("role","presentation"),v.addEventListener("click",C=>C.stopPropagation()),v.addEventListener("dblclick",C=>{C.stopPropagation(),La(p.id)}),v.addEventListener("pointerdown",C=>{C.preventDefault(),C.stopPropagation();let B=C.clientX,R=p.width,M=getComputedStyle(x).direction==="rtl"?-1:1;x.draggable=!1,v.setPointerCapture(C.pointerId);let L=R,P=!1,K=ie=>{P=!0,L=R+(ie.clientX-B)*M,A.setColumnWidth(p.id,L,!1)},W=()=>{v.removeEventListener("pointermove",K),v.removeEventListener("pointerup",W),P&&A.setColumnWidth(p.id,L,!0),x.draggable=S&&p.def.reorderable!==!1};v.addEventListener("pointermove",K),v.addEventListener("pointerup",W)}),x.appendChild(v)}we.appendChild(x)}}let rn=null,Qt=null;function ya(o){if(o===rn)return;rn=o;let d=[];for(let f=0;f<o.length;f++)o[f].kind!=="data"&&d.push(f);Qt=d.length>0?d:null}function Ea(o){if(!Qt)return o+1;let d=0,f=Qt.length;for(;d<f;){let p=d+f>>1;Qt[p]<=o?d=p+1:f=p}return o+1-d}let Dt=[];function nn(o="data"){let d=k("kanuni-datagrid-row");if(d.setAttribute("role","row"),o==="panel"){let C=document.createElement("div");return C.setAttribute("role","gridcell"),C.setAttribute("aria-colindex","1"),d.appendChild(C),{kind:o,root:d,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,panelCell:C,epoch:Ye}}if(o==="group"){let C=k("kanuni-datagrid-group-cell");C.setAttribute("role","gridcell"),C.setAttribute("aria-colindex","1");let B=k("kanuni-datagrid-group-twisty","span");B.setAttribute("aria-hidden","true");let R=k("kanuni-datagrid-group-caption","span"),M=k("kanuni-datagrid-group-label","span"),L=k("kanuni-datagrid-group-count","span"),P=k("kanuni-datagrid-group-aggregates","span");return C.append(B,R,M,L,P),d.appendChild(C),d.addEventListener("click",()=>{let K=d.getAttribute("data-group-key");K!==null&&A.toggleGroup(K)}),{kind:o,root:d,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,group:{cell:C,twisty:B,caption:R,label:M,count:L,aggregates:P},epoch:Ye}}if(qt){let C=k("kanuni-datagrid-row-grip","span");C.setAttribute("aria-hidden","true"),C.title=I.dragToReorder??"Drag to reorder",C.innerHTML='<svg width="10" height="14" viewBox="0 0 10 14" focusable="false"><g fill="currentColor"><circle cx="3" cy="3" r="1.2"/><circle cx="7" cy="3" r="1.2"/><circle cx="3" cy="7" r="1.2"/><circle cx="7" cy="7" r="1.2"/><circle cx="3" cy="11" r="1.2"/><circle cx="7" cy="11" r="1.2"/></g></svg>',C.addEventListener("mouseenter",()=>{d.draggable=!0}),C.addEventListener("mouseleave",()=>{d.draggable=!1}),d.appendChild(C)}if(H)return{kind:o,root:d,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:Ye};let f=null;s&&(f=k("kanuni-datagrid-cell kanuni-datagrid-cell--number kanuni-datagrid-cell--pinned kanuni-datagrid-rownum-cell"),f.setAttribute("role","gridcell"),f.style.width=`${gt}px`,f.style.flex="none",f.style.insetInlineStart="0px",d.appendChild(f));let p=null;if($t){let C=k("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-detail-toggle-cell");C.setAttribute("role","gridcell"),C.style.width=`${ft}px`,C.style.flex="none",C.style.insetInlineStart=`${Mu}px`;let B=document.createElement("button");B.type="button",B.className="kanuni-datagrid-detail-toggle",B.tabIndex=-1,B.addEventListener("click",R=>{R.stopPropagation();let M=d.getAttribute("data-row-key");if(M===null)return;let L=A.getRows().find(P=>String(P.key)===M);L&&L.kind==="data"&&A.toggleDetail(L.key)}),B.addEventListener("mousedown",R=>R.stopPropagation()),C.appendChild(B),d.appendChild(C),p=B}let y=null;if(Ut){let C=k("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-select-cell");C.setAttribute("role","gridcell"),C.style.width=`${Ot}px`,C.style.flex="none",C.style.insetInlineStart=`${Yr}px`;let B=document.createElement("input");B.type="checkbox",B.tabIndex=-1;let R=()=>{let M=d.getAttribute("data-row-key");if(M===null)return;let L=A.getRows().find(P=>String(P.key)===M);L&&A.toggleRow(L.key)};C.addEventListener("mousedown",M=>M.stopPropagation()),C.addEventListener("click",M=>{M.target.tagName!=="INPUT"&&(M.stopPropagation(),R())}),B.addEventListener("change",R),B.addEventListener("click",M=>M.stopPropagation()),B.addEventListener("mousedown",M=>M.stopPropagation()),C.appendChild(B),d.appendChild(C),y=B}let b=[],x=null,F=!1;for(let C of ve){!C.pinned&&!F&&(x=document.createElement("div"),x.style.flex=`0 0 ${se}px`,d.appendChild(x),F=!0);let B=k(C.className);B.setAttribute("role","gridcell"),B.setAttribute("data-column-id",C.id),B.style.width=`${C.width}px`,B.style.flex="none",C.pinned==="left"&&(B.style.insetInlineStart=`${C.inset}px`),C.pinned==="right"&&(B.style.insetInlineEnd=`${C.inset}px`),d.appendChild(B),b.push({el:B,slot:C})}let v=document.createElement("div");return v.style.flex=`0 0 ${Lu}px`,d.appendChild(v),{kind:o,root:d,cells:b,rowNumberCell:f,selectInput:y,detailToggle:p,leadingSpacer:x,trailingSpacer:v,epoch:Ye}}let lt="";function Xt(o,d){if(lt===""||d===""){o.textContent=d;return}let f=d.toLowerCase(),p=f.indexOf(lt);if(p===-1){o.textContent=d;return}let y=[],b=0;for(;p!==-1;){p>b&&y.push(document.createTextNode(d.slice(b,p)));let x=document.createElement("mark");x.className="kanuni-datagrid-highlight",x.textContent=d.slice(p,p+lt.length),y.push(x),b=p+lt.length,p=f.indexOf(lt,b)}b<d.length&&y.push(document.createTextNode(d.slice(b))),o.replaceChildren(...y)}function Aa(o,d,f){let p=A.getColumnModel().getCellValue(f.data,d.id),y=d.def;if(y.renderCell){let x=y.renderCell({value:p,row:f.data,node:f,column:y});typeof x=="string"?o.textContent=x:o.replaceChildren(x);return}let b=Lt(y,p);if(b!==null){Xt(o,b);return}if(y.valueFormatter){let x=y.valueFormatter(p,f.data);Xt(o,typeof x=="string"?x:String(x??""));return}if(y.dateFormat&&y.dataType==="date"){Xt(o,Ti(p,y.dateFormat));return}Xt(o,p==null?"":String(p))}function an(o,d,f){let p=o.root;if(p.setAttribute("aria-rowindex",String(f+2)),p.setAttribute("data-row-key",String(d.key)),d.kind==="detail"||d.kind==="editform"){let C=o.panelCell,B=d.kind==="detail";p.className=`kanuni-datagrid-row ${B?"kanuni-datagrid-detail-row":"kanuni-datagrid-editform-row"}`,p.style.height=`${d.height}px`,B?(p.setAttribute("data-detail-for",String(d.parentKey)),p.removeAttribute("data-editform-for")):(p.setAttribute("data-editform-for",d.parentKey===null?"":String(d.parentKey)),p.removeAttribute("data-detail-for")),C.className=B?"kanuni-datagrid-detail-cell":"kanuni-datagrid-editform-cell";let R=`${d.kind}:${String(d.key)}`;if(p.getAttribute("data-panel-for")!==R){p.setAttribute("data-panel-for",R);let M=B?Kr?.(d.data):d.parentKey===null?void 0:ea?.(d.parentKey,d.data);C.textContent="",typeof M=="string"?C.textContent=M:M&&C.appendChild(M)}return}if(p.removeAttribute("data-panel-for"),p.removeAttribute("data-detail-for"),p.removeAttribute("data-editform-for"),d.kind==="filler"){p.style.display="none";return}p.style.display="",p.style.height=on?"":`${A.getRowHeight()}px`,p.classList.toggle("kanuni-datagrid-row--odd",a&&f%2===1),p.classList.toggle("kanuni-datagrid-row--selected",A.isRowSelected(d.key));let y=A.getFocus();if(p.classList.toggle("kanuni-datagrid-row--focused",j&&y!==null&&y.rowKey===d.key),o.leadingSpacer&&(o.leadingSpacer.style.flex=`0 0 ${se}px`),o.trailingSpacer&&(o.trailingSpacer.style.flex=`0 0 ${Lu}px`),qt){let C=je!==null&&String(je.key)===String(d.key);p.classList.toggle("kanuni-datagrid-row--drop-before",C&&je.side==="before"),p.classList.toggle("kanuni-datagrid-row--drop-after",C&&je.side==="after")}if(o.rowNumberCell&&(o.rowNumberCell.textContent=String(Ea(f))),o.selectInput&&(o.selectInput.checked=A.isRowSelected(d.key),o.selectInput.setAttribute("aria-label",I.selectRowAria.replace("{row}",String(d.key)))),o.detailToggle&&d.kind==="data"){let C=A.isDetailExpanded(d.key);o.detailToggle.textContent=C?"\u25BE":"\u25B8",o.detailToggle.setAttribute("aria-expanded",String(C)),o.detailToggle.setAttribute("aria-label",C?I.collapseDetails:I.expandDetails)}if(d.kind==="group"&&o.group){let C=d;p.className=`kanuni-datagrid-row kanuni-datagrid-group-row kanuni-datagrid-group-row--level-${C.level}`,p.setAttribute("aria-expanded",String(C.expanded)),p.setAttribute("aria-level",String(C.level+1)),p.setAttribute("data-group-key",String(C.key)),p.setAttribute("data-group-level",String(C.level)),o.group.cell.style.paddingLeft=C.level>0?`${8+C.level*18}px`:"",o.group.twisty.textContent=C.expanded?"\u25BE":"\u25B8";let B=A.getColumnModel().getDef(C.columnId),R=B?.headerName??C.columnId;o.group.caption.textContent=`${R}:`,o.group.label.textContent=Lt(B,C.value)??(C.label===""?I.filterBlank:C.label),o.group.count.textContent=`(${C.count})`,o.group.aggregates.textContent="";let M=C.aggregates??null;if(M)for(let L of A.getSummaryDefs()){let P=k("kanuni-datagrid-group-aggregate","span"),K=k("kanuni-datagrid-group-aggregate-label","span"),W=A.getColumnModel().getDef(L.columnId);K.textContent=`${Mr(L,Nu)} ${W?.headerName??L.columnId}:`,P.append(K,` ${Ir(L,M[tt(L.columnId,L.type)],W)}`),o.group.aggregates.appendChild(P)}return}if(d.kind!=="data"){for(let{el:C}of o.cells)C.textContent="";return}if(p.className=p.className.includes("group-row")?"kanuni-datagrid-row":p.className,H){let C=qt?1:0,B=H({row:d.data,node:d,rowIndex:f,selected:A.isRowSelected(d.key),focused:j&&y!==null&&y.rowKey===d.key});if(B instanceof Node&&p.childNodes.length===C+1&&p.childNodes[C]===B)return;for(;p.childNodes.length>C;)p.removeChild(p.lastChild);typeof B=="string"?p.appendChild(document.createTextNode(B)):B&&p.appendChild(B);return}let b=y!==null&&y.rowKey===d.key?y.columnId:null,x=d.tree,F=x?(()=>{let C=A.getColumnLayout();return(C.left[0]??C.center[0]??C.right[0])?.state.id??null})():null,v=A.hasCellSpans();for(let{el:C,slot:B}of o.cells){let R=Su||Bu?{node:d,columnId:B.id,rowIndex:f,columnIndex:B.visualIndex,value:A.getColumnModel().getCellValue(d.data,B.id)}:null,M=R&&Su?Su(R):void 0,L=!1;if(M!==void 0?M instanceof Node&&C.childNodes.length===1&&C.firstChild===M?L=!0:typeof M=="string"?C.textContent=M:C.replaceChildren(M):(Aa(C,B,d),x&&B.id===F&&xa(C,d,x)),v&&!L){let W=va(f,B.id);C.classList.toggle("kanuni-datagrid-cell--span",W?.kind==="draw"),C.classList.toggle("kanuni-datagrid-cell--span-covered",W?.kind==="covered");let ie=M!==void 0;if(W?.kind==="covered"&&b!==B.id&&!ie)C.replaceChildren();else if(W?.kind==="draw"){let ye=k("kanuni-datagrid-span-box");ye.style.height=`${W.height}px`,ye.append(...Array.from(C.childNodes)),C.appendChild(ye)}}else v||C.classList.remove("kanuni-datagrid-cell--span","kanuni-datagrid-cell--span-covered");if(We){let W=!!Ou(d.key,B.id,d.data);C.classList.toggle("kanuni-datagrid-cell--noted",W)}C.id=`${t.gridId}-cell-${String(d.key)}-${B.id}`,C.classList.toggle("kanuni-datagrid-cell--focused",b===B.id);let P=C.getAttribute("data-slot-classes");if(P)for(let W of P.split(" "))C.classList.remove(W);let K=R&&Bu?Bu(R):void 0;if(K){for(let W of K.split(" "))C.classList.add(W);C.setAttribute("data-slot-classes",K)}else P&&C.removeAttribute("data-slot-classes")}}let on=t.columns.some(o=>o.autoHeight);function ba(){if(!on)return;let o=A.getVirtualWindow(),d=A.getRows(),f=new Map(A.getMeasuredRowHeights()),p=!1;for(let y=o.rows.start;y<o.rows.end&&y<d.length;y++){let b=d[y];if(!b||b.kind!=="data")continue;let x=y-o.rows.start,F=Dt[x]?.root;if(!F)continue;let v=F.getBoundingClientRect().height;v>0&&f.get(b.key)!==v&&(f.set(b.key,v),p=!0)}p&&A.setMeasuredRowHeights(f)}let eu={start:0,end:0};function va(o,d){let f=A.getCellSpans(d);if(f.length===0)return null;let p=Bi(f,o,eu.start,eu.end);if(!p)return null;if(p.role==="covered")return{kind:"covered"};let y=A.getRowOffset(p.drawStart);return{kind:"draw",height:A.getRowOffset(p.drawEnd)+A.getRowHeightAt(p.drawEnd)-y}}function xa(o,d,f){let p=k(`kanuni-datagrid-tree-cell${f.ancestorOnly?" kanuni-datagrid-tree-cell--ancestor":""}`,"span");if(p.style.paddingInlineStart=`${f.depth*16}px`,f.hasChildren){let y=document.createElement("button");y.type="button",y.className="kanuni-datagrid-tree-toggle",y.setAttribute("data-tree-toggle",""),y.setAttribute("aria-expanded",String(f.expanded)),y.setAttribute("aria-label",f.expanded?I.collapseDetails:I.expandDetails),y.textContent=f.expanded?"\u25BE":"\u25B8",y.addEventListener("mousedown",b=>b.stopPropagation()),y.addEventListener("click",b=>{b.stopPropagation(),A.toggleTreeRow(d.key)}),p.appendChild(y)}else p.appendChild(k("kanuni-datagrid-tree-toggle kanuni-datagrid-tree-toggle--leaf","span"));p.append(...Array.from(o.childNodes)),o.appendChild(p)}let Ou=(o,d,f)=>We?We.get({rowKey:o,columnId:d,row:f})??null:null;function Vu(){let o=A.getVirtualWindow(),d=A.getRows(),f=vt?{...o,rows:{...o.rows,start:0,end:d.length,offsetY:0,totalHeight:0}}:o;ya(d),me.style.height=`${f.rows.totalHeight}px`,Q.style.transform=`translateY(${f.rows.offsetY}px)`,lt=ua?A.getSearchText().trim().toLowerCase():"";let p=Math.max(0,Math.min(f.rows.end,d.length)-f.rows.start);for(eu.start=f.rows.start,eu.end=Math.min(f.rows.end,d.length)-1;Dt.length>p;)Dt.pop().root.remove();for(let y=0;y<p;y++){let b=f.rows.start+y,x=d[b],F=x.kind==="data"?"data":x.kind==="group"?"group":x.kind==="detail"||x.kind==="editform"?"panel":"stub",v=Dt[y];if(!v||v.epoch!==Ye||v.kind!==F){let C=nn(F);v?Q.replaceChild(C.root,v.root):Q.appendChild(C.root),Dt[y]=C,v=C}an(v,x,b)}ba()}let ln=ki(ta??(A.isRemote()?200:0));function Ku(){if(!T)return;if(it.textContent="",be>0){let d=k("kanuni-datagrid-filter-cell kanuni-datagrid-filter-cell--pinned");d.style.width=`${be}px`,d.style.flex="none",d.style.insetInlineStart="0px",it.appendChild(d)}let o=!1;for(let d of ve){if(!d.pinned&&!o){if(se>0){let p=k("kanuni-datagrid-spacer");p.style.width=`${se}px`,p.style.flex="none",it.appendChild(p)}o=!0}let f=k(`kanuni-datagrid-filter-cell${d.pinned?" kanuni-datagrid-filter-cell--pinned":""}`);if(f.style.width=`${d.width}px`,f.style.flex="none",d.pinned==="left"&&(f.style.insetInlineStart=`${d.inset}px`),d.pinned==="right"&&(f.style.insetInlineEnd=`${d.inset}px`),d.def.filterable!==!1){let p=document.createElement("input");p.className="kanuni-datagrid-filter-input",p.setAttribute("aria-label",`${d.def.headerName??d.id} filter`);let y=()=>A.setColumnFilter(d.id,ji(d.id,p.value,d.def.dataType),xi);p.addEventListener("input",()=>ln.schedule(d.id,y));let b=()=>{ln.cancel(d.id),y()};p.addEventListener("keydown",x=>{x.key==="Enter"&&b()}),p.addEventListener("blur",b),f.appendChild(p)}it.appendChild(f)}}let sn=()=>{};function Da(){if(!zr)return;let o=document.createElement("input");o.type="search",o.className="kanuni-datagrid-toolbar-search",o.placeholder=I.toolbarSearch,o.setAttribute("aria-label",I.toolbarSearch);let d=null;o.addEventListener("input",()=>{d&&clearTimeout(d),d=setTimeout(()=>A.setSearchText(o.value),la)});let f=k("kanuni-datagrid-toolbar-spacer"),p=null;if(He){let C=document.createElement("button");C.type="button",C.textContent=I.toolbarColumns??"Columns",C.setAttribute("aria-haspopup","dialog"),C.addEventListener("click",()=>{let B=C.getBoundingClientRect();Cn({left:B.left,top:B.bottom+2})}),p=C}let y=Te&&aa,b=Te&&oa,x=document.createElement("button");x.type="button",x.className="kanuni-datagrid-toolbar-icon-button",x.setAttribute("aria-haspopup","menu"),x.setAttribute("aria-label",I.exportMenu),x.setAttribute("data-testid","dg-export-menu"),x.title=I.exportMenu,x.appendChild(qs());let F=null;x.addEventListener("click",()=>{if(F)return;let C=x.getBoundingClientRect();Ze({left:C.right-190,top:C.bottom+2},B=>{B.setAttribute("role","menu"),B.setAttribute("aria-label",I.exportMenu);let R=[{kind:"csv",label:I.exportCsv,testId:"dg-export-csv",on:!0},{kind:"excel",label:I.exportExcel,testId:"dg-export-excel",on:y},{kind:"excel-selected",label:I.exportExcelSelected,testId:"dg-export-excel-selected",on:y},{kind:"pdf",label:I.exportPdf,testId:"dg-export-pdf",on:b}];for(let M of R){if(!M.on)continue;let L=document.createElement("button");L.type="button",L.className="kanuni-datagrid-menu-item",L.setAttribute("role","menuitem"),L.setAttribute("data-testid",M.testId),L.textContent=M.label,M.kind==="excel-selected"&&A.getSelectedCount()===0&&(L.disabled=!0),L.addEventListener("click",()=>{F=M.kind,x.disabled=!0,de(),Zi(A,M.kind).then(P=>{F=null,x.disabled=!1,P.error&&sn(P.error)})}),B.appendChild(L)}},"kanuni-datagrid-filter-popup kanuni-datagrid-export-menu")});for(let C of ia??[])$e.append(C);$e.append(o,f),p&&$e.append(p),$e.append(x);for(let C of na??[])$e.append(C);let v=k("kanuni-datagrid-toolbar-error","span");v.setAttribute("role","alert"),v.style.display="none",$e.append(v),sn=C=>{v.textContent=C,v.style.display=""}}function dn(){if(!at.isConnected)return;let o=A.getPage(),d=A.getPageCount();at.textContent="";let f=(F,v,C,B)=>{let R=document.createElement("button");return R.type="button",R.textContent=F,R.setAttribute("aria-label",v),R.disabled=C,R.addEventListener("click",B),R},p=k("kanuni-datagrid-pager-buttons"),y=o<=0,b=o>=d-1;p.append(f("\xAB",I.pagerFirst??"First",y,()=>A.setPage(0)),f("\u2039",I.pagerPrevious??"Previous",y,()=>A.setPage(o-1)));let x=k("kanuni-datagrid-pager-current","span");x.textContent=`${o+1} / ${d}`,p.append(x,f("\u203A",I.pagerNext??"Next",b,()=>A.setPage(o+1)),f("\xBB",I.pagerLast??"Last",b,()=>A.setPage(d-1))),at.appendChild(p)}function Hu(){if(!Be)return;let o=A.getColumnLayout(),d=A.getSummaries(),f=new Map(A.getSummaryDefs().map(y=>[y.columnId,y]));if(ne.textContent="",ne.style.width=`${o.totalWidth+be}px`,be>0){let y=k("kanuni-datagrid-footer-cell kanuni-datagrid-footer-cell--pinned");y.style.width=`${be}px`,y.style.insetInlineStart="0px",ne.appendChild(y)}let p=!1;for(let y of ve){if(!y.pinned&&!p){if(se>0){let v=k("kanuni-datagrid-spacer");v.style.width=`${se}px`,ne.appendChild(v)}p=!0}let b=f.get(y.id),x=y.def.dataType==="number",F=k(`kanuni-datagrid-footer-cell${y.pinned?" kanuni-datagrid-footer-cell--pinned":""}${x?" kanuni-datagrid-footer-cell--number":""}${b?" kanuni-datagrid-footer-cell--active":""}`);if(F.setAttribute("role","gridcell"),F.setAttribute("data-column-id",y.id),F.setAttribute("data-summary-type",b?.type??""),F.style.width=`${y.width}px`,y.pinned==="left"&&(F.style.insetInlineStart=`${y.inset}px`),y.pinned==="right"&&(F.style.insetInlineEnd=`${y.inset}px`),b){F.title=`${Mr(b,Nu)} \u2014 ${y.def.headerName??y.id}`;let v=k("kanuni-datagrid-footer-value","span");v.textContent=Ir(b,d[tt(b.columnId,b.type)],y.def),F.appendChild(v)}else{let v=k("kanuni-datagrid-footer-hint","span");v.textContent=c?"\xB7":"",F.appendChild(v)}ne.appendChild(F)}}function zu(){let o=(d,f,p)=>{d.textContent="",f.forEach((y,b)=>{let x=nn("data");an(x,{kind:"data",key:`__pinned-${p}-${b}`,sourceIndex:-1,data:y},b),x.root.classList.remove("kanuni-datagrid-row--odd"),x.root.removeAttribute("aria-rowindex"),x.rowNumberCell&&(x.rowNumberCell.textContent=""),d.appendChild(x.root)})};g.length>0&&o(wt,g,"top"),w.length>0&&o(Ur,w,"bottom")}let st=null,Wu=null;function de(){Wu?.(),Wu=null,st?.remove(),st=null}function cn(o,d){let p=o.getBoundingClientRect();p.width===0&&p.height===0||(o.style.left=`${Math.max(8,Math.min(d.left,window.innerWidth-p.width-8))}px`,o.style.top=`${Math.max(8,Math.min(d.top,window.innerHeight-p.height-8))}px`)}function Ze(o,d,f="kanuni-datagrid-filter-popup"){de(),st=k(`${Pr(t)} kanuni-datagrid-portal`);let p=k(f);p.style.position="fixed",p.style.left=`${o.left}px`,p.style.top=`${o.top}px`,p.style.zIndex="1000",d(p),st.appendChild(p),document.body.appendChild(st),cn(p,o);let y=st,b=F=>{y.contains(F.target)||de()},x=F=>{F.key==="Escape"&&de()};document.addEventListener("pointerdown",b,!0),document.addEventListener("keydown",x,!0),Wu=()=>{document.removeEventListener("pointerdown",b,!0),document.removeEventListener("keydown",x,!0)}}let Je=25,hn=8,pn=new Map,mn=0;function Fa(o,d){let f=d.getBoundingClientRect(),p=++mn;Ze({left:f.left,top:f.bottom+2},y=>{let b=[],x=!0,F=new Set,v=!1,C=0,B="",R=[],M=null,L="",P=[],K=document.createElement("input");K.type="search",K.className="kanuni-datagrid-filter-search",K.placeholder=I.search,K.setAttribute("data-testid","dg-filter-search");let W=k("kanuni-datagrid-filter-actions"),ie=document.createElement("button");ie.type="button",ie.textContent=I.filterSelectAll,ie.addEventListener("click",()=>{v=!0,F=new Set(b.map(G=>G.label)),De()});let ye=document.createElement("button");ye.type="button",ye.textContent=I.clear,ye.addEventListener("click",()=>{v=!0,F=new Set,De()}),W.append(ie,ye);let re=k("kanuni-datagrid-filter-list");re.setAttribute("role","listbox"),re.setAttribute("aria-multiselectable","true");let ct=document.createElement("div");ct.style.position="relative";let xe=document.createElement("div");ct.appendChild(xe),re.appendChild(ct);let ou=()=>{let G=B.trim().toLowerCase();if(!G){R=b;return}M||(M=b.map(q=>q.label.toLowerCase())),R=L!==""&&G.includes(L)?P.filter(q=>q.label.toLowerCase().includes(G)):b.filter((q,X)=>M[X].includes(G)),L=G,P=R},De=()=>{if(re.setAttribute("aria-busy",String(x)),re.setAttribute("aria-setsize",String(R.length)),x){ct.style.height="",xe.textContent="";let Ce=k("kanuni-datagrid-filter-empty");Ce.textContent=I.filterLoading,xe.appendChild(Ce);return}if(R.length===0){ct.style.height="",xe.style.transform="",xe.textContent="";let Ce=k("kanuni-datagrid-filter-empty");Ce.textContent=I.filterNoMatch,xe.appendChild(Ce);return}let G=re.clientHeight||240,q=Math.max(0,Math.floor(re.scrollTop/Je)-hn),X=Math.ceil(G/Je)+hn*2,fe=Math.min(q,Math.max(0,R.length-1)),Wa=Math.min(R.length,fe+X);ct.style.height=`${R.length*Je}px`,xe.style.transform=`translateY(${fe*Je}px)`,xe.textContent="";for(let Ce=fe;Ce<Wa;Ce++){let ht=R[Ce],Fe=k("kanuni-datagrid-filter-item");Fe.setAttribute("role","option"),Fe.setAttribute("aria-selected",String(F.has(ht.label))),Fe.tabIndex=0,Fe.setAttribute("data-value",ht.label),Fe.setAttribute("data-index",String(Ce)),Ce===C&&Fe.classList.add("kanuni-datagrid-filter-item--active");let Bt=document.createElement("input");Bt.type="checkbox",Bt.readOnly=!0,Bt.checked=F.has(ht.label),Bt.tabIndex=-1;let Kn=document.createElement("span");Kn.textContent=ht.label===""?I.filterBlank:ht.label,Fe.append(Bt,Kn),Fe.addEventListener("click",()=>Gn(ht.label)),Fe.addEventListener("focus",()=>{C=Ce}),xe.appendChild(Fe)}},Gn=G=>{v=!0,F.has(G)?F.delete(G):F.add(G);for(let q of xe.querySelectorAll(".kanuni-datagrid-filter-item")){if(q.getAttribute("data-value")!==G)continue;q.setAttribute("aria-selected",String(F.has(G)));let X=q.querySelector("input");X&&(X.checked=F.has(G))}};re.addEventListener("scroll",()=>{pn.set(o,re.scrollTop),De()}),K.addEventListener("input",()=>{B=K.value,C=0,ou(),De()});let ur=G=>{if(R.length===0)return;C=Math.max(0,Math.min(R.length-1,G));let q=C*Je,X=re.clientHeight||240;q<re.scrollTop?re.scrollTop=q:q+Je>re.scrollTop+X&&(re.scrollTop=q+Je-X),De(),y.querySelector(`.kanuni-datagrid-filter-item[data-index="${C}"]`)?.focus()},On=()=>{if(x)return;let G;if(F.size===b.length)G=null;else{let q=F.has(""),X=b.filter(fe=>fe.label!==""&&F.has(fe.label));X.length===0?G=q?{columnId:o,operator:"isnull"}:null:q?G={logic:"or",nodes:[{columnId:o,operator:"in",value:X.map(fe=>fe.value)},{columnId:o,operator:"isnull"}]}:G={columnId:o,operator:"in",value:X.map(fe=>fe.value)}}A.setColumnFilter(o,G,Sr),de()};y.tabIndex=-1,y.addEventListener("keydown",G=>{let q=G.target===K;if(G.key==="Backspace"&&!q){G.preventDefault(),K.focus(),B=B.slice(0,-1),K.value=B,C=0,ou(),De();return}if(G.key==="ArrowDown"){G.preventDefault(),ur(q?0:C+1);return}if(G.key==="ArrowUp"){G.preventDefault(),ur(q?R.length-1:C-1);return}if(!q&&(G.key==="Home"||G.key==="End")){G.preventDefault(),ur(G.key==="Home"?0:R.length-1);return}if(G.key===" "&&!q){G.preventDefault();let X=R[C];X&&Gn(X.label);return}if(G.key==="Enter"){G.preventDefault(),On();return}!q&&G.key.length===1&&G.key!==" "&&!G.ctrlKey&&!G.metaKey&&!G.altKey&&(G.preventDefault(),K.focus(),B+=G.key,K.value=B,C=0,ou(),De())});let Vn=k("kanuni-datagrid-filter-footer"),lu=document.createElement("button");lu.type="button",lu.textContent=I.cancel,lu.addEventListener("click",()=>de());let Pe=document.createElement("button");Pe.type="button",Pe.className="kanuni-datagrid-filter-primary",Pe.setAttribute("data-testid","dg-filter-apply"),Pe.textContent=I.apply,Pe.disabled=!0,Pe.addEventListener("click",On),Vn.append(lu,Pe),y.append(K,W,re,Vn),De(),queueMicrotask(()=>{K.isConnected&&K.focus()}),A.getDistinctValueSetAsync(o).then(G=>{if(mn!==p||!y.isConnected)return;b=G.entries,M=null,L="",x=!1,Pe.disabled=!1;let q=Si(A.getColumnFilter(o,Sr)??A.getColumnFilter(o,It),b);q?(v=!0,F=new Set(q)):v||(F=new Set(b.map(fe=>fe.label))),ou();let X=pn.get(o);De(),X&&(re.scrollTop=X,De())})})}function Uu(o={}){let d=A.getClipboardText(o);A.notifyClipboardGesture("copy",d?d.split(`
12
+ `)}var fs=5,Cs=35e5,ws=16e6,ys=4,Es=3;function gi(e){let t=[],u=[],r=[];for(let g of e)g.state.pinned==="left"?t.push(g):g.state.pinned==="right"?r.push(g):u.push(g);let n=[],i=0;for(let g of t)n.push(i),i+=g.state.width;let a=[0],s=0;for(let g of u)s+=g.state.width,a.push(s);let l=new Array(u.length).fill(null),m=[],c=i;for(let g=0;g<u.length;g++)u[g].state.pinned==="sticky"&&(l[g]=c,c+=u[g].state.width,m.push(g));let h=new Array(r.length),E=0;for(let g=r.length-1;g>=0;g--)h[g]=E,E+=r[g].state.width;return{left:t,center:u,right:r,leftWidth:i,centerWidth:s,rightWidth:E,totalWidth:i+s+E,centerOffsets:a,leftOffsets:n,rightOffsets:h,centerStickyOffsets:l,stickyIndices:m}}var As={left:[],center:[],right:[],leftWidth:0,centerWidth:0,rightWidth:0,totalWidth:0,centerOffsets:[0],leftOffsets:[],rightOffsets:[],centerStickyOffsets:[],stickyIndices:[]};function fi(e,t,u){let r=0,n=u-1,i=0;for(;r<=n;){let a=r+n>>1;e[a]<=t?(i=a,r=a+1):n=a-1}return i}function pr(e,t,u){return e<t?t:e>u?u:e}var bs=class{rowCount=0;heights;overscanY;overscanX;viewportWidth=0;viewportHeight=0;scrollTop=0;scrollLeft=0;maxScrollOffset=Cs;leadWidth=0;headerOffset=0;footerOffset=0;maxCanvasHeight=ws;layout=As;window;constructor(e={}){this.heights=new Wo(e.rowHeight??28),this.overscanY=Math.max(0,e.overscanY??fs),this.overscanX=Math.max(0,e.overscanX??Es),this.window=this.compute()}setRowCount(e){let t=Math.max(0,e|0);return t===this.rowCount?!1:(this.rowCount=t,this.commit())}setRowHeight(e){return this.heights.setBase(e)?this.commit():!1}setRowHeights(e){return this.heights.setOverrides(e)?this.commit():!1}getRowHeightAt(e){return this.heights.heightOf(e)}getRowOffset(e){return this.heights.offsetOf(e)}hasUniformRows(){return this.heights.isUniform()}setMaxScrollOffset(e){if(!Number.isFinite(e)||e<=0)return!1;let t=Math.floor(e);return t===this.maxScrollOffset?!1:(this.maxScrollOffset=t,this.commit())}setLeadWidth(e){return this.leadWidth=Math.max(0,e),!1}setChromeOffsets(e,t){let u=Number.isFinite(e)&&e>0?Math.round(e):0,r=Number.isFinite(t)&&t>0?Math.round(t):0;return this.headerOffset=u,this.footerOffset=r,!1}setMaxCanvasHeight(e){if(!Number.isFinite(e)||e<=0)return!1;let t=Math.floor(e);return t===this.maxCanvasHeight?!1:(this.maxCanvasHeight=t,this.commit())}setViewportSize(e,t){let u=Math.max(0,e),r=Math.max(0,t);return u===this.viewportWidth&&r===this.viewportHeight?!1:(this.viewportWidth=u,this.viewportHeight=r,this.commit())}setScroll(e,t){let u=Math.max(0,e),r=Math.max(0,t);return u===this.scrollTop&&r===this.scrollLeft?!1:(this.scrollTop=u,this.scrollLeft=r,this.commit())}setColumnLayout(e){return this.layout=e,this.commit()}getWindow(){return this.window}getColumnLayout(){return this.layout}getRowHeight(){return this.heights.getBase()}getScroll(){return{scrollTop:this.scrollTop,scrollLeft:this.scrollLeft}}getVisibleCenterColumns(){return this.layout.center.slice(this.window.columns.start,this.window.columns.end)}ensureVisible(e,t){let u={};if(e>=0&&e<this.rowCount){let l=this.heights.offsetOf(e),m=l+this.heights.heightOf(e),c=this.virtualTop();l<c?u.scrollTop=this.physicalTop(l,Math.floor):m>c+this.viewportHeight&&(u.scrollTop=this.physicalTop(m-this.viewportHeight,Math.ceil)+this.headerOffset+this.footerOffset)}let{center:r,centerOffsets:n,leftWidth:i,rightWidth:a,stickyIndices:s}=this.layout;if(t!=null&&t>=0&&t<r.length){let l=Math.max(0,this.viewportWidth-this.leadWidth-i-a),m=0;for(let E of s)E<t&&(m+=r[E].state.width);let c=n[t],h=n[t+1];s.includes(t)&&c<this.scrollLeft||(c<this.scrollLeft+m?u.scrollLeft=Math.max(0,c-m):h>this.scrollLeft+l&&(u.scrollLeft=h-l))}return u.scrollTop===void 0&&u.scrollLeft===void 0?null:u}commit(){let e=this.compute(),t=this.window,u=e.rows.start!==t.rows.start||e.rows.end!==t.rows.end||e.rows.offsetY!==t.rows.offsetY||e.rows.totalHeight!==t.rows.totalHeight||e.rows.contentHeight!==t.rows.contentHeight||e.columns.start!==t.columns.start||e.columns.end!==t.columns.end||e.columns.offsetX!==t.columns.offsetX;return u&&(this.window=e),u}compute(){return{rows:this.computeRowWindow(),columns:this.computeColumnWindow()}}scrollGeometry(){let e=this.heights.totalHeight(this.rowCount),t=Math.min(e,this.maxCanvasHeight,this.maxScrollOffset+this.viewportHeight);return{canvas:t,physicalRange:t-this.viewportHeight,virtualRange:e-this.viewportHeight}}virtualTop(){let{physicalRange:e,virtualRange:t}=this.scrollGeometry();return e<=0||t<=e?this.scrollTop:this.scrollTop>=e-ys?t+this.footerOffset:this.scrollTop*t/e}physicalTop(e,t=Math.round){let{physicalRange:u,virtualRange:r}=this.scrollGeometry();return u<=0||r<=u?e:pr(t(e*u/r),0,u)}computeRowWindow(){let e=this.heights.totalHeight(this.rowCount),{canvas:t}=this.scrollGeometry(),u=t<e;if(this.rowCount===0||this.viewportHeight===0)return{start:0,end:0,offsetY:0,totalHeight:t,contentHeight:e,compressed:u};let r=this.virtualTop(),n=this.rowCount-1,i=pr(this.heights.indexAt(r),0,n),a=pr(this.heights.indexAt(r+this.viewportHeight-1),0,n),s=Math.max(0,i-this.overscanY),l=Math.min(this.rowCount,a+1+this.overscanY),m=this.heights.offsetOf(s)-(r-this.scrollTop);if(u){let c=m+this.heights.offsetOf(l)-this.heights.offsetOf(s);c>t&&(m-=c-t)}return{start:s,end:l,offsetY:m,totalHeight:t,contentHeight:e,compressed:u}}computeColumnWindow(){let{center:e,centerOffsets:t,leftWidth:u,rightWidth:r}=this.layout,n=e.length;if(n===0||this.viewportWidth===0)return{start:0,end:n===0?0:n,offsetX:0};let i=Math.max(0,this.viewportWidth-u-r);if(i===0)return{start:0,end:0,offsetX:0};let a=this.scrollLeft,s=this.scrollLeft+i,l=fi(t,a,n),m=fi(t,s-1,n),c=Math.max(0,l-this.overscanX),h=Math.min(n,m+1+this.overscanX);return{start:c,end:h,offsetX:t[c]}}};function vs(e){let{getParentKey:t,parentField:u}=e;if(t)return n=>t(n)??null;let r=u??"parentId";return n=>n[r]??null}function xs(e,t,u){let r=new Map,n=new Map,i=new Map;for(let l=0;l<e.length;l++)i.set(t(e[l]),l);for(let l=0;l<e.length;l++){let m=t(e[l]),c=u(e[l]);c!==null&&(c===m||!i.has(c))&&(c=null),n.set(m,c);let h=r.get(c);h?h.push(m):r.set(c,[m])}let a=new Set;for(let l of n.keys()){if(a.has(l))continue;let m=new Set,c=l;for(;c!==null&&!a.has(c);){if(m.has(c)){let h=n.get(c)??null;n.set(c,null);let E=r.get(h);if(E){let w=E.indexOf(c);w>=0&&E.splice(w,1)}let g=r.get(null);g?g.push(c):r.set(null,[c]);break}m.add(c),c=n.get(c)??null}for(let h of m)a.add(h)}let s=r.get(null);return s&&s.sort((l,m)=>(i.get(l)??0)-(i.get(m)??0)),{childrenOf:r,parentOf:n,sourceIndexOf:i}}function Ds(e,t){let{index:u,sourceRows:r,isExpanded:n}=t,i=new Map,a=new Map;for(let g=0;g<e.length;g++)i.set(e[g].key,e[g]),a.set(e[g].key,g);let s=e.length!==u.sourceIndexOf.size,l=new Set(i.keys());if(s)for(let g of i.keys()){let w=u.parentOf.get(g)??null;for(;w!==null&&!l.has(w);)l.add(w),w=u.parentOf.get(w)??null}let m=g=>{let w=g.filter(D=>l.has(D));return w.sort((D,S)=>{let T=a.get(D),N=a.get(S);return T!==void 0&&N!==void 0?T-N:T!==void 0?-1:N!==void 0?1:(u.sourceIndexOf.get(D)??0)-(u.sourceIndexOf.get(S)??0)}),w},c=[],h=[],E=m(u.childrenOf.get(null)??[]);for(let g=E.length-1;g>=0;g--)h.push({key:E[g],depth:0});for(;h.length>0;){let{key:g,depth:w}=h.pop(),D=m(u.childrenOf.get(g)??[]),S=D.length>0,T=S&&(s||n(g)),N=i.get(g),O=u.sourceIndexOf.get(g)??-1,z={depth:w,hasChildren:S,expanded:T,ancestorOnly:N===void 0};if(c.push(N?{...N,tree:z}:{kind:"data",key:g,sourceIndex:O,data:r[O],tree:z}),T)for(let Z=D.length-1;Z>=0;Z--)h.push({key:D[Z],depth:w+1})}return{nodes:c}}var vr=(()=>{if(typeof MessageChannel>"u")return u=>{setTimeout(u,0)};let e=new MessageChannel,t=[];return e.port1.onmessage=()=>{let u=t.shift();u&&u()},e.port1.unref?.(),e.port2.unref?.(),u=>{t.push(u),e.port2.postMessage(null)}})();function Rt(){return new Promise(e=>vr(e))}var mu=1e5,mr=32768,Ci=65536;async function Fs(e){let{rows:t,getValue:u,collator:r,shouldAbort:n,onProgress:i}=e,a=()=>n?n():!1,s=new Map;for(let w=0;w<t.length;w+=mu){if(a())return null;let D=Math.min(t.length,w+mu);for(let S=w;S<D;S++){let T=u(t[S]),N=T==null?"":String(T);s.has(N)||s.set(N,T)}i?.(D/t.length*.2),D<t.length&&await Rt()}let l=[...s.keys()],m=[];for(let w=0;w<l.length;w+=mr){if(a())return null;m.push(l.slice(w,w+mr).sort(r.compare)),i?.(.2+Math.min(l.length,w+mr)/Math.max(1,l.length)*.2),await Rt()}m.length===0&&(m=[[]]);let c=Math.max(1,Math.ceil(Math.log2(Math.max(2,m.length)))),h=0;for(;m.length>1;){let w=[];for(let D=0;D<m.length;D+=2){if(D+1===m.length){w.push(m[D]);continue}let S=m[D],T=m[D+1],N=new Array(S.length+T.length),O=0,z=0,Z=0,j=Ci;for(;O<S.length&&z<T.length;)if(r.compare(S[O],T[z])<=0?N[Z++]=S[O++]:N[Z++]=T[z++],--j===0){if(a())return null;await Rt(),j=Ci}for(;O<S.length;)N[Z++]=S[O++];for(;z<T.length;)N[Z++]=T[z++];if(w.push(N),a())return null;await Rt()}m=w,h++,i?.(.4+Math.min(1,h/c)*.5)}let E=m[0],g=new Array(E.length);for(let w=0;w<E.length;w+=mu){if(a())return null;let D=Math.min(E.length,w+mu);for(let S=w;S<D;S++){let T=E[S];g[S]={label:T,value:s.get(T)}}D<E.length&&await Rt()}return i?.(1),g}function Ss(e){let t={};for(let[u,r]of Object.entries(e)){let n=Object.values(r);n.length!==0&&(t[u]=n.length===1?n[0]:{logic:"and",nodes:n})}return t}var Bs=class{state={sort:[],filter:null,columnFilters:{},columnFilterParts:{},filterEnabled:!0,searchText:"",groupBy:[],collapsedGroups:[],expandedDetails:[],page:0,pageSize:50};listeners=new Set;version=0;multiSort;collapsedCache=null;expandedCache=null;constructor(e={}){this.multiSort=e.multiSort??!1}getState(){return this.state}getVersion(){return this.version}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}commit(e,t="data",u){e.collapsedGroups!==this.state.collapsedGroups&&(this.collapsedCache=u?.collapsed??null),e.expandedDetails!==this.state.expandedDetails&&(this.expandedCache=u?.expanded??null),this.state=e,this.version++,this.listeners.forEach(r=>r(this.state,t))}collapsedSet(){return this.collapsedCache||(this.collapsedCache=new Set(this.state.collapsedGroups)),this.collapsedCache}expandedSet(){return this.expandedCache||(this.expandedCache=new Set(this.state.expandedDetails)),this.expandedCache}commitCollapsed(e){this.commit({...this.state,collapsedGroups:[...e]},"view",{collapsed:e})}commitExpanded(e){this.commit({...this.state,expandedDetails:[...e]},"view",{expanded:e})}toggleSort(e,t=!1){let u=this.state.sort,r=u.find(a=>a.columnId===e),n=r?r.direction==="asc"?"desc":null:"asc",i;this.multiSort&&t?(i=u.filter(a=>a.columnId!==e),n&&i.push({columnId:e,direction:n})):i=n?[{columnId:e,direction:n}]:[],this.commit({...this.state,sort:i})}setSort(e){let t=this.multiSort?e.slice():e.slice(0,1);this.commit({...this.state,sort:t})}clearSort(){this.state.sort.length!==0&&this.commit({...this.state,sort:[]})}setFilter(e){this.commit({...this.state,filter:e})}setFilterEnabled(e){e!==this.state.filterEnabled&&this.commit({...this.state,filterEnabled:e})}setColumnFilter(e,t,u){let r={...this.state.columnFilterParts};if(u===void 0)t?r[e]={[It]:t}:delete r[e];else{let n={...r[e]??{}};delete n[It],t?n[u]=t:delete n[u],Object.keys(n).length>0?r[e]=n:delete r[e]}this.commit({...this.state,columnFilterParts:r,columnFilters:Ss(r)})}getColumnFilter(e,t){return t!==void 0?this.state.columnFilterParts[e]?.[t]??null:this.state.columnFilters[e]??null}clearColumnFilters(){Object.keys(this.state.columnFilters).length!==0&&this.commit({...this.state,columnFilters:{},columnFilterParts:{}})}effectiveFilter(){let e=[];this.state.filter&&e.push(this.state.filter);for(let t of Object.values(this.state.columnFilters))e.push(t);return e.length===0?null:e.length===1?e[0]:{logic:"and",nodes:e}}setSearchText(e){e!==this.state.searchText&&this.commit({...this.state,searchText:e})}setGroupBy(e){let t=e==null?[]:typeof e=="string"?[e]:[...e],u=this.state.groupBy;return t.length===u.length&&t.every((r,n)=>r===u[n])?!1:(this.commit({...this.state,groupBy:t,collapsedGroups:[]}),!0)}isGroupCollapsed(e){return this.collapsedSet().has(e)}toggleGroup(e){let t=this.collapsedSet(),u=new Set(t);u.delete(e)||u.add(e),this.commitCollapsed(u)}setCollapsedGroups(e){this.commitCollapsed(new Set(e))}isDetailExpanded(e){return this.expandedSet().has(e)}toggleDetail(e){let t=new Set(this.expandedSet());t.delete(e)||t.add(e),this.commitExpanded(t)}setExpandedDetails(e){this.commitExpanded(new Set(e))}setPage(e){let t=Math.max(0,Math.floor(e));t!==this.state.page&&this.commit({...this.state,page:t},"page")}setPageSize(e){let t=Math.max(1,Math.floor(e));t!==this.state.pageSize&&this.commit({...this.state,pageSize:t,page:0},"page")}clampPage(e){let t=Math.max(0,e-1);return this.state.page<=t?this.state.page:(this.state={...this.state,page:t},this.version++,t)}resetPage(){this.state.page!==0&&this.commit({...this.state,page:0},"page")}applyState(e){this.commit({...e})}reset(){this.commit({sort:[],filter:null,columnFilters:{},columnFilterParts:{},filterEnabled:!0,searchText:"",groupBy:[],collapsedGroups:[],expandedDetails:[],page:0,pageSize:this.state.pageSize})}};function gr(e,t){return e.toLowerCase().endsWith(`.${t}`)?e:`${e}.${t}`}var ks=[];function $i(e,t){if(!e)return null;if("nodes"in e){let u=e.nodes.map(r=>$i(r,t)).filter(r=>r!==null);return u.length===0?null:{logic:e.logic,nodes:u}}return t(e.columnId)?e:null}var xr="__dg_pending_row_",Rs=e=>`${xr}${e}`;function Ns(e){if(typeof e!="string"||!e.startsWith(xr))return null;let t=Number(e.slice(xr.length));return Number.isInteger(t)&&t>=0?t:null}function Ts(e){return e==null?[]:typeof e=="string"?[e]:[...e]}var Ms="\0",wi="",fr=1e3,Is=150,Ls=60,qi=class{gridId;events=new jo;columns;store;rowModel;debugMode;locale;text;virtual;selection;focus=new ss;keyGetter;rowKeyField;summaryDefs;pendingReaders;historyDelegate;editingDelegate;summaryValues={};treeData;treeParent=null;treeIndex=null;treeIndexEpoch=-1;treeToggled=new Set;treeExpandedByDefault;warnedTreeGrouping=!1;lastPagination=null;firstDataRenderedSent=!1;cellRevision=0;collapsedByDefault;groupSummaries;showGroupedColumns;masterDetail;editForm=null;getRowHeightFn;measuredRowHeights=new Map;lastResult={nodes:[],visibleCount:0,totalCount:0};spanCache=new Map;spanCacheResult=null;viewNodes=[];allViewNodes=[];paginationEnabled;infiniteScroll;infinitePageSize;infiniteLimit;exportDefaults={};exportPageSize;exportMaxRows;exportToken=0;computeToken=0;lastComputeTimings={};summaryPassSeq=0;remoteFetchQueued=!1;viewportWidth=0;viewportHeight=0;leadWidth=0;externalFilter=null;asyncQueue=[];asyncCallbacks=[];asyncTimer=null;asyncTransactionWait;lastScrollTop=-1;lastScrollLeft=-1;scrollEndTimer=null;overlayOverride=null;lastFocusedRowKey=null;deferredSelection;rowIndexCache=null;dataNodeCache=null;dataKeyCache=null;nodeByKey=null;groupTree=null;groupTreeSignature=null;dataEpoch=0;distinctCache=new Map;distinctFullInflight=new Map;distinctTruncated=new Set;distinctEpoch=-1;localeCollator=null;summaryBasis=null;busy={busy:!1,progress:null,phase:null,cancellable:!1};exportAbort=null;busyDepth=0;unsubscribeStore;disposed=!1;constructor(e){this.gridId=e.gridId,this.asyncTransactionWait=e.asyncTransactionWait??50,this.debugMode=e.debugMode??!1,this.locale=e.locale??"en",this.text=Pt(e.locale,e.messages),this.columns=new Gl(e.columns,{defaultColumnDef:e.defaultColumnDef,debugMode:this.debugMode}),this.store=new Bs({multiSort:e.sorting?.multi??!1});let t=To(e.rowKey);if(this.keyGetter=t,this.rowKeyField=typeof e.rowKey=="string"?e.rowKey:null,Qa(e.dataSource)?this.rowModel=new Xn(e.dataSource,{keyGetter:t,blockSize:e.remote?.blockSize,maxBlocks:e.remote?.maxBlocks,onError:u=>this.events.emit("dataError",{error:u}),debugMode:this.debugMode}):this.rowModel=new pu(e.dataSource,{gridId:e.gridId,keyGetter:t,locale:e.locale,enabled:e.worker?.enabled,threshold:e.worker?.threshold,workerUrl:e.worker?.url,debugMode:this.debugMode,onEncodeProgress:u=>u>=1?this.setBusy("computing",null):this.setBusy("encoding",Math.round(u*100)),onPhaseProgress:(u,r)=>this.setBusy(u,r===null?null:Math.round(r*100))}),this.exportPageSize=Math.max(1,e.remote?.exportPageSize??1e3),this.exportMaxRows=Math.max(1,e.remote?.exportMaxRows??1e5),this.selection=new os(e.selection?.mode??"none"),this.deferredSelection=e.selection?.deferred??!1,this.summaryDefs=e.summaries??[],this.treeData=e.tree??null,this.treeData&&(this.treeParent=vs(this.treeData)),this.treeExpandedByDefault=this.treeData?.defaultExpanded??!1,this.collapsedByDefault=e.grouping?.collapsedByDefault??!1,this.groupSummaries=e.grouping?.groupSummaries??!1,this.showGroupedColumns=e.grouping?.showGroupedColumns??!1,e.grouping?.groupBy){this.store.setGroupBy(e.grouping.groupBy);let u=this.store.getState().groupBy;this.remote()?.setGrouping(u.map(r=>({columnId:r})),u)}this.paginationEnabled=e.pagination?.enabled??!1,this.infiniteScroll=e.scrolling?.mode==="infinite",this.infinitePageSize=Math.max(1,e.scrolling?.pageSize??100),this.infiniteLimit=this.infinitePageSize,e.pagination?.pageSize&&this.store.setPageSize(e.pagination.pageSize),this.virtual=new bs({rowHeight:e.rowHeight,overscanY:e.virtualization?.overscanY,overscanX:e.virtualization?.overscanX}),this.virtual.setColumnLayout(gi(this.layoutRuntime())),this.getRowHeightFn=e.getRowHeight,this.masterDetail=e.masterDetail?{height:Math.max(1,e.masterDetail.height??160),expandedByDefault:e.masterDetail.expandedByDefault??!1}:null,this.unsubscribeStore=this.store.subscribe((u,r)=>{this.events.emit("stateUpdated",{scope:r,state:this.getViewState()}),r==="page"&&this.emitPaginationChanged(!1),r==="view"||r==="page"&&this.rowModel.mode==="client"?this.reproject():this.recompute()}),this.recompute()}getRows(){return this.viewNodes}getDataRows(){return this.dataNodes()}getDataRowNode(e){if(!this.nodeByKey){let t=new Map,u=this.dataNodes();for(let r=0;r<u.length;r++)t.has(u[r].key)||t.set(u[r].key,u[r]);this.nodeByKey=t}return this.nodeByKey.get(e)}getRowByKey(e){return this.getDataRowNode(e)?.data}forEachNode(e){let t=this.rowModel.getSourceRows?.();if(!t){this.forEachNodeAfterFilterAndSort(e);return}for(let u=0;u<t.length;u++)e(Ke(t[u],this.keyGetter(t[u]),u),u)}forEachNodeAfterFilterAndSort(e){let t=this.dataNodes();for(let u=0;u<t.length;u++)e(t[u],u)}forEachDisplayedNode(e){let t=this.viewNodes;for(let u=0;u<t.length;u++)e(t[u],u)}dataNodes(){if(this.dataNodeCache)return this.dataNodeCache;let e=[];for(let t of this.lastResult.nodes)t&&t.kind==="data"&&e.push(t);return this.dataNodeCache=e,e}invalidateResultCaches(){this.dataNodeCache=null,this.dataKeyCache=null,this.nodeByKey=null,this.groupTree=null,this.groupTreeSignature=null}ensureGroupTree(e){let t=this.groupSummaries&&this.summaryDefs.length>0,u=`${e.join(Ms)}#${t?this.summaryDefs.map(r=>`${r.columnId}:${r.type}`).join(","):""}`;return this.groupTree&&this.groupTreeSignature===u?this.groupTree:(this.setBusy("grouping",null),this.groupTree=co(this.dataNodes(),this.columns,{columnIds:e,summaries:t?this.summaryDefs:void 0}),this.groupTreeSignature=u,this.groupTree)}getVisibleCount(){return this.lastResult.visibleCount}getTotalCount(){return this.rowModel.getTotalCount()}getColumnModel(){return this.columns}getColumnStates(){return this.columns.getColumnStates()}getSort(){return this.store.getState().sort}getFilter(){return this.store.getState().filter}getSearchText(){return this.store.getState().searchText}getVirtualWindow(){return this.virtual.getWindow()}getColumnLayout(){return this.virtual.getColumnLayout()}getVisualColumnIds(){let e=this.getColumnLayout(),t=[];for(let u of e.left)t.push(u.state.id);for(let u of e.center)t.push(u.state.id);for(let u of e.right)t.push(u.state.id);return t}getColumnIdAt(e){if(e<0)return null;let t=this.getColumnLayout();if(e<t.left.length)return t.left[e].state.id;let u=e-t.left.length;return u<t.center.length?t.center[u].state.id:t.right[u-t.center.length]?.state.id??null}getVisualColumnCount(){let e=this.getColumnLayout();return e.left.length+e.center.length+e.right.length}getRowHeight(){return this.virtual.getRowHeight()}isUsingWorker(){return this.rowModel instanceof pu&&this.rowModel.usesWorker()}getVisibleCenterColumns(){return this.virtual.getVisibleCenterColumns()}setViewportSize(e,t){let u=this.viewportWidth,r=this.viewportHeight,n=e!==u||t!==r;this.viewportWidth=e,this.viewportHeight=t;let i=this.emitIfWindowChanged(this.virtual.setViewportSize(e,t));return n&&this.events.emit("gridSizeChanged",{width:e,height:t,previousWidth:u,previousHeight:r}),i}setMaxScrollOffset(e){return this.emitIfWindowChanged(this.virtual.setMaxScrollOffset(e))}setChromeOffsets(e,t){this.virtual.setChromeOffsets(e,t)}setLeadWidth(e){this.leadWidth=e,this.virtual.setLeadWidth(e)}setMaxCanvasHeight(e){return this.emitIfWindowChanged(this.virtual.setMaxCanvasHeight(e))}setScroll(e,t){let u=this.emitIfWindowChanged(this.virtual.setScroll(e,t));return u&&this.rowModel.mode==="remote"&&this.scheduleRemoteFetch(),this.publishScroll(e,t),u}publishScroll(e,t){if(e===this.lastScrollTop&&t===this.lastScrollLeft)return;this.lastScrollTop=e,this.lastScrollLeft=t;let u=this.virtual.getWindow(),r={scrollTop:e,scrollLeft:t,firstRow:u.rows.start,lastRow:u.rows.end};this.events.emit("bodyScroll",r),this.scrollEndTimer!==null&&clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(()=>{this.scrollEndTimer=null,!this.disposed&&this.events.emit("bodyScrollEnd",r)},Is)}showLoadingOverlay(){this.setOverlayOverride("loading")}showNoRowsOverlay(){this.setOverlayOverride("noRows")}hideOverlay(){this.setOverlayOverride(null)}getOverlay(){return this.overlayOverride==="none"?null:this.overlayOverride!==null?this.overlayOverride:this.busy.busy?"loading":this.getVisibleCount()===0?"noRows":null}setOverlayOverride(e){this.overlayOverride!==e&&(this.overlayOverride=e,this.events.emit("overlayChanged",{overlay:this.getOverlay(),manual:e!==null}))}notifyRowDrag(e,t){let u=e==="enter"?"rowDragEnter":e==="move"?"rowDragMove":"rowDragLeave";this.events.emit(u,{rowKey:t.rowKey,row:this.getRowByKey(t.rowKey),overKey:t.overKey??null,position:t.position??null,fromGridId:t.fromGridId??this.gridId})}notifyRowDragEnd(e){this.events.emit("rowDragEnd",{rowKey:e.rowKey,row:this.getRowByKey(e.rowKey),overKey:e.overKey??null,position:e.position??null,fromGridId:e.fromGridId??this.gridId,dropped:e.dropped})}scheduleRemoteFetch(){this.remoteFetchQueued||this.disposed||(this.remoteFetchQueued=!0,queueMicrotask(()=>{this.remoteFetchQueued=!1,this.disposed||this.recompute(!0)}))}setRowHeight(e){let t=this.virtual.setRowHeight(e);t&&this.measuredRowHeights.size>0&&(this.measuredRowHeights=new Map,this.rebuildRowHeights()),t?this.emitIfWindowChanged(!0):this.events.emit("viewportChanged",{window:this.virtual.getWindow()})}ensureVisible(e,t){return this.virtual.ensureVisible(e,t)}scrollToRow(e){let t=this.rowAxis().indexOf(e);if(t<0)return;let u=this.ensureVisible(t);u&&this.events.emit("scrollRequested",u)}revealRow(e,t=3){if(this.disposed)return;let u=()=>{if(!this.editForm?.atTop||String(this.editForm.rowKey)!==String(e))return!1;let i=this.ensureVisible(0);return i&&this.events.emit("scrollRequested",i),!0};if(u())return;if(this.rowAxis().indexOf(e)>=0){this.scrollToRow(e);return}let r=t,n=this.events.on("contentReady",()=>{if(this.disposed||this.rowAxis().indexOf(e)>=0){if(n(),this.disposed||u())return;this.scrollToRow(e);return}--r<=0&&n()})}scrollToCell(e,t){let u=this.rowAxis().indexOf(e);if(u<0)return;let r=this.getColumnLayout().center.findIndex(i=>i.state.id===t),n=this.ensureVisible(u,r===-1?void 0:r);n&&this.events.emit("scrollRequested",n)}getSelectionMode(){return this.selection.getMode()}setSelectionMode(e){this.selection.setMode(e)&&this.emitSelectionChanged()}isRowSelected(e){return this.selection.isSelected(e)}getSelectedKeys(){return this.selection.isAllMatching()?this.dataNodes().filter(e=>this.selection.isSelected(e.key)).map(e=>e.key):this.selection.getSelectedKeys()}getSelectionDescriptor(){return this.selection.getSelectionDescriptor()}getSelectedCount(){return this.selection.getSelectedCount(this.lastResult.visibleCount)}isAllMatchingSelected(){return this.selection.isAllMatching()}getSelectedRows(){return this.dataNodes().filter(e=>this.selection.isSelected(e.key)).map(e=>e.data)}getFocusedNode(){let e=this.focus.get();if(!e)return;let t=this.rowAxis().indexOf(e.rowKey);return t>=0?this.viewNodes[t]:void 0}getFocusedRowKey(){return this.focus.get()?.rowKey??null}getFocusedRowIndex(){let e=this.getFocusedRowKey();return e===null?-1:this.rowAxis().indexOf(e)}focusRow(e){let t=this.focus.get()?.columnId??this.layoutRuntime()[0]?.state.id;t&&this.focus.set({rowKey:e,columnId:t})&&(this.emitFocusChanged(),this.scrollToRow(e))}selectRow(e){this.selection.select(e)&&this.emitSelectionChanged()}toggleRow(e){this.selection.toggle(e)&&this.emitSelectionChanged()}setSelectedKeys(e){this.selection.setSelectedKeys(e)&&this.emitSelectionChanged()}selectAll(){(this.deferredSelection?this.selection.selectAllMatching():this.selection.selectAll(this.dataKeys()))&&this.emitSelectionChanged()}clearSelection(){this.selection.clear()&&this.emitSelectionChanged()}handleRowClick(e,t={}){this.selection.handleRowClick(e,t,this.dataKeys())&&this.emitSelectionChanged()}notifyCell(e,t,u,r){let n=t.kind==="data"?t.data:void 0;this.events.emit(e,{rowKey:t.key,rowIndex:u,columnId:r,value:n===void 0?void 0:this.columns.getCellValue(n,r),row:n,node:t})}notifyCellValueChanged(e){this.events.emit("cellValueChanged",{...e,row:this.getRowByKey(e.rowKey)})}notifyEditingStarted(e){this.events.emit("cellEditingStarted",e)}notifyEditingStopped(e){this.events.emit("cellEditingStopped",e)}notifyRowEditingStarted(e){this.events.emit("rowEditingStarted",{...e,row:this.getRowByKey(e.rowKey)})}notifyRowEditingStopped(e){this.events.emit("rowEditingStopped",{...e,row:this.getRowByKey(e.rowKey)})}notifyHistoryStarted(e,t){this.events.emit(e==="undo"?"undoStarted":"redoStarted",{label:t})}notifyHistoryEnded(e,t){this.events.emit(e==="undo"?"undoEnded":"redoEnded",t)}setHistoryDelegate(e){this.historyDelegate=e??void 0}undo(){return this.historyDelegate?.undo()??!1}redo(){return this.historyDelegate?.redo()??!1}canUndo(){return this.historyDelegate?.canUndo()??!1}canRedo(){return this.historyDelegate?.canRedo()??!1}getHistoryDepth(){return this.historyDelegate?.depth()??{undo:0,redo:0}}setEditingDelegate(e){this.editingDelegate=e??void 0}startEditingCell(e,t){return this.editingDelegate?.startEditingCell(e,t)??!1}stopEditing(e){return this.editingDelegate?.stopEditing(e?.cancel??!1)??Promise.resolve(!1)}getEditingCells(){return this.editingDelegate?.getEditingCells()??[]}isEditing(){return this.getEditingCells().length>0}notifyRow(e,t,u){this.events.emit(e,{rowKey:t.key,rowIndex:u,row:t.kind==="data"?t.data:void 0,node:t})}getFocus(){return this.focus.get()}isCellFocused(e,t){return this.focus.isFocused(e,t)}focusCell(e,t){this.focus.set({rowKey:e,columnId:t})&&this.emitFocusChanged()}clearFocus(){this.focus.clear()&&this.emitFocusChanged()}moveFocus(e){let t=this.focus.move(e,this.focusContext());return t&&this.emitFocusChanged(),t}getFocusIndices(){return this.focus.getIndices(this.focusContext())}executeCommand(e){let{type:t}=e;if(ds(t))return this.moveFocus(t);switch(t){case"toggleSelection":{let u=this.getFocusedNode();return u?(u.kind==="group"?this.toggleGroup(String(u.key)):u.kind==="data"&&this.toggleRow(u.key),!0):!1}case"extendSelectionUp":case"extendSelectionDown":{let u=this.moveFocus(t==="extendSelectionUp"?"up":"down"),r=this.focus.get();return r&&this.selection.getMode()==="multiple"&&this.selection.selectRange(r.rowKey,this.dataKeys(),!1)&&this.emitSelectionChanged(),u}case"selectAll":return this.selectAll(),!0;case"clearSelection":return this.clearSelection(),!0;case"activate":return!1;case"copy":return!1;default:return!1}}getClipboardText(e={}){let t=this.lastResult.nodes.filter(u=>this.selection.isSelected(u.key));if(t.length===0){let u=this.focus.get();if(!u)return"";t=this.lastResult.nodes.filter(r=>r.key===u.rowKey)}return t.length===0?"":gs(t,this.columns,e)}notifyClipboardGesture(e,t,u){let r=`${e}Start`,n=`${e}End`;this.events.emit(r,{cellCount:t});let i=!1;try{return i=u(),i}finally{this.events.emit(n,{cellCount:t,performed:i})}}dataKeys(){if(this.dataKeyCache)return this.dataKeyCache;let e=this.dataNodes(),t=new Array(e.length);for(let u=0;u<e.length;u++)t[u]=e[u].key;return this.dataKeyCache=t,t}rowAxis(){let e=this.viewNodes;return{count:e.length,keyAt:t=>e[t]?.key??(t>=0&&t<e.length?Rs(t):void 0),indexOf:t=>{let u=Ns(t);if(u!==null&&u<e.length&&!e[u])return u;if(!this.rowIndexCache){let r=new Map;for(let n=0;n<e.length;n++){let i=e[n];i&&!r.has(i.key)&&r.set(i.key,n)}this.rowIndexCache=r}return this.rowIndexCache.get(t)??-1}}}focusContext(){return{isFocusable:this.masterDetail!==null||this.editForm!==null?(e,t)=>{let u=this.viewNodes[t]?.kind;return u==="data"||u==="group"}:void 0,rows:this.rowAxis(),columnIds:this.columns.runtime().map(e=>e.state.id),pageSize:Math.max(1,this.virtual.getWindow().rows.end-this.virtual.getWindow().rows.start-2)}}emitSelectionChanged(){this.events.emit("selectionChanged",{selectedKeys:this.selection.getSelectedKeys(),selectedCount:this.selection.getSelectedCount()})}emitFocusChanged(){let e=this.focus.get();this.events.emit("focusChanged",{focus:e});let t=e?.rowKey??null;if(t!==this.lastFocusedRowKey){let u=this.lastFocusedRowKey;this.lastFocusedRowKey=t,this.events.emit("focusedRowChanged",{rowKey:t,previousRowKey:u,row:t===null?void 0:this.getFocusedRow()})}}getFocusedRow(){let e=this.getFocusedNode();return e&&e.kind==="data"?e.data:void 0}toggleSort(e,t=!1){this.assertColumn(e)&&(this.store.toggleSort(e,t),this.emitSortChanged())}setSort(e){this.store.setSort(e),this.emitSortChanged()}clearSort(){this.store.clearSort(),this.emitSortChanged()}setFilter(e){this.store.setFilter(e),this.store.resetPage(),this.resetReveal(),this.emitFilterChanged()}setColumnFilter(e,t,u){this.assertColumn(e)&&(this.store.setColumnFilter(e,t,u),this.store.resetPage(),this.resetReveal(),this.emitFilterChanged())}getColumnFilter(e,t){return this.store.getColumnFilter(e,t)}clearColumnFilters(){this.store.clearColumnFilters(),this.emitFilterChanged()}getEffectiveFilter(){return this.store.effectiveFilter()}isFilterEnabled(){return this.store.getState().filterEnabled}runningFilter(){return this.isFilterEnabled()?this.store.effectiveFilter():null}setExternalFilter(e){this.externalFilter=e,this.events.emit("filterChanged",{filter:this.runningFilter(),searchText:this.store.getState().searchText}),this.recompute()}isExternalFilterPresent(){return this.externalFilter!==null}refreshExternalFilter(){this.externalFilter!==null&&this.recompute()}setFilterEnabled(e){this.isFilterEnabled()!==e&&(this.store.setFilterEnabled(e),this.resetReveal(),this.emitFilterChanged())}getDistinctValues(e,t=fr){return this.getDistinctValueSet(e,t).entries}getDistinctValueSet(e,t=fr){this.distinctEpoch!==this.dataEpoch&&(this.distinctCache.clear(),this.distinctTruncated.clear(),this.distinctEpoch=this.dataEpoch);let u=`${e} ${t}`,r=this.distinctCache.get(u);if(r)return{entries:r,truncated:this.distinctTruncated.has(u)};let n=this.rowModel.getSourceRows?.()??[],i=this.columns.getDef(e),a=new Map,s=!1;for(let m of n){let c=this.columns.getCellValue(m,e),h=c==null?"":String(c),E=c==null?"":yu(i,c,m);if(!a.has(h)&&(a.set(h,{value:c,label:E}),a.size>t)){a.delete(h),s=!0;break}}let l=[...a.values()].sort((m,c)=>this.collator().compare(m.label,c.label));return this.distinctCache.set(u,l),s?this.distinctTruncated.add(u):this.distinctTruncated.delete(u),{entries:l,truncated:s}}searchDistinctValues(e,t,u=fr){let r=t.trim().toLowerCase();if(!r)return this.getDistinctValueSet(e,u);let n=this.rowModel.getSourceRows?.()??[],i=this.columns.getDef(e),a=new Map,s=!1;for(let l of n){let m=this.columns.getCellValue(l,e),c=m==null?"":String(m),h=m==null?"":yu(i,m,l);if(!(!h.toLowerCase().includes(r)||a.has(c))&&(a.set(c,{value:m,label:h}),a.size>u)){a.delete(c),s=!0;break}}return{entries:[...a.values()].sort((l,m)=>this.collator().compare(l.label,m.label)),truncated:s}}async getDistinctValueSetAsync(e,t){if(this.remote())return{entries:await this.getDistinctValuesAsync(e),truncated:!1};this.distinctEpoch!==this.dataEpoch&&(this.distinctCache.clear(),this.distinctTruncated.clear(),this.distinctEpoch=this.dataEpoch);let u=`${e} full`,r=this.distinctCache.get(u);if(r)return{entries:r,truncated:!1};let n=this.distinctFullInflight.get(e);if(!n){let i=this.dataEpoch;n=Fs({rows:this.rowModel.getSourceRows?.()??[],getValue:a=>this.columns.getCellValue(a,e),collator:this.collator(),shouldAbort:()=>this.disposed,onProgress:t}).then(a=>(this.distinctFullInflight.delete(e),a===null?[]:(i===this.dataEpoch&&this.distinctEpoch===i&&(this.distinctCache.set(u,a),this.distinctTruncated.delete(u)),a))),this.distinctFullInflight.set(e,n)}return{entries:await n,truncated:!1}}canListDistinctValues(){let e=this.remote();return e===null||e.supportsDistinctValues()}async getDistinctValuesAsync(e,t=1e3){let u=this.remote();return u?u.supportsDistinctValues()?(await u.loadDistinctValues(e,t)).map(r=>({value:r.value,label:r.label??(r.value==null?"":String(r.value))})).sort((r,n)=>this.collator().compare(r.label,n.label)):[]:this.getDistinctValues(e,t)}collator(){return this.localeCollator||(this.localeCollator=new Intl.Collator(this.locale,{numeric:!0,sensitivity:"base"})),this.localeCollator}bumpDataEpoch(){this.dataEpoch++}setSearchText(e){this.store.setSearchText(e),this.store.resetPage(),this.resetReveal(),this.emitFilterChanged()}emitFilterChanged(){this.events.emit("filterChanged",{filter:this.store.effectiveFilter(),searchText:this.store.getState().searchText})}setColumnWidth(e,t,u=!0){let r=this.columns.getState(e)?.width;this.columns.setWidth(e,t);let n=this.columns.getState(e);n&&r!==void 0&&(n.width!==r||u)&&this.events.emit("columnResized",{columnId:e,width:n.width,previousWidth:r,finished:u}),this.emitColumnStateChanged()}sizeColumnsToFit(e={}){let t=(e.width??this.viewportWidth)-this.leadWidth;if(!Number.isFinite(t)||t<=0)return;let u=new Set(e.skip??[]),r=this.columns.getOrder().filter(c=>this.columns.getState(c)?.visible&&!u.has(c));if(r.length===0)return;let n=0;for(let c of this.columns.getOrder())!this.columns.getState(c)?.visible||!u.has(c)||(n+=this.columns.getState(c)?.width??0);let i=t-n;if(i<=0)return;let a=new Set(r),s=new Map;for(let c of r)s.set(c,this.columns.getState(c)?.width??0);for(let c=0;c<=r.length&&a.size>0;c++){let h=0;for(let w of a)h+=s.get(w)??0;if(h<=0)break;let E=i/h,g=!1;for(let w of[...a]){let D=(s.get(w)??0)*E,S=this.columns.getDef(w),T=S?.minWidth??Ls,N=S?.maxWidth??Number.POSITIVE_INFINITY;if(D<T||D>N){let O=Math.min(Math.max(D,T),N);s.set(w,O),a.delete(w),i-=O,g=!0}else s.set(w,D)}if(!g)break}let l=0;for(let c of r)l+=s.get(c)??0;let m=0;r.forEach((c,h)=>{let E=h===r.length-1?Math.round(l)-m:Math.round(s.get(c)??0);m+=E,this.columns.setWidth(c,E)}),this.emitColumnStateChanged()}setBandCollapsed(e,t){let u=typeof e=="string"?[e]:e;this.columns.setBandCollapsed(u,t)&&(this.events.emit("columnGroupOpened",{band:[...u],open:!t}),this.emitColumnStateChanged())}toggleBand(e){let t=typeof e=="string"?[e]:e;this.setBandCollapsed(t,!this.columns.isBandCollapsed(t))}isBandCollapsed(e){return this.columns.isBandCollapsed(typeof e=="string"?[e]:e)}isBandCollapsible(e){return this.columns.isBandCollapsible(typeof e=="string"?[e]:e)}setColumnPinned(e,t){let u=this.columns.getState(e)?.pinned;this.columns.setPinned(e,t);let r=this.columns.getState(e);r&&u!==void 0&&r.pinned!==u&&this.events.emit("columnPinned",{columnId:e,pinned:r.pinned,previous:u}),this.emitColumnStateChanged()}setColumnVisible(e,t){let u=this.columns.getState(e)?.visible;this.columns.setVisible(e,t);let r=this.columns.getState(e);r&&u!==void 0&&r.visible!==u&&this.events.emit("columnVisible",{columnId:e,visible:r.visible}),this.emitColumnStateChanged(),this.recompute()}moveColumn(e,t){let u=this.columns.getOrder().indexOf(e);this.columns.moveColumn(e,t);let r=this.columns.getOrder().indexOf(e);u!==-1&&r!==u&&this.events.emit("columnMoved",{columnId:e,fromIndex:u,toIndex:r}),this.emitColumnStateChanged()}applyColumnStates(e){this.columns.applyColumnStates(e),this.emitColumnStateChanged(),this.recompute()}resetColumnState(){this.columns.resetColumnStates(),this.emitColumnStateChanged(),this.recompute()}setColumns(e){this.columns.setColumns(e),this.bumpDataEpoch(),this.emitColumnStateChanged(),this.recompute()}getGroupLevels(){return this.store.getState().groupBy}getGroupSummaries(){return this.groupSummaries}setGroupSummaries(e){this.groupSummaries!==e&&(this.groupSummaries=e,this.groupTree=null,this.groupTreeSignature=null,this.reproject())}getGroupBy(){return this.store.getState().groupBy[0]??null}groupBy(e){let t=e==null?[]:typeof e=="string"?[e]:[...e];for(let r of t)if(!this.assertColumn(r))return;let u=this.store.getState().groupBy;t.length===u.length&&t.every((r,n)=>r===u[n])||(this.remote()?.setGrouping(t.map(r=>({columnId:r})),t),this.store.setGroupBy(t),this.emitColumnStateChanged(),this.resetReveal(),this.events.emit("groupChanged",{groupBy:t[0]??null,levels:t}))}remote(){return this.rowModel instanceof Xn?this.rowModel:null}clearGrouping(){this.groupBy(null)}isGroupCollapsed(e){return this.store.isGroupCollapsed(e)}toggleGroup(e){let t=this.remote();if(t?.isGrouped()){t.toggleGroupPath(e)&&this.recompute();return}this.store.toggleGroup(e)}expandAllGroups(){this.remote()?.isGrouped()||this.store.setCollapsedGroups([])}collapseAllGroups(){let e=this.remote();if(e?.isGrouped()){e.setExpandedPaths([]),this.recompute();return}let t=this.store.getState().groupBy;t.length!==0&&this.store.setCollapsedGroups(po(this.ensureGroupTree(t)))}setEditFormRow(e,t={}){let u=e===null?null:{rowKey:e,height:Math.max(1,t.height??260),atTop:t.atTop??!1},r=this.editForm;if(!(r?.rowKey===u?.rowKey&&r?.height===u?.height&&r?.atTop===u?.atTop)&&(this.editForm=u,this.reproject(),u?.atTop)){let n=this.ensureVisible(0);n&&this.events.emit("scrollRequested",n)}}getEditFormRow(){return this.editForm?.rowKey??null}getEditFormHeight(){return this.editForm?.height??0}isDebugMode(){return this.debugMode}hasMasterDetail(){return this.masterDetail!==null}getDetailHeight(){return this.masterDetail?.height??0}isDetailExpanded(e){let t=this.store.isDetailExpanded(e);return this.masterDetail?.expandedByDefault?!t:t}toggleDetail(e){this.masterDetail&&this.store.toggleDetail(e)}collapseAllDetails(){this.masterDetail&&(this.masterDetail.expandedByDefault?this.store.setExpandedDetails(this.dataKeys()):this.store.setExpandedDetails([]))}getDataRowCount(){return this.lastResult.visibleCount}getSummaries(){return this.summaryValues}getSummaryDefs(){return this.summaryDefs}setSummaryDefs(e){this.summaryDefs=e,this.groupTree=null,this.groupTreeSignature=null,this.summaryBasis=null,this.recompute()}getColumnSummary(e){return this.summaryDefs.find(t=>t.columnId===e)??null}setColumnSummary(e,t){let u=this.summaryDefs.filter(r=>r.columnId!==e);if(this.summaryDefs=t===null?u:[...u,{columnId:e,type:t}],this.groupSummaries&&this.store.getState().groupBy.length>0){this.recompute();return}if(this.remote()){this.recompute();return}this.recomputeSummaries(),this.emitColumnStateChanged()}setPendingValueReader(e){this.pendingReaders=e??void 0,this.recomputeSummaries(),this.emitColumnStateChanged()}refreshSummaries(){this.summaryDefs.length!==0&&(this.recomputeSummaries(),this.events.emit("contentReady",{rows:this.lastResult.nodes,totalCount:this.lastResult.totalCount,visibleCount:this.lastResult.visibleCount}))}currentSummaryBasis(e,t){let u=t?this.columns.runtime().map(r=>r.state.id).join(","):"";return[this.dataEpoch,t,u,JSON.stringify(e)].join(wi)}async computeChartData(e,t={}){let u=t.source??e.source??"view",r=!!this.pendingReaders&&(this.pendingReaders.hasPending?.()??!0),n=r?this.pendingReaders:void 0;if(u==="selection"){let a=this.getSelectedKeys();if(a.length>0){let s=[];for(let l of a){let m=this.getDataRowNode(l);m&&s.push(m)}return lr(s,this.columns,e,n)}}let i=this.rowModel instanceof pu?this.rowModel:null;if(i?.usesWorker()&&Ri(e)&&!r){let{searchText:a}=this.store.getState(),s=await i.aggregate(this.columns,{sort:[],filter:u==="all"?null:this.runningFilter(),searchText:u==="all"?"":a},e);if(s)return s}if(u==="all"){let a=this.rowModel.getSourceRows?.()??[],s=new Array(a.length);for(let l=0;l<a.length;l++)s[l]=Ke(a[l],this.keyGetter(a[l]),l);return lr(s,this.columns,e,n)}return lr(this.dataNodes(),this.columns,e,n)}chartBasis(e="view"){if(e==="all")return String(this.dataEpoch);let{searchText:t}=this.store.getState();return[this.currentSummaryBasis(this.runningFilter(),t),this.lastResult.visibleCount].join(wi)}runSummaryPass(e,t,u,r,n){let i=++this.summaryPassSeq;if(e.length<=1e5){this.busyDepth>0&&this.setBusy("aggregating",null);let h=lo(e,this.columns,t,this.pendingReaders);this.summaryValues=u?{...this.summaryValues,...h}:h,r!==null&&(this.summaryBasis=r);return}let a=so(this.columns,t,this.pendingReaders),s=1e5,l=e.length,m=0,c=()=>{if(this.disposed||i!==this.summaryPassSeq||n!==this.computeToken)return;let h=Math.min(l,m+s);if(a.add(e,m,h),m=h,m<l){this.setBusy("aggregating",m/l),vr(c);return}let E=a.finish();this.summaryValues=u?{...this.summaryValues,...E}:E,r!==null&&(this.summaryBasis=r),this.busyDepth===0&&this.setBusy(null,null),this.events.emit("summariesChanged",{values:this.summaryValues})};vr(c)}recomputeSummaries(){this.summaryBasis=null;let e=this.remote();if(e){this.summaryValues=this.summaryDefs.length>0?e.getSummaries():{};return}this.summaryDefs.length>0&&this.rowModel.mode==="client"?this.runSummaryPass(this.lastResult.nodes,this.summaryDefs,!1,null,this.computeToken):this.summaryValues={}}isInfiniteScroll(){return this.infiniteScroll}getRevealedCount(){return this.infiniteScroll?this.viewNodes.length:this.allViewNodes.length}hasMoreRows(){return this.infiniteScroll&&this.viewNodes.length<this.allViewNodes.length}revealMore(){if(!this.infiniteScroll||!this.hasMoreRows())return!1;this.infiniteLimit=Math.min(this.allViewNodes.length,this.infiniteLimit+this.infinitePageSize),this.viewNodes=this.allViewNodes.slice(0,this.infiniteLimit),this.rowIndexCache=null;let e=this.virtual.setRowCount(this.viewNodes.length);return this.events.emit("contentReady",{rows:this.lastResult.nodes,totalCount:this.lastResult.totalCount,visibleCount:this.lastResult.visibleCount}),e&&!this.disposed&&this.events.emit("viewportChanged",{window:this.virtual.getWindow()}),!0}resetReveal(){this.infiniteScroll&&(this.infiniteLimit=this.infinitePageSize)}isPaginated(){return this.paginationEnabled}setPaginationEnabled(e){e!==this.paginationEnabled&&(this.paginationEnabled=e,this.store.resetPage(),this.recompute())}getPage(){return this.store.getState().page}getPageSize(){return this.store.getState().pageSize}getPageCount(){return this.paginationEnabled?Math.max(1,Math.ceil(this.allViewNodes.length/this.store.getState().pageSize)):1}setPage(e){this.store.setPage(Math.min(Math.max(0,e),this.getPageCount()-1))}setPageSize(e){this.store.setPageSize(e)}nextPage(){this.setPage(this.getPage()+1)}previousPage(){this.setPage(this.getPage()-1)}emitPaginationChanged(e){if(!this.paginationEnabled)return;let t=this.store.getState(),u=this.getPageCount();this.lastPagination&&this.lastPagination.page===t.page&&this.lastPagination.pageSize===t.pageSize&&this.lastPagination.pageCount===u||(this.lastPagination={page:t.page,pageSize:t.pageSize,pageCount:u},this.events.emit("paginationChanged",{page:t.page,pageSize:t.pageSize,pageCount:u,fromResultChange:e}))}buildExportModel(e={}){return this.buildExportModelFrom(this.allViewNodes,e)}buildExportModelFrom(e,t={}){return dl({nodes:e,columns:this.columns,options:{columnIds:this.layoutRuntime().map(u=>u.state.id),...t},isSelected:u=>this.selection.isSelected(u),selectionCount:this.selection.getSelectedCount(),summaries:this.summaryDefs.length>0?{defs:this.summaryDefs,values:this.summaryValues}:void 0})}async exportRows(){let e=this.remote();if(!e)return this.allViewNodes;let t=++this.exportToken,{sort:u,searchText:r,groupBy:n}=this.store.getState(),i=await e.loadAllRows({sort:ir(u,n),filter:this.runningFilter(),searchText:r},{maxRows:this.exportMaxRows,pageSize:this.exportPageSize,isCancelled:()=>t!==this.exportToken||this.disposed,onProgress:(a,s)=>this.setBusy("exporting",s>0?Math.round(a/s*100):null)});return this.setBusy("exporting",null),i}setExportDefaults(e){this.exportDefaults={...e}}setEnterpriseEdition(e){this.enterpriseEdition=e}isEnterpriseEdition(){return this.enterpriseEdition}enterpriseEdition=!1;requireEnterprise(e){if(!this.enterpriseEdition)throw new Error(`[datagrid] ${e} is an Enterprise feature. Import EnterpriseDataGrid from @kanunilabs/datagrid-react-enterprise (CSV export is available in Community).`)}async withExportSignal(e,t){if(e.signal)return this.withBusy("exporting",()=>t(e));let u=new AbortController;this.exportAbort=u;try{return await this.withBusy("exporting",()=>t({...e,signal:u.signal}))}finally{this.exportAbort===u&&(this.exportAbort=null)}}async exportToCsv(e={}){return this.withExportSignal(e,async t=>{let u=this.buildExportModelFrom(await this.exportRows(),t);return{blob:await ml(u,t),fileName:gr(t.fileName??this.gridId,"csv"),rowCount:u.rows.length}})}async exportToExcel(e={}){this.requireEnterprise("Excel export");let t={sheetName:this.text.exportSheetName,...this.exportDefaults,...e};return this.withExportSignal(t,async u=>{let r=this.buildExportModelFrom(await this.exportRows(),u);return{blob:await El(r,{...u,onProgress:n=>{u.onProgress?.(n),n>=1&&this.setBusy("exporting",null,!1)}}),fileName:gr(u.fileName??this.gridId,"xlsx"),rowCount:r.rows.length}})}async exportToPdf(e={}){return this.requireEnterprise("PDF export"),this.withExportSignal(e,async t=>{let u=this.buildExportModelFrom(await this.exportRows(),t);return this.setBusy("exporting",null,!1),{blob:await Nl(u,t),fileName:gr(t.fileName??this.gridId,"pdf"),rowCount:u.rows.length}})}getViewState(){let e=this.store.getState();return{version:1,columns:this.columns.getColumnStates(),sort:e.sort,filter:e.filter,columnFilters:e.columnFilters,columnFilterParts:e.columnFilterParts,filterEnabled:e.filterEnabled,searchText:e.searchText,groupBy:e.groupBy,collapsedGroups:e.collapsedGroups,page:e.page,pageSize:e.pageSize}}applyViewState(e){if(e.version!==1){this.debugMode&&console.error("[datagrid] unsupported view state version",e.version);return}this.columns.applyColumnStates(e.columns??[]);let t=new Set(this.columns.getOrder()),u=[],r=i=>t.has(i)?!0:(u.push(i),!1),n=Ts(e.groupBy).filter(r);this.remote()?.setGrouping(n.map(i=>({columnId:i})),n),this.store.applyState({sort:(e.sort??[]).filter(i=>r(i.columnId)),filter:$i(e.filter??null,r),columnFilters:Object.fromEntries(Object.entries(e.columnFilters??{}).filter(([i])=>r(i))),columnFilterParts:Object.fromEntries(Object.entries(e.columnFilterParts??Object.fromEntries(Object.entries(e.columnFilters??{}).map(([i,a])=>[i,{[It]:a}]))).filter(([i])=>r(i))),filterEnabled:e.filterEnabled??!0,searchText:e.searchText??"",groupBy:n,collapsedGroups:e.collapsedGroups??[],expandedDetails:[],page:e.page??0,pageSize:e.pageSize??this.store.getState().pageSize}),u.length>0&&this.debugMode&&console.warn(`[datagrid] saved view referenced unknown column(s): ${[...new Set(u)].join(", ")} \u2014 dropped.`),this.emitColumnStateChanged(),this.emitFilterChanged(),this.recompute()}setData(e){this.rowModel.setData?.(e),this.bumpDataEpoch();let t=this.keyGetter,u=new Set(e.map(r=>t(r)));this.selection.retainKeys(u)&&this.emitSelectionChanged(),this.events.emit("dataUpdated",{totalCount:e.length}),this.recompute()}moveRow(e,t,u="before"){if(this.rowModel.mode==="remote")return this.debugMode&&console.warn("[datagrid] moveRow is a local operation \u2014 the server owns the order of a remote grid. Persist the move from rowDrag.onReorder and let the grid re-query."),!1;if(this.getSort().length>0)return this.debugMode&&console.warn("[datagrid] moveRow ignored: a sort is active, so the sort decides the row order and the move would be invisible. Clear the sort, or keep an order field and update it from rowDrag.onReorder."),!1;let r=this.rowModel.getSourceRows?.()??[],n=Il(r,e,t,u,this.keyGetter);return n.moved?(this.rowModel.setData?.(n.rows),this.bumpDataEpoch(),this.events.emit("rowsChanged",{added:0,updated:0,removed:0}),this.events.emit("dataUpdated",{totalCount:n.rows.length}),this.recompute(),!0):!1}applyTransaction(e){let t=this.remote();if(t){let h=e.update??[];if(!((e.add?.length??0)>0||(e.remove?.length??0)>0)&&h.length>0&&this.remoteUpdateKeepsPlacement(h)){let E=t.patchRows(h);this.invalidateResultCaches(),this.events.emit("rowsChanged",{added:0,updated:E,removed:0}),this.events.emit("dataUpdated",{totalCount:t.getTotalCount()}),this.recompute(!0);return}t.invalidate(),this.recompute(!0),this.events.emit("rowsChanged",{added:0,updated:0,removed:0});return}let u=this.rowModel.getSourceRows?.()??[],r=this.keyGetter,n=new Set;if(e.update)for(let h of e.update)n.add(r(h));let i=new Map;if(n.size>0)for(let h=0;h<u.length;h++){let E=r(u[h]);n.has(E)&&i.set(E,h)}let a=u.slice(),s=0,l=0,m=[];if(e.update)for(let h of e.update){let E=i.get(r(h));E!==void 0&&(a[E]=h,m.push(E),s++)}if(e.remove&&e.remove.length>0){let h=new Set(e.remove.map(g=>yi(g)?g:r(g))),E=a.filter(g=>!h.has(r(g)));l=a.length-E.length,a=E}let c=e.add?.length??0;if(c>0){let h=e.addBeforeKey===void 0?-1:a.findIndex(g=>r(g)===e.addBeforeKey),E=e.add;h>=0?a=a.slice(0,h).concat(E,a.slice(h)):e.addPosition==="first"?a=E.concat(a):a=a.concat(E)}if(!(l>0||c>0)&&this.rowModel.patchData?this.rowModel.patchData(a,m,this.columns):this.rowModel.setData?.(a),this.bumpDataEpoch(),l>0){let h=new Set(a.map(E=>r(E)));this.selection.retainKeys(h)&&this.emitSelectionChanged()}this.events.emit("rowsChanged",{added:c,updated:s,removed:l}),this.events.emit("dataUpdated",{totalCount:a.length}),this.recompute(!0)}applyTransactionAsync(e,t){this.disposed||(this.asyncQueue.push(e),t&&this.asyncCallbacks.push(t),this.asyncTimer===null&&(this.asyncTimer=setTimeout(()=>{this.asyncTimer=null,this.flushAsyncTransactions()},this.asyncTransactionWait)))}flushAsyncTransactions(){if(this.asyncTimer!==null&&(clearTimeout(this.asyncTimer),this.asyncTimer=null),this.asyncQueue.length===0)return;let e=this.asyncQueue,t=this.asyncCallbacks;this.asyncQueue=[],this.asyncCallbacks=[];let u=mo(e,this.keyGetter);go(u)||this.applyTransaction(u),this.events.emit("asyncTransactionsFlushed",{count:e.length});for(let r of t)r()}getPendingAsyncTransactionCount(){return this.asyncQueue.length}remoteUpdateKeepsPlacement(e){let{sort:t,searchText:u,groupBy:r}=this.store.getState(),n=Ar(this.columns,{sort:ir(t,r),filter:this.runningFilter(),searchText:u});if(n.length===0)return!0;for(let i of e){let a=this.getRowByKey(this.keyGetter(i));if(!a)return!1;for(let s of n){let l=this.columns.getCellValue(a,s),m=this.columns.getCellValue(i,s);if(!Object.is(l,m))return!1}}return!0}getRowKeyField(){return this.rowKeyField}getRowKey(e){return this.keyGetter(e)}invalidate(){this.rowModel.invalidate?.(),this.bumpDataEpoch(),this.recompute()}isRemote(){return this.rowModel.mode==="remote"}refresh(){return this.recompute()}flashCells(e={}){this.events.emit("cellsFlashed",{rowKeys:[...e.rowKeys??[]],columnIds:[...e.columnIds??[]],duration:e.duration??700})}refreshCells(){this.cellRevision++,this.events.emit("cellsRefreshed",{revision:this.cellRevision})}isDisposed(){return this.disposed}dispose(){this.disposed||(this.events.emit("gridPreDestroyed",{state:this.getViewState()}),this.disposed=!0,this.unsubscribeStore(),this.scrollEndTimer!==null&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=null),this.asyncTimer!==null&&(clearTimeout(this.asyncTimer),this.asyncTimer=null),this.asyncQueue=[],this.asyncCallbacks=[],this.rowModel.dispose?.(),this.events.clear(),this.lastResult={nodes:[],visibleCount:0,totalCount:0},this.viewNodes=[],this.allViewNodes=[],this.summaryValues={},this.rowIndexCache=null,this.invalidateResultCaches())}serverSummaryRequests(){if(this.summaryDefs.length===0)return;let e=[];for(let t of this.summaryDefs)t.type!=="custom"&&e.push({columnId:t.columnId,type:t.type});return e.length>0?e:void 0}neededRange(){if(this.paginationEnabled){let{page:u,pageSize:r}=this.store.getState(),n=u*r;return{start:n,end:n+r}}let e=this.virtual.getWindow().rows,t=Math.max(1,e.end-e.start);return{start:Math.max(0,e.start-t),end:e.end+t}}getBusy(){return this.busy}foregroundDepth=0;setBusy(e,t,u=!0){let r=e!==null,n=r&&u,i=r&&this.foregroundDepth===0;this.busy.busy===r&&this.busy.phase===e&&this.busy.progress===t&&this.busy.cancellable===n&&this.busy.background===i||(this.busy={busy:r,phase:e,progress:t,cancellable:n,background:i},this.events.emit("busyChanged",this.busy))}async withBusy(e,t,u=!1){this.busyDepth++,u||this.foregroundDepth++,this.setBusy(e,null);try{return await t()}finally{this.busyDepth--,u||this.foregroundDepth--,this.busyDepth===0&&this.setBusy(null,null)}}cancel(){this.disposed||(this.computeToken++,this.exportToken++,this.exportAbort?.abort(),this.exportAbort=null,this.rowModel instanceof pu&&this.rowModel.cancel())}async recompute(e=!1){if(!this.disposed)return this.withBusy("computing",()=>this.recomputeInner(),e)}async recomputeInner(){let e=++this.computeToken,{sort:t,searchText:u,groupBy:r}=this.store.getState(),n=this.runningFilter(),i=ir(t,r),a,s=performance.now();try{a=await this.rowModel.getRows(this.columns,{sort:i,filter:n,searchText:u,externalFilter:this.externalFilter,range:this.neededRange(),summaries:this.serverSummaryRequests()})}catch(w){!(w instanceof Ge)&&!(w instanceof gu)&&(this.events.emit("dataError",{error:w}),this.debugMode&&console.error("[datagrid] row model failed",w));return}if(e!==this.computeToken||this.disposed)return;let l=Math.round(performance.now()-s),m=performance.now(),c=this.remote();if(c)this.summaryValues=this.summaryDefs.length>0?c.getSummaries():{},this.summaryBasis=null;else if(this.summaryDefs.length>0){let w=this.currentSummaryBasis(n,u),D=this.summaryBasis===w,S=D?this.summaryDefs.filter(T=>T.type==="custom"&&T.dependsOnOrder!==!1):this.summaryDefs;S.length>0?this.runSummaryPass(a.nodes,S,D,w,e):this.summaryBasis=w}else this.summaryValues={},this.summaryBasis=null;let h=Math.round(performance.now()-m);this.lastResult=a,this.invalidateResultCaches();let E=performance.now();this.projectView();let g=this.rowModel.getLastTimings?.();this.lastComputeTimings={modelMs:l,summaryMs:h,projectViewMs:Math.round(performance.now()-E),...g}}getComputeTimings(){return this.lastComputeTimings}projectView(){if(this.disposed)return;let e=this.store.getState(),t=e.groupBy,u=this.focus.getIndices(this.focusContext())?.rowIndex,r=this.treeView();r&&t.length>0&&!this.warnedTreeGrouping&&(this.warnedTreeGrouping=!0,this.debugMode&&console.warn("[datagrid] `tree` and grouping are mutually exclusive \u2014 grouping is ignored."));let n=r??(t.length>0&&this.rowModel.mode==="client"?ho(this.ensureGroupTree(t),{collapsedKeys:this.store.collapsedSet(),collapsedByDefault:this.collapsedByDefault}).nodes:this.lastResult.nodes),i=this.masterDetail?Ho(n,{expandedKeys:this.store.expandedSet(),expandedByDefault:this.masterDetail.expandedByDefault,height:this.masterDetail.height}):n,a=this.editForm?zo(i,{rowKey:this.editForm.rowKey,height:this.editForm.height,atTop:this.editForm.atTop}):i;if(this.allViewNodes=a,this.infiniteScroll)this.infiniteLimit=Math.min(this.infiniteLimit,Math.max(this.infinitePageSize,a.length)),this.viewNodes=a.slice(0,this.infiniteLimit);else if(this.paginationEnabled){let{pageSize:l}=e,m=this.store.clampPage(Math.ceil(a.length/l))*l;this.viewNodes=a.slice(m,m+l)}else this.viewNodes=a;this.rowIndexCache=null,this.rebuildRowHeights();let s=this.virtual.setRowCount(this.viewNodes.length);this.focus.reconcile(this.focusContext(),u)&&this.emitFocusChanged(),this.events.emit("contentReady",{rows:this.lastResult.nodes,totalCount:this.lastResult.totalCount,visibleCount:this.lastResult.visibleCount}),this.emitPaginationChanged(!0),!this.firstDataRenderedSent&&this.viewNodes.length>0&&(this.firstDataRenderedSent=!0,this.events.emit("firstDataRendered",{rowCount:this.viewNodes.length})),this.emitIfWindowChanged(s)}treeView(){if(!this.treeData||!this.treeParent||this.rowModel.mode!=="client")return null;let e=this.rowModel.getSourceRows?.();return e?((!this.treeIndex||this.treeIndexEpoch!==this.dataEpoch)&&(this.treeIndex=xs(e,this.keyGetter,this.treeParent),this.treeIndexEpoch=this.dataEpoch),Ds(this.dataNodes(),{index:this.treeIndex,sourceRows:e,isExpanded:t=>this.isTreeRowExpanded(t)}).nodes):null}isTreeRowExpanded(e){return this.treeExpandedByDefault!==this.treeToggled.has(e)}expandTreeRow(e){this.setTreeRowExpanded(e,!0)}collapseTreeRow(e){this.setTreeRowExpanded(e,!1)}toggleTreeRow(e){this.setTreeRowExpanded(e,!this.isTreeRowExpanded(e))}setTreeRowExpanded(e,t){this.treeData&&this.isTreeRowExpanded(e)!==t&&(t===this.treeExpandedByDefault?this.treeToggled.delete(e):this.treeToggled.add(e),this.reproject())}expandAllTreeRows(){this.treeData&&(this.treeExpandedByDefault=!0,this.treeToggled.clear(),this.reproject())}collapseAllTreeRows(){this.treeData&&(this.treeExpandedByDefault=!1,this.treeToggled.clear(),this.reproject())}reproject(){if(!this.disposed){this.busyDepth++,this.setBusy("projecting",null);try{this.projectView()}finally{this.busyDepth--,this.busyDepth===0&&this.setBusy(null,null)}}}emitSortChanged(){this.resetReveal(),this.events.emit("sortChanged",{sort:this.store.getState().sort})}layoutRuntime(){let e=this.columns.runtime();if(this.showGroupedColumns)return e;let t=this.store.getState().groupBy;return t.length===0?e:e.filter(u=>!t.includes(u.state.id))}rebuildRowHeights(){let e=this.measuredRowHeights,t=this.masterDetail!==null||this.editForm!==null;if(!this.getRowHeightFn&&!t&&e.size===0)return this.virtual.setRowHeights(null);let u=this.virtual.getRowHeight(),r=this.viewNodes,n=new Map;for(let i=0;i<r.length;i++){let a=r[i],s;a.kind==="detail"||a.kind==="editform"?s=a.height:s=e.get(a.key)??this.getRowHeightFn?.(a,i),s!==void 0&&s!==u&&n.set(i,Math.max(1,s))}return this.virtual.setRowHeights(n)}setMeasuredRowHeights(e){let t=e.size!==this.measuredRowHeights.size;if(!t){for(let[r,n]of e)if(this.measuredRowHeights.get(r)!==n){t=!0;break}}if(!t)return!1;this.measuredRowHeights=new Map(e);let u=this.rebuildRowHeights();return this.emitIfWindowChanged(u),u}getMeasuredRowHeights(){return this.measuredRowHeights}clearMeasuredRowHeights(){if(this.measuredRowHeights.size===0)return!1;this.measuredRowHeights=new Map;let e=this.rebuildRowHeights();return this.emitIfWindowChanged(e),e}getRowHeightAt(e){return this.virtual.getRowHeightAt(e)}getRowOffset(e){return this.virtual.getRowOffset(e)}getCellSpans(e){let t=this.columns.getDef(e)?.spanRows;if(!t)return ks;this.spanCacheResult!==this.lastResult&&(this.spanCache.clear(),this.spanCacheResult=this.lastResult);let u=this.spanCache.get(e);if(u)return u;let r=Ao(this.lastResult.nodes,n=>this.columns.getCellValue(n,e),typeof t=="function"?t:void 0);return this.spanCache.set(e,r),r}hasCellSpans(){return this.columns.runtime().some(e=>e.def.spanRows)}emitColumnStateChanged(){let e=this.virtual.setColumnLayout(gi(this.layoutRuntime()));this.events.emit("columnStateChanged",{columns:this.columns.getColumnStates()}),this.emitIfWindowChanged(e)}emitIfWindowChanged(e){return e&&!this.disposed&&(this.events.emit("viewportChanged",{window:this.virtual.getWindow()}),this.maybeRevealMore()),e}maybeRevealMore(){if(!this.infiniteScroll||this.disposed)return;let e=this.virtual.getWindow().rows,t=Math.max(1,e.end-e.start);e.end+t<this.infiniteLimit||this.revealMore()}assertColumn(e){let t=!!this.columns.getState(e);return!t&&this.debugMode&&console.error(`[datagrid] unknown column id "${e}".`),t}},Rr={compact:24,normal:28,comfortable:36};var Nr={quartz:{compact:26,normal:36,comfortable:44},balham:{compact:20,normal:25,comfortable:32},material:{compact:32,normal:40,comfortable:52},alpine:{compact:26,normal:34,comfortable:42},kanuni:{compact:24,normal:32,comfortable:40},"kanuni-midnight":{compact:24,normal:32,comfortable:40}};function bu(e,t,u){return e?Nr[e][t??"normal"]:t?Rr[t]:u}function Tr(e){return{sum:e.summarySum,avg:e.summaryAvg,min:e.summaryMin,max:e.summaryMax,count:e.summaryCount,countDistinct:e.summaryDistinct,custom:e.summaryCustom}}var Ps=Tr(Pt("en"));function Mr(e,t=Ps){return e.label??t[e.type]}var Gs=new Set(["sum","avg","min","max"]);function Ir(e,t,u){if(e.valueFormatter)return e.valueFormatter(t??null);if(t==null)return"\u2014";if(!Gs.has(e.type))return t.toLocaleString();if(u?.dataType==="date"){let r=new Date(t);return u.valueFormatter?u.valueFormatter(r,{}):r.toLocaleDateString()}return u?.valueFormatter?u.valueFormatter(t,{}):String(Math.round(t*100)/100)}function _i(e){switch(e){case"number":return["sum","avg","min","max","count","countDistinct"];case"date":return["min","max","count","countDistinct"];default:return["count","countDistinct"]}}var Os=[">=","<=","<>",">","<","="];function ji(e,t,u){let r=t.trim();if(r==="")return null;for(let n of Os)if(r.startsWith(n)){let i=r.slice(n.length).trim();if(i==="")return null;let a=u==="number"?Number(i):Number.NaN;return{columnId:e,operator:n,value:Number.isNaN(a)?i:a}}if(u==="number"){let n=Number(r);return Number.isNaN(n)?{columnId:e,operator:"contains",value:r}:{columnId:e,operator:"=",value:n}}if(u==="boolean"){let n=r.toLowerCase();return n==="true"||n==="false"?{columnId:e,operator:"=",value:n==="true"}:{columnId:e,operator:"contains",value:r}}return u==="date"?{columnId:e,operator:"contains",value:r}:{columnId:e,operator:"contains",value:r}}function Yi(e,t){if(e.scrollHeight<1e6)return null;let u=e.scrollTop;e.scrollTop=1e8;let r=e.scrollTop;if(e.scrollTop=u,r<=0)return null;let n=t.getVirtualWindow().rows.totalHeight-e.clientHeight;return r>=n-4?null:(t.setMaxScrollOffset(r),r)}function vu(e,t){let{controller:u,maxGroupLevels:r,t:n}=t,i=e.columnId,a=u.getColumnModel().getDef(i),s=u.getSort(),l=s.find(N=>N.columnId===i),m=u.getGroupLevels(),c=m.includes(i),h=a?.sortable!==!1,E=u.getColumnStates().find(N=>N.id===i)?.pinned??null,g=a?.groupable!==!1,w=[{id:"sort-asc",label:n.sortAsc,disabled:!h||l?.direction==="asc",onSelect:()=>u.setSort([{columnId:i,direction:"asc"}])},{id:"sort-desc",label:n.sortDesc,disabled:!h||l?.direction==="desc",onSelect:()=>u.setSort([{columnId:i,direction:"desc"}])},{id:"sort-clear",label:n.clearSort,disabled:!l,onSelect:()=>u.setSort(s.filter(N=>N.columnId!==i))},{id:"sep-1",separator:!0},{id:"group",label:c?n.ungroupColumn:n.groupByColumn,disabled:!g,onSelect:()=>{c?u.groupBy(m.filter(N=>N!==i)):u.groupBy([...m,i].slice(-r))}},{id:"group-panel",label:t.groupPanelVisible?n.hideGroupPanel:n.showGroupPanel,onSelect:t.onToggleGroupPanel},{id:"footer",label:t.footerVisible?n.hideFooter:n.showFooter,onSelect:t.onToggleFooter},{id:"sep-2",separator:!0},{id:"hide-column",label:n.hideColumn,disabled:u.getColumnStates().filter(N=>N.visible).length<=1,onSelect:()=>u.setColumnVisible(i,!1)},{id:"field-chooser",label:n.fieldChooser,onSelect:t.onOpenFieldChooser},{id:"sep-3",separator:!0},{id:"best-fit",label:n.bestFit,disabled:a?.resizable===!1,onSelect:()=>t.onBestFit(i)},{id:"best-fit-all",label:n.bestFitAll,onSelect:t.onBestFitAll}],D=u.getColumnStates().filter(N=>N.visible&&N.pinned===E).map(N=>N.id),S=D.indexOf(i),T=a?.reorderable!==!1&&S>=0;return w.push({id:"sep-4",separator:!0},{id:"move-left",label:n.moveLeft,disabled:!T||S<=0,onSelect:()=>u.moveColumn(i,D[S-1])},{id:"move-right",label:n.moveRight,disabled:!T||S<0||S>=D.length-1,onSelect:()=>u.moveColumn(i,D[S+2])},{id:"fixed-position",label:n.fixedPosition,items:[{id:"pin-left",label:n.pinLeft,disabled:E==="left",onSelect:()=>u.setColumnPinned(i,"left")},{id:"pin-right",label:n.pinRight,disabled:E==="right",onSelect:()=>u.setColumnPinned(i,"right")},{id:"pin-sticky",label:n.pinSticky,disabled:E==="sticky",onSelect:()=>u.setColumnPinned(i,"sticky")}]},{id:"unpin",label:n.unpin,disabled:E===null,onSelect:()=>u.setColumnPinned(i,null)}),w}async function Zi(e,t){try{let u=t==="csv"?await e.exportToCsv():t==="excel"?await e.exportToExcel():t==="excel-selected"?await e.exportToExcel({selectedOnly:!0}):await e.exportToPdf();return Pi(u.blob,u.fileName),{completed:!0}}catch(u){return u instanceof ut?{completed:!1}:{completed:!1,error:u instanceof Error?u.message:String(u)}}}var Ji=null;function Vs(){return typeof document>"u"?null:(Ji??=document.createElement("canvas"),Ji.getContext("2d"))}function Qi(e){let t=getComputedStyle(e);return`${t.fontStyle} ${t.fontWeight} ${t.fontSize} ${t.fontFamily}`}function xu(e,t){let u=Vs();if(!u)return null;let r=typeof CSS<"u"&&CSS.escape?CSS.escape(t):t.replace(/"/g,'\\"'),n=e.querySelector(`.kanuni-datagrid-header-cell[data-column-id="${r}"]`),i=e.querySelectorAll(`.kanuni-datagrid-cell[data-column-id="${r}"]`);if(!n&&i.length===0)return null;let a=0;if(n){let s=n.querySelector(".kanuni-datagrid-header-label")??n;u.font=Qi(s),a=u.measureText(s.textContent??"").width+44}if(i.length>0){u.font=Qi(i[0]);for(let s=0;s<i.length;s++){let l=i[s].textContent??"";if(l==="")continue;let m=u.measureText(l).width+20;m>a&&(a=m)}}return a===0?null:Math.round(Math.min(640,Math.max(48,a)))}var gt=60,Ot=36,ft=28,Vt="application/x-kanuni-row",Gt=new Map,Lr=new Set,Gr=5e3,rt=0,Ks=["columnStateChanged","sortChanged"],Hs=["columnStateChanged"],zs=["contentReady","viewportChanged","filterChanged","selectionChanged","focusChanged","summariesChanged","cellsRefreshed"],k=(e,t="div")=>{let u=document.createElement(t);return u.className=e,u},Kt="http://www.w3.org/2000/svg";function Ws(e,t){let u=n=>{t&&console.warn(`[datagrid] ${n} is an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to use it.`)},r={...e};if(r.dataSource!=null&&!Array.isArray(r.dataSource))throw new Error("[datagrid] a server-side DataSource is an Enterprise feature. Pass an array to createGrid, or use createEnterpriseGrid from @kanunilabs/datagrid-enterprise.");if(r.columns?.some(n=>n.spanRows)&&(u("cell span/merge (spanRows) is"),r={...r,columns:r.columns.map(n=>n.spanRows?{...n,spanRows:void 0}:n)}),r.tree&&(u("tree data is"),delete r.tree),r.masterDetail&&(u("master-detail is"),delete r.masterDetail),r.grouping){let{groupBy:n,groupSummaries:i}=r.grouping,a=n==null?[]:typeof n=="string"?[n]:n;(a.length>1||i)&&(u("multi-level grouping and group summaries are"),r={...r,grouping:{...r.grouping,groupBy:a.slice(0,1),groupSummaries:!1}})}return r}var Us={columnResize:"use `resizable`",columnReorder:"use `reorderable`",groupPanel:"use `grouping: { panel: true }`",autoColumns:"columns are inferred automatically when `columns` is empty",loadingOverlay:"",onReady:"the controller is returned directly \u2014 use `grid.controller`",className:"style the host element you pass in",style:"style the host element you pass in",toolbarItemsBefore:"",renderRow:"",announcements:"",filterPanelLabels:"",filterIconMode:"",autoSizeStrategy:"",footerMenu:"",showRowCount:"",onOpenFilterBuilder:""},Du=new Set;function $s(e){for(let t of Object.keys(e)){let u=Us[t];u===void 0||u===""||Du.has(t)||(Du.add(t),console.warn(`[datagrid] \`${t}\` is a React-only option \u2014 ${u}.`))}}function qs(){let e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("width","14"),e.setAttribute("height","14"),e.setAttribute("viewBox","0 0 16 16"),e.setAttribute("aria-hidden","true"),e.setAttribute("focusable","false");let t=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("d","M8 1v8m0 0L5 6m3 3 3-3M2 11v2a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","1.5"),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round"),e.appendChild(t),e}function _s(){let e=document.createElementNS(Kt,"svg");e.setAttribute("width","11"),e.setAttribute("height","11"),e.setAttribute("viewBox","0 0 16 16"),e.setAttribute("aria-hidden","true"),e.setAttribute("focusable","false");let t=document.createElementNS(Kt,"path");return t.setAttribute("d","M1.5 2.5h13L9.5 8.6v4.3l-3 1.6V8.6L1.5 2.5Z"),t.setAttribute("fill","currentColor"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","0.6"),t.setAttribute("stroke-linejoin","round"),e.appendChild(t),e}function js(e){let t=document.createElementNS(Kt,"svg");t.setAttribute("width","14"),t.setAttribute("height","14"),t.setAttribute("viewBox","0 0 16 16"),t.setAttribute("aria-hidden","true"),t.setAttribute("focusable","false");let u=document.createElementNS(Kt,"rect");u.setAttribute("x","2"),u.setAttribute("y","2"),u.setAttribute("width","12"),u.setAttribute("height","12"),u.setAttribute("rx","2"),u.setAttribute("fill","none"),u.setAttribute("stroke","currentColor"),u.setAttribute("stroke-width","1.3"),t.appendChild(u);let r=n=>{let i=document.createElementNS(Kt,"path");i.setAttribute("d",n),i.setAttribute("fill","none"),i.setAttribute("stroke","currentColor"),i.setAttribute("stroke-width","1.3"),i.setAttribute("stroke-linecap","round"),t.appendChild(i)};return r("M5 8h6"),e&&r("M8 5v6"),t}function Ys(e,t){let u=e??(t==="number"?"right":"left");return u==="right"?"kanuni-datagrid-cell kanuni-datagrid-cell--number":u==="center"?"kanuni-datagrid-cell kanuni-datagrid-cell--center":"kanuni-datagrid-cell"}function Pr(e){let t="kanuni-datagrid-root";return e.dark&&(t+=" kanuni-datagrid-dark"),e.theme&&(t+=` kanuni-datagrid-theme-${e.theme}`),e.palette&&(t+=` kanuni-datagrid-palette-${e.palette}`),e.density&&(t+=` kanuni-datagrid-density-${e.density}`),t}function Xi(e,t){let{theme:u,palette:r,density:n,dark:i,striped:a=!0,rowNumbers:s=!1,locale:l="en",footer:m=!1,footerMenu:c=!0,footerPosition:h="bottom",notes:E,pinnedTopRows:g=[],pinnedBottomRows:w=[],resizable:D=!0,reorderable:S=!0,filterRow:T=!1,headerFilter:N=!1,filterIconMode:O="hover",filterPanel:z=!1,onOpenFilterBuilder:Z,focusedRow:j=!1,focusedRowKey:J,onFocusedRowChanged:nt,onRowClick:Fu,onRowActivate:Ct,autoSizeStrategy:V="none",renderRow:H,announcements:Y=!0,filterPanelLabels:_,showRowCount:Ee=!1,toolbarColumnChooser:He=!1,cellMenu:Ae=!0,rowMenu:he,headerMenu:ae,rowDrag:ue,alignedGrids:ee,printLayout:ze,renderCellContent:Su,getCellClassName:Bu,onCellPointerDown:Or,onCellPointerEnter:Ht,onCellDoubleClick:Vr,renderDetail:Kr,renderEditForm:ea,enterpriseEdition:Te=!1,stateStoring:Hr,tooltip:ku=!0,filterDebounce:ta,toolbar:zr=!1,highlightSearch:ua=!0,sortable:ra=!0,toolbarItemsAfter:na,toolbarItemsBefore:ia,toolbarExcel:aa=!1,toolbarPdf:oa=!1,searchDebounce:la=200,...sa}=t;$s(t),Ee&&!Du.has("showRowCount:deprecated")&&(Du.add("showRowCount:deprecated"),console.warn("[datagrid] `showRowCount` was retired on 2026-08-15 and does nothing in either renderer. The row count lives in the status bar (Enterprise) or the pager."));let I=Pt(l),{emptyText:da=I.noData,loadingText:ca=I.busy,loadingOverlay:Ru=!0,...pe}=sa,Wr=typeof Ru=="number"?Ru:300,Nu=Tr(I);if(!pe.columns||pe.columns.length===0){let o=Array.isArray(pe.dataSource)?pe.dataSource:[];pe.columns=bi(o)}pe.rowHeight===void 0&&(pe.rowHeight=bu(u,n,28));let ha=Te?pe:Ws(pe,!!t.debugMode),We=Te?E:void 0;!Te&&E&&t.debugMode&&console.warn("[datagrid] cell notes are an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to show them.");let A=new qi(ha);A.setEnterpriseEdition(Te),J!=null&&A.focusRow(J);let $=k(Pr(t));$.style.height="100%",$.setAttribute("role","grid"),$.setAttribute("data-grid-id",t.gridId),u&&$.setAttribute("data-theme",u),$.style.setProperty("--dg-row-height",`${A.getRowHeight()}px`);let U=k("kanuni-datagrid-scroller"),oe=k("kanuni-datagrid-canvas"),we=k("kanuni-datagrid-header");we.setAttribute("role","row");let me=k("kanuni-datagrid-rows");me.style.position="relative";let Q=k("kanuni-datagrid-viewport");me.appendChild(Q);let wt=k("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--top"),Ur=k("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--bottom"),Be=m,Ue=h==="top",ne=k(`kanuni-datagrid-footer-row kanuni-datagrid-footer-row--${Ue?"top":"bottom"}`);if(ne.setAttribute("role","row"),ne.setAttribute("aria-label",I.columnTotalsAria),c){let o=d=>{let p=d.target?.closest(".kanuni-datagrid-footer-cell")?.getAttribute("data-column-id");p&&(d.preventDefault(),Ma(p,{left:d.clientX,top:d.clientY}))};ne.addEventListener("click",o),ne.addEventListener("contextmenu",o)}let zt=k("kanuni-datagrid-bands-host");zt.style.display="contents";let it=k("kanuni-datagrid-filter-row");it.setAttribute("role","row"),oe.append(zt,we),T&&oe.append(it);let Tu=T?2:1;ne.style.setProperty("--dg-pinned-gap",String(Ue?Tu:0)),wt.style.setProperty("--dg-pinned-gap",String(Tu+(Be&&Ue?1:0))),Be&&Ue&&oe.append(ne),g.length>0&&oe.append(wt),oe.append(me),w.length>0&&oe.append(Ur),Be&&!Ue&&oe.append(ne),U.appendChild(oe);let $e=k("kanuni-datagrid-toolbar"),at=k("kanuni-datagrid-pager");at.setAttribute("role","navigation"),at.setAttribute("aria-label","Pagination");let qe=k("kanuni-datagrid-filter-panel"),_e=!!pe.grouping?.panel,le=k("kanuni-datagrid-group-panel");zr&&$.appendChild($e),_e&&$.appendChild(le),$.appendChild(U),z&&$.appendChild(qe),pe.pagination?.enabled&&$.appendChild(at);let yt=k("kanuni-datagrid-loading-overlay"),$r=k("kanuni-datagrid-loading-card"),qr=k("kanuni-datagrid-loading-spinner","span");qr.setAttribute("aria-hidden","true");let _r=k("kanuni-datagrid-loading-label","span");_r.textContent=ca,$r.append(qr,_r),yt.appendChild($r),yt.style.display="none";let Et=k("kanuni-datagrid-sr-only","div");Et.setAttribute("role","status"),Et.setAttribute("aria-live","polite"),Et.setAttribute("aria-atomic","true");let Wt=k("kanuni-datagrid-empty");Wt.textContent=da,Wt.style.display="none",$.append(yt,Wt),Y&&$.appendChild(Et),e.appendChild($);let jr=pe.selection,Ut=(jr?.mode??"none")!=="none"&&(jr?.checkboxColumn??!1),$t=A.hasMasterDetail()&&!!Kr,Mu=s?gt:0,Yr=Mu+($t?ft:0),be=(s?gt:0)+($t?ft:0)+(Ut?Ot:0);A.setLeadWidth(be);let qt=!!ue?.enabled,At=ue?.group??null,Zr=ue?.allowReordering??!0,Jr=ue?.allowDropInsert??At!==null,ke=null,_t=null,jt=!1,je=null,Me=null;function ot(o){je=o;for(let d of Q.querySelectorAll(".kanuni-datagrid-row")){let f=d.getAttribute("data-row-key"),p=o!==null&&f===String(o.key);d.classList.toggle("kanuni-datagrid-row--drop-before",p&&o.side==="before"),d.classList.toggle("kanuni-datagrid-row--drop-after",p&&o.side==="after")}}let Qr=(o,d)=>{let f=d.getBoundingClientRect();return o.clientY<f.top+f.height/2?"before":"after"},Xr=o=>o.dataTransfer?.types.includes(Vt)?ke!==null?Zr:Jr&&At!==null:!1;function en(o,d,f){let p=null;try{let y=o.dataTransfer?.getData(Vt);p=y?JSON.parse(y):null}catch{p=null}if(p){if(p.gridId===A.gridId){if(!Zr)return;if(ue?.onReorder){ue.onReorder({dragKey:p.rowKey,targetKey:d,position:f,row:A.getRowByKey(p.rowKey)});return}A.moveRow(p.rowKey,d,f);return}!Jr||At===null||p.group!==At||ue?.onAdd?.({row:p.row,rowKey:p.rowKey,otherGridId:p.gridId,targetKey:d,position:f})}}let pa=o=>{let d=Ie(o);if(!d||d.node.kind!=="data"||!o.dataTransfer)return;ke=d.node.key,_t=d.node.key,jt=!1;let f={gridId:A.gridId,group:At,rowKey:d.node.key,row:d.node.data};o.dataTransfer.setData(Vt,JSON.stringify(f)),o.dataTransfer.setData("text/plain",String(d.node.key)),o.dataTransfer.effectAllowed="move",A.notifyRowDrag("enter",{rowKey:d.node.key})},ma=o=>{if(!Xr(o))return;o.preventDefault(),o.dataTransfer&&(o.dataTransfer.dropEffect="move");let d=Ie(o);if(!d||d.node.kind!=="data")return;if(ke===d.node.key){Me=null,ot(null);return}let f=o.target.closest(".kanuni-datagrid-row"),p=Qr(o,f),y=je?.key!==d.node.key||je.side!==p;Me={key:d.node.key,side:p},ot({key:d.node.key,side:p}),y&&ke!==null&&A.notifyRowDrag("move",{rowKey:ke,overKey:d.node.key,position:p})},ga=o=>{if(!Xr(o)){ot(null);return}o.preventDefault();let d=Ie(o);if(jt=!0,d&&d.node.kind==="data"){let f=o.target.closest(".kanuni-datagrid-row"),p=Qr(o,f);Me={key:d.node.key,side:p},en(o,d.node.key,p)}else Me=null,en(o,null,"after");ke=null,ot(null)},fa=()=>{_t!==null&&A.notifyRowDragEnd({rowKey:_t,dropped:jt,overKey:Me?.key??null,position:Me?.side??null}),jt=!1,_t=null,ke=null,Me=null,ot(null)},Ca=o=>{let d=o.relatedTarget;d&&me.contains(d)||ke!==null&&(Me=null,ot(null),A.notifyRowDrag("leave",{rowKey:ke}))},bt=ze===void 0||ze===!1?null:(()=>{let o=ze===!0?{}:ze;return{always:o.always??!1,maxRows:o.maxRows??Gr}})(),vt=!1;function Iu(o){vt!==o&&(vt=o,$.classList.toggle("kanuni-datagrid-print",o),o?(rt++,document.documentElement.classList.add("kanuni-datagrid-printing")):(rt--,rt<=0&&(rt=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),Vu())}let tn=null;if(bt&&!bt.always){let o=()=>{let f=A.getRows().length;if(f>bt.maxRows){A.isDebugMode()&&console.warn(`[datagrid] print layout skipped: ${f} rows exceeds maxRows (${bt.maxRows}). Printing the visible rows instead \u2014 use exportPdf() for the whole result.`);return}Iu(!0)},d=()=>Iu(!1);window.addEventListener("beforeprint",o),window.addEventListener("afterprint",d),tn=()=>{window.removeEventListener("beforeprint",o),window.removeEventListener("afterprint",d)}}let Ye=0,ve=[],se=0,Lu=0;function Pu(){let o=A.getColumnLayout(),d=A.getVirtualWindow().columns,f=[],p=(b,x,F,v)=>{let C=b.def;f.push({def:C,id:b.state.id,width:b.state.width,pinned:x,inset:F,className:Ys(C.align,C.dataType)+(x?" kanuni-datagrid-cell--pinned":"")+(C.autoHeight?" kanuni-datagrid-cell--wrap":""),visualIndex:v})};o.left.forEach((b,x)=>p(b,"left",o.leftOffsets[x]+be,x));for(let b=d.start;b<d.end&&b<o.center.length;b++)p(o.center[b],null,0,o.left.length+b);o.right.forEach((b,x)=>p(b,"right",o.rightOffsets[x],o.left.length+o.center.length+x)),ve=f,se=d.offsetX;let y=(o.centerOffsets[Math.min(d.end,o.center.length)]??0)-(o.centerOffsets[Math.min(d.start,o.center.length)]??0);Lu=Math.max(0,o.centerWidth-d.offsetX-y),oe.style.minWidth=`${o.totalWidth+be}px`}let Yt=26;function wa(){let o=A.getColumnLayout(),d=A.getVirtualWindow().columns,f=[...o.left,...o.center.slice(d.start,Math.min(d.end,o.center.length)),...o.right],p=Ei(f);if(zt.textContent="",we.style.top=`${p*Yt}px`,$.style.setProperty("--dg-band-offset",`${p*Yt}px`),p===0)return;Ai(f,p).forEach((b,x)=>{let F=k("kanuni-datagrid-band-row");if(F.style.top=`${x*Yt}px`,F.style.height=`${Yt}px`,be>0){let v=k("kanuni-datagrid-band-cell kanuni-datagrid-band-cell--spacer kanuni-datagrid-band-cell--pinned");v.style.width=`${be}px`,v.style.flex="none",v.style.insetInlineStart="0px",F.appendChild(v)}if(se>0){let v=k("kanuni-datagrid-spacer");v.style.width=`${se}px`,v.style.flex="none",F.appendChild(v)}for(let v of b){let C=k(`kanuni-datagrid-band-cell${v.spacer?" kanuni-datagrid-band-cell--spacer":""}`);if(C.style.width=`${v.width}px`,C.style.flex="none",!v.spacer){if(v.columnIds.length>0){let R=Ne(A.getColumnModel().getDef(v.columnIds[0])).slice(0,x+1);if(R.length===x+1&&A.isBandCollapsible(R)){let M=A.isBandCollapsed(R),L=document.createElement("button");L.type="button",L.className="kanuni-datagrid-band-toggle",L.setAttribute("aria-expanded",String(!M));let P=M?I.expandDetails??"Expand":I.collapseDetails??"Collapse";L.setAttribute("aria-label",P),L.title=P,L.appendChild(js(M)),L.addEventListener("click",K=>{K.stopPropagation(),A.toggleBand(R)}),C.appendChild(L)}}let B=k("kanuni-datagrid-band-label","span");B.textContent=v.label,C.appendChild(B)}F.appendChild(C)}zt.appendChild(F)})}let xt=null,Zt=null;function Jt(o,d){Zt&&Zt!==o&&Zt.classList.remove("kanuni-datagrid-header-cell--drop-before","kanuni-datagrid-header-cell--drop-after"),Zt=o,o&&(o.classList.toggle("kanuni-datagrid-header-cell--drop-before",d==="before"),o.classList.toggle("kanuni-datagrid-header-cell--drop-after",d==="after"))}function un(){if(!xt)return;let o=A.getSelectedCount(),d=A.getVisibleCount(),f=d>0&&o>=d;xt.checked=f,xt.indeterminate=!f&&o>0}function Gu(){wa();let o=A.getSort(),d=new Map(o.map((p,y)=>[p.columnId,{direction:p.direction,order:y}]));if(we.textContent="",xt=null,s){let p=k("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-rownum-cell");p.setAttribute("role","columnheader"),p.style.width=`${gt}px`,p.style.flex="none",p.style.insetInlineStart="0px",we.appendChild(p)}if($t){let p=k("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-detail-toggle-cell");p.setAttribute("role","columnheader"),p.setAttribute("aria-label",I.detailsAria),p.style.width=`${ft}px`,p.style.flex="none",p.style.insetInlineStart=`${Mu}px`,we.appendChild(p)}if(Ut){let p=k("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-select-cell");p.setAttribute("role","columnheader"),p.style.width=`${Ot}px`,p.style.flex="none",p.style.insetInlineStart=`${Yr}px`;let y=document.createElement("input");y.type="checkbox",y.setAttribute("aria-label",I.selectAllRows),y.addEventListener("change",()=>{A.getSelectedCount()>0?A.clearSelection():A.selectAll()}),p.appendChild(y),we.appendChild(p),xt=y,un()}let f=!1;for(let p of ve){if(!p.pinned&&!f){if(se>0){let v=document.createElement("div");v.style.flex=`0 0 ${se}px`,we.appendChild(v)}f=!0}let y=ra&&p.def.sortable!==!1,b=d.get(p.id),x=k(`kanuni-datagrid-header-cell${y?" kanuni-datagrid-header-cell--sortable":""}${p.pinned?" kanuni-datagrid-header-cell--pinned":""}`);x.setAttribute("role","columnheader"),x.setAttribute("data-column-id",p.id),x.setAttribute("aria-sort",b?b.direction==="asc"?"ascending":"descending":"none"),x.style.width=`${p.width}px`,x.style.flex="none",p.pinned==="left"&&(x.style.insetInlineStart=`${p.inset}px`),p.pinned==="right"&&(x.style.insetInlineEnd=`${p.inset}px`);let F=k("kanuni-datagrid-header-label","span");if(p.def.renderHeader){let v=p.def.renderHeader({column:p.def});typeof v=="string"?F.textContent=v:F.appendChild(v)}else F.textContent=p.def.headerName??p.id;if(x.appendChild(F),b){let v=k("kanuni-datagrid-sort-indicator","span");if(v.setAttribute("aria-hidden","true"),v.textContent=b.direction==="asc"?"\u25B2":"\u25BC",x.appendChild(v),o.length>1){let C=k("kanuni-datagrid-sort-order","span");C.setAttribute("aria-hidden","true"),C.textContent=String(b.order+1),x.appendChild(C)}}if(y){let v=p.id;x.addEventListener("click",C=>{A.toggleSort(v,C.shiftKey)})}if(ae!==!1){let v=p.id;x.addEventListener("contextmenu",C=>{C.preventDefault(),Ta(v,{left:C.clientX,top:C.clientY})})}if(N&&p.def.filterable!==!1){let v=document.createElement("button");v.type="button";let C=A.getColumnFilter(p.id)!==null;v.className=`kanuni-datagrid-filter-button${C?" kanuni-datagrid-filter-button--active":""}${O==="always"?" kanuni-datagrid-filter-button--pinned":""}`,v.setAttribute("aria-haspopup","dialog"),v.setAttribute("aria-label",`${p.def.headerName??p.id} filter`),v.appendChild(_s()),v.addEventListener("click",B=>{B.stopPropagation(),Fa(p.id,v)}),x.appendChild(v)}if(S&&p.def.reorderable!==!1&&(x.draggable=!0,x.addEventListener("dragstart",v=>{v.dataTransfer?.setData("text/x-kanuni-column",p.id),v.dataTransfer&&(v.dataTransfer.effectAllowed="move")}),x.addEventListener("dragover",v=>{if(!v.dataTransfer?.types.includes("text/x-kanuni-column"))return;v.preventDefault();let C=x.getBoundingClientRect(),B=v.clientX<C.left+C.width/2;Jt(x,B?"before":"after")}),x.addEventListener("dragleave",v=>{let C=v.relatedTarget;(!C||!x.contains(C))&&Jt(null,"before")}),x.addEventListener("drop",v=>{Jt(null,"before");let C=v.dataTransfer?.getData("text/x-kanuni-column");if(!C||C===p.id)return;v.preventDefault();let B=x.getBoundingClientRect();if(v.clientX<B.left+B.width/2)A.moveColumn(C,p.id);else{let M=ve.findIndex(L=>L.id===p.id);A.moveColumn(C,ve[M+1]?.id)}}),x.addEventListener("dragend",()=>Jt(null,"before"))),D&&p.def.resizable!==!1){let v=k("kanuni-datagrid-resize-handle","span");v.setAttribute("data-resize-handle",p.id),v.setAttribute("role","presentation"),v.addEventListener("click",C=>C.stopPropagation()),v.addEventListener("dblclick",C=>{C.stopPropagation(),La(p.id)}),v.addEventListener("pointerdown",C=>{C.preventDefault(),C.stopPropagation();let B=C.clientX,R=p.width,M=getComputedStyle(x).direction==="rtl"?-1:1;x.draggable=!1,v.setPointerCapture(C.pointerId);let L=R,P=!1,K=ie=>{P=!0,L=R+(ie.clientX-B)*M,A.setColumnWidth(p.id,L,!1)},W=()=>{v.removeEventListener("pointermove",K),v.removeEventListener("pointerup",W),P&&A.setColumnWidth(p.id,L,!0),x.draggable=S&&p.def.reorderable!==!1};v.addEventListener("pointermove",K),v.addEventListener("pointerup",W)}),x.appendChild(v)}we.appendChild(x)}}let rn=null,Qt=null;function ya(o){if(o===rn)return;rn=o;let d=[];for(let f=0;f<o.length;f++)o[f].kind!=="data"&&d.push(f);Qt=d.length>0?d:null}function Ea(o){if(!Qt)return o+1;let d=0,f=Qt.length;for(;d<f;){let p=d+f>>1;Qt[p]<=o?d=p+1:f=p}return o+1-d}let Dt=[];function nn(o="data"){let d=k("kanuni-datagrid-row");if(d.setAttribute("role","row"),o==="panel"){let C=document.createElement("div");return C.setAttribute("role","gridcell"),C.setAttribute("aria-colindex","1"),d.appendChild(C),{kind:o,root:d,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,panelCell:C,epoch:Ye}}if(o==="group"){let C=k("kanuni-datagrid-group-cell");C.setAttribute("role","gridcell"),C.setAttribute("aria-colindex","1");let B=k("kanuni-datagrid-group-twisty","span");B.setAttribute("aria-hidden","true");let R=k("kanuni-datagrid-group-caption","span"),M=k("kanuni-datagrid-group-label","span"),L=k("kanuni-datagrid-group-count","span"),P=k("kanuni-datagrid-group-aggregates","span");return C.append(B,R,M,L,P),d.appendChild(C),d.addEventListener("click",()=>{let K=d.getAttribute("data-group-key");K!==null&&A.toggleGroup(K)}),{kind:o,root:d,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,group:{cell:C,twisty:B,caption:R,label:M,count:L,aggregates:P},epoch:Ye}}if(qt){let C=k("kanuni-datagrid-row-grip","span");C.setAttribute("aria-hidden","true"),C.title=I.dragToReorder??"Drag to reorder",C.innerHTML='<svg width="10" height="14" viewBox="0 0 10 14" focusable="false"><g fill="currentColor"><circle cx="3" cy="3" r="1.2"/><circle cx="7" cy="3" r="1.2"/><circle cx="3" cy="7" r="1.2"/><circle cx="7" cy="7" r="1.2"/><circle cx="3" cy="11" r="1.2"/><circle cx="7" cy="11" r="1.2"/></g></svg>',C.addEventListener("mouseenter",()=>{d.draggable=!0}),C.addEventListener("mouseleave",()=>{d.draggable=!1}),d.appendChild(C)}if(H)return{kind:o,root:d,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:Ye};let f=null;s&&(f=k("kanuni-datagrid-cell kanuni-datagrid-cell--number kanuni-datagrid-cell--pinned kanuni-datagrid-rownum-cell"),f.setAttribute("role","gridcell"),f.style.width=`${gt}px`,f.style.flex="none",f.style.insetInlineStart="0px",d.appendChild(f));let p=null;if($t){let C=k("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-detail-toggle-cell");C.setAttribute("role","gridcell"),C.style.width=`${ft}px`,C.style.flex="none",C.style.insetInlineStart=`${Mu}px`;let B=document.createElement("button");B.type="button",B.className="kanuni-datagrid-detail-toggle",B.tabIndex=-1,B.addEventListener("click",R=>{R.stopPropagation();let M=d.getAttribute("data-row-key");if(M===null)return;let L=A.getRows().find(P=>String(P.key)===M);L&&L.kind==="data"&&A.toggleDetail(L.key)}),B.addEventListener("mousedown",R=>R.stopPropagation()),C.appendChild(B),d.appendChild(C),p=B}let y=null;if(Ut){let C=k("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-select-cell");C.setAttribute("role","gridcell"),C.style.width=`${Ot}px`,C.style.flex="none",C.style.insetInlineStart=`${Yr}px`;let B=document.createElement("input");B.type="checkbox",B.tabIndex=-1;let R=()=>{let M=d.getAttribute("data-row-key");if(M===null)return;let L=A.getRows().find(P=>String(P.key)===M);L&&A.toggleRow(L.key)};C.addEventListener("mousedown",M=>M.stopPropagation()),C.addEventListener("click",M=>{M.target.tagName!=="INPUT"&&(M.stopPropagation(),R())}),B.addEventListener("change",R),B.addEventListener("click",M=>M.stopPropagation()),B.addEventListener("mousedown",M=>M.stopPropagation()),C.appendChild(B),d.appendChild(C),y=B}let b=[],x=null,F=!1;for(let C of ve){!C.pinned&&!F&&(x=document.createElement("div"),x.style.flex=`0 0 ${se}px`,d.appendChild(x),F=!0);let B=k(C.className);B.setAttribute("role","gridcell"),B.setAttribute("data-column-id",C.id),B.style.width=`${C.width}px`,B.style.flex="none",C.pinned==="left"&&(B.style.insetInlineStart=`${C.inset}px`),C.pinned==="right"&&(B.style.insetInlineEnd=`${C.inset}px`),d.appendChild(B),b.push({el:B,slot:C})}let v=document.createElement("div");return v.style.flex=`0 0 ${Lu}px`,d.appendChild(v),{kind:o,root:d,cells:b,rowNumberCell:f,selectInput:y,detailToggle:p,leadingSpacer:x,trailingSpacer:v,epoch:Ye}}let lt="";function Xt(o,d){if(lt===""||d===""){o.textContent=d;return}let f=d.toLowerCase(),p=f.indexOf(lt);if(p===-1){o.textContent=d;return}let y=[],b=0;for(;p!==-1;){p>b&&y.push(document.createTextNode(d.slice(b,p)));let x=document.createElement("mark");x.className="kanuni-datagrid-highlight",x.textContent=d.slice(p,p+lt.length),y.push(x),b=p+lt.length,p=f.indexOf(lt,b)}b<d.length&&y.push(document.createTextNode(d.slice(b))),o.replaceChildren(...y)}function Aa(o,d,f){let p=A.getColumnModel().getCellValue(f.data,d.id),y=d.def;if(y.renderCell){let x=y.renderCell({value:p,row:f.data,node:f,column:y});typeof x=="string"?o.textContent=x:o.replaceChildren(x);return}let b=Lt(y,p);if(b!==null){Xt(o,b);return}if(y.valueFormatter){let x=y.valueFormatter(p,f.data);Xt(o,typeof x=="string"?x:String(x??""));return}if(y.dateFormat&&y.dataType==="date"){Xt(o,Ti(p,y.dateFormat));return}Xt(o,p==null?"":String(p))}function an(o,d,f){let p=o.root;if(p.setAttribute("aria-rowindex",String(f+2)),p.setAttribute("data-row-key",String(d.key)),d.kind==="detail"||d.kind==="editform"){let C=o.panelCell,B=d.kind==="detail";p.className=`kanuni-datagrid-row ${B?"kanuni-datagrid-detail-row":"kanuni-datagrid-editform-row"}`,p.style.height=`${d.height}px`,B?(p.setAttribute("data-detail-for",String(d.parentKey)),p.removeAttribute("data-editform-for")):(p.setAttribute("data-editform-for",d.parentKey===null?"":String(d.parentKey)),p.removeAttribute("data-detail-for")),C.className=B?"kanuni-datagrid-detail-cell":"kanuni-datagrid-editform-cell";let R=`${d.kind}:${String(d.key)}`;if(p.getAttribute("data-panel-for")!==R){p.setAttribute("data-panel-for",R);let M=B?Kr?.(d.data):d.parentKey===null?void 0:ea?.(d.parentKey,d.data);C.textContent="",typeof M=="string"?C.textContent=M:M&&C.appendChild(M)}return}if(p.removeAttribute("data-panel-for"),p.removeAttribute("data-detail-for"),p.removeAttribute("data-editform-for"),d.kind==="filler"){p.style.display="none";return}p.style.display="",p.style.height=on?"":`${A.getRowHeight()}px`,p.classList.toggle("kanuni-datagrid-row--odd",a&&f%2===1),p.classList.toggle("kanuni-datagrid-row--selected",A.isRowSelected(d.key));let y=A.getFocus();if(p.classList.toggle("kanuni-datagrid-row--focused",j&&y!==null&&y.rowKey===d.key),o.leadingSpacer&&(o.leadingSpacer.style.flex=`0 0 ${se}px`),o.trailingSpacer&&(o.trailingSpacer.style.flex=`0 0 ${Lu}px`),qt){let C=je!==null&&String(je.key)===String(d.key);p.classList.toggle("kanuni-datagrid-row--drop-before",C&&je.side==="before"),p.classList.toggle("kanuni-datagrid-row--drop-after",C&&je.side==="after")}if(o.rowNumberCell&&(o.rowNumberCell.textContent=String(Ea(f))),o.selectInput&&(o.selectInput.checked=A.isRowSelected(d.key),o.selectInput.setAttribute("aria-label",I.selectRowAria.replace("{row}",String(d.key)))),o.detailToggle&&d.kind==="data"){let C=A.isDetailExpanded(d.key);o.detailToggle.textContent=C?"\u25BE":"\u25B8",o.detailToggle.setAttribute("aria-expanded",String(C)),o.detailToggle.setAttribute("aria-label",C?I.collapseDetails:I.expandDetails)}if(d.kind==="group"&&o.group){let C=d;p.className=`kanuni-datagrid-row kanuni-datagrid-group-row kanuni-datagrid-group-row--level-${C.level}`,p.setAttribute("aria-expanded",String(C.expanded)),p.setAttribute("aria-level",String(C.level+1)),p.setAttribute("data-group-key",String(C.key)),p.setAttribute("data-group-level",String(C.level)),o.group.cell.style.paddingLeft=C.level>0?`${8+C.level*18}px`:"",o.group.twisty.textContent=C.expanded?"\u25BE":"\u25B8";let B=A.getColumnModel().getDef(C.columnId),R=B?.headerName??C.columnId;o.group.caption.textContent=`${R}:`,o.group.label.textContent=Lt(B,C.value)??(C.label===""?I.filterBlank:C.label),o.group.count.textContent=`(${C.count})`,o.group.aggregates.textContent="";let M=C.aggregates??null;if(M)for(let L of A.getSummaryDefs()){let P=k("kanuni-datagrid-group-aggregate","span"),K=k("kanuni-datagrid-group-aggregate-label","span"),W=A.getColumnModel().getDef(L.columnId);K.textContent=`${Mr(L,Nu)} ${W?.headerName??L.columnId}:`,P.append(K,` ${Ir(L,M[tt(L.columnId,L.type)],W)}`),o.group.aggregates.appendChild(P)}return}if(d.kind!=="data"){for(let{el:C}of o.cells)C.textContent="";return}if(p.className=p.className.includes("group-row")?"kanuni-datagrid-row":p.className,H){let C=qt?1:0,B=H({row:d.data,node:d,rowIndex:f,selected:A.isRowSelected(d.key),focused:j&&y!==null&&y.rowKey===d.key});if(B instanceof Node&&p.childNodes.length===C+1&&p.childNodes[C]===B)return;for(;p.childNodes.length>C;)p.removeChild(p.lastChild);typeof B=="string"?p.appendChild(document.createTextNode(B)):B&&p.appendChild(B);return}let b=y!==null&&y.rowKey===d.key?y.columnId:null,x=d.tree,F=x?(()=>{let C=A.getColumnLayout();return(C.left[0]??C.center[0]??C.right[0])?.state.id??null})():null,v=A.hasCellSpans();for(let{el:C,slot:B}of o.cells){let R=Su||Bu?{node:d,columnId:B.id,rowIndex:f,columnIndex:B.visualIndex,value:A.getColumnModel().getCellValue(d.data,B.id)}:null,M=R&&Su?Su(R):void 0,L=!1;if(M!==void 0?M instanceof Node&&C.childNodes.length===1&&C.firstChild===M?L=!0:typeof M=="string"?C.textContent=M:C.replaceChildren(M):(Aa(C,B,d),x&&B.id===F&&xa(C,d,x)),v&&!L){let W=va(f,B.id);C.classList.toggle("kanuni-datagrid-cell--span",W?.kind==="draw"),C.classList.toggle("kanuni-datagrid-cell--span-covered",W?.kind==="covered");let ie=M!==void 0;if(W?.kind==="covered"&&b!==B.id&&!ie)C.replaceChildren();else if(W?.kind==="draw"){let ye=k("kanuni-datagrid-span-box");ye.style.height=`${W.height}px`,ye.append(...Array.from(C.childNodes)),C.appendChild(ye)}}else v||C.classList.remove("kanuni-datagrid-cell--span","kanuni-datagrid-cell--span-covered");if(We){let W=!!Ou(d.key,B.id,d.data);C.classList.toggle("kanuni-datagrid-cell--noted",W)}C.id=`${t.gridId}-cell-${String(d.key)}-${B.id}`,C.classList.toggle("kanuni-datagrid-cell--focused",b===B.id);let P=C.getAttribute("data-slot-classes");if(P)for(let W of P.split(" "))C.classList.remove(W);let K=R&&Bu?Bu(R):void 0;if(K){for(let W of K.split(" "))C.classList.add(W);C.setAttribute("data-slot-classes",K)}else P&&C.removeAttribute("data-slot-classes")}}let on=t.columns.some(o=>o.autoHeight);function ba(){if(!on)return;let o=A.getVirtualWindow(),d=A.getRows(),f=new Map(A.getMeasuredRowHeights()),p=!1;for(let y=o.rows.start;y<o.rows.end&&y<d.length;y++){let b=d[y];if(!b||b.kind!=="data")continue;let x=y-o.rows.start,F=Dt[x]?.root;if(!F)continue;let v=F.getBoundingClientRect().height;v>0&&f.get(b.key)!==v&&(f.set(b.key,v),p=!0)}p&&A.setMeasuredRowHeights(f)}let eu={start:0,end:0};function va(o,d){let f=A.getCellSpans(d);if(f.length===0)return null;let p=Bi(f,o,eu.start,eu.end);if(!p)return null;if(p.role==="covered")return{kind:"covered"};let y=A.getRowOffset(p.drawStart);return{kind:"draw",height:A.getRowOffset(p.drawEnd)+A.getRowHeightAt(p.drawEnd)-y}}function xa(o,d,f){let p=k(`kanuni-datagrid-tree-cell${f.ancestorOnly?" kanuni-datagrid-tree-cell--ancestor":""}`,"span");if(p.style.paddingInlineStart=`${f.depth*16}px`,f.hasChildren){let y=document.createElement("button");y.type="button",y.className="kanuni-datagrid-tree-toggle",y.setAttribute("data-tree-toggle",""),y.setAttribute("aria-expanded",String(f.expanded)),y.setAttribute("aria-label",f.expanded?I.collapseDetails:I.expandDetails),y.textContent=f.expanded?"\u25BE":"\u25B8",y.addEventListener("mousedown",b=>b.stopPropagation()),y.addEventListener("click",b=>{b.stopPropagation(),A.toggleTreeRow(d.key)}),p.appendChild(y)}else p.appendChild(k("kanuni-datagrid-tree-toggle kanuni-datagrid-tree-toggle--leaf","span"));p.append(...Array.from(o.childNodes)),o.appendChild(p)}let Ou=(o,d,f)=>We?We.get({rowKey:o,columnId:d,row:f})??null:null;function Vu(){let o=A.getVirtualWindow(),d=A.getRows(),f=vt?{...o,rows:{...o.rows,start:0,end:d.length,offsetY:0,totalHeight:0}}:o;ya(d),me.style.height=`${f.rows.totalHeight}px`,Q.style.transform=`translateY(${f.rows.offsetY}px)`,lt=ua?A.getSearchText().trim().toLowerCase():"";let p=Math.max(0,Math.min(f.rows.end,d.length)-f.rows.start);for(eu.start=f.rows.start,eu.end=Math.min(f.rows.end,d.length)-1;Dt.length>p;)Dt.pop().root.remove();for(let y=0;y<p;y++){let b=f.rows.start+y,x=d[b],F=x.kind==="data"?"data":x.kind==="group"?"group":x.kind==="detail"||x.kind==="editform"?"panel":"stub",v=Dt[y];if(!v||v.epoch!==Ye||v.kind!==F){let C=nn(F);v?Q.replaceChild(C.root,v.root):Q.appendChild(C.root),Dt[y]=C,v=C}an(v,x,b)}ba()}let ln=ki(ta??(A.isRemote()?200:0));function Ku(){if(!T)return;if(it.textContent="",be>0){let d=k("kanuni-datagrid-filter-cell kanuni-datagrid-filter-cell--pinned");d.style.width=`${be}px`,d.style.flex="none",d.style.insetInlineStart="0px",it.appendChild(d)}let o=!1;for(let d of ve){if(!d.pinned&&!o){if(se>0){let p=k("kanuni-datagrid-spacer");p.style.width=`${se}px`,p.style.flex="none",it.appendChild(p)}o=!0}let f=k(`kanuni-datagrid-filter-cell${d.pinned?" kanuni-datagrid-filter-cell--pinned":""}`);if(f.style.width=`${d.width}px`,f.style.flex="none",d.pinned==="left"&&(f.style.insetInlineStart=`${d.inset}px`),d.pinned==="right"&&(f.style.insetInlineEnd=`${d.inset}px`),d.def.filterable!==!1){let p=document.createElement("input");p.className="kanuni-datagrid-filter-input",p.setAttribute("aria-label",`${d.def.headerName??d.id} filter`);let y=()=>A.setColumnFilter(d.id,ji(d.id,p.value,d.def.dataType),xi);p.addEventListener("input",()=>ln.schedule(d.id,y));let b=()=>{ln.cancel(d.id),y()};p.addEventListener("keydown",x=>{x.key==="Enter"&&b()}),p.addEventListener("blur",b),f.appendChild(p)}it.appendChild(f)}}let sn=()=>{};function Da(){if(!zr)return;let o=document.createElement("input");o.type="search",o.className="kanuni-datagrid-toolbar-search",o.placeholder=I.toolbarSearch,o.setAttribute("aria-label",I.toolbarSearch);let d=null;o.addEventListener("input",()=>{d&&clearTimeout(d),d=setTimeout(()=>A.setSearchText(o.value),la)});let f=k("kanuni-datagrid-toolbar-spacer"),p=null;if(He){let C=document.createElement("button");C.type="button",C.textContent=I.toolbarColumns??"Columns",C.setAttribute("aria-haspopup","dialog"),C.addEventListener("click",()=>{let B=C.getBoundingClientRect();Cn({left:B.left,top:B.bottom+2})}),p=C}let y=Te&&aa,b=Te&&oa,x=document.createElement("button");x.type="button",x.className="kanuni-datagrid-toolbar-icon-button",x.setAttribute("aria-haspopup","menu"),x.setAttribute("aria-label",I.exportMenu),x.setAttribute("data-testid","dg-export-menu"),x.title=I.exportMenu,x.appendChild(qs());let F=null;x.addEventListener("click",()=>{if(F)return;let C=x.getBoundingClientRect();Ze({left:C.right-190,top:C.bottom+2},B=>{B.setAttribute("role","menu"),B.setAttribute("aria-label",I.exportMenu);let R=[{kind:"csv",label:I.exportCsv,testId:"dg-export-csv",on:!0},{kind:"excel",label:I.exportExcel,testId:"dg-export-excel",on:y},{kind:"excel-selected",label:I.exportExcelSelected,testId:"dg-export-excel-selected",on:y},{kind:"pdf",label:I.exportPdf,testId:"dg-export-pdf",on:b}];for(let M of R){if(!M.on)continue;let L=document.createElement("button");L.type="button",L.className="kanuni-datagrid-menu-item",L.setAttribute("role","menuitem"),L.setAttribute("data-testid",M.testId),L.textContent=M.label,M.kind==="excel-selected"&&A.getSelectedCount()===0&&(L.disabled=!0),L.addEventListener("click",()=>{F=M.kind,x.disabled=!0,de(),Zi(A,M.kind).then(P=>{F=null,x.disabled=!1,P.error&&sn(P.error)})}),B.appendChild(L)}},"kanuni-datagrid-filter-popup kanuni-datagrid-export-menu")});for(let C of ia??[])$e.append(C);$e.append(o,f),p&&$e.append(p),$e.append(x);for(let C of na??[])$e.append(C);let v=k("kanuni-datagrid-toolbar-error","span");v.setAttribute("role","alert"),v.style.display="none",$e.append(v),sn=C=>{v.textContent=C,v.style.display=""}}function dn(){if(!at.isConnected)return;let o=A.getPage(),d=A.getPageCount();at.textContent="";let f=(F,v,C,B)=>{let R=document.createElement("button");return R.type="button",R.textContent=F,R.setAttribute("aria-label",v),R.disabled=C,R.addEventListener("click",B),R},p=k("kanuni-datagrid-pager-buttons"),y=o<=0,b=o>=d-1;p.append(f("\xAB",I.pagerFirst??"First",y,()=>A.setPage(0)),f("\u2039",I.pagerPrevious??"Previous",y,()=>A.setPage(o-1)));let x=k("kanuni-datagrid-pager-current","span");x.textContent=`${o+1} / ${d}`,p.append(x,f("\u203A",I.pagerNext??"Next",b,()=>A.setPage(o+1)),f("\xBB",I.pagerLast??"Last",b,()=>A.setPage(d-1))),at.appendChild(p)}function Hu(){if(!Be)return;let o=A.getColumnLayout(),d=A.getSummaries(),f=new Map(A.getSummaryDefs().map(y=>[y.columnId,y]));if(ne.textContent="",ne.style.width=`${o.totalWidth+be}px`,be>0){let y=k("kanuni-datagrid-footer-cell kanuni-datagrid-footer-cell--pinned");y.style.width=`${be}px`,y.style.insetInlineStart="0px",ne.appendChild(y)}let p=!1;for(let y of ve){if(!y.pinned&&!p){if(se>0){let v=k("kanuni-datagrid-spacer");v.style.width=`${se}px`,ne.appendChild(v)}p=!0}let b=f.get(y.id),x=y.def.dataType==="number",F=k(`kanuni-datagrid-footer-cell${y.pinned?" kanuni-datagrid-footer-cell--pinned":""}${x?" kanuni-datagrid-footer-cell--number":""}${b?" kanuni-datagrid-footer-cell--active":""}`);if(F.setAttribute("role","gridcell"),F.setAttribute("data-column-id",y.id),F.setAttribute("data-summary-type",b?.type??""),F.style.width=`${y.width}px`,y.pinned==="left"&&(F.style.insetInlineStart=`${y.inset}px`),y.pinned==="right"&&(F.style.insetInlineEnd=`${y.inset}px`),b){F.title=`${Mr(b,Nu)} \u2014 ${y.def.headerName??y.id}`;let v=k("kanuni-datagrid-footer-value","span");v.textContent=Ir(b,d[tt(b.columnId,b.type)],y.def),F.appendChild(v)}else{let v=k("kanuni-datagrid-footer-hint","span");v.textContent=c?"\xB7":"",F.appendChild(v)}ne.appendChild(F)}}function zu(){let o=(d,f,p)=>{d.textContent="",f.forEach((y,b)=>{let x=nn("data");an(x,{kind:"data",key:`__pinned-${p}-${b}`,sourceIndex:-1,data:y},b),x.root.classList.remove("kanuni-datagrid-row--odd"),x.root.removeAttribute("aria-rowindex"),x.rowNumberCell&&(x.rowNumberCell.textContent=""),d.appendChild(x.root)})};g.length>0&&o(wt,g,"top"),w.length>0&&o(Ur,w,"bottom")}let st=null,Wu=null;function de(){Wu?.(),Wu=null,st?.remove(),st=null}function cn(o,d){let p=o.getBoundingClientRect();p.width===0&&p.height===0||(o.style.left=`${Math.max(8,Math.min(d.left,window.innerWidth-p.width-8))}px`,o.style.top=`${Math.max(8,Math.min(d.top,window.innerHeight-p.height-8))}px`)}function Ze(o,d,f="kanuni-datagrid-filter-popup"){de(),st=k(`${Pr(t)} kanuni-datagrid-portal`);let p=k(f);p.style.position="fixed",p.style.left=`${o.left}px`,p.style.top=`${o.top}px`,p.style.zIndex="1000",d(p),st.appendChild(p),document.body.appendChild(st),cn(p,o);let y=st,b=F=>{y.contains(F.target)||de()},x=F=>{F.key==="Escape"&&de()};document.addEventListener("pointerdown",b,!0),document.addEventListener("keydown",x,!0),Wu=()=>{document.removeEventListener("pointerdown",b,!0),document.removeEventListener("keydown",x,!0)}}let Je=25,hn=8,pn=new Map,mn=0;function Fa(o,d){let f=d.getBoundingClientRect(),p=++mn;Ze({left:f.left,top:f.bottom+2},y=>{let b=[],x=!0,F=new Set,v=!1,C=0,B="",R=[],M=null,L="",P=[],K=document.createElement("input");K.type="search",K.className="kanuni-datagrid-filter-search",K.placeholder=I.search,K.setAttribute("data-testid","dg-filter-search");let W=k("kanuni-datagrid-filter-actions"),ie=document.createElement("button");ie.type="button",ie.textContent=I.filterSelectAll,ie.addEventListener("click",()=>{v=!0,F=new Set(b.map(G=>G.label)),De()});let ye=document.createElement("button");ye.type="button",ye.textContent=I.clear,ye.addEventListener("click",()=>{v=!0,F=new Set,De()}),W.append(ie,ye);let re=k("kanuni-datagrid-filter-list");re.setAttribute("role","listbox"),re.setAttribute("aria-multiselectable","true");let ct=document.createElement("div");ct.style.position="relative";let xe=document.createElement("div");ct.appendChild(xe),re.appendChild(ct);let ou=()=>{let G=B.trim().toLowerCase();if(!G){R=b;return}M||(M=b.map(q=>q.label.toLowerCase())),R=L!==""&&G.includes(L)?P.filter(q=>q.label.toLowerCase().includes(G)):b.filter((q,X)=>M[X].includes(G)),L=G,P=R},De=()=>{if(re.setAttribute("aria-busy",String(x)),re.setAttribute("aria-setsize",String(R.length)),x){ct.style.height="",xe.textContent="";let Ce=k("kanuni-datagrid-filter-empty");Ce.textContent=I.filterLoading,xe.appendChild(Ce);return}if(R.length===0){ct.style.height="",xe.style.transform="",xe.textContent="";let Ce=k("kanuni-datagrid-filter-empty");Ce.textContent=I.filterNoMatch,xe.appendChild(Ce);return}let G=re.clientHeight||240,q=Math.max(0,Math.floor(re.scrollTop/Je)-hn),X=Math.ceil(G/Je)+hn*2,fe=Math.min(q,Math.max(0,R.length-1)),Wa=Math.min(R.length,fe+X);ct.style.height=`${R.length*Je}px`,xe.style.transform=`translateY(${fe*Je}px)`,xe.textContent="";for(let Ce=fe;Ce<Wa;Ce++){let ht=R[Ce],Fe=k("kanuni-datagrid-filter-item");Fe.setAttribute("role","option"),Fe.setAttribute("aria-selected",String(F.has(ht.label))),Fe.tabIndex=0,Fe.setAttribute("data-value",ht.label),Fe.setAttribute("data-index",String(Ce)),Ce===C&&Fe.classList.add("kanuni-datagrid-filter-item--active");let Bt=document.createElement("input");Bt.type="checkbox",Bt.readOnly=!0,Bt.checked=F.has(ht.label),Bt.tabIndex=-1;let Kn=document.createElement("span");Kn.textContent=ht.label===""?I.filterBlank:ht.label,Fe.append(Bt,Kn),Fe.addEventListener("click",()=>Gn(ht.label)),Fe.addEventListener("focus",()=>{C=Ce}),xe.appendChild(Fe)}},Gn=G=>{v=!0,F.has(G)?F.delete(G):F.add(G);for(let q of xe.querySelectorAll(".kanuni-datagrid-filter-item")){if(q.getAttribute("data-value")!==G)continue;q.setAttribute("aria-selected",String(F.has(G)));let X=q.querySelector("input");X&&(X.checked=F.has(G))}};re.addEventListener("scroll",()=>{pn.set(o,re.scrollTop),De()}),K.addEventListener("input",()=>{B=K.value,C=0,ou(),De()});let ur=G=>{if(R.length===0)return;C=Math.max(0,Math.min(R.length-1,G));let q=C*Je,X=re.clientHeight||240;q<re.scrollTop?re.scrollTop=q:q+Je>re.scrollTop+X&&(re.scrollTop=q+Je-X),De(),y.querySelector(`.kanuni-datagrid-filter-item[data-index="${C}"]`)?.focus()},On=()=>{if(x)return;let G;if(F.size===b.length)G=null;else{let q=F.has(""),X=b.filter(fe=>fe.label!==""&&F.has(fe.label));X.length===0?G=q?{columnId:o,operator:"isnull"}:null:q?G={logic:"or",nodes:[{columnId:o,operator:"in",value:X.map(fe=>fe.value)},{columnId:o,operator:"isnull"}]}:G={columnId:o,operator:"in",value:X.map(fe=>fe.value)}}A.setColumnFilter(o,G,Sr),de()};y.tabIndex=-1,y.addEventListener("keydown",G=>{let q=G.target===K;if(G.key==="Backspace"&&!q){G.preventDefault(),K.focus(),B=B.slice(0,-1),K.value=B,C=0,ou(),De();return}if(G.key==="ArrowDown"){G.preventDefault(),ur(q?0:C+1);return}if(G.key==="ArrowUp"){G.preventDefault(),ur(q?R.length-1:C-1);return}if(!q&&(G.key==="Home"||G.key==="End")){G.preventDefault(),ur(G.key==="Home"?0:R.length-1);return}if(G.key===" "&&!q){G.preventDefault();let X=R[C];X&&Gn(X.label);return}if(G.key==="Enter"){G.preventDefault(),On();return}!q&&G.key.length===1&&G.key!==" "&&!G.ctrlKey&&!G.metaKey&&!G.altKey&&(G.preventDefault(),K.focus(),B+=G.key,K.value=B,C=0,ou(),De())});let Vn=k("kanuni-datagrid-filter-footer"),lu=document.createElement("button");lu.type="button",lu.textContent=I.cancel,lu.addEventListener("click",()=>de());let Pe=document.createElement("button");Pe.type="button",Pe.className="kanuni-datagrid-filter-primary",Pe.setAttribute("data-testid","dg-filter-apply"),Pe.textContent=I.apply,Pe.disabled=!0,Pe.addEventListener("click",On),Vn.append(lu,Pe),y.append(K,W,re,Vn),De(),queueMicrotask(()=>{K.isConnected&&K.focus()}),A.getDistinctValueSetAsync(o).then(G=>{if(mn!==p||!y.isConnected)return;b=G.entries,M=null,L="",x=!1,Pe.disabled=!1;let q=Si(A.getColumnFilter(o,Sr)??A.getColumnFilter(o,It),b);q?(v=!0,F=new Set(q)):v||(F=new Set(b.map(fe=>fe.label))),ou();let X=pn.get(o);De(),X&&(re.scrollTop=X,De())})})}function Uu(o={}){let d=A.getClipboardText(o);A.notifyClipboardGesture("copy",d?d.split(`
13
13
  `).length:0,()=>!d||!navigator.clipboard?.writeText?!1:(navigator.clipboard.writeText(d).catch(()=>{}),!0))}function gn(o,d,f){let p=k("kanuni-datagrid-menu-row"),y=document.createElement("button");y.type="button",y.className="kanuni-datagrid-menu-item";let b=k("kanuni-datagrid-menu-label","span");if(b.textContent=o,y.appendChild(b),d){let x=k("kanuni-datagrid-menu-shortcut","span");x.textContent=d,y.appendChild(x)}return y.addEventListener("click",()=>{f(),de()}),p.appendChild(y),p}let Sa=/Mac|iPhone|iPad|iPod/.test(navigator.platform??"")?"\u2318":"Ctrl+";function $u(o,d,f){let p=null,y=()=>{p?.remove(),p=null};d.forEach((b,x)=>{if(b.separator){let R=k("kanuni-datagrid-menu-separator");R.setAttribute("role","separator"),o.appendChild(R);return}let F=k("kanuni-datagrid-menu-row"),v=document.createElement("button");if(v.type="button",v.className="kanuni-datagrid-menu-item",v.setAttribute("role","menuitem"),v.setAttribute("data-item-index",String(x)),b.disabled&&(v.disabled=!0),b.icon!==void 0){let R=k("kanuni-datagrid-menu-icon","span");typeof b.icon=="string"?R.textContent=b.icon:R.appendChild(b.icon),v.appendChild(R)}let C=k("kanuni-datagrid-menu-label","span");if(C.textContent=b.label??"",v.appendChild(C),b.shortcut){let R=k("kanuni-datagrid-menu-shortcut","span");R.textContent=b.shortcut,v.appendChild(R)}let B=b.items??[];if(B.length>0){let R=k("kanuni-datagrid-menu-caret","span");R.textContent="\u203A",v.appendChild(R),v.setAttribute("aria-haspopup","menu"),v.setAttribute("aria-expanded","false");let M=()=>{y();let L=k("kanuni-datagrid-context-menu kanuni-datagrid-submenu");L.setAttribute("role","menu");let P=v.getBoundingClientRect();L.style.left=`${P.right}px`,L.style.top=`${Math.max(0,P.top-4)}px`;for(let K of B){if(K.separator){let ye=k("kanuni-datagrid-menu-separator");ye.setAttribute("role","separator"),L.appendChild(ye);continue}let W=document.createElement("button");W.type="button",W.className="kanuni-datagrid-menu-item",W.setAttribute("role","menuitem"),K.disabled&&(W.disabled=!0);let ie=k("kanuni-datagrid-menu-label","span");ie.textContent=K.label??"",W.appendChild(ie),W.addEventListener("click",()=>{K.onSelect?.(f),de()}),L.appendChild(W)}o.parentElement?.appendChild(L),cn(L,{left:P.right,top:Math.max(0,P.top-4)}),p=L,v.setAttribute("aria-expanded","true")};v.addEventListener("mouseenter",M),v.addEventListener("click",M)}else v.addEventListener("mouseenter",y),v.addEventListener("click",()=>{b.onSelect?.(f),de()});F.appendChild(v),o.appendChild(F)})}let fn=o=>{let f=o.target.closest(".kanuni-datagrid-row");if(!f||f.classList.contains("kanuni-datagrid-group-row"))return;let p=Ie(o);if(p?.columnId&&A.notifyCell("cellContextMenu",p.node,p.rowIndex,p.columnId),!he&&!Ae||!p||p.node.kind!=="data")return;o.preventDefault(),A.isRowSelected(p.node.key)||A.handleRowClick(p.node.key,{}),p.columnId&&A.focusCell(p.node.key,p.columnId);let y={row:p.node.data,node:p.node,rowIndex:p.rowIndex,columnId:p.columnId,selectedKeys:A.getSelectedKeys()},b=(typeof he=="function"?he(y):he)??[],x=[...b,...Ba(y,b.length>0)];x.length===0&&!Ae||Ze({left:o.clientX,top:o.clientY},F=>{if(F.setAttribute("role","menu"),$u(F,x,y),Ae){if(x.length>0){let v=k("kanuni-datagrid-menu-separator");v.setAttribute("role","separator"),F.appendChild(v)}F.append(gn(I.menuCopy??"Copy",`${Sa}C`,()=>Uu()),gn(I.menuCopyWithHeaders??"Copy with headers",null,()=>Uu({includeHeaders:!0})))}},"kanuni-datagrid-context-menu")};function Ba(o,d){if(!We?.onChange||We.menu===!1)return[];let f=o.columnId;if(!f)return[];let p=o.node.key,y=Ou(p,f,o.row),b=[];return d&&b.push({separator:!0,id:"__note-sep"}),b.push({id:"__note-edit",label:y?I.editNote:I.addNote,onSelect:()=>ka(p,f,o.row,y??"")}),y&&b.push({id:"__note-delete",label:I.deleteNote,onSelect:()=>We.onChange?.({rowKey:p,columnId:f,row:o.row,text:null})}),b}function ka(o,d,f,p){let b=($.querySelector(`[data-row-key="${CSS.escape(String(o))}"] [data-column-id="${CSS.escape(d)}"]`)??$).getBoundingClientRect();queueMicrotask(()=>{Ze({left:b.left,top:b.bottom+2},x=>{x.setAttribute("aria-label",I.noteEditorAria);let F=document.createElement("textarea");F.className="kanuni-datagrid-note-input",F.rows=4,F.value=p,F.setAttribute("aria-label",I.noteEditorAria),F.placeholder=I.notePlaceholder,F.setAttribute("data-testid","dg-note-input");let v=()=>{let M=F.value.trim();de(),We?.onChange?.({rowKey:o,columnId:d,row:f,text:M===""?null:M})};F.addEventListener("keydown",M=>{M.key==="Enter"&&(M.ctrlKey||M.metaKey)&&(M.preventDefault(),v()),M.key==="Escape"&&(M.preventDefault(),de())});let C=k("kanuni-datagrid-note-actions"),B=document.createElement("button");B.type="button",B.className="kanuni-datagrid-note-cancel",B.textContent=I.cancel,B.addEventListener("click",()=>de());let R=document.createElement("button");R.type="button",R.className="kanuni-datagrid-note-save",R.setAttribute("data-testid","dg-note-save"),R.textContent=I.save,R.addEventListener("click",v),C.append(B,R),x.append(F,C),queueMicrotask(()=>{F.focus(),F.select()})},"kanuni-datagrid-filter-popup kanuni-datagrid-note-editor")})}function Ra(o){_e!==o&&(_e=o,o?($.insertBefore(le,U),ju()):le.remove())}function Na(o){if(Be!==o){if(Be=o,o){if(Ue){let d=g.length>0?wt:me;oe.insertBefore(ne,d)}else oe.append(ne);Hu()}else ne.remove();wt.style.setProperty("--dg-pinned-gap",String(Tu+(Be&&Ue?1:0)))}}function qu(o){let d=xu($,o);d!==null&&A.setColumnWidth(o,d)}function Ta(o,d){let f=A.getColumnModel().getDef(o),p={columnId:o,headerName:f?.headerName??o},y=vu(p,{controller:A,t:I,groupPanelVisible:_e,footerVisible:Be,onToggleGroupPanel:()=>Ra(!_e),onToggleFooter:()=>Na(!Be),onOpenFieldChooser:()=>Cn(d),onBestFit:qu,onBestFitAll:()=>{for(let x of A.getColumnStates())x.visible&&qu(x.id)},maxGroupLevels:Te?Number.POSITIVE_INFINITY:1}),b=typeof ae=="function"?ae(p,y):y;b.length!==0&&Ze(d,x=>{x.setAttribute("role","menu"),$u(x,b,p)},"kanuni-datagrid-context-menu")}function Ma(o,d){let f=A.getColumnModel().getDef(o),p=A.getColumnSummary(o),y={columnId:o,headerName:f?.headerName??f?.field??o},b=[{id:"none",label:I.noTotal,disabled:p===null,onSelect:()=>A.setColumnSummary(o,null)},{id:"sep",separator:!0},..._i(f?.dataType).map(x=>({id:x,label:Nu[x],disabled:p?.type===x,onSelect:()=>A.setColumnSummary(o,x)}))];Ze(d,x=>{x.setAttribute("role","menu"),$u(x,b,y)},"kanuni-datagrid-context-menu")}function Cn(o){Ze(o,d=>{let f=k("kanuni-datagrid-filter-list");for(let p of A.getColumnStates()){let y=document.createElement("label");y.className="kanuni-datagrid-filter-item";let b=document.createElement("input");b.type="checkbox",b.checked=p.visible,b.addEventListener("change",()=>{A.setColumnVisible(p.id,b.checked)});let x=document.createElement("span"),F=A.getColumnModel().getDef(p.id);x.textContent=F?.headerName??p.id,y.append(b,x),f.appendChild(y)}d.appendChild(f)},"kanuni-datagrid-filter-popup kanuni-datagrid-column-chooser")}let Qe=null,_u=null,tu=o=>{le.classList.toggle("kanuni-datagrid-group-panel--over",o)};function wn(o,d,f){let p=A.getGroupLevels();if(o===d)return;let y=p.filter(F=>F!==o),b=y.indexOf(d);if(b<0)return;let x=f==="before"?b:b+1;_u=o,A.groupBy([...y.slice(0,x),o,...y.slice(x)])}function yn(o,d){let f=A.getGroupLevels(),p=f.indexOf(o),y=p+d;p<0||y<0||y>=f.length||wn(o,f[y],d===-1?"before":"after")}function En(o,d){if(!o)return;let f=A.getGroupLevels();if(f.includes(o))return;let p=Te?Number.POSITIVE_INFINITY:1;if(f.length>=p){A.groupBy([...f.slice(0,p-1),o]);return}let y=d??f.length;A.groupBy([...f.slice(0,y),o,...f.slice(y)])}function ju(){if(!_e)return;le.textContent="";let o=A.getGroupLevels();if(o.length===0){let v=k("kanuni-datagrid-group-panel-hint","span");v.textContent=I.groupPanelHint??"Drag a column header here to group by it",le.appendChild(v);return}let d=v=>A.getColumnModel().getDef(v)?.headerName??v,f=k("kanuni-datagrid-group-levels"),p=(v,C)=>v<C.top+C.height/2?"before":"after",y=(v,C)=>{for(let B of le.querySelectorAll(".kanuni-datagrid-group-level"))B.classList.remove("kanuni-datagrid-group-level--drop-before","kanuni-datagrid-group-level--drop-after");v&&C&&v.classList.add(`kanuni-datagrid-group-level--drop-${C}`)};o.forEach((v,C)=>{let B=k("kanuni-datagrid-group-level");B.style.setProperty("--dg-group-level",String(C)),B.setAttribute("data-group-level",String(C));let R=k("kanuni-datagrid-group-chip");if(R.setAttribute("role","button"),R.tabIndex=0,o.length>1&&(R.draggable=!0),R.setAttribute("aria-label",`${mt(I.groupLevelAria,{n:C+1})}: ${d(v)}`),R.addEventListener("dragstart",P=>{Qe=v,P.dataTransfer&&(P.dataTransfer.effectAllowed="move",P.dataTransfer.setData("text/x-kanuni-column",v))}),R.addEventListener("dragend",()=>{Qe=null,y(null,null)}),R.addEventListener("keydown",P=>{let K=P.ctrlKey||P.metaKey;K&&(P.key==="ArrowUp"||P.key==="ArrowLeft")?(P.preventDefault(),yn(v,-1)):K&&(P.key==="ArrowDown"||P.key==="ArrowRight")?(P.preventDefault(),yn(v,1)):(P.key==="Delete"||P.key==="Backspace")&&(P.preventDefault(),A.groupBy(o.filter(W=>W!==v)))}),B.addEventListener("dragover",P=>{!Qe&&!(P.dataTransfer?.types.includes("text/x-kanuni-column")??!1)||(P.preventDefault(),P.stopPropagation(),y(B,p(P.clientY,B.getBoundingClientRect())))}),B.addEventListener("drop",P=>{P.preventDefault(),P.stopPropagation();let K=p(P.clientY,B.getBoundingClientRect());y(null,null),tu(!1);let W=Qe;if(Qe=null,W){wn(W,v,K);return}let ie=P.dataTransfer?.getData("text/x-kanuni-column");ie&&En(ie,K==="before"?C:C+1)}),o.length>1){let P=k("kanuni-datagrid-group-chip-level","span");P.textContent=String(C+1),R.appendChild(P)}let M=document.createElement("span");M.textContent=d(v);let L=document.createElement("button");L.type="button",L.setAttribute("aria-label",mt(I.groupRemoveAria,{column:d(v)})),L.textContent="\xD7",L.addEventListener("click",()=>{A.groupBy(o.filter(P=>P!==v))}),L.draggable=!1,R.append(M,L),B.appendChild(R),f.appendChild(B),_u===v&&(_u=null,queueMicrotask(()=>R.focus()))}),le.appendChild(f);let b=k("kanuni-datagrid-group-panel-actions"),x=document.createElement("button");x.type="button",x.textContent="Expand all",x.addEventListener("click",()=>A.expandAllGroups());let F=document.createElement("button");F.type="button",F.textContent="Collapse all",F.addEventListener("click",()=>A.collapseAllGroups()),b.append(x,F),le.appendChild(b)}if(_e){let o=d=>d.dataTransfer?.types.includes("text/x-kanuni-column")??!1;le.addEventListener("dragover",d=>{o(d)&&(d.preventDefault(),tu(!0))}),le.addEventListener("dragleave",d=>{let f=d.relatedTarget;f&&le.contains(f)||tu(!1)}),le.addEventListener("drop",d=>{tu(!1);let f=d.dataTransfer?.getData("text/x-kanuni-column");if(f){if(d.preventDefault(),Qe){Qe=null;return}En(f)}})}let An="";function bn(){if(!Y)return;let o=[mt(I.announceRows,{n:A.getVisibleCount()})],d=A.getSort();if(d.length>0){let y=d.map(b=>{let x=A.getColumnModel().getDef(b.columnId),F=x?.headerName??x?.field??b.columnId,v=b.direction==="desc"?I.announceDescending:I.announceAscending;return`${F} ${v}`}).join(", ");o.push(mt(I.announceSortedBy,{columns:y}))}let f=A.getSelectedCount();f>0&&o.push(mt(I.announceSelected,{n:f}));let p=o.join(", ");p!==An&&(An=p,Et.textContent=p)}function vn(){if(!z)return;qe.textContent="";let o=Gi(A.getEffectiveFilter(),A.getColumnModel(),{..._,labels:{...kr(I),..._?.labels}});if(!o&&z!=="always"){qe.style.display="none";return}qe.style.display="";let d=A.isFilterEnabled();qe.className=`kanuni-datagrid-filter-panel${d?"":" kanuni-datagrid-filter-panel--suspended"}`;let f=document.createElement("button");f.type="button",f.className="kanuni-datagrid-filter-panel-clear",f.title=I.filterRemove,f.setAttribute("aria-label",I.filterRemove),f.setAttribute("data-testid","dg-filter-panel-clear"),f.disabled=o===null,f.textContent="\xD7",f.addEventListener("click",()=>{A.setFilter(null),A.clearColumnFilters(),A.setFilterEnabled(!0)});let p=document.createElement("input");p.type="checkbox",p.className="kanuni-datagrid-filter-panel-toggle",p.checked=d,p.disabled=o===null,p.title=I.filterToggle,p.setAttribute("aria-label",I.filterToggle),p.setAttribute("data-testid","dg-filter-panel-toggle"),p.addEventListener("change",()=>A.setFilterEnabled(p.checked));let y=k("kanuni-datagrid-filter-panel-text","span");if(y.setAttribute("data-testid","dg-filter-panel-text"),y.textContent=o??I.filterNone,o&&(y.title=o),qe.append(f,p,y),Z){let b=document.createElement("button");b.type="button",b.className="kanuni-datagrid-filter-panel-builder",b.title=I.filterEditBuilder,b.setAttribute("aria-label",I.filterEditBuilder),b.setAttribute("data-testid","dg-filter-panel-builder"),b.textContent="\u25BE",b.addEventListener("click",Z),qe.appendChild(b)}}let Yu=new Set,Ia=A.events.on("cellsFlashed",({rowKeys:o,columnIds:d,duration:f})=>{let p=o.length?o.map(F=>`[data-row-key="${CSS.escape(String(F))}"]`).join(","):".kanuni-datagrid-row",y=d.length?d.map(F=>`[data-column-id="${CSS.escape(F)}"]`).join(","):"[data-column-id]",b=[];Q.querySelectorAll(p).forEach(F=>{F.querySelectorAll(y).forEach(v=>b.push(v))});for(let F of b)F.classList.remove("kanuni-datagrid-cell--flash");$.offsetWidth;for(let F of b)F.classList.add("kanuni-datagrid-cell--flash");let x=setTimeout(()=>{for(let F of b)F.classList.remove("kanuni-datagrid-cell--flash");Yu.delete(x)},f);Yu.add(x)});function Ie(o){let d=o.target,f=d.closest(".kanuni-datagrid-row");if(!f||!Q.contains(f))return null;let p=f.getAttribute("data-row-key");if(p===null)return null;let y=A.getRows(),b=y.findIndex(F=>String(F.key)===p);if(b===-1)return null;let x=d.closest(".kanuni-datagrid-cell")?.getAttribute("data-column-id")??null;return{node:y[b],rowIndex:b,columnId:x}}let xn=o=>{let d=Ie(o);d&&(Fu?.(d.node),A.notifyRow("rowClicked",d.node,d.rowIndex),d.columnId&&A.notifyCell("cellClicked",d.node,d.rowIndex,d.columnId))},Dn=o=>{let d=Ie(o);if(d){if(Vr){let f=tr(d);f&&Vr(f)}Ct?.(d.node),A.notifyRow("rowDoubleClicked",d.node,d.rowIndex),d.columnId&&A.notifyCell("cellDoubleClicked",d.node,d.rowIndex,d.columnId)}};Q.addEventListener("click",xn),Q.addEventListener("dblclick",Dn);function La(o){let d=0,f=we.querySelector(`[data-column-id="${CSS.escape(o)}"]`);f&&(d=f.scrollWidth),Q.querySelectorAll(`[data-column-id="${CSS.escape(o)}"]`).forEach(p=>{p.scrollWidth>d&&(d=p.scrollWidth)}),d>0&&A.setColumnWidth(o,d+12,!0)}function Pa(){if(N)for(let o of we.querySelectorAll(".kanuni-datagrid-filter-button")){let d=o.parentElement?.getAttribute("data-column-id");d&&o.classList.toggle("kanuni-datagrid-filter-button--active",A.getColumnFilter(d)!==null)}}let Zu=!1,Fn=!1,dt=null;function uu(){dt!==null&&(clearTimeout(dt),dt=null)}function ru(o){yt.style.display=o?"":"none"}function nu(){let o=A.getOverlay();if(Wt.style.display=o==="noRows"?"":"none",Ru===!1){uu(),ru(!1);return}if(!(o==="loading"&&(Zu||!Fn))){uu(),ru(!1);return}if(Zu||Wr<=0){uu(),ru(!0);return}dt!==null||yt.style.display===""||(dt=setTimeout(()=>{dt=null,ge||ru(!0)},Wr))}let Sn=!1,Ju=!1,Qu=!1,Xu=!1,ge=!1;function Ga(){if(Ju=!1,!ge){if(Qu)Qu=!1,Xu&&(Xu=!1,Ye++),Pu(),Gu(),Ku(),zu();else{let o=se;Pu(),se!==o&&(Ye++,Gu(),Ku(),zu())}Vu(),un(),Hu(),dn(),Pa(),ju(),vn(),bn(),nu()}}function er(o){ge||(o&&(Qu=!0),!Ju&&(Ju=!0,queueMicrotask(Ga)))}let Oa=[...nt?[A.events.on("focusedRowChanged",o=>nt({rowKey:o.rowKey,row:o.row}))]:[],...Ks.map(o=>A.events.on(o,()=>er(!0))),...Hs.map(o=>A.events.on(o,()=>{Xu=!0})),...zs.map(o=>A.events.on(o,()=>er(!1))),A.events.on("overlayChanged",o=>{Zu=o.manual===!0&&o.overlay==="loading",ge||nu()}),A.events.on("busyChanged",o=>{Fn=o.background===!0,ge||nu()}),A.events.on("paginationChanged",()=>{ge||er(!1)}),A.events.on("scrollRequested",o=>{if(ge)return;o.scrollTop!==void 0&&(U.scrollTop=o.scrollTop),o.scrollLeft!==void 0&&(U.scrollLeft=o.scrollLeft),A.setScroll(U.scrollTop,Math.abs(U.scrollLeft));let d=o.scrollTop;d===void 0||Math.abs(U.scrollTop-d)<=1||setTimeout(()=>{ge||Math.abs(U.scrollTop-d)<=1||(U.scrollTop=d,A.setScroll(U.scrollTop,Math.abs(U.scrollLeft)))},0)}),...V==="fitGrid"?[A.events.on("gridSizeChanged",()=>A.sizeColumnsToFit())]:[],...V==="fitCells"?[A.events.on("firstDataRendered",()=>{ge||Sn||(Sn=!0,queueMicrotask(()=>{if(!ge)for(let o of A.getColumnStates())o.visible&&qu(o.id)}))})]:[]];V==="fitGrid"&&A.sizeColumnsToFit();function tr(o){if(!o.columnId||o.node.kind!=="data")return null;let d=ve.find(f=>f.id===o.columnId);return d?{node:o.node,columnId:o.columnId,rowIndex:o.rowIndex,columnIndex:d.visualIndex,value:A.getColumnModel().getCellValue(o.node.data,d.id)}:null}let Bn=o=>{let d=o.target;if(Or){let F=Ie(o),v=F?tr(F):null;v&&Or(v,o)}let f=d.closest(".kanuni-datagrid-row");if(!f||f.classList.contains("kanuni-datagrid-group-row"))return;let p=f.getAttribute("data-row-key");if(p===null)return;let y=A.getRows().find(F=>String(F.key)===p);if(!y||y.kind!=="data")return;A.handleRowClick(y.key,{ctrlKey:o.ctrlKey||Ut&&!o.shiftKey,metaKey:o.metaKey,shiftKey:o.shiftKey});let b=d.closest(".kanuni-datagrid-cell"),x=b?ve.find(F=>b.id.endsWith(`-${F.id}`))?.id:void 0;x&&A.focusCell(y.key,x)},kn=o=>{if(!Ht)return;let f=o.target.closest(".kanuni-datagrid-cell");if(!f||!Q.contains(f)||o.relatedTarget?.closest?.(".kanuni-datagrid-cell")===f)return;let y=Ie(o),b=y?tr(y):null;b&&Ht(b,o)};Q.addEventListener("mousedown",Bn),Q.addEventListener("contextmenu",fn),Ht&&Q.addEventListener("mouseover",kn),qt&&(me.addEventListener("dragstart",pa),me.addEventListener("dragover",ma),me.addEventListener("drop",ga),me.addEventListener("dragend",fa),me.addEventListener("dragleave",Ca)),$.tabIndex=0;let Rn=o=>{let d=o.target;if(d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.isContentEditable)return;let f=Ui({key:o.key,ctrlKey:o.ctrlKey,metaKey:o.metaKey,shiftKey:o.shiftKey,altKey:o.altKey});if(!f)return;if(f.type==="copy"){Uu();return}if(f.type==="activate"){if(Ct){let b=A.getFocus(),x=b?A.getRows().find(F=>F.key===b.rowKey):void 0;x&&Ct(x)}f.preventDefault&&o.preventDefault();return}A.executeCommand(f),f.preventDefault&&o.preventDefault();let p=A.getFocusIndices();if(p){let x=A.getColumnLayout().center.findIndex(v=>v.state.id===A.getFocus()?.columnId),F=A.ensureVisible(p.rowIndex,x===-1?void 0:x);F&&(F.scrollTop!==void 0&&(U.scrollTop=F.scrollTop),F.scrollLeft!==void 0&&(U.scrollLeft=F.scrollLeft),A.setScroll(U.scrollTop,Math.abs(U.scrollLeft)))}let y=A.getFocus();$.setAttribute("aria-activedescendant",y?`${t.gridId}-cell-${String(y.rowKey)}-${y.columnId}`:"")};$.addEventListener("keydown",Rn);let Va=Hr?Oi(A,Hr):null,Ka=typeof ku=="object"?ku.delay??400:400,Ft=null,iu=null;function St(){iu&&clearTimeout(iu),iu=null,Ft?.remove(),Ft=null}let Ha=o=>o.scrollWidth>o.clientWidth+1||o.scrollHeight>o.clientHeight+1;function za(o){let f=o.closest(".kanuni-datagrid-row")?.getAttribute("data-row-key"),p=ve.find(F=>o.id.endsWith(`-${F.id}`));if(!f||!p)return null;let y=A.getRows().find(F=>String(F.key)===f);if(!y||y.kind!=="data")return null;let b=p.def,x=Ou(y.key,p.id,y.data);if(x)return x;if(typeof b.tooltip=="function")return b.tooltip({value:A.getColumnModel().getCellValue(y.data,p.id),row:y.data,node:y,column:b})??null;if(typeof b.tooltip=="string")return b.tooltip;if(b.tooltipField){let F=y.data[b.tooltipField];return F==null?null:String(F)}return Ha(o)?o.textContent??null:null}let Nn=o=>{if(ku===!1)return;St();let d=o.target.closest(".kanuni-datagrid-cell");!d||!Q.contains(d)||(iu=setTimeout(()=>{let f=za(d);if(!f)return;let p=d.getBoundingClientRect();Ft=k(`${Pr(t)} kanuni-datagrid-portal`);let y=k("kanuni-datagrid-tooltip");y.setAttribute("role","tooltip"),y.textContent=f,y.style.position="fixed",y.style.left=`${p.left}px`,y.style.top=`${p.bottom+4}px`,y.style.zIndex="1001",Ft.appendChild(y),document.body.appendChild(Ft)},Ka))},Tn=()=>St();$.addEventListener("pointerover",Nn),$.addEventListener("pointerout",Tn),U.addEventListener("scroll",St,{passive:!0});let Mn=()=>{if(A.setScroll(U.scrollTop,Math.abs(U.scrollLeft)),Le)for(let o of In())o.scroller.scrollLeft!==U.scrollLeft&&(o.scroller.scrollLeft=U.scrollLeft)};U.addEventListener("scroll",Mn,{passive:!0});let Le=null,In=()=>{if(!ee||!Le)return[];let o=Gt.get(ee);return o?[...o].filter(d=>d!==Le):[]},Ln=null;if(ee){Le={controller:A,scroller:U};let o=Gt.get(ee)??new Set;o.add(Le),Gt.set(ee,o),Ln=A.events.on("columnStateChanged",()=>{if(Lr.has(ee))return;let d=In();if(d.length===0)return;let f=A.getColumnStates();Lr.add(ee);try{for(let p of d)p.controller.applyColumnStates(f)}finally{Lr.delete(ee)}})}let Pn=()=>{A.setViewportSize(U.clientWidth,U.clientHeight),U.style.setProperty("--dg-viewport-width",`${U.clientWidth}px`);let o=me.getBoundingClientRect(),d=oe.getBoundingClientRect();A.setChromeOffsets(o.top-d.top,d.bottom-o.bottom),Yi(U,A)};Pn();let au=null;return typeof ResizeObserver<"u"&&(au=new ResizeObserver(Pn),au.observe(U),au.observe(oe)),Pu(),Gu(),Ku(),Da(),zu(),Vu(),Hu(),dn(),ju(),vn(),bn(),nu(),bt?.always&&Iu(!0),{controller:A,element:$,setData:o=>A.setData(o),setColumns:o=>A.setColumns(o),destroy:()=>{if(!ge){if(ge=!0,Oa.forEach(o=>o()),au?.disconnect(),tn?.(),vt&&(vt=!1,rt--,rt<=0&&(rt=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),Ln?.(),ee&&Le){let o=Gt.get(ee);o?.delete(Le),o&&o.size===0&&Gt.delete(ee),Le=null}U.removeEventListener("scroll",Mn),Q.removeEventListener("mousedown",Bn),Q.removeEventListener("contextmenu",fn),Ht&&Q.removeEventListener("mouseover",kn),Q.removeEventListener("click",xn),Q.removeEventListener("dblclick",Dn),Ia(),uu();for(let o of Yu)clearTimeout(o);$.removeEventListener("keydown",Rn),$.removeEventListener("pointerover",Nn),$.removeEventListener("pointerout",Tn),U.removeEventListener("scroll",St),St(),Va?.(),de(),A.dispose(),$.remove()}}}}return Za(Zs);})();