@kanunilabs/datagrid 1.1.1 → 1.2.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.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var datagridCore=require('@kanunilabs/datagrid-core');function cn(k,g){let{controller:h,maxGroupLevels:A,t:v}=g,R=k.columnId,H=h.getColumnModel().getDef(R),$=h.getSort(),re=$.find(N=>N.columnId===R),ie=h.getGroupLevels(),$e=ie.includes(R),Ze=H?.sortable!==false,ae=h.getColumnStates().find(N=>N.id===R)?.pinned??null,Ee=H?.groupable!==false,Re=[{id:"sort-asc",label:v.sortAsc,disabled:!Ze||re?.direction==="asc",onSelect:()=>h.setSort([{columnId:R,direction:"asc"}])},{id:"sort-desc",label:v.sortDesc,disabled:!Ze||re?.direction==="desc",onSelect:()=>h.setSort([{columnId:R,direction:"desc"}])},{id:"sort-clear",label:v.clearSort,disabled:!re,onSelect:()=>h.setSort($.filter(N=>N.columnId!==R))},{id:"sep-1",separator:true},{id:"group",label:$e?v.ungroupColumn:v.groupByColumn,disabled:!Ee,onSelect:()=>{$e?h.groupBy(ie.filter(N=>N!==R)):h.groupBy([...ie,R].slice(-A));}},{id:"group-panel",label:g.groupPanelVisible?v.hideGroupPanel:v.showGroupPanel,onSelect:g.onToggleGroupPanel},{id:"footer",label:g.footerVisible?v.hideFooter:v.showFooter,onSelect:g.onToggleFooter},{id:"sep-2",separator:true},{id:"hide-column",label:v.hideColumn,disabled:h.getColumnStates().filter(N=>N.visible).length<=1,onSelect:()=>h.setColumnVisible(R,false)},{id:"field-chooser",label:v.fieldChooser,onSelect:g.onOpenFieldChooser},{id:"sep-3",separator:true},{id:"best-fit",label:v.bestFit,disabled:H?.resizable===false,onSelect:()=>g.onBestFit(R)},{id:"best-fit-all",label:v.bestFitAll,onSelect:g.onBestFitAll}],Te=h.getColumnStates().filter(N=>N.visible&&N.pinned===ae).map(N=>N.id),te=Te.indexOf(R),Se=H?.reorderable!==false&&te>=0;return Re.push({id:"sep-4",separator:true},{id:"move-left",label:v.moveLeft,disabled:!Se||te<=0,onSelect:()=>h.moveColumn(R,Te[te-1])},{id:"move-right",label:v.moveRight,disabled:!Se||te<0||te>=Te.length-1,onSelect:()=>h.moveColumn(R,Te[te+2])},{id:"fixed-position",label:v.fixedPosition,items:[{id:"pin-left",label:v.pinLeft,disabled:ae==="left",onSelect:()=>h.setColumnPinned(R,"left")},{id:"pin-right",label:v.pinRight,disabled:ae==="right",onSelect:()=>h.setColumnPinned(R,"right")},{id:"pin-sticky",label:v.pinSticky,disabled:ae==="sticky",onSelect:()=>h.setColumnPinned(R,"sticky")}]},{id:"unpin",label:v.unpin,disabled:ae===null,onSelect:()=>h.setColumnPinned(R,null)}),Re}async function xo(k,g){try{let h=g==="csv"?await k.exportToCsv():g==="excel"?await k.exportToExcel():g==="excel-selected"?await k.exportToExcel({selectedOnly:!0}):await k.exportToPdf();return datagridCore.downloadBlob(h.blob,h.fileName),{completed:!0}}catch(h){return h instanceof datagridCore.ExportAbortedError?{completed:false}:{completed:false,error:h instanceof Error?h.message:String(h)}}}var Eo=null;function Lr(){return typeof document>"u"?null:(Eo??=document.createElement("canvas"),Eo.getContext("2d"))}function Ro(k){let g=getComputedStyle(k);return `${g.fontStyle} ${g.fontWeight} ${g.fontSize} ${g.fontFamily}`}function pn(k,g){let h=Lr();if(!h)return null;let A=typeof CSS<"u"&&CSS.escape?CSS.escape(g):g.replace(/"/g,'\\"'),v=k.querySelector(`.kanuni-datagrid-header-cell[data-column-id="${A}"]`),R=k.querySelectorAll(`.kanuni-datagrid-cell[data-column-id="${A}"]`);if(!v&&R.length===0)return null;let H=0;if(v){let $=v.querySelector(".kanuni-datagrid-header-label")??v;h.font=Ro($),H=h.measureText($.textContent??"").width+44;}if(R.length>0){h.font=Ro(R[0]);for(let $=0;$<R.length;$++){let re=R[$].textContent??"";if(re==="")continue;let ie=h.measureText(re).width+20;ie>H&&(H=ie);}}return H===0?null:Math.round(Math.min(640,Math.max(48,H)))}var je=60,Et=36,Qe=28,Rt="application/x-kanuni-row",Ye=new Map,fn=new Set,Do=5e3,xe=0,jr=["columnStateChanged","sortChanged"],Qr=["columnStateChanged"],Jr=["contentReady","viewportChanged","filterChanged","selectionChanged","focusChanged","summariesChanged","cellsRefreshed"],p=(k,g="div")=>{let h=document.createElement(g);return h.className=k,h},Je="http://www.w3.org/2000/svg";function Zr(k,g){let h=v=>{g&&console.warn(`[datagrid] ${v} is an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to use it.`);},A={...k};if(A.dataSource!=null&&!Array.isArray(A.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(A.columns?.some(v=>v.spanRows)&&(h("cell span/merge (spanRows) is"),A={...A,columns:A.columns.map(v=>v.spanRows?{...v,spanRows:void 0}:v)}),A.tree&&(h("tree data is"),delete A.tree),A.masterDetail&&(h("master-detail is"),delete A.masterDetail),A.grouping){let{groupBy:v,groupSummaries:R}=A.grouping,H=v==null?[]:typeof v=="string"?[v]:v;(H.length>1||R)&&(h("multi-level grouping and group summaries are"),A={...A,grouping:{...A.grouping,groupBy:H.slice(0,1),groupSummaries:false}});}return A}var ei={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:""},Tt=new Set;function ti(k){for(let g of Object.keys(k)){let h=ei[g];h===void 0||h===""||Tt.has(g)||(Tt.add(g),console.warn(`[datagrid] \`${g}\` is a React-only option \u2014 ${h}.`));}}function ni(){let k=document.createElementNS("http://www.w3.org/2000/svg","svg");k.setAttribute("width","14"),k.setAttribute("height","14"),k.setAttribute("viewBox","0 0 16 16"),k.setAttribute("aria-hidden","true"),k.setAttribute("focusable","false");let g=document.createElementNS("http://www.w3.org/2000/svg","path");return g.setAttribute("d","M8 1v8m0 0L5 6m3 3 3-3M2 11v2a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2"),g.setAttribute("fill","none"),g.setAttribute("stroke","currentColor"),g.setAttribute("stroke-width","1.5"),g.setAttribute("stroke-linecap","round"),g.setAttribute("stroke-linejoin","round"),k.appendChild(g),k}function oi(){let k=document.createElementNS(Je,"svg");k.setAttribute("width","11"),k.setAttribute("height","11"),k.setAttribute("viewBox","0 0 16 16"),k.setAttribute("aria-hidden","true"),k.setAttribute("focusable","false");let g=document.createElementNS(Je,"path");return g.setAttribute("d","M1.5 2.5h13L9.5 8.6v4.3l-3 1.6V8.6L1.5 2.5Z"),g.setAttribute("fill","currentColor"),g.setAttribute("stroke","currentColor"),g.setAttribute("stroke-width","0.6"),g.setAttribute("stroke-linejoin","round"),k.appendChild(g),k}function ri(k){let g=document.createElementNS(Je,"svg");g.setAttribute("width","14"),g.setAttribute("height","14"),g.setAttribute("viewBox","0 0 16 16"),g.setAttribute("aria-hidden","true"),g.setAttribute("focusable","false");let h=document.createElementNS(Je,"rect");h.setAttribute("x","2"),h.setAttribute("y","2"),h.setAttribute("width","12"),h.setAttribute("height","12"),h.setAttribute("rx","2"),h.setAttribute("fill","none"),h.setAttribute("stroke","currentColor"),h.setAttribute("stroke-width","1.3"),g.appendChild(h);let A=v=>{let R=document.createElementNS(Je,"path");R.setAttribute("d",v),R.setAttribute("fill","none"),R.setAttribute("stroke","currentColor"),R.setAttribute("stroke-width","1.3"),R.setAttribute("stroke-linecap","round"),g.appendChild(R);};return A("M5 8h6"),k&&A("M8 5v6"),g}function ii(k,g){let h=k??(g==="number"?"right":"left");return h==="right"?"kanuni-datagrid-cell kanuni-datagrid-cell--number":h==="center"?"kanuni-datagrid-cell kanuni-datagrid-cell--center":"kanuni-datagrid-cell"}function gn(k){let g="kanuni-datagrid-root";return k.dark&&(g+=" kanuni-datagrid-dark"),k.theme&&(g+=` kanuni-datagrid-theme-${k.theme}`),k.palette&&(g+=` kanuni-datagrid-palette-${k.palette}`),k.density&&(g+=` kanuni-datagrid-density-${k.density}`),g}function ai(k,g){let{theme:h,palette:A,density:v,dark:R,striped:H=true,rowNumbers:$=false,locale:re="en",footer:ie=false,footerMenu:$e=true,footerPosition:Ze="bottom",notes:ae,pinnedTopRows:Ee=[],pinnedBottomRows:Re=[],resizable:Te=true,reorderable:te=true,filterRow:Se=false,headerFilter:N=false,filterIconMode:No="hover",filterPanel:St=false,onOpenFilterBuilder:mn,focusedRow:wn=false,focusedRowKey:Lt,onFocusedRowChanged:bn,onRowClick:Io,onRowActivate:At,autoSizeStrategy:Mt="none",renderRow:Dt,announcements:hn=true,filterPanelLabels:yn,showRowCount:Ho=false,toolbarColumnChooser:Go=false,cellMenu:Nt=true,rowMenu:et,headerMenu:It,rowDrag:pe,alignedGrids:X,printLayout:tt,renderCellContent:Ht,getCellClassName:Gt,onCellPointerDown:Cn,onCellPointerEnter:nt,onCellDoubleClick:kn,renderDetail:vn,renderEditForm:$o,enterpriseEdition:le=false,stateStoring:xn,tooltip:$t=true,filterDebounce:Po,toolbar:En=false,highlightSearch:Ko=true,sortable:Fo=true,toolbarItemsAfter:Oo,toolbarItemsBefore:Bo,toolbarExcel:_o=false,toolbarPdf:Vo=false,searchDebounce:Wo=200,...zo}=g;ti(g),Ho&&!Tt.has("showRowCount:deprecated")&&(Tt.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 w=datagridCore.getGridDictionary(re),{emptyText:qo=w.noData,loadingText:Xo=w.busy,loadingOverlay:Pt=true,..._}=zo,Rn=typeof Pt=="number"?Pt:300,Kt=datagridCore.summaryTypeLabels(w);if(!_.columns||_.columns.length===0){let e=Array.isArray(_.dataSource)?_.dataSource:[];_.columns=datagridCore.inferColumns(e);}_.rowHeight===void 0&&(_.rowHeight=datagridCore.presetRowHeight(h,v,28));let Uo=le?_:Zr(_,!!g.debugMode),fe=le?ae:void 0;!le&&ae&&g.debugMode&&console.warn("[datagrid] cell notes are an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to show them.");let a=new datagridCore.DataGridController(Uo);a.setEnterpriseEdition(le),Lt!=null&&a.focusRow(Lt);let S=p(gn(g));S.style.height="100%",S.setAttribute("role","grid"),S.setAttribute("data-grid-id",g.gridId),h&&S.setAttribute("data-theme",h),S.style.setProperty("--dg-row-height",`${a.getRowHeight()}px`);let T=p("kanuni-datagrid-scroller"),K=p("kanuni-datagrid-canvas"),U=p("kanuni-datagrid-header");U.setAttribute("role","row");let V=p("kanuni-datagrid-rows");V.style.position="relative";let M=p("kanuni-datagrid-viewport");V.appendChild(M);let Pe=p("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--top"),Tn=p("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--bottom"),ne=ie,ge=Ze==="top",G=p(`kanuni-datagrid-footer-row kanuni-datagrid-footer-row--${ge?"top":"bottom"}`);if(G.setAttribute("role","row"),G.setAttribute("aria-label",w.columnTotalsAria),$e){let e=t=>{let n=t.target?.closest(".kanuni-datagrid-footer-cell")?.getAttribute("data-column-id");n&&(t.preventDefault(),mr(n,{left:t.clientX,top:t.clientY}));};G.addEventListener("click",e),G.addEventListener("contextmenu",e);}let ot=p("kanuni-datagrid-bands-host");ot.style.display="contents";let Le=p("kanuni-datagrid-filter-row");Le.setAttribute("role","row"),K.append(ot,U),Se&&K.append(Le);let Ft=Se?2:1;G.style.setProperty("--dg-pinned-gap",String(ge?Ft:0)),Pe.style.setProperty("--dg-pinned-gap",String(Ft+(ne&&ge?1:0))),ne&&ge&&K.append(G),Ee.length>0&&K.append(Pe),K.append(V),Re.length>0&&K.append(Tn),ne&&!ge&&K.append(G),T.appendChild(K);let me=p("kanuni-datagrid-toolbar"),Ae=p("kanuni-datagrid-pager");Ae.setAttribute("role","navigation"),Ae.setAttribute("aria-label","Pagination");let we=p("kanuni-datagrid-filter-panel"),be=!!_.grouping?.panel,F=p("kanuni-datagrid-group-panel");En&&S.appendChild(me),be&&S.appendChild(F),S.appendChild(T),St&&S.appendChild(we),_.pagination?.enabled&&S.appendChild(Ae);let Ke=p("kanuni-datagrid-loading-overlay"),Sn=p("kanuni-datagrid-loading-card"),Ln=p("kanuni-datagrid-loading-spinner","span");Ln.setAttribute("aria-hidden","true");let An=p("kanuni-datagrid-loading-label","span");An.textContent=Xo,Sn.append(Ln,An),Ke.appendChild(Sn),Ke.style.display="none";let Fe=p("kanuni-datagrid-sr-only","div");Fe.setAttribute("role","status"),Fe.setAttribute("aria-live","polite"),Fe.setAttribute("aria-atomic","true");let rt=p("kanuni-datagrid-empty");rt.textContent=qo,rt.style.display="none",S.append(Ke,rt),hn&&S.appendChild(Fe),k.appendChild(S);let Mn=_.selection,it=(Mn?.mode??"none")!=="none"&&(Mn?.checkboxColumn??false),at=a.hasMasterDetail()&&!!vn,Ot=$?je:0,Dn=Ot+(at?Qe:0),j=($?je:0)+(at?Qe:0)+(it?Et:0);a.setLeadWidth(j);let lt=!!pe?.enabled,Oe=pe?.group??null,Nn=pe?.allowReordering??true,In=pe?.allowDropInsert??Oe!==null,oe=null,dt=null,st=false,he=null,de=null;function Me(e){he=e;for(let t of M.querySelectorAll(".kanuni-datagrid-row")){let o=t.getAttribute("data-row-key"),n=e!==null&&o===String(e.key);t.classList.toggle("kanuni-datagrid-row--drop-before",n&&e.side==="before"),t.classList.toggle("kanuni-datagrid-row--drop-after",n&&e.side==="after");}}let Hn=(e,t)=>{let o=t.getBoundingClientRect();return e.clientY<o.top+o.height/2?"before":"after"},Gn=e=>e.dataTransfer?.types.includes(Rt)?oe!==null?Nn:In&&Oe!==null:false;function $n(e,t,o){let n=null;try{let i=e.dataTransfer?.getData(Rt);n=i?JSON.parse(i):null;}catch{n=null;}if(n){if(n.gridId===a.gridId){if(!Nn)return;if(pe?.onReorder){pe.onReorder({dragKey:n.rowKey,targetKey:t,position:o,row:a.getRowByKey(n.rowKey)});return}a.moveRow(n.rowKey,t,o);return}!In||Oe===null||n.group!==Oe||pe?.onAdd?.({row:n.row,rowKey:n.rowKey,otherGridId:n.gridId,targetKey:t,position:o});}}let Yo=e=>{let t=se(e);if(!t||t.node.kind!=="data"||!e.dataTransfer)return;oe=t.node.key,dt=t.node.key,st=false;let o={gridId:a.gridId,group:Oe,rowKey:t.node.key,row:t.node.data};e.dataTransfer.setData(Rt,JSON.stringify(o)),e.dataTransfer.setData("text/plain",String(t.node.key)),e.dataTransfer.effectAllowed="move",a.notifyRowDrag("enter",{rowKey:t.node.key});},jo=e=>{if(!Gn(e))return;e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move");let t=se(e);if(!t||t.node.kind!=="data")return;if(oe===t.node.key){de=null,Me(null);return}let o=e.target.closest(".kanuni-datagrid-row"),n=Hn(e,o),i=he?.key!==t.node.key||he.side!==n;de={key:t.node.key,side:n},Me({key:t.node.key,side:n}),i&&oe!==null&&a.notifyRowDrag("move",{rowKey:oe,overKey:t.node.key,position:n});},Qo=e=>{if(!Gn(e)){Me(null);return}e.preventDefault();let t=se(e);if(st=true,t&&t.node.kind==="data"){let o=e.target.closest(".kanuni-datagrid-row"),n=Hn(e,o);de={key:t.node.key,side:n},$n(e,t.node.key,n);}else de=null,$n(e,null,"after");oe=null,Me(null);},Jo=()=>{dt!==null&&a.notifyRowDragEnd({rowKey:dt,dropped:st,overKey:de?.key??null,position:de?.side??null}),st=false,dt=null,oe=null,de=null,Me(null);},Zo=e=>{let t=e.relatedTarget;t&&V.contains(t)||oe!==null&&(de=null,Me(null),a.notifyRowDrag("leave",{rowKey:oe}));},Be=tt===void 0||tt===false?null:(()=>{let e=tt===true?{}:tt;return {always:e.always??false,maxRows:e.maxRows??Do}})(),_e=false;function Bt(e){_e!==e&&(_e=e,S.classList.toggle("kanuni-datagrid-print",e),e?(xe++,document.documentElement.classList.add("kanuni-datagrid-printing")):(xe--,xe<=0&&(xe=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),qt());}let Pn=null;if(Be&&!Be.always){let e=()=>{let o=a.getRows().length;if(o>Be.maxRows){a.isDebugMode()&&console.warn(`[datagrid] print layout skipped: ${o} rows exceeds maxRows (${Be.maxRows}). Printing the visible rows instead \u2014 use exportPdf() for the whole result.`);return}Bt(true);},t=()=>Bt(false);window.addEventListener("beforeprint",e),window.addEventListener("afterprint",t),Pn=()=>{window.removeEventListener("beforeprint",e),window.removeEventListener("afterprint",t);};}let ye=0,Q=[],O=0,_t=0;function Vt(){let e=a.getColumnLayout(),t=a.getVirtualWindow().columns,o=[],n=(l,d,u,s)=>{let r=l.def;o.push({def:r,id:l.state.id,width:l.state.width,pinned:d,inset:u,className:ii(r.align,r.dataType)+(d?" kanuni-datagrid-cell--pinned":"")+(r.autoHeight?" kanuni-datagrid-cell--wrap":""),visualIndex:s});};e.left.forEach((l,d)=>n(l,"left",e.leftOffsets[d]+j,d));for(let l=t.start;l<t.end&&l<e.center.length;l++)n(e.center[l],null,0,e.left.length+l);e.right.forEach((l,d)=>n(l,"right",e.rightOffsets[d],e.left.length+e.center.length+d)),Q=o,O=t.offsetX;let i=(e.centerOffsets[Math.min(t.end,e.center.length)]??0)-(e.centerOffsets[Math.min(t.start,e.center.length)]??0);_t=Math.max(0,e.centerWidth-t.offsetX-i),K.style.minWidth=`${e.totalWidth+j}px`;}let ut=26;function er(){let e=a.getColumnLayout(),t=a.getVirtualWindow().columns,o=[...e.left,...e.center.slice(t.start,Math.min(t.end,e.center.length)),...e.right],n=datagridCore.bandDepth(o);if(ot.textContent="",U.style.top=`${n*ut}px`,S.style.setProperty("--dg-band-offset",`${n*ut}px`),n===0)return;datagridCore.computeHeaderBands(o,n).forEach((l,d)=>{let u=p("kanuni-datagrid-band-row");if(u.style.top=`${d*ut}px`,u.style.height=`${ut}px`,j>0){let s=p("kanuni-datagrid-band-cell kanuni-datagrid-band-cell--spacer kanuni-datagrid-band-cell--pinned");s.style.width=`${j}px`,s.style.flex="none",s.style.insetInlineStart="0px",u.appendChild(s);}if(O>0){let s=p("kanuni-datagrid-spacer");s.style.width=`${O}px`,s.style.flex="none",u.appendChild(s);}for(let s of l){let r=p(`kanuni-datagrid-band-cell${s.spacer?" kanuni-datagrid-band-cell--spacer":""}`);if(r.style.width=`${s.width}px`,r.style.flex="none",!s.spacer){if(s.columnIds.length>0){let f=datagridCore.bandPath(a.getColumnModel().getDef(s.columnIds[0])).slice(0,d+1);if(f.length===d+1&&a.isBandCollapsible(f)){let m=a.isBandCollapsed(f),b=document.createElement("button");b.type="button",b.className="kanuni-datagrid-band-toggle",b.setAttribute("aria-expanded",String(!m));let y=m?w.expandDetails??"Expand":w.collapseDetails??"Collapse";b.setAttribute("aria-label",y),b.title=y,b.appendChild(ri(m)),b.addEventListener("click",x=>{x.stopPropagation(),a.toggleBand(f);}),r.appendChild(b);}}let c=p("kanuni-datagrid-band-label","span");c.textContent=s.label,r.appendChild(c);}u.appendChild(r);}ot.appendChild(u);});}let Ve=null,ct=null;function pt(e,t){ct&&ct!==e&&ct.classList.remove("kanuni-datagrid-header-cell--drop-before","kanuni-datagrid-header-cell--drop-after"),ct=e,e&&(e.classList.toggle("kanuni-datagrid-header-cell--drop-before",t==="before"),e.classList.toggle("kanuni-datagrid-header-cell--drop-after",t==="after"));}function Kn(){if(!Ve)return;let e=a.getSelectedCount(),t=a.getVisibleCount(),o=t>0&&e>=t;Ve.checked=o,Ve.indeterminate=!o&&e>0;}function Wt(){er();let e=a.getSort(),t=new Map(e.map((n,i)=>[n.columnId,{direction:n.direction,order:i}]));if(U.textContent="",Ve=null,$){let n=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-rownum-cell");n.setAttribute("role","columnheader"),n.style.width=`${je}px`,n.style.flex="none",n.style.insetInlineStart="0px",U.appendChild(n);}if(at){let n=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-detail-toggle-cell");n.setAttribute("role","columnheader"),n.setAttribute("aria-label",w.detailsAria),n.style.width=`${Qe}px`,n.style.flex="none",n.style.insetInlineStart=`${Ot}px`,U.appendChild(n);}if(it){let n=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-select-cell");n.setAttribute("role","columnheader"),n.style.width=`${Et}px`,n.style.flex="none",n.style.insetInlineStart=`${Dn}px`;let i=document.createElement("input");i.type="checkbox",i.setAttribute("aria-label",w.selectAllRows),i.addEventListener("change",()=>{a.getSelectedCount()>0?a.clearSelection():a.selectAll();}),n.appendChild(i),U.appendChild(n),Ve=i,Kn();}let o=false;for(let n of Q){if(!n.pinned&&!o){if(O>0){let s=document.createElement("div");s.style.flex=`0 0 ${O}px`,U.appendChild(s);}o=true;}let i=Fo&&n.def.sortable!==false,l=t.get(n.id),d=p(`kanuni-datagrid-header-cell${i?" kanuni-datagrid-header-cell--sortable":""}${n.pinned?" kanuni-datagrid-header-cell--pinned":""}`);d.setAttribute("role","columnheader"),d.setAttribute("data-column-id",n.id),d.setAttribute("aria-sort",l?l.direction==="asc"?"ascending":"descending":"none"),d.style.width=`${n.width}px`,d.style.flex="none",n.pinned==="left"&&(d.style.insetInlineStart=`${n.inset}px`),n.pinned==="right"&&(d.style.insetInlineEnd=`${n.inset}px`);let u=p("kanuni-datagrid-header-label","span");if(n.def.renderHeader){let s=n.def.renderHeader({column:n.def});typeof s=="string"?u.textContent=s:u.appendChild(s);}else u.textContent=n.def.headerName??n.id;if(d.appendChild(u),l){let s=p("kanuni-datagrid-sort-indicator","span");if(s.setAttribute("aria-hidden","true"),s.textContent=l.direction==="asc"?"\u25B2":"\u25BC",d.appendChild(s),e.length>1){let r=p("kanuni-datagrid-sort-order","span");r.setAttribute("aria-hidden","true"),r.textContent=String(l.order+1),d.appendChild(r);}}if(i){let s=n.id;d.addEventListener("click",r=>{a.toggleSort(s,r.shiftKey);});}if(It!==false){let s=n.id;d.addEventListener("contextmenu",r=>{r.preventDefault(),gr(s,{left:r.clientX,top:r.clientY});});}if(N&&n.def.filterable!==false){let s=document.createElement("button");s.type="button";let r=a.getColumnFilter(n.id)!==null;s.className=`kanuni-datagrid-filter-button${r?" kanuni-datagrid-filter-button--active":""}${No==="always"?" kanuni-datagrid-filter-button--pinned":""}`,s.setAttribute("aria-haspopup","dialog"),s.setAttribute("aria-label",`${n.def.headerName??n.id} filter`),s.appendChild(oi()),s.addEventListener("click",c=>{c.stopPropagation(),dr(n.id,s);}),d.appendChild(s);}if(te&&n.def.reorderable!==false&&(d.draggable=true,d.addEventListener("dragstart",s=>{s.dataTransfer?.setData("text/x-kanuni-column",n.id),s.dataTransfer&&(s.dataTransfer.effectAllowed="move");}),d.addEventListener("dragover",s=>{if(!s.dataTransfer?.types.includes("text/x-kanuni-column"))return;s.preventDefault();let r=d.getBoundingClientRect(),c=s.clientX<r.left+r.width/2;pt(d,c?"before":"after");}),d.addEventListener("dragleave",s=>{let r=s.relatedTarget;(!r||!d.contains(r))&&pt(null,"before");}),d.addEventListener("drop",s=>{pt(null,"before");let r=s.dataTransfer?.getData("text/x-kanuni-column");if(!r||r===n.id)return;s.preventDefault();let c=d.getBoundingClientRect();if(s.clientX<c.left+c.width/2)a.moveColumn(r,n.id);else {let m=Q.findIndex(b=>b.id===n.id);a.moveColumn(r,Q[m+1]?.id);}}),d.addEventListener("dragend",()=>pt(null,"before"))),Te&&n.def.resizable!==false){let s=p("kanuni-datagrid-resize-handle","span");s.setAttribute("data-resize-handle",n.id),s.setAttribute("role","presentation"),s.addEventListener("click",r=>r.stopPropagation()),s.addEventListener("dblclick",r=>{r.stopPropagation(),br(n.id);}),s.addEventListener("pointerdown",r=>{r.preventDefault(),r.stopPropagation();let c=r.clientX,f=n.width,m=getComputedStyle(d).direction==="rtl"?-1:1;d.draggable=false;let b=f,y=false,x=P=>{y=true,b=f+(P.clientX-c)*m,a.setColumnWidth(n.id,b,false);},E=()=>{window.removeEventListener("pointermove",x),window.removeEventListener("pointerup",E),window.removeEventListener("pointercancel",E),y&&a.setColumnWidth(n.id,b,true),d.draggable=te&&n.def.reorderable!==false;};window.addEventListener("pointermove",x),window.addEventListener("pointerup",E),window.addEventListener("pointercancel",E);}),d.appendChild(s);}U.appendChild(d);}}let Fn=null,ft=null;function tr(e){if(e===Fn)return;Fn=e;let t=[];for(let o=0;o<e.length;o++)e[o].kind!=="data"&&t.push(o);ft=t.length>0?t:null;}function nr(e){if(!ft)return e+1;let t=0,o=ft.length;for(;t<o;){let n=t+o>>1;ft[n]<=e?t=n+1:o=n;}return e+1-t}let We=[];function On(e="data"){let t=p("kanuni-datagrid-row");if(t.setAttribute("role","row"),e==="panel"){let r=document.createElement("div");return r.setAttribute("role","gridcell"),r.setAttribute("aria-colindex","1"),t.appendChild(r),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,panelCell:r,epoch:ye}}if(e==="group"){let r=p("kanuni-datagrid-group-cell");r.setAttribute("role","gridcell"),r.setAttribute("aria-colindex","1");let c=p("kanuni-datagrid-group-twisty","span");c.setAttribute("aria-hidden","true");let f=p("kanuni-datagrid-group-caption","span"),m=p("kanuni-datagrid-group-label","span"),b=p("kanuni-datagrid-group-count","span"),y=p("kanuni-datagrid-group-aggregates","span");return r.append(c,f,m,b,y),t.appendChild(r),t.addEventListener("click",()=>{let x=t.getAttribute("data-group-key");x!==null&&a.toggleGroup(x);}),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,group:{cell:r,twisty:c,caption:f,label:m,count:b,aggregates:y},epoch:ye}}if(lt){let r=p("kanuni-datagrid-row-grip","span");r.setAttribute("aria-hidden","true"),r.title=w.dragToReorder??"Drag to reorder",r.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>',r.addEventListener("mouseenter",()=>{t.draggable=true;}),r.addEventListener("mouseleave",()=>{t.draggable=false;}),t.appendChild(r);}if(Dt)return {kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:ye};let o=null;$&&(o=p("kanuni-datagrid-cell kanuni-datagrid-cell--number kanuni-datagrid-cell--pinned kanuni-datagrid-rownum-cell"),o.setAttribute("role","gridcell"),o.style.width=`${je}px`,o.style.flex="none",o.style.insetInlineStart="0px",t.appendChild(o));let n=null;if(at){let r=p("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-detail-toggle-cell");r.setAttribute("role","gridcell"),r.style.width=`${Qe}px`,r.style.flex="none",r.style.insetInlineStart=`${Ot}px`;let c=document.createElement("button");c.type="button",c.className="kanuni-datagrid-detail-toggle",c.tabIndex=-1,c.addEventListener("click",f=>{f.stopPropagation();let m=t.getAttribute("data-row-key");if(m===null)return;let b=a.getRows().find(y=>String(y.key)===m);b&&b.kind==="data"&&a.toggleDetail(b.key);}),c.addEventListener("mousedown",f=>f.stopPropagation()),r.appendChild(c),t.appendChild(r),n=c;}let i=null;if(it){let r=p("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-select-cell");r.setAttribute("role","gridcell"),r.style.width=`${Et}px`,r.style.flex="none",r.style.insetInlineStart=`${Dn}px`;let c=document.createElement("input");c.type="checkbox",c.tabIndex=-1;let f=()=>{let m=t.getAttribute("data-row-key");if(m===null)return;let b=a.getRows().find(y=>String(y.key)===m);b&&a.toggleRow(b.key);};r.addEventListener("mousedown",m=>m.stopPropagation()),r.addEventListener("click",m=>{m.target.tagName!=="INPUT"&&(m.stopPropagation(),f());}),c.addEventListener("change",f),c.addEventListener("click",m=>m.stopPropagation()),c.addEventListener("mousedown",m=>m.stopPropagation()),r.appendChild(c),t.appendChild(r),i=c;}let l=[],d=null,u=false;for(let r of Q){!r.pinned&&!u&&(d=document.createElement("div"),d.style.flex=`0 0 ${O}px`,t.appendChild(d),u=true);let c=p(r.className);c.setAttribute("role","gridcell"),c.setAttribute("data-column-id",r.id),c.style.width=`${r.width}px`,c.style.flex="none",r.pinned==="left"&&(c.style.insetInlineStart=`${r.inset}px`),r.pinned==="right"&&(c.style.insetInlineEnd=`${r.inset}px`),t.appendChild(c),l.push({el:c,slot:r});}let s=document.createElement("div");return s.style.flex=`0 0 ${_t}px`,t.appendChild(s),{kind:e,root:t,cells:l,rowNumberCell:o,selectInput:i,detailToggle:n,leadingSpacer:d,trailingSpacer:s,epoch:ye}}let De="";function gt(e,t){if(De===""||t===""){e.textContent=t;return}let o=t.toLowerCase(),n=o.indexOf(De);if(n===-1){e.textContent=t;return}let i=[],l=0;for(;n!==-1;){n>l&&i.push(document.createTextNode(t.slice(l,n)));let d=document.createElement("mark");d.className="kanuni-datagrid-highlight",d.textContent=t.slice(n,n+De.length),i.push(d),l=n+De.length,n=o.indexOf(De,l);}l<t.length&&i.push(document.createTextNode(t.slice(l))),e.replaceChildren(...i);}function or(e,t,o){let n=a.getColumnModel().getCellValue(o.data,t.id),i=t.def;if(i.renderCell){let d=i.renderCell({value:n,row:o.data,node:o,column:i});typeof d=="string"?e.textContent=d:e.replaceChildren(d);return}let l=datagridCore.lookupLabel(i,n);if(l!==null){gt(e,l);return}if(i.valueFormatter){let d=i.valueFormatter(n,o.data);gt(e,typeof d=="string"?d:String(d??""));return}if(i.dateFormat&&i.dataType==="date"){gt(e,datagridCore.formatDateValue(n,i.dateFormat));return}gt(e,n==null?"":String(n));}function Bn(e,t,o){let n=e.root;if(n.setAttribute("aria-rowindex",String(o+2)),n.setAttribute("data-row-key",String(t.key)),t.kind==="detail"||t.kind==="editform"){let r=e.panelCell,c=t.kind==="detail";n.className=`kanuni-datagrid-row ${c?"kanuni-datagrid-detail-row":"kanuni-datagrid-editform-row"}`,n.style.height=`${t.height}px`,c?(n.setAttribute("data-detail-for",String(t.parentKey)),n.removeAttribute("data-editform-for")):(n.setAttribute("data-editform-for",t.parentKey===null?"":String(t.parentKey)),n.removeAttribute("data-detail-for")),r.className=c?"kanuni-datagrid-detail-cell":"kanuni-datagrid-editform-cell";let f=`${t.kind}:${String(t.key)}`;if(n.getAttribute("data-panel-for")!==f){n.setAttribute("data-panel-for",f);let m=c?vn?.(t.data):t.parentKey===null?void 0:$o?.(t.parentKey,t.data);r.textContent="",typeof m=="string"?r.textContent=m:m&&r.appendChild(m);}return}if(n.removeAttribute("data-panel-for"),n.removeAttribute("data-detail-for"),n.removeAttribute("data-editform-for"),t.kind==="filler"){n.style.display="none";return}n.style.display="",n.style.height=_n?"":`${a.getRowHeight()}px`,n.classList.toggle("kanuni-datagrid-row--odd",H&&o%2===1),n.classList.toggle("kanuni-datagrid-row--selected",a.isRowSelected(t.key));let i=a.getFocus();if(n.classList.toggle("kanuni-datagrid-row--focused",wn&&i!==null&&i.rowKey===t.key),e.leadingSpacer&&(e.leadingSpacer.style.flex=`0 0 ${O}px`),e.trailingSpacer&&(e.trailingSpacer.style.flex=`0 0 ${_t}px`),lt){let r=he!==null&&String(he.key)===String(t.key);n.classList.toggle("kanuni-datagrid-row--drop-before",r&&he.side==="before"),n.classList.toggle("kanuni-datagrid-row--drop-after",r&&he.side==="after");}if(e.rowNumberCell&&(e.rowNumberCell.textContent=String(nr(o))),e.selectInput&&(e.selectInput.checked=a.isRowSelected(t.key),e.selectInput.setAttribute("aria-label",w.selectRowAria.replace("{row}",String(t.key)))),e.detailToggle&&t.kind==="data"){let r=a.isDetailExpanded(t.key);e.detailToggle.textContent=r?"\u25BE":"\u25B8",e.detailToggle.setAttribute("aria-expanded",String(r)),e.detailToggle.setAttribute("aria-label",r?w.collapseDetails:w.expandDetails);}if(t.kind==="group"&&e.group){let r=t;n.className=`kanuni-datagrid-row kanuni-datagrid-group-row kanuni-datagrid-group-row--level-${r.level}`,n.setAttribute("aria-expanded",String(r.expanded)),n.setAttribute("aria-level",String(r.level+1)),n.setAttribute("data-group-key",String(r.key)),n.setAttribute("data-group-level",String(r.level)),e.group.cell.style.paddingLeft=r.level>0?`${8+r.level*18}px`:"",e.group.twisty.textContent=r.expanded?"\u25BE":"\u25B8";let c=a.getColumnModel().getDef(r.columnId),f=c?.headerName??r.columnId;e.group.caption.textContent=`${f}:`,e.group.label.textContent=datagridCore.lookupLabel(c,r.value)??(r.label===""?w.filterBlank:r.label),e.group.count.textContent=`(${r.count})`,e.group.aggregates.textContent="";let m=r.aggregates??null;if(m)for(let b of a.getSummaryDefs()){let y=p("kanuni-datagrid-group-aggregate","span"),x=p("kanuni-datagrid-group-aggregate-label","span"),E=a.getColumnModel().getDef(b.columnId);x.textContent=`${datagridCore.summaryLabel(b,Kt)} ${E?.headerName??b.columnId}:`,y.append(x,` ${datagridCore.formatSummaryValue(b,m[datagridCore.summaryKey(b.columnId,b.type)],E)}`),e.group.aggregates.appendChild(y);}return}if(t.kind!=="data"){for(let{el:r}of e.cells)r.textContent="";return}if(n.className=n.className.includes("group-row")?"kanuni-datagrid-row":n.className,Dt){let r=lt?1:0,c=Dt({row:t.data,node:t,rowIndex:o,selected:a.isRowSelected(t.key),focused:wn&&i!==null&&i.rowKey===t.key});if(c instanceof Node&&n.childNodes.length===r+1&&n.childNodes[r]===c)return;for(;n.childNodes.length>r;)n.removeChild(n.lastChild);typeof c=="string"?n.appendChild(document.createTextNode(c)):c&&n.appendChild(c);return}let l=i!==null&&i.rowKey===t.key?i.columnId:null,d=t.tree,u=d?(()=>{let r=a.getColumnLayout();return (r.left[0]??r.center[0]??r.right[0])?.state.id??null})():null,s=a.hasCellSpans();for(let{el:r,slot:c}of e.cells){let f=Ht||Gt?{node:t,columnId:c.id,rowIndex:o,columnIndex:c.visualIndex,value:a.getColumnModel().getCellValue(t.data,c.id)}:null,m=f&&Ht?Ht(f):void 0,b=false;if(m!==void 0?m instanceof Node&&r.childNodes.length===1&&r.firstChild===m?b=true:typeof m=="string"?r.textContent=m:r.replaceChildren(m):(or(r,c,t),d&&c.id===u&&ar(r,t,d)),s&&!b){let E=ir(o,c.id);r.classList.toggle("kanuni-datagrid-cell--span",E?.kind==="draw"),r.classList.toggle("kanuni-datagrid-cell--span-covered",E?.kind==="covered");let P=m!==void 0;if(E?.kind==="covered"&&l!==c.id&&!P)r.replaceChildren();else if(E?.kind==="draw"){let Y=p("kanuni-datagrid-span-box");Y.style.height=`${E.height}px`,Y.append(...Array.from(r.childNodes)),r.appendChild(Y);}}else s||r.classList.remove("kanuni-datagrid-cell--span","kanuni-datagrid-cell--span-covered");if(fe){let E=!!zt(t.key,c.id,t.data);r.classList.toggle("kanuni-datagrid-cell--noted",E);}r.id=`${g.gridId}-cell-${String(t.key)}-${c.id}`,r.classList.toggle("kanuni-datagrid-cell--focused",l===c.id);let y=r.getAttribute("data-slot-classes");if(y)for(let E of y.split(" "))r.classList.remove(E);let x=f&&Gt?Gt(f):void 0;if(x){for(let E of x.split(" "))r.classList.add(E);r.setAttribute("data-slot-classes",x);}else y&&r.removeAttribute("data-slot-classes");}}let _n=g.columns.some(e=>e.autoHeight);function rr(){if(!_n)return;let e=a.getVirtualWindow(),t=a.getRows(),o=new Map(a.getMeasuredRowHeights()),n=false;for(let i=e.rows.start;i<e.rows.end&&i<t.length;i++){let l=t[i];if(!l||l.kind!=="data")continue;let d=i-e.rows.start,u=We[d]?.root;if(!u)continue;let s=u.getBoundingClientRect().height;s>0&&o.get(l.key)!==s&&(o.set(l.key,s),n=true);}n&&a.setMeasuredRowHeights(o);}let mt={start:0,end:0};function ir(e,t){let o=a.getCellSpans(t);if(o.length===0)return null;let n=datagridCore.spanRoleAt(o,e,mt.start,mt.end);if(!n)return null;if(n.role==="covered")return {kind:"covered"};let i=a.getRowOffset(n.drawStart);return {kind:"draw",height:a.getRowOffset(n.drawEnd)+a.getRowHeightAt(n.drawEnd)-i}}function ar(e,t,o){let n=p(`kanuni-datagrid-tree-cell${o.ancestorOnly?" kanuni-datagrid-tree-cell--ancestor":""}`,"span");if(n.style.paddingInlineStart=`${o.depth*16}px`,o.hasChildren){let i=document.createElement("button");i.type="button",i.className="kanuni-datagrid-tree-toggle",i.setAttribute("data-tree-toggle",""),i.setAttribute("aria-expanded",String(o.expanded)),i.setAttribute("aria-label",o.expanded?w.collapseDetails:w.expandDetails),i.textContent=o.expanded?"\u25BE":"\u25B8",i.addEventListener("mousedown",l=>l.stopPropagation()),i.addEventListener("click",l=>{l.stopPropagation(),a.toggleTreeRow(t.key);}),n.appendChild(i);}else n.appendChild(p("kanuni-datagrid-tree-toggle kanuni-datagrid-tree-toggle--leaf","span"));n.append(...Array.from(e.childNodes)),e.appendChild(n);}let zt=(e,t,o)=>fe?fe.get({rowKey:e,columnId:t,row:o})??null:null;function qt(){let e=a.getVirtualWindow(),t=a.getRows(),o=_e?{...e,rows:{...e.rows,start:0,end:t.length,offsetY:0,totalHeight:0}}:e;tr(t),V.style.height=`${o.rows.totalHeight}px`,M.style.transform=`translateY(${o.rows.offsetY}px)`,De=Ko?a.getSearchText().trim().toLowerCase():"";let n=Math.max(0,Math.min(o.rows.end,t.length)-o.rows.start);for(mt.start=o.rows.start,mt.end=Math.min(o.rows.end,t.length)-1;We.length>n;)We.pop().root.remove();for(let i=0;i<n;i++){let l=o.rows.start+i,d=t[l],u=d.kind==="data"?"data":d.kind==="group"?"group":d.kind==="detail"||d.kind==="editform"?"panel":"stub",s=We[i];if(!s||s.epoch!==ye||s.kind!==u){let r=On(u);s?M.replaceChild(r.root,s.root):M.appendChild(r.root),We[i]=r,s=r;}Bn(s,d,l);}rr();}let Vn=datagridCore.createDebouncedCommit(Po??(a.isRemote()?200:0));function Xt(){if(!Se)return;if(Le.textContent="",j>0){let t=p("kanuni-datagrid-filter-cell kanuni-datagrid-filter-cell--pinned");t.style.width=`${j}px`,t.style.flex="none",t.style.insetInlineStart="0px",Le.appendChild(t);}let e=false;for(let t of Q){if(!t.pinned&&!e){if(O>0){let n=p("kanuni-datagrid-spacer");n.style.width=`${O}px`,n.style.flex="none",Le.appendChild(n);}e=true;}let o=p(`kanuni-datagrid-filter-cell${t.pinned?" kanuni-datagrid-filter-cell--pinned":""}`);if(o.style.width=`${t.width}px`,o.style.flex="none",t.pinned==="left"&&(o.style.insetInlineStart=`${t.inset}px`),t.pinned==="right"&&(o.style.insetInlineEnd=`${t.inset}px`),t.def.filterable!==false){let n=document.createElement("input");n.className="kanuni-datagrid-filter-input",n.setAttribute("aria-label",`${t.def.headerName??t.id} filter`);let i=()=>a.setColumnFilter(t.id,datagridCore.parseFilterInput(t.id,n.value,t.def.dataType),datagridCore.FILTER_PART_ROW);n.addEventListener("input",()=>Vn.schedule(t.id,i));let l=()=>{Vn.cancel(t.id),i();};n.addEventListener("keydown",d=>{d.key==="Enter"&&l();}),n.addEventListener("blur",l),o.appendChild(n);}Le.appendChild(o);}}let Wn=()=>{};function lr(){if(!En)return;let e=document.createElement("input");e.type="search",e.className="kanuni-datagrid-toolbar-search",e.placeholder=w.toolbarSearch,e.setAttribute("aria-label",w.toolbarSearch);let t=null;e.addEventListener("input",()=>{t&&clearTimeout(t),t=setTimeout(()=>a.setSearchText(e.value),Wo);});let o=p("kanuni-datagrid-toolbar-spacer"),n=null;if(Go){let r=document.createElement("button");r.type="button",r.textContent=w.toolbarColumns??"Columns",r.setAttribute("aria-haspopup","dialog"),r.addEventListener("click",()=>{let c=r.getBoundingClientRect();Jn({left:c.left,top:c.bottom+2});}),n=r;}let i=le&&_o,l=le&&Vo,d=document.createElement("button");d.type="button",d.className="kanuni-datagrid-toolbar-icon-button",d.setAttribute("aria-haspopup","menu"),d.setAttribute("aria-label",w.exportMenu),d.setAttribute("data-testid","dg-export-menu"),d.title=w.exportMenu,d.appendChild(ni());let u=null;d.addEventListener("click",()=>{if(u)return;let r=d.getBoundingClientRect();Ce({left:r.right-190,top:r.bottom+2},c=>{c.setAttribute("role","menu"),c.setAttribute("aria-label",w.exportMenu);let f=[{kind:"csv",label:w.exportCsv,testId:"dg-export-csv",on:true},{kind:"excel",label:w.exportExcel,testId:"dg-export-excel",on:i},{kind:"excel-selected",label:w.exportExcelSelected,testId:"dg-export-excel-selected",on:i},{kind:"pdf",label:w.exportPdf,testId:"dg-export-pdf",on:l}];for(let m of f){if(!m.on)continue;let b=document.createElement("button");b.type="button",b.className="kanuni-datagrid-menu-item",b.setAttribute("role","menuitem"),b.setAttribute("data-testid",m.testId),b.textContent=m.label,m.kind==="excel-selected"&&a.getSelectedCount()===0&&(b.disabled=true),b.addEventListener("click",()=>{u=m.kind,d.disabled=true,B(),xo(a,m.kind).then(y=>{u=null,d.disabled=false,y.error&&Wn(y.error);});}),c.appendChild(b);}},"kanuni-datagrid-filter-popup kanuni-datagrid-export-menu");});for(let r of Bo??[])me.append(r);me.append(e,o),n&&me.append(n),me.append(d);for(let r of Oo??[])me.append(r);let s=p("kanuni-datagrid-toolbar-error","span");s.setAttribute("role","alert"),s.style.display="none",me.append(s),Wn=r=>{s.textContent=r,s.style.display="";};}function zn(){if(!Ae.isConnected)return;let e=a.getPage(),t=a.getPageCount();Ae.textContent="";let o=(u,s,r,c)=>{let f=document.createElement("button");return f.type="button",f.textContent=u,f.setAttribute("aria-label",s),f.disabled=r,f.addEventListener("click",c),f},n=p("kanuni-datagrid-pager-buttons"),i=e<=0,l=e>=t-1;n.append(o("\xAB",w.pagerFirst??"First",i,()=>a.setPage(0)),o("\u2039",w.pagerPrevious??"Previous",i,()=>a.setPage(e-1)));let d=p("kanuni-datagrid-pager-current","span");d.textContent=`${e+1} / ${t}`,n.append(d,o("\u203A",w.pagerNext??"Next",l,()=>a.setPage(e+1)),o("\xBB",w.pagerLast??"Last",l,()=>a.setPage(t-1))),Ae.appendChild(n);}function Ut(){if(!ne)return;let e=a.getColumnLayout(),t=a.getSummaries(),o=new Map(a.getSummaryDefs().map(i=>[i.columnId,i]));if(G.textContent="",G.style.width=`${e.totalWidth+j}px`,j>0){let i=p("kanuni-datagrid-footer-cell kanuni-datagrid-footer-cell--pinned");i.style.width=`${j}px`,i.style.insetInlineStart="0px",G.appendChild(i);}let n=false;for(let i of Q){if(!i.pinned&&!n){if(O>0){let s=p("kanuni-datagrid-spacer");s.style.width=`${O}px`,G.appendChild(s);}n=true;}let l=o.get(i.id),d=i.def.dataType==="number",u=p(`kanuni-datagrid-footer-cell${i.pinned?" kanuni-datagrid-footer-cell--pinned":""}${d?" kanuni-datagrid-footer-cell--number":""}${l?" kanuni-datagrid-footer-cell--active":""}`);if(u.setAttribute("role","gridcell"),u.setAttribute("data-column-id",i.id),u.setAttribute("data-summary-type",l?.type??""),u.style.width=`${i.width}px`,i.pinned==="left"&&(u.style.insetInlineStart=`${i.inset}px`),i.pinned==="right"&&(u.style.insetInlineEnd=`${i.inset}px`),l){u.title=`${datagridCore.summaryLabel(l,Kt)} \u2014 ${i.def.headerName??i.id}`;let s=p("kanuni-datagrid-footer-value","span");s.textContent=datagridCore.formatSummaryValue(l,t[datagridCore.summaryKey(l.columnId,l.type)],i.def),u.appendChild(s);}else {let s=p("kanuni-datagrid-footer-hint","span");s.textContent=$e?"\xB7":"",u.appendChild(s);}G.appendChild(u);}}function Yt(){let e=(t,o,n)=>{t.textContent="",o.forEach((i,l)=>{let d=On("data");Bn(d,{kind:"data",key:`__pinned-${n}-${l}`,sourceIndex:-1,data:i},l),d.root.classList.remove("kanuni-datagrid-row--odd"),d.root.removeAttribute("aria-rowindex"),d.rowNumberCell&&(d.rowNumberCell.textContent=""),t.appendChild(d.root);});};Ee.length>0&&e(Pe,Ee,"top"),Re.length>0&&e(Tn,Re,"bottom");}let Ne=null,jt=null;function B(){jt?.(),jt=null,Ne?.remove(),Ne=null;}function qn(e,t){let n=e.getBoundingClientRect();n.width===0&&n.height===0||(e.style.left=`${Math.max(8,Math.min(t.left,window.innerWidth-n.width-8))}px`,e.style.top=`${Math.max(8,Math.min(t.top,window.innerHeight-n.height-8))}px`);}function Ce(e,t,o="kanuni-datagrid-filter-popup"){B(),Ne=p(`${gn(g)} kanuni-datagrid-portal`);let n=p(o);n.style.position="fixed",n.style.left=`${e.left}px`,n.style.top=`${e.top}px`,n.style.zIndex="1000",t(n),Ne.appendChild(n),document.body.appendChild(Ne),qn(n,e);let i=Ne,l=u=>{i.contains(u.target)||B();},d=u=>{u.key==="Escape"&&B();};document.addEventListener("pointerdown",l,true),document.addEventListener("keydown",d,true),jt=()=>{document.removeEventListener("pointerdown",l,true),document.removeEventListener("keydown",d,true);};}let ke=25,Xn=8,Un=new Map,Yn=0;function dr(e,t){let o=t.getBoundingClientRect(),n=++Yn;Ce({left:o.left,top:o.bottom+2},i=>{let l=[],d=true,u=new Set,s=false,r=0,c="",f=[],m=null,b="",y=[],x=document.createElement("input");x.type="search",x.className="kanuni-datagrid-filter-search",x.placeholder=w.search,x.setAttribute("data-testid","dg-filter-search");let E=p("kanuni-datagrid-filter-actions"),P=document.createElement("button");P.type="button",P.textContent=w.filterSelectAll,P.addEventListener("click",()=>{s=true,u=new Set(l.map(C=>C.label)),Z();});let Y=document.createElement("button");Y.type="button",Y.textContent=w.clear,Y.addEventListener("click",()=>{s=true,u=new Set,Z();}),E.append(P,Y);let I=p("kanuni-datagrid-filter-list");I.setAttribute("role","listbox"),I.setAttribute("aria-multiselectable","true");let He=document.createElement("div");He.style.position="relative";let J=document.createElement("div");He.appendChild(J),I.appendChild(He);let vt=()=>{let C=c.trim().toLowerCase();if(!C){f=l;return}m||(m=l.map(L=>L.label.toLowerCase())),f=b!==""&&C.includes(b)?y.filter(L=>L.label.toLowerCase().includes(C)):l.filter((L,D)=>m[D].includes(C)),b=C,y=f;},Z=()=>{if(I.setAttribute("aria-busy",String(d)),I.setAttribute("aria-setsize",String(f.length)),d){He.style.height="",J.textContent="";let q=p("kanuni-datagrid-filter-empty");q.textContent=w.filterLoading,J.appendChild(q);return}if(f.length===0){He.style.height="",J.style.transform="",J.textContent="";let q=p("kanuni-datagrid-filter-empty");q.textContent=w.filterNoMatch,J.appendChild(q);return}let C=I.clientHeight||240,L=Math.max(0,Math.floor(I.scrollTop/ke)-Xn),D=Math.ceil(C/ke)+Xn*2,z=Math.min(L,Math.max(0,f.length-1)),Rr=Math.min(f.length,z+D);He.style.height=`${f.length*ke}px`,J.style.transform=`translateY(${z*ke}px)`,J.textContent="";for(let q=z;q<Rr;q++){let Ge=f[q],ee=p("kanuni-datagrid-filter-item");ee.setAttribute("role","option"),ee.setAttribute("aria-selected",String(u.has(Ge.label))),ee.tabIndex=0,ee.setAttribute("data-value",Ge.label),ee.setAttribute("data-index",String(q)),q===r&&ee.classList.add("kanuni-datagrid-filter-item--active");let Xe=document.createElement("input");Xe.type="checkbox",Xe.readOnly=true,Xe.checked=u.has(Ge.label),Xe.tabIndex=-1;let vo=document.createElement("span");vo.textContent=Ge.label===""?w.filterBlank:Ge.label,ee.append(Xe,vo),ee.addEventListener("click",()=>yo(Ge.label)),ee.addEventListener("focus",()=>{r=q;}),J.appendChild(ee);}},yo=C=>{s=true,u.has(C)?u.delete(C):u.add(C);for(let L of J.querySelectorAll(".kanuni-datagrid-filter-item")){if(L.getAttribute("data-value")!==C)continue;L.setAttribute("aria-selected",String(u.has(C)));let D=L.querySelector("input");D&&(D.checked=u.has(C));}};I.addEventListener("scroll",()=>{Un.set(e,I.scrollTop),Z();}),x.addEventListener("input",()=>{c=x.value,r=0,vt(),Z();});let un=C=>{if(f.length===0)return;r=Math.max(0,Math.min(f.length-1,C));let L=r*ke,D=I.clientHeight||240;L<I.scrollTop?I.scrollTop=L:L+ke>I.scrollTop+D&&(I.scrollTop=L+ke-D),Z(),i.querySelector(`.kanuni-datagrid-filter-item[data-index="${r}"]`)?.focus();},Co=()=>{if(d)return;let C;if(u.size===l.length)C=null;else {let L=u.has(""),D=l.filter(z=>z.label!==""&&u.has(z.label));D.length===0?C=L?{columnId:e,operator:"isnull"}:null:L?C={logic:"or",nodes:[{columnId:e,operator:"in",value:D.map(z=>z.value)},{columnId:e,operator:"isnull"}]}:C={columnId:e,operator:"in",value:D.map(z=>z.value)};}a.setColumnFilter(e,C,datagridCore.FILTER_PART_SET),B();};i.tabIndex=-1,i.addEventListener("keydown",C=>{let L=C.target===x;if(C.key==="Backspace"&&!L){C.preventDefault(),x.focus(),c=c.slice(0,-1),x.value=c,r=0,vt(),Z();return}if(C.key==="ArrowDown"){C.preventDefault(),un(L?0:r+1);return}if(C.key==="ArrowUp"){C.preventDefault(),un(L?f.length-1:r-1);return}if(!L&&(C.key==="Home"||C.key==="End")){C.preventDefault(),un(C.key==="Home"?0:f.length-1);return}if(C.key===" "&&!L){C.preventDefault();let D=f[r];D&&yo(D.label);return}if(C.key==="Enter"){C.preventDefault(),Co();return}!L&&C.key.length===1&&C.key!==" "&&!C.ctrlKey&&!C.metaKey&&!C.altKey&&(C.preventDefault(),x.focus(),c+=C.key,x.value=c,r=0,vt(),Z());});let ko=p("kanuni-datagrid-filter-footer"),xt=document.createElement("button");xt.type="button",xt.textContent=w.cancel,xt.addEventListener("click",()=>B());let ce=document.createElement("button");ce.type="button",ce.className="kanuni-datagrid-filter-primary",ce.setAttribute("data-testid","dg-filter-apply"),ce.textContent=w.apply,ce.disabled=true,ce.addEventListener("click",Co),ko.append(xt,ce),i.append(x,E,I,ko),Z(),queueMicrotask(()=>{x.isConnected&&x.focus();}),a.getDistinctValueSetAsync(e).then(C=>{if(Yn!==n||!i.isConnected)return;l=C.entries,m=null,b="",d=false,ce.disabled=false;let L=datagridCore.selectedLabelsFromFilter(a.getColumnFilter(e,datagridCore.FILTER_PART_SET)??a.getColumnFilter(e,datagridCore.FILTER_PART_DEFAULT),l);L?(s=true,u=new Set(L)):s||(u=new Set(l.map(z=>z.label))),vt();let D=Un.get(e);Z(),D&&(I.scrollTop=D,Z());});});}function Qt(e={}){let t=a.getClipboardText(e);a.notifyClipboardGesture("copy",t?t.split(`
2
- `).length:0,()=>!t||!navigator.clipboard?.writeText?false:(navigator.clipboard.writeText(t).catch(()=>{}),true));}function jn(e,t,o){let n=p("kanuni-datagrid-menu-row"),i=document.createElement("button");i.type="button",i.className="kanuni-datagrid-menu-item";let l=p("kanuni-datagrid-menu-label","span");if(l.textContent=e,i.appendChild(l),t){let d=p("kanuni-datagrid-menu-shortcut","span");d.textContent=t,i.appendChild(d);}return i.addEventListener("click",()=>{o(),B();}),n.appendChild(i),n}let sr=/Mac|iPhone|iPad|iPod/.test(navigator.platform??"")?"\u2318":"Ctrl+";function Jt(e,t,o){let n=null,i=()=>{n?.remove(),n=null;};t.forEach((l,d)=>{if(l.separator){let f=p("kanuni-datagrid-menu-separator");f.setAttribute("role","separator"),e.appendChild(f);return}let u=p("kanuni-datagrid-menu-row"),s=document.createElement("button");if(s.type="button",s.className="kanuni-datagrid-menu-item",s.setAttribute("role","menuitem"),s.setAttribute("data-item-index",String(d)),l.disabled&&(s.disabled=true),l.icon!==void 0){let f=p("kanuni-datagrid-menu-icon","span");typeof l.icon=="string"?f.textContent=l.icon:f.appendChild(l.icon),s.appendChild(f);}let r=p("kanuni-datagrid-menu-label","span");if(r.textContent=l.label??"",s.appendChild(r),l.shortcut){let f=p("kanuni-datagrid-menu-shortcut","span");f.textContent=l.shortcut,s.appendChild(f);}let c=l.items??[];if(c.length>0){let f=p("kanuni-datagrid-menu-caret","span");f.textContent="\u203A",s.appendChild(f),s.setAttribute("aria-haspopup","menu"),s.setAttribute("aria-expanded","false");let m=()=>{i();let b=p("kanuni-datagrid-context-menu kanuni-datagrid-submenu");b.setAttribute("role","menu");let y=s.getBoundingClientRect();b.style.left=`${y.right}px`,b.style.top=`${Math.max(0,y.top-4)}px`;for(let x of c){if(x.separator){let Y=p("kanuni-datagrid-menu-separator");Y.setAttribute("role","separator"),b.appendChild(Y);continue}let E=document.createElement("button");E.type="button",E.className="kanuni-datagrid-menu-item",E.setAttribute("role","menuitem"),x.disabled&&(E.disabled=true);let P=p("kanuni-datagrid-menu-label","span");P.textContent=x.label??"",E.appendChild(P),E.addEventListener("click",()=>{x.onSelect?.(o),B();}),b.appendChild(E);}e.parentElement?.appendChild(b),qn(b,{left:y.right,top:Math.max(0,y.top-4)}),n=b,s.setAttribute("aria-expanded","true");};s.addEventListener("mouseenter",m),s.addEventListener("click",m);}else s.addEventListener("mouseenter",i),s.addEventListener("click",()=>{l.onSelect?.(o),B();});u.appendChild(s),e.appendChild(u);});}let Qn=e=>{let o=e.target.closest(".kanuni-datagrid-row");if(!o||o.classList.contains("kanuni-datagrid-group-row"))return;let n=se(e);if(n?.columnId&&a.notifyCell("cellContextMenu",n.node,n.rowIndex,n.columnId),!et&&!Nt||!n||n.node.kind!=="data")return;e.preventDefault(),a.isRowSelected(n.node.key)||a.handleRowClick(n.node.key,{}),n.columnId&&a.focusCell(n.node.key,n.columnId);let i={row:n.node.data,node:n.node,rowIndex:n.rowIndex,columnId:n.columnId,selectedKeys:a.getSelectedKeys()},l=(typeof et=="function"?et(i):et)??[],d=[...l,...ur(i,l.length>0)];d.length===0&&!Nt||Ce({left:e.clientX,top:e.clientY},u=>{if(u.setAttribute("role","menu"),Jt(u,d,i),Nt){if(d.length>0){let s=p("kanuni-datagrid-menu-separator");s.setAttribute("role","separator"),u.appendChild(s);}u.append(jn(w.menuCopy??"Copy",`${sr}C`,()=>Qt()),jn(w.menuCopyWithHeaders??"Copy with headers",null,()=>Qt({includeHeaders:true})));}},"kanuni-datagrid-context-menu");};function ur(e,t){if(!fe?.onChange||fe.menu===false)return [];let o=e.columnId;if(!o)return [];let n=e.node.key,i=zt(n,o,e.row),l=[];return t&&l.push({separator:true,id:"__note-sep"}),l.push({id:"__note-edit",label:i?w.editNote:w.addNote,onSelect:()=>cr(n,o,e.row,i??"")}),i&&l.push({id:"__note-delete",label:w.deleteNote,onSelect:()=>fe.onChange?.({rowKey:n,columnId:o,row:e.row,text:null})}),l}function cr(e,t,o,n){let l=(S.querySelector(`[data-row-key="${CSS.escape(String(e))}"] [data-column-id="${CSS.escape(t)}"]`)??S).getBoundingClientRect();queueMicrotask(()=>{Ce({left:l.left,top:l.bottom+2},d=>{d.setAttribute("aria-label",w.noteEditorAria);let u=document.createElement("textarea");u.className="kanuni-datagrid-note-input",u.rows=4,u.value=n,u.setAttribute("aria-label",w.noteEditorAria),u.placeholder=w.notePlaceholder,u.setAttribute("data-testid","dg-note-input");let s=()=>{let m=u.value.trim();B(),fe?.onChange?.({rowKey:e,columnId:t,row:o,text:m===""?null:m});};u.addEventListener("keydown",m=>{m.key==="Enter"&&(m.ctrlKey||m.metaKey)&&(m.preventDefault(),s()),m.key==="Escape"&&(m.preventDefault(),B());});let r=p("kanuni-datagrid-note-actions"),c=document.createElement("button");c.type="button",c.className="kanuni-datagrid-note-cancel",c.textContent=w.cancel,c.addEventListener("click",()=>B());let f=document.createElement("button");f.type="button",f.className="kanuni-datagrid-note-save",f.setAttribute("data-testid","dg-note-save"),f.textContent=w.save,f.addEventListener("click",s),r.append(c,f),d.append(u,r),queueMicrotask(()=>{u.focus(),u.select();});},"kanuni-datagrid-filter-popup kanuni-datagrid-note-editor");});}function pr(e){be!==e&&(be=e,e?(S.insertBefore(F,T),tn()):F.remove());}function fr(e){if(ne!==e){if(ne=e,e){if(ge){let t=Ee.length>0?Pe:V;K.insertBefore(G,t);}else K.append(G);Ut();}else G.remove();Pe.style.setProperty("--dg-pinned-gap",String(Ft+(ne&&ge?1:0)));}}function Zt(e){let t=pn(S,e);t!==null&&a.setColumnWidth(e,t);}function gr(e,t){let o=a.getColumnModel().getDef(e),n={columnId:e,headerName:o?.headerName??e},i=cn(n,{controller:a,t:w,groupPanelVisible:be,footerVisible:ne,onToggleGroupPanel:()=>pr(!be),onToggleFooter:()=>fr(!ne),onOpenFieldChooser:()=>Jn(t),onBestFit:Zt,onBestFitAll:()=>{for(let d of a.getColumnStates())d.visible&&Zt(d.id);},maxGroupLevels:le?Number.POSITIVE_INFINITY:1}),l=typeof It=="function"?It(n,i):i;l.length!==0&&Ce(t,d=>{d.setAttribute("role","menu"),Jt(d,l,n);},"kanuni-datagrid-context-menu");}function mr(e,t){let o=a.getColumnModel().getDef(e),n=a.getColumnSummary(e),i={columnId:e,headerName:o?.headerName??o?.field??e},l=[{id:"none",label:w.noTotal,disabled:n===null,onSelect:()=>a.setColumnSummary(e,null)},{id:"sep",separator:true},...datagridCore.allowedSummaryTypes(o?.dataType).map(d=>({id:d,label:Kt[d],disabled:n?.type===d,onSelect:()=>a.setColumnSummary(e,d)}))];Ce(t,d=>{d.setAttribute("role","menu"),Jt(d,l,i);},"kanuni-datagrid-context-menu");}function Jn(e){Ce(e,t=>{let o=p("kanuni-datagrid-filter-list");for(let n of a.getColumnStates()){let i=document.createElement("label");i.className="kanuni-datagrid-filter-item";let l=document.createElement("input");l.type="checkbox",l.checked=n.visible,l.addEventListener("change",()=>{a.setColumnVisible(n.id,l.checked);});let d=document.createElement("span"),u=a.getColumnModel().getDef(n.id);d.textContent=u?.headerName??n.id,i.append(l,d),o.appendChild(i);}t.appendChild(o);},"kanuni-datagrid-filter-popup kanuni-datagrid-column-chooser");}let ve=null,en=null,wt=e=>{F.classList.toggle("kanuni-datagrid-group-panel--over",e);};function Zn(e,t,o){let n=a.getGroupLevels();if(e===t)return;let i=n.filter(u=>u!==e),l=i.indexOf(t);if(l<0)return;let d=o==="before"?l:l+1;en=e,a.groupBy([...i.slice(0,d),e,...i.slice(d)]);}function eo(e,t){let o=a.getGroupLevels(),n=o.indexOf(e),i=n+t;n<0||i<0||i>=o.length||Zn(e,o[i],t===-1?"before":"after");}function to(e,t){if(!e)return;let o=a.getGroupLevels();if(o.includes(e))return;let n=le?Number.POSITIVE_INFINITY:1;if(o.length>=n){a.groupBy([...o.slice(0,n-1),e]);return}let i=t??o.length;a.groupBy([...o.slice(0,i),e,...o.slice(i)]);}function tn(){if(!be)return;F.textContent="";let e=a.getGroupLevels();if(e.length===0){let s=p("kanuni-datagrid-group-panel-hint","span");s.textContent=w.groupPanelHint??"Drag a column header here to group by it",F.appendChild(s);return}let t=s=>a.getColumnModel().getDef(s)?.headerName??s,o=p("kanuni-datagrid-group-levels"),n=(s,r)=>s<r.top+r.height/2?"before":"after",i=(s,r)=>{for(let c of F.querySelectorAll(".kanuni-datagrid-group-level"))c.classList.remove("kanuni-datagrid-group-level--drop-before","kanuni-datagrid-group-level--drop-after");s&&r&&s.classList.add(`kanuni-datagrid-group-level--drop-${r}`);};e.forEach((s,r)=>{let c=p("kanuni-datagrid-group-level");c.style.setProperty("--dg-group-level",String(r)),c.setAttribute("data-group-level",String(r));let f=p("kanuni-datagrid-group-chip");if(f.setAttribute("role","button"),f.tabIndex=0,e.length>1&&(f.draggable=true),f.setAttribute("aria-label",`${datagridCore.fillText(w.groupLevelAria,{n:r+1})}: ${t(s)}`),f.addEventListener("dragstart",y=>{ve=s,y.dataTransfer&&(y.dataTransfer.effectAllowed="move",y.dataTransfer.setData("text/x-kanuni-column",s));}),f.addEventListener("dragend",()=>{ve=null,i(null,null);}),f.addEventListener("keydown",y=>{let x=y.ctrlKey||y.metaKey;x&&(y.key==="ArrowUp"||y.key==="ArrowLeft")?(y.preventDefault(),eo(s,-1)):x&&(y.key==="ArrowDown"||y.key==="ArrowRight")?(y.preventDefault(),eo(s,1)):(y.key==="Delete"||y.key==="Backspace")&&(y.preventDefault(),a.groupBy(e.filter(E=>E!==s)));}),c.addEventListener("dragover",y=>{!ve&&!(y.dataTransfer?.types.includes("text/x-kanuni-column")??false)||(y.preventDefault(),y.stopPropagation(),i(c,n(y.clientY,c.getBoundingClientRect())));}),c.addEventListener("drop",y=>{y.preventDefault(),y.stopPropagation();let x=n(y.clientY,c.getBoundingClientRect());i(null,null),wt(false);let E=ve;if(ve=null,E){Zn(E,s,x);return}let P=y.dataTransfer?.getData("text/x-kanuni-column");P&&to(P,x==="before"?r:r+1);}),e.length>1){let y=p("kanuni-datagrid-group-chip-level","span");y.textContent=String(r+1),f.appendChild(y);}let m=document.createElement("span");m.textContent=t(s);let b=document.createElement("button");b.type="button",b.setAttribute("aria-label",datagridCore.fillText(w.groupRemoveAria,{column:t(s)})),b.textContent="\xD7",b.addEventListener("click",()=>{a.groupBy(e.filter(y=>y!==s));}),b.draggable=false,f.append(m,b),c.appendChild(f),o.appendChild(c),en===s&&(en=null,queueMicrotask(()=>f.focus()));}),F.appendChild(o);let l=p("kanuni-datagrid-group-panel-actions"),d=document.createElement("button");d.type="button",d.textContent="Expand all",d.addEventListener("click",()=>a.expandAllGroups());let u=document.createElement("button");u.type="button",u.textContent="Collapse all",u.addEventListener("click",()=>a.collapseAllGroups()),l.append(d,u),F.appendChild(l);}if(be){let e=t=>t.dataTransfer?.types.includes("text/x-kanuni-column")??false;F.addEventListener("dragover",t=>{e(t)&&(t.preventDefault(),wt(true));}),F.addEventListener("dragleave",t=>{let o=t.relatedTarget;o&&F.contains(o)||wt(false);}),F.addEventListener("drop",t=>{wt(false);let o=t.dataTransfer?.getData("text/x-kanuni-column");if(o){if(t.preventDefault(),ve){ve=null;return}to(o);}});}let no="";function oo(){if(!hn)return;let e=[datagridCore.fillText(w.announceRows,{n:a.getVisibleCount()})],t=a.getSort();if(t.length>0){let i=t.map(l=>{let d=a.getColumnModel().getDef(l.columnId),u=d?.headerName??d?.field??l.columnId,s=l.direction==="desc"?w.announceDescending:w.announceAscending;return `${u} ${s}`}).join(", ");e.push(datagridCore.fillText(w.announceSortedBy,{columns:i}));}let o=a.getSelectedCount();o>0&&e.push(datagridCore.fillText(w.announceSelected,{n:o}));let n=e.join(", ");n!==no&&(no=n,Fe.textContent=n);}function ro(){if(!St)return;we.textContent="";let e=datagridCore.describeFilter(a.getEffectiveFilter(),a.getColumnModel(),{...yn,labels:{...datagridCore.filterLabels(w),...yn?.labels}});if(!e&&St!=="always"){we.style.display="none";return}we.style.display="";let t=a.isFilterEnabled();we.className=`kanuni-datagrid-filter-panel${t?"":" kanuni-datagrid-filter-panel--suspended"}`;let o=document.createElement("button");o.type="button",o.className="kanuni-datagrid-filter-panel-clear",o.title=w.filterRemove,o.setAttribute("aria-label",w.filterRemove),o.setAttribute("data-testid","dg-filter-panel-clear"),o.disabled=e===null,o.textContent="\xD7",o.addEventListener("click",()=>{a.setFilter(null),a.clearColumnFilters(),a.setFilterEnabled(true);});let n=document.createElement("input");n.type="checkbox",n.className="kanuni-datagrid-filter-panel-toggle",n.checked=t,n.disabled=e===null,n.title=w.filterToggle,n.setAttribute("aria-label",w.filterToggle),n.setAttribute("data-testid","dg-filter-panel-toggle"),n.addEventListener("change",()=>a.setFilterEnabled(n.checked));let i=p("kanuni-datagrid-filter-panel-text","span");if(i.setAttribute("data-testid","dg-filter-panel-text"),i.textContent=e??w.filterNone,e&&(i.title=e),we.append(o,n,i),mn){let l=document.createElement("button");l.type="button",l.className="kanuni-datagrid-filter-panel-builder",l.title=w.filterEditBuilder,l.setAttribute("aria-label",w.filterEditBuilder),l.setAttribute("data-testid","dg-filter-panel-builder"),l.textContent="\u25BE",l.addEventListener("click",mn),we.appendChild(l);}}let nn=new Set,wr=a.events.on("cellsFlashed",({rowKeys:e,columnIds:t,duration:o})=>{let n=e.length?e.map(u=>`[data-row-key="${CSS.escape(String(u))}"]`).join(","):".kanuni-datagrid-row",i=t.length?t.map(u=>`[data-column-id="${CSS.escape(u)}"]`).join(","):"[data-column-id]",l=[];M.querySelectorAll(n).forEach(u=>{u.querySelectorAll(i).forEach(s=>l.push(s));});for(let u of l)u.classList.remove("kanuni-datagrid-cell--flash");S.offsetWidth;for(let u of l)u.classList.add("kanuni-datagrid-cell--flash");let d=setTimeout(()=>{for(let u of l)u.classList.remove("kanuni-datagrid-cell--flash");nn.delete(d);},o);nn.add(d);});function se(e){let t=e.target,o=t.closest(".kanuni-datagrid-row");if(!o||!M.contains(o))return null;let n=o.getAttribute("data-row-key");if(n===null)return null;let i=a.getRows(),l=i.findIndex(u=>String(u.key)===n);if(l===-1)return null;let d=t.closest(".kanuni-datagrid-cell")?.getAttribute("data-column-id")??null;return {node:i[l],rowIndex:l,columnId:d}}let io=e=>{let t=se(e);t&&(Io?.(t.node),a.notifyRow("rowClicked",t.node,t.rowIndex),t.columnId&&a.notifyCell("cellClicked",t.node,t.rowIndex,t.columnId));},ao=e=>{let t=se(e);if(t){if(kn){let o=sn(t);o&&kn(o);}At?.(t.node),a.notifyRow("rowDoubleClicked",t.node,t.rowIndex),t.columnId&&a.notifyCell("cellDoubleClicked",t.node,t.rowIndex,t.columnId);}};M.addEventListener("click",io),M.addEventListener("dblclick",ao);function br(e){let t=0,o=U.querySelector(`[data-column-id="${CSS.escape(e)}"]`);o&&(t=o.scrollWidth),M.querySelectorAll(`[data-column-id="${CSS.escape(e)}"]`).forEach(n=>{n.scrollWidth>t&&(t=n.scrollWidth);}),t>0&&a.setColumnWidth(e,t+12,true);}function hr(){if(N)for(let e of U.querySelectorAll(".kanuni-datagrid-filter-button")){let t=e.parentElement?.getAttribute("data-column-id");t&&e.classList.toggle("kanuni-datagrid-filter-button--active",a.getColumnFilter(t)!==null);}}let on=false,lo=false,Ie=null;function bt(){Ie!==null&&(clearTimeout(Ie),Ie=null);}function ht(e){Ke.style.display=e?"":"none";}function yt(){let e=a.getOverlay();if(rt.style.display=e==="noRows"?"":"none",Pt===false){bt(),ht(false);return}if(!(e==="loading"&&(on||!lo))){bt(),ht(false);return}if(on||Rn<=0){bt(),ht(true);return}Ie!==null||Ke.style.display===""||(Ie=setTimeout(()=>{Ie=null,W||ht(true);},Rn));}let so=false,rn=false,an=false,ln=false,W=false;function yr(){if(rn=false,!W){if(an)an=false,ln&&(ln=false,ye++),Vt(),Wt(),Xt(),Yt();else {let e=O;Vt(),O!==e&&(ye++,Wt(),Xt(),Yt());}qt(),Kn(),Ut(),zn(),hr(),tn(),ro(),oo(),yt();}}function dn(e){W||(e&&(an=true),!rn&&(rn=true,queueMicrotask(yr)));}let Cr=[...bn?[a.events.on("focusedRowChanged",e=>bn({rowKey:e.rowKey,row:e.row}))]:[],...jr.map(e=>a.events.on(e,()=>dn(true))),...Qr.map(e=>a.events.on(e,()=>{ln=true;})),...Jr.map(e=>a.events.on(e,()=>dn(false))),a.events.on("overlayChanged",e=>{on=e.manual===true&&e.overlay==="loading",W||yt();}),a.events.on("busyChanged",e=>{lo=e.background===true,W||yt();}),a.events.on("paginationChanged",()=>{W||dn(false);}),a.events.on("scrollRequested",e=>{if(W)return;e.scrollTop!==void 0&&(T.scrollTop=e.scrollTop),e.scrollLeft!==void 0&&(T.scrollLeft=e.scrollLeft),a.setScroll(T.scrollTop,Math.abs(T.scrollLeft));let t=e.scrollTop;t===void 0||Math.abs(T.scrollTop-t)<=1||setTimeout(()=>{W||Math.abs(T.scrollTop-t)<=1||(T.scrollTop=t,a.setScroll(T.scrollTop,Math.abs(T.scrollLeft)));},0);}),...Mt==="fitGrid"?[a.events.on("gridSizeChanged",()=>a.sizeColumnsToFit())]:[],...Mt==="fitCells"?[a.events.on("firstDataRendered",()=>{W||so||(so=true,queueMicrotask(()=>{if(!W)for(let e of a.getColumnStates())e.visible&&Zt(e.id);}));})]:[]];Mt==="fitGrid"&&a.sizeColumnsToFit();function sn(e){if(!e.columnId||e.node.kind!=="data")return null;let t=Q.find(o=>o.id===e.columnId);return t?{node:e.node,columnId:e.columnId,rowIndex:e.rowIndex,columnIndex:t.visualIndex,value:a.getColumnModel().getCellValue(e.node.data,t.id)}:null}let uo=e=>{let t=e.target;if(Cn){let u=se(e),s=u?sn(u):null;s&&Cn(s,e);}let o=t.closest(".kanuni-datagrid-row");if(!o||o.classList.contains("kanuni-datagrid-group-row"))return;let n=o.getAttribute("data-row-key");if(n===null)return;let i=a.getRows().find(u=>String(u.key)===n);if(!i||i.kind!=="data")return;a.handleRowClick(i.key,{ctrlKey:e.ctrlKey||it&&!e.shiftKey,metaKey:e.metaKey,shiftKey:e.shiftKey});let l=t.closest(".kanuni-datagrid-cell"),d=l?Q.find(u=>l.id.endsWith(`-${u.id}`))?.id:void 0;d&&a.focusCell(i.key,d);},co=e=>{if(!nt)return;let o=e.target.closest(".kanuni-datagrid-cell");if(!o||!M.contains(o)||e.relatedTarget?.closest?.(".kanuni-datagrid-cell")===o)return;let i=se(e),l=i?sn(i):null;l&&nt(l,e);};M.addEventListener("mousedown",uo),M.addEventListener("contextmenu",Qn),nt&&M.addEventListener("mouseover",co),lt&&(V.addEventListener("dragstart",Yo),V.addEventListener("dragover",jo),V.addEventListener("drop",Qo),V.addEventListener("dragend",Jo),V.addEventListener("dragleave",Zo)),S.tabIndex=0;let po=e=>{let t=e.target;if(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)return;let o=datagridCore.resolveGridCommand({key:e.key,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,altKey:e.altKey});if(!o)return;if(o.type==="copy"){Qt();return}if(o.type==="activate"){if(At){let l=a.getFocus(),d=l?a.getRows().find(u=>u.key===l.rowKey):void 0;d&&At(d);}o.preventDefault&&e.preventDefault();return}a.executeCommand(o),o.preventDefault&&e.preventDefault();let n=a.getFocusIndices();if(n){let d=a.getColumnLayout().center.findIndex(s=>s.state.id===a.getFocus()?.columnId),u=a.ensureVisible(n.rowIndex,d===-1?void 0:d);u&&(u.scrollTop!==void 0&&(T.scrollTop=u.scrollTop),u.scrollLeft!==void 0&&(T.scrollLeft=u.scrollLeft),a.setScroll(T.scrollTop,Math.abs(T.scrollLeft)));}let i=a.getFocus();S.setAttribute("aria-activedescendant",i?`${g.gridId}-cell-${String(i.rowKey)}-${i.columnId}`:"");};S.addEventListener("keydown",po);let kr=xn?datagridCore.attachStateStoring(a,xn):null,vr=typeof $t=="object"?$t.delay??400:400,ze=null,Ct=null;function qe(){Ct&&clearTimeout(Ct),Ct=null,ze?.remove(),ze=null;}let xr=e=>e.scrollWidth>e.clientWidth+1||e.scrollHeight>e.clientHeight+1;function Er(e){let o=e.closest(".kanuni-datagrid-row")?.getAttribute("data-row-key"),n=Q.find(u=>e.id.endsWith(`-${u.id}`));if(!o||!n)return null;let i=a.getRows().find(u=>String(u.key)===o);if(!i||i.kind!=="data")return null;let l=n.def,d=zt(i.key,n.id,i.data);if(d)return d;if(typeof l.tooltip=="function")return l.tooltip({value:a.getColumnModel().getCellValue(i.data,n.id),row:i.data,node:i,column:l})??null;if(typeof l.tooltip=="string")return l.tooltip;if(l.tooltipField){let u=i.data[l.tooltipField];return u==null?null:String(u)}return xr(e)?e.textContent??null:null}let fo=e=>{if($t===false)return;qe();let t=e.target.closest(".kanuni-datagrid-cell");!t||!M.contains(t)||(Ct=setTimeout(()=>{let o=Er(t);if(!o)return;let n=t.getBoundingClientRect();ze=p(`${gn(g)} kanuni-datagrid-portal`);let i=p("kanuni-datagrid-tooltip");i.setAttribute("role","tooltip"),i.textContent=o,i.style.position="fixed",i.style.left=`${n.left}px`,i.style.top=`${n.bottom+4}px`,i.style.zIndex="1001",ze.appendChild(i),document.body.appendChild(ze);},vr));},go=()=>qe();S.addEventListener("pointerover",fo),S.addEventListener("pointerout",go),T.addEventListener("scroll",qe,{passive:true});let mo=()=>{if(a.setScroll(T.scrollTop,Math.abs(T.scrollLeft)),ue)for(let e of wo())e.scroller.scrollLeft!==T.scrollLeft&&(e.scroller.scrollLeft=T.scrollLeft);};T.addEventListener("scroll",mo,{passive:true});let ue=null,wo=()=>{if(!X||!ue)return [];let e=Ye.get(X);return e?[...e].filter(t=>t!==ue):[]},bo=null;if(X){ue={controller:a,scroller:T};let e=Ye.get(X)??new Set;e.add(ue),Ye.set(X,e),bo=a.events.on("columnStateChanged",()=>{if(fn.has(X))return;let t=wo();if(t.length===0)return;let o=a.getColumnStates();fn.add(X);try{for(let n of t)n.controller.applyColumnStates(o);}finally{fn.delete(X);}});}let ho=()=>{a.setViewportSize(T.clientWidth,T.clientHeight),T.style.setProperty("--dg-viewport-width",`${T.clientWidth}px`);let e=V.getBoundingClientRect(),t=K.getBoundingClientRect();a.setChromeOffsets(e.top-t.top,t.bottom-e.bottom),datagridCore.calibrateMaxScrollOffset(T,a);};ho();let kt=null;return typeof ResizeObserver<"u"&&(kt=new ResizeObserver(ho),kt.observe(T),kt.observe(K)),Vt(),Wt(),Xt(),lr(),Yt(),qt(),Ut(),zn(),tn(),ro(),oo(),yt(),Be?.always&&Bt(true),{controller:a,element:S,setData:e=>a.setData(e),setColumns:e=>a.setColumns(e),destroy:()=>{if(!W){if(W=true,Cr.forEach(e=>e()),kt?.disconnect(),Pn?.(),_e&&(_e=false,xe--,xe<=0&&(xe=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),bo?.(),X&&ue){let e=Ye.get(X);e?.delete(ue),e&&e.size===0&&Ye.delete(X),ue=null;}T.removeEventListener("scroll",mo),M.removeEventListener("mousedown",uo),M.removeEventListener("contextmenu",Qn),nt&&M.removeEventListener("mouseover",co),M.removeEventListener("click",io),M.removeEventListener("dblclick",ao),wr(),bt();for(let e of nn)clearTimeout(e);S.removeEventListener("keydown",po),S.removeEventListener("pointerover",fo),S.removeEventListener("pointerout",go),T.removeEventListener("scroll",qe),qe(),kr?.(),B(),a.dispose(),S.remove();}}}}Object.defineProperty(exports,"DENSITY_ROW_HEIGHT",{enumerable:true,get:function(){return datagridCore.DENSITY_ROW_HEIGHT}});Object.defineProperty(exports,"THEME_ROW_HEIGHT",{enumerable:true,get:function(){return datagridCore.THEME_ROW_HEIGHT}});Object.defineProperty(exports,"presetRowHeight",{enumerable:true,get:function(){return datagridCore.presetRowHeight}});exports.CHECKBOX_COLUMN_WIDTH=Et;exports.DETAIL_COLUMN_WIDTH=Qe;exports.PRINT_MAX_ROWS=Do;exports.ROW_DRAG_MIME=Rt;exports.ROW_NUMBER_COLUMN_WIDTH=je;exports.buildHeaderMenu=cn;exports.createGrid=ai;exports.measureBestFitWidth=pn;
1
+ 'use strict';var datagridCore=require('@kanunilabs/datagrid-core');function gn(x,g){let{controller:y,maxGroupLevels:A,t:v}=g,E=x.columnId,G=y.getColumnModel().getDef(E),P=y.getSort(),re=P.find(I=>I.columnId===E),le=y.getGroupLevels(),Ke=le.includes(E),tt=G?.sortable!==false,ae=y.getColumnStates().find(I=>I.id===E)?.pinned??null,Se=G?.groupable!==false,Le=[{id:"sort-asc",label:v.sortAsc,disabled:!tt||re?.direction==="asc",onSelect:()=>y.setSort([{columnId:E,direction:"asc"}])},{id:"sort-desc",label:v.sortDesc,disabled:!tt||re?.direction==="desc",onSelect:()=>y.setSort([{columnId:E,direction:"desc"}])},{id:"sort-clear",label:v.clearSort,disabled:!re,onSelect:()=>y.setSort(P.filter(I=>I.columnId!==E))},{id:"sep-1",separator:true},{id:"group",label:Ke?v.ungroupColumn:v.groupByColumn,disabled:!Se,onSelect:()=>{Ke?y.groupBy(le.filter(I=>I!==E)):y.groupBy([...le,E].slice(-A));}},{id:"group-panel",label:g.groupPanelVisible?v.hideGroupPanel:v.showGroupPanel,onSelect:g.onToggleGroupPanel},{id:"footer",label:g.footerVisible?v.hideFooter:v.showFooter,onSelect:g.onToggleFooter},{id:"sep-2",separator:true},{id:"hide-column",label:v.hideColumn,disabled:y.getColumnStates().filter(I=>I.visible).length<=1,onSelect:()=>y.setColumnVisible(E,false)},{id:"field-chooser",label:v.fieldChooser,onSelect:g.onOpenFieldChooser},{id:"sep-3",separator:true},{id:"best-fit",label:v.bestFit,disabled:G?.resizable===false,onSelect:()=>g.onBestFit(E)},{id:"best-fit-all",label:v.bestFitAll,onSelect:g.onBestFitAll}],Ae=y.getColumnStates().filter(I=>I.visible&&I.pinned===ae).map(I=>I.id),te=Ae.indexOf(E),Me=G?.reorderable!==false&&te>=0;return Le.push({id:"sep-4",separator:true},{id:"move-left",label:v.moveLeft,disabled:!Me||te<=0,onSelect:()=>y.moveColumn(E,Ae[te-1])},{id:"move-right",label:v.moveRight,disabled:!Me||te<0||te>=Ae.length-1,onSelect:()=>y.moveColumn(E,Ae[te+2])},{id:"fixed-position",label:v.fixedPosition,items:[{id:"pin-left",label:v.pinLeft,disabled:ae==="left",onSelect:()=>y.setColumnPinned(E,"left")},{id:"pin-right",label:v.pinRight,disabled:ae==="right",onSelect:()=>y.setColumnPinned(E,"right")},{id:"pin-sticky",label:v.pinSticky,disabled:ae==="sticky",onSelect:()=>y.setColumnPinned(E,"sticky")}]},{id:"unpin",label:v.unpin,disabled:ae===null,onSelect:()=>y.setColumnPinned(E,null)}),Le}async function mn(x,g){try{let y=g==="csv"?await x.exportToCsv():g==="excel"?await x.exportToExcel():g==="excel-selected"?await x.exportToExcel({selectedOnly:!0}):await x.exportToPdf();return datagridCore.downloadBlob(y.blob,y.fileName),{completed:!0}}catch(y){return y instanceof datagridCore.ExportAbortedError?{completed:false}:{completed:false,error:y instanceof Error?y.message:String(y)}}}var To=null;function Gr(){return typeof document>"u"?null:(To??=document.createElement("canvas"),To.getContext("2d"))}function So(x){let g=getComputedStyle(x);return `${g.fontStyle} ${g.fontWeight} ${g.fontSize} ${g.fontFamily}`}function bn(x,g){let y=Gr();if(!y)return null;let A=typeof CSS<"u"&&CSS.escape?CSS.escape(g):g.replace(/"/g,'\\"'),v=x.querySelector(`.kanuni-datagrid-header-cell[data-column-id="${A}"]`),E=x.querySelectorAll(`.kanuni-datagrid-cell[data-column-id="${A}"]`);if(!v&&E.length===0)return null;let G=0;if(v){let P=v.querySelector(".kanuni-datagrid-header-label")??v;y.font=So(P),G=y.measureText(P.textContent??"").width+44;}if(E.length>0){y.font=So(E[0]);for(let P=0;P<E.length;P++){let re=E[P].textContent??"";if(re==="")continue;let le=y.measureText(re).width+20;le>G&&(G=le);}}return G===0?null:Math.round(Math.min(640,Math.max(48,G)))}var Je=60,Lt=36,Ze=28,At="application/x-kanuni-row",Qe=new Map,wn=new Set,Io=5e3,Te=0,ol=["columnStateChanged","sortChanged"],rl=["columnStateChanged"],ll=["contentReady","viewportChanged","filterChanged","selectionChanged","focusChanged","summariesChanged","cellsRefreshed"],p=(x,g="div")=>{let y=document.createElement(g);return y.className=x,y},et="http://www.w3.org/2000/svg";function al(x,g){let y=v=>{g&&console.warn(`[datagrid] ${v} is an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to use it.`);},A={...x};if(A.dataSource!=null&&!Array.isArray(A.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(A.columns?.some(v=>v.spanRows)&&(y("cell span/merge (spanRows) is"),A={...A,columns:A.columns.map(v=>v.spanRows?{...v,spanRows:void 0}:v)}),A.tree&&(y("tree data is"),delete A.tree),A.masterDetail&&(y("master-detail is"),delete A.masterDetail),A.grouping){let{groupBy:v,groupSummaries:E}=A.grouping,G=v==null?[]:typeof v=="string"?[v]:v;(G.length>1||E)&&(y("multi-level grouping and group summaries are"),A={...A,grouping:{...A.grouping,groupBy:G.slice(0,1),groupSummaries:false}});}return A}var il={columnResize:"use `resizable`",columnReorder:"use `reorderable`",groupPanel:"use `grouping: { panel: true }`",autoColumns:"",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:"",renderOverlay:"",cellMenu:""},Mt=new Set;function dl(x){for(let g of Object.keys(x)){let y=il[g];y===void 0||y===""||Mt.has(g)||(Mt.add(g),console.warn(`[datagrid] \`${g}\` is a React-only option \u2014 ${y}.`));}}function sl(){let x=document.createElementNS("http://www.w3.org/2000/svg","svg");x.setAttribute("width","14"),x.setAttribute("height","14"),x.setAttribute("viewBox","0 0 16 16"),x.setAttribute("aria-hidden","true"),x.setAttribute("focusable","false");let g=document.createElementNS("http://www.w3.org/2000/svg","path");return g.setAttribute("d","M8 1v8m0 0L5 6m3 3 3-3M2 11v2a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2"),g.setAttribute("fill","none"),g.setAttribute("stroke","currentColor"),g.setAttribute("stroke-width","1.5"),g.setAttribute("stroke-linecap","round"),g.setAttribute("stroke-linejoin","round"),x.appendChild(g),x}function ul(){let x=document.createElementNS(et,"svg");x.setAttribute("width","11"),x.setAttribute("height","11"),x.setAttribute("viewBox","0 0 16 16"),x.setAttribute("aria-hidden","true"),x.setAttribute("focusable","false");let g=document.createElementNS(et,"path");return g.setAttribute("d","M1.5 2.5h13L9.5 8.6v4.3l-3 1.6V8.6L1.5 2.5Z"),g.setAttribute("fill","currentColor"),g.setAttribute("stroke","currentColor"),g.setAttribute("stroke-width","0.6"),g.setAttribute("stroke-linejoin","round"),x.appendChild(g),x}function cl(x){let g=document.createElementNS(et,"svg");g.setAttribute("width","14"),g.setAttribute("height","14"),g.setAttribute("viewBox","0 0 16 16"),g.setAttribute("aria-hidden","true"),g.setAttribute("focusable","false");let y=document.createElementNS(et,"rect");y.setAttribute("x","2"),y.setAttribute("y","2"),y.setAttribute("width","12"),y.setAttribute("height","12"),y.setAttribute("rx","2"),y.setAttribute("fill","none"),y.setAttribute("stroke","currentColor"),y.setAttribute("stroke-width","1.3"),g.appendChild(y);let A=v=>{let E=document.createElementNS(et,"path");E.setAttribute("d",v),E.setAttribute("fill","none"),E.setAttribute("stroke","currentColor"),E.setAttribute("stroke-width","1.3"),E.setAttribute("stroke-linecap","round"),g.appendChild(E);};return A("M5 8h6"),x&&A("M8 5v6"),g}function pl(x,g){let y=x??(g==="number"?"right":"left");return y==="right"?"kanuni-datagrid-cell kanuni-datagrid-cell--number":y==="center"?"kanuni-datagrid-cell kanuni-datagrid-cell--center":"kanuni-datagrid-cell"}function hn(x){let g="kanuni-datagrid-root";return x.dark&&(g+=" kanuni-datagrid-dark"),x.theme&&(g+=` kanuni-datagrid-theme-${x.theme}`),x.palette&&(g+=` kanuni-datagrid-palette-${x.palette}`),x.density&&(g+=` kanuni-datagrid-density-${x.density}`),g}function fl(x,g){let{theme:y,palette:A,density:v,dark:E,striped:G=true,rowNumbers:P=false,locale:re="en",footer:le=false,footerMenu:Ke=true,footerPosition:tt="bottom",notes:ae,pinnedTopRows:Se=[],pinnedBottomRows:Le=[],resizable:Ae=true,reorderable:te=true,filterRow:Me=false,headerFilter:I=false,filterIconMode:Ho="hover",filterPanel:Dt=false,onOpenFilterBuilder:yn,focusedRow:Cn=false,focusedRowKey:Nt,onFocusedRowChanged:xn,onRowClick:Go,onRowActivate:It,autoSizeStrategy:Ht="none",renderRow:Gt,announcements:vn=true,filterPanelLabels:kn,showRowCount:$o=false,toolbarColumnChooser:Po=false,cellMenu:nt=true,rowMenu:ot,headerMenu:$t,rowDrag:ge,alignedGrids:Y,printLayout:rt,renderCellContent:Pt,getCellClassName:Kt,onCellPointerDown:En,onCellPointerEnter:lt,onCellDoubleClick:Rn,renderDetail:Tn,renderEditForm:Ko,enterpriseEdition:ie=false,stateStoring:Sn,tooltip:me=true,renderOverlay:Ot,filterDebounce:Oo,toolbar:Ln=false,highlightSearch:Fo=true,sortable:Bo=true,toolbarItemsAfter:_o,toolbarItemsBefore:Vo,toolbarExcel:Wo=false,toolbarPdf:zo=false,searchDebounce:qo=200,...Xo}=g;dl(g),$o&&!Mt.has("showRowCount:deprecated")&&(Mt.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 m=datagridCore.getGridDictionary(re),{emptyText:Uo=m.noData,loadingText:Yo=m.busy,loadingOverlay:Ft=true,...z}=Xo,An=typeof Ft=="number"?Ft:300,Bt=datagridCore.summaryTypeLabels(m);if((!z.columns||z.columns.length===0)&&g.autoColumns!==false){let e=Array.isArray(z.dataSource)?z.dataSource:[];z.columns=datagridCore.inferColumns(e,typeof g.autoColumns=="object"?g.autoColumns:{});}z.rowHeight===void 0&&(z.rowHeight=datagridCore.presetRowHeight(y,v,28));let jo=ie?z:al(z,!!g.debugMode),be=ie?ae:void 0;!ie&&ae&&g.debugMode&&console.warn("[datagrid] cell notes are an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to show them.");let a=new datagridCore.DataGridController(jo);a.setEnterpriseEdition(ie),Nt!=null&&a.focusRow(Nt);let T=p(hn(g));T.style.height="100%",T.setAttribute("role","grid"),T.setAttribute("data-grid-id",g.gridId),y&&T.setAttribute("data-theme",y),T.style.setProperty("--dg-row-height",`${a.getRowHeight()}px`);let R=p("kanuni-datagrid-scroller"),O=p("kanuni-datagrid-canvas"),j=p("kanuni-datagrid-header");j.setAttribute("role","row");let F=p("kanuni-datagrid-rows");F.style.position="relative";let D=p("kanuni-datagrid-viewport");F.appendChild(D);let Oe=p("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--top"),Mn=p("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--bottom"),ne=le,we=tt==="top",$=p(`kanuni-datagrid-footer-row kanuni-datagrid-footer-row--${we?"top":"bottom"}`);if($.setAttribute("role","row"),$.setAttribute("aria-label",m.columnTotalsAria),Ke){let e=t=>{let n=t.target?.closest(".kanuni-datagrid-footer-cell")?.getAttribute("data-column-id");n&&(t.preventDefault(),Cr(n,{left:t.clientX,top:t.clientY}));};$.addEventListener("click",e),$.addEventListener("contextmenu",e);}let at=p("kanuni-datagrid-bands-host");at.style.display="contents";let De=p("kanuni-datagrid-filter-row");De.setAttribute("role","row"),O.append(at,j),Me&&O.append(De);let _t=Me?2:1;$.style.setProperty("--dg-pinned-gap",String(we?_t:0)),Oe.style.setProperty("--dg-pinned-gap",String(_t+(ne&&we?1:0))),ne&&we&&O.append($),Se.length>0&&O.append(Oe),O.append(F),Le.length>0&&O.append(Mn),ne&&!we&&O.append($),R.appendChild(O);let he=p("kanuni-datagrid-toolbar"),Ne=p("kanuni-datagrid-pager");Ne.setAttribute("role","navigation"),Ne.setAttribute("aria-label","Pagination");let ye=p("kanuni-datagrid-filter-panel"),Ce=!!z.grouping?.panel,B=p("kanuni-datagrid-group-panel");Ln&&T.appendChild(he),Ce&&T.appendChild(B),T.appendChild(R),Dt&&T.appendChild(ye),z.pagination?.enabled&&T.appendChild(Ne);let Fe=p("kanuni-datagrid-loading-overlay"),Dn=p("kanuni-datagrid-loading-card"),Nn=p("kanuni-datagrid-loading-spinner","span");Nn.setAttribute("aria-hidden","true");let In=p("kanuni-datagrid-loading-label","span");In.textContent=Yo,Dn.append(Nn,In),Fe.appendChild(Dn),Fe.style.display="none";let Be=p("kanuni-datagrid-sr-only","div");Be.setAttribute("role","status"),Be.setAttribute("aria-live","polite"),Be.setAttribute("aria-atomic","true");let it=p("kanuni-datagrid-empty");it.textContent=Uo,it.style.display="none",T.append(Fe,it),vn&&T.appendChild(Be),x.appendChild(T);let Hn=z.selection,dt=(Hn?.mode??"none")!=="none"&&(Hn?.checkboxColumn??false),st=a.hasMasterDetail()&&!!Tn,Vt=P?Je:0,Gn=Vt+(st?Ze:0),Q=(P?Je:0)+(st?Ze:0)+(dt?Lt:0);a.setLeadWidth(Q);let ut=!!ge?.enabled,_e=ge?.group??null,$n=ge?.allowReordering??true,Pn=ge?.allowDropInsert??_e!==null,oe=null,ct=null,pt=false,xe=null,de=null;function Ie(e){xe=e;for(let t of D.querySelectorAll(".kanuni-datagrid-row")){let o=t.getAttribute("data-row-key"),n=e!==null&&o===String(e.key);t.classList.toggle("kanuni-datagrid-row--drop-before",n&&e.side==="before"),t.classList.toggle("kanuni-datagrid-row--drop-after",n&&e.side==="after");}}let Kn=(e,t)=>{let o=t.getBoundingClientRect();return e.clientY<o.top+o.height/2?"before":"after"},On=e=>e.dataTransfer?.types.includes(At)?oe!==null?$n:Pn&&_e!==null:false;function Fn(e,t,o){let n=null;try{let l=e.dataTransfer?.getData(At);n=l?JSON.parse(l):null;}catch{n=null;}if(n){if(n.gridId===a.gridId){if(!$n)return;if(ge?.onReorder){ge.onReorder({dragKey:n.rowKey,targetKey:t,position:o,row:a.getRowByKey(n.rowKey)});return}a.moveRow(n.rowKey,t,o);return}!Pn||_e===null||n.group!==_e||ge?.onAdd?.({row:n.row,rowKey:n.rowKey,otherGridId:n.gridId,targetKey:t,position:o});}}let Qo=e=>{let t=ue(e);if(!t||t.node.kind!=="data"||!e.dataTransfer)return;oe=t.node.key,ct=t.node.key,pt=false;let o={gridId:a.gridId,group:_e,rowKey:t.node.key,row:t.node.data};e.dataTransfer.setData(At,JSON.stringify(o)),e.dataTransfer.setData("text/plain",String(t.node.key)),e.dataTransfer.effectAllowed="move",a.notifyRowDrag("enter",{rowKey:t.node.key});},Jo=e=>{if(!On(e))return;e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move");let t=ue(e);if(!t||t.node.kind!=="data")return;if(oe===t.node.key){de=null,Ie(null);return}let o=e.target.closest(".kanuni-datagrid-row"),n=Kn(e,o),l=xe?.key!==t.node.key||xe.side!==n;de={key:t.node.key,side:n},Ie({key:t.node.key,side:n}),l&&oe!==null&&a.notifyRowDrag("move",{rowKey:oe,overKey:t.node.key,position:n});},Zo=e=>{if(!On(e)){Ie(null);return}e.preventDefault();let t=ue(e);if(pt=true,t&&t.node.kind==="data"){let o=e.target.closest(".kanuni-datagrid-row"),n=Kn(e,o);de={key:t.node.key,side:n},Fn(e,t.node.key,n);}else de=null,Fn(e,null,"after");oe=null,Ie(null);},er=()=>{ct!==null&&a.notifyRowDragEnd({rowKey:ct,dropped:pt,overKey:de?.key??null,position:de?.side??null}),pt=false,ct=null,oe=null,de=null,Ie(null);},tr=e=>{let t=e.relatedTarget;t&&F.contains(t)||oe!==null&&(de=null,Ie(null),a.notifyRowDrag("leave",{rowKey:oe}));},Ve=rt===void 0||rt===false?null:(()=>{let e=rt===true?{}:rt;return {always:e.always??false,maxRows:e.maxRows??Io}})(),We=false;function Wt(e){We!==e&&(We=e,T.classList.toggle("kanuni-datagrid-print",e),e?(Te++,document.documentElement.classList.add("kanuni-datagrid-printing")):(Te--,Te<=0&&(Te=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),Yt());}let Bn=null;if(Ve&&!Ve.always){let e=()=>{let o=a.getRows().length;if(o>Ve.maxRows){a.isDebugMode()&&console.warn(`[datagrid] print layout skipped: ${o} rows exceeds maxRows (${Ve.maxRows}). Printing the visible rows instead \u2014 use exportPdf() for the whole result.`);return}Wt(true);},t=()=>Wt(false);window.addEventListener("beforeprint",e),window.addEventListener("afterprint",t),Bn=()=>{window.removeEventListener("beforeprint",e),window.removeEventListener("afterprint",t);};}let ve=0,J=[],_=0,zt=0;function qt(){let e=a.getColumnLayout(),t=a.getVirtualWindow().columns,o=[],n=(i,d,s,c)=>{let r=i.def;o.push({def:r,id:i.state.id,width:i.state.width,pinned:d,inset:s,className:pl(r.align,r.dataType)+(d?" kanuni-datagrid-cell--pinned":"")+(r.autoHeight?" kanuni-datagrid-cell--wrap":""),visualIndex:c});};e.left.forEach((i,d)=>n(i,"left",e.leftOffsets[d]+Q,d));for(let i=t.start;i<t.end&&i<e.center.length;i++)n(e.center[i],null,0,e.left.length+i);e.right.forEach((i,d)=>n(i,"right",e.rightOffsets[d],e.left.length+e.center.length+d)),J=o,_=t.offsetX;let l=(e.centerOffsets[Math.min(t.end,e.center.length)]??0)-(e.centerOffsets[Math.min(t.start,e.center.length)]??0);zt=Math.max(0,e.centerWidth-t.offsetX-l),O.style.minWidth=`${e.totalWidth+Q}px`;}let ft=26;function nr(){let e=a.getColumnLayout(),t=a.getVirtualWindow().columns,o=[...e.left,...e.center.slice(t.start,Math.min(t.end,e.center.length)),...e.right],n=datagridCore.bandDepth(o);if(at.textContent="",j.style.top=`${n*ft}px`,T.style.setProperty("--dg-band-offset",`${n*ft}px`),n===0)return;datagridCore.computeHeaderBands(o,n).forEach((i,d)=>{let s=p("kanuni-datagrid-band-row");if(s.style.top=`${d*ft}px`,s.style.height=`${ft}px`,Q>0){let c=p("kanuni-datagrid-band-cell kanuni-datagrid-band-cell--spacer kanuni-datagrid-band-cell--pinned");c.style.width=`${Q}px`,c.style.flex="none",c.style.insetInlineStart="0px",s.appendChild(c);}if(_>0){let c=p("kanuni-datagrid-spacer");c.style.width=`${_}px`,c.style.flex="none",s.appendChild(c);}for(let c of i){let r=p(`kanuni-datagrid-band-cell${c.spacer?" kanuni-datagrid-band-cell--spacer":""}`);if(r.style.width=`${c.width}px`,r.style.flex="none",!c.spacer){if(c.columnIds.length>0){let f=datagridCore.bandPath(a.getColumnModel().getDef(c.columnIds[0])).slice(0,d+1);if(f.length===d+1&&a.isBandCollapsible(f)){let b=a.isBandCollapsed(f),h=document.createElement("button");h.type="button",h.className="kanuni-datagrid-band-toggle",h.setAttribute("aria-expanded",String(!b));let w=b?m.expandDetails??"Expand":m.collapseDetails??"Collapse";h.setAttribute("aria-label",w),h.title=w,h.appendChild(cl(b)),h.addEventListener("click",k=>{k.stopPropagation(),a.toggleBand(f);}),r.appendChild(h);}}let u=p("kanuni-datagrid-band-label","span");u.textContent=c.label,r.appendChild(u);}s.appendChild(r);}at.appendChild(s);});}let ze=null,gt=null;function mt(e,t){gt&&gt!==e&&gt.classList.remove("kanuni-datagrid-header-cell--drop-before","kanuni-datagrid-header-cell--drop-after"),gt=e,e&&(e.classList.toggle("kanuni-datagrid-header-cell--drop-before",t==="before"),e.classList.toggle("kanuni-datagrid-header-cell--drop-after",t==="after"));}function _n(){if(!ze)return;let e=a.getSelectedCount(),t=a.getVisibleCount(),o=t>0&&e>=t;ze.checked=o,ze.indeterminate=!o&&e>0;}function Xt(){nr();let e=a.getSort(),t=new Map(e.map((n,l)=>[n.columnId,{direction:n.direction,order:l}]));if(j.textContent="",ze=null,P){let n=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-rownum-cell");n.setAttribute("role","columnheader"),n.style.width=`${Je}px`,n.style.flex="none",n.style.insetInlineStart="0px",j.appendChild(n);}if(st){let n=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-detail-toggle-cell");n.setAttribute("role","columnheader"),n.setAttribute("aria-label",m.detailsAria),n.style.width=`${Ze}px`,n.style.flex="none",n.style.insetInlineStart=`${Vt}px`,j.appendChild(n);}if(dt){let n=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-select-cell");n.setAttribute("role","columnheader"),n.style.width=`${Lt}px`,n.style.flex="none",n.style.insetInlineStart=`${Gn}px`;let l=document.createElement("input");l.type="checkbox",l.setAttribute("aria-label",m.selectAllRows),l.addEventListener("change",()=>{a.getSelectedCount()>0?a.clearSelection():a.selectAll();}),n.appendChild(l),j.appendChild(n),ze=l,_n();}let o=false;for(let n of J){if(!n.pinned&&!o){if(_>0){let r=document.createElement("div");r.style.flex=`0 0 ${_}px`,j.appendChild(r);}o=true;}let l=Bo&&n.def.sortable!==false,i=t.get(n.id),d=p(`kanuni-datagrid-header-cell${l?" kanuni-datagrid-header-cell--sortable":""}${n.pinned?" kanuni-datagrid-header-cell--pinned":""}`);d.setAttribute("role","columnheader"),d.setAttribute("data-column-id",n.id),d.setAttribute("aria-sort",i?i.direction==="asc"?"ascending":"descending":"none");let s=n.def.headerTooltip;s&&(d.title=s),d.style.width=`${n.width}px`,d.style.flex="none",n.pinned==="left"&&(d.style.insetInlineStart=`${n.inset}px`),n.pinned==="right"&&(d.style.insetInlineEnd=`${n.inset}px`);let c=p("kanuni-datagrid-header-label","span");if(n.def.renderHeader){let r=n.def.renderHeader({column:n.def});typeof r=="string"?c.textContent=r:c.appendChild(r);}else c.textContent=n.def.headerName??n.id;if(d.appendChild(c),i){let r=p("kanuni-datagrid-sort-indicator","span");if(r.setAttribute("aria-hidden","true"),r.textContent=i.direction==="asc"?"\u25B2":"\u25BC",d.appendChild(r),e.length>1){let u=p("kanuni-datagrid-sort-order","span");u.setAttribute("aria-hidden","true"),u.textContent=String(i.order+1),d.appendChild(u);}}if(l){let r=n.id;d.addEventListener("click",u=>{a.toggleSort(r,u.shiftKey);});}if($t!==false){let r=n.id;d.addEventListener("contextmenu",u=>{u.preventDefault(),yr(r,{left:u.clientX,top:u.clientY});});}if(I&&n.def.filterable!==false){let r=document.createElement("button");r.type="button";let u=a.getColumnFilter(n.id)!==null;r.className=`kanuni-datagrid-filter-button${u?" kanuni-datagrid-filter-button--active":""}${Ho==="always"?" kanuni-datagrid-filter-button--pinned":""}`,r.setAttribute("aria-haspopup","dialog"),r.setAttribute("aria-label",`${n.def.headerName??n.id} filter`),r.appendChild(ul()),r.addEventListener("click",f=>{f.stopPropagation(),cr(n.id,r);}),d.appendChild(r);}if(te&&n.def.reorderable!==false&&(d.draggable=true,d.addEventListener("dragstart",r=>{r.dataTransfer?.setData("text/x-kanuni-column",n.id),r.dataTransfer&&(r.dataTransfer.effectAllowed="move");}),d.addEventListener("dragover",r=>{if(!r.dataTransfer?.types.includes("text/x-kanuni-column"))return;r.preventDefault();let u=d.getBoundingClientRect(),f=r.clientX<u.left+u.width/2;mt(d,f?"before":"after");}),d.addEventListener("dragleave",r=>{let u=r.relatedTarget;(!u||!d.contains(u))&&mt(null,"before");}),d.addEventListener("drop",r=>{mt(null,"before");let u=r.dataTransfer?.getData("text/x-kanuni-column");if(!u||u===n.id)return;r.preventDefault();let f=d.getBoundingClientRect();if(r.clientX<f.left+f.width/2)a.moveColumn(u,n.id);else {let h=J.findIndex(w=>w.id===n.id);a.moveColumn(u,J[h+1]?.id);}}),d.addEventListener("dragend",()=>mt(null,"before"))),Ae&&n.def.resizable!==false){let r=p("kanuni-datagrid-resize-handle","span");r.setAttribute("data-resize-handle",n.id),r.setAttribute("role","presentation"),r.addEventListener("click",u=>u.stopPropagation()),r.addEventListener("dblclick",u=>{u.stopPropagation(),vr(n.id);}),r.addEventListener("pointerdown",u=>{u.preventDefault(),u.stopPropagation();let f=u.clientX,b=n.width,h=getComputedStyle(d).direction==="rtl"?-1:1;d.draggable=false;let w=b,k=false,M=W=>{k=true,w=b+(W.clientX-f)*h,a.setColumnWidth(n.id,w,false);},H=()=>{window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",H),window.removeEventListener("pointercancel",H),k&&a.setColumnWidth(n.id,w,true),d.draggable=te&&n.def.reorderable!==false;};window.addEventListener("pointermove",M),window.addEventListener("pointerup",H),window.addEventListener("pointercancel",H);}),d.appendChild(r);}j.appendChild(d);}}let Vn=null,bt=null;function or(e){if(e===Vn)return;Vn=e;let t=[];for(let o=0;o<e.length;o++)e[o].kind!=="data"&&t.push(o);bt=t.length>0?t:null;}function rr(e){if(!bt)return e+1;let t=0,o=bt.length;for(;t<o;){let n=t+o>>1;bt[n]<=e?t=n+1:o=n;}return e+1-t}let qe=[];function Wn(e="data"){let t=p("kanuni-datagrid-row");if(t.setAttribute("role","row"),e==="panel"){let r=document.createElement("div");return r.setAttribute("role","gridcell"),r.setAttribute("aria-colindex","1"),t.appendChild(r),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,panelCell:r,epoch:ve}}if(e==="group"){let r=p("kanuni-datagrid-group-cell");r.setAttribute("role","gridcell"),r.setAttribute("aria-colindex","1");let u=p("kanuni-datagrid-group-twisty","span");u.setAttribute("aria-hidden","true");let f=p("kanuni-datagrid-group-caption","span"),b=p("kanuni-datagrid-group-label","span"),h=p("kanuni-datagrid-group-count","span"),w=p("kanuni-datagrid-group-aggregates","span");return r.append(u,f,b,h,w),t.appendChild(r),t.addEventListener("click",()=>{let k=t.getAttribute("data-group-key");k!==null&&a.toggleGroup(k);}),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,group:{cell:r,twisty:u,caption:f,label:b,count:h,aggregates:w},epoch:ve}}if(ut){let r=p("kanuni-datagrid-row-grip","span");r.setAttribute("aria-hidden","true"),r.title=m.dragToReorder??"Drag to reorder",r.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>',r.addEventListener("mouseenter",()=>{t.draggable=true;}),r.addEventListener("mouseleave",()=>{t.draggable=false;}),t.appendChild(r);}if(Gt)return {kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:ve};let o=null;P&&(o=p("kanuni-datagrid-cell kanuni-datagrid-cell--number kanuni-datagrid-cell--pinned kanuni-datagrid-rownum-cell"),o.setAttribute("role","gridcell"),o.style.width=`${Je}px`,o.style.flex="none",o.style.insetInlineStart="0px",t.appendChild(o));let n=null;if(st){let r=p("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-detail-toggle-cell");r.setAttribute("role","gridcell"),r.style.width=`${Ze}px`,r.style.flex="none",r.style.insetInlineStart=`${Vt}px`;let u=document.createElement("button");u.type="button",u.className="kanuni-datagrid-detail-toggle",u.tabIndex=-1,u.addEventListener("click",f=>{f.stopPropagation();let b=t.getAttribute("data-row-key");if(b===null)return;let h=a.getRows().find(w=>String(w.key)===b);h&&h.kind==="data"&&a.toggleDetail(h.key);}),u.addEventListener("mousedown",f=>f.stopPropagation()),r.appendChild(u),t.appendChild(r),n=u;}let l=null;if(dt){let r=p("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-select-cell");r.setAttribute("role","gridcell"),r.style.width=`${Lt}px`,r.style.flex="none",r.style.insetInlineStart=`${Gn}px`;let u=document.createElement("input");u.type="checkbox",u.tabIndex=-1;let f=()=>{let b=t.getAttribute("data-row-key");if(b===null)return;let h=a.getRows().find(w=>String(w.key)===b);h&&a.toggleRow(h.key);};r.addEventListener("mousedown",b=>b.stopPropagation()),r.addEventListener("click",b=>{b.target.tagName!=="INPUT"&&(b.stopPropagation(),f());}),u.addEventListener("change",f),u.addEventListener("click",b=>b.stopPropagation()),u.addEventListener("mousedown",b=>b.stopPropagation()),r.appendChild(u),t.appendChild(r),l=u;}let i=[],d=null,s=false;for(let r of J){!r.pinned&&!s&&(d=document.createElement("div"),d.style.flex=`0 0 ${_}px`,t.appendChild(d),s=true);let u=p(r.className);u.setAttribute("role","gridcell"),u.setAttribute("data-column-id",r.id),u.style.width=`${r.width}px`,u.style.flex="none",r.pinned==="left"&&(u.style.insetInlineStart=`${r.inset}px`),r.pinned==="right"&&(u.style.insetInlineEnd=`${r.inset}px`),t.appendChild(u),i.push({el:u,slot:r});}let c=document.createElement("div");return c.style.flex=`0 0 ${zt}px`,t.appendChild(c),{kind:e,root:t,cells:i,rowNumberCell:o,selectInput:l,detailToggle:n,leadingSpacer:d,trailingSpacer:c,epoch:ve}}let He="";function wt(e,t){if(He===""||t===""){e.textContent=t;return}let o=t.toLowerCase(),n=o.indexOf(He);if(n===-1){e.textContent=t;return}let l=[],i=0;for(;n!==-1;){n>i&&l.push(document.createTextNode(t.slice(i,n)));let d=document.createElement("mark");d.className="kanuni-datagrid-highlight",d.textContent=t.slice(n,n+He.length),l.push(d),i=n+He.length,n=o.indexOf(He,i);}i<t.length&&l.push(document.createTextNode(t.slice(i))),e.replaceChildren(...l);}function lr(e,t,o){let n=a.getColumnModel().getCellValue(o.data,t.id),l=t.def;if(l.renderCell){let d=l.renderCell({value:n,row:o.data,node:o,column:l});typeof d=="string"?e.textContent=d:e.replaceChildren(d);return}let i=datagridCore.lookupLabel(l,n);if(i!==null){wt(e,i);return}if(l.valueFormatter){let d=l.valueFormatter(n,o.data);wt(e,typeof d=="string"?d:String(d??""));return}if(l.dateFormat&&l.dataType==="date"){wt(e,datagridCore.formatDateValue(n,l.dateFormat));return}wt(e,n==null?"":String(n));}function zn(e,t,o){let n=e.root;if(n.setAttribute("aria-rowindex",String(o+2)),n.setAttribute("data-row-key",String(t.key)),t.kind==="detail"||t.kind==="editform"){let r=e.panelCell,u=t.kind==="detail";n.className=`kanuni-datagrid-row ${u?"kanuni-datagrid-detail-row":"kanuni-datagrid-editform-row"}`,n.style.height=`${t.height}px`,u?(n.setAttribute("data-detail-for",String(t.parentKey)),n.removeAttribute("data-editform-for")):(n.setAttribute("data-editform-for",t.parentKey===null?"":String(t.parentKey)),n.removeAttribute("data-detail-for")),r.className=u?"kanuni-datagrid-detail-cell":"kanuni-datagrid-editform-cell";let f=`${t.kind}:${String(t.key)}`;if(n.getAttribute("data-panel-for")!==f){n.setAttribute("data-panel-for",f);let b=u?Tn?.(t.data):t.parentKey===null?void 0:Ko?.(t.parentKey,t.data);r.textContent="",typeof b=="string"?r.textContent=b:b&&r.appendChild(b);}return}if(n.removeAttribute("data-panel-for"),n.removeAttribute("data-detail-for"),n.removeAttribute("data-editform-for"),t.kind==="filler"){n.style.display="none";return}n.style.display="",n.style.height=qn?"":`${a.getRowHeight()}px`,n.classList.toggle("kanuni-datagrid-row--odd",G&&o%2===1),n.classList.toggle("kanuni-datagrid-row--selected",a.isRowSelected(t.key));let l=a.getFocus();if(n.classList.toggle("kanuni-datagrid-row--focused",Cn&&l!==null&&l.rowKey===t.key),e.leadingSpacer&&(e.leadingSpacer.style.flex=`0 0 ${_}px`),e.trailingSpacer&&(e.trailingSpacer.style.flex=`0 0 ${zt}px`),ut){let r=xe!==null&&String(xe.key)===String(t.key);n.classList.toggle("kanuni-datagrid-row--drop-before",r&&xe.side==="before"),n.classList.toggle("kanuni-datagrid-row--drop-after",r&&xe.side==="after");}if(e.rowNumberCell&&(e.rowNumberCell.textContent=String(rr(o))),e.selectInput&&(e.selectInput.checked=a.isRowSelected(t.key),e.selectInput.setAttribute("aria-label",m.selectRowAria.replace("{row}",String(t.key)))),e.detailToggle&&t.kind==="data"){let r=a.isDetailExpanded(t.key);e.detailToggle.textContent=r?"\u25BE":"\u25B8",e.detailToggle.setAttribute("aria-expanded",String(r)),e.detailToggle.setAttribute("aria-label",r?m.collapseDetails:m.expandDetails);}if(t.kind==="group"&&e.group){let r=t;n.className=`kanuni-datagrid-row kanuni-datagrid-group-row kanuni-datagrid-group-row--level-${r.level}`,n.setAttribute("aria-expanded",String(r.expanded)),n.setAttribute("aria-level",String(r.level+1)),n.setAttribute("data-group-key",String(r.key)),n.setAttribute("data-group-level",String(r.level)),e.group.cell.style.paddingLeft=r.level>0?`${8+r.level*18}px`:"",e.group.twisty.textContent=r.expanded?"\u25BE":"\u25B8";let u=a.getColumnModel().getDef(r.columnId),f=u?.headerName??r.columnId;e.group.caption.textContent=`${f}:`,e.group.label.textContent=datagridCore.lookupLabel(u,r.value)??(r.label===""?m.filterBlank:r.label),e.group.count.textContent=`(${r.count})`,e.group.aggregates.textContent="";let b=r.aggregates??null;if(b)for(let h of a.getSummaryDefs()){let w=p("kanuni-datagrid-group-aggregate","span"),k=p("kanuni-datagrid-group-aggregate-label","span"),M=a.getColumnModel().getDef(h.columnId);k.textContent=`${datagridCore.summaryLabel(h,Bt)} ${M?.headerName??h.columnId}:`,w.append(k,` ${datagridCore.formatSummaryValue(h,b[datagridCore.summaryKey(h.columnId,h.type)],M)}`),e.group.aggregates.appendChild(w);}return}if(t.kind!=="data"){for(let{el:r}of e.cells)r.textContent="";return}if(n.className=n.className.includes("group-row")?"kanuni-datagrid-row":n.className,Gt){let r=ut?1:0,u=Gt({row:t.data,node:t,rowIndex:o,selected:a.isRowSelected(t.key),focused:Cn&&l!==null&&l.rowKey===t.key});if(u instanceof Node&&n.childNodes.length===r+1&&n.childNodes[r]===u)return;for(;n.childNodes.length>r;)n.removeChild(n.lastChild);typeof u=="string"?n.appendChild(document.createTextNode(u)):u&&n.appendChild(u);return}let i=l!==null&&l.rowKey===t.key?l.columnId:null,d=t.tree,s=d?(()=>{let r=a.getColumnLayout();return (r.left[0]??r.center[0]??r.right[0])?.state.id??null})():null,c=a.hasCellSpans();for(let{el:r,slot:u}of e.cells){let f=Pt||Kt?{node:t,columnId:u.id,rowIndex:o,columnIndex:u.visualIndex,value:a.getColumnModel().getCellValue(t.data,u.id)}:null,b=f&&Pt?Pt(f):void 0,h=false;if(b!==void 0?b instanceof Node&&r.childNodes.length===1&&r.firstChild===b?h=true:typeof b=="string"?r.textContent=b:r.replaceChildren(b):(lr(r,u,t),d&&u.id===s&&dr(r,t,d)),c&&!h){let S=ir(o,u.id);r.classList.toggle("kanuni-datagrid-cell--span",S?.kind==="draw"),r.classList.toggle("kanuni-datagrid-cell--span-covered",S?.kind==="covered");let pe=b!==void 0;if(S?.kind==="covered"&&i!==u.id&&!pe)r.replaceChildren();else if(S?.kind==="draw"){let K=p("kanuni-datagrid-span-box");K.style.height=`${S.height}px`,K.append(...Array.from(r.childNodes)),r.appendChild(K);}}else c||r.classList.remove("kanuni-datagrid-cell--span","kanuni-datagrid-cell--span-covered");if(be){let S=!!Ut(t.key,u.id,t.data);r.classList.toggle("kanuni-datagrid-cell--noted",S);}r.id=`${g.gridId}-cell-${String(t.key)}-${u.id}`,r.classList.toggle("kanuni-datagrid-cell--focused",i===u.id);let w=r.getAttribute("data-slot-classes");if(w)for(let S of w.split(" "))r.classList.remove(S);let k=f&&Kt?Kt(f):void 0,M=u.def.cellClassName,W=[typeof M=="function"?M({value:a.getColumnModel().getCellValue(t.data,u.id),row:t.data,node:t,column:u.def}):M,k].filter(Boolean).join(" ")||void 0;if(W){for(let S of W.split(" "))r.classList.add(S);r.setAttribute("data-slot-classes",W);}else w&&r.removeAttribute("data-slot-classes");}}let qn=g.columns.some(e=>e.autoHeight);function ar(){if(!qn)return;let e=a.getVirtualWindow(),t=a.getRows(),o=new Map(a.getMeasuredRowHeights()),n=false;for(let l=e.rows.start;l<e.rows.end&&l<t.length;l++){let i=t[l];if(!i||i.kind!=="data")continue;let d=l-e.rows.start,s=qe[d]?.root;if(!s)continue;let c=s.getBoundingClientRect().height;c>0&&o.get(i.key)!==c&&(o.set(i.key,c),n=true);}n&&a.setMeasuredRowHeights(o);}let ht={start:0,end:0};function ir(e,t){let o=a.getCellSpans(t);if(o.length===0)return null;let n=datagridCore.spanRoleAt(o,e,ht.start,ht.end);if(!n)return null;if(n.role==="covered")return {kind:"covered"};let l=a.getRowOffset(n.drawStart);return {kind:"draw",height:a.getRowOffset(n.drawEnd)+a.getRowHeightAt(n.drawEnd)-l}}function dr(e,t,o){let n=p(`kanuni-datagrid-tree-cell${o.ancestorOnly?" kanuni-datagrid-tree-cell--ancestor":""}`,"span");if(n.style.paddingInlineStart=`${o.depth*16}px`,o.hasChildren){let l=document.createElement("button");l.type="button",l.className="kanuni-datagrid-tree-toggle",l.setAttribute("data-tree-toggle",""),l.setAttribute("aria-expanded",String(o.expanded)),l.setAttribute("aria-label",o.expanded?m.collapseDetails:m.expandDetails),l.textContent=o.expanded?"\u25BE":"\u25B8",l.addEventListener("mousedown",i=>i.stopPropagation()),l.addEventListener("click",i=>{i.stopPropagation(),a.toggleTreeRow(t.key);}),n.appendChild(l);}else n.appendChild(p("kanuni-datagrid-tree-toggle kanuni-datagrid-tree-toggle--leaf","span"));n.append(...Array.from(e.childNodes)),e.appendChild(n);}let Ut=(e,t,o)=>be?be.get({rowKey:e,columnId:t,row:o})??null:null,Xn=null,se=Ot?p("kanuni-datagrid-overlay"):null;se&&(se.style.position="absolute",se.style.inset="0",se.style.pointerEvents="none",F.appendChild(se));function sr(){if(!Ot||!se)return;let e=Ot();e!==Xn&&(Xn=e,e?se.replaceChildren(e):se.replaceChildren());}function Yt(){sr();let e=a.getVirtualWindow(),t=a.getRows(),o=We?{...e,rows:{...e.rows,start:0,end:t.length,offsetY:0,totalHeight:0}}:e;or(t),F.style.height=`${o.rows.totalHeight}px`,D.style.transform=`translateY(${o.rows.offsetY}px)`,He=Fo?a.getSearchText().trim().toLowerCase():"";let n=Math.max(0,Math.min(o.rows.end,t.length)-o.rows.start);for(ht.start=o.rows.start,ht.end=Math.min(o.rows.end,t.length)-1;qe.length>n;)qe.pop().root.remove();for(let l=0;l<n;l++){let i=o.rows.start+l,d=t[i],s=d.kind==="data"?"data":d.kind==="group"?"group":d.kind==="detail"||d.kind==="editform"?"panel":"stub",c=qe[l];if(!c||c.epoch!==ve||c.kind!==s){let r=Wn(s);c?D.replaceChild(r.root,c.root):D.appendChild(r.root),qe[l]=r,c=r;}zn(c,d,i);}ar();}let Un=datagridCore.createDebouncedCommit(Oo??(a.isRemote()?200:0));function jt(){if(!Me)return;if(De.textContent="",Q>0){let t=p("kanuni-datagrid-filter-cell kanuni-datagrid-filter-cell--pinned");t.style.width=`${Q}px`,t.style.flex="none",t.style.insetInlineStart="0px",De.appendChild(t);}let e=false;for(let t of J){if(!t.pinned&&!e){if(_>0){let n=p("kanuni-datagrid-spacer");n.style.width=`${_}px`,n.style.flex="none",De.appendChild(n);}e=true;}let o=p(`kanuni-datagrid-filter-cell${t.pinned?" kanuni-datagrid-filter-cell--pinned":""}`);if(o.style.width=`${t.width}px`,o.style.flex="none",t.pinned==="left"&&(o.style.insetInlineStart=`${t.inset}px`),t.pinned==="right"&&(o.style.insetInlineEnd=`${t.inset}px`),t.def.filterable!==false){let n=document.createElement("input");n.className="kanuni-datagrid-filter-input",n.setAttribute("aria-label",`${t.def.headerName??t.id} filter`);let l=()=>a.setColumnFilter(t.id,datagridCore.parseFilterInput(t.id,n.value,t.def.dataType),datagridCore.FILTER_PART_ROW);n.addEventListener("input",()=>Un.schedule(t.id,l));let i=()=>{Un.cancel(t.id),l();};n.addEventListener("keydown",d=>{d.key==="Enter"&&i();}),n.addEventListener("blur",i),o.appendChild(n);}De.appendChild(o);}}let Qt=()=>{};function ur(){if(!Ln)return;let e=document.createElement("input");e.type="search",e.className="kanuni-datagrid-toolbar-search",e.placeholder=m.toolbarSearch,e.setAttribute("aria-label",m.toolbarSearch);let t=null;e.addEventListener("input",()=>{t&&clearTimeout(t),t=setTimeout(()=>a.setSearchText(e.value),qo);});let o=p("kanuni-datagrid-toolbar-spacer"),n=null;if(Po){let r=document.createElement("button");r.type="button",r.textContent=m.toolbarColumns??"Columns",r.setAttribute("aria-haspopup","dialog"),r.addEventListener("click",()=>{let u=r.getBoundingClientRect();to({left:u.left,top:u.bottom+2});}),n=r;}let l=ie&&Wo,i=ie&&zo,d=document.createElement("button");d.type="button",d.className="kanuni-datagrid-toolbar-icon-button",d.setAttribute("aria-haspopup","menu"),d.setAttribute("aria-label",m.exportMenu),d.setAttribute("data-testid","dg-export-menu"),d.title=m.exportMenu,d.appendChild(sl());let s=null;d.addEventListener("click",()=>{if(s)return;let r=d.getBoundingClientRect();ke({left:r.right-190,top:r.bottom+2},u=>{u.setAttribute("role","menu"),u.setAttribute("aria-label",m.exportMenu);let f=[{kind:"csv",label:m.exportCsv,testId:"dg-export-csv",on:true},{kind:"excel",label:m.exportExcel,testId:"dg-export-excel",on:l},{kind:"excel-selected",label:m.exportExcelSelected,testId:"dg-export-excel-selected",on:l},{kind:"pdf",label:m.exportPdf,testId:"dg-export-pdf",on:i}];for(let b of f){if(!b.on)continue;let h=document.createElement("button");h.type="button",h.className="kanuni-datagrid-menu-item",h.setAttribute("role","menuitem"),h.setAttribute("data-testid",b.testId),h.textContent=b.label,b.kind==="excel-selected"&&a.getSelectedCount()===0&&(h.disabled=true),h.addEventListener("click",()=>{s=b.kind,d.disabled=true,V(),mn(a,b.kind).then(w=>{s=null,d.disabled=false,w.error&&Qt(w.error);});}),u.appendChild(h);}},"kanuni-datagrid-filter-popup kanuni-datagrid-export-menu");});for(let r of Vo??[])he.append(r);he.append(e,o),n&&he.append(n),he.append(d);for(let r of _o??[])he.append(r);let c=p("kanuni-datagrid-toolbar-error","span");c.setAttribute("role","alert"),c.style.display="none",he.append(c),Qt=r=>{c.textContent=r,c.style.display="";};}function Yn(){if(!Ne.isConnected)return;let e=a.getPage(),t=a.getPageCount();Ne.textContent="";let o=(s,c,r,u)=>{let f=document.createElement("button");return f.type="button",f.textContent=s,f.setAttribute("aria-label",c),f.disabled=r,f.addEventListener("click",u),f},n=p("kanuni-datagrid-pager-buttons"),l=e<=0,i=e>=t-1;n.append(o("\xAB",m.pagerFirst??"First",l,()=>a.setPage(0)),o("\u2039",m.pagerPrevious??"Previous",l,()=>a.setPage(e-1)));let d=p("kanuni-datagrid-pager-current","span");d.textContent=`${e+1} / ${t}`,n.append(d,o("\u203A",m.pagerNext??"Next",i,()=>a.setPage(e+1)),o("\xBB",m.pagerLast??"Last",i,()=>a.setPage(t-1))),Ne.appendChild(n);}function Jt(){if(!ne)return;let e=a.getColumnLayout(),t=a.getSummaries(),o=new Map(a.getSummaryDefs().map(l=>[l.columnId,l]));if($.textContent="",$.style.width=`${e.totalWidth+Q}px`,Q>0){let l=p("kanuni-datagrid-footer-cell kanuni-datagrid-footer-cell--pinned");l.style.width=`${Q}px`,l.style.insetInlineStart="0px",$.appendChild(l);}let n=false;for(let l of J){if(!l.pinned&&!n){if(_>0){let c=p("kanuni-datagrid-spacer");c.style.width=`${_}px`,$.appendChild(c);}n=true;}let i=o.get(l.id),d=l.def.dataType==="number",s=p(`kanuni-datagrid-footer-cell${l.pinned?" kanuni-datagrid-footer-cell--pinned":""}${d?" kanuni-datagrid-footer-cell--number":""}${i?" kanuni-datagrid-footer-cell--active":""}`);if(s.setAttribute("role","gridcell"),s.setAttribute("data-column-id",l.id),s.setAttribute("data-summary-type",i?.type??""),s.style.width=`${l.width}px`,l.pinned==="left"&&(s.style.insetInlineStart=`${l.inset}px`),l.pinned==="right"&&(s.style.insetInlineEnd=`${l.inset}px`),i){s.title=`${datagridCore.summaryLabel(i,Bt)} \u2014 ${l.def.headerName??l.id}`;let c=p("kanuni-datagrid-footer-value","span");c.textContent=datagridCore.formatSummaryValue(i,t[datagridCore.summaryKey(i.columnId,i.type)],l.def),s.appendChild(c);}else {let c=p("kanuni-datagrid-footer-hint","span");c.textContent=Ke?"\xB7":"",s.appendChild(c);}$.appendChild(s);}}function Zt(){let e=(t,o,n)=>{t.textContent="",o.forEach((l,i)=>{let d=Wn("data");zn(d,{kind:"data",key:`__pinned-${n}-${i}`,sourceIndex:-1,data:l},i),d.root.classList.remove("kanuni-datagrid-row--odd"),d.root.removeAttribute("aria-rowindex"),d.rowNumberCell&&(d.rowNumberCell.textContent=""),t.appendChild(d.root);});};Se.length>0&&e(Oe,Se,"top"),Le.length>0&&e(Mn,Le,"bottom");}let Ge=null,en=null;function V(){en?.(),en=null,Ge?.remove(),Ge=null;}function jn(e,t){let n=e.getBoundingClientRect();n.width===0&&n.height===0||(e.style.left=`${Math.max(8,Math.min(t.left,window.innerWidth-n.width-8))}px`,e.style.top=`${Math.max(8,Math.min(t.top,window.innerHeight-n.height-8))}px`);}function ke(e,t,o="kanuni-datagrid-filter-popup"){V(),Ge=p(`${hn(g)} kanuni-datagrid-portal`);let n=p(o);n.style.position="fixed",n.style.left=`${e.left}px`,n.style.top=`${e.top}px`,n.style.zIndex="1000",t(n),Ge.appendChild(n),document.body.appendChild(Ge),jn(n,e);let l=Ge,i=s=>{l.contains(s.target)||V();},d=s=>{s.key==="Escape"&&V();};document.addEventListener("pointerdown",i,true),document.addEventListener("keydown",d,true),en=()=>{document.removeEventListener("pointerdown",i,true),document.removeEventListener("keydown",d,true);};}let Ee=25,Qn=8,Jn=new Map,Zn=0;function cr(e,t){let o=t.getBoundingClientRect(),n=++Zn;ke({left:o.left,top:o.bottom+2},l=>{let i=[],d=true,s=new Set,c=false,r=0,u="",f=[],b=null,h="",w=[],k=document.createElement("input");k.type="search",k.className="kanuni-datagrid-filter-search",k.placeholder=m.search,k.setAttribute("data-testid","dg-filter-search");let M=p("kanuni-datagrid-filter-actions"),H=document.createElement("button");H.type="button",H.textContent=m.filterSelectAll,H.addEventListener("click",()=>{c=true,s=new Set(i.map(C=>C.label)),Z();});let W=document.createElement("button");W.type="button",W.textContent=m.clear,W.addEventListener("click",()=>{c=true,s=new Set,Z();}),M.append(H,W);let S=p("kanuni-datagrid-filter-list");S.setAttribute("role","listbox"),S.setAttribute("aria-multiselectable","true");let pe=document.createElement("div");pe.style.position="relative";let K=document.createElement("div");pe.appendChild(K),S.appendChild(pe);let Tt=()=>{let C=u.trim().toLowerCase();if(!C){f=i;return}b||(b=i.map(L=>L.label.toLowerCase())),f=h!==""&&C.includes(h)?w.filter(L=>L.label.toLowerCase().includes(C)):i.filter((L,N)=>b[N].includes(C)),h=C,w=f;},Z=()=>{if(S.setAttribute("aria-busy",String(d)),S.setAttribute("aria-setsize",String(f.length)),d){pe.style.height="",K.textContent="";let U=p("kanuni-datagrid-filter-empty");U.textContent=m.filterLoading,K.appendChild(U);return}if(f.length===0){pe.style.height="",K.style.transform="",K.textContent="";let U=p("kanuni-datagrid-filter-empty");U.textContent=m.filterNoMatch,K.appendChild(U);return}let C=S.clientHeight||240,L=Math.max(0,Math.floor(S.scrollTop/Ee)-Qn),N=Math.ceil(C/Ee)+Qn*2,X=Math.min(L,Math.max(0,f.length-1)),Nr=Math.min(f.length,X+N);pe.style.height=`${f.length*Ee}px`,K.style.transform=`translateY(${X*Ee}px)`,K.textContent="";for(let U=X;U<Nr;U++){let Pe=f[U],ee=p("kanuni-datagrid-filter-item");ee.setAttribute("role","option"),ee.setAttribute("aria-selected",String(s.has(Pe.label))),ee.tabIndex=0,ee.setAttribute("data-value",Pe.label),ee.setAttribute("data-index",String(U)),U===r&&ee.classList.add("kanuni-datagrid-filter-item--active");let Ye=document.createElement("input");Ye.type="checkbox",Ye.readOnly=true,Ye.checked=s.has(Pe.label),Ye.tabIndex=-1;let Ro=document.createElement("span");Ro.textContent=Pe.label===""?m.filterBlank:Pe.label,ee.append(Ye,Ro),ee.addEventListener("click",()=>vo(Pe.label)),ee.addEventListener("focus",()=>{r=U;}),K.appendChild(ee);}},vo=C=>{c=true,s.has(C)?s.delete(C):s.add(C);for(let L of K.querySelectorAll(".kanuni-datagrid-filter-item")){if(L.getAttribute("data-value")!==C)continue;L.setAttribute("aria-selected",String(s.has(C)));let N=L.querySelector("input");N&&(N.checked=s.has(C));}};S.addEventListener("scroll",()=>{Jn.set(e,S.scrollTop),Z();}),k.addEventListener("input",()=>{u=k.value,r=0,Tt(),Z();});let fn=C=>{if(f.length===0)return;r=Math.max(0,Math.min(f.length-1,C));let L=r*Ee,N=S.clientHeight||240;L<S.scrollTop?S.scrollTop=L:L+Ee>S.scrollTop+N&&(S.scrollTop=L+Ee-N),Z(),l.querySelector(`.kanuni-datagrid-filter-item[data-index="${r}"]`)?.focus();},ko=()=>{if(d)return;let C;if(s.size===i.length)C=null;else {let L=s.has(""),N=i.filter(X=>X.label!==""&&s.has(X.label));N.length===0?C=L?{columnId:e,operator:"isnull"}:null:L?C={logic:"or",nodes:[{columnId:e,operator:"in",value:N.map(X=>X.value)},{columnId:e,operator:"isnull"}]}:C={columnId:e,operator:"in",value:N.map(X=>X.value)};}a.setColumnFilter(e,C,datagridCore.FILTER_PART_SET),V();};l.tabIndex=-1,l.addEventListener("keydown",C=>{let L=C.target===k;if(C.key==="Backspace"&&!L){C.preventDefault(),k.focus(),u=u.slice(0,-1),k.value=u,r=0,Tt(),Z();return}if(C.key==="ArrowDown"){C.preventDefault(),fn(L?0:r+1);return}if(C.key==="ArrowUp"){C.preventDefault(),fn(L?f.length-1:r-1);return}if(!L&&(C.key==="Home"||C.key==="End")){C.preventDefault(),fn(C.key==="Home"?0:f.length-1);return}if(C.key===" "&&!L){C.preventDefault();let N=f[r];N&&vo(N.label);return}if(C.key==="Enter"){C.preventDefault(),ko();return}!L&&C.key.length===1&&C.key!==" "&&!C.ctrlKey&&!C.metaKey&&!C.altKey&&(C.preventDefault(),k.focus(),u+=C.key,k.value=u,r=0,Tt(),Z());});let Eo=p("kanuni-datagrid-filter-footer"),St=document.createElement("button");St.type="button",St.textContent=m.cancel,St.addEventListener("click",()=>V());let fe=document.createElement("button");fe.type="button",fe.className="kanuni-datagrid-filter-primary",fe.setAttribute("data-testid","dg-filter-apply"),fe.textContent=m.apply,fe.disabled=true,fe.addEventListener("click",ko),Eo.append(St,fe),l.append(k,M,S,Eo),Z(),queueMicrotask(()=>{k.isConnected&&k.focus();}),a.getDistinctValueSetAsync(e).then(C=>{if(Zn!==n||!l.isConnected)return;i=C.entries,b=null,h="",d=false,fe.disabled=false;let L=datagridCore.selectedLabelsFromFilter(a.getColumnFilter(e,datagridCore.FILTER_PART_SET)??a.getColumnFilter(e,datagridCore.FILTER_PART_DEFAULT),i);L?(c=true,s=new Set(L)):c||(s=new Set(i.map(X=>X.label))),Tt();let N=Jn.get(e);Z(),N&&(S.scrollTop=N,Z());});});}function yt(e={}){let t=a.getClipboardText(e);a.notifyClipboardGesture("copy",t?t.split(`
2
+ `).length:0,()=>!t||!navigator.clipboard?.writeText?false:(navigator.clipboard.writeText(t).catch(()=>{}),true));}function pr(e){if(nt===false)return [];let t=nt===true?{}:nt,o=[],n=i=>{e&&o.length===0&&o.push({separator:true,id:"__dg-sep"}),o.push(i);};t.copy!==false&&n({id:"__dg-copy",label:m.menuCopy,shortcut:`${gr}C`,onSelect:()=>yt()}),t.copyWithHeaders!==false&&n({id:"__dg-copy-headers",label:m.menuCopyWithHeaders,onSelect:()=>yt({includeHeaders:true})}),t.copyWithGroupHeaders!==false&&fr()&&n({id:"__dg-copy-group-headers",label:m.menuCopyWithGroupHeaders,onSelect:()=>yt({includeGroupHeaders:true})});let l=t.export===false?[]:Array.isArray(t.export)?t.export:["csv","excel","excel-selected","pdf"];if(l.length>0){let i=a.getSelectedCount()===0,d={csv:m.exportCsv,excel:m.exportExcel,"excel-selected":m.exportExcelSelected,pdf:m.exportPdf};n({id:"__dg-export",label:m.menuExport,items:l.map(s=>({id:`__dg-export-${s}`,label:d[s],disabled:s==="excel-selected"&&i,onSelect:()=>{mn(a,s).then(c=>{c.error&&Qt(c.error);});}}))});}return o}function fr(){let e=a.getColumnModel();return a.getVisualColumnIds().some(t=>{let o=e.getDef(t)?.band;return typeof o=="string"?o!=="":Array.isArray(o)&&o.length>0})}let gr=/Mac|iPhone|iPad|iPod/.test(navigator.platform??"")?"\u2318":"Ctrl+";function tn(e,t,o){let n=null,l=()=>{n?.remove(),n=null;};t.forEach((i,d)=>{if(i.separator){let f=p("kanuni-datagrid-menu-separator");f.setAttribute("role","separator"),e.appendChild(f);return}let s=p("kanuni-datagrid-menu-row"),c=document.createElement("button");if(c.type="button",c.className="kanuni-datagrid-menu-item",c.setAttribute("role","menuitem"),c.setAttribute("data-item-index",String(d)),i.disabled&&(c.disabled=true),i.icon!==void 0){let f=p("kanuni-datagrid-menu-icon","span");typeof i.icon=="string"?f.textContent=i.icon:f.appendChild(i.icon),c.appendChild(f);}let r=p("kanuni-datagrid-menu-label","span");if(r.textContent=i.label??"",c.appendChild(r),i.shortcut){let f=p("kanuni-datagrid-menu-shortcut","span");f.textContent=i.shortcut,c.appendChild(f);}let u=i.items??[];if(u.length>0){let f=p("kanuni-datagrid-menu-caret","span");f.textContent="\u203A",c.appendChild(f),c.setAttribute("aria-haspopup","menu"),c.setAttribute("aria-expanded","false");let b=()=>{l();let h=p("kanuni-datagrid-context-menu kanuni-datagrid-submenu");h.setAttribute("role","menu");let w=c.getBoundingClientRect();h.style.left=`${w.right}px`,h.style.top=`${Math.max(0,w.top-4)}px`;for(let k of u){if(k.separator){let W=p("kanuni-datagrid-menu-separator");W.setAttribute("role","separator"),h.appendChild(W);continue}let M=document.createElement("button");M.type="button",M.className="kanuni-datagrid-menu-item",M.setAttribute("role","menuitem"),k.disabled&&(M.disabled=true);let H=p("kanuni-datagrid-menu-label","span");H.textContent=k.label??"",M.appendChild(H),M.addEventListener("click",()=>{k.onSelect?.(o),V();}),h.appendChild(M);}e.parentElement?.appendChild(h),jn(h,{left:w.right,top:Math.max(0,w.top-4)}),n=h,c.setAttribute("aria-expanded","true");};c.addEventListener("mouseenter",b),c.addEventListener("click",b);}else c.addEventListener("mouseenter",l),c.addEventListener("click",()=>{i.onSelect?.(o),V();});s.appendChild(c),e.appendChild(s);});}let eo=e=>{let o=e.target.closest(".kanuni-datagrid-row");if(!o||o.classList.contains("kanuni-datagrid-group-row"))return;let n=ue(e);if(n?.columnId&&a.notifyCell("cellContextMenu",n.node,n.rowIndex,n.columnId),!ot&&!nt||!n||n.node.kind!=="data")return;e.preventDefault(),a.isRowSelected(n.node.key)||a.handleRowClick(n.node.key,{}),n.columnId&&a.focusCell(n.node.key,n.columnId);let l={row:n.node.data,node:n.node,rowIndex:n.rowIndex,columnId:n.columnId,selectedKeys:a.getSelectedKeys()},i=(typeof ot=="function"?ot(l):ot)??[],d=[...i,...mr(l,i.length>0)],s=pr(d.length>0);d.length===0&&s.length===0||ke({left:e.clientX,top:e.clientY},c=>{c.setAttribute("role","menu"),tn(c,[...d,...s],l);},"kanuni-datagrid-context-menu");};function mr(e,t){if(!be?.onChange||be.menu===false)return [];let o=e.columnId;if(!o)return [];let n=e.node.key,l=Ut(n,o,e.row),i=[];return t&&i.push({separator:true,id:"__note-sep"}),i.push({id:"__note-edit",label:l?m.editNote:m.addNote,onSelect:()=>br(n,o,e.row,l??"")}),l&&i.push({id:"__note-delete",label:m.deleteNote,onSelect:()=>be.onChange?.({rowKey:n,columnId:o,row:e.row,text:null})}),i}function br(e,t,o,n){let i=(T.querySelector(`[data-row-key="${CSS.escape(String(e))}"] [data-column-id="${CSS.escape(t)}"]`)??T).getBoundingClientRect();queueMicrotask(()=>{ke({left:i.left,top:i.bottom+2},d=>{d.setAttribute("aria-label",m.noteEditorAria);let s=document.createElement("textarea");s.className="kanuni-datagrid-note-input",s.rows=4,s.value=n,s.setAttribute("aria-label",m.noteEditorAria),s.placeholder=m.notePlaceholder,s.setAttribute("data-testid","dg-note-input");let c=()=>{let b=s.value.trim();V(),be?.onChange?.({rowKey:e,columnId:t,row:o,text:b===""?null:b});};s.addEventListener("keydown",b=>{b.key==="Enter"&&(b.ctrlKey||b.metaKey)&&(b.preventDefault(),c()),b.key==="Escape"&&(b.preventDefault(),V());});let r=p("kanuni-datagrid-note-actions"),u=document.createElement("button");u.type="button",u.className="kanuni-datagrid-note-cancel",u.textContent=m.cancel,u.addEventListener("click",()=>V());let f=document.createElement("button");f.type="button",f.className="kanuni-datagrid-note-save",f.setAttribute("data-testid","dg-note-save"),f.textContent=m.save,f.addEventListener("click",c),r.append(u,f),d.append(s,r),queueMicrotask(()=>{s.focus(),s.select();});},"kanuni-datagrid-filter-popup kanuni-datagrid-note-editor");});}function wr(e){Ce!==e&&(Ce=e,e?(T.insertBefore(B,R),rn()):B.remove());}function hr(e){if(ne!==e){if(ne=e,e){if(we){let t=Se.length>0?Oe:F;O.insertBefore($,t);}else O.append($);Jt();}else $.remove();Oe.style.setProperty("--dg-pinned-gap",String(_t+(ne&&we?1:0)));}}function nn(e){let t=bn(T,e);t!==null&&a.setColumnWidth(e,t);}function yr(e,t){let o=a.getColumnModel().getDef(e),n={columnId:e,headerName:o?.headerName??e},l=gn(n,{controller:a,t:m,groupPanelVisible:Ce,footerVisible:ne,onToggleGroupPanel:()=>wr(!Ce),onToggleFooter:()=>hr(!ne),onOpenFieldChooser:()=>to(t),onBestFit:nn,onBestFitAll:()=>{for(let d of a.getColumnStates())d.visible&&nn(d.id);},maxGroupLevels:ie?Number.POSITIVE_INFINITY:1}),i=typeof $t=="function"?$t(n,l):l;i.length!==0&&ke(t,d=>{d.setAttribute("role","menu"),tn(d,i,n);},"kanuni-datagrid-context-menu");}function Cr(e,t){let o=a.getColumnModel().getDef(e),n=a.getColumnSummary(e),l={columnId:e,headerName:o?.headerName??o?.field??e},i=[{id:"none",label:m.noTotal,disabled:n===null,onSelect:()=>a.setColumnSummary(e,null)},{id:"sep",separator:true},...datagridCore.allowedSummaryTypes(o?.dataType).map(d=>({id:d,label:Bt[d],disabled:n?.type===d,onSelect:()=>a.setColumnSummary(e,d)}))];ke(t,d=>{d.setAttribute("role","menu"),tn(d,i,l);},"kanuni-datagrid-context-menu");}function to(e){ke(e,t=>{let o=p("kanuni-datagrid-filter-list");for(let n of a.getColumnStates()){let l=document.createElement("label");l.className="kanuni-datagrid-filter-item";let i=document.createElement("input");i.type="checkbox",i.checked=n.visible,i.addEventListener("change",()=>{a.setColumnVisible(n.id,i.checked);});let d=document.createElement("span"),s=a.getColumnModel().getDef(n.id);d.textContent=s?.headerName??n.id,l.append(i,d),o.appendChild(l);}t.appendChild(o);},"kanuni-datagrid-filter-popup kanuni-datagrid-column-chooser");}let Re=null,on=null,Ct=e=>{B.classList.toggle("kanuni-datagrid-group-panel--over",e);};function no(e,t,o){let n=a.getGroupLevels();if(e===t)return;let l=n.filter(s=>s!==e),i=l.indexOf(t);if(i<0)return;let d=o==="before"?i:i+1;on=e,a.groupBy([...l.slice(0,d),e,...l.slice(d)]);}function oo(e,t){let o=a.getGroupLevels(),n=o.indexOf(e),l=n+t;n<0||l<0||l>=o.length||no(e,o[l],t===-1?"before":"after");}function ro(e,t){if(!e)return;let o=a.getGroupLevels();if(o.includes(e))return;let n=ie?Number.POSITIVE_INFINITY:1;if(o.length>=n){a.groupBy([...o.slice(0,n-1),e]);return}let l=t??o.length;a.groupBy([...o.slice(0,l),e,...o.slice(l)]);}function rn(){if(!Ce)return;B.textContent="";let e=a.getGroupLevels();if(e.length===0){let c=p("kanuni-datagrid-group-panel-hint","span");c.textContent=m.groupPanelHint??"Drag a column header here to group by it",B.appendChild(c);return}let t=c=>a.getColumnModel().getDef(c)?.headerName??c,o=p("kanuni-datagrid-group-levels"),n=(c,r)=>c<r.top+r.height/2?"before":"after",l=(c,r)=>{for(let u of B.querySelectorAll(".kanuni-datagrid-group-level"))u.classList.remove("kanuni-datagrid-group-level--drop-before","kanuni-datagrid-group-level--drop-after");c&&r&&c.classList.add(`kanuni-datagrid-group-level--drop-${r}`);};e.forEach((c,r)=>{let u=p("kanuni-datagrid-group-level");u.style.setProperty("--dg-group-level",String(r)),u.setAttribute("data-group-level",String(r));let f=p("kanuni-datagrid-group-chip");if(f.setAttribute("role","button"),f.tabIndex=0,e.length>1&&(f.draggable=true),f.setAttribute("aria-label",`${datagridCore.fillText(m.groupLevelAria,{n:r+1})}: ${t(c)}`),f.addEventListener("dragstart",w=>{Re=c,w.dataTransfer&&(w.dataTransfer.effectAllowed="move",w.dataTransfer.setData("text/x-kanuni-column",c));}),f.addEventListener("dragend",()=>{Re=null,l(null,null);}),f.addEventListener("keydown",w=>{let k=w.ctrlKey||w.metaKey;k&&(w.key==="ArrowUp"||w.key==="ArrowLeft")?(w.preventDefault(),oo(c,-1)):k&&(w.key==="ArrowDown"||w.key==="ArrowRight")?(w.preventDefault(),oo(c,1)):(w.key==="Delete"||w.key==="Backspace")&&(w.preventDefault(),a.groupBy(e.filter(M=>M!==c)));}),u.addEventListener("dragover",w=>{!Re&&!(w.dataTransfer?.types.includes("text/x-kanuni-column")??false)||(w.preventDefault(),w.stopPropagation(),l(u,n(w.clientY,u.getBoundingClientRect())));}),u.addEventListener("drop",w=>{w.preventDefault(),w.stopPropagation();let k=n(w.clientY,u.getBoundingClientRect());l(null,null),Ct(false);let M=Re;if(Re=null,M){no(M,c,k);return}let H=w.dataTransfer?.getData("text/x-kanuni-column");H&&ro(H,k==="before"?r:r+1);}),e.length>1){let w=p("kanuni-datagrid-group-chip-level","span");w.textContent=String(r+1),f.appendChild(w);}let b=document.createElement("span");b.textContent=t(c);let h=document.createElement("button");h.type="button",h.setAttribute("aria-label",datagridCore.fillText(m.groupRemoveAria,{column:t(c)})),h.textContent="\xD7",h.addEventListener("click",()=>{a.groupBy(e.filter(w=>w!==c));}),h.draggable=false,f.append(b,h),u.appendChild(f),o.appendChild(u),on===c&&(on=null,queueMicrotask(()=>f.focus()));}),B.appendChild(o);let i=p("kanuni-datagrid-group-panel-actions"),d=document.createElement("button");d.type="button",d.textContent="Expand all",d.addEventListener("click",()=>a.expandAllGroups());let s=document.createElement("button");s.type="button",s.textContent="Collapse all",s.addEventListener("click",()=>a.collapseAllGroups()),i.append(d,s),B.appendChild(i);}if(Ce){let e=t=>t.dataTransfer?.types.includes("text/x-kanuni-column")??false;B.addEventListener("dragover",t=>{e(t)&&(t.preventDefault(),Ct(true));}),B.addEventListener("dragleave",t=>{let o=t.relatedTarget;o&&B.contains(o)||Ct(false);}),B.addEventListener("drop",t=>{Ct(false);let o=t.dataTransfer?.getData("text/x-kanuni-column");if(o){if(t.preventDefault(),Re){Re=null;return}ro(o);}});}let lo="";function ao(){if(!vn)return;let e=[datagridCore.fillText(m.announceRows,{n:a.getVisibleCount()})],t=a.getSort();if(t.length>0){let l=t.map(i=>{let d=a.getColumnModel().getDef(i.columnId),s=d?.headerName??d?.field??i.columnId,c=i.direction==="desc"?m.announceDescending:m.announceAscending;return `${s} ${c}`}).join(", ");e.push(datagridCore.fillText(m.announceSortedBy,{columns:l}));}let o=a.getSelectedCount();o>0&&e.push(datagridCore.fillText(m.announceSelected,{n:o}));let n=e.join(", ");n!==lo&&(lo=n,Be.textContent=n);}function io(){if(!Dt)return;ye.textContent="";let e=datagridCore.describeFilter(a.getEffectiveFilter(),a.getColumnModel(),{...kn,labels:{...datagridCore.filterLabels(m),...kn?.labels}});if(!e&&Dt!=="always"){ye.style.display="none";return}ye.style.display="";let t=a.isFilterEnabled();ye.className=`kanuni-datagrid-filter-panel${t?"":" kanuni-datagrid-filter-panel--suspended"}`;let o=document.createElement("button");o.type="button",o.className="kanuni-datagrid-filter-panel-clear",o.title=m.filterRemove,o.setAttribute("aria-label",m.filterRemove),o.setAttribute("data-testid","dg-filter-panel-clear"),o.disabled=e===null,o.textContent="\xD7",o.addEventListener("click",()=>{a.setFilter(null),a.clearColumnFilters(),a.setFilterEnabled(true);});let n=document.createElement("input");n.type="checkbox",n.className="kanuni-datagrid-filter-panel-toggle",n.checked=t,n.disabled=e===null,n.title=m.filterToggle,n.setAttribute("aria-label",m.filterToggle),n.setAttribute("data-testid","dg-filter-panel-toggle"),n.addEventListener("change",()=>a.setFilterEnabled(n.checked));let l=p("kanuni-datagrid-filter-panel-text","span");if(l.setAttribute("data-testid","dg-filter-panel-text"),l.textContent=e??m.filterNone,e&&(l.title=e),ye.append(o,n,l),yn){let i=document.createElement("button");i.type="button",i.className="kanuni-datagrid-filter-panel-builder",i.title=m.filterEditBuilder,i.setAttribute("aria-label",m.filterEditBuilder),i.setAttribute("data-testid","dg-filter-panel-builder"),i.textContent="\u25BE",i.addEventListener("click",yn),ye.appendChild(i);}}let ln=new Set,xr=a.events.on("cellsFlashed",({rowKeys:e,columnIds:t,duration:o})=>{let n=e.length?e.map(s=>`[data-row-key="${CSS.escape(String(s))}"]`).join(","):".kanuni-datagrid-row",l=t.length?t.map(s=>`[data-column-id="${CSS.escape(s)}"]`).join(","):"[data-column-id]",i=[];D.querySelectorAll(n).forEach(s=>{s.querySelectorAll(l).forEach(c=>i.push(c));});for(let s of i)s.classList.remove("kanuni-datagrid-cell--flash");T.offsetWidth;for(let s of i)s.classList.add("kanuni-datagrid-cell--flash");let d=setTimeout(()=>{for(let s of i)s.classList.remove("kanuni-datagrid-cell--flash");ln.delete(d);},o);ln.add(d);});function ue(e){let t=e.target,o=t.closest(".kanuni-datagrid-row");if(!o||!D.contains(o))return null;let n=o.getAttribute("data-row-key");if(n===null)return null;let l=a.getRows(),i=l.findIndex(s=>String(s.key)===n);if(i===-1)return null;let d=t.closest(".kanuni-datagrid-cell")?.getAttribute("data-column-id")??null;return {node:l[i],rowIndex:i,columnId:d}}let so=e=>{let t=ue(e);t&&(Go?.(t.node),a.notifyRow("rowClicked",t.node,t.rowIndex),t.columnId&&a.notifyCell("cellClicked",t.node,t.rowIndex,t.columnId));},uo=e=>{let t=ue(e);if(t){if(Rn){let o=pn(t);o&&Rn(o);}It?.(t.node),a.notifyRow("rowDoubleClicked",t.node,t.rowIndex),t.columnId&&a.notifyCell("cellDoubleClicked",t.node,t.rowIndex,t.columnId);}};D.addEventListener("click",so),D.addEventListener("dblclick",uo);function vr(e){let t=0,o=j.querySelector(`[data-column-id="${CSS.escape(e)}"]`);o&&(t=o.scrollWidth),D.querySelectorAll(`[data-column-id="${CSS.escape(e)}"]`).forEach(n=>{n.scrollWidth>t&&(t=n.scrollWidth);}),t>0&&a.setColumnWidth(e,t+12,true);}function kr(){if(I)for(let e of j.querySelectorAll(".kanuni-datagrid-filter-button")){let t=e.parentElement?.getAttribute("data-column-id");t&&e.classList.toggle("kanuni-datagrid-filter-button--active",a.getColumnFilter(t)!==null);}}let an=false,co=false,$e=null;function xt(){$e!==null&&(clearTimeout($e),$e=null);}function vt(e){Fe.style.display=e?"":"none";}function kt(){let e=a.getOverlay();if(it.style.display=e==="noRows"?"":"none",Ft===false){xt(),vt(false);return}if(!(e==="loading"&&(an||!co))){xt(),vt(false);return}if(an||An<=0){xt(),vt(true);return}$e!==null||Fe.style.display===""||($e=setTimeout(()=>{$e=null,q||vt(true);},An));}let po=false,dn=false,sn=false,un=false,q=false;function Er(){if(dn=false,!q){if(sn)sn=false,un&&(un=false,ve++),qt(),Xt(),jt(),Zt();else {let e=_;qt(),_!==e&&(ve++,Xt(),jt(),Zt());}Yt(),_n(),Jt(),Yn(),kr(),rn(),io(),ao(),kt();}}function cn(e){q||(e&&(sn=true),!dn&&(dn=true,queueMicrotask(Er)));}let Rr=[...xn?[a.events.on("focusedRowChanged",e=>xn({rowKey:e.rowKey,row:e.row}))]:[],...ol.map(e=>a.events.on(e,()=>cn(true))),...rl.map(e=>a.events.on(e,()=>{un=true;})),...ll.map(e=>a.events.on(e,()=>cn(false))),a.events.on("overlayChanged",e=>{an=e.manual===true&&e.overlay==="loading",q||kt();}),a.events.on("busyChanged",e=>{co=e.background===true,q||kt();}),a.events.on("paginationChanged",()=>{q||cn(false);}),a.events.on("scrollRequested",e=>{if(q)return;e.scrollTop!==void 0&&(R.scrollTop=e.scrollTop),e.scrollLeft!==void 0&&(R.scrollLeft=e.scrollLeft),a.setScroll(R.scrollTop,Math.abs(R.scrollLeft));let t=e.scrollTop;t===void 0||Math.abs(R.scrollTop-t)<=1||setTimeout(()=>{q||Math.abs(R.scrollTop-t)<=1||(R.scrollTop=t,a.setScroll(R.scrollTop,Math.abs(R.scrollLeft)));},0);}),...Ht==="fitGrid"?[a.events.on("gridSizeChanged",()=>a.sizeColumnsToFit())]:[],...Ht==="fitCells"?[a.events.on("firstDataRendered",()=>{q||po||(po=true,queueMicrotask(()=>{if(!q)for(let e of a.getColumnStates())e.visible&&nn(e.id);}));})]:[]];Ht==="fitGrid"&&a.sizeColumnsToFit();function pn(e){if(!e.columnId||e.node.kind!=="data")return null;let t=J.find(o=>o.id===e.columnId);return t?{node:e.node,columnId:e.columnId,rowIndex:e.rowIndex,columnIndex:t.visualIndex,value:a.getColumnModel().getCellValue(e.node.data,t.id)}:null}let fo=e=>{let t=e.target;if(En){let s=ue(e),c=s?pn(s):null;c&&En(c,e);}let o=t.closest(".kanuni-datagrid-row");if(!o||o.classList.contains("kanuni-datagrid-group-row"))return;let n=o.getAttribute("data-row-key");if(n===null)return;let l=a.getRows().find(s=>String(s.key)===n);if(!l||l.kind!=="data")return;a.handleRowClick(l.key,{ctrlKey:e.ctrlKey||dt&&!e.shiftKey,metaKey:e.metaKey,shiftKey:e.shiftKey});let i=t.closest(".kanuni-datagrid-cell"),d=i?J.find(s=>i.id.endsWith(`-${s.id}`))?.id:void 0;d&&a.focusCell(l.key,d);},go=e=>{if(!lt)return;let o=e.target.closest(".kanuni-datagrid-cell");if(!o||!D.contains(o)||e.relatedTarget?.closest?.(".kanuni-datagrid-cell")===o)return;let l=ue(e),i=l?pn(l):null;i&&lt(i,e);};D.addEventListener("mousedown",fo),D.addEventListener("contextmenu",eo),lt&&D.addEventListener("mouseover",go),ut&&(F.addEventListener("dragstart",Qo),F.addEventListener("dragover",Jo),F.addEventListener("drop",Zo),F.addEventListener("dragend",er),F.addEventListener("dragleave",tr)),T.tabIndex=0;let mo=e=>{let t=e.target;if(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)return;let o=datagridCore.resolveGridCommand({key:e.key,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,altKey:e.altKey});if(!o)return;if(o.type==="copy"){yt();return}if(o.type==="activate"){if(It){let i=a.getFocus(),d=i?a.getRows().find(s=>s.key===i.rowKey):void 0;d&&It(d);}o.preventDefault&&e.preventDefault();return}a.executeCommand(o),o.preventDefault&&e.preventDefault();let n=a.getFocusIndices();if(n){let d=a.getColumnLayout().center.findIndex(c=>c.state.id===a.getFocus()?.columnId),s=a.ensureVisible(n.rowIndex,d===-1?void 0:d);s&&(s.scrollTop!==void 0&&(R.scrollTop=s.scrollTop),s.scrollLeft!==void 0&&(R.scrollLeft=s.scrollLeft),a.setScroll(R.scrollTop,Math.abs(R.scrollLeft)));}let l=a.getFocus();T.setAttribute("aria-activedescendant",l?`${g.gridId}-cell-${String(l.rowKey)}-${l.columnId}`:"");};T.addEventListener("keydown",mo);let Tr=Sn?datagridCore.attachStateStoring(a,Sn):null,Sr=typeof me=="object"?me.delay??400:400,Lr=me!==false&&!(typeof me=="object"&&me.enabled===false),Ar=typeof me=="object"?me.showOnTruncation!==false:true,Xe=null,Et=null;function Ue(){Et&&clearTimeout(Et),Et=null,Xe?.remove(),Xe=null;}let Mr=e=>e.scrollWidth>e.clientWidth+1||e.scrollHeight>e.clientHeight+1;function Dr(e){let o=e.closest(".kanuni-datagrid-row")?.getAttribute("data-row-key"),n=J.find(s=>e.id.endsWith(`-${s.id}`));if(!o||!n)return null;let l=a.getRows().find(s=>String(s.key)===o);if(!l||l.kind!=="data")return null;let i=n.def,d=Ut(l.key,n.id,l.data);if(d)return d;if(typeof i.tooltip=="function")return i.tooltip({value:a.getColumnModel().getCellValue(l.data,n.id),row:l.data,node:l,column:i})??null;if(typeof i.tooltip=="string")return i.tooltip;if(i.tooltipField){let s=l.data[i.tooltipField];return s==null?null:String(s)}return Ar&&Mr(e)?e.textContent??null:null}let bo=e=>{if(!Lr)return;Ue();let t=e.target.closest(".kanuni-datagrid-cell");!t||!D.contains(t)||(Et=setTimeout(()=>{let o=Dr(t);if(!o)return;let n=t.getBoundingClientRect();Xe=p(`${hn(g)} kanuni-datagrid-portal`);let l=p("kanuni-datagrid-tooltip");l.setAttribute("role","tooltip"),l.textContent=o,l.style.position="fixed",l.style.left=`${n.left}px`,l.style.top=`${n.bottom+4}px`,l.style.zIndex="1001",Xe.appendChild(l),document.body.appendChild(Xe);},Sr));},wo=()=>Ue();T.addEventListener("pointerover",bo),T.addEventListener("pointerout",wo),R.addEventListener("scroll",Ue,{passive:true});let ho=()=>{if(a.setScroll(R.scrollTop,Math.abs(R.scrollLeft)),ce)for(let e of yo())e.scroller.scrollLeft!==R.scrollLeft&&(e.scroller.scrollLeft=R.scrollLeft);};R.addEventListener("scroll",ho,{passive:true});let ce=null,yo=()=>{if(!Y||!ce)return [];let e=Qe.get(Y);return e?[...e].filter(t=>t!==ce):[]},Co=null;if(Y){ce={controller:a,scroller:R};let e=Qe.get(Y)??new Set;e.add(ce),Qe.set(Y,e),Co=a.events.on("columnStateChanged",()=>{if(wn.has(Y))return;let t=yo();if(t.length===0)return;let o=a.getColumnStates();wn.add(Y);try{for(let n of t)n.controller.applyColumnStates(o);}finally{wn.delete(Y);}});}let xo=()=>{a.setViewportSize(R.clientWidth,R.clientHeight),R.style.setProperty("--dg-viewport-width",`${R.clientWidth}px`);let e=F.getBoundingClientRect(),t=O.getBoundingClientRect();a.setChromeOffsets(e.top-t.top,t.bottom-e.bottom),datagridCore.calibrateMaxScrollOffset(R,a);};xo();let Rt=null;return typeof ResizeObserver<"u"&&(Rt=new ResizeObserver(xo),Rt.observe(R),Rt.observe(O)),qt(),Xt(),jt(),ur(),Zt(),Yt(),Jt(),Yn(),rn(),io(),ao(),kt(),Ve?.always&&Wt(true),{controller:a,element:T,setData:e=>a.setData(e),setColumns:e=>a.setColumns(e),destroy:()=>{if(!q){if(q=true,Rr.forEach(e=>e()),Rt?.disconnect(),Bn?.(),We&&(We=false,Te--,Te<=0&&(Te=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),Co?.(),Y&&ce){let e=Qe.get(Y);e?.delete(ce),e&&e.size===0&&Qe.delete(Y),ce=null;}R.removeEventListener("scroll",ho),D.removeEventListener("mousedown",fo),D.removeEventListener("contextmenu",eo),lt&&D.removeEventListener("mouseover",go),D.removeEventListener("click",so),D.removeEventListener("dblclick",uo),xr(),xt();for(let e of ln)clearTimeout(e);T.removeEventListener("keydown",mo),T.removeEventListener("pointerover",bo),T.removeEventListener("pointerout",wo),R.removeEventListener("scroll",Ue),Ue(),Tr?.(),V(),a.dispose(),T.remove();}}}}Object.defineProperty(exports,"DENSITY_ROW_HEIGHT",{enumerable:true,get:function(){return datagridCore.DENSITY_ROW_HEIGHT}});Object.defineProperty(exports,"THEME_ROW_HEIGHT",{enumerable:true,get:function(){return datagridCore.THEME_ROW_HEIGHT}});Object.defineProperty(exports,"presetRowHeight",{enumerable:true,get:function(){return datagridCore.presetRowHeight}});exports.CHECKBOX_COLUMN_WIDTH=Lt;exports.DETAIL_COLUMN_WIDTH=Ze;exports.PRINT_MAX_ROWS=Io;exports.ROW_DRAG_MIME=At;exports.ROW_NUMBER_COLUMN_WIDTH=Je;exports.buildHeaderMenu=gn;exports.createGrid=fl;exports.measureBestFitWidth=bn;
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { GridRowData, DataGridController, GridDictionary, RowNode, GridColumnDef, DataGridCoreConfig, GridTheme, GridPalette, GridDensity, DescribeFilterOptions, RowKey, StateStoringConfig } from '@kanunilabs/datagrid-core';
1
+ import { GridRowData, DataGridController, GridDictionary, RowNode, GridColumnDef, DataGridCoreConfig, GridTheme, GridPalette, GridDensity, DescribeFilterOptions, RowKey, StateStoringConfig, InferColumnsOptions } from '@kanunilabs/datagrid-core';
2
2
  export { DENSITY_ROW_HEIGHT, DataGridController, GridColumnDef, GridDensity, GridRowData, GridTheme, RowKey, RowNode, SortDescriptor, THEME_ROW_HEIGHT, presetRowHeight } from '@kanunilabs/datagrid-core';
3
3
 
4
4
  /** What a header menu is opened against — the React shape, verbatim. */
@@ -23,6 +23,9 @@ interface HeaderMenuDeps<TRow = GridRowData> {
23
23
  }
24
24
  declare function buildHeaderMenu<TRow = GridRowData>(context: HeaderMenuContext, deps: HeaderMenuDeps<TRow>): GridMenuItem<HeaderMenuContext>[];
25
25
 
26
+ /** Formats an export menu can offer. */
27
+ type ExportKind = 'csv' | 'excel' | 'excel-selected' | 'pdf';
28
+
26
29
  /** Same value as the React renderer's lead column. */
27
30
  declare const ROW_NUMBER_COLUMN_WIDTH = 60;
28
31
  /** Same value as the React renderer's CHECKBOX_COLUMN_WIDTH. */
@@ -94,6 +97,30 @@ interface RowTemplateContext<TRow> {
94
97
  focused: boolean;
95
98
  }
96
99
  /** The React `GridMenuItem`, DOM-flavoured: `icon` is a string or a Node. */
100
+ /**
101
+ * Which built-in entries the cell menu offers — the React `CellMenuOptions`.
102
+ *
103
+ * The vanilla menu used to be a boolean that always drew exactly two entries
104
+ * (Copy, Copy with headers), so an app passing this object got the two
105
+ * defaults and silently lost the rest (audit J3, 2026-08-25).
106
+ */
107
+ interface CellMenuOptions {
108
+ /** Copy the selected cells, or the selected rows when there is no range. */
109
+ copy?: boolean;
110
+ /** Copy with a column-header line above the values. */
111
+ copyWithHeaders?: boolean;
112
+ /**
113
+ * Copy with the BAND caption rows above the header line. Hidden on a grid
114
+ * with no bands, where it would produce exactly `copyWithHeaders`.
115
+ */
116
+ copyWithGroupHeaders?: boolean;
117
+ /**
118
+ * Export submenu. `true` offers every format the grid can write; an array
119
+ * picks which, in the order given. Excel and PDF ride on optional peers, so
120
+ * a click can fail — the failure is SAID, naming the missing package.
121
+ */
122
+ export?: boolean | ExportKind[];
123
+ }
97
124
  interface GridMenuItem<TContext = unknown> {
98
125
  /** Stable key; falls back to the index when omitted. */
99
126
  id?: string;
@@ -170,7 +197,7 @@ interface CellRenderContext<TRow = GridRowData> {
170
197
  * API and its injection surface.
171
198
  */
172
199
  /**
173
- * What a column's own editor is handed {M} the React `EditorRenderContext`,
200
+ * What a column's own editor is handed — the React `EditorRenderContext`,
174
201
  * DOM-typed. Same commit/cancel handles the built-in editor uses, so a custom
175
202
  * control is a PEER of it rather than something bolted on beside it.
176
203
  *
@@ -183,7 +210,7 @@ interface CellRenderContext<TRow = GridRowData> {
183
210
  interface VanillaEditorRenderContext<TRow = GridRowData> {
184
211
  /** Current (uncommitted) editor value. */
185
212
  value: unknown;
186
- /** The row with pending edits applied {M} what a cascading list should read. */
213
+ /** The row with pending edits applied — what a cascading list should read. */
187
214
  row: TRow;
188
215
  columnId: string;
189
216
  /** Validation message for `value` at build time, or null. */
@@ -197,14 +224,14 @@ interface VanillaEditorRenderContext<TRow = GridRowData> {
197
224
  type VanillaColumnDef<TRow = GridRowData> = GridColumnDef<TRow> & {
198
225
  renderCell?: (ctx: CellRenderContext<TRow>) => string | Node;
199
226
  /**
200
- * Replace this column's cell editor outright {M} the React `renderEditor`,
227
+ * Replace this column's cell editor outright — the React `renderEditor`,
201
228
  * DOM-typed. Enterprise: `createGrid` never edits, so a Community grid
202
229
  * ignores this the way it ignores every other editing option.
203
230
  *
204
231
  * Return the control itself (an `<input>`, a fragment, a whole widget). The
205
232
  * grid focuses it, routes Escape/Tab around it and tears it down; everything
206
233
  * inside is yours. Call `ctx.commit()` when the value should be written and
207
- * `ctx.cancel()` to abandon {M} the same two doors the built-in editor uses,
234
+ * `ctx.cancel()` to abandon — the same two doors the built-in editor uses,
208
235
  * so undo/redo, batch mode and validation behave identically.
209
236
  */
210
237
  renderEditor?: (ctx: VanillaEditorRenderContext<TRow>) => Node;
@@ -223,6 +250,21 @@ type VanillaColumnDef<TRow = GridRowData> = GridColumnDef<TRow> & {
223
250
  tooltip?: string | ((ctx: CellRenderContext<TRow>) => string | null | undefined);
224
251
  /** Read the tooltip from another field of the row. `tooltip` wins. */
225
252
  tooltipField?: string;
253
+ /**
254
+ * Extra class(es) on every cell of this column — a monospace SKU column, a
255
+ * status tint. The React column extension, unchanged: a function form gives
256
+ * per-VALUE classes without a whole cell renderer.
257
+ *
258
+ * Applied ALONGSIDE the Enterprise `getCellClassName` slot rather than
259
+ * instead of it; both are diffed off the same attribute so a repaint never
260
+ * strips a flash pulse mid-animation.
261
+ */
262
+ cellClassName?: string | ((ctx: CellRenderContext<TRow>) => string | undefined);
263
+ /**
264
+ * Tooltip for this column's HEADER cell. Static by nature — a header has one
265
+ * value — which is why it is a string and not the cell tooltip's union.
266
+ */
267
+ headerTooltip?: string;
226
268
  /**
227
269
  * Let this column's text WRAP, and let the row grow to fit it. Only
228
270
  * RENDERED rows can be measured, so the scrollbar firms up as the user
@@ -444,7 +486,7 @@ interface CreateGridConfig<TRow = GridRowData> extends Omit<DataGridCoreConfig<T
444
486
  /** PDF entry on the export menu — Enterprise, same gate as `toolbarExcel`. */
445
487
  toolbarPdf?: boolean;
446
488
  /** Right-click menu with Copy / Copy with headers. Default true. */
447
- cellMenu?: boolean;
489
+ cellMenu?: boolean | CellMenuOptions;
448
490
  /**
449
491
  * App-defined right-click menu for data rows — the React `rowMenu` prop,
450
492
  * DOM-flavoured. A function receives the row that was clicked so the items
@@ -482,9 +524,33 @@ interface CreateGridConfig<TRow = GridRowData> extends Omit<DataGridCoreConfig<T
482
524
  printLayout?: boolean | PrintLayoutOptions;
483
525
  /** Persist and restore the view (sort, filters, widths…). Core's service. */
484
526
  stateStoring?: StateStoringConfig;
485
- /** Hover tooltips. `false` disables, a number overrides the 400ms delay. */
527
+ /**
528
+ * Tunes the columns derived from the data when `columns` is omitted:
529
+ * `sampleSize`, `include`, `exclude`, `humanizeHeaders`, `defaults`.
530
+ * `false` turns the derivation off and leaves the grid with no columns.
531
+ */
532
+ autoColumns?: boolean | InferColumnsOptions;
533
+ /**
534
+ * An absolutely-positioned layer over the viewport — the React
535
+ * `renderOverlay`, DOM-typed. Returns the node to show, or null for none.
536
+ *
537
+ * Called on every repaint like React's is; returning the SAME node twice
538
+ * leaves it mounted, so a layer that owns focus or an animation is not torn
539
+ * down underneath itself.
540
+ */
541
+ renderOverlay?: () => Node | null;
542
+ /**
543
+ * Hover tooltips. `false` disables everything, the truncation fallback
544
+ * included; the object form is the React `GridTooltipConfig`.
545
+ *
546
+ * `enabled: false` used to be read as "an object, so tooltips are on" and
547
+ * only its `delay` was honoured — the one spelling a developer reaches for
548
+ * to turn the feature off did nothing at all (audit J2, 2026-08-25).
549
+ */
486
550
  tooltip?: boolean | {
551
+ enabled?: boolean;
487
552
  delay?: number;
553
+ showOnTruncation?: boolean;
488
554
  };
489
555
  /** Drop strip above the grid: drag a header here to group by it. Reads
490
556
  * `grouping.panel` exactly like the React prop shape. */
@@ -535,4 +601,4 @@ declare function createGrid<TRow = GridRowData>(container: HTMLElement, config:
535
601
  */
536
602
  declare function measureBestFitWidth(root: HTMLElement, columnId: string): number | null;
537
603
 
538
- export { CHECKBOX_COLUMN_WIDTH, type CellRenderContext, type CellSlotContext, type CreateGridConfig, DETAIL_COLUMN_WIDTH, type GridApi, type GridMenuItem, type GridNotesConfig, type HeaderMenuContext, type HeaderMenuDeps, type NoteCellContext, PRINT_MAX_ROWS, type PrintLayoutOptions, ROW_DRAG_MIME, ROW_NUMBER_COLUMN_WIDTH, type RowDragConfig, type RowDragPayload, type RowDropEvent, type RowMenuContext, type RowReorderEvent, type VanillaColumnDef, type VanillaEditorRenderContext, buildHeaderMenu, createGrid, measureBestFitWidth };
604
+ export { CHECKBOX_COLUMN_WIDTH, type CellMenuOptions, type CellRenderContext, type CellSlotContext, type CreateGridConfig, DETAIL_COLUMN_WIDTH, type ExportKind, type GridApi, type GridMenuItem, type GridNotesConfig, type HeaderMenuContext, type HeaderMenuDeps, type NoteCellContext, PRINT_MAX_ROWS, type PrintLayoutOptions, ROW_DRAG_MIME, ROW_NUMBER_COLUMN_WIDTH, type RowDragConfig, type RowDragPayload, type RowDropEvent, type RowMenuContext, type RowReorderEvent, type RowTemplateContext, type VanillaColumnDef, type VanillaEditorRenderContext, buildHeaderMenu, createGrid, measureBestFitWidth };