@kanunilabs/datagrid 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +9 -1
  2. package/dist/datagrid.umd.js +8 -8
  3. package/dist/index.cjs +2 -2
  4. package/dist/index.d.cts +33 -3
  5. package/dist/index.d.ts +33 -3
  6. package/dist/index.js +2 -2
  7. package/dist/styles.css +157 -74
  8. package/dist/themes/all.css +1588 -0
  9. package/dist/themes/amber.css +41 -0
  10. package/dist/themes/aubergine.css +49 -0
  11. package/dist/themes/azure.css +41 -0
  12. package/dist/themes/burgundy.css +49 -0
  13. package/dist/themes/charcoal.css +49 -0
  14. package/dist/themes/contrast-dark.css +49 -0
  15. package/dist/themes/contrast-light.css +41 -0
  16. package/dist/themes/coral.css +41 -0
  17. package/dist/themes/corporate.css +41 -0
  18. package/dist/themes/deep-sea.css +49 -0
  19. package/dist/themes/editorial.css +41 -0
  20. package/dist/themes/ember.css +49 -0
  21. package/dist/themes/emerald.css +41 -0
  22. package/dist/themes/forest.css +49 -0
  23. package/dist/themes/glacier.css +41 -0
  24. package/dist/themes/graphite.css +49 -0
  25. package/dist/themes/indigo-night.css +49 -0
  26. package/dist/themes/indigo.css +41 -0
  27. package/dist/themes/ivory.css +41 -0
  28. package/dist/themes/lagoon.css +41 -0
  29. package/dist/themes/linen.css +41 -0
  30. package/dist/themes/midnight.css +49 -0
  31. package/dist/themes/mist.css +41 -0
  32. package/dist/themes/monochrome.css +41 -0
  33. package/dist/themes/onyx.css +49 -0
  34. package/dist/themes/orchid.css +41 -0
  35. package/dist/themes/porcelain.css +41 -0
  36. package/dist/themes/rose.css +41 -0
  37. package/dist/themes/sandstone.css +41 -0
  38. package/dist/themes/slate-night.css +49 -0
  39. package/dist/themes/slate.css +41 -0
  40. package/dist/themes/steel.css +49 -0
  41. package/dist/themes/stone.css +41 -0
  42. package/dist/themes/taupe.css +41 -0
  43. package/dist/themes/teal.css +41 -0
  44. package/dist/themes/terminal.css +49 -0
  45. package/package.json +8 -6
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var datagridCore=require('@kanunilabs/datagrid-core');function vn(C,m){let{controller:h,maxGroupLevels:R,t:v}=m,T=C.columnId,G=h.getColumnModel().getDef(T),O=h.getSort(),j=O.find(P=>P.columnId===T),de=h.getGroupLevels(),se=de.includes(T),dt=G?.sortable!==false,ue=h.getColumnStates().find(P=>P.id===T)?.pinned??null,ce=G?.groupable!==false,He=[{id:"sort-asc",label:v.sortAsc,disabled:!dt||j?.direction==="asc",onSelect:()=>h.setSort([{columnId:T,direction:"asc"}])},{id:"sort-desc",label:v.sortDesc,disabled:!dt||j?.direction==="desc",onSelect:()=>h.setSort([{columnId:T,direction:"desc"}])},{id:"sort-clear",label:v.clearSort,disabled:!j,onSelect:()=>h.setSort(O.filter(P=>P.columnId!==T))},{id:"sep-1",separator:true},{id:"group",label:se?v.ungroupColumn:v.groupByColumn,disabled:!ce,onSelect:()=>{se?h.groupBy(de.filter(P=>P!==T)):h.groupBy([...de,T].slice(-R));}},{id:"group-panel",label:m.groupPanelVisible?v.hideGroupPanel:v.showGroupPanel,onSelect:m.onToggleGroupPanel},{id:"footer",label:m.footerVisible?v.hideFooter:v.showFooter,onSelect:m.onToggleFooter},{id:"sep-2",separator:true},{id:"hide-column",label:v.hideColumn,disabled:h.getColumnStates().filter(P=>P.visible).length<=1,onSelect:()=>h.setColumnVisible(T,false)},{id:"field-chooser",label:v.fieldChooser,onSelect:m.onOpenFieldChooser},{id:"sep-3",separator:true},{id:"best-fit",label:v.bestFit,disabled:G?.resizable===false,onSelect:()=>m.onBestFit(T)},{id:"best-fit-all",label:v.bestFitAll,onSelect:m.onBestFitAll}],Ge=h.getColumnStates().filter(P=>P.visible&&P.pinned===ue).map(P=>P.id),re=Ge.indexOf(T),Pe=G?.reorderable!==false&&re>=0;return He.push({id:"sep-4",separator:true},{id:"move-left",label:v.moveLeft,disabled:!Pe||re<=0,onSelect:()=>h.moveColumn(T,Ge[re-1])},{id:"move-right",label:v.moveRight,disabled:!Pe||re<0||re>=Ge.length-1,onSelect:()=>h.moveColumn(T,Ge[re+2])},{id:"fixed-position",label:v.fixedPosition,items:[{id:"pin-left",label:v.pinLeft,disabled:ue==="left",onSelect:()=>h.setColumnPinned(T,"left")},{id:"pin-right",label:v.pinRight,disabled:ue==="right",onSelect:()=>h.setColumnPinned(T,"right")},{id:"pin-sticky",label:v.pinSticky,disabled:ue==="sticky",onSelect:()=>h.setColumnPinned(T,"sticky")}]},{id:"unpin",label:v.unpin,disabled:ue===null,onSelect:()=>h.setColumnPinned(T,null)}),He}async function En(C,m){try{let h=m==="csv"?await C.exportToCsv():m==="excel"?await C.exportToExcel():m==="excel-selected"?await C.exportToExcel({selectedOnly:!0}):await C.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 Oo=null;function qr(){return typeof document>"u"?null:(Oo??=document.createElement("canvas"),Oo.getContext("2d"))}function Fo(C){let m=getComputedStyle(C);return `${m.fontStyle} ${m.fontWeight} ${m.fontSize} ${m.fontFamily}`}function Xr(C){for(let m=C.firstElementChild;m;m=m.nextElementSibling)if(m.tagName!=="MARK")return true;return false}function Ur(C){let m=C.map(R=>[R.style.width,R.style.minWidth,R.style.maxWidth]);for(let R of C)R.style.width="max-content",R.style.minWidth="0",R.style.maxWidth="none";let h=0;for(let R of C){let v=Math.ceil(R.getBoundingClientRect().width);v>h&&(h=v);}return C.forEach((R,v)=>{[R.style.width,R.style.minWidth,R.style.maxWidth]=m[v];}),h}function Rn(C,m){let h=qr();if(!h)return null;let R=typeof CSS<"u"&&CSS.escape?CSS.escape(m):m.replace(/"/g,'\\"'),v=C.querySelector(`.kanuni-datagrid-header-cell[data-column-id="${R}"]`),T=C.querySelectorAll(`.kanuni-datagrid-cell[data-column-id="${R}"]`);if(!v&&T.length===0)return null;let G=0;if(v){let O=v.querySelector(".kanuni-datagrid-header-label")??v;h.font=Fo(O),G=h.measureText(O.textContent??"").width+44;}if(T.length>0){h.font=Fo(T[0]);let O=[];for(let j=0;j<T.length;j++){if(Xr(T[j])){O.push(T[j]);continue}let de=T[j].textContent??"";if(de==="")continue;let se=h.measureText(de).width+20;se>G&&(G=se);}O.length>0&&(G=Math.max(G,Ur(O)));}return G===0?null:Math.round(Math.min(640,Math.max(48,G)))}var lt=60,$t=36,at=28,Kt="application/x-kanuni-row",rt=new Map,An=new Set,Wo=5e3,Ie=0,yl=["columnStateChanged","sortChanged"],Cl=["columnStateChanged"],kl=["contentReady","viewportChanged","filterChanged","selectionChanged","focusChanged","summariesChanged","cellsRefreshed"],g=(C,m="div")=>{let h=document.createElement(m);return h.className=C,h},it="http://www.w3.org/2000/svg";function xl(C,m){let h=v=>{m&&console.warn(`[datagrid] ${v} is an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to use it.`);},R={...C};if(R.dataSource!=null&&!Array.isArray(R.dataSource))throw new Error("[datagrid] a server-side DataSource is an Enterprise feature. Pass an array to createGrid, or use createEnterpriseGrid from @kanunilabs/datagrid-enterprise.");if(R.columns?.some(v=>v.spanRows)&&(h("cell span/merge (spanRows) is"),R={...R,columns:R.columns.map(v=>v.spanRows?{...v,spanRows:void 0}:v)}),R.tree&&(h("tree data is"),delete R.tree),R.masterDetail&&(h("master-detail is"),delete R.masterDetail),R.grouping){let{groupBy:v,groupSummaries:T}=R.grouping,G=v==null?[]:typeof v=="string"?[v]:v;(G.length>1||T)&&(h("multi-level grouping and group summaries are"),R={...R,grouping:{...R.grouping,groupBy:G.slice(0,1),groupSummaries:false}});}return R}var vl={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:""},Ot=new Set;function El(C){for(let m of Object.keys(C)){let h=vl[m];h===void 0||h===""||Ot.has(m)||(Ot.add(m),console.warn(`[datagrid] \`${m}\` is a React-only option \u2014 ${h}.`));}}function Rl(){let C=document.createElementNS("http://www.w3.org/2000/svg","svg");C.setAttribute("width","14"),C.setAttribute("height","14"),C.setAttribute("viewBox","0 0 16 16"),C.setAttribute("aria-hidden","true"),C.setAttribute("focusable","false");let m=document.createElementNS("http://www.w3.org/2000/svg","path");return m.setAttribute("d","M8 1v8m0 0L5 6m3 3 3-3M2 11v2a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2"),m.setAttribute("fill","none"),m.setAttribute("stroke","currentColor"),m.setAttribute("stroke-width","1.5"),m.setAttribute("stroke-linecap","round"),m.setAttribute("stroke-linejoin","round"),C.appendChild(m),C}function Tl(){let C=document.createElementNS(it,"svg");C.setAttribute("width","11"),C.setAttribute("height","11"),C.setAttribute("viewBox","0 0 16 16"),C.setAttribute("aria-hidden","true"),C.setAttribute("focusable","false");let m=document.createElementNS(it,"path");return m.setAttribute("d","M1.5 2.5h13L9.5 8.6v4.3l-3 1.6V8.6L1.5 2.5Z"),m.setAttribute("fill","currentColor"),m.setAttribute("stroke","currentColor"),m.setAttribute("stroke-width","0.6"),m.setAttribute("stroke-linejoin","round"),C.appendChild(m),C}function Sl(C){let m=document.createElementNS(it,"svg");m.setAttribute("width","14"),m.setAttribute("height","14"),m.setAttribute("viewBox","0 0 16 16"),m.setAttribute("aria-hidden","true"),m.setAttribute("focusable","false");let h=document.createElementNS(it,"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"),m.appendChild(h);let R=v=>{let T=document.createElementNS(it,"path");T.setAttribute("d",v),T.setAttribute("fill","none"),T.setAttribute("stroke","currentColor"),T.setAttribute("stroke-width","1.3"),T.setAttribute("stroke-linecap","round"),m.appendChild(T);};return R("M5 8h6"),C&&R("M8 5v6"),m}function Ll(C,m){let h=C??(m==="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 Mn(C){let m="kanuni-datagrid-root";return C.dark&&(m+=" kanuni-datagrid-dark"),C.theme&&(m+=` kanuni-datagrid-theme-${C.theme}`),C.palette&&(m+=` kanuni-datagrid-palette-${C.palette}`),C.density&&(m+=` kanuni-datagrid-density-${C.density}`),m}function Al(C,m){let{theme:h,palette:R,density:v,dark:T,striped:G=true,rowNumbers:O=false,locale:j="en",footer:de=false,footerMenu:se=true,footerPosition:dt="bottom",notes:ue,pinnedTopRows:ce=[],pinnedBottomRows:He=[],resizable:Ge=true,reorderable:re=true,filterRow:Pe=false,headerFilter:P=false,filterIconMode:Vo="hover",filterPanel:Ft=false,onOpenFilterBuilder:Dn,focusedRow:Nn=false,focusedRowKey:Bt,onFocusedRowChanged:In,onRowClick:zo,onRowActivate:_t,autoSizeStrategy:Wt="none",renderRow:st,announcements:Hn=true,filterPanelLabels:Gn,showRowCount:qo=false,toolbarColumnChooser:Xo=false,cellMenu:ut=true,rowMenu:ct,headerMenu:Vt,rowDrag:Ce,alignedGrids:Q,printLayout:pt,renderCellContent:zt,getCellClassName:qt,onCellPointerDown:Pn,onCellPointerEnter:gt,onCellDoubleClick:$n,renderDetail:Kn,renderEditForm:Uo,enterpriseEdition:pe=false,stateStoring:On,tooltip:ke=true,renderOverlay:Xt,filterDebounce:Yo,toolbar:Fn=false,highlightSearch:jo=true,sortable:Qo=true,toolbarItemsAfter:Jo,toolbarItemsBefore:Zo,toolbarExcel:er=false,toolbarPdf:tr=false,searchDebounce:nr=200,...or}=m;El(m),qo&&!Ot.has("showRowCount:deprecated")&&(Ot.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(j),{emptyText:rr=w.noData,loadingText:lr=w.busy,loadingOverlay:Ut=true,...X}=or,Bn=typeof Ut=="number"?Ut:300,Yt=datagridCore.summaryTypeLabels(w),_n=datagridCore.datePeriodLabels(w);if((!X.columns||X.columns.length===0)&&m.autoColumns!==false){let e=Array.isArray(X.dataSource)?X.dataSource:[];X.columns=datagridCore.inferColumns(e,typeof m.autoColumns=="object"?m.autoColumns:{});}X.rowHeight===void 0&&(X.rowHeight=datagridCore.presetRowHeight(h,v,28));let ar=pe?X:xl(X,!!m.debugMode),xe=pe?ue:void 0;!pe&&ue&&m.debugMode&&console.warn("[datagrid] cell notes are an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to show them.");let l=new datagridCore.DataGridController(ar);l.setEnterpriseEdition(pe),Bt!=null&&l.focusRow(Bt);let L=g(Mn(m));L.style.height="100%",L.setAttribute("role","grid"),L.setAttribute("data-grid-id",m.gridId),h&&L.setAttribute("data-theme",h),L.style.setProperty("--dg-row-height",`${l.getRowHeight()}px`);let S=g("kanuni-datagrid-scroller"),F=g("kanuni-datagrid-canvas"),J=g("kanuni-datagrid-header");J.setAttribute("role","row");let B=g("kanuni-datagrid-rows");B.style.position="relative";let D=g("kanuni-datagrid-viewport");B.appendChild(D);let Ve=g("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--top"),Wn=g("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--bottom"),ge=g("kanuni-datagrid-sticky-groups");ge.setAttribute("aria-hidden","true");let Z=de,le=dt==="top",K=g(`kanuni-datagrid-footer-row kanuni-datagrid-footer-row--${le?"top":"bottom"}`);if(K.setAttribute("role","row"),K.setAttribute("aria-label",w.columnTotalsAria),se){let e=n=>{let t=n.target?.closest(".kanuni-datagrid-footer-cell")?.getAttribute("data-column-id");t&&(n.preventDefault(),Dr(t,{left:n.clientX,top:n.clientY}));};K.addEventListener("click",e),K.addEventListener("contextmenu",e);}let ft=g("kanuni-datagrid-bands-host");ft.style.display="contents";let ve=g("kanuni-datagrid-filter-row");ve.setAttribute("role","row"),F.append(ft,J),Pe&&F.append(ve);let ze=Pe?2:1;K.style.setProperty("--dg-pinned-gap",String(le?ze:0)),Ve.style.setProperty("--dg-pinned-gap",String(ze+(Z&&le?1:0))),Z&&le&&F.append(K),ce.length>0&&F.append(Ve),l.hasStickyGroupHeaders()&&(ge.style.setProperty("--dg-pinned-gap",String(ze+(Z&&le?1:0))),ge.style.setProperty("--dg-sticky-below",`${ce.length>0?ce.length*l.getRowHeight()+1:0}px`),F.append(ge)),F.append(B),He.length>0&&F.append(Wn),Z&&!le&&F.append(K),S.appendChild(F);let Ee=g("kanuni-datagrid-toolbar"),$e=g("kanuni-datagrid-pager");$e.setAttribute("role","navigation"),$e.setAttribute("aria-label","Pagination");let Re=g("kanuni-datagrid-filter-panel"),Te=!!X.grouping?.panel,_=g("kanuni-datagrid-group-panel");Fn&&L.appendChild(Ee),Te&&L.appendChild(_),L.appendChild(S),Ft&&L.appendChild(Re);let Vn=X.pagination;Vn&&Vn.enabled!==false&&L.appendChild($e);let qe=g("kanuni-datagrid-loading-overlay"),zn=g("kanuni-datagrid-loading-card"),qn=g("kanuni-datagrid-loading-spinner","span");qn.setAttribute("aria-hidden","true");let Xn=g("kanuni-datagrid-loading-label","span");Xn.textContent=lr,zn.append(qn,Xn),qe.appendChild(zn),qe.style.display="none";let Xe=g("kanuni-datagrid-sr-only","div");Xe.setAttribute("role","status"),Xe.setAttribute("aria-live","polite"),Xe.setAttribute("aria-atomic","true");let mt=g("kanuni-datagrid-empty");mt.textContent=rr,mt.style.display="none",L.append(qe,mt),Hn&&L.appendChild(Xe),C.appendChild(L);let Ue=X.selection,jt=l.getGroupDisplay()==="aligned",Ye=(Ue?.mode??"none")!=="none"&&(Ue?.checkboxColumn??false),ir=(Ue?.rowClick??(Ye?"toggle":"replace"))==="toggle",bt=l.hasMasterDetail()&&!!Kn,Qt=O?lt:0,Un=Qt+(bt?at:0),te=(O?lt:0)+(bt?at:0)+(Ye?$t:0);l.setLeadWidth(te);let je=!!Ce?.enabled,Qe=Ce?.group??null,Yn=Ce?.allowReordering??true,jn=Ce?.allowDropInsert??Qe!==null,ae=null,wt=null,ht=false,Se=null,fe=null;function Ke(e){Se=e;for(let n of D.querySelectorAll(".kanuni-datagrid-row")){let r=n.getAttribute("data-row-key"),t=e!==null&&r===String(e.key);n.classList.toggle("kanuni-datagrid-row--drop-before",t&&e.side==="before"),n.classList.toggle("kanuni-datagrid-row--drop-after",t&&e.side==="after");}}let Qn=(e,n)=>{let r=n.getBoundingClientRect();return e.clientY<r.top+r.height/2?"before":"after"},Jn=e=>e.dataTransfer?.types.includes(Kt)?ae!==null?Yn:jn&&Qe!==null:false;function Zn(e,n,r){let t=null;try{let o=e.dataTransfer?.getData(Kt);t=o?JSON.parse(o):null;}catch{t=null;}if(t){if(t.gridId===l.gridId){if(!Yn)return;if(Ce?.onReorder){Ce.onReorder({dragKey:t.rowKey,targetKey:n,position:r,row:l.getRowByKey(t.rowKey)});return}l.moveRow(t.rowKey,n,r);return}!jn||Qe===null||t.group!==Qe||Ce?.onAdd?.({row:t.row,rowKey:t.rowKey,otherGridId:t.gridId,targetKey:n,position:r});}}let dr=e=>{let n=be(e);if(!n||n.node.kind!=="data"||!e.dataTransfer)return;ae=n.node.key,wt=n.node.key,ht=false;let r={gridId:l.gridId,group:Qe,rowKey:n.node.key,row:n.node.data};e.dataTransfer.setData(Kt,JSON.stringify(r)),e.dataTransfer.setData("text/plain",String(n.node.key)),e.dataTransfer.effectAllowed="move",l.notifyRowDrag("enter",{rowKey:n.node.key});},sr=e=>{if(!Jn(e))return;e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move");let n=be(e);if(!n||n.node.kind!=="data")return;if(ae===n.node.key){fe=null,Ke(null);return}let r=e.target.closest(".kanuni-datagrid-row"),t=Qn(e,r),o=Se?.key!==n.node.key||Se.side!==t;fe={key:n.node.key,side:t},Ke({key:n.node.key,side:t}),o&&ae!==null&&l.notifyRowDrag("move",{rowKey:ae,overKey:n.node.key,position:t});},ur=e=>{if(!Jn(e)){Ke(null);return}e.preventDefault();let n=be(e);if(ht=true,n&&n.node.kind==="data"){let r=e.target.closest(".kanuni-datagrid-row"),t=Qn(e,r);fe={key:n.node.key,side:t},Zn(e,n.node.key,t);}else fe=null,Zn(e,null,"after");ae=null,Ke(null);},cr=()=>{wt!==null&&l.notifyRowDragEnd({rowKey:wt,dropped:ht,overKey:fe?.key??null,position:fe?.side??null}),ht=false,wt=null,ae=null,fe=null,Ke(null);},pr=e=>{let n=e.relatedTarget;n&&B.contains(n)||ae!==null&&(fe=null,Ke(null),l.notifyRowDrag("leave",{rowKey:ae}));},Je=pt===void 0||pt===false?null:(()=>{let e=pt===true?{}:pt;return {always:e.always??false,maxRows:e.maxRows??Wo}})(),Oe=false;function Jt(e){Oe!==e&&(Oe=e,L.classList.toggle("kanuni-datagrid-print",e),e?(Ie++,document.documentElement.classList.add("kanuni-datagrid-printing")):(Ie--,Ie<=0&&(Ie=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),ln());}let eo=null;if(Je&&!Je.always){let e=()=>{let r=l.getRows().length;if(r>Je.maxRows){l.isDebugMode()&&console.warn(`[datagrid] print layout skipped: ${r} rows exceeds maxRows (${Je.maxRows}). Printing the visible rows instead \u2014 use exportPdf() for the whole result.`);return}Jt(true);},n=()=>Jt(false);window.addEventListener("beforeprint",e),window.addEventListener("afterprint",n),eo=()=>{window.removeEventListener("beforeprint",e),window.removeEventListener("afterprint",n);};}let ie=0,ne=[],W=0,Zt=0;function en(){let e=l.getColumnLayout(),n=l.getVirtualWindow().columns,r=[],t=(a,i,s,c)=>{let d=a.def;r.push({def:d,id:a.state.id,width:a.state.width,pinned:i,inset:s,className:Ll(d.align,d.dataType)+(i?" kanuni-datagrid-cell--pinned":"")+(d.autoHeight?" kanuni-datagrid-cell--wrap":""),visualIndex:c});};e.left.forEach((a,i)=>t(a,"left",e.leftOffsets[i]+te,i));for(let a=n.start;a<n.end&&a<e.center.length;a++)t(e.center[a],null,0,e.left.length+a);e.right.forEach((a,i)=>t(a,"right",e.rightOffsets[i],e.left.length+e.center.length+i)),ne=r,W=n.offsetX;let o=(e.centerOffsets[Math.min(n.end,e.center.length)]??0)-(e.centerOffsets[Math.min(n.start,e.center.length)]??0);Zt=Math.max(0,e.centerWidth-n.offsetX-o),F.style.minWidth=`${e.totalWidth+te}px`;}let yt=26;function gr(){let e=l.getColumnLayout(),n=l.getVirtualWindow().columns,r=[...e.left,...e.center.slice(n.start,Math.min(n.end,e.center.length)),...e.right],t=datagridCore.bandDepth(r);if(ft.textContent="",J.style.top=`${t*yt}px`,L.style.setProperty("--dg-band-offset",`${t*yt}px`),t===0)return;datagridCore.computeHeaderBands(r,t).forEach((a,i)=>{let s=g("kanuni-datagrid-band-row");if(s.style.top=`${i*yt}px`,s.style.height=`${yt}px`,te>0){let c=g("kanuni-datagrid-band-cell kanuni-datagrid-band-cell--spacer kanuni-datagrid-band-cell--pinned");c.style.width=`${te}px`,c.style.flex="none",c.style.insetInlineStart="0px",s.appendChild(c);}if(W>0){let c=g("kanuni-datagrid-spacer");c.style.width=`${W}px`,c.style.flex="none",s.appendChild(c);}for(let c of a){let d=g(`kanuni-datagrid-band-cell${c.spacer?" kanuni-datagrid-band-cell--spacer":""}`);if(d.style.width=`${c.width}px`,d.style.flex="none",!c.spacer){if(c.columnIds.length>0){let b=datagridCore.bandPath(l.getColumnModel().getDef(c.columnIds[0])).slice(0,i+1);if(b.length===i+1&&l.isBandCollapsible(b)){let y=l.isBandCollapsed(b),u=document.createElement("button");u.type="button",u.className="kanuni-datagrid-band-toggle",u.setAttribute("aria-expanded",String(!y));let f=y?w.expandDetails??"Expand":w.collapseDetails??"Collapse";u.setAttribute("aria-label",f),u.title=f,u.appendChild(Sl(y)),u.addEventListener("click",k=>{k.stopPropagation(),l.toggleBand(b);}),d.appendChild(u);}}let p=g("kanuni-datagrid-band-label","span");p.textContent=c.label,d.appendChild(p);}s.appendChild(d);}ft.appendChild(s);});}let Ze=null,Ct=null;function kt(e,n){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",n==="before"),e.classList.toggle("kanuni-datagrid-header-cell--drop-after",n==="after"));}function to(){if(!Ze)return;let e=l.getSelectedCount(),n=l.getVisibleCount(),r=n>0&&e>=n;Ze.checked=r,Ze.indeterminate=!r&&e>0;}function tn(){gr();let e=l.getSort(),n=new Map(e.map((t,o)=>[t.columnId,{direction:t.direction,order:o}]));if(J.textContent="",Ze=null,O){let t=g("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-rownum-cell");t.setAttribute("role","columnheader"),t.style.width=`${lt}px`,t.style.flex="none",t.style.insetInlineStart="0px",J.appendChild(t);}if(bt){let t=g("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-detail-toggle-cell");t.setAttribute("role","columnheader"),t.setAttribute("aria-label",w.detailsAria),t.style.width=`${at}px`,t.style.flex="none",t.style.insetInlineStart=`${Qt}px`,J.appendChild(t);}if(Ye){let t=g("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-select-cell");t.setAttribute("role","columnheader"),t.style.width=`${$t}px`,t.style.flex="none",t.style.insetInlineStart=`${Un}px`;let o=document.createElement("input");o.type="checkbox",o.setAttribute("aria-label",w.selectAllRows),o.addEventListener("change",()=>{l.getSelectedCount()>0?l.clearSelection():l.selectAll();}),t.appendChild(o),J.appendChild(t),Ze=o,to();}let r=false;for(let t of ne){if(!t.pinned&&!r){if(W>0){let d=document.createElement("div");d.style.flex=`0 0 ${W}px`,J.appendChild(d);}r=true;}let o=Qo&&t.def.sortable!==false,a=n.get(t.id),i=g(`kanuni-datagrid-header-cell${o?" kanuni-datagrid-header-cell--sortable":""}${t.pinned?" kanuni-datagrid-header-cell--pinned":""}`);i.setAttribute("role","columnheader"),i.setAttribute("data-column-id",t.id),i.setAttribute("aria-sort",a?a.direction==="asc"?"ascending":"descending":"none");let s=t.def.headerTooltip;s&&(i.title=s),i.style.width=`${t.width}px`,i.style.flex="none",t.pinned==="left"&&(i.style.insetInlineStart=`${t.inset}px`),t.pinned==="right"&&(i.style.insetInlineEnd=`${t.inset}px`);let c=g("kanuni-datagrid-header-label","span");if(t.def.renderHeader){let d=t.def.renderHeader({column:t.def});typeof d=="string"?c.textContent=d:c.appendChild(d);}else c.textContent=t.def.headerName??t.id;if(i.appendChild(c),a){let d=g("kanuni-datagrid-sort-indicator","span");if(d.setAttribute("aria-hidden","true"),d.textContent=a.direction==="asc"?"\u25B2":"\u25BC",i.appendChild(d),e.length>1){let p=g("kanuni-datagrid-sort-order","span");p.setAttribute("aria-hidden","true"),p.textContent=String(a.order+1),i.appendChild(p);}}if(o){let d=t.id;i.addEventListener("click",p=>{l.toggleSort(d,p.shiftKey);});}if(Vt!==false){let d=t.id;i.addEventListener("contextmenu",p=>{p.preventDefault(),Mr(d,{left:p.clientX,top:p.clientY});});}if(P&&t.def.filterable!==false){let d=document.createElement("button");d.type="button";let p=l.getColumnFilter(t.id)!==null;d.className=`kanuni-datagrid-filter-button${p?" kanuni-datagrid-filter-button--active":""}${Vo==="always"?" kanuni-datagrid-filter-button--pinned":""}`,d.setAttribute("aria-haspopup","dialog"),d.setAttribute("aria-label",`${t.def.headerName??t.id} filter`),d.appendChild(Tl()),d.addEventListener("click",b=>{b.stopPropagation(),xr(t.id,d);}),i.appendChild(d);}if(re&&t.def.reorderable!==false&&(i.draggable=true,i.addEventListener("dragstart",d=>{d.dataTransfer?.setData("text/x-kanuni-column",t.id),d.dataTransfer&&(d.dataTransfer.effectAllowed="move");}),i.addEventListener("dragover",d=>{if(!d.dataTransfer?.types.includes("text/x-kanuni-column"))return;d.preventDefault();let p=i.getBoundingClientRect(),b=d.clientX<p.left+p.width/2;kt(i,b?"before":"after");}),i.addEventListener("dragleave",d=>{let p=d.relatedTarget;(!p||!i.contains(p))&&kt(null,"before");}),i.addEventListener("drop",d=>{kt(null,"before");let p=d.dataTransfer?.getData("text/x-kanuni-column");if(!p||p===t.id)return;d.preventDefault();let b=i.getBoundingClientRect();if(d.clientX<b.left+b.width/2)l.moveColumn(p,t.id);else {let u=ne.findIndex(f=>f.id===t.id);l.moveColumn(p,ne[u+1]?.id);}}),i.addEventListener("dragend",()=>kt(null,"before"))),Ge&&t.def.resizable!==false){let d=g("kanuni-datagrid-resize-handle","span");d.setAttribute("data-resize-handle",t.id),d.setAttribute("role","presentation"),d.addEventListener("click",p=>p.stopPropagation()),d.addEventListener("dblclick",p=>{p.stopPropagation(),Ir(t.id);}),d.addEventListener("pointerdown",p=>{p.preventDefault(),p.stopPropagation();let b=p.clientX,y=t.width,u=getComputedStyle(i).direction==="rtl"?-1:1;i.draggable=false;let f=y,k=false,E=$=>{k=true,f=y+($.clientX-b)*u,l.setColumnWidth(t.id,f,false);},A=()=>{window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",A),window.removeEventListener("pointercancel",A),k&&l.setColumnWidth(t.id,f,true),i.draggable=re&&t.def.reorderable!==false;};window.addEventListener("pointermove",E),window.addEventListener("pointerup",A),window.addEventListener("pointercancel",A);}),i.appendChild(d);}J.appendChild(i);}}let no=null,xt=null;function fr(e){if(e===no)return;no=e;let n=[];for(let r=0;r<e.length;r++){let t=e[r];t&&t.kind!=="data"&&n.push(r);}xt=n.length>0?n:null;}function mr(e){if(!xt)return e+1;let n=0,r=xt.length;for(;n<r;){let t=n+r>>1;xt[t]<=e?n=t+1:r=t;}return e+1-n}let Le=[];function vt(e="data"){let n=g("kanuni-datagrid-row");if(n.setAttribute("role","row"),e==="loading"){n.classList.add("kanuni-datagrid-row--loading"),n.setAttribute("aria-busy","true");let d=g("kanuni-datagrid-cell kanuni-datagrid-loading-cell");return d.setAttribute("role","gridcell"),d.setAttribute("aria-colindex","1"),d.appendChild(g("kanuni-datagrid-loading-bar","span")),n.appendChild(d),{kind:e,root:n,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:ie}}if(e==="data"&&jt&&n.addEventListener("click",()=>{if(!n.classList.contains("kanuni-datagrid-group-row--aligned"))return;let d=n.getAttribute("data-group-key");d!==null&&l.toggleGroup(d);}),e==="panel"){let d=document.createElement("div");return d.setAttribute("role","gridcell"),d.setAttribute("aria-colindex","1"),n.appendChild(d),{kind:e,root:n,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,panelCell:d,epoch:ie}}if(e==="group"){let d=g("kanuni-datagrid-group-cell");d.setAttribute("role","gridcell"),d.setAttribute("aria-colindex","1");let p=g("kanuni-datagrid-group-twisty","span");p.setAttribute("aria-hidden","true");let b=g("kanuni-datagrid-group-caption","span"),y=g("kanuni-datagrid-group-label","span"),u=g("kanuni-datagrid-group-count","span"),f=g("kanuni-datagrid-group-aggregates","span"),k=null;return Ye&&Ue?.mode==="multiple"&&(k=document.createElement("input"),k.type="checkbox",k.className="kanuni-datagrid-group-checkbox",k.tabIndex=-1,k.addEventListener("change",()=>{let E=n.getAttribute("data-group-key");E!==null&&l.toggleGroupSelection(E);}),k.addEventListener("click",E=>E.stopPropagation()),k.addEventListener("mousedown",E=>E.stopPropagation()),d.appendChild(k)),d.append(p,b,y,u,f),n.appendChild(d),n.addEventListener("click",()=>{let E=n.getAttribute("data-group-key");E!==null&&l.toggleGroup(E);}),{kind:e,root:n,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,group:{cell:d,check:k,twisty:p,caption:b,label:y,count:u,aggregates:f},epoch:ie}}if(je){let d=g("kanuni-datagrid-row-grip","span");d.setAttribute("aria-hidden","true"),d.title=w.dragToReorder??"Drag to reorder",d.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>',d.addEventListener("mouseenter",()=>{n.draggable=true;}),d.addEventListener("mouseleave",()=>{n.draggable=false;}),n.appendChild(d);}if(st)return {kind:e,root:n,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:ie};let r=null;O&&(r=g("kanuni-datagrid-cell kanuni-datagrid-cell--number kanuni-datagrid-cell--pinned kanuni-datagrid-rownum-cell"),r.setAttribute("role","gridcell"),r.style.width=`${lt}px`,r.style.flex="none",r.style.insetInlineStart="0px",n.appendChild(r));let t=null;if(bt){let d=g("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-detail-toggle-cell");d.setAttribute("role","gridcell"),d.style.width=`${at}px`,d.style.flex="none",d.style.insetInlineStart=`${Qt}px`;let p=document.createElement("button");p.type="button",p.className="kanuni-datagrid-detail-toggle",p.tabIndex=-1,p.addEventListener("click",b=>{b.stopPropagation();let y=n.getAttribute("data-row-key");if(y===null)return;let u=l.getRows().find(f=>f!==void 0&&String(f.key)===y);u&&u.kind==="data"&&l.toggleDetail(u.key);}),p.addEventListener("mousedown",b=>b.stopPropagation()),d.appendChild(p),n.appendChild(d),t=p;}let o=null;if(Ye){let d=g("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-select-cell");d.setAttribute("role","gridcell"),d.style.width=`${$t}px`,d.style.flex="none",d.style.insetInlineStart=`${Un}px`;let p=document.createElement("input");p.type="checkbox",p.tabIndex=-1;let b=()=>{let y=n.getAttribute("data-row-key");if(y===null)return;let u=l.getRows().find(f=>f!==void 0&&String(f.key)===y);u?.kind==="group"?l.toggleGroupSelection(String(u.key)):u&&l.toggleRow(u.key);};d.addEventListener("mousedown",y=>y.stopPropagation()),d.addEventListener("click",y=>{y.target.tagName!=="INPUT"&&(y.stopPropagation(),b());}),p.addEventListener("change",b),p.addEventListener("click",y=>y.stopPropagation()),p.addEventListener("mousedown",y=>y.stopPropagation()),d.appendChild(p),n.appendChild(d),o=p;}let a=[],i=null,s=false;for(let d of ne){!d.pinned&&!s&&(i=document.createElement("div"),i.style.flex=`0 0 ${W}px`,n.appendChild(i),s=true);let p=g(d.className);p.setAttribute("role","gridcell"),p.setAttribute("data-column-id",d.id),p.style.width=`${d.width}px`,p.style.flex="none",d.pinned==="left"&&(p.style.insetInlineStart=`${d.inset}px`),d.pinned==="right"&&(p.style.insetInlineEnd=`${d.inset}px`),n.appendChild(p),a.push({el:p,slot:d});}let c=document.createElement("div");return c.style.flex=`0 0 ${Zt}px`,n.appendChild(c),{kind:e,root:n,cells:a,rowNumberCell:r,selectInput:o,detailToggle:t,leadingSpacer:i,trailingSpacer:c,epoch:ie}}let Fe="";function Et(e,n){if(Fe===""||n===""){e.textContent=n;return}let r=datagridCore.foldText(n),t=r.indexOf(Fe);if(t===-1){e.textContent=n;return}let o=[],a=0;for(;t!==-1;){t>a&&o.push(document.createTextNode(n.slice(a,t)));let i=document.createElement("mark");i.className="kanuni-datagrid-highlight",i.textContent=n.slice(t,t+Fe.length),o.push(i),a=t+Fe.length,t=r.indexOf(Fe,a);}a<n.length&&o.push(document.createTextNode(n.slice(a))),e.replaceChildren(...o);}function br(e,n,r){let t=l.getColumnModel().getCellValue(r.data,n.id),o=n.def;if(o.renderCell){let i=o.renderCell({value:t,row:r.data,node:r,column:o});typeof i=="string"?e.textContent=i:e.replaceChildren(i);return}let a=datagridCore.lookupLabel(o,t);if(a!==null){Et(e,a);return}if(o.valueFormatter){let i=o.valueFormatter(t,r.data);Et(e,typeof i=="string"?i:String(i??""));return}if(o.dateFormat&&o.dataType==="date"){Et(e,datagridCore.formatDateValue(t,o.dateFormat));return}Et(e,t==null?"":String(t));}function nn(e,n,r){let t=e.root;if(t.setAttribute("aria-rowindex",String(r+2)),t.setAttribute("data-row-key",String(n.key)),n.kind==="detail"||n.kind==="editform"){let u=e.panelCell,f=n.kind==="detail";t.className=`kanuni-datagrid-row ${f?"kanuni-datagrid-detail-row":"kanuni-datagrid-editform-row"}`,t.style.height=`${n.height}px`,f?(t.setAttribute("data-detail-for",String(n.parentKey)),t.removeAttribute("data-editform-for")):(t.setAttribute("data-editform-for",n.parentKey===null?"":String(n.parentKey)),t.removeAttribute("data-detail-for")),u.className=f?"kanuni-datagrid-detail-cell":"kanuni-datagrid-editform-cell";let k=`${n.kind}:${String(n.key)}`;if(t.getAttribute("data-panel-for")!==k){t.setAttribute("data-panel-for",k);let E=f?Kn?.(n.data):n.parentKey===null?void 0:Uo?.(n.parentKey,n.data);u.textContent="",typeof E=="string"?u.textContent=E:E&&u.appendChild(E);}return}if(t.removeAttribute("data-panel-for"),t.removeAttribute("data-detail-for"),t.removeAttribute("data-editform-for"),n.kind==="filler"){t.style.display="none";return}t.style.display="",t.style.height=oo?"":`${l.getRowHeight()}px`;let o=n.kind==="group"&&!e.group?n:null;if(!e.group){t.classList.remove("kanuni-datagrid-group-row","kanuni-datagrid-group-row--aligned");for(let u of Array.from(t.classList))u.startsWith("kanuni-datagrid-group-row--level-")&&t.classList.remove(u);o?(t.classList.add("kanuni-datagrid-group-row","kanuni-datagrid-group-row--aligned",`kanuni-datagrid-group-row--level-${o.level}`),t.setAttribute("aria-expanded",String(o.expanded)),t.setAttribute("aria-level",String(o.level+1)),t.setAttribute("data-group-key",String(o.key)),t.setAttribute("data-group-level",String(o.level))):(t.removeAttribute("aria-expanded"),t.removeAttribute("aria-level"),t.removeAttribute("data-group-key"),t.removeAttribute("data-group-level"));}t.classList.toggle("kanuni-datagrid-row--odd",G&&r%2===1),t.classList.toggle("kanuni-datagrid-row--selected",l.isRowSelected(n.key));let a=l.getFocus();if(t.classList.toggle("kanuni-datagrid-row--focused",Nn&&a!==null&&a.rowKey===n.key),e.leadingSpacer&&(e.leadingSpacer.style.flex=`0 0 ${W}px`),e.trailingSpacer&&(e.trailingSpacer.style.flex=`0 0 ${Zt}px`),je){let u=Se!==null&&String(Se.key)===String(n.key);t.classList.toggle("kanuni-datagrid-row--drop-before",u&&Se.side==="before"),t.classList.toggle("kanuni-datagrid-row--drop-after",u&&Se.side==="after");}let i=n.kind==="treePath",s=i||o!==null;if(t.classList.toggle("kanuni-datagrid-row--tree-path",i),e.rowNumberCell&&(e.rowNumberCell.textContent=s?"":String(mr(r))),e.detailToggle&&(e.detailToggle.hidden=s),e.selectInput){let u=o!==null&&Ue?.mode==="multiple";if(e.selectInput.hidden=i||o!==null&&!u,e.selectInput.classList.toggle("kanuni-datagrid-group-checkbox",u),u){let f=l.getGroupSelectionState(String(o.key));e.selectInput.checked=f==="all",e.selectInput.indeterminate=f==="some",e.selectInput.setAttribute("aria-label",w.selectGroupAria.replace("{count}",String(o.count)).replace("{group}",o.display??o.label));}else e.selectInput.indeterminate=false,e.selectInput.checked=l.isRowSelected(n.key),e.selectInput.setAttribute("aria-label",w.selectRowAria.replace("{row}",String(n.key)));}if(e.detailToggle&&n.kind==="data"){let u=l.isDetailExpanded(n.key);e.detailToggle.textContent=u?"\u25BE":"\u25B8",e.detailToggle.setAttribute("aria-expanded",String(u)),e.detailToggle.setAttribute("aria-label",u?w.collapseDetails:w.expandDetails);}if(n.kind==="group"&&e.group){let u=n;t.className=`kanuni-datagrid-row kanuni-datagrid-group-row kanuni-datagrid-group-row--level-${u.level}`,t.setAttribute("aria-expanded",String(u.expanded)),t.setAttribute("aria-level",String(u.level+1)),t.setAttribute("data-group-key",String(u.key)),t.setAttribute("data-group-level",String(u.level)),e.group.cell.style.paddingLeft=u.level>0?`${8+u.level*18}px`:"",e.group.twisty.textContent=u.expanded?"\u25BE":"\u25B8";let f=l.getColumnModel().getDef(u.columnId),k=f?.headerName??u.columnId;if(e.group.caption.textContent=`${k}:`,e.group.label.textContent=datagridCore.lookupLabel(f,u.value)??u.display??(u.label===""?w.filterBlank:u.label),e.group.count.textContent=`(${u.count})`,e.group.check){let A=l.getGroupSelectionState(String(u.key));e.group.check.checked=A==="all",e.group.check.indeterminate=A==="some",e.group.check.setAttribute("aria-label",w.selectGroupAria.replace("{count}",String(u.count)).replace("{group}",e.group.label.textContent??""));}e.group.aggregates.textContent="";let E=u.aggregates??null;if(E)for(let A of l.getSummaryDefs()){let $=g("kanuni-datagrid-group-aggregate","span"),I=g("kanuni-datagrid-group-aggregate-label","span"),q=l.getColumnModel().getDef(A.columnId);I.textContent=`${datagridCore.summaryLabel(A,Yt)} ${q?.headerName??A.columnId}:`,$.append(I,` ${datagridCore.formatSummaryValue(A,E[datagridCore.summaryKey(A.columnId,A.type)],q)}`),e.group.aggregates.appendChild($);}return}if(n.kind!=="data"&&!i&&!o){for(let{el:u}of e.cells)u.textContent="";return}if(st&&s){let u=je?1:0;for(;t.childNodes.length>u;)t.removeChild(t.lastChild);let f=g("kanuni-datagrid-cell");o?f.appendChild(ro(o)):(f.appendChild(lo(n)),on(f,n,n.tree)),t.appendChild(f);return}if(st){let u=je?1:0,f=st({row:n.data,node:n,rowIndex:r,selected:l.isRowSelected(n.key),focused:Nn&&a!==null&&a.rowKey===n.key});if(f instanceof Node&&t.childNodes.length===u+1&&t.childNodes[u]===f)return;for(;t.childNodes.length>u;)t.removeChild(t.lastChild);typeof f=="string"?t.appendChild(document.createTextNode(f)):f&&t.appendChild(f);return}let c=a!==null&&a.rowKey===n.key?a.columnId:null,d=o?void 0:n.tree,p=d||o?(()=>{let u=l.getColumnLayout();return (u.left[0]??u.center[0]??u.right[0])?.state.id??null})():null,b=d?p:null,y=l.hasCellSpans();for(let{el:u,slot:f}of e.cells){let k=(zt||qt)&&!s?{node:n,columnId:f.id,rowIndex:r,columnIndex:f.visualIndex,value:l.getColumnModel().getCellValue(n.data,f.id)}:null,E=k&&zt?zt(k):void 0,A=false;if(E!==void 0?E instanceof Node&&u.childNodes.length===1&&u.firstChild===E?A=true:typeof E=="string"?u.textContent=E:u.replaceChildren(E):o?f.id===p?u.replaceChildren(ro(o)):u.replaceChildren(...yr(o,f.id)):i?f.id===b?(u.replaceChildren(lo(n)),on(u,n,d)):u.replaceChildren():(br(u,f,n),d&&f.id===b&&on(u,n,d)),y&&!A){let N=hr(r,f.id);u.classList.toggle("kanuni-datagrid-cell--span",N?.kind==="draw"),u.classList.toggle("kanuni-datagrid-cell--span-covered",N?.kind==="covered");let Ht=E!==void 0;if(N?.kind==="covered"&&c!==f.id&&!Ht)u.replaceChildren();else if(N?.kind==="draw"){let Ne=g("kanuni-datagrid-span-box");Ne.style.height=`${N.height}px`,Ne.append(...Array.from(u.childNodes)),u.appendChild(Ne);}}else y||u.classList.remove("kanuni-datagrid-cell--span","kanuni-datagrid-cell--span-covered");if(xe){let N=!s&&!!rn(n.key,f.id,n.data);u.classList.toggle("kanuni-datagrid-cell--noted",N);}u.id=`${m.gridId}-cell-${String(n.key)}-${f.id}`,u.classList.toggle("kanuni-datagrid-cell--focused",c===f.id);let $=u.getAttribute("data-slot-classes");if($)for(let N of $.split(" "))u.classList.remove(N);let I=k&&qt?qt(k):void 0,q=f.def.cellClassName,he=[s?void 0:typeof q=="function"?q({value:l.getColumnModel().getCellValue(n.data,f.id),row:n.data,node:n,column:f.def}):q,I].filter(Boolean).join(" ")||void 0;if(he){for(let N of he.split(" "))u.classList.add(N);u.setAttribute("data-slot-classes",he);}else $&&u.removeAttribute("data-slot-classes");}}let oo=m.columns.some(e=>e.autoHeight);function wr(){if(!oo)return;let e=l.getVirtualWindow(),n=l.getRows(),r=new Map(l.getMeasuredRowHeights()),t=false;for(let o=e.rows.start;o<e.rows.end&&o<n.length;o++){let a=n[o];if(!a||a.kind!=="data")continue;let i=o-e.rows.start,s=Le[i]?.root;if(!s)continue;let c=s.getBoundingClientRect().height;c>0&&r.get(a.key)!==c&&(r.set(a.key,c),t=true);}t&&l.setMeasuredRowHeights(r);}let Rt={start:0,end:0};function hr(e,n){let r=l.getCellSpans(n);if(r.length===0)return null;let t=datagridCore.spanRoleAt(r,e,Rt.start,Rt.end);if(!t)return null;if(t.role==="covered")return {kind:"covered"};let o=l.getRowOffset(t.drawStart);return {kind:"draw",height:l.getRowOffset(t.drawEnd)+l.getRowHeightAt(t.drawEnd)-o}}function ro(e){let n=g("kanuni-datagrid-group-inline","span");n.style.paddingInlineStart=`${e.level*16}px`;let r=g("kanuni-datagrid-group-twisty","span");r.setAttribute("aria-hidden","true"),r.textContent=e.expanded?"\u25BE":"\u25B8";let t=l.getColumnModel().getDef(e.columnId),o=g("kanuni-datagrid-group-caption","span");o.textContent=`${t?.headerName??e.columnId}:`;let a=g("kanuni-datagrid-group-label","span");a.textContent=datagridCore.lookupLabel(t,e.value)??e.display??(e.label===""?w.filterBlank:e.label);let i=g("kanuni-datagrid-group-count","span");return i.textContent=`(${e.count})`,n.append(r,o,a,i),n}function yr(e,n){if(!e.aggregates)return [];let r=l.getSummaryDefs().find(o=>o.columnId===n);if(!r)return [];let t=g("kanuni-datagrid-group-aggregate-value","span");return t.textContent=datagridCore.formatSummaryValue(r,e.aggregates[datagridCore.summaryKey(r.columnId,r.type)],l.getColumnModel().getDef(n)),[t]}function lo(e){let n=g("kanuni-datagrid-tree-path-label","span");return n.textContent=e.label,n}function on(e,n,r){let t=g(`kanuni-datagrid-tree-cell${r.ancestorOnly?" kanuni-datagrid-tree-cell--ancestor":""}`,"span");if(t.style.paddingInlineStart=`${r.depth*16}px`,r.hasChildren){let o=document.createElement("button");o.type="button",o.className="kanuni-datagrid-tree-toggle",o.setAttribute("data-tree-toggle",""),o.setAttribute("aria-expanded",String(r.expanded)),o.setAttribute("aria-label",r.expanded?w.collapseDetails:w.expandDetails),o.textContent=r.expanded?"\u25BE":"\u25B8",o.addEventListener("mousedown",a=>a.stopPropagation()),o.addEventListener("click",a=>{a.stopPropagation(),l.toggleTreeRow(n.key);}),t.appendChild(o);}else t.appendChild(g("kanuni-datagrid-tree-toggle kanuni-datagrid-tree-toggle--leaf","span"));t.append(...Array.from(e.childNodes)),e.appendChild(t);}let rn=(e,n,r)=>xe?xe.get({rowKey:e,columnId:n,row:r})??null:null,ao=null,me=Xt?g("kanuni-datagrid-overlay"):null;me&&(me.style.position="absolute",me.style.inset="0",me.style.pointerEvents="none",B.appendChild(me));function Cr(){if(!Xt||!me)return;let e=Xt();e!==ao&&(ao=e,e?me.replaceChildren(e):me.replaceChildren());}function ln(){Cr();let e=l.getVirtualWindow(),n=l.getRows(),r=Oe?{...e,rows:{...e.rows,start:0,end:n.length,offsetY:0,totalHeight:0}}:e;fr(n),B.style.height=`${r.rows.totalHeight}px`,D.style.transform=`translateY(${r.rows.offsetY}px)`,Fe=jo?datagridCore.normalizeSearch(l.getSearchText()):"";let t=Math.max(0,Math.min(r.rows.end,n.length)-r.rows.start);for(Rt.start=r.rows.start,Rt.end=Math.min(r.rows.end,n.length)-1;Le.length>t;)Le.pop().root.remove();for(let o=0;o<t;o++){let a=r.rows.start+o,i=n[a];if(!i){let d=Le[o];if(!d||d.kind!=="loading"){let p=vt("loading");d?D.replaceChild(p.root,d.root):D.appendChild(p.root),Le[o]=p,d=p;}d.root.setAttribute("aria-rowindex",String(a+2)),d.root.style.height=`${l.getRowHeight()}px`;continue}let s=i.kind==="data"?"data":i.kind==="group"?jt?"data":"group":i.kind==="detail"||i.kind==="editform"?"panel":"stub",c=Le[o];if(!c||c.epoch!==ie||c.kind!==s){let d=vt(s);c?D.replaceChild(d.root,c.root):D.appendChild(d.root),Le[o]=d,c=d;}nn(c,i,a);}wr(),io();}let Tt=[];function io(){if(!l.hasStickyGroupHeaders())return;let e=Oe?[]:l.getStickyGroupRows();for(ge.style.width=`${l.getColumnLayout().totalWidth}px`;Tt.length>e.length;)Tt.pop().wrap.remove();let n=jt?"data":"group";e.forEach((r,t)=>{let o=Tt[t];if(!o||o.rs.epoch!==ie||o.rs.kind!==n){let a=vt(n),i=o?.wrap??g("kanuni-datagrid-sticky-group");i.textContent="",i.appendChild(a.root),o||ge.appendChild(i),o={wrap:i,rs:a},Tt[t]=o;}nn(o.rs,r.node,r.index),o.rs.root.removeAttribute("aria-rowindex"),o.wrap.style.top=`${r.offset}px`,o.wrap.style.height=`${r.height}px`,o.wrap.style.zIndex=String(e.length-t),o.wrap.classList.toggle("kanuni-datagrid-sticky-group--last",t===e.length-1),o.wrap.querySelectorAll("button, input, select, textarea, a[href], [tabindex]").forEach(a=>a.setAttribute("tabindex","-1"));});}ge.addEventListener("click",e=>{let r=e.target.closest("[data-group-key]")?.getAttribute("data-group-key");r&&l.scrollToRow(r);});let so=datagridCore.createDebouncedCommit(Yo??(l.isRemote()?200:0));function an(){if(!Pe)return;if(ve.textContent="",te>0){let t=g("kanuni-datagrid-filter-cell kanuni-datagrid-filter-cell--pinned");t.style.width=`${te}px`,t.style.flex="none",t.style.insetInlineStart="0px",ve.appendChild(t);}let e=false,n=null,r=()=>{if(!n){n=document.createElement("datalist"),n.id=`${m.gridId}-filter-periods`;for(let t of datagridCore.periodSuggestionList(_n)){let o=document.createElement("option");o.value=t,n.appendChild(o);}ve.appendChild(n);}return n.id};for(let t of ne){if(!t.pinned&&!e){if(W>0){let a=g("kanuni-datagrid-spacer");a.style.width=`${W}px`,a.style.flex="none",ve.appendChild(a);}e=true;}let o=g(`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 a=document.createElement("input");a.className="kanuni-datagrid-filter-input",a.setAttribute("aria-label",`${t.def.headerName??t.id} filter`),t.def.dataType==="date"&&a.setAttribute("list",r());let i=()=>l.setColumnFilter(t.id,datagridCore.parseFilterInput(t.id,a.value,t.def.dataType,_n),datagridCore.FILTER_PART_ROW);a.addEventListener("input",()=>so.schedule(t.id,i));let s=()=>{so.cancel(t.id),i();};a.addEventListener("keydown",c=>{c.key==="Enter"&&s();}),a.addEventListener("blur",s),o.appendChild(a);}ve.appendChild(o);}}let dn=()=>{};function kr(){if(!Fn)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 n=null;e.addEventListener("input",()=>{n&&clearTimeout(n),n=setTimeout(()=>l.setSearchText(e.value),nr);});let r=g("kanuni-datagrid-toolbar-spacer"),t=null;if(Xo){let d=document.createElement("button");d.type="button",d.textContent=w.toolbarColumns??"Columns",d.setAttribute("aria-haspopup","dialog"),d.addEventListener("click",()=>{let p=d.getBoundingClientRect();bo({left:p.left,top:p.bottom+2});}),t=d;}let o=pe&&er,a=pe&&tr,i=document.createElement("button");i.type="button",i.className="kanuni-datagrid-toolbar-icon-button",i.setAttribute("aria-haspopup","menu"),i.setAttribute("aria-label",w.exportMenu),i.setAttribute("data-testid","dg-export-menu"),i.title=w.exportMenu,i.appendChild(Rl());let s=null;i.addEventListener("click",()=>{if(s)return;let d=i.getBoundingClientRect();Ae({left:d.right-190,top:d.bottom+2},p=>{p.setAttribute("role","menu"),p.setAttribute("aria-label",w.exportMenu);let b=[{kind:"csv",label:w.exportCsv,testId:"dg-export-csv",on:true},{kind:"excel",label:w.exportExcel,testId:"dg-export-excel",on:o},{kind:"excel-selected",label:w.exportExcelSelected,testId:"dg-export-excel-selected",on:o},{kind:"pdf",label:w.exportPdf,testId:"dg-export-pdf",on:a}];for(let y of b){if(!y.on)continue;let u=document.createElement("button");u.type="button",u.className="kanuni-datagrid-menu-item",u.setAttribute("role","menuitem"),u.setAttribute("data-testid",y.testId),u.textContent=y.label,y.kind==="excel-selected"&&l.getSelectedCount()===0&&(u.disabled=true),u.addEventListener("click",()=>{s=y.kind,i.disabled=true,V(),En(l,y.kind).then(f=>{s=null,i.disabled=false,f.error&&dn(f.error);});}),p.appendChild(u);}},"kanuni-datagrid-filter-popup kanuni-datagrid-export-menu");});for(let d of Zo??[])Ee.append(d);Ee.append(e,r),t&&Ee.append(t),Ee.append(i);for(let d of Jo??[])Ee.append(d);let c=g("kanuni-datagrid-toolbar-error","span");c.setAttribute("role","alert"),c.style.display="none",Ee.append(c),dn=d=>{c.textContent=d,c.style.display="";};}function uo(){if(!$e.isConnected)return;let e=l.getPage(),n=l.getPageCount();$e.textContent="";let r=(s,c,d,p)=>{let b=document.createElement("button");return b.type="button",b.textContent=s,b.setAttribute("aria-label",c),b.disabled=d,b.addEventListener("click",p),b},t=g("kanuni-datagrid-pager-buttons"),o=e<=0,a=e>=n-1;t.append(r("\xAB",w.pagerFirst??"First",o,()=>l.setPage(0)),r("\u2039",w.pagerPrevious??"Previous",o,()=>l.setPage(e-1)));let i=g("kanuni-datagrid-pager-current","span");i.textContent=`${e+1} / ${n}`,t.append(i,r("\u203A",w.pagerNext??"Next",a,()=>l.setPage(e+1)),r("\xBB",w.pagerLast??"Last",a,()=>l.setPage(n-1))),$e.appendChild(t);}function sn(){if(!Z)return;let e=l.getColumnLayout(),n=l.getSummaries(),r=new Map(l.getSummaryDefs().map(o=>[o.columnId,o]));if(K.textContent="",K.style.width=`${e.totalWidth+te}px`,te>0){let o=g("kanuni-datagrid-footer-cell kanuni-datagrid-footer-cell--pinned");o.style.width=`${te}px`,o.style.insetInlineStart="0px",K.appendChild(o);}let t=false;for(let o of ne){if(!o.pinned&&!t){if(W>0){let c=g("kanuni-datagrid-spacer");c.style.width=`${W}px`,K.appendChild(c);}t=true;}let a=r.get(o.id),i=o.def.dataType==="number",s=g(`kanuni-datagrid-footer-cell${o.pinned?" kanuni-datagrid-footer-cell--pinned":""}${i?" kanuni-datagrid-footer-cell--number":""}${a?" kanuni-datagrid-footer-cell--active":""}`);if(s.setAttribute("role","gridcell"),s.setAttribute("data-column-id",o.id),s.setAttribute("data-summary-type",a?.type??""),s.style.width=`${o.width}px`,o.pinned==="left"&&(s.style.insetInlineStart=`${o.inset}px`),o.pinned==="right"&&(s.style.insetInlineEnd=`${o.inset}px`),a){s.title=`${datagridCore.summaryLabel(a,Yt)} \u2014 ${o.def.headerName??o.id}`;let c=g("kanuni-datagrid-footer-value","span");c.textContent=datagridCore.formatSummaryValue(a,n[datagridCore.summaryKey(a.columnId,a.type)],o.def),s.appendChild(c);}else {let c=g("kanuni-datagrid-footer-hint","span");c.textContent=se?"\xB7":"",s.appendChild(c);}K.appendChild(s);}}function un(){let e=(n,r,t)=>{n.textContent="",r.forEach((o,a)=>{let i=vt("data");nn(i,{kind:"data",key:`__pinned-${t}-${a}`,sourceIndex:-1,data:o},a),i.root.classList.remove("kanuni-datagrid-row--odd"),i.root.removeAttribute("aria-rowindex"),i.rowNumberCell&&(i.rowNumberCell.textContent=""),n.appendChild(i.root);});};ce.length>0&&e(Ve,ce,"top"),He.length>0&&e(Wn,He,"bottom");}let Be=null,cn=null;function V(){cn?.(),cn=null,Be?.remove(),Be=null;}function co(e,n){let t=e.getBoundingClientRect();t.width===0&&t.height===0||(e.style.left=`${Math.max(8,Math.min(n.left,window.innerWidth-t.width-8))}px`,e.style.top=`${Math.max(8,Math.min(n.top,window.innerHeight-t.height-8))}px`);}function Ae(e,n,r="kanuni-datagrid-filter-popup"){V(),Be=g(`${Mn(m)} kanuni-datagrid-portal`);let t=g(r);t.style.position="fixed",t.style.left=`${e.left}px`,t.style.top=`${e.top}px`,t.style.zIndex="1000",n(t),Be.appendChild(t),document.body.appendChild(Be),co(t,e);let o=Be,a=s=>{o.contains(s.target)||V();},i=s=>{s.key==="Escape"&&V();};document.addEventListener("pointerdown",a,true),document.addEventListener("keydown",i,true),cn=()=>{document.removeEventListener("pointerdown",a,true),document.removeEventListener("keydown",i,true);};}let Me=25,po=8,go=new Map,fo=0;function xr(e,n){let r=n.getBoundingClientRect(),t=++fo;Ae({left:r.left,top:r.bottom+2},o=>{let a=[],i=true,s=new Set,c=false,d=0,p="",b=[],y=null,u="",f=[],k=document.createElement("input");k.type="search",k.className="kanuni-datagrid-filter-search",k.placeholder=w.search,k.setAttribute("data-testid","dg-filter-search");let E=g("kanuni-datagrid-filter-actions"),A=document.createElement("button");A.type="button",A.textContent=w.filterSelectAll,A.addEventListener("click",()=>{c=true,s=new Set(a.map(x=>x.label)),N();});let $=document.createElement("button");$.type="button",$.textContent=w.clear,$.addEventListener("click",()=>{c=true,s=new Set,N();}),E.append(A,$);let I=g("kanuni-datagrid-filter-list");I.setAttribute("role","listbox"),I.setAttribute("aria-multiselectable","true");let q=document.createElement("div");q.style.position="relative";let ee=document.createElement("div");q.appendChild(ee),I.appendChild(q);let he=()=>{let x=datagridCore.foldText(p.trim());if(!x){b=a;return}y||(y=a.map(M=>datagridCore.foldText(M.label))),b=u!==""&&x.includes(u)?f.filter(M=>datagridCore.foldText(M.label).includes(x)):a.filter((M,H)=>y[H].includes(x)),u=x,f=b;},N=()=>{if(I.setAttribute("aria-busy",String(i)),I.setAttribute("aria-setsize",String(b.length)),i){q.style.height="",ee.textContent="";let Y=g("kanuni-datagrid-filter-empty");Y.textContent=w.filterLoading,ee.appendChild(Y);return}if(b.length===0){q.style.height="",ee.style.transform="",ee.textContent="";let Y=g("kanuni-datagrid-filter-empty");Y.textContent=w.filterNoMatch,ee.appendChild(Y);return}let x=I.clientHeight||240,M=Math.max(0,Math.floor(I.scrollTop/Me)-po),H=Math.ceil(x/Me)+po*2,U=Math.min(M,Math.max(0,b.length-1)),Wr=Math.min(b.length,U+H);q.style.height=`${b.length*Me}px`,ee.style.transform=`translateY(${U*Me}px)`,ee.textContent="";for(let Y=U;Y<Wr;Y++){let We=b[Y],oe=g("kanuni-datagrid-filter-item");oe.setAttribute("role","option"),oe.setAttribute("aria-selected",String(s.has(We.label))),oe.tabIndex=0,oe.setAttribute("data-value",We.label),oe.setAttribute("data-index",String(Y)),Y===d&&oe.classList.add("kanuni-datagrid-filter-item--active");let nt=document.createElement("input");nt.type="checkbox",nt.readOnly=true,nt.checked=s.has(We.label),nt.tabIndex=-1;let Ko=document.createElement("span");Ko.textContent=We.label===""?w.filterBlank:We.label,oe.append(nt,Ko),oe.addEventListener("click",()=>Ht(We.label)),oe.addEventListener("focus",()=>{d=Y;}),ee.appendChild(oe);}},Ht=x=>{c=true,s.has(x)?s.delete(x):s.add(x);for(let M of ee.querySelectorAll(".kanuni-datagrid-filter-item")){if(M.getAttribute("data-value")!==x)continue;M.setAttribute("aria-selected",String(s.has(x)));let H=M.querySelector("input");H&&(H.checked=s.has(x));}};I.addEventListener("scroll",()=>{go.set(e,I.scrollTop),N();}),k.addEventListener("input",()=>{p=k.value,d=0,he(),N();});let Ne=x=>{if(b.length===0)return;d=Math.max(0,Math.min(b.length-1,x));let M=d*Me,H=I.clientHeight||240;M<I.scrollTop?I.scrollTop=M:M+Me>I.scrollTop+H&&(I.scrollTop=M+Me-H),N(),o.querySelector(`.kanuni-datagrid-filter-item[data-index="${d}"]`)?.focus();},Po=()=>{if(i)return;let x;if(s.size===a.length)x=null;else {let M=s.has(""),H=a.filter(U=>U.label!==""&&s.has(U.label));H.length===0?x=M?{columnId:e,operator:"isnull"}:null:M?x={logic:"or",nodes:[{columnId:e,operator:"in",value:H.map(U=>U.value)},{columnId:e,operator:"isnull"}]}:x={columnId:e,operator:"in",value:H.map(U=>U.value)};}l.setColumnFilter(e,x,datagridCore.FILTER_PART_SET),V();};o.tabIndex=-1,o.addEventListener("keydown",x=>{let M=x.target===k;if(x.key==="Backspace"&&!M){x.preventDefault(),k.focus(),p=p.slice(0,-1),k.value=p,d=0,he(),N();return}if(x.key==="ArrowDown"){x.preventDefault(),Ne(M?0:d+1);return}if(x.key==="ArrowUp"){x.preventDefault(),Ne(M?b.length-1:d-1);return}if(!M&&(x.key==="Home"||x.key==="End")){x.preventDefault(),Ne(x.key==="Home"?0:b.length-1);return}if(x.key===" "&&!M){x.preventDefault();let H=b[d];H&&Ht(H.label);return}if(x.key==="Enter"){x.preventDefault(),Po();return}!M&&x.key.length===1&&x.key!==" "&&!x.ctrlKey&&!x.metaKey&&!x.altKey&&(x.preventDefault(),k.focus(),p+=x.key,k.value=p,d=0,he(),N());});let $o=g("kanuni-datagrid-filter-footer"),Gt=document.createElement("button");Gt.type="button",Gt.textContent=w.cancel,Gt.addEventListener("click",()=>V());let ye=document.createElement("button");ye.type="button",ye.className="kanuni-datagrid-filter-primary",ye.setAttribute("data-testid","dg-filter-apply"),ye.textContent=w.apply,ye.disabled=true,ye.addEventListener("click",Po),$o.append(Gt,ye),o.append(k,E,I,$o),N(),queueMicrotask(()=>{k.isConnected&&k.focus();}),l.getDistinctValueSetAsync(e).then(x=>{if(fo!==t||!o.isConnected)return;a=x.entries,y=null,u="",i=false,ye.disabled=false;let M=datagridCore.selectedLabelsFromFilter(l.getColumnFilter(e,datagridCore.FILTER_PART_SET)??l.getColumnFilter(e,datagridCore.FILTER_PART_DEFAULT),a);M?(c=true,s=new Set(M)):c||(s=new Set(a.map(U=>U.label))),he();let H=go.get(e);N(),H&&(I.scrollTop=H,N());});});}function St(e={}){let n=l.getClipboardText(e);l.notifyClipboardGesture("copy",n?n.split(`
2
- `).length:0,()=>!n||!navigator.clipboard?.writeText?false:(navigator.clipboard.writeText(n).catch(()=>{}),true));}function vr(e){if(ut===false)return [];let n=ut===true?{}:ut,r=[],t=a=>{e&&r.length===0&&r.push({separator:true,id:"__dg-sep"}),r.push(a);};n.copy!==false&&t({id:"__dg-copy",label:w.menuCopy,shortcut:`${Rr}C`,onSelect:()=>St()}),n.copyWithHeaders!==false&&t({id:"__dg-copy-headers",label:w.menuCopyWithHeaders,onSelect:()=>St({includeHeaders:true})}),n.copyWithGroupHeaders!==false&&Er()&&t({id:"__dg-copy-group-headers",label:w.menuCopyWithGroupHeaders,onSelect:()=>St({includeGroupHeaders:true})});let o=n.export===false?[]:Array.isArray(n.export)?n.export:["csv","excel","excel-selected","pdf"];if(o.length>0){let a=l.getSelectedCount()===0,i={csv:w.exportCsv,excel:w.exportExcel,"excel-selected":w.exportExcelSelected,pdf:w.exportPdf};t({id:"__dg-export",label:w.menuExport,items:o.map(s=>({id:`__dg-export-${s}`,label:i[s],disabled:s==="excel-selected"&&a,onSelect:()=>{En(l,s).then(c=>{c.error&&dn(c.error);});}}))});}return r}function Er(){let e=l.getColumnModel();return l.getVisualColumnIds().some(n=>{let r=e.getDef(n)?.band;return typeof r=="string"?r!=="":Array.isArray(r)&&r.length>0})}let Rr=/Mac|iPhone|iPad|iPod/.test(navigator.platform??"")?"\u2318":"Ctrl+";function pn(e,n,r){let t=null,o=()=>{t?.remove(),t=null;};n.forEach((a,i)=>{if(a.separator){let b=g("kanuni-datagrid-menu-separator");b.setAttribute("role","separator"),e.appendChild(b);return}let s=g("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(i)),a.disabled&&(c.disabled=true),a.icon!==void 0){let b=g("kanuni-datagrid-menu-icon","span");typeof a.icon=="string"?b.textContent=a.icon:b.appendChild(a.icon),c.appendChild(b);}let d=g("kanuni-datagrid-menu-label","span");if(d.textContent=a.label??"",c.appendChild(d),a.shortcut){let b=g("kanuni-datagrid-menu-shortcut","span");b.textContent=a.shortcut,c.appendChild(b);}let p=a.items??[];if(p.length>0){let b=g("kanuni-datagrid-menu-caret","span");b.textContent="\u203A",c.appendChild(b),c.setAttribute("aria-haspopup","menu"),c.setAttribute("aria-expanded","false");let y=()=>{o();let u=g("kanuni-datagrid-context-menu kanuni-datagrid-submenu");u.setAttribute("role","menu");let f=c.getBoundingClientRect();u.style.left=`${f.right}px`,u.style.top=`${Math.max(0,f.top-4)}px`;for(let k of p){if(k.separator){let $=g("kanuni-datagrid-menu-separator");$.setAttribute("role","separator"),u.appendChild($);continue}let E=document.createElement("button");E.type="button",E.className="kanuni-datagrid-menu-item",E.setAttribute("role","menuitem"),k.disabled&&(E.disabled=true);let A=g("kanuni-datagrid-menu-label","span");A.textContent=k.label??"",E.appendChild(A),E.addEventListener("click",()=>{k.onSelect?.(r),V();}),u.appendChild(E);}e.parentElement?.appendChild(u),co(u,{left:f.right,top:Math.max(0,f.top-4)}),t=u,c.setAttribute("aria-expanded","true");};c.addEventListener("mouseenter",y),c.addEventListener("click",y);}else c.addEventListener("mouseenter",o),c.addEventListener("click",()=>{a.onSelect?.(r),V();});s.appendChild(c),e.appendChild(s);});}let mo=e=>{let r=e.target.closest(".kanuni-datagrid-row");if(!r||r.classList.contains("kanuni-datagrid-group-row"))return;let t=be(e);if(t?.columnId&&l.notifyCell("cellContextMenu",t.node,t.rowIndex,t.columnId),!ct&&!ut||!t||t.node.kind!=="data")return;e.preventDefault(),l.isRowSelected(t.node.key)||l.handleRowClick(t.node.key,{}),t.columnId&&l.focusCell(t.node.key,t.columnId);let o={row:t.node.data,node:t.node,rowIndex:t.rowIndex,columnId:t.columnId,selectedKeys:l.getSelectedKeys()},a=(typeof ct=="function"?ct(o):ct)??[],i=[...a,...Tr(o,a.length>0)],s=vr(i.length>0);i.length===0&&s.length===0||Ae({left:e.clientX,top:e.clientY},c=>{c.setAttribute("role","menu"),pn(c,[...i,...s],o);},"kanuni-datagrid-context-menu");};function Tr(e,n){if(!xe?.onChange||xe.menu===false)return [];let r=e.columnId;if(!r)return [];let t=e.node.key,o=rn(t,r,e.row),a=[];return n&&a.push({separator:true,id:"__note-sep"}),a.push({id:"__note-edit",label:o?w.editNote:w.addNote,onSelect:()=>Sr(t,r,e.row,o??"")}),o&&a.push({id:"__note-delete",label:w.deleteNote,onSelect:()=>xe.onChange?.({rowKey:t,columnId:r,row:e.row,text:null})}),a}function Sr(e,n,r,t){let a=(L.querySelector(`[data-row-key="${CSS.escape(String(e))}"] [data-column-id="${CSS.escape(n)}"]`)??L).getBoundingClientRect();queueMicrotask(()=>{Ae({left:a.left,top:a.bottom+2},i=>{i.setAttribute("aria-label",w.noteEditorAria);let s=document.createElement("textarea");s.className="kanuni-datagrid-note-input",s.rows=4,s.value=t,s.setAttribute("aria-label",w.noteEditorAria),s.placeholder=w.notePlaceholder,s.setAttribute("data-testid","dg-note-input");let c=()=>{let y=s.value.trim();V(),xe?.onChange?.({rowKey:e,columnId:n,row:r,text:y===""?null:y});};s.addEventListener("keydown",y=>{y.key==="Enter"&&(y.ctrlKey||y.metaKey)&&(y.preventDefault(),c()),y.key==="Escape"&&(y.preventDefault(),V());});let d=g("kanuni-datagrid-note-actions"),p=document.createElement("button");p.type="button",p.className="kanuni-datagrid-note-cancel",p.textContent=w.cancel,p.addEventListener("click",()=>V());let b=document.createElement("button");b.type="button",b.className="kanuni-datagrid-note-save",b.setAttribute("data-testid","dg-note-save"),b.textContent=w.save,b.addEventListener("click",c),d.append(p,b),i.append(s,d),queueMicrotask(()=>{s.focus(),s.select();});},"kanuni-datagrid-filter-popup kanuni-datagrid-note-editor");});}function Lr(e){Te!==e&&(Te=e,e?(L.insertBefore(_,S),mn()):_.remove());}function Ar(e){if(Z!==e){if(Z=e,e){if(le){let n=ce.length>0?Ve:B;F.insertBefore(K,n);}else F.append(K);sn();}else K.remove();Ve.style.setProperty("--dg-pinned-gap",String(ze+(Z&&le?1:0))),ge.style.setProperty("--dg-pinned-gap",String(ze+(Z&&le?1:0)));}}function gn(e){let n=Rn(L,e);n!==null&&l.setColumnWidth(e,n);}function Mr(e,n){let r=l.getColumnModel().getDef(e),t={columnId:e,headerName:r?.headerName??e},o=vn(t,{controller:l,t:w,groupPanelVisible:Te,footerVisible:Z,onToggleGroupPanel:()=>Lr(!Te),onToggleFooter:()=>Ar(!Z),onOpenFieldChooser:()=>bo(n),onBestFit:gn,onBestFitAll:()=>{for(let i of l.getColumnStates())i.visible&&gn(i.id);},maxGroupLevels:pe?Number.POSITIVE_INFINITY:1}),a=typeof Vt=="function"?Vt(t,o):o;a.length!==0&&Ae(n,i=>{i.setAttribute("role","menu"),pn(i,a,t);},"kanuni-datagrid-context-menu");}function Dr(e,n){let r=l.getColumnModel().getDef(e),t=l.getColumnSummary(e),o={columnId:e,headerName:r?.headerName??r?.field??e},a=[{id:"none",label:w.noTotal,disabled:t===null,onSelect:()=>l.setColumnSummary(e,null)},{id:"sep",separator:true},...datagridCore.allowedSummaryTypes(r?.dataType).map(i=>({id:i,label:Yt[i],disabled:t?.type===i,onSelect:()=>l.setColumnSummary(e,i)}))];Ae(n,i=>{i.setAttribute("role","menu"),pn(i,a,o);},"kanuni-datagrid-context-menu");}function bo(e){Ae(e,n=>{let r=g("kanuni-datagrid-filter-list");for(let t of l.getColumnStates()){let o=document.createElement("label");o.className="kanuni-datagrid-filter-item";let a=document.createElement("input");a.type="checkbox",a.checked=t.visible,a.addEventListener("change",()=>{l.setColumnVisible(t.id,a.checked);});let i=document.createElement("span"),s=l.getColumnModel().getDef(t.id);i.textContent=s?.headerName??t.id,o.append(a,i),r.appendChild(o);}n.appendChild(r);},"kanuni-datagrid-filter-popup kanuni-datagrid-column-chooser");}let De=null,fn=null,Lt=e=>{_.classList.toggle("kanuni-datagrid-group-panel--over",e);};function wo(e,n,r){let t=l.getGroupLevels();if(e===n)return;let o=t.filter(s=>s!==e),a=o.indexOf(n);if(a<0)return;let i=r==="before"?a:a+1;fn=e,l.groupBy([...o.slice(0,i),e,...o.slice(i)]);}function ho(e,n){let r=l.getGroupLevels(),t=r.indexOf(e),o=t+n;t<0||o<0||o>=r.length||wo(e,r[o],n===-1?"before":"after");}function yo(e,n){if(!e)return;let r=l.getGroupLevels();if(r.includes(e))return;let t=pe?Number.POSITIVE_INFINITY:1;if(r.length>=t){l.groupBy([...r.slice(0,t-1),e]);return}let o=n??r.length;l.groupBy([...r.slice(0,o),e,...r.slice(o)]);}function mn(){if(!Te)return;_.textContent="";let e=l.getGroupLevels();if(e.length===0){let c=g("kanuni-datagrid-group-panel-hint","span");c.textContent=w.groupPanelHint??"Drag a column header here to group by it",_.appendChild(c);return}let n=c=>l.getColumnModel().getDef(c)?.headerName??c,r=g("kanuni-datagrid-group-levels"),t=(c,d)=>c<d.top+d.height/2?"before":"after",o=(c,d)=>{for(let p of _.querySelectorAll(".kanuni-datagrid-group-level"))p.classList.remove("kanuni-datagrid-group-level--drop-before","kanuni-datagrid-group-level--drop-after");c&&d&&c.classList.add(`kanuni-datagrid-group-level--drop-${d}`);};e.forEach((c,d)=>{let p=g("kanuni-datagrid-group-level");p.style.setProperty("--dg-group-level",String(d)),p.setAttribute("data-group-level",String(d));let b=g("kanuni-datagrid-group-chip");if(b.setAttribute("role","button"),b.tabIndex=0,e.length>1&&(b.draggable=true),b.setAttribute("aria-label",`${datagridCore.fillText(w.groupLevelAria,{n:d+1})}: ${n(c)}`),b.addEventListener("dragstart",f=>{De=c,f.dataTransfer&&(f.dataTransfer.effectAllowed="move",f.dataTransfer.setData("text/x-kanuni-column",c));}),b.addEventListener("dragend",()=>{De=null,o(null,null);}),b.addEventListener("keydown",f=>{let k=f.ctrlKey||f.metaKey;k&&(f.key==="ArrowUp"||f.key==="ArrowLeft")?(f.preventDefault(),ho(c,-1)):k&&(f.key==="ArrowDown"||f.key==="ArrowRight")?(f.preventDefault(),ho(c,1)):(f.key==="Delete"||f.key==="Backspace")&&(f.preventDefault(),l.groupBy(e.filter(E=>E!==c)));}),p.addEventListener("dragover",f=>{!De&&!(f.dataTransfer?.types.includes("text/x-kanuni-column")??false)||(f.preventDefault(),f.stopPropagation(),o(p,t(f.clientY,p.getBoundingClientRect())));}),p.addEventListener("drop",f=>{f.preventDefault(),f.stopPropagation();let k=t(f.clientY,p.getBoundingClientRect());o(null,null),Lt(false);let E=De;if(De=null,E){wo(E,c,k);return}let A=f.dataTransfer?.getData("text/x-kanuni-column");A&&yo(A,k==="before"?d:d+1);}),e.length>1){let f=g("kanuni-datagrid-group-chip-level","span");f.textContent=String(d+1),b.appendChild(f);}let y=document.createElement("span");y.textContent=n(c);let u=document.createElement("button");u.type="button",u.setAttribute("aria-label",datagridCore.fillText(w.groupRemoveAria,{column:n(c)})),u.textContent="\xD7",u.addEventListener("click",()=>{l.groupBy(e.filter(f=>f!==c));}),u.draggable=false,b.append(y,u),p.appendChild(b),r.appendChild(p),fn===c&&(fn=null,queueMicrotask(()=>b.focus()));}),_.appendChild(r);let a=g("kanuni-datagrid-group-panel-actions"),i=document.createElement("button");i.type="button",i.textContent="Expand all",i.addEventListener("click",()=>l.expandAllGroups());let s=document.createElement("button");s.type="button",s.textContent="Collapse all",s.addEventListener("click",()=>l.collapseAllGroups()),a.append(i,s),_.appendChild(a);}if(Te){let e=n=>n.dataTransfer?.types.includes("text/x-kanuni-column")??false;_.addEventListener("dragover",n=>{e(n)&&(n.preventDefault(),Lt(true));}),_.addEventListener("dragleave",n=>{let r=n.relatedTarget;r&&_.contains(r)||Lt(false);}),_.addEventListener("drop",n=>{Lt(false);let r=n.dataTransfer?.getData("text/x-kanuni-column");if(r){if(n.preventDefault(),De){De=null;return}yo(r);}});}let Co="";function ko(){if(!Hn)return;let e=[datagridCore.fillText(w.announceRows,{n:l.getVisibleCount()})],n=l.getSort();if(n.length>0){let o=n.map(a=>{let i=l.getColumnModel().getDef(a.columnId),s=i?.headerName??i?.field??a.columnId,c=a.direction==="desc"?w.announceDescending:w.announceAscending;return `${s} ${c}`}).join(", ");e.push(datagridCore.fillText(w.announceSortedBy,{columns:o}));}let r=l.getSelectedCount();r>0&&e.push(datagridCore.fillText(w.announceSelected,{n:r}));let t=e.join(", ");t!==Co&&(Co=t,Xe.textContent=t);}function xo(){if(!Ft)return;Re.textContent="";let e=datagridCore.describeFilter(l.getEffectiveFilter(),l.getColumnModel(),{...Gn,labels:{...datagridCore.filterLabels(w),...Gn?.labels}});if(!e&&Ft!=="always"){Re.style.display="none";return}Re.style.display="";let n=l.isFilterEnabled();Re.className=`kanuni-datagrid-filter-panel${n?"":" kanuni-datagrid-filter-panel--suspended"}`;let r=document.createElement("button");r.type="button",r.className="kanuni-datagrid-filter-panel-clear",r.title=w.filterRemove,r.setAttribute("aria-label",w.filterRemove),r.setAttribute("data-testid","dg-filter-panel-clear"),r.disabled=e===null,r.textContent="\xD7",r.addEventListener("click",()=>{l.setFilter(null),l.clearColumnFilters(),l.setFilterEnabled(true);});let t=document.createElement("input");t.type="checkbox",t.className="kanuni-datagrid-filter-panel-toggle",t.checked=n,t.disabled=e===null,t.title=w.filterToggle,t.setAttribute("aria-label",w.filterToggle),t.setAttribute("data-testid","dg-filter-panel-toggle"),t.addEventListener("change",()=>l.setFilterEnabled(t.checked));let o=g("kanuni-datagrid-filter-panel-text","span");if(o.setAttribute("data-testid","dg-filter-panel-text"),o.textContent=e??w.filterNone,e&&(o.title=e),Re.append(r,t,o),Dn){let a=document.createElement("button");a.type="button",a.className="kanuni-datagrid-filter-panel-builder",a.title=w.filterEditBuilder,a.setAttribute("aria-label",w.filterEditBuilder),a.setAttribute("data-testid","dg-filter-panel-builder"),a.textContent="\u25BE",a.addEventListener("click",Dn),Re.appendChild(a);}}let bn=new Set,Nr=l.events.on("cellsFlashed",({rowKeys:e,columnIds:n,duration:r})=>{let t=e.length?e.map(s=>`[data-row-key="${CSS.escape(String(s))}"]`).join(","):".kanuni-datagrid-row",o=n.length?n.map(s=>`[data-column-id="${CSS.escape(s)}"]`).join(","):"[data-column-id]",a=[];D.querySelectorAll(t).forEach(s=>{s.querySelectorAll(o).forEach(c=>a.push(c));});for(let s of a)s.classList.remove("kanuni-datagrid-cell--flash");L.offsetWidth;for(let s of a)s.classList.add("kanuni-datagrid-cell--flash");let i=setTimeout(()=>{for(let s of a)s.classList.remove("kanuni-datagrid-cell--flash");bn.delete(i);},r);bn.add(i);});function be(e){let n=e.target,r=n.closest(".kanuni-datagrid-row");if(!r||!D.contains(r))return null;let t=r.getAttribute("data-row-key");if(t===null)return null;let o=l.getRows(),a=o.findIndex(s=>s!==void 0&&String(s.key)===t);if(a===-1)return null;let i=n.closest(".kanuni-datagrid-cell")?.getAttribute("data-column-id")??null;return {node:o[a],rowIndex:a,columnId:i}}let vo=e=>{let n=be(e);n&&(zo?.(n.node),l.notifyRow("rowClicked",n.node,n.rowIndex),n.columnId&&l.notifyCell("cellClicked",n.node,n.rowIndex,n.columnId));},Eo=e=>{let n=be(e);if(n){if($n){let r=xn(n);r&&$n(r);}_t?.(n.node),l.notifyRow("rowDoubleClicked",n.node,n.rowIndex),n.columnId&&l.notifyCell("cellDoubleClicked",n.node,n.rowIndex,n.columnId);}};D.addEventListener("click",vo),D.addEventListener("dblclick",Eo);function Ir(e){let n=0,r=J.querySelector(`[data-column-id="${CSS.escape(e)}"]`);r&&(n=r.scrollWidth),D.querySelectorAll(`[data-column-id="${CSS.escape(e)}"]`).forEach(t=>{t.scrollWidth>n&&(n=t.scrollWidth);}),n>0&&l.setColumnWidth(e,n+12,true);}function Hr(){if(P)for(let e of J.querySelectorAll(".kanuni-datagrid-filter-button")){let n=e.parentElement?.getAttribute("data-column-id");n&&e.classList.toggle("kanuni-datagrid-filter-button--active",l.getColumnFilter(n)!==null);}}let wn=false,Ro=false,_e=null;function At(){_e!==null&&(clearTimeout(_e),_e=null);}function Mt(e){qe.style.display=e?"":"none";}function Dt(){let e=l.getOverlay();if(mt.style.display=e==="noRows"?"":"none",Ut===false){At(),Mt(false);return}if(!(e==="loading"&&(wn||!Ro))){At(),Mt(false);return}if(wn||Bn<=0){At(),Mt(true);return}_e!==null||qe.style.display===""||(_e=setTimeout(()=>{_e=null,z||Mt(true);},Bn));}let To=false,hn=false,yn=false,Cn=false,z=false;function Gr(){if(hn=false,!z){if(yn)yn=false,Cn&&(Cn=false,ie++),en(),tn(),an(),un();else {let e=W;en(),W!==e&&(ie++,tn(),an(),un());}ln(),to(),sn(),uo(),Hr(),mn(),xo(),ko(),Dt();}}function kn(e){z||(e&&(yn=true),!hn&&(hn=true,queueMicrotask(Gr)));}let Pr=[...In?[l.events.on("focusedRowChanged",e=>In({rowKey:e.rowKey,row:e.row}))]:[],...yl.map(e=>l.events.on(e,()=>kn(true))),...Cl.map(e=>l.events.on(e,()=>{Cn=true;})),...kl.map(e=>l.events.on(e,()=>kn(false))),l.events.on("overlayChanged",e=>{wn=e.manual===true&&e.overlay==="loading",z||Dt();}),l.events.on("busyChanged",e=>{Ro=e.background===true,z||Dt();}),l.events.on("paginationChanged",()=>{z||kn(false);}),l.events.on("bodyScroll",()=>{z||io();}),l.events.on("scrollRequested",e=>{if(z)return;e.scrollTop!==void 0&&(S.scrollTop=e.scrollTop),e.scrollLeft!==void 0&&(S.scrollLeft=e.scrollLeft),l.setScroll(S.scrollTop,Math.abs(S.scrollLeft));let n=e.scrollTop;n===void 0||Math.abs(S.scrollTop-n)<=1||setTimeout(()=>{z||Math.abs(S.scrollTop-n)<=1||(S.scrollTop=n,l.setScroll(S.scrollTop,Math.abs(S.scrollLeft)));},0);}),...Wt==="fitGrid"?[l.events.on("gridSizeChanged",()=>l.sizeColumnsToFit())]:[],...Wt==="fitCells"?[l.events.on("firstDataRendered",()=>{z||To||(To=true,queueMicrotask(()=>{if(!z)for(let e of l.getColumnStates())e.visible&&gn(e.id);}));})]:[]];Wt==="fitGrid"&&l.sizeColumnsToFit();function xn(e){if(!e.columnId||e.node.kind!=="data")return null;let n=ne.find(r=>r.id===e.columnId);return n?{node:e.node,columnId:e.columnId,rowIndex:e.rowIndex,columnIndex:n.visualIndex,value:e.node.kind==="data"?l.getColumnModel().getCellValue(e.node.data,n.id):void 0}:null}let So=e=>{let n=e.target;if(Pn){let s=be(e),c=s?xn(s):null;c&&Pn(c,e);}let r=n.closest(".kanuni-datagrid-row");if(!r||r.classList.contains("kanuni-datagrid-group-row"))return;let t=r.getAttribute("data-row-key");if(t===null)return;let o=l.getRows().find(s=>s!==void 0&&String(s.key)===t);if(!o||o.kind!=="data")return;l.handleRowClick(o.key,{ctrlKey:e.ctrlKey||ir&&!e.shiftKey,metaKey:e.metaKey,shiftKey:e.shiftKey});let a=n.closest(".kanuni-datagrid-cell"),i=a?ne.find(s=>a.id.endsWith(`-${s.id}`))?.id:void 0;i&&l.focusCell(o.key,i);},Lo=e=>{if(!gt)return;let r=e.target.closest(".kanuni-datagrid-cell");if(!r||!D.contains(r)||e.relatedTarget?.closest?.(".kanuni-datagrid-cell")===r)return;let o=be(e),a=o?xn(o):null;a&&gt(a,e);};D.addEventListener("mousedown",So),D.addEventListener("contextmenu",mo),gt&&D.addEventListener("mouseover",Lo),je&&(B.addEventListener("dragstart",dr),B.addEventListener("dragover",sr),B.addEventListener("drop",ur),B.addEventListener("dragend",cr),B.addEventListener("dragleave",pr)),L.tabIndex=0;let Ao=e=>{let n=e.target;if(n.tagName==="INPUT"||n.tagName==="TEXTAREA"||n.isContentEditable)return;let r=datagridCore.resolveGridCommand({key:e.key,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,altKey:e.altKey});if(!r)return;if(r.type==="copy"){St();return}if(r.type==="activate"){if(_t){let a=l.getFocus(),i=a?l.getRows().find(s=>s!==void 0&&s.key===a.rowKey):void 0;i&&_t(i);}r.preventDefault&&e.preventDefault();return}l.executeCommand(r),r.preventDefault&&e.preventDefault();let t=l.getFocusIndices();if(t){let i=l.getColumnLayout().center.findIndex(c=>c.state.id===l.getFocus()?.columnId),s=l.ensureVisible(t.rowIndex,i===-1?void 0:i);s&&(s.scrollTop!==void 0&&(S.scrollTop=s.scrollTop),s.scrollLeft!==void 0&&(S.scrollLeft=s.scrollLeft),l.setScroll(S.scrollTop,Math.abs(S.scrollLeft)));}let o=l.getFocus();L.setAttribute("aria-activedescendant",o?`${m.gridId}-cell-${String(o.rowKey)}-${o.columnId}`:"");};L.addEventListener("keydown",Ao);let $r=On?datagridCore.attachStateStoring(l,On):null,Kr=typeof ke=="object"?ke.delay??400:400,Or=ke!==false&&!(typeof ke=="object"&&ke.enabled===false),Fr=typeof ke=="object"?ke.showOnTruncation!==false:true,et=null,Nt=null;function tt(){Nt&&clearTimeout(Nt),Nt=null,et?.remove(),et=null;}let Br=e=>e.scrollWidth>e.clientWidth+1||e.scrollHeight>e.clientHeight+1;function _r(e){let r=e.closest(".kanuni-datagrid-row")?.getAttribute("data-row-key"),t=ne.find(s=>e.id.endsWith(`-${s.id}`));if(!r||!t)return null;let o=l.getRows().find(s=>s!==void 0&&String(s.key)===r);if(!o||o.kind!=="data")return null;let a=t.def,i=rn(o.key,t.id,o.data);if(i)return i;if(typeof a.tooltip=="function")return a.tooltip({value:l.getColumnModel().getCellValue(o.data,t.id),row:o.data,node:o,column:a})??null;if(typeof a.tooltip=="string")return a.tooltip;if(a.tooltipField){let s=o.data[a.tooltipField];return s==null?null:String(s)}return Fr&&Br(e)?e.textContent??null:null}let Mo=e=>{if(!Or)return;tt();let n=e.target.closest(".kanuni-datagrid-cell");!n||!D.contains(n)||(Nt=setTimeout(()=>{let r=_r(n);if(!r)return;let t=n.getBoundingClientRect();et=g(`${Mn(m)} kanuni-datagrid-portal`);let o=g("kanuni-datagrid-tooltip");o.setAttribute("role","tooltip"),o.textContent=r,o.style.position="fixed",o.style.left=`${t.left}px`,o.style.top=`${t.bottom+4}px`,o.style.zIndex="1001",et.appendChild(o),document.body.appendChild(et);},Kr));},Do=()=>tt();L.addEventListener("pointerover",Mo),L.addEventListener("pointerout",Do),S.addEventListener("scroll",tt,{passive:true});let No=()=>{if(l.setScroll(S.scrollTop,Math.abs(S.scrollLeft)),we)for(let e of Io())e.scroller.scrollLeft!==S.scrollLeft&&(e.scroller.scrollLeft=S.scrollLeft);};S.addEventListener("scroll",No,{passive:true});let we=null,Io=()=>{if(!Q||!we)return [];let e=rt.get(Q);return e?[...e].filter(n=>n!==we):[]},Ho=null;if(Q){we={controller:l,scroller:S};let e=rt.get(Q)??new Set;e.add(we),rt.set(Q,e),Ho=l.events.on("columnStateChanged",()=>{if(An.has(Q))return;let n=Io();if(n.length===0)return;let r=l.getColumnStates();An.add(Q);try{for(let t of n)t.controller.applyColumnStates(r);}finally{An.delete(Q);}});}let Go=()=>{l.setViewportSize(S.clientWidth,S.clientHeight),S.style.setProperty("--dg-viewport-width",`${S.clientWidth}px`);let e=B.getBoundingClientRect(),n=F.getBoundingClientRect();l.setChromeOffsets(e.top-n.top,n.bottom-e.bottom),datagridCore.calibrateMaxScrollOffset(S,l);};Go();let It=null;return typeof ResizeObserver<"u"&&(It=new ResizeObserver(Go),It.observe(S),It.observe(F)),en(),tn(),an(),kr(),un(),ln(),sn(),uo(),mn(),xo(),ko(),Dt(),Je?.always&&Jt(true),{controller:l,element:L,setData:e=>l.setData(e),setColumns:e=>l.setColumns(e),destroy:()=>{if(!z){if(z=true,Pr.forEach(e=>e()),It?.disconnect(),eo?.(),Oe&&(Oe=false,Ie--,Ie<=0&&(Ie=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),Ho?.(),Q&&we){let e=rt.get(Q);e?.delete(we),e&&e.size===0&&rt.delete(Q),we=null;}S.removeEventListener("scroll",No),D.removeEventListener("mousedown",So),D.removeEventListener("contextmenu",mo),gt&&D.removeEventListener("mouseover",Lo),D.removeEventListener("click",vo),D.removeEventListener("dblclick",Eo),Nr(),At();for(let e of bn)clearTimeout(e);L.removeEventListener("keydown",Ao),L.removeEventListener("pointerover",Mo),L.removeEventListener("pointerout",Do),S.removeEventListener("scroll",tt),tt(),$r?.(),V(),l.dispose(),L.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,"isPackagedTheme",{enumerable:true,get:function(){return datagridCore.isPackagedTheme}});Object.defineProperty(exports,"presetRowHeight",{enumerable:true,get:function(){return datagridCore.presetRowHeight}});exports.CHECKBOX_COLUMN_WIDTH=$t;exports.DETAIL_COLUMN_WIDTH=at;exports.PRINT_MAX_ROWS=Wo;exports.ROW_DRAG_MIME=Kt;exports.ROW_NUMBER_COLUMN_WIDTH=lt;exports.buildHeaderMenu=vn;exports.createGrid=Al;exports.measureBestFitWidth=Rn;
1
+ 'use strict';var datagridCore=require('@kanunilabs/datagrid-core');function Wn(v,f){let{controller:C,maxGroupLevels:L,t:T}=f,M=v.columnId,K=C.getColumnModel().getDef(M),O=C.getSort(),ie=O.find(P=>P.columnId===M),he=C.getGroupLevels(),ye=he.includes(M),kt=K?.sortable!==false,Ce=C.getColumnStates().find(P=>P.id===M)?.pinned??null,xt=K?.groupable!==false,vt=C.canGroup(),nt=[{id:"sort-asc",label:T.sortAsc,disabled:!kt||ie?.direction==="asc",onSelect:()=>C.setSort([{columnId:M,direction:"asc"}])},{id:"sort-desc",label:T.sortDesc,disabled:!kt||ie?.direction==="desc",onSelect:()=>C.setSort([{columnId:M,direction:"desc"}])},{id:"sort-clear",label:T.clearSort,disabled:!ie,onSelect:()=>C.setSort(O.filter(P=>P.columnId!==M))},{id:"sep-1",separator:true},{id:"group",label:ye?T.ungroupColumn:T.groupByColumn,disabled:!xt,onSelect:()=>{ye?C.groupBy(he.filter(P=>P!==M)):C.groupBy([...he,M].slice(-L));}},{id:"group-panel",label:f.groupPanelVisible?T.hideGroupPanel:T.showGroupPanel,onSelect:f.onToggleGroupPanel},{id:"footer",label:f.footerVisible?T.hideFooter:T.showFooter,onSelect:f.onToggleFooter},{id:"sep-2",separator:true},{id:"hide-column",label:T.hideColumn,disabled:C.getColumnStates().filter(P=>P.visible).length<=1,onSelect:()=>C.setColumnVisible(M,false)},{id:"field-chooser",label:T.fieldChooser,onSelect:f.onOpenFieldChooser},{id:"sep-3",separator:true},{id:"best-fit",label:T.bestFit,disabled:K?.resizable===false,onSelect:()=>f.onBestFit(M)},{id:"best-fit-all",label:T.bestFitAll,onSelect:f.onBestFitAll}],Me=C.getColumnStates().filter(P=>P.visible&&P.pinned===Ce).map(P=>P.id),ue=Me.indexOf(M),ot=K?.reorderable!==false&&ue>=0;return nt.push({id:"sep-4",separator:true},{id:"move-left",label:T.moveLeft,disabled:!ot||ue<=0,onSelect:()=>C.moveColumn(M,Me[ue-1])},{id:"move-right",label:T.moveRight,disabled:!ot||ue<0||ue>=Me.length-1,onSelect:()=>C.moveColumn(M,Me[ue+2])},{id:"fixed-position",label:T.fixedPosition,items:[{id:"pin-left",label:T.pinLeft,disabled:Ce==="left",onSelect:()=>C.setColumnPinned(M,"left")},{id:"pin-right",label:T.pinRight,disabled:Ce==="right",onSelect:()=>C.setColumnPinned(M,"right")},{id:"pin-sticky",label:T.pinSticky,disabled:Ce==="sticky",onSelect:()=>C.setColumnPinned(M,"sticky")}]},{id:"unpin",label:T.unpin,disabled:Ce===null,onSelect:()=>C.setColumnPinned(M,null)}),vt?nt:nt.filter(P=>P.id!=="group"&&P.id!=="group-panel")}async function Vn(v,f){try{let C=f==="csv"?await v.exportToCsv():f==="excel"?await v.exportToExcel():f==="excel-selected"?await v.exportToExcel({selectedOnly:!0}):await v.exportToPdf();return datagridCore.downloadBlob(C.blob,C.fileName),{completed:!0}}catch(C){return C instanceof datagridCore.ExportAbortedError?{completed:false}:{completed:false,error:C instanceof Error?C.message:String(C)}}}var ki=null;function Il(){return typeof document>"u"?null:(ki??=document.createElement("canvas"),ki.getContext("2d"))}function xi(v){let f=getComputedStyle(v);return `${f.fontStyle} ${f.fontWeight} ${f.fontSize} ${f.fontFamily}`}function Nl(v){for(let f=v.firstElementChild;f;f=f.nextElementSibling)if(f.tagName!=="MARK")return true;return false}function Hl(v){let f=v.map(L=>[L.style.width,L.style.minWidth,L.style.maxWidth]);for(let L of v)L.style.width="max-content",L.style.minWidth="0",L.style.maxWidth="none";let C=0;for(let L of v){let T=Math.ceil(L.getBoundingClientRect().width);T>C&&(C=T);}return v.forEach((L,T)=>{[L.style.width,L.style.minWidth,L.style.maxWidth]=f[T];}),C}function qn(v,f){let C=Il();if(!C)return null;let L=typeof CSS<"u"&&CSS.escape?CSS.escape(f):f.replace(/"/g,'\\"'),T=v.querySelector(`.kanuni-datagrid-header-cell[data-column-id="${L}"]`),M=v.querySelectorAll(`.kanuni-datagrid-cell[data-column-id="${L}"]`);if(!T&&M.length===0)return null;let K=0;if(T){let O=T.querySelector(".kanuni-datagrid-header-label")??T;C.font=xi(O),K=C.measureText(O.textContent??"").width+44;}if(M.length>0){C.font=xi(M[0]);let O=[];for(let ie=0;ie<M.length;ie++){if(Nl(M[ie])){O.push(M[ie]);continue}let he=M[ie].textContent??"";if(he==="")continue;let ye=C.measureText(he).width+20;ye>K&&(K=ye);}O.length>0&&(K=Math.max(K,Hl(O)));}return K===0?null:Math.round(Math.min(640,Math.max(48,K)))}var ht=60,Jt=36,yt=28,Zt="application/x-kanuni-row",wt=new Map,jn=new Set,Si=5e3,ze=0,ar=["columnStateChanged","sortChanged"],dr=["columnStateChanged"],sr=["contentReady","viewportChanged","filterChanged","selectionChanged","focusChanged","summariesChanged","cellsRefreshed","findChanged"],p=(v,f="div")=>{let C=document.createElement(f);return C.className=v,C},Ct="http://www.w3.org/2000/svg";function ur(v,f){let C=T=>{f&&console.warn(`[datagrid] ${T} is an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to use it.`);};if(v.viewportDatasource)throw new Error("[datagrid] viewportDatasource is an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to use it.");let L={...v};if(L.dataSource!=null&&!Array.isArray(L.dataSource)&&L.grouping&&(C("grouping a server-side DataSource is"),delete L.grouping),L.columns?.some(T=>T.spanRows)&&(C("cell span/merge (spanRows) is"),L={...L,columns:L.columns.map(T=>T.spanRows?{...T,spanRows:void 0}:T)}),L.tree&&(C("tree data is"),delete L.tree),L.masterDetail&&(C("master-detail is"),delete L.masterDetail),L.grouping){let{groupBy:T,groupSummaries:M}=L.grouping,K=T==null?[]:typeof T=="string"?[T]:T;(K.length>1||M)&&(C("multi-level grouping and group summaries are"),L={...L,grouping:{...L.grouping,groupBy:K.slice(0,1),groupSummaries:false}});}return L}var cr={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:""},en=new Set;function pr(v){for(let f of Object.keys(v)){let C=cr[f];C===void 0||C===""||en.has(f)||(en.add(f),console.warn(`[datagrid] \`${f}\` is a React-only option \u2014 ${C}.`));}}function gr(){let v=document.createElementNS("http://www.w3.org/2000/svg","svg");v.setAttribute("width","14"),v.setAttribute("height","14"),v.setAttribute("viewBox","0 0 16 16"),v.setAttribute("aria-hidden","true"),v.setAttribute("focusable","false");let f=document.createElementNS("http://www.w3.org/2000/svg","path");return f.setAttribute("d","M8 1v8m0 0L5 6m3 3 3-3M2 11v2a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2"),f.setAttribute("fill","none"),f.setAttribute("stroke","currentColor"),f.setAttribute("stroke-width","1.5"),f.setAttribute("stroke-linecap","round"),f.setAttribute("stroke-linejoin","round"),v.appendChild(f),v}function fr(){let v=document.createElementNS(Ct,"svg");v.setAttribute("width","11"),v.setAttribute("height","11"),v.setAttribute("viewBox","0 0 16 16"),v.setAttribute("aria-hidden","true"),v.setAttribute("focusable","false");let f=document.createElementNS(Ct,"path");return f.setAttribute("d","M1.5 2.5h13L9.5 8.6v4.3l-3 1.6V8.6L1.5 2.5Z"),f.setAttribute("fill","currentColor"),f.setAttribute("stroke","currentColor"),f.setAttribute("stroke-width","0.6"),f.setAttribute("stroke-linejoin","round"),v.appendChild(f),v}function mr(v){let f=document.createElementNS(Ct,"svg");f.setAttribute("width","14"),f.setAttribute("height","14"),f.setAttribute("viewBox","0 0 16 16"),f.setAttribute("aria-hidden","true"),f.setAttribute("focusable","false");let C=document.createElementNS(Ct,"rect");C.setAttribute("x","2"),C.setAttribute("y","2"),C.setAttribute("width","12"),C.setAttribute("height","12"),C.setAttribute("rx","2"),C.setAttribute("fill","none"),C.setAttribute("stroke","currentColor"),C.setAttribute("stroke-width","1.3"),f.appendChild(C);let L=T=>{let M=document.createElementNS(Ct,"path");M.setAttribute("d",T),M.setAttribute("fill","none"),M.setAttribute("stroke","currentColor"),M.setAttribute("stroke-width","1.3"),M.setAttribute("stroke-linecap","round"),f.appendChild(M);};return L("M5 8h6"),v&&L("M8 5v6"),f}function Ti(v,f){let C=v??(f==="number"||f==="bigint"?"right":"left");return C==="right"?"kanuni-datagrid-cell kanuni-datagrid-cell--number":C==="center"?"kanuni-datagrid-cell kanuni-datagrid-cell--center":"kanuni-datagrid-cell"}function Qn(v){let f="kanuni-datagrid-root";return v.dark&&(f+=" kanuni-datagrid-dark"),v.theme&&(f+=` kanuni-datagrid-theme-${v.theme}`),v.palette&&(f+=` kanuni-datagrid-palette-${v.palette}`),v.density&&(f+=` kanuni-datagrid-density-${v.density}`),f}function br(v,f){let{theme:C,palette:L,density:T,dark:M,striped:K=true,rowNumbers:O=false,locale:ie="en",footer:he=false,footerMenu:ye=true,footerPosition:kt="bottom",notes:Ce,pinnedTopRows:xt=[],pinnedBottomRows:vt=[],resizable:nt=true,reorderable:Me=true,filterRow:ue=false,headerFilter:ot=false,filterIconMode:P="hover",filterPanel:tn=false,onOpenFilterBuilder:Jn,focusedRow:Zn=false,focusedRowKey:nn,onFocusedRowChanged:eo,onRowClick:Li,onRowActivate:on,autoSizeStrategy:ln="none",renderRow:Et,announcements:to=true,filterPanelLabels:no,showRowCount:Ai=false,toolbarColumnChooser:Mi=false,cellMenu:it=true,rowMenu:lt,headerMenu:rn,rowDrag:De,alignedGrids:le,printLayout:Rt,renderCellContent:rt,getCellClassName:an,onCellPointerDown:oo,onCellPointerEnter:Tt,onCellDoubleClick:io,onHeaderClick:lo,getHeaderClassName:ro,renderHeaderLabel:Di,renderDetail:ao,renderEditForm:Ii,enterpriseEdition:ke=false,stateStoring:so,tooltip:re=true,renderOverlay:dn,filterDebounce:Ni,toolbar:uo=false,highlightSearch:Hi=true,sortable:Gi=true,toolbarItemsAfter:Pi,toolbarItemsBefore:$i,toolbarExcel:Ki=false,toolbarPdf:Oi=false,searchDebounce:Fi=200,...Bi}=f;pr(f),Ai&&!en.has("showRowCount:deprecated")&&(en.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(ie),{emptyText:_i=w.noData,loadingText:Wi=w.busy,loadingOverlay:sn=true,...ee}=Bi,co=typeof sn=="number"?sn:300,un=datagridCore.summaryTypeLabels(w),po=datagridCore.datePeriodLabels(w);if((!ee.columns||ee.columns.length===0)&&f.autoColumns!==false){let e=Array.isArray(ee.dataSource)?ee.dataSource:[];ee.columns=datagridCore.inferColumns(e,typeof f.autoColumns=="object"?f.autoColumns:{});}ee.rowHeight===void 0&&(ee.rowHeight=datagridCore.presetRowHeight(C,T,28));let Vi=ke?ee:ur(ee,!!f.debugMode),Ie=ke?Ce:void 0;!ke&&Ce&&f.debugMode&&console.warn("[datagrid] cell notes are an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to show them.");let l=new datagridCore.DataGridController(Vi);l.setEnterpriseEdition(ke),nn!=null&&l.focusRow(nn);let A=p(Qn(f));A.style.height="100%",A.setAttribute("role","grid"),A.setAttribute("aria-label",f.ariaLabel??f.gridId),A.setAttribute("data-grid-id",f.gridId),C&&A.setAttribute("data-theme",C),A.style.setProperty("--dg-row-height",`${l.getRowHeight()}px`);let D=p("kanuni-datagrid-scroller"),_=p("kanuni-datagrid-canvas"),F=p("kanuni-datagrid-header");F.setAttribute("role","row");let q=p("kanuni-datagrid-rows");q.style.position="relative";let N=p("kanuni-datagrid-viewport");q.appendChild(N);let ae=p("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--top"),xe=p("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--bottom"),Ne=()=>xt.length+l.getPinnedRows("top").length,go=()=>vt.length+l.getPinnedRows("bottom").length,Y=p("kanuni-datagrid-sticky-groups");Y.setAttribute("aria-hidden","true");let de=he,me=kt==="top",z=p(`kanuni-datagrid-footer-row kanuni-datagrid-footer-row--${me?"top":"bottom"}`);if(z.setAttribute("role","row"),z.setAttribute("aria-label",w.columnTotalsAria),ye){let e=t=>{let n=t.target?.closest(".kanuni-datagrid-footer-cell")?.getAttribute("data-column-id");!n||datagridCore.isChromeColumn(n)||(t.preventDefault(),wl(n,{left:t.clientX,top:t.clientY}));};z.addEventListener("click",e),z.addEventListener("contextmenu",e);}let St=p("kanuni-datagrid-bands-host");St.style.display="contents";let He=p("kanuni-datagrid-filter-row");He.setAttribute("role","row"),_.append(St,F),ue&&_.append(He);let Ge=ue?2:1,cn=0,pn=()=>cn+Ge+Ne();z.style.setProperty("--dg-pinned-gap",String(me?Ge:0)),ae.style.setProperty("--dg-pinned-gap",String(Ge+(de&&me?1:0))),de&&me&&_.append(z),Ne()>0&&_.append(ae),l.hasStickyGroupHeaders()&&(Y.style.setProperty("--dg-pinned-gap",String(Ge+(de&&me?1:0))),Y.style.setProperty("--dg-sticky-below",`${Ne()>0?Ne()*l.getRowHeight()+1:0}px`),_.append(Y)),_.append(q),go()>0&&_.append(xe),de&&!me&&_.append(z),D.appendChild(_);let ve=p("kanuni-datagrid-toolbar"),se=p("kanuni-datagrid-pager");se.setAttribute("role","navigation"),se.setAttribute("aria-label",w.pagerAria);let Pe=p("kanuni-datagrid-filter-panel"),$e=!!ee.grouping?.panel,j=p("kanuni-datagrid-group-panel");uo&&A.appendChild(ve),$e&&A.appendChild(j),A.appendChild(D),tn&&A.appendChild(Pe);let Lt=ee.pagination;Lt&&Lt.enabled!==false&&A.appendChild(se);let at=p("kanuni-datagrid-loading-overlay"),fo=p("kanuni-datagrid-loading-card"),mo=p("kanuni-datagrid-loading-spinner","span");mo.setAttribute("aria-hidden","true");let bo=p("kanuni-datagrid-loading-label","span");bo.textContent=Wi,fo.append(mo,bo),at.appendChild(fo),at.style.display="none";let dt=p("kanuni-datagrid-sr-only","div");dt.setAttribute("role","status"),dt.setAttribute("aria-live","polite"),dt.setAttribute("aria-atomic","true");let At=p("kanuni-datagrid-empty");At.textContent=_i,At.style.display="none",A.append(at,At),to&&A.appendChild(dt),v.appendChild(A);let st=ee.selection,gn=l.getGroupDisplay()!=="fullWidth",wo=l.getGroupDisplay()==="column",Ue=(st?.mode??"none")!=="none"&&(st?.checkboxColumn??false),qi=(st?.rowClick??(Ue?"toggle":"replace"))==="toggle",Xe=l.hasMasterDetail()&&!!ao,fn=()=>(O?1:0)+(Xe?1:0)+(Ue?1:0),mn=O?ht:0,ho=mn+(Xe?yt:0),ce=(O?ht:0)+(Xe?yt:0)+(Ue?Jt:0);l.setLeadWidth(ce);let ut=!!De?.enabled,ct=De?.group??null,yo=De?.allowReordering??true,Co=De?.allowDropInsert??ct!==null,be=null,Mt=null,Dt=false,Ke=null,Ee=null;function Ye(e){Ke=e;for(let t of N.querySelectorAll(".kanuni-datagrid-row")){let i=t.getAttribute("data-row-key"),n=e!==null&&i===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 ko=(e,t)=>{let i=t.getBoundingClientRect();return e.clientY<i.top+i.height/2?"before":"after"},xo=e=>e.dataTransfer?.types.includes(Zt)?be!==null?yo:Co&&ct!==null:false;function vo(e,t,i){let n=null;try{let o=e.dataTransfer?.getData(Zt);n=o?JSON.parse(o):null;}catch{n=null;}if(n){if(n.gridId===l.gridId){if(!yo)return;if(De?.onReorder){De.onReorder({dragKey:n.rowKey,targetKey:t,position:i,row:l.getRowByKey(n.rowKey)});return}l.moveRow(n.rowKey,t,i);return}!Co||ct===null||n.group!==ct||De?.onAdd?.({row:n.row,rowKey:n.rowKey,otherGridId:n.gridId,targetKey:t,position:i});}}let zi=e=>{let t=Se(e);if(!t||t.node.kind!=="data"||!e.dataTransfer)return;be=t.node.key,Mt=t.node.key,Dt=false;let i={gridId:l.gridId,group:ct,rowKey:t.node.key,row:t.node.data};e.dataTransfer.setData(Zt,JSON.stringify(i)),e.dataTransfer.setData("text/plain",String(t.node.key)),e.dataTransfer.effectAllowed="move",l.notifyRowDrag("enter",{rowKey:t.node.key});},Ui=e=>{if(!xo(e))return;e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move");let t=Se(e);if(!t||t.node.kind!=="data")return;if(be===t.node.key){Ee=null,Ye(null);return}let i=e.target.closest(".kanuni-datagrid-row"),n=ko(e,i),o=Ke?.key!==t.node.key||Ke.side!==n;Ee={key:t.node.key,side:n},Ye({key:t.node.key,side:n}),o&&be!==null&&l.notifyRowDrag("move",{rowKey:be,overKey:t.node.key,position:n});},Xi=e=>{if(!xo(e)){Ye(null);return}e.preventDefault();let t=Se(e);if(Dt=true,t&&t.node.kind==="data"){let i=e.target.closest(".kanuni-datagrid-row"),n=ko(e,i);Ee={key:t.node.key,side:n},vo(e,t.node.key,n);}else Ee=null,vo(e,null,"after");be=null,Ye(null);},Yi=()=>{Mt!==null&&l.notifyRowDragEnd({rowKey:Mt,dropped:Dt,overKey:Ee?.key??null,position:Ee?.side??null}),Dt=false,Mt=null,be=null,Ee=null,Ye(null);},ji=e=>{let t=e.relatedTarget;t&&q.contains(t)||be!==null&&(Ee=null,Ye(null),l.notifyRowDrag("leave",{rowKey:be}));},pt=Rt===void 0||Rt===false?null:(()=>{let e=Rt===true?{}:Rt;return {always:e.always??false,maxRows:e.maxRows??Si}})(),je=false;function bn(e){je!==e&&(je=e,A.classList.toggle("kanuni-datagrid-print",e),e?(ze++,document.documentElement.classList.add("kanuni-datagrid-printing")):(ze--,ze<=0&&(ze=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),vn());}let Eo=null;if(pt&&!pt.always){let e=()=>{let i=l.getRows().length;if(i>pt.maxRows){l.isDebugMode()&&console.warn(`[datagrid] print layout skipped: ${i} rows exceeds maxRows (${pt.maxRows}). Printing the visible rows instead \u2014 use exportPdf() for the whole result.`);return}bn(true);},t=()=>bn(false);window.addEventListener("beforeprint",e),window.addEventListener("afterprint",t),Eo=()=>{window.removeEventListener("beforeprint",e),window.removeEventListener("afterprint",t);};}let we=0,pe=[],Q=0,wn=0;function hn(){let e=l.getColumnLayout(),t=l.getVirtualWindow().columns,i=[],n=(a,d,r,s)=>{let u=a.def;i.push({def:u,id:a.state.id,width:a.state.width,pinned:d,inset:r,className:Ti(u.align,u.dataType)+(d?" kanuni-datagrid-cell--pinned":"")+(u.autoHeight?" kanuni-datagrid-cell--wrap":""),visualIndex:s});};e.left.forEach((a,d)=>n(a,"left",e.leftOffsets[d]+ce,d));for(let a=t.start;a<t.end&&a<e.center.length;a++)n(e.center[a],null,0,e.left.length+a);e.right.forEach((a,d)=>n(a,"right",e.rightOffsets[d],e.left.length+e.center.length+d)),pe=i,Q=t.offsetX;let o=(e.centerOffsets[Math.min(t.end,e.center.length)]??0)-(e.centerOffsets[Math.min(t.start,e.center.length)]??0);wn=Math.max(0,e.centerWidth-t.offsetX-o),_.style.minWidth=`${e.totalWidth+ce}px`;}let It=26;function Qi(){let e=l.getColumnLayout(),t=l.getVirtualWindow().columns,i=[...e.left,...e.center.slice(t.start,Math.min(t.end,e.center.length)),...e.right],n=datagridCore.bandDepth(i);if(cn=n,St.textContent="",F.style.top=`${n*It}px`,A.style.setProperty("--dg-band-offset",`${n*It}px`),n===0)return;datagridCore.computeHeaderBands(i,n).forEach((a,d)=>{let r=p("kanuni-datagrid-band-row");if(r.style.top=`${d*It}px`,r.style.height=`${It}px`,ce>0){let s=p("kanuni-datagrid-band-cell kanuni-datagrid-band-cell--spacer kanuni-datagrid-band-cell--pinned");s.style.width=`${ce}px`,s.style.flex="none",s.style.insetInlineStart="0px",r.appendChild(s);}if(Q>0){let s=p("kanuni-datagrid-spacer");s.style.width=`${Q}px`,s.style.flex="none",r.appendChild(s);}for(let s of a){let u=p(`kanuni-datagrid-band-cell${s.spacer?" kanuni-datagrid-band-cell--spacer":""}`);if(u.style.width=`${s.width}px`,u.style.flex="none",!s.spacer){if(s.columnIds.length>0){let g=datagridCore.bandPath(l.getColumnModel().getDef(s.columnIds[0])).slice(0,d+1);if(g.length===d+1&&l.isBandCollapsible(g)){let x=l.isBandCollapsed(g),y=document.createElement("button");y.type="button",y.className="kanuni-datagrid-band-toggle",y.setAttribute("aria-expanded",String(!x));let k=x?w.expandColumnGroup:w.collapseColumnGroup;y.setAttribute("aria-label",k),y.title=k,y.appendChild(mr(x)),y.addEventListener("click",c=>{c.stopPropagation(),l.toggleBand(g);}),u.appendChild(y);}}let m=p("kanuni-datagrid-band-label","span");m.textContent=s.label,u.appendChild(m);}r.appendChild(u);}St.appendChild(r);});}let Qe=null,Nt=null;function Ht(e,t){Nt&&Nt!==e&&Nt.classList.remove("kanuni-datagrid-header-cell--drop-before","kanuni-datagrid-header-cell--drop-after"),Nt=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 Ro(){if(!Qe)return;let e=l.getSelectedCount(),t=l.getSelectableCount(),i=t>0&&e>=t;Qe.checked=i,Qe.indeterminate=!i&&e>0,Qe.disabled=t===0&&e===0;}let gt=null;function To(e){gt=e;for(let t of Array.from(F.querySelectorAll(".kanuni-datagrid-header-cell[data-column-id]")))t.tabIndex=t.getAttribute("data-column-id")===e?0:-1;}function yn(){Qi();let e=document.activeElement,t=e&&F.contains(e)?e.closest("[data-column-id]")?.getAttribute("data-column-id")??null:null,i=l.getColumnLayout(),n=[...i.left,...i.center,...i.right].map(r=>r.state.id);(!gt||!n.includes(gt))&&(gt=n[0]??null);let o=l.getSort(),a=new Map(o.map((r,s)=>[r.columnId,{direction:r.direction,order:s}]));if(F.textContent="",Qe=null,O){let r=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-rownum-cell");r.setAttribute("role","columnheader"),r.style.width=`${ht}px`,r.style.flex="none",r.style.insetInlineStart="0px",F.appendChild(r);}if(Xe){let r=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-detail-toggle-cell");r.setAttribute("role","columnheader"),r.setAttribute("aria-label",w.detailsAria),r.style.width=`${yt}px`,r.style.flex="none",r.style.insetInlineStart=`${mn}px`,F.appendChild(r);}if(Ue){let r=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-select-cell");r.setAttribute("role","columnheader"),r.style.width=`${Jt}px`,r.style.flex="none",r.style.insetInlineStart=`${ho}px`;let s=document.createElement("input");s.type="checkbox",s.setAttribute("aria-label",w.selectAllRows),s.addEventListener("change",()=>{l.getSelectedCount()>0?l.clearSelection():l.selectAll();}),r.appendChild(s),F.appendChild(r),Qe=s,Ro();}let d=false;for(let r of pe){if(!r.pinned&&!d){if(Q>0){let h=document.createElement("div");h.style.flex=`0 0 ${Q}px`,F.appendChild(h);}d=true;}let s=Gi&&r.def.sortable!==false,u=r.id===datagridCore.GROUP_COLUMN_ID,m=a.get(u?l.getGroupLevels()[0]??r.id:r.id),g=p(`kanuni-datagrid-header-cell${s?" kanuni-datagrid-header-cell--sortable":""}${r.pinned?" kanuni-datagrid-header-cell--pinned":""}`);g.setAttribute("role","columnheader"),g.setAttribute("data-column-id",r.id),g.tabIndex=r.id===gt?0:-1,g.addEventListener("focus",()=>To(r.id)),g.setAttribute("aria-sort",m?m.direction==="asc"?"ascending":"descending":"none");let x=r.def.headerTooltip;x&&(g.title=x),g.style.width=`${r.width}px`,g.style.flex="none",r.pinned==="left"&&(g.style.insetInlineStart=`${r.inset}px`),r.pinned==="right"&&(g.style.insetInlineEnd=`${r.inset}px`);let y=p("kanuni-datagrid-header-label","span");y.id=`${encodeURIComponent(f.gridId)}-hdr-${encodeURIComponent(r.id)}`,g.setAttribute("aria-labelledby",y.id);let k=Di?.(r.id);if(k)y.appendChild(k);else if(r.def.renderHeader){let h=r.def.renderHeader({column:r.def});typeof h=="string"?y.textContent=h:y.appendChild(h);}else y.textContent=r.def.headerName??r.id;if(g.appendChild(y),m){let h=p("kanuni-datagrid-sort-indicator","span");if(h.setAttribute("aria-hidden","true"),h.textContent=m.direction==="asc"?"\u25B2":"\u25BC",g.appendChild(h),o.length>1&&!u){let E=p("kanuni-datagrid-sort-order","span");E.setAttribute("aria-hidden","true"),E.textContent=String(m.order+1),g.appendChild(E);}}if(s||lo){let h=r.id;g.addEventListener("click",E=>{lo?.(h,E)||s&&l.toggleSort(h,E.shiftKey);});}let c=rn!==false&&!datagridCore.isChromeColumn(r.id);if(c){let h=r.id;g.addEventListener("contextmenu",E=>{E.preventDefault(),Vo(h,{left:E.clientX,top:E.clientY});});}let b=null;if(ot&&r.def.filterable!==false){b=document.createElement("button"),b.type="button",b.tabIndex=-1;let h=l.getColumnFilter(r.id)!==null;b.className=`kanuni-datagrid-filter-button${h?" kanuni-datagrid-filter-button--active":""}${P==="always"?" kanuni-datagrid-filter-button--pinned":""}`,b.setAttribute("aria-haspopup","dialog"),b.setAttribute("aria-label",`${r.def.headerName??r.id} filter`),b.appendChild(fr());let E=b;b.addEventListener("click",S=>{S.stopPropagation(),_o(r.id,E);}),g.appendChild(b);}if(g.addEventListener("keydown",h=>{let E=n.indexOf(r.id),S;if(h.key==="ArrowRight")S=n[Math.min(n.length-1,E+1)];else if(h.key==="ArrowLeft")S=n[Math.max(0,E-1)];else if(h.key==="Home")S=n[0];else if(h.key==="End")S=n[n.length-1];else if(b&&h.altKey&&h.key==="ArrowDown")_o(r.id,b);else if(s&&(h.key==="Enter"||h.key===" "))l.toggleSort(r.id,h.shiftKey);else if(c&&(h.key==="ContextMenu"||h.key==="F10"&&h.shiftKey)){let H=g.getBoundingClientRect();Vo(r.id,{left:H.left,top:H.bottom});}else return;h.preventDefault(),h.stopPropagation(),S&&S!==r.id&&(To(S),An(S)?.focus());}),Me&&r.def.reorderable!==false&&(g.draggable=true,g.addEventListener("dragstart",h=>{h.dataTransfer?.setData("text/x-kanuni-column",r.id),h.dataTransfer&&(h.dataTransfer.effectAllowed="move");}),g.addEventListener("dragover",h=>{if(!h.dataTransfer?.types.includes("text/x-kanuni-column"))return;h.preventDefault();let E=g.getBoundingClientRect(),S=h.clientX<E.left+E.width/2;Ht(g,S?"before":"after");}),g.addEventListener("dragleave",h=>{let E=h.relatedTarget;(!E||!g.contains(E))&&Ht(null,"before");}),g.addEventListener("drop",h=>{Ht(null,"before");let E=h.dataTransfer?.getData("text/x-kanuni-column");if(!E||E===r.id)return;h.preventDefault();let S=g.getBoundingClientRect();if(h.clientX<S.left+S.width/2)l.moveColumn(E,r.id);else {let G=pe.findIndex(W=>W.id===r.id);l.moveColumn(E,pe[G+1]?.id);}}),g.addEventListener("dragend",()=>Ht(null,"before"))),nt&&r.def.resizable!==false){let h=p("kanuni-datagrid-resize-handle","span");h.setAttribute("data-resize-handle",r.id),h.setAttribute("role","presentation"),h.addEventListener("click",E=>E.stopPropagation()),h.addEventListener("dblclick",E=>{E.stopPropagation(),yl(r.id);}),h.addEventListener("pointerdown",E=>{E.preventDefault(),E.stopPropagation();let S=E.clientX,H=r.width,G=getComputedStyle(g).direction==="rtl"?-1:1;g.draggable=false;let W=H,B=false,qe=ft=>{B=true,W=H+(ft.clientX-S)*G,l.setColumnWidth(r.id,W,false);},te=()=>{window.removeEventListener("pointermove",qe),window.removeEventListener("pointerup",te),window.removeEventListener("pointercancel",te),B&&l.setColumnWidth(r.id,W,true),g.draggable=Me&&r.def.reorderable!==false;};window.addEventListener("pointermove",qe),window.addEventListener("pointerup",te),window.addEventListener("pointercancel",te);}),g.appendChild(h);}F.appendChild(g);}t&&An(t)?.focus({preventScroll:true});}let So=null,Gt=null;function Ji(e){if(e===So)return;So=e;let t=[];for(let i=0;i<e.length;i++){let n=e[i];n&&n.kind!=="data"&&t.push(i);}Gt=t.length>0?t:null;}function Zi(e){if(!Gt)return e+1;let t=0,i=Gt.length;for(;t<i;){let n=t+i>>1;Gt[n]<=e?t=n+1:i=n;}return e+1-t}let Oe=[];function Pt(e="data"){let t=p("kanuni-datagrid-row");if(t.setAttribute("role","row"),e==="loading"){t.classList.add("kanuni-datagrid-row--loading"),t.setAttribute("aria-busy","true");let u=p("kanuni-datagrid-cell kanuni-datagrid-loading-cell");return u.setAttribute("role","gridcell"),u.setAttribute("aria-colindex","1"),u.appendChild(p("kanuni-datagrid-loading-bar","span")),t.appendChild(u),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:we}}if(e==="data"&&gn&&t.addEventListener("click",()=>{if(!t.classList.contains("kanuni-datagrid-group-row--aligned"))return;let u=t.getAttribute("data-group-key");u!==null&&l.toggleGroup(u);}),e==="panel"){let u=document.createElement("div");return u.setAttribute("role","gridcell"),u.setAttribute("aria-colindex","1"),t.appendChild(u),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,panelCell:u,epoch:we}}if(e==="group"){let u=p("kanuni-datagrid-group-cell");u.setAttribute("role","gridcell"),u.setAttribute("aria-colindex","1");let m=p("kanuni-datagrid-group-twisty","span");m.setAttribute("aria-hidden","true");let g=p("kanuni-datagrid-group-caption","span"),x=p("kanuni-datagrid-group-label","span"),y=p("kanuni-datagrid-group-count","span"),k=p("kanuni-datagrid-group-aggregates","span"),c=null;return Ue&&st?.mode==="multiple"&&(c=document.createElement("input"),c.type="checkbox",c.className="kanuni-datagrid-group-checkbox",c.tabIndex=-1,c.addEventListener("change",()=>{let b=t.getAttribute("data-group-key");b!==null&&l.toggleGroupSelection(b);}),c.addEventListener("click",b=>b.stopPropagation()),c.addEventListener("mousedown",b=>b.stopPropagation()),u.appendChild(c)),u.append(m,g,x,y,k),t.appendChild(u),t.addEventListener("click",()=>{let b=t.getAttribute("data-group-key");b!==null&&l.toggleGroup(b);}),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,group:{cell:u,check:c,twisty:m,caption:g,label:x,count:y,aggregates:k},epoch:we}}if(ut){let u=p("kanuni-datagrid-row-grip","span");u.setAttribute("aria-hidden","true"),u.title=w.dragToReorder??"Drag to reorder",u.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>',u.addEventListener("mouseenter",()=>{t.draggable=true;}),u.addEventListener("mouseleave",()=>{t.draggable=false;}),t.appendChild(u);}if(Et)return {kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:we};let i=null;O&&(i=p("kanuni-datagrid-cell kanuni-datagrid-cell--number kanuni-datagrid-cell--pinned kanuni-datagrid-rownum-cell"),i.setAttribute("role","gridcell"),i.setAttribute("aria-colindex","1"),i.style.width=`${ht}px`,i.style.flex="none",i.style.insetInlineStart="0px",t.appendChild(i));let n=null;if(Xe){let u=p("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-detail-toggle-cell");u.setAttribute("role","gridcell"),u.setAttribute("aria-colindex",String((O?1:0)+1)),u.style.width=`${yt}px`,u.style.flex="none",u.style.insetInlineStart=`${mn}px`;let m=document.createElement("button");m.type="button",m.className="kanuni-datagrid-detail-toggle",m.tabIndex=-1,m.addEventListener("click",g=>{g.stopPropagation();let x=t.getAttribute("data-row-key");if(x===null)return;let y=l.getRows().find(k=>k!==void 0&&String(k.key)===x);y&&y.kind==="data"&&l.toggleDetail(y.key);}),m.addEventListener("mousedown",g=>g.stopPropagation()),u.appendChild(m),t.appendChild(u),n=m;}let o=null;if(Ue){let u=p("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-select-cell");u.setAttribute("role","gridcell"),u.setAttribute("aria-colindex",String((O?1:0)+(Xe?1:0)+1)),u.style.width=`${Jt}px`,u.style.flex="none",u.style.insetInlineStart=`${ho}px`;let m=document.createElement("input");m.type="checkbox",m.tabIndex=-1;let g=()=>{let x=t.getAttribute("data-row-key");if(x===null)return;let y=l.getRows().find(k=>k!==void 0&&String(k.key)===x);y?.kind==="group"?l.toggleGroupSelection(String(y.key)):y&&l.toggleRow(y.key);};u.addEventListener("mousedown",x=>x.stopPropagation()),u.addEventListener("click",x=>{x.target.tagName!=="INPUT"&&(x.stopPropagation(),g());}),m.addEventListener("change",g),m.addEventListener("click",x=>x.stopPropagation()),m.addEventListener("mousedown",x=>x.stopPropagation()),u.appendChild(m),t.appendChild(u),o=m;}let a=[],d=null,r=false;for(let u of pe){!u.pinned&&!r&&(d=document.createElement("div"),d.style.flex=`0 0 ${Q}px`,t.appendChild(d),r=true);let m=p(u.className);m.setAttribute("role","gridcell"),m.setAttribute("data-column-id",u.id),m.style.width=`${u.width}px`,m.style.flex="none",u.pinned==="left"&&(m.style.insetInlineStart=`${u.inset}px`),u.pinned==="right"&&(m.style.insetInlineEnd=`${u.inset}px`),t.appendChild(m),a.push({el:m,slot:u});}let s=document.createElement("div");return s.style.flex=`0 0 ${wn}px`,t.appendChild(s),{kind:e,root:t,cells:a,rowNumberCell:i,selectInput:o,detailToggle:n,leadingSpacer:d,trailingSpacer:s,epoch:we}}let Je="";function $t(e,t){if(Je===""||t===""){e.textContent=t;return}let i=datagridCore.foldText(t),n=i.indexOf(Je);if(n===-1){e.textContent=t;return}let o=[],a=0;for(;n!==-1;){n>a&&o.push(document.createTextNode(t.slice(a,n)));let d=document.createElement("mark");d.className="kanuni-datagrid-highlight",d.textContent=t.slice(n,n+Je.length),o.push(d),a=n+Je.length,n=i.indexOf(Je,a);}a<t.length&&o.push(document.createTextNode(t.slice(a))),e.replaceChildren(...o);}function Lo(e,t,i){let n=l.getColumnModel().getCellValue(i.data,t.id),o=t.def;if(o.renderCell){let d=o.renderCell({value:n,row:i.data,node:i,column:o});typeof d=="string"?e.textContent=d:e.replaceChildren(d);return}let a=datagridCore.lookupLabel(o,n);if(a!==null){$t(e,a);return}if(o.valueFormatter){let d=o.valueFormatter(n,i.data);$t(e,typeof d=="string"?d:String(d??""));return}if(o.dateFormat&&o.dataType==="date"){$t(e,datagridCore.formatDateValue(n,o.dateFormat));return}$t(e,n==null?"":String(n));}function el(e,t){return e.kind==="group"&&!t.group}function tl(e,t,i){let n=t?.lead??null;if(!n||!e.leadingSpacer||i.kind!=="data"){e.leadCell?.remove(),e.leadCell=null;return}let o=l.getColumnLayout(),a=n.column.def,d={def:a,id:n.column.state.id,width:n.width,className:Ti(a.align,a.dataType),visualIndex:o.left.length+o.center.indexOf(n.column)},r=e.leadCell??p(d.className);e.leadCell=r,r.className=d.className,r.setAttribute("role","gridcell"),r.setAttribute("data-column-id",d.id),r.setAttribute("aria-colspan",String(t.spans.get(d.id)??1)),r.setAttribute("aria-colindex",String(fn()+d.visualIndex+1)),r.id=`${f.gridId}-cell-${String(i.key)}-${d.id}`,r.style.width=`${n.width}px`,r.style.flex="none",e.leadingSpacer.nextSibling!==r&&e.leadingSpacer.after(r),Lo(r,d,i);}function Cn(e,t,i){let n=e.root;if(n.setAttribute("aria-rowindex",String(i+1+pn())),n.setAttribute("data-row-key",String(t.key)),t.kind==="detail"||t.kind==="editform"){let c=e.panelCell,b=t.kind==="detail";n.className=`kanuni-datagrid-row ${b?"kanuni-datagrid-detail-row":"kanuni-datagrid-editform-row"}`,n.style.height=`${t.height}px`,b?(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")),c.className=b?"kanuni-datagrid-detail-cell":"kanuni-datagrid-editform-cell";let h=`${t.kind}:${String(t.key)}`;if(n.getAttribute("data-panel-for")!==h){n.setAttribute("data-panel-for",h);let E=b?ao?.(t.data):t.parentKey===null?void 0:Ii?.(t.parentKey,t.data);c.textContent="",typeof E=="string"?c.textContent=E:E&&c.appendChild(E);}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=Ao?"":`${l.getRowHeight()}px`;let o=t.kind==="group"&&!e.group?t:null;if(!e.group){n.classList.remove("kanuni-datagrid-group-row","kanuni-datagrid-group-row--aligned");for(let c of Array.from(n.classList))c.startsWith("kanuni-datagrid-group-row--level-")&&n.classList.remove(c);o?(n.classList.add("kanuni-datagrid-group-row","kanuni-datagrid-group-row--aligned",`kanuni-datagrid-group-row--level-${o.level}`),n.setAttribute("aria-expanded",String(o.expanded)),n.setAttribute("aria-level",String(o.level+1)),n.setAttribute("data-group-key",String(o.key)),n.setAttribute("data-group-level",String(o.level))):(n.removeAttribute("aria-expanded"),n.removeAttribute("aria-level"),n.removeAttribute("data-group-key"),n.removeAttribute("data-group-level"));}n.classList.toggle("kanuni-datagrid-row--odd",K&&i%2===1);let a=l.isRowSelected(t.key);n.classList.toggle("kanuni-datagrid-row--selected",a),t.kind==="data"&&l.getSelectionMode()!=="none"?n.setAttribute("aria-selected",String(a)):n.removeAttribute("aria-selected");let d=l.getFocus();n.classList.toggle("kanuni-datagrid-row--focused",Zn&&d!==null&&d.rowKey===t.key);let r=t.kind==="data"&&!el(t,e)?l.planRowColSpans(t,l.getVirtualWindow().columns):null;if(e.leadingSpacer&&(e.leadingSpacer.style.flex=`0 0 ${Math.max(0,Q-(r?.leadingDelta??0))}px`),e.trailingSpacer&&(e.trailingSpacer.style.flex=`0 0 ${Math.max(0,wn-(r?.trailingDelta??0))}px`),tl(e,r,t),ut){let c=Ke!==null&&String(Ke.key)===String(t.key);n.classList.toggle("kanuni-datagrid-row--drop-before",c&&Ke.side==="before"),n.classList.toggle("kanuni-datagrid-row--drop-after",c&&Ke.side==="after");}let s=t.kind==="treePath",u=s||o!==null;if(n.classList.toggle("kanuni-datagrid-row--tree-path",s),e.rowNumberCell&&(e.rowNumberCell.textContent=u?"":String(Zi(i))),e.detailToggle&&(e.detailToggle.hidden=u),e.selectInput){let c=o!==null&&st?.mode==="multiple";if(e.selectInput.hidden=s||o!==null&&!c,e.selectInput.classList.toggle("kanuni-datagrid-group-checkbox",c),c){let b=l.getGroupSelectionState(String(o.key));e.selectInput.checked=b==="all",e.selectInput.indeterminate=b==="some",e.selectInput.disabled=false,e.selectInput.setAttribute("aria-label",w.selectGroupAria.replace("{count}",String(o.count)).replace("{group}",o.display??o.label));}else e.selectInput.indeterminate=false,e.selectInput.checked=l.isRowSelected(t.key),e.selectInput.disabled=t.kind==="data"&&!l.isRowSelectable(t.key),e.selectInput.setAttribute("aria-label",w.selectRowAria.replace("{row}",String(t.key)));}if(e.detailToggle&&t.kind==="data"){let c=l.isDetailExpanded(t.key);e.detailToggle.textContent=c?"\u25BE":"\u25B8",e.detailToggle.setAttribute("aria-expanded",String(c)),e.detailToggle.setAttribute("aria-label",c?w.collapseDetails:w.expandDetails);}if(t.kind==="group"&&e.group){let c=t;n.className=`kanuni-datagrid-row kanuni-datagrid-group-row kanuni-datagrid-group-row--level-${c.level}`,n.setAttribute("aria-expanded",String(c.expanded)),n.setAttribute("aria-level",String(c.level+1)),n.setAttribute("data-group-key",String(c.key)),n.setAttribute("data-group-level",String(c.level)),e.group.cell.style.paddingLeft=c.level>0?`${8+c.level*18}px`:"",e.group.twisty.textContent=c.expanded?"\u25BE":"\u25B8";let b=l.getColumnModel().getDef(c.columnId),h=b?.headerName??c.columnId;if(e.group.caption.textContent=`${h}:`,e.group.label.textContent=datagridCore.lookupLabel(b,c.value)??c.display??(c.label===""?w.filterBlank:c.label),e.group.count.textContent=`(${c.count})`,e.group.check){let S=l.getGroupSelectionState(String(c.key));e.group.check.checked=S==="all",e.group.check.indeterminate=S==="some",e.group.check.setAttribute("aria-label",w.selectGroupAria.replace("{count}",String(c.count)).replace("{group}",e.group.label.textContent??""));}e.group.aggregates.textContent="";let E=c.aggregates??null;if(E)for(let S of l.getSummaryDefs()){let H=p("kanuni-datagrid-group-aggregate","span"),G=p("kanuni-datagrid-group-aggregate-label","span"),W=l.getColumnModel().getDef(S.columnId);G.textContent=`${datagridCore.summaryLabel(S,un)} ${W?.headerName??S.columnId}:`,H.append(G,` ${datagridCore.formatSummaryValue(S,E[datagridCore.summaryKey(S.columnId,S.type)],W)}`),e.group.aggregates.appendChild(H);}return}if(t.kind!=="data"&&!s&&!o){for(let{el:c}of e.cells)c.textContent="";return}if(Et&&u){let c=ut?1:0;for(;n.childNodes.length>c;)n.removeChild(n.lastChild);let b=p("kanuni-datagrid-cell");o?b.appendChild(Mo(o)):(b.appendChild(Do(t)),kn(b,t,t.tree)),n.appendChild(b);return}if(Et){let c=ut?1:0,b=Et({row:t.data,node:t,rowIndex:i,selected:l.isRowSelected(t.key),focused:Zn&&d!==null&&d.rowKey===t.key});if(b instanceof Node&&n.childNodes.length===c+1&&n.childNodes[c]===b)return;for(;n.childNodes.length>c;)n.removeChild(n.lastChild);typeof b=="string"?n.appendChild(document.createTextNode(b)):b&&n.appendChild(b);return}let m=d!==null&&d.rowKey===t.key?d.columnId:null,g=o?void 0:t.tree,x=o&&wo?datagridCore.GROUP_COLUMN_ID:g||o?(()=>{let c=l.getColumnLayout();return (c.left[0]??c.center[0]??c.right[0])?.state.id??null})():null,y=g?x:null,k=l.hasCellSpans();for(let{el:c,slot:b}of e.cells){c.style.display=r?.covered.has(b.id)?"none":"",c.style.width=`${r?.widths.get(b.id)??b.width}px`;let h=r?.spans.get(b.id);h?c.setAttribute("aria-colspan",String(h)):c.removeAttribute("aria-colspan");let E=(rt||an)&&!u?{node:t,columnId:b.id,rowIndex:i,columnIndex:b.visualIndex,value:l.getColumnModel().getCellValue(t.data,b.id)}:null,S=rt&&o&&b.id!==x?{node:t,columnId:b.id,rowIndex:i,columnIndex:b.visualIndex,value:void 0}:null,H=E&&rt?rt(E):S?rt(S):void 0,G=false;if(H!==void 0?H instanceof Node&&c.childNodes.length===1&&c.firstChild===H?G=true:typeof H=="string"?c.textContent=H:c.replaceChildren(H):o?b.id===x?c.replaceChildren(Mo(o)):c.replaceChildren(...ll(o,b.id)):s?b.id===y?(c.replaceChildren(Do(t)),kn(c,t,g)):c.replaceChildren():(Lo(c,b,t),g&&b.id===y&&kn(c,t,g)),k&&!G){let V=ol(i,b.id);c.classList.toggle("kanuni-datagrid-cell--span",V?.kind==="draw"),c.classList.toggle("kanuni-datagrid-cell--span-covered",V?.kind==="covered");let ge=H!==void 0;if(V?.kind==="covered"&&m!==b.id&&!ge)c.replaceChildren();else if(V?.kind==="draw"){let R=p("kanuni-datagrid-span-box");R.style.height=`${V.height}px`,R.append(...Array.from(c.childNodes)),c.appendChild(R);}}else k||c.classList.remove("kanuni-datagrid-cell--span","kanuni-datagrid-cell--span-covered");if(Ie){let V=!u&&!!xn(t.key,b.id,t.data);c.classList.toggle("kanuni-datagrid-cell--noted",V);}c.id=`${f.gridId}-cell-${String(t.key)}-${b.id}`,c.setAttribute("aria-colindex",String(fn()+b.visualIndex+1)),c.classList.toggle("kanuni-datagrid-cell--focused",m===b.id);let W=t.kind==="data"?l.getFindMatchKind(t.key,b.id):null;c.classList.toggle("kanuni-datagrid-cell--find-match",W!==null),c.classList.toggle("kanuni-datagrid-cell--find-active",W==="active");let B=c.getAttribute("data-slot-classes");if(B)for(let V of B.split(" "))c.classList.remove(V);let qe=E&&an?an(E):void 0,te=b.def.cellClassName,et=[u?void 0:typeof te=="function"?te({value:l.getColumnModel().getCellValue(t.data,b.id),row:t.data,node:t,column:b.def}):te,qe].filter(Boolean).join(" ")||void 0;if(et){for(let V of et.split(" "))c.classList.add(V);c.setAttribute("data-slot-classes",et);}else B&&c.removeAttribute("data-slot-classes");}}let Ao=f.columns.some(e=>e.autoHeight);function nl(){if(!Ao)return;let e=l.getVirtualWindow(),t=l.getRows(),i=new Map(l.getMeasuredRowHeights()),n=false;for(let o=e.rows.start;o<e.rows.end&&o<t.length;o++){let a=t[o];if(!a||a.kind!=="data")continue;let d=o-e.rows.start,r=Oe[d]?.root;if(!r)continue;let s=r.getBoundingClientRect().height;s>0&&i.get(a.key)!==s&&(i.set(a.key,s),n=true);}n&&l.setMeasuredRowHeights(i);}let Kt={start:0,end:0};function ol(e,t){let i=l.getCellSpans(t);if(i.length===0)return null;let n=datagridCore.spanRoleAt(i,e,Kt.start,Kt.end);if(!n)return null;if(n.role==="covered")return {kind:"covered"};let o=l.getRowOffset(n.drawStart);return {kind:"draw",height:l.getRowOffset(n.drawEnd)+l.getRowHeightAt(n.drawEnd)-o}}function il(e,t){let i=l.isRowLoadFailed(t),n=i?"failed":"loading";if(e.dataset.holeState===n)return;e.dataset.holeState=n,e.classList.toggle("kanuni-datagrid-row--load-failed",i),i?e.removeAttribute("aria-busy"):e.setAttribute("aria-busy","true");let o=e.firstElementChild;if(!i)o.replaceChildren(p("kanuni-datagrid-loading-bar","span"));else {let a=p("kanuni-datagrid-load-failed-text","span");a.textContent=w.rowsLoadFailed;let d=document.createElement("button");d.className="kanuni-datagrid-retry-button",d.type="button",d.setAttribute("data-retry-load",""),d.textContent=w.retryLoad,d.addEventListener("click",()=>l.retryFailedLoads()),o.replaceChildren(a,d);}}function Mo(e){let t=p("kanuni-datagrid-group-inline","span");t.style.paddingInlineStart=`${e.level*16}px`;let i=p("kanuni-datagrid-group-twisty","span");i.setAttribute("aria-hidden","true"),i.textContent=e.expanded?"\u25BE":"\u25B8";let n=l.getColumnModel().getDef(e.columnId),o=p("kanuni-datagrid-group-caption","span");o.textContent=`${n?.headerName??e.columnId}:`;let a=p("kanuni-datagrid-group-label","span");a.textContent=datagridCore.lookupLabel(n,e.value)??e.display??(e.label===""?w.filterBlank:e.label);let d=p("kanuni-datagrid-group-count","span");return d.textContent=`(${e.count})`,wo?t.append(i,a,d):t.append(i,o,a,d),t}function ll(e,t){if(!e.aggregates)return [];let i=l.getSummaryDefs().find(o=>o.columnId===t);if(!i)return [];let n=p("kanuni-datagrid-group-aggregate-value","span");return n.textContent=datagridCore.formatSummaryValue(i,e.aggregates[datagridCore.summaryKey(i.columnId,i.type)],l.getColumnModel().getDef(t)),[n]}function Do(e){let t=p("kanuni-datagrid-tree-path-label","span");return t.textContent=e.label,t}function kn(e,t,i){let n=p(`kanuni-datagrid-tree-cell${i.ancestorOnly?" kanuni-datagrid-tree-cell--ancestor":""}`,"span");if(n.style.paddingInlineStart=`${i.depth*16}px`,i.hasChildren){let o=document.createElement("button");o.type="button",o.className="kanuni-datagrid-tree-toggle",o.setAttribute("data-tree-toggle",""),o.setAttribute("aria-expanded",String(i.expanded)),o.setAttribute("aria-label",i.expanded?w.collapseTreeRow:w.expandTreeRow),o.textContent=i.expanded?"\u25BE":"\u25B8",o.addEventListener("mousedown",a=>a.stopPropagation()),o.addEventListener("click",a=>{a.stopPropagation(),l.toggleTreeRow(t.key);}),n.appendChild(o);}else n.appendChild(p("kanuni-datagrid-tree-toggle kanuni-datagrid-tree-toggle--leaf","span"));n.append(...Array.from(e.childNodes)),e.appendChild(n);}let xn=(e,t,i)=>Ie?Ie.get({rowKey:e,columnId:t,row:i})??null:null,Io=null,Re=dn?p("kanuni-datagrid-overlay"):null;Re&&(Re.style.position="absolute",Re.style.inset="0",Re.style.pointerEvents="none",q.appendChild(Re));function rl(){if(!dn||!Re)return;let e=dn();e!==Io&&(Io=e,e?Re.replaceChildren(e):Re.replaceChildren());}function al(e){let t=l.getColumnLayout(),i=Array.from(xe.children);A.setAttribute("aria-rowcount",String(pn()+e+i.length)),A.setAttribute("aria-colcount",String(fn()+t.left.length+t.center.length+t.right.length)),l.getSelectionMode()==="multiple"?A.setAttribute("aria-multiselectable","true"):A.removeAttribute("aria-multiselectable"),i.forEach((n,o)=>n.setAttribute("aria-rowindex",String(pn()+e+o+1)));}function vn(){rl();let e=l.getVirtualWindow(),t=l.getRows(),i=je?{...e,rows:{...e.rows,start:0,end:t.length,offsetY:0,totalHeight:0}}:e;Ji(t),al(t.length),q.style.height=`${i.rows.totalHeight}px`,N.style.transform=`translateY(${i.rows.offsetY}px)`,Je=l.getFindNeedle()||(Hi?datagridCore.normalizeSearch(l.getSearchText()):"");let n=Math.max(0,Math.min(i.rows.end,t.length)-i.rows.start);for(Kt.start=i.rows.start,Kt.end=Math.min(i.rows.end,t.length)-1;Oe.length>n;)Oe.pop().root.remove();for(let o=0;o<n;o++){let a=i.rows.start+o,d=t[a];if(!d){let u=Oe[o];if(!u||u.kind!=="loading"){let m=Pt("loading");u?N.replaceChild(m.root,u.root):N.appendChild(m.root),Oe[o]=m,u=m;}u.root.setAttribute("aria-rowindex",String(a+2)),u.root.style.height=`${l.getRowHeight()}px`,il(u.root,a);continue}let r=d.kind==="data"?"data":d.kind==="group"?gn?"data":"group":d.kind==="detail"||d.kind==="editform"?"panel":"stub",s=Oe[o];if(!s||s.epoch!==we||s.kind!==r){let u=Pt(r);s?N.replaceChild(u.root,s.root):N.appendChild(u.root),Oe[o]=u,s=u;}Cn(s,d,a);}nl(),No();}let Ot=[];function No(){if(!l.hasStickyGroupHeaders())return;let e=je?[]:l.getStickyGroupRows();for(Y.style.width=`${l.getColumnLayout().totalWidth}px`;Ot.length>e.length;)Ot.pop().wrap.remove();let t=gn?"data":"group";e.forEach((i,n)=>{let o=Ot[n];if(!o||o.rs.epoch!==we||o.rs.kind!==t){let a=Pt(t),d=o?.wrap??p("kanuni-datagrid-sticky-group");d.textContent="",d.appendChild(a.root),o||Y.appendChild(d),o={wrap:d,rs:a},Ot[n]=o;}Cn(o.rs,i.node,i.index),o.rs.root.removeAttribute("aria-rowindex"),o.wrap.style.top=`${i.offset}px`,o.wrap.style.height=`${i.height}px`,o.wrap.style.zIndex=String(e.length-n),o.wrap.classList.toggle("kanuni-datagrid-sticky-group--last",n===e.length-1),o.wrap.querySelectorAll("button, input, select, textarea, a[href], [tabindex]").forEach(a=>a.setAttribute("tabindex","-1"));});}Y.addEventListener("click",e=>{let i=e.target.closest("[data-group-key]")?.getAttribute("data-group-key");i&&l.scrollToRow(i);});let Ho=datagridCore.createDebouncedCommit(Ni??(l.isRemote()?200:0));function En(){if(!ue)return;if(He.textContent="",ce>0){let n=p("kanuni-datagrid-filter-cell kanuni-datagrid-filter-cell--pinned");n.style.width=`${ce}px`,n.style.flex="none",n.style.insetInlineStart="0px",He.appendChild(n);}let e=false,t=null,i=()=>{if(!t){t=document.createElement("datalist"),t.id=`${f.gridId}-filter-periods`;for(let n of datagridCore.periodSuggestionList(po)){let o=document.createElement("option");o.value=n,t.appendChild(o);}He.appendChild(t);}return t.id};for(let n of pe){if(!n.pinned&&!e){if(Q>0){let a=p("kanuni-datagrid-spacer");a.style.width=`${Q}px`,a.style.flex="none",He.appendChild(a);}e=true;}let o=p(`kanuni-datagrid-filter-cell${n.pinned?" kanuni-datagrid-filter-cell--pinned":""}`);if(o.style.width=`${n.width}px`,o.style.flex="none",n.pinned==="left"&&(o.style.insetInlineStart=`${n.inset}px`),n.pinned==="right"&&(o.style.insetInlineEnd=`${n.inset}px`),n.def.filterable!==false){let a=document.createElement("input");a.className="kanuni-datagrid-filter-input",a.setAttribute("aria-label",`${n.def.headerName??n.id} filter`),n.def.dataType==="date"&&a.setAttribute("list",i());let d=()=>l.setColumnFilter(n.id,datagridCore.parseFilterInput(n.id,a.value,n.def.dataType,po),datagridCore.FILTER_PART_ROW);a.addEventListener("input",()=>Ho.schedule(n.id,d));let r=()=>{Ho.cancel(n.id),d();};a.addEventListener("keydown",s=>{s.key==="Enter"&&r();}),a.addEventListener("blur",r),o.appendChild(a);}He.appendChild(o);}}let Rn=()=>{};function dl(){if(!uo)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(()=>l.setSearchText(e.value),Fi);});let i=p("kanuni-datagrid-toolbar-spacer"),n=null;if(Mi){let u=document.createElement("button");u.type="button",u.textContent=w.toolbarColumns??"Columns",u.setAttribute("aria-haspopup","dialog"),u.addEventListener("click",()=>{let m=u.getBoundingClientRect();qo({left:m.left,top:m.bottom+2});}),n=u;}let o=ke&&Ki,a=ke&&Oi,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(gr());let r=null;d.addEventListener("click",()=>{if(r)return;let u=d.getBoundingClientRect();Te({left:u.right-190,top:u.bottom+2},m=>{m.setAttribute("role","menu"),m.setAttribute("aria-label",w.exportMenu);let g=[{kind:"csv",label:w.exportCsv,testId:"dg-export-csv",on:l.canExportAll()},{kind:"excel",label:w.exportExcel,testId:"dg-export-excel",on:o},{kind:"excel-selected",label:w.exportExcelSelected,testId:"dg-export-excel-selected",on:o},{kind:"pdf",label:w.exportPdf,testId:"dg-export-pdf",on:a}];for(let x of g){if(!x.on)continue;let y=document.createElement("button");y.type="button",y.className="kanuni-datagrid-menu-item",y.setAttribute("role","menuitem"),y.setAttribute("data-testid",x.testId),y.textContent=x.label,x.kind==="excel-selected"&&l.getSelectedCount()===0&&(y.disabled=true),y.addEventListener("click",()=>{r=x.kind,d.disabled=true,U(),Vn(l,x.kind).then(k=>{r=null,d.disabled=false,k.error&&Rn(k.error);});}),m.appendChild(y);}},"kanuni-datagrid-filter-popup kanuni-datagrid-export-menu");});for(let u of $i??[])ve.append(u);ve.append(e,i),n&&ve.append(n),(l.canExportAll()||o||a)&&ve.append(d);for(let u of Pi??[])ve.append(u);let s=p("kanuni-datagrid-toolbar-error","span");s.setAttribute("role","alert"),s.style.display="none",ve.append(s),Rn=u=>{s.textContent=u,s.style.display="";};}function Go(){if(!se.isConnected)return;let e=l.getPage(),t=l.getPageCount(),i=document.activeElement,n=i instanceof HTMLElement&&se.contains(i)?i.getAttribute("data-pager"):null;se.textContent="";let o=(s,u,m,g,x)=>{let y=document.createElement("button");return y.type="button",y.textContent=s,y.setAttribute("aria-label",u),y.setAttribute("data-pager",x),y.disabled=m,y.addEventListener("click",g),y},a=p("kanuni-datagrid-pager-buttons"),d=e<=0,r=e>=t-1;if(a.append(o("\xAB",w.pagerFirst??"First",d,()=>l.setPage(0),"first"),o("\u2039",w.pagerPrevious??"Previous",d,()=>l.setPage(e-1),"previous")),Lt?.pageButtons)for(let s of datagridCore.pageButtonItems(e,t,Lt.maxPageButtons)){if(typeof s!="number"){let g=p("kanuni-datagrid-pager-gap","span");g.textContent="\u2026",g.setAttribute("aria-hidden","true"),a.append(g);continue}let u=String(s+1),m=o(u,w.pagerPageButton.replace("{n}",u),false,()=>l.setPage(s),`page-${s}`);m.classList.add("kanuni-datagrid-pager-page"),s===e&&m.setAttribute("aria-current","page"),a.append(m);}else {let s=p("kanuni-datagrid-pager-current","span");s.textContent=`${e+1} / ${t}`,a.append(s);}if(a.append(o("\u203A",w.pagerNext??"Next",r,()=>l.setPage(e+1),"next"),o("\xBB",w.pagerLast??"Last",r,()=>l.setPage(t-1),"last")),se.appendChild(a),n!==null){let s=se.querySelector(`[data-pager="${n}"]`);(s&&!s.disabled?s:se.querySelector('[aria-current="page"]')??se.querySelector("button:not(:disabled)"))?.focus();}}function Tn(){if(!de)return;let e=l.getColumnLayout(),t=l.getSummaries(),i=new Map(l.getSummaryDefs().map(o=>[o.columnId,o]));if(z.textContent="",z.style.width=`${e.totalWidth+ce}px`,ce>0){let o=p("kanuni-datagrid-footer-cell kanuni-datagrid-footer-cell--pinned");o.style.width=`${ce}px`,o.style.insetInlineStart="0px",z.appendChild(o);}let n=false;for(let o of pe){if(!o.pinned&&!n){if(Q>0){let s=p("kanuni-datagrid-spacer");s.style.width=`${Q}px`,z.appendChild(s);}n=true;}let a=i.get(o.id),d=o.def.dataType==="number"||o.def.dataType==="bigint",r=p(`kanuni-datagrid-footer-cell${o.pinned?" kanuni-datagrid-footer-cell--pinned":""}${d?" kanuni-datagrid-footer-cell--number":""}${a?" kanuni-datagrid-footer-cell--active":""}`);if(r.setAttribute("role","gridcell"),r.setAttribute("data-column-id",o.id),r.setAttribute("data-summary-type",a?.type??""),r.style.width=`${o.width}px`,o.pinned==="left"&&(r.style.insetInlineStart=`${o.inset}px`),o.pinned==="right"&&(r.style.insetInlineEnd=`${o.inset}px`),a){r.title=`${datagridCore.summaryLabel(a,un)} \u2014 ${o.def.headerName??o.id}`;let s=p("kanuni-datagrid-footer-value","span");s.textContent=datagridCore.formatSummaryValue(a,t[datagridCore.summaryKey(a.columnId,a.type)],o.def),r.appendChild(s);}else {let s=p("kanuni-datagrid-footer-hint","span");s.textContent=ye&&!datagridCore.isChromeColumn(o.id)?"\xB7":"",r.appendChild(s);}z.appendChild(r);}}function sl(){Ne()>0?ae.isConnected||_.insertBefore(ae,Y.isConnected?Y:q):ae.remove(),go()>0?xe.isConnected||_.insertBefore(xe,q.nextSibling):xe.remove(),Y.style.setProperty("--dg-sticky-below",`${Ne()>0?Ne()*l.getRowHeight()+1:0}px`);}function Ft(){let e=(t,i,n,o)=>{t.textContent="",i.forEach((a,d)=>{let r=Pt("data");Cn(r,{kind:"data",key:`__pinned-${n}-${d}`,sourceIndex:-1,data:a},d),r.root.classList.remove("kanuni-datagrid-row--odd"),r.root.setAttribute("aria-rowindex",String(cn+Ge+d+1)),r.root.removeAttribute("aria-selected"),r.rowNumberCell&&(r.rowNumberCell.textContent="");let s=o[d-(i.length-o.length)];s!==void 0?r.root.setAttribute("data-pinned-row-key",String(s)):r.root.removeAttribute("data-pinned-row-key"),t.appendChild(r.root);});};for(let[t,i,n]of [["top",ae,xt],["bottom",xe,vt]]){let o=l.getPinnedRows(t);if(n.length+o.length===0){i.textContent="";continue}e(i,[...n,...o.map(a=>a.row)],t,o.map(a=>a.key));}}let Bt=e=>{let t=e.target.closest("[data-pinned-row-key]");if(!t)return;let i=t.getAttribute("data-pinned-row-key"),n=l.getPinnedRowKeys(),o=[...n.top,...n.bottom].find(s=>String(s)===i);if(o===void 0)return;let a=Po(o,false);if(a.length===0)return;e.preventDefault();let d=l.getPinnedRows(l.getRowPinSide(o)??"top").find(s=>s.key===o)?.row,r={row:d,node:{kind:"data",key:o,sourceIndex:-1,data:d},rowIndex:-1,columnId:e.target.closest("[data-column-id]")?.getAttribute("data-column-id")??null,selectedKeys:l.getSelectedKeys()};Te({left:e.clientX,top:e.clientY},s=>{s.setAttribute("role","menu"),Wt(s,a,r);},"kanuni-datagrid-context-menu");};ae.addEventListener("contextmenu",Bt),xe.addEventListener("contextmenu",Bt);function Po(e,t){if(!l.isRowPinningEnabled()||!l.canPinRow(e))return [];let i=l.getRowPinSide(e),n=[];return i!=="top"&&n.push({id:"__dg-pin-top",label:w.pinRowTop,onSelect:()=>l.pinRow(e,"top")}),i!=="bottom"&&n.push({id:"__dg-pin-bottom",label:w.pinRowBottom,onSelect:()=>l.pinRow(e,"bottom")}),i&&n.push({id:"__dg-unpin",label:w.unpinRow,onSelect:()=>l.pinRow(e,null)}),t&&n.length>0?[{id:"__dg-sep-pin",separator:true},...n]:n}let Fe=null,Sn=null,Ln=null;function U(e=true){Sn?.(),Sn=null,Fe?.remove(),Fe=null;let t=Ln;Ln=null,e&&t?.();}function An(e){return F.querySelector(`.kanuni-datagrid-header-cell[data-column-id="${CSS.escape(e)}"]`)}function $o(e,t){e.addEventListener("keydown",i=>{let n=Array.from(e.querySelectorAll('[role="menuitem"]:not(:disabled)'));if(n.length===0)return;let o=n.indexOf(document.activeElement),a=n[o],d;switch(i.key){case "ArrowDown":d=n[(o+1)%n.length];break;case "ArrowUp":d=n[o<=0?n.length-1:o-1];break;case "Home":d=n[0];break;case "End":d=n[n.length-1];break;case "ArrowRight":case "Enter":case " ":if(a?.getAttribute("aria-haspopup")!=="menu")return;a.click(),d=Fe?.querySelector('.kanuni-datagrid-submenu [role="menuitem"]:not(:disabled)')??void 0;break;case "ArrowLeft":if(!t)return;t();break;case "Tab":U();break;default:return}i.preventDefault(),i.stopPropagation(),d?.focus();});}function Ko(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 Te(e,t,i="kanuni-datagrid-filter-popup"){U(false);let n=document.activeElement instanceof HTMLElement?document.activeElement:null,o=n&&F.contains(n)?n.closest("[data-column-id]")?.getAttribute("data-column-id")??null:null;Fe=p(`${Qn(f)} kanuni-datagrid-portal`);let a=p(i);a.style.position="fixed",a.style.left=`${e.left}px`,a.style.top=`${e.top}px`,a.style.zIndex="1000",t(a),Fe.appendChild(a),document.body.appendChild(Fe),Ko(a,e),Ln=()=>{(n?.isConnected?n:o?An(o):null)?.focus({preventScroll:true});},a.getAttribute("role")==="menu"&&($o(a),a.querySelector('[role="menuitem"]:not(:disabled)')?.focus({preventScroll:true}));let d=Fe,r=u=>{d.contains(u.target)||U(false);},s=u=>{u.key==="Escape"&&U();};document.addEventListener("pointerdown",r,true),document.addEventListener("keydown",s,true),Sn=()=>{document.removeEventListener("pointerdown",r,true),document.removeEventListener("keydown",s,true);};}let Be=25,Oo=8,Fo=new Map,Bo=0;function _o(e,t){let i=t.getBoundingClientRect(),n=++Bo;Te({left:i.left,top:i.bottom+2},o=>{o.setAttribute("role","dialog"),o.setAttribute("aria-label",`${l.getColumnModel().getDef(e)?.headerName??e} filter`);let a=[],d=true,r=new Set,s=false,u=0,m="",g=[],x=null,y="",k=[],c=document.createElement("input");c.type="search",c.className="kanuni-datagrid-filter-search",c.placeholder=w.search,c.setAttribute("data-testid","dg-filter-search");let b=p("kanuni-datagrid-filter-actions"),h=document.createElement("button");h.type="button",h.textContent=w.filterSelectAll,h.addEventListener("click",()=>{s=true,r=new Set(a.map(R=>R.label)),B();});let E=document.createElement("button");E.type="button",E.textContent=w.clear,E.addEventListener("click",()=>{s=true,r=new Set,B();}),b.append(h,E);let S=p("kanuni-datagrid-filter-list");S.setAttribute("role","listbox"),S.setAttribute("aria-multiselectable","true");let H=document.createElement("div");H.style.position="relative";let G=document.createElement("div");H.appendChild(G),S.appendChild(H);let W=()=>{let R=datagridCore.foldText(m.trim());if(!R){g=a;return}x||(x=a.map(I=>datagridCore.foldText(I.label))),g=y!==""&&R.includes(y)?k.filter(I=>datagridCore.foldText(I.label).includes(R)):a.filter((I,$)=>x[$].includes(R)),y=R,k=g;},B=()=>{if(S.setAttribute("aria-busy",String(d)),S.setAttribute("aria-setsize",String(g.length)),d){H.style.height="",G.textContent="";let oe=p("kanuni-datagrid-filter-empty");oe.textContent=w.filterLoading,G.appendChild(oe);return}if(g.length===0){H.style.height="",G.style.transform="",G.textContent="";let oe=p("kanuni-datagrid-filter-empty");oe.textContent=w.filterNoMatch,G.appendChild(oe);return}let R=S.clientHeight||240,I=Math.max(0,Math.floor(S.scrollTop/Be)-Oo),$=Math.ceil(R/Be)+Oo*2,ne=Math.min(I,Math.max(0,g.length-1)),Al=Math.min(g.length,ne+$);H.style.height=`${g.length*Be}px`,G.style.transform=`translateY(${ne*Be}px)`,G.textContent="";for(let oe=ne;oe<Al;oe++){let tt=g[oe],fe=p("kanuni-datagrid-filter-item");fe.setAttribute("role","option"),fe.setAttribute("aria-selected",String(r.has(tt.label))),fe.tabIndex=0,fe.setAttribute("data-value",tt.label),fe.setAttribute("data-index",String(oe)),oe===u&&fe.classList.add("kanuni-datagrid-filter-item--active");let mt=document.createElement("input");mt.type="checkbox",mt.readOnly=true,mt.checked=r.has(tt.label),mt.tabIndex=-1;let Ci=document.createElement("span");Ci.textContent=tt.label===""?w.filterBlank:tt.label,fe.append(mt,Ci),fe.addEventListener("click",()=>qe(tt.label)),fe.addEventListener("focus",()=>{u=oe;}),G.appendChild(fe);}},qe=R=>{s=true,r.has(R)?r.delete(R):r.add(R);for(let I of G.querySelectorAll(".kanuni-datagrid-filter-item")){if(I.getAttribute("data-value")!==R)continue;I.setAttribute("aria-selected",String(r.has(R)));let $=I.querySelector("input");$&&($.checked=r.has(R));}};S.addEventListener("scroll",()=>{Fo.set(e,S.scrollTop),B();}),c.addEventListener("input",()=>{m=c.value,u=0,W(),B();});let te=R=>{if(g.length===0)return;u=Math.max(0,Math.min(g.length-1,R));let I=u*Be,$=S.clientHeight||240;I<S.scrollTop?S.scrollTop=I:I+Be>S.scrollTop+$&&(S.scrollTop=I+Be-$),B(),o.querySelector(`.kanuni-datagrid-filter-item[data-index="${u}"]`)?.focus();},ft=()=>{if(d)return;let R;if(r.size===a.length)R=null;else {let I=r.has(""),$=a.filter(ne=>ne.label!==""&&r.has(ne.label));$.length===0?R=I?{columnId:e,operator:"isnull"}:null:I?R={logic:"or",nodes:[{columnId:e,operator:"in",value:$.map(ne=>ne.value)},{columnId:e,operator:"isnull"}]}:R={columnId:e,operator:"in",value:$.map(ne=>ne.value)};}l.setColumnFilter(e,R,datagridCore.FILTER_PART_SET),U();};o.tabIndex=-1,o.addEventListener("keydown",R=>{let I=R.target===c;if(R.key==="Backspace"&&!I){R.preventDefault(),c.focus(),m=m.slice(0,-1),c.value=m,u=0,W(),B();return}if(R.key==="ArrowDown"){R.preventDefault(),te(I?0:u+1);return}if(R.key==="ArrowUp"){R.preventDefault(),te(I?g.length-1:u-1);return}if(!I&&(R.key==="Home"||R.key==="End")){R.preventDefault(),te(R.key==="Home"?0:g.length-1);return}if(R.key===" "&&!I){R.preventDefault();let $=g[u];$&&qe($.label);return}if(R.key==="Enter"){R.preventDefault(),ft();return}!I&&R.key.length===1&&R.key!==" "&&!R.ctrlKey&&!R.metaKey&&!R.altKey&&(R.preventDefault(),c.focus(),m+=R.key,c.value=m,u=0,W(),B());});let et=p("kanuni-datagrid-filter-footer"),V=document.createElement("button");V.type="button",V.textContent=w.cancel,V.addEventListener("click",()=>U());let ge=document.createElement("button");ge.type="button",ge.className="kanuni-datagrid-filter-primary",ge.setAttribute("data-testid","dg-filter-apply"),ge.textContent=w.apply,ge.disabled=true,ge.addEventListener("click",ft),et.append(V,ge),o.append(c,b,S,et),B(),queueMicrotask(()=>{c.isConnected&&c.focus();}),l.getDistinctValueSetAsync(e).then(R=>{if(Bo!==n||!o.isConnected)return;a=R.entries,x=null,y="",d=false,ge.disabled=false;let I=datagridCore.selectedLabelsFromFilter(l.getColumnFilter(e,datagridCore.FILTER_PART_SET)??l.getColumnFilter(e,datagridCore.FILTER_PART_DEFAULT),a);I?(s=true,r=new Set(I)):s||(r=new Set(a.map(ne=>ne.label))),W();let $=Fo.get(e);B(),$&&(S.scrollTop=$,B());});});}function _t(e={}){let t=l.getClipboardText(e);l.notifyClipboardGesture("copy",t?t.split(`
2
+ `).length:0,()=>l.writeClipboard(t,"copy"));}function ul(e){if(it===false)return [];let t=it===true?{}:it,i=[],n=a=>{e&&i.length===0&&i.push({separator:true,id:"__dg-sep"}),i.push(a);};t.copy!==false&&n({id:"__dg-copy",label:w.menuCopy,shortcut:`${pl}C`,onSelect:()=>_t()}),t.copyWithHeaders!==false&&n({id:"__dg-copy-headers",label:w.menuCopyWithHeaders,onSelect:()=>_t({includeHeaders:true})}),t.copyWithGroupHeaders!==false&&cl()&&n({id:"__dg-copy-group-headers",label:w.menuCopyWithGroupHeaders,onSelect:()=>_t({includeGroupHeaders:true})});let o=(t.export===false?[]:Array.isArray(t.export)?t.export:["csv","excel","excel-selected","pdf"]).filter(a=>a!=="csv"||l.canExportAll());if(o.length>0){let a=l.getSelectedCount()===0,d={csv:w.exportCsv,excel:w.exportExcel,"excel-selected":w.exportExcelSelected,pdf:w.exportPdf};n({id:"__dg-export",label:w.menuExport,items:o.map(r=>({id:`__dg-export-${r}`,label:d[r],disabled:r==="excel-selected"&&a,onSelect:()=>{Vn(l,r).then(s=>{s.error&&Rn(s.error);});}}))});}return i}function cl(){let e=l.getColumnModel();return l.getVisualColumnIds().some(t=>{let i=e.getDef(t)?.band;return typeof i=="string"?i!=="":Array.isArray(i)&&i.length>0})}let pl=/Mac|iPhone|iPad|iPod/.test(navigator.platform??"")?"\u2318":"Ctrl+";function Wt(e,t,i){let n=null,o=()=>{n?.remove(),n=null;};t.forEach((a,d)=>{if(a.separator){let g=p("kanuni-datagrid-menu-separator");g.setAttribute("role","separator"),e.appendChild(g);return}let r=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)),a.disabled&&(s.disabled=true),a.icon!==void 0){let g=p("kanuni-datagrid-menu-icon","span");typeof a.icon=="string"?g.textContent=a.icon:g.appendChild(a.icon),s.appendChild(g);}let u=p("kanuni-datagrid-menu-label","span");if(u.textContent=a.label??"",s.appendChild(u),a.shortcut){let g=p("kanuni-datagrid-menu-shortcut","span");g.textContent=a.shortcut,s.appendChild(g);}let m=a.items??[];if(m.length>0){let g=p("kanuni-datagrid-menu-caret","span");g.textContent="\u203A",s.appendChild(g),s.setAttribute("aria-haspopup","menu"),s.setAttribute("aria-expanded","false");let x=()=>{o();let y=p("kanuni-datagrid-context-menu kanuni-datagrid-submenu");y.setAttribute("role","menu");let k=s.getBoundingClientRect();y.style.left=`${k.right}px`,y.style.top=`${Math.max(0,k.top-4)}px`;for(let c of m){if(c.separator){let E=p("kanuni-datagrid-menu-separator");E.setAttribute("role","separator"),y.appendChild(E);continue}let b=document.createElement("button");b.type="button",b.className="kanuni-datagrid-menu-item",b.setAttribute("role","menuitem"),c.disabled&&(b.disabled=true);let h=p("kanuni-datagrid-menu-label","span");h.textContent=c.label??"",b.appendChild(h),b.addEventListener("click",()=>{c.onSelect?.(i),U();}),y.appendChild(b);}e.parentElement?.appendChild(y),Ko(y,{left:k.right,top:Math.max(0,k.top-4)}),n=y,s.setAttribute("aria-expanded","true"),$o(y,()=>{o(),s.setAttribute("aria-expanded","false"),s.focus();});};s.addEventListener("mouseenter",x),s.addEventListener("click",x);}else s.addEventListener("mouseenter",o),s.addEventListener("click",()=>{a.onSelect?.(i),U();});r.appendChild(s),e.appendChild(r);});}let Wo=e=>{let i=e.target.closest(".kanuni-datagrid-row");if(!i||i.classList.contains("kanuni-datagrid-group-row"))return;let n=Se(e);if(n?.columnId&&l.notifyCell("cellContextMenu",n.node,n.rowIndex,n.columnId),!lt&&!it&&!l.isRowPinningEnabled()||!n||n.node.kind!=="data")return;e.preventDefault(),l.isRowSelected(n.node.key)||l.handleRowClick(n.node.key,{}),n.columnId&&l.focusCell(n.node.key,n.columnId);let o={row:n.node.data,node:n.node,rowIndex:n.rowIndex,columnId:n.columnId,selectedKeys:l.getSelectedKeys()},a=(typeof lt=="function"?lt(o):lt)??[],d=[...a,...gl(o,a.length>0)],r=[...d,...Po(n.node.key,d.length>0)],s=ul(r.length>0);r.length===0&&s.length===0||Te({left:e.clientX,top:e.clientY},u=>{u.setAttribute("role","menu"),Wt(u,[...r,...s],o);},"kanuni-datagrid-context-menu");};function gl(e,t){if(!Ie?.onChange||Ie.menu===false)return [];let i=e.columnId;if(!i)return [];let n=e.node.key,o=xn(n,i,e.row),a=[];return t&&a.push({separator:true,id:"__note-sep"}),a.push({id:"__note-edit",label:o?w.editNote:w.addNote,onSelect:()=>fl(n,i,e.row,o??"")}),o&&a.push({id:"__note-delete",label:w.deleteNote,onSelect:()=>Ie.onChange?.({rowKey:n,columnId:i,row:e.row,text:null})}),a}function fl(e,t,i,n){let a=(A.querySelector(`[data-row-key="${CSS.escape(String(e))}"] [data-column-id="${CSS.escape(t)}"]`)??A).getBoundingClientRect();queueMicrotask(()=>{Te({left:a.left,top:a.bottom+2},d=>{d.setAttribute("aria-label",w.noteEditorAria);let r=document.createElement("textarea");r.className="kanuni-datagrid-note-input",r.rows=4,r.value=n,r.setAttribute("aria-label",w.noteEditorAria),r.placeholder=w.notePlaceholder,r.setAttribute("data-testid","dg-note-input");let s=()=>{let x=r.value.trim();U(),Ie?.onChange?.({rowKey:e,columnId:t,row:i,text:x===""?null:x});};r.addEventListener("keydown",x=>{x.key==="Enter"&&(x.ctrlKey||x.metaKey)&&(x.preventDefault(),s()),x.key==="Escape"&&(x.preventDefault(),U());});let u=p("kanuni-datagrid-note-actions"),m=document.createElement("button");m.type="button",m.className="kanuni-datagrid-note-cancel",m.textContent=w.cancel,m.addEventListener("click",()=>U());let g=document.createElement("button");g.type="button",g.className="kanuni-datagrid-note-save",g.setAttribute("data-testid","dg-note-save"),g.textContent=w.save,g.addEventListener("click",s),u.append(m,g),d.append(r,u),queueMicrotask(()=>{r.focus(),r.select();});},"kanuni-datagrid-filter-popup kanuni-datagrid-note-editor");});}function ml(e){$e!==e&&($e=e,e?(A.insertBefore(j,D),In()):j.remove());}function bl(e){if(de!==e){if(de=e,e){if(me){let t=ae.isConnected?ae:Y.isConnected?Y:q;_.insertBefore(z,t);}else _.append(z);Tn();}else z.remove();ae.style.setProperty("--dg-pinned-gap",String(Ge+(de&&me?1:0))),Y.style.setProperty("--dg-pinned-gap",String(Ge+(de&&me?1:0)));}}function Mn(e){let t=qn(A,e);t!==null&&l.setColumnWidth(e,t);}function Vo(e,t){let i=l.getColumnModel().getDef(e),n={columnId:e,headerName:i?.headerName??e},o=Wn(n,{controller:l,t:w,groupPanelVisible:$e,footerVisible:de,onToggleGroupPanel:()=>ml(!$e),onToggleFooter:()=>bl(!de),onOpenFieldChooser:()=>qo(t),onBestFit:Mn,onBestFitAll:()=>{for(let d of l.getColumnStates())d.visible&&!d.flex&&Mn(d.id);},maxGroupLevels:ke?Number.POSITIVE_INFINITY:1}),a=typeof rn=="function"?rn(n,o):o;a.length!==0&&Te(t,d=>{d.setAttribute("role","menu"),Wt(d,a,n);},"kanuni-datagrid-context-menu");}function wl(e,t){let i=l.getColumnModel().getDef(e),n=l.getColumnSummary(e),o={columnId:e,headerName:i?.headerName??i?.field??e},a=[{id:"none",label:w.noTotal,disabled:n===null,onSelect:()=>l.setColumnSummary(e,null)},{id:"sep",separator:true},...datagridCore.allowedSummaryTypes(i?.dataType).map(d=>({id:d,label:un[d],disabled:n?.type===d,onSelect:()=>l.setColumnSummary(e,d)}))];Te(t,d=>{d.setAttribute("role","menu"),Wt(d,a,o);},"kanuni-datagrid-context-menu");}function qo(e){Te(e,t=>{let i=p("kanuni-datagrid-filter-list");for(let n of l.getColumnStates()){let o=document.createElement("label");o.className="kanuni-datagrid-filter-item";let a=document.createElement("input");a.type="checkbox",a.checked=n.visible,a.addEventListener("change",()=>{l.setColumnVisible(n.id,a.checked);});let d=document.createElement("span"),r=l.getColumnModel().getDef(n.id);d.textContent=r?.headerName??n.id,o.append(a,d),i.appendChild(o);}t.appendChild(i);},"kanuni-datagrid-filter-popup kanuni-datagrid-column-chooser");}let _e=null,Dn=null,Vt=e=>{j.classList.toggle("kanuni-datagrid-group-panel--over",e);};function zo(e,t,i){let n=l.getGroupLevels();if(e===t)return;let o=n.filter(r=>r!==e),a=o.indexOf(t);if(a<0)return;let d=i==="before"?a:a+1;Dn=e,l.groupBy([...o.slice(0,d),e,...o.slice(d)]);}function Uo(e,t){let i=l.getGroupLevels(),n=i.indexOf(e),o=n+t;n<0||o<0||o>=i.length||zo(e,i[o],t===-1?"before":"after");}function Xo(e,t){if(!e)return;let i=l.getGroupLevels();if(i.includes(e))return;let n=ke?Number.POSITIVE_INFINITY:1;if(i.length>=n){l.groupBy([...i.slice(0,n-1),e]);return}let o=t??i.length;l.groupBy([...i.slice(0,o),e,...i.slice(o)]);}function In(){if(!$e)return;j.textContent="";let e=l.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",j.appendChild(s);return}let t=s=>l.getColumnModel().getDef(s)?.headerName??s,i=p("kanuni-datagrid-group-levels"),n=(s,u)=>s<u.top+u.height/2?"before":"after",o=(s,u)=>{for(let m of j.querySelectorAll(".kanuni-datagrid-group-level"))m.classList.remove("kanuni-datagrid-group-level--drop-before","kanuni-datagrid-group-level--drop-after");s&&u&&s.classList.add(`kanuni-datagrid-group-level--drop-${u}`);};e.forEach((s,u)=>{let m=p("kanuni-datagrid-group-level");m.style.setProperty("--dg-group-level",String(u)),m.setAttribute("data-group-level",String(u));let g=p("kanuni-datagrid-group-chip");if(g.setAttribute("role","button"),g.tabIndex=0,e.length>1&&(g.draggable=true),g.setAttribute("aria-label",`${datagridCore.fillText(w.groupLevelAria,{n:u+1})}: ${t(s)}`),g.addEventListener("dragstart",k=>{_e=s,k.dataTransfer&&(k.dataTransfer.effectAllowed="move",k.dataTransfer.setData("text/x-kanuni-column",s));}),g.addEventListener("dragend",()=>{_e=null,o(null,null);}),g.addEventListener("keydown",k=>{let c=k.ctrlKey||k.metaKey;c&&(k.key==="ArrowUp"||k.key==="ArrowLeft")?(k.preventDefault(),Uo(s,-1)):c&&(k.key==="ArrowDown"||k.key==="ArrowRight")?(k.preventDefault(),Uo(s,1)):(k.key==="Delete"||k.key==="Backspace")&&(k.preventDefault(),l.groupBy(e.filter(b=>b!==s)));}),m.addEventListener("dragover",k=>{!_e&&!(k.dataTransfer?.types.includes("text/x-kanuni-column")??false)||(k.preventDefault(),k.stopPropagation(),o(m,n(k.clientY,m.getBoundingClientRect())));}),m.addEventListener("drop",k=>{k.preventDefault(),k.stopPropagation();let c=n(k.clientY,m.getBoundingClientRect());o(null,null),Vt(false);let b=_e;if(_e=null,b){zo(b,s,c);return}let h=k.dataTransfer?.getData("text/x-kanuni-column");h&&Xo(h,c==="before"?u:u+1);}),e.length>1){let k=p("kanuni-datagrid-group-chip-level","span");k.textContent=String(u+1),g.appendChild(k);}let x=document.createElement("span");x.textContent=t(s);let y=document.createElement("button");y.type="button",y.setAttribute("aria-label",datagridCore.fillText(w.groupRemoveAria,{column:t(s)})),y.textContent="\xD7",y.addEventListener("click",()=>{l.groupBy(e.filter(k=>k!==s));}),y.draggable=false,g.append(x,y),m.appendChild(g),i.appendChild(m),Dn===s&&(Dn=null,queueMicrotask(()=>g.focus()));}),j.appendChild(i);let a=p("kanuni-datagrid-group-panel-actions"),d=document.createElement("button");d.type="button",d.textContent=w.groupExpandAll,d.addEventListener("click",()=>l.expandAllGroups());let r=document.createElement("button");r.type="button",r.textContent=w.groupCollapseAll,r.addEventListener("click",()=>l.collapseAllGroups()),a.append(d,r),j.appendChild(a);}if($e){let e=t=>t.dataTransfer?.types.includes("text/x-kanuni-column")??false;j.addEventListener("dragover",t=>{e(t)&&(t.preventDefault(),Vt(true));}),j.addEventListener("dragleave",t=>{let i=t.relatedTarget;i&&j.contains(i)||Vt(false);}),j.addEventListener("drop",t=>{Vt(false);let i=t.dataTransfer?.getData("text/x-kanuni-column");if(i){if(t.preventDefault(),_e){_e=null;return}Xo(i);}});}let Yo="";function jo(){if(!to)return;let e=[datagridCore.fillText(w.announceRows,{n:l.getVisibleCount()})],t=l.getSort();if(t.length>0){let o=t.map(a=>{let d=l.getColumnModel().getDef(a.columnId),r=d?.headerName??d?.field??a.columnId,s=a.direction==="desc"?w.announceDescending:w.announceAscending;return `${r} ${s}`}).join(", ");e.push(datagridCore.fillText(w.announceSortedBy,{columns:o}));}let i=l.getSelectedCount();i>0&&e.push(datagridCore.fillText(w.announceSelected,{n:i}));let n=e.join(", ");n!==Yo&&(Yo=n,dt.textContent=n);}function Qo(){if(!tn)return;Pe.textContent="";let e=datagridCore.describeFilter(l.getEffectiveFilter(),l.getColumnModel(),{...no,labels:{...datagridCore.filterLabels(w),...no?.labels}});if(!e&&tn!=="always"){Pe.style.display="none";return}Pe.style.display="";let t=l.isFilterEnabled();Pe.className=`kanuni-datagrid-filter-panel${t?"":" kanuni-datagrid-filter-panel--suspended"}`;let i=document.createElement("button");i.type="button",i.className="kanuni-datagrid-filter-panel-clear",i.title=w.filterRemove,i.setAttribute("aria-label",w.filterRemove),i.setAttribute("data-testid","dg-filter-panel-clear"),i.disabled=e===null,i.textContent="\xD7",i.addEventListener("click",()=>{l.setFilter(null),l.clearColumnFilters(),l.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",()=>l.setFilterEnabled(n.checked));let o=p("kanuni-datagrid-filter-panel-text","span");if(o.setAttribute("data-testid","dg-filter-panel-text"),o.textContent=e??w.filterNone,e&&(o.title=e),Pe.append(i,n,o),Jn){let a=document.createElement("button");a.type="button",a.className="kanuni-datagrid-filter-panel-builder",a.title=w.filterEditBuilder,a.setAttribute("aria-label",w.filterEditBuilder),a.setAttribute("data-testid","dg-filter-panel-builder"),a.textContent="\u25BE",a.addEventListener("click",Jn),Pe.appendChild(a);}}let Nn=new Set,hl=l.events.on("cellsFlashed",({rowKeys:e,columnIds:t,duration:i})=>{let n=e.length?e.map(r=>`[data-row-key="${CSS.escape(String(r))}"]`).join(","):".kanuni-datagrid-row",o=t.length?t.map(r=>`[data-column-id="${CSS.escape(r)}"]`).join(","):"[data-column-id]",a=[];N.querySelectorAll(n).forEach(r=>{r.querySelectorAll(o).forEach(s=>a.push(s));});for(let r of a)r.classList.remove("kanuni-datagrid-cell--flash");A.offsetWidth;for(let r of a)r.classList.add("kanuni-datagrid-cell--flash");let d=setTimeout(()=>{for(let r of a)r.classList.remove("kanuni-datagrid-cell--flash");Nn.delete(d);},i);Nn.add(d);});function Se(e){let t=e.target,i=t.closest(".kanuni-datagrid-row");if(!i||!N.contains(i))return null;let n=i.getAttribute("data-row-key");if(n===null)return null;let o=l.getRows(),a=o.findIndex(r=>r!==void 0&&String(r.key)===n);if(a===-1)return null;let d=t.closest(".kanuni-datagrid-cell")?.getAttribute("data-column-id")??null;return {node:o[a],rowIndex:a,columnId:d}}let Jo=e=>{let t=Se(e);t&&(Li?.(t.node),l.notifyRow("rowClicked",t.node,t.rowIndex),t.columnId&&l.notifyCell("cellClicked",t.node,t.rowIndex,t.columnId));},Zo=e=>{let t=Se(e);if(t){if(io){let i=On(t,true);i&&io(i);}on?.(t.node),l.notifyRow("rowDoubleClicked",t.node,t.rowIndex),t.columnId&&l.notifyCell("cellDoubleClicked",t.node,t.rowIndex,t.columnId);}};N.addEventListener("click",Jo),N.addEventListener("dblclick",Zo);function yl(e){let t=0,i=F.querySelector(`[data-column-id="${CSS.escape(e)}"]`);i&&(t=i.scrollWidth),N.querySelectorAll(`[data-column-id="${CSS.escape(e)}"]`).forEach(n=>{n.scrollWidth>t&&(t=n.scrollWidth);}),t>0&&l.setColumnWidth(e,t+12,true);}function Cl(){if(ro)for(let e of F.querySelectorAll('[role="columnheader"][data-column-id]')){let t=ro(e.getAttribute("data-column-id"))??"",i=e.dataset.slotClass??"";if(t!==i){for(let n of i.split(" "))n&&e.classList.remove(n);for(let n of t.split(" "))n&&e.classList.add(n);e.dataset.slotClass=t;}}}function kl(){if(ot)for(let e of F.querySelectorAll(".kanuni-datagrid-filter-button")){let t=e.parentElement?.getAttribute("data-column-id");t&&e.classList.toggle("kanuni-datagrid-filter-button--active",l.getColumnFilter(t)!==null);}}let Hn=false,ei=false,Ze=null;function qt(){Ze!==null&&(clearTimeout(Ze),Ze=null);}function zt(e){at.style.display=e?"":"none";}function Ut(){let e=l.getOverlay();if(At.style.display=e==="noRows"?"":"none",sn===false){qt(),zt(false);return}if(!(e==="loading"&&(Hn||!ei))){qt(),zt(false);return}if(Hn||co<=0){qt(),zt(true);return}Ze!==null||at.style.display===""||(Ze=setTimeout(()=>{Ze=null,X||zt(true);},co));}let ti=false,Gn=false,Pn=false,$n=false,X=false,Kn=new datagridCore.RowMotion;function xl(){if(Gn=false,!X){if(Pn)Pn=false,$n&&($n=false,we++),hn(),yn(),En(),Ft();else {let e=Q;hn(),Q!==e?(we++,yn(),En(),Ft()):l.getPinnedRows("top").length+l.getPinnedRows("bottom").length>0&&Ft();}vn(),l.getAnimateRows()&&Kn.play(N),Ro(),Tn(),Go(),kl(),Cl(),In(),Qo(),jo(),Ut();}}function Xt(e){X||(e&&(Pn=true),!Gn&&(Gn=true,queueMicrotask(xl)));}let vl=[...eo?[l.events.on("focusedRowChanged",e=>eo({rowKey:e.rowKey,row:e.row}))]:[],...ar.map(e=>l.events.on(e,()=>Xt(true))),...dr.map(e=>l.events.on(e,()=>{$n=true;})),...sr.map(e=>l.events.on(e,()=>Xt(false))),...["sortChanged","filterChanged","groupChanged","dataUpdated"].map(e=>l.events.on(e,()=>{l.getAnimateRows()&&Kn.capture(N);})),l.events.on("rowPinningChanged",()=>{X||(sl(),Xt(true));}),l.events.on("overlayChanged",e=>{Hn=e.manual===true&&e.overlay==="loading",X||Ut();}),l.events.on("busyChanged",e=>{ei=e.background===true,X||Ut();}),l.events.on("paginationChanged",()=>{X||Xt(false);}),l.events.on("bodyScroll",()=>{X||No();}),l.events.on("scrollRequested",e=>{if(X)return;e.scrollTop!==void 0&&(D.scrollTop=e.scrollTop),e.scrollLeft!==void 0&&(D.scrollLeft=e.scrollLeft),l.setScroll(D.scrollTop,Math.abs(D.scrollLeft));let t=e.scrollTop;t===void 0||Math.abs(D.scrollTop-t)<=1||setTimeout(()=>{X||Math.abs(D.scrollTop-t)<=1||(D.scrollTop=t,l.setScroll(D.scrollTop,Math.abs(D.scrollLeft)));},0);}),...ln==="fitGrid"?[l.events.on("gridSizeChanged",()=>l.sizeColumnsToFit())]:[],...ln==="fitCells"?[l.events.on("firstDataRendered",()=>{X||ti||(ti=true,queueMicrotask(()=>{if(!X)for(let e of l.getColumnStates())e.visible&&!e.flex&&Mn(e.id);}));})]:[]];ln==="fitGrid"&&l.sizeColumnsToFit();function On(e,t=false){if(!e.columnId||e.node.kind!=="data"&&!(t&&e.node.kind==="group"))return null;let i=pe.find(n=>n.id===e.columnId);return i?{node:e.node,columnId:e.columnId,rowIndex:e.rowIndex,columnIndex:i.visualIndex,value:e.node.kind==="data"?l.getColumnModel().getCellValue(e.node.data,i.id):void 0}:null}let ni=e=>{let t=e.target;if(oo){let r=Se(e),s=r?On(r):null;s&&oo(s,e);}let i=t.closest(".kanuni-datagrid-row");if(!i||i.classList.contains("kanuni-datagrid-group-row"))return;let n=i.getAttribute("data-row-key");if(n===null)return;let o=l.getRows().find(r=>r!==void 0&&String(r.key)===n);if(!o||o.kind!=="data")return;l.handleRowClick(o.key,{ctrlKey:e.ctrlKey||qi&&!e.shiftKey,metaKey:e.metaKey,shiftKey:e.shiftKey});let a=t.closest(".kanuni-datagrid-cell"),d=a?pe.find(r=>a.id.endsWith(`-${r.id}`))?.id:void 0;d&&l.focusCell(o.key,d);},oi=e=>{if(!Tt)return;let i=e.target.closest(".kanuni-datagrid-cell");if(!i||!N.contains(i)||e.relatedTarget?.closest?.(".kanuni-datagrid-cell")===i)return;let o=Se(e),a=o?On(o):null;a&&Tt(a,e);};N.addEventListener("mousedown",ni),N.addEventListener("contextmenu",Wo),Tt&&N.addEventListener("mouseover",oi),ut&&(q.addEventListener("dragstart",zi),q.addEventListener("dragover",Ui),q.addEventListener("drop",Xi),q.addEventListener("dragend",Yi),q.addEventListener("dragleave",ji)),A.tabIndex=0;let ii=e=>{let t=e.target;if(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable||se.contains(t)||ve.contains(t)||F.contains(t))return;if((lt||it||l.isRowPinningEnabled())&&(e.key==="ContextMenu"||e.key==="F10"&&e.shiftKey)){let a=l.getFocus(),d=a?N.querySelector(`[id="${CSS.escape(`${f.gridId}-cell-${String(a.rowKey)}-${a.columnId}`)}"]`):null;if(d){let r=d.getBoundingClientRect();d.dispatchEvent(new MouseEvent("contextmenu",{bubbles:true,cancelable:true,clientX:r.left+16,clientY:r.bottom})),e.preventDefault();}return}let i=datagridCore.resolveGridCommand({key:e.key,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,altKey:e.altKey});if(!i)return;if(i.type==="copy"){_t();return}if(i.type==="activate"){if(on){let a=l.getFocus(),d=a?l.getRows().find(r=>r!==void 0&&r.key===a.rowKey):void 0;d&&on(d);}i.preventDefault&&e.preventDefault();return}l.executeCommand(i),i.preventDefault&&e.preventDefault();let n=l.getFocusIndices();if(n){let d=l.getColumnLayout().center.findIndex(s=>s.state.id===l.getFocus()?.columnId),r=l.ensureVisible(n.rowIndex,d===-1?void 0:d);r&&(r.scrollTop!==void 0&&(D.scrollTop=r.scrollTop),r.scrollLeft!==void 0&&(D.scrollLeft=r.scrollLeft),l.setScroll(D.scrollTop,Math.abs(D.scrollLeft)));}let o=l.getFocus();A.setAttribute("aria-activedescendant",o?`${f.gridId}-cell-${String(o.rowKey)}-${o.columnId}`:"");};A.addEventListener("keydown",ii);let El=so?datagridCore.attachStateStoring(l,so):null,li=typeof re=="object"?re.delay??400:400,ri=re!==false&&!(typeof re=="object"&&re.enabled===false),Rl=typeof re=="object"?re.showOnTruncation!==false:true,ai=typeof re=="object"?re.trigger??"hover":"hover",di=ri&&ai!=="focus",Fn=ri&&ai!=="hover",Yt=typeof re=="object"&&re.interactive===true,si=`${f.gridId}-tooltip`,We=null,J=null,Z=null,Ve=null,Bn=null;function Le(){J&&clearTimeout(J),J=null,Ve=null,_n();}function _n(){Z&&clearTimeout(Z),Z=null,Bn?.removeAttribute("aria-describedby"),Bn=null,We?.remove(),We=null;}let Tl=e=>e.scrollWidth>e.clientWidth+1||e.scrollHeight>e.clientHeight+1;function Sl(e){let i=e.closest(".kanuni-datagrid-row")?.getAttribute("data-row-key"),n=pe.find(u=>e.id.endsWith(`-${u.id}`));if(!i||!n)return null;let o=l.getRows().find(u=>u!==void 0&&String(u.key)===i);if(!o||o.kind!=="data")return null;let a=n.def,d=xn(o.key,n.id,o.data);if(d)return d;let r={value:l.getColumnModel().getCellValue(o.data,n.id),row:o.data,node:o,column:a},s=a.renderTooltip;if(s){let u=s(r);return u===void 0||u===""?null:u}if(typeof a.tooltip=="function")return a.tooltip(r)??null;if(typeof a.tooltip=="string")return a.tooltip;if(a.tooltipField){let u=o.data[a.tooltipField];return u==null?null:String(u)}return Rl&&Tl(e)?e.textContent??null:null}function ui(e,t){let i=Sl(e);if(i===null||i==="")return;_n();let n=e.getBoundingClientRect();We=p(`${Qn(f)} kanuni-datagrid-portal`);let o=p(Yt?"kanuni-datagrid-tooltip kanuni-datagrid-tooltip--interactive":"kanuni-datagrid-tooltip");o.id=si,o.setAttribute("role","tooltip"),typeof i=="string"?o.textContent=i:o.appendChild(i),o.style.position="fixed",o.style.left=`${n.left}px`,o.style.top=`${n.bottom+4}px`,o.style.zIndex="1001",Yt&&(o.addEventListener("pointerenter",()=>{Z&&clearTimeout(Z),Z=null,J&&clearTimeout(J),J=null;}),o.addEventListener("pointerleave",Le)),We.appendChild(o),document.body.appendChild(We),t&&(e.setAttribute("aria-describedby",si),Bn=e);}let ci=e=>{if(!di)return;let t=e.target.closest(".kanuni-datagrid-cell");if(t&&t===Ve){Z&&clearTimeout(Z),Z=null;return}Yt&&We&&Z?(J&&clearTimeout(J),J=null):Le(),!(!t||!N.contains(t))&&(Ve=t,J=setTimeout(()=>{J=null,!(Ve!==t||!t.isConnected)&&ui(t,false);},li));},pi=e=>{if(!di)return;let t=e.relatedTarget;if(!(Ve&&t&&Ve.contains(t))){if(!Yt||!We){Le();return}Z&&clearTimeout(Z),Z=setTimeout(_n,150);}};A.addEventListener("pointerover",ci),A.addEventListener("pointerout",pi),D.addEventListener("scroll",Le,{passive:true});let gi=-1/0,fi=()=>{gi=Date.now();};Fn&&A.addEventListener("pointerdown",fi);let Ll=Fn?l.events.on("focusChanged",()=>{Le();let e=l.getFocus();e&&(J=setTimeout(()=>{if(J=null,!A.contains(document.activeElement)&&Date.now()-gi>1500)return;let t=document.getElementById(`${f.gridId}-cell-${String(e.rowKey)}-${e.columnId}`);!t||!N.contains(t)||(Ve=t,ui(t,true));},li));}):null,mi=e=>{e.key==="Escape"&&Le();};Fn&&A.addEventListener("keydown",mi);let bi=()=>{if(l.setScroll(D.scrollTop,Math.abs(D.scrollLeft)),Ae)for(let e of wi())e.scroller.scrollLeft!==D.scrollLeft&&(e.scroller.scrollLeft=D.scrollLeft);};D.addEventListener("scroll",bi,{passive:true});let Ae=null,wi=()=>{if(!le||!Ae)return [];let e=wt.get(le);return e?[...e].filter(t=>t!==Ae):[]},hi=null;if(le){Ae={controller:l,scroller:D};let e=wt.get(le)??new Set;e.add(Ae),wt.set(le,e),hi=l.events.on("columnStateChanged",()=>{if(jn.has(le))return;let t=wi();if(t.length===0)return;let i=l.getColumnStates();jn.add(le);try{for(let n of t)n.controller.applyColumnStates(i);}finally{jn.delete(le);}});}let yi=()=>{l.setViewportSize(D.clientWidth,D.clientHeight),D.style.setProperty("--dg-viewport-width",`${D.clientWidth}px`);let e=q.getBoundingClientRect(),t=_.getBoundingClientRect();l.setChromeOffsets(e.top-t.top,t.bottom-e.bottom),datagridCore.calibrateMaxScrollOffset(D,l);};yi();let jt=null;return typeof ResizeObserver<"u"&&(jt=new ResizeObserver(yi),jt.observe(D),jt.observe(_)),hn(),yn(),En(),dl(),Ft(),vn(),Tn(),Go(),In(),Qo(),jo(),Ut(),pt?.always&&bn(true),{controller:l,element:A,setData:e=>l.setData(e),setColumns:e=>l.setColumns(e),destroy:()=>{if(!X){if(X=true,vl.forEach(e=>e()),jt?.disconnect(),Eo?.(),je&&(je=false,ze--,ze<=0&&(ze=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),hi?.(),le&&Ae){let e=wt.get(le);e?.delete(Ae),e&&e.size===0&&wt.delete(le),Ae=null;}D.removeEventListener("scroll",bi),N.removeEventListener("mousedown",ni),N.removeEventListener("contextmenu",Wo),ae.removeEventListener("contextmenu",Bt),Kn.dispose(),xe.removeEventListener("contextmenu",Bt),Tt&&N.removeEventListener("mouseover",oi),N.removeEventListener("click",Jo),N.removeEventListener("dblclick",Zo),hl(),qt();for(let e of Nn)clearTimeout(e);A.removeEventListener("keydown",ii),A.removeEventListener("pointerover",ci),A.removeEventListener("pointerout",pi),A.removeEventListener("keydown",mi),A.removeEventListener("pointerdown",fi),Ll?.(),D.removeEventListener("scroll",Le),Le(),El?.(),U(false),l.dispose(),A.remove();}}}}Object.defineProperty(exports,"DENSITY_ROW_HEIGHT",{enumerable:true,get:function(){return datagridCore.DENSITY_ROW_HEIGHT}});Object.defineProperty(exports,"GRID_COLOR_SCHEMES",{enumerable:true,get:function(){return datagridCore.GRID_COLOR_SCHEMES}});Object.defineProperty(exports,"THEME_ROW_HEIGHT",{enumerable:true,get:function(){return datagridCore.THEME_ROW_HEIGHT}});Object.defineProperty(exports,"isPackagedTheme",{enumerable:true,get:function(){return datagridCore.isPackagedTheme}});Object.defineProperty(exports,"presetRowHeight",{enumerable:true,get:function(){return datagridCore.presetRowHeight}});exports.CHECKBOX_COLUMN_WIDTH=Jt;exports.DETAIL_COLUMN_WIDTH=yt;exports.PRINT_MAX_ROWS=Si;exports.ROW_DRAG_MIME=Zt;exports.ROW_NUMBER_COLUMN_WIDTH=ht;exports.buildHeaderMenu=Wn;exports.createGrid=br;exports.measureBestFitWidth=qn;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { GridRowData, DataGridController, GridDictionary, RowNode, GridColumnDef, DataGridCoreConfig, GridThemeName, GridPalette, GridDensity, DescribeFilterOptions, RowKey, StateStoringConfig, InferColumnsOptions } from '@kanunilabs/datagrid-core';
2
- export { DENSITY_ROW_HEIGHT, DataGridController, GridColumnDef, GridDensity, GridRowData, GridTheme, GridThemeName, RowKey, RowNode, SortDescriptor, THEME_ROW_HEIGHT, isPackagedTheme, presetRowHeight } from '@kanunilabs/datagrid-core';
1
+ import { GridRowData, DataGridController, GridDictionary, RowNode, GridColumnDef, DataGridCoreConfig, GridThemeName, GridPaletteName, GridDensity, DescribeFilterOptions, RowKey, StateStoringConfig, InferColumnsOptions } from '@kanunilabs/datagrid-core';
2
+ export { DENSITY_ROW_HEIGHT, DataGridController, GRID_COLOR_SCHEMES, GridColorScheme, GridColumnDef, GridDensity, GridPaletteName, GridRowData, GridTheme, GridThemeName, RowKey, RowNode, SortDescriptor, THEME_ROW_HEIGHT, isPackagedTheme, presetRowHeight } from '@kanunilabs/datagrid-core';
3
3
 
4
4
  /** What a header menu is opened against — the React shape, verbatim. */
5
5
  interface HeaderMenuContext {
@@ -260,6 +260,13 @@ type VanillaColumnDef<TRow = GridRowData> = GridColumnDef<TRow> & {
260
260
  * strips a flash pulse mid-animation.
261
261
  */
262
262
  cellClassName?: string | ((ctx: CellRenderContext<TRow>) => string | undefined);
263
+ /**
264
+ * Rich tooltip content for this column's cells (P-TOOL-01) — the React
265
+ * `renderTooltip`, DOM-typed: return a node (an image, a small table, a
266
+ * link) or text. Wins over `tooltip` and `tooltipField`; null shows none.
267
+ * Pair it with `tooltip.interactive` when the content holds something to click.
268
+ */
269
+ renderTooltip?: (ctx: CellRenderContext<TRow>) => Node | string | null | undefined;
263
270
  /**
264
271
  * Tooltip for this column's HEADER cell. Static by nature — a header has one
265
272
  * value — which is why it is a string and not the cell tooltip's union.
@@ -281,7 +288,12 @@ interface CreateGridConfig<TRow = GridRowData> extends Omit<DataGridCoreConfig<T
281
288
  * theme has no row-height preset — set `rowHeight` or `density` with it.
282
289
  */
283
290
  theme?: GridThemeName;
284
- palette?: GridPalette;
291
+ /**
292
+ * A classic palette, one of the 36 packaged colour schemes (with
293
+ * `@kanunilabs/datagrid/themes/<id>.css` loaded after `styles.css`), or your
294
+ * own scheme's name from the Theme Builder.
295
+ */
296
+ palette?: GridPaletteName;
285
297
  density?: GridDensity;
286
298
  dark?: boolean;
287
299
  /** Zebra rows. Default TRUE — the React renderer's default. */
@@ -557,6 +569,15 @@ interface CreateGridConfig<TRow = GridRowData> extends Omit<DataGridCoreConfig<T
557
569
  enabled?: boolean;
558
570
  delay?: number;
559
571
  showOnTruncation?: boolean;
572
+ /**
573
+ * What opens a cell's tooltip (P-TOOL-01): `'hover'` (default), `'focus'`
574
+ * (the cell taking keyboard focus — arrowing onto it, or tapping it on
575
+ * a touch screen) or `'both'`. A focus tooltip is tied to its cell with
576
+ * `aria-describedby`; Escape closes it.
577
+ */
578
+ trigger?: 'hover' | 'focus' | 'both';
579
+ /** Let the pointer move onto the tooltip, to select its text or click a link in it. */
580
+ interactive?: boolean;
560
581
  };
561
582
  /** Drop strip above the grid: drag a header here to group by it. Reads
562
583
  * `grouping.panel` exactly like the React prop shape. */
@@ -588,6 +609,15 @@ interface CreateGridConfig<TRow = GridRowData> extends Omit<DataGridCoreConfig<T
588
609
  onCellPointerDown?: (ctx: CellSlotContext<TRow>, event: MouseEvent) => void;
589
610
  onCellPointerEnter?: (ctx: CellSlotContext<TRow>, event: MouseEvent) => void;
590
611
  onCellDoubleClick?: (ctx: CellSlotContext<TRow>) => void;
612
+ /**
613
+ * A click on a column header, asked before it sorts; return true to take it
614
+ * (the header then does not sort). Column selection uses it (G-SEL-02).
615
+ */
616
+ onHeaderClick?: (columnId: string, event: MouseEvent) => boolean;
617
+ /** Extra class names per header cell, re-read on every paint (a selected column). */
618
+ getHeaderClassName?: (columnId: string) => string | undefined;
619
+ /** Replace a header's label when the header is built (a rename box). Undefined = the label. */
620
+ renderHeaderLabel?: (columnId: string) => Node | undefined;
591
621
  }
592
622
  interface GridApi<TRow = GridRowData> {
593
623
  /** The engine, whole. The same object React hands to `onReady`. */
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { GridRowData, DataGridController, GridDictionary, RowNode, GridColumnDef, DataGridCoreConfig, GridThemeName, GridPalette, GridDensity, DescribeFilterOptions, RowKey, StateStoringConfig, InferColumnsOptions } from '@kanunilabs/datagrid-core';
2
- export { DENSITY_ROW_HEIGHT, DataGridController, GridColumnDef, GridDensity, GridRowData, GridTheme, GridThemeName, RowKey, RowNode, SortDescriptor, THEME_ROW_HEIGHT, isPackagedTheme, presetRowHeight } from '@kanunilabs/datagrid-core';
1
+ import { GridRowData, DataGridController, GridDictionary, RowNode, GridColumnDef, DataGridCoreConfig, GridThemeName, GridPaletteName, GridDensity, DescribeFilterOptions, RowKey, StateStoringConfig, InferColumnsOptions } from '@kanunilabs/datagrid-core';
2
+ export { DENSITY_ROW_HEIGHT, DataGridController, GRID_COLOR_SCHEMES, GridColorScheme, GridColumnDef, GridDensity, GridPaletteName, GridRowData, GridTheme, GridThemeName, RowKey, RowNode, SortDescriptor, THEME_ROW_HEIGHT, isPackagedTheme, presetRowHeight } from '@kanunilabs/datagrid-core';
3
3
 
4
4
  /** What a header menu is opened against — the React shape, verbatim. */
5
5
  interface HeaderMenuContext {
@@ -260,6 +260,13 @@ type VanillaColumnDef<TRow = GridRowData> = GridColumnDef<TRow> & {
260
260
  * strips a flash pulse mid-animation.
261
261
  */
262
262
  cellClassName?: string | ((ctx: CellRenderContext<TRow>) => string | undefined);
263
+ /**
264
+ * Rich tooltip content for this column's cells (P-TOOL-01) — the React
265
+ * `renderTooltip`, DOM-typed: return a node (an image, a small table, a
266
+ * link) or text. Wins over `tooltip` and `tooltipField`; null shows none.
267
+ * Pair it with `tooltip.interactive` when the content holds something to click.
268
+ */
269
+ renderTooltip?: (ctx: CellRenderContext<TRow>) => Node | string | null | undefined;
263
270
  /**
264
271
  * Tooltip for this column's HEADER cell. Static by nature — a header has one
265
272
  * value — which is why it is a string and not the cell tooltip's union.
@@ -281,7 +288,12 @@ interface CreateGridConfig<TRow = GridRowData> extends Omit<DataGridCoreConfig<T
281
288
  * theme has no row-height preset — set `rowHeight` or `density` with it.
282
289
  */
283
290
  theme?: GridThemeName;
284
- palette?: GridPalette;
291
+ /**
292
+ * A classic palette, one of the 36 packaged colour schemes (with
293
+ * `@kanunilabs/datagrid/themes/<id>.css` loaded after `styles.css`), or your
294
+ * own scheme's name from the Theme Builder.
295
+ */
296
+ palette?: GridPaletteName;
285
297
  density?: GridDensity;
286
298
  dark?: boolean;
287
299
  /** Zebra rows. Default TRUE — the React renderer's default. */
@@ -557,6 +569,15 @@ interface CreateGridConfig<TRow = GridRowData> extends Omit<DataGridCoreConfig<T
557
569
  enabled?: boolean;
558
570
  delay?: number;
559
571
  showOnTruncation?: boolean;
572
+ /**
573
+ * What opens a cell's tooltip (P-TOOL-01): `'hover'` (default), `'focus'`
574
+ * (the cell taking keyboard focus — arrowing onto it, or tapping it on
575
+ * a touch screen) or `'both'`. A focus tooltip is tied to its cell with
576
+ * `aria-describedby`; Escape closes it.
577
+ */
578
+ trigger?: 'hover' | 'focus' | 'both';
579
+ /** Let the pointer move onto the tooltip, to select its text or click a link in it. */
580
+ interactive?: boolean;
560
581
  };
561
582
  /** Drop strip above the grid: drag a header here to group by it. Reads
562
583
  * `grouping.panel` exactly like the React prop shape. */
@@ -588,6 +609,15 @@ interface CreateGridConfig<TRow = GridRowData> extends Omit<DataGridCoreConfig<T
588
609
  onCellPointerDown?: (ctx: CellSlotContext<TRow>, event: MouseEvent) => void;
589
610
  onCellPointerEnter?: (ctx: CellSlotContext<TRow>, event: MouseEvent) => void;
590
611
  onCellDoubleClick?: (ctx: CellSlotContext<TRow>) => void;
612
+ /**
613
+ * A click on a column header, asked before it sorts; return true to take it
614
+ * (the header then does not sort). Column selection uses it (G-SEL-02).
615
+ */
616
+ onHeaderClick?: (columnId: string, event: MouseEvent) => boolean;
617
+ /** Extra class names per header cell, re-read on every paint (a selected column). */
618
+ getHeaderClassName?: (columnId: string) => string | undefined;
619
+ /** Replace a header's label when the header is built (a rename box). Undefined = the label. */
620
+ renderHeaderLabel?: (columnId: string) => Node | undefined;
591
621
  }
592
622
  interface GridApi<TRow = GridRowData> {
593
623
  /** The engine, whole. The same object React hands to `onReady`. */