@kanunilabs/datagrid 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import {getGridDictionary,summaryTypeLabels,inferColumns,presetRowHeight,DataGridController,createDebouncedCommit,attachStateStoring,normalizeSearch,summaryLabel,formatSummaryValue,summaryKey,selectedLabelsFromFilter,FILTER_PART_SET,FILTER_PART_DEFAULT,foldText,allowedSummaryTypes,fillText,describeFilter,filterLabels,resolveGridCommand,calibrateMaxScrollOffset,parseFilterInput,FILTER_PART_ROW,bandDepth,computeHeaderBands,bandPath,lookupLabel,downloadBlob,ExportAbortedError,formatDateValue,spanRoleAt}from'@kanunilabs/datagrid-core';export{DENSITY_ROW_HEIGHT,THEME_ROW_HEIGHT,isPackagedTheme,presetRowHeight}from'@kanunilabs/datagrid-core';function bn(C,g){let{controller:w,maxGroupLevels:v,t:k}=g,R=C.columnId,I=w.getColumnModel().getDef(R),P=w.getSort(),Y=P.find(H=>H.columnId===R),le=w.getGroupLevels(),ie=le.includes(R),tt=I?.sortable!==false,ae=w.getColumnStates().find(H=>H.id===R)?.pinned??null,Le=I?.groupable!==false,Ae=[{id:"sort-asc",label:k.sortAsc,disabled:!tt||Y?.direction==="asc",onSelect:()=>w.setSort([{columnId:R,direction:"asc"}])},{id:"sort-desc",label:k.sortDesc,disabled:!tt||Y?.direction==="desc",onSelect:()=>w.setSort([{columnId:R,direction:"desc"}])},{id:"sort-clear",label:k.clearSort,disabled:!Y,onSelect:()=>w.setSort(P.filter(H=>H.columnId!==R))},{id:"sep-1",separator:true},{id:"group",label:ie?k.ungroupColumn:k.groupByColumn,disabled:!Le,onSelect:()=>{ie?w.groupBy(le.filter(H=>H!==R)):w.groupBy([...le,R].slice(-v));}},{id:"group-panel",label:g.groupPanelVisible?k.hideGroupPanel:k.showGroupPanel,onSelect:g.onToggleGroupPanel},{id:"footer",label:g.footerVisible?k.hideFooter:k.showFooter,onSelect:g.onToggleFooter},{id:"sep-2",separator:true},{id:"hide-column",label:k.hideColumn,disabled:w.getColumnStates().filter(H=>H.visible).length<=1,onSelect:()=>w.setColumnVisible(R,false)},{id:"field-chooser",label:k.fieldChooser,onSelect:g.onOpenFieldChooser},{id:"sep-3",separator:true},{id:"best-fit",label:k.bestFit,disabled:I?.resizable===false,onSelect:()=>g.onBestFit(R)},{id:"best-fit-all",label:k.bestFitAll,onSelect:g.onBestFitAll}],Me=w.getColumnStates().filter(H=>H.visible&&H.pinned===ae).map(H=>H.id),ne=Me.indexOf(R),De=I?.reorderable!==false&&ne>=0;return Ae.push({id:"sep-4",separator:true},{id:"move-left",label:k.moveLeft,disabled:!De||ne<=0,onSelect:()=>w.moveColumn(R,Me[ne-1])},{id:"move-right",label:k.moveRight,disabled:!De||ne<0||ne>=Me.length-1,onSelect:()=>w.moveColumn(R,Me[ne+2])},{id:"fixed-position",label:k.fixedPosition,items:[{id:"pin-left",label:k.pinLeft,disabled:ae==="left",onSelect:()=>w.setColumnPinned(R,"left")},{id:"pin-right",label:k.pinRight,disabled:ae==="right",onSelect:()=>w.setColumnPinned(R,"right")},{id:"pin-sticky",label:k.pinSticky,disabled:ae==="sticky",onSelect:()=>w.setColumnPinned(R,"sticky")}]},{id:"unpin",label:k.unpin,disabled:ae===null,onSelect:()=>w.setColumnPinned(R,null)}),Ae}async function wn(C,g){try{let w=g==="csv"?await C.exportToCsv():g==="excel"?await C.exportToExcel():g==="excel-selected"?await C.exportToExcel({selectedOnly:!0}):await C.exportToPdf();return downloadBlob(w.blob,w.fileName),{completed:!0}}catch(w){return w instanceof ExportAbortedError?{completed:false}:{completed:false,error:w instanceof Error?w.message:String(w)}}}var Lo=null;function Kr(){return typeof document>"u"?null:(Lo??=document.createElement("canvas"),Lo.getContext("2d"))}function Ao(C){let g=getComputedStyle(C);return `${g.fontStyle} ${g.fontWeight} ${g.fontSize} ${g.fontFamily}`}function Or(C){for(let g=C.firstElementChild;g;g=g.nextElementSibling)if(g.tagName!=="MARK")return true;return false}function Fr(C){let g=C.map(v=>[v.style.width,v.style.minWidth,v.style.maxWidth]);for(let v of C)v.style.width="max-content",v.style.minWidth="0",v.style.maxWidth="none";let w=0;for(let v of C){let k=Math.ceil(v.getBoundingClientRect().width);k>w&&(w=k);}return C.forEach((v,k)=>{[v.style.width,v.style.minWidth,v.style.maxWidth]=g[k];}),w}function hn(C,g){let w=Kr();if(!w)return null;let v=typeof CSS<"u"&&CSS.escape?CSS.escape(g):g.replace(/"/g,'\\"'),k=C.querySelector(`.kanuni-datagrid-header-cell[data-column-id="${v}"]`),R=C.querySelectorAll(`.kanuni-datagrid-cell[data-column-id="${v}"]`);if(!k&&R.length===0)return null;let I=0;if(k){let P=k.querySelector(".kanuni-datagrid-header-label")??k;w.font=Ao(P),I=w.measureText(P.textContent??"").width+44;}if(R.length>0){w.font=Ao(R[0]);let P=[];for(let Y=0;Y<R.length;Y++){if(Or(R[Y])){P.push(R[Y]);continue}let le=R[Y].textContent??"";if(le==="")continue;let ie=w.measureText(le).width+20;ie>I&&(I=ie);}P.length>0&&(I=Math.max(I,Fr(P)));}return I===0?null:Math.round(Math.min(640,Math.max(48,I)))}var Je=60,At=36,Ze=28,Mt="application/x-kanuni-row",Qe=new Map,yn=new Set,Go=5e3,Se=0,sl=["columnStateChanged","sortChanged"],ul=["columnStateChanged"],cl=["contentReady","viewportChanged","filterChanged","selectionChanged","focusChanged","summariesChanged","cellsRefreshed"],p=(C,g="div")=>{let w=document.createElement(g);return w.className=C,w},et="http://www.w3.org/2000/svg";function pl(C,g){let w=k=>{g&&console.warn(`[datagrid] ${k} is an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to use it.`);},v={...C};if(v.dataSource!=null&&!Array.isArray(v.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(v.columns?.some(k=>k.spanRows)&&(w("cell span/merge (spanRows) is"),v={...v,columns:v.columns.map(k=>k.spanRows?{...k,spanRows:void 0}:k)}),v.tree&&(w("tree data is"),delete v.tree),v.masterDetail&&(w("master-detail is"),delete v.masterDetail),v.grouping){let{groupBy:k,groupSummaries:R}=v.grouping,I=k==null?[]:typeof k=="string"?[k]:k;(I.length>1||R)&&(w("multi-level grouping and group summaries are"),v={...v,grouping:{...v.grouping,groupBy:I.slice(0,1),groupSummaries:false}});}return v}var fl={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:""},Dt=new Set;function gl(C){for(let g of Object.keys(C)){let w=fl[g];w===void 0||w===""||Dt.has(g)||(Dt.add(g),console.warn(`[datagrid] \`${g}\` is a React-only option \u2014 ${w}.`));}}function ml(){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 g=document.createElementNS("http://www.w3.org/2000/svg","path");return g.setAttribute("d","M8 1v8m0 0L5 6m3 3 3-3M2 11v2a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2"),g.setAttribute("fill","none"),g.setAttribute("stroke","currentColor"),g.setAttribute("stroke-width","1.5"),g.setAttribute("stroke-linecap","round"),g.setAttribute("stroke-linejoin","round"),C.appendChild(g),C}function bl(){let C=document.createElementNS(et,"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 g=document.createElementNS(et,"path");return g.setAttribute("d","M1.5 2.5h13L9.5 8.6v4.3l-3 1.6V8.6L1.5 2.5Z"),g.setAttribute("fill","currentColor"),g.setAttribute("stroke","currentColor"),g.setAttribute("stroke-width","0.6"),g.setAttribute("stroke-linejoin","round"),C.appendChild(g),C}function wl(C){let g=document.createElementNS(et,"svg");g.setAttribute("width","14"),g.setAttribute("height","14"),g.setAttribute("viewBox","0 0 16 16"),g.setAttribute("aria-hidden","true"),g.setAttribute("focusable","false");let w=document.createElementNS(et,"rect");w.setAttribute("x","2"),w.setAttribute("y","2"),w.setAttribute("width","12"),w.setAttribute("height","12"),w.setAttribute("rx","2"),w.setAttribute("fill","none"),w.setAttribute("stroke","currentColor"),w.setAttribute("stroke-width","1.3"),g.appendChild(w);let v=k=>{let R=document.createElementNS(et,"path");R.setAttribute("d",k),R.setAttribute("fill","none"),R.setAttribute("stroke","currentColor"),R.setAttribute("stroke-width","1.3"),R.setAttribute("stroke-linecap","round"),g.appendChild(R);};return v("M5 8h6"),C&&v("M8 5v6"),g}function hl(C,g){let w=C??(g==="number"?"right":"left");return w==="right"?"kanuni-datagrid-cell kanuni-datagrid-cell--number":w==="center"?"kanuni-datagrid-cell kanuni-datagrid-cell--center":"kanuni-datagrid-cell"}function Cn(C){let g="kanuni-datagrid-root";return C.dark&&(g+=" kanuni-datagrid-dark"),C.theme&&(g+=` kanuni-datagrid-theme-${C.theme}`),C.palette&&(g+=` kanuni-datagrid-palette-${C.palette}`),C.density&&(g+=` kanuni-datagrid-density-${C.density}`),g}function yl(C,g){let{theme:w,palette:v,density:k,dark:R,striped:I=true,rowNumbers:P=false,locale:Y="en",footer:le=false,footerMenu:ie=true,footerPosition:tt="bottom",notes:ae,pinnedTopRows:Le=[],pinnedBottomRows:Ae=[],resizable:Me=true,reorderable:ne=true,filterRow:De=false,headerFilter:H=false,filterIconMode:$o="hover",filterPanel:Nt=false,onOpenFilterBuilder:xn,focusedRow:kn=false,focusedRowKey:It,onFocusedRowChanged:vn,onRowClick:Po,onRowActivate:Ht,autoSizeStrategy:Gt="none",renderRow:$t,announcements:En=true,filterPanelLabels:Rn,showRowCount:Ko=false,toolbarColumnChooser:Oo=false,cellMenu:nt=true,rowMenu:ot,headerMenu:Pt,rowDrag:me,alignedGrids:j,printLayout:rt,renderCellContent:Kt,getCellClassName:Ot,onCellPointerDown:Tn,onCellPointerEnter:lt,onCellDoubleClick:Sn,renderDetail:Ln,renderEditForm:Fo,enterpriseEdition:de=false,stateStoring:An,tooltip:be=true,renderOverlay:Ft,filterDebounce:Bo,toolbar:Mn=false,highlightSearch:_o=true,sortable:Wo=true,toolbarItemsAfter:Vo,toolbarItemsBefore:zo,toolbarExcel:qo=false,toolbarPdf:Xo=false,searchDebounce:Uo=200,...Yo}=g;gl(g),Ko&&!Dt.has("showRowCount:deprecated")&&(Dt.add("showRowCount:deprecated"),console.warn("[datagrid] `showRowCount` was retired on 2026-08-15 and does nothing in either renderer. The row count lives in the status bar (Enterprise) or the pager."));let m=getGridDictionary(Y),{emptyText:jo=m.noData,loadingText:Qo=m.busy,loadingOverlay:Bt=true,...z}=Yo,Dn=typeof Bt=="number"?Bt:300,_t=summaryTypeLabels(m);if((!z.columns||z.columns.length===0)&&g.autoColumns!==false){let e=Array.isArray(z.dataSource)?z.dataSource:[];z.columns=inferColumns(e,typeof g.autoColumns=="object"?g.autoColumns:{});}z.rowHeight===void 0&&(z.rowHeight=presetRowHeight(w,k,28));let Jo=de?z:pl(z,!!g.debugMode),we=de?ae:void 0;!de&&ae&&g.debugMode&&console.warn("[datagrid] cell notes are an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to show them.");let i=new DataGridController(Jo);i.setEnterpriseEdition(de),It!=null&&i.focusRow(It);let S=p(Cn(g));S.style.height="100%",S.setAttribute("role","grid"),S.setAttribute("data-grid-id",g.gridId),w&&S.setAttribute("data-theme",w),S.style.setProperty("--dg-row-height",`${i.getRowHeight()}px`);let T=p("kanuni-datagrid-scroller"),O=p("kanuni-datagrid-canvas"),Q=p("kanuni-datagrid-header");Q.setAttribute("role","row");let F=p("kanuni-datagrid-rows");F.style.position="relative";let D=p("kanuni-datagrid-viewport");F.appendChild(D);let Oe=p("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--top"),Nn=p("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--bottom"),oe=le,he=tt==="top",$=p(`kanuni-datagrid-footer-row kanuni-datagrid-footer-row--${he?"top":"bottom"}`);if($.setAttribute("role","row"),$.setAttribute("aria-label",m.columnTotalsAria),ie){let e=t=>{let n=t.target?.closest(".kanuni-datagrid-footer-cell")?.getAttribute("data-column-id");n&&(t.preventDefault(),vr(n,{left:t.clientX,top:t.clientY}));};$.addEventListener("click",e),$.addEventListener("contextmenu",e);}let it=p("kanuni-datagrid-bands-host");it.style.display="contents";let Ne=p("kanuni-datagrid-filter-row");Ne.setAttribute("role","row"),O.append(it,Q),De&&O.append(Ne);let Wt=De?2:1;$.style.setProperty("--dg-pinned-gap",String(he?Wt:0)),Oe.style.setProperty("--dg-pinned-gap",String(Wt+(oe&&he?1:0))),oe&&he&&O.append($),Le.length>0&&O.append(Oe),O.append(F),Ae.length>0&&O.append(Nn),oe&&!he&&O.append($),T.appendChild(O);let ye=p("kanuni-datagrid-toolbar"),Ie=p("kanuni-datagrid-pager");Ie.setAttribute("role","navigation"),Ie.setAttribute("aria-label","Pagination");let Ce=p("kanuni-datagrid-filter-panel"),xe=!!z.grouping?.panel,B=p("kanuni-datagrid-group-panel");Mn&&S.appendChild(ye),xe&&S.appendChild(B),S.appendChild(T),Nt&&S.appendChild(Ce);let In=z.pagination;In&&In.enabled!==false&&S.appendChild(Ie);let Fe=p("kanuni-datagrid-loading-overlay"),Hn=p("kanuni-datagrid-loading-card"),Gn=p("kanuni-datagrid-loading-spinner","span");Gn.setAttribute("aria-hidden","true");let $n=p("kanuni-datagrid-loading-label","span");$n.textContent=Qo,Hn.append(Gn,$n),Fe.appendChild(Hn),Fe.style.display="none";let Be=p("kanuni-datagrid-sr-only","div");Be.setAttribute("role","status"),Be.setAttribute("aria-live","polite"),Be.setAttribute("aria-atomic","true");let at=p("kanuni-datagrid-empty");at.textContent=jo,at.style.display="none",S.append(Fe,at),En&&S.appendChild(Be),C.appendChild(S);let Vt=z.selection,dt=(Vt?.mode??"none")!=="none"&&(Vt?.checkboxColumn??false),Zo=(Vt?.rowClick??(dt?"toggle":"replace"))==="toggle",st=i.hasMasterDetail()&&!!Ln,zt=P?Je:0,Pn=zt+(st?Ze:0),J=(P?Je:0)+(st?Ze:0)+(dt?At:0);i.setLeadWidth(J);let ut=!!me?.enabled,_e=me?.group??null,Kn=me?.allowReordering??true,On=me?.allowDropInsert??_e!==null,re=null,ct=null,pt=false,ke=null,se=null;function He(e){ke=e;for(let t of D.querySelectorAll(".kanuni-datagrid-row")){let o=t.getAttribute("data-row-key"),n=e!==null&&o===String(e.key);t.classList.toggle("kanuni-datagrid-row--drop-before",n&&e.side==="before"),t.classList.toggle("kanuni-datagrid-row--drop-after",n&&e.side==="after");}}let Fn=(e,t)=>{let o=t.getBoundingClientRect();return e.clientY<o.top+o.height/2?"before":"after"},Bn=e=>e.dataTransfer?.types.includes(Mt)?re!==null?Kn:On&&_e!==null:false;function _n(e,t,o){let n=null;try{let l=e.dataTransfer?.getData(Mt);n=l?JSON.parse(l):null;}catch{n=null;}if(n){if(n.gridId===i.gridId){if(!Kn)return;if(me?.onReorder){me.onReorder({dragKey:n.rowKey,targetKey:t,position:o,row:i.getRowByKey(n.rowKey)});return}i.moveRow(n.rowKey,t,o);return}!On||_e===null||n.group!==_e||me?.onAdd?.({row:n.row,rowKey:n.rowKey,otherGridId:n.gridId,targetKey:t,position:o});}}let er=e=>{let t=ce(e);if(!t||t.node.kind!=="data"||!e.dataTransfer)return;re=t.node.key,ct=t.node.key,pt=false;let o={gridId:i.gridId,group:_e,rowKey:t.node.key,row:t.node.data};e.dataTransfer.setData(Mt,JSON.stringify(o)),e.dataTransfer.setData("text/plain",String(t.node.key)),e.dataTransfer.effectAllowed="move",i.notifyRowDrag("enter",{rowKey:t.node.key});},tr=e=>{if(!Bn(e))return;e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move");let t=ce(e);if(!t||t.node.kind!=="data")return;if(re===t.node.key){se=null,He(null);return}let o=e.target.closest(".kanuni-datagrid-row"),n=Fn(e,o),l=ke?.key!==t.node.key||ke.side!==n;se={key:t.node.key,side:n},He({key:t.node.key,side:n}),l&&re!==null&&i.notifyRowDrag("move",{rowKey:re,overKey:t.node.key,position:n});},nr=e=>{if(!Bn(e)){He(null);return}e.preventDefault();let t=ce(e);if(pt=true,t&&t.node.kind==="data"){let o=e.target.closest(".kanuni-datagrid-row"),n=Fn(e,o);se={key:t.node.key,side:n},_n(e,t.node.key,n);}else se=null,_n(e,null,"after");re=null,He(null);},or=()=>{ct!==null&&i.notifyRowDragEnd({rowKey:ct,dropped:pt,overKey:se?.key??null,position:se?.side??null}),pt=false,ct=null,re=null,se=null,He(null);},rr=e=>{let t=e.relatedTarget;t&&F.contains(t)||re!==null&&(se=null,He(null),i.notifyRowDrag("leave",{rowKey:re}));},We=rt===void 0||rt===false?null:(()=>{let e=rt===true?{}:rt;return {always:e.always??false,maxRows:e.maxRows??Go}})(),Ve=false;function qt(e){Ve!==e&&(Ve=e,S.classList.toggle("kanuni-datagrid-print",e),e?(Se++,document.documentElement.classList.add("kanuni-datagrid-printing")):(Se--,Se<=0&&(Se=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),Qt());}let Wn=null;if(We&&!We.always){let e=()=>{let o=i.getRows().length;if(o>We.maxRows){i.isDebugMode()&&console.warn(`[datagrid] print layout skipped: ${o} rows exceeds maxRows (${We.maxRows}). Printing the visible rows instead \u2014 use exportPdf() for the whole result.`);return}qt(true);},t=()=>qt(false);window.addEventListener("beforeprint",e),window.addEventListener("afterprint",t),Wn=()=>{window.removeEventListener("beforeprint",e),window.removeEventListener("afterprint",t);};}let ve=0,Z=[],_=0,Xt=0;function Ut(){let e=i.getColumnLayout(),t=i.getVirtualWindow().columns,o=[],n=(a,d,s,c)=>{let r=a.def;o.push({def:r,id:a.state.id,width:a.state.width,pinned:d,inset:s,className:hl(r.align,r.dataType)+(d?" kanuni-datagrid-cell--pinned":"")+(r.autoHeight?" kanuni-datagrid-cell--wrap":""),visualIndex:c});};e.left.forEach((a,d)=>n(a,"left",e.leftOffsets[d]+J,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)),Z=o,_=t.offsetX;let l=(e.centerOffsets[Math.min(t.end,e.center.length)]??0)-(e.centerOffsets[Math.min(t.start,e.center.length)]??0);Xt=Math.max(0,e.centerWidth-t.offsetX-l),O.style.minWidth=`${e.totalWidth+J}px`;}let ft=26;function lr(){let e=i.getColumnLayout(),t=i.getVirtualWindow().columns,o=[...e.left,...e.center.slice(t.start,Math.min(t.end,e.center.length)),...e.right],n=bandDepth(o);if(it.textContent="",Q.style.top=`${n*ft}px`,S.style.setProperty("--dg-band-offset",`${n*ft}px`),n===0)return;computeHeaderBands(o,n).forEach((a,d)=>{let s=p("kanuni-datagrid-band-row");if(s.style.top=`${d*ft}px`,s.style.height=`${ft}px`,J>0){let c=p("kanuni-datagrid-band-cell kanuni-datagrid-band-cell--spacer kanuni-datagrid-band-cell--pinned");c.style.width=`${J}px`,c.style.flex="none",c.style.insetInlineStart="0px",s.appendChild(c);}if(_>0){let c=p("kanuni-datagrid-spacer");c.style.width=`${_}px`,c.style.flex="none",s.appendChild(c);}for(let c of a){let r=p(`kanuni-datagrid-band-cell${c.spacer?" kanuni-datagrid-band-cell--spacer":""}`);if(r.style.width=`${c.width}px`,r.style.flex="none",!c.spacer){if(c.columnIds.length>0){let f=bandPath(i.getColumnModel().getDef(c.columnIds[0])).slice(0,d+1);if(f.length===d+1&&i.isBandCollapsible(f)){let b=i.isBandCollapsed(f),y=document.createElement("button");y.type="button",y.className="kanuni-datagrid-band-toggle",y.setAttribute("aria-expanded",String(!b));let h=b?m.expandDetails??"Expand":m.collapseDetails??"Collapse";y.setAttribute("aria-label",h),y.title=h,y.appendChild(wl(b)),y.addEventListener("click",E=>{E.stopPropagation(),i.toggleBand(f);}),r.appendChild(y);}}let u=p("kanuni-datagrid-band-label","span");u.textContent=c.label,r.appendChild(u);}s.appendChild(r);}it.appendChild(s);});}let ze=null,gt=null;function mt(e,t){gt&&gt!==e&&gt.classList.remove("kanuni-datagrid-header-cell--drop-before","kanuni-datagrid-header-cell--drop-after"),gt=e,e&&(e.classList.toggle("kanuni-datagrid-header-cell--drop-before",t==="before"),e.classList.toggle("kanuni-datagrid-header-cell--drop-after",t==="after"));}function Vn(){if(!ze)return;let e=i.getSelectedCount(),t=i.getVisibleCount(),o=t>0&&e>=t;ze.checked=o,ze.indeterminate=!o&&e>0;}function Yt(){lr();let e=i.getSort(),t=new Map(e.map((n,l)=>[n.columnId,{direction:n.direction,order:l}]));if(Q.textContent="",ze=null,P){let n=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-rownum-cell");n.setAttribute("role","columnheader"),n.style.width=`${Je}px`,n.style.flex="none",n.style.insetInlineStart="0px",Q.appendChild(n);}if(st){let n=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-detail-toggle-cell");n.setAttribute("role","columnheader"),n.setAttribute("aria-label",m.detailsAria),n.style.width=`${Ze}px`,n.style.flex="none",n.style.insetInlineStart=`${zt}px`,Q.appendChild(n);}if(dt){let n=p("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-select-cell");n.setAttribute("role","columnheader"),n.style.width=`${At}px`,n.style.flex="none",n.style.insetInlineStart=`${Pn}px`;let l=document.createElement("input");l.type="checkbox",l.setAttribute("aria-label",m.selectAllRows),l.addEventListener("change",()=>{i.getSelectedCount()>0?i.clearSelection():i.selectAll();}),n.appendChild(l),Q.appendChild(n),ze=l,Vn();}let o=false;for(let n of Z){if(!n.pinned&&!o){if(_>0){let r=document.createElement("div");r.style.flex=`0 0 ${_}px`,Q.appendChild(r);}o=true;}let l=Wo&&n.def.sortable!==false,a=t.get(n.id),d=p(`kanuni-datagrid-header-cell${l?" kanuni-datagrid-header-cell--sortable":""}${n.pinned?" kanuni-datagrid-header-cell--pinned":""}`);d.setAttribute("role","columnheader"),d.setAttribute("data-column-id",n.id),d.setAttribute("aria-sort",a?a.direction==="asc"?"ascending":"descending":"none");let s=n.def.headerTooltip;s&&(d.title=s),d.style.width=`${n.width}px`,d.style.flex="none",n.pinned==="left"&&(d.style.insetInlineStart=`${n.inset}px`),n.pinned==="right"&&(d.style.insetInlineEnd=`${n.inset}px`);let c=p("kanuni-datagrid-header-label","span");if(n.def.renderHeader){let r=n.def.renderHeader({column:n.def});typeof r=="string"?c.textContent=r:c.appendChild(r);}else c.textContent=n.def.headerName??n.id;if(d.appendChild(c),a){let r=p("kanuni-datagrid-sort-indicator","span");if(r.setAttribute("aria-hidden","true"),r.textContent=a.direction==="asc"?"\u25B2":"\u25BC",d.appendChild(r),e.length>1){let u=p("kanuni-datagrid-sort-order","span");u.setAttribute("aria-hidden","true"),u.textContent=String(a.order+1),d.appendChild(u);}}if(l){let r=n.id;d.addEventListener("click",u=>{i.toggleSort(r,u.shiftKey);});}if(Pt!==false){let r=n.id;d.addEventListener("contextmenu",u=>{u.preventDefault(),kr(r,{left:u.clientX,top:u.clientY});});}if(H&&n.def.filterable!==false){let r=document.createElement("button");r.type="button";let u=i.getColumnFilter(n.id)!==null;r.className=`kanuni-datagrid-filter-button${u?" kanuni-datagrid-filter-button--active":""}${$o==="always"?" kanuni-datagrid-filter-button--pinned":""}`,r.setAttribute("aria-haspopup","dialog"),r.setAttribute("aria-label",`${n.def.headerName??n.id} filter`),r.appendChild(bl()),r.addEventListener("click",f=>{f.stopPropagation(),gr(n.id,r);}),d.appendChild(r);}if(ne&&n.def.reorderable!==false&&(d.draggable=true,d.addEventListener("dragstart",r=>{r.dataTransfer?.setData("text/x-kanuni-column",n.id),r.dataTransfer&&(r.dataTransfer.effectAllowed="move");}),d.addEventListener("dragover",r=>{if(!r.dataTransfer?.types.includes("text/x-kanuni-column"))return;r.preventDefault();let u=d.getBoundingClientRect(),f=r.clientX<u.left+u.width/2;mt(d,f?"before":"after");}),d.addEventListener("dragleave",r=>{let u=r.relatedTarget;(!u||!d.contains(u))&&mt(null,"before");}),d.addEventListener("drop",r=>{mt(null,"before");let u=r.dataTransfer?.getData("text/x-kanuni-column");if(!u||u===n.id)return;r.preventDefault();let f=d.getBoundingClientRect();if(r.clientX<f.left+f.width/2)i.moveColumn(u,n.id);else {let y=Z.findIndex(h=>h.id===n.id);i.moveColumn(u,Z[y+1]?.id);}}),d.addEventListener("dragend",()=>mt(null,"before"))),Me&&n.def.resizable!==false){let r=p("kanuni-datagrid-resize-handle","span");r.setAttribute("data-resize-handle",n.id),r.setAttribute("role","presentation"),r.addEventListener("click",u=>u.stopPropagation()),r.addEventListener("dblclick",u=>{u.stopPropagation(),Rr(n.id);}),r.addEventListener("pointerdown",u=>{u.preventDefault(),u.stopPropagation();let f=u.clientX,b=n.width,y=getComputedStyle(d).direction==="rtl"?-1:1;d.draggable=false;let h=b,E=false,M=V=>{E=true,h=b+(V.clientX-f)*y,i.setColumnWidth(n.id,h,false);},G=()=>{window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",G),window.removeEventListener("pointercancel",G),E&&i.setColumnWidth(n.id,h,true),d.draggable=ne&&n.def.reorderable!==false;};window.addEventListener("pointermove",M),window.addEventListener("pointerup",G),window.addEventListener("pointercancel",G);}),d.appendChild(r);}Q.appendChild(d);}}let zn=null,bt=null;function ir(e){if(e===zn)return;zn=e;let t=[];for(let o=0;o<e.length;o++)e[o].kind!=="data"&&t.push(o);bt=t.length>0?t:null;}function ar(e){if(!bt)return e+1;let t=0,o=bt.length;for(;t<o;){let n=t+o>>1;bt[n]<=e?t=n+1:o=n;}return e+1-t}let qe=[];function qn(e="data"){let t=p("kanuni-datagrid-row");if(t.setAttribute("role","row"),e==="panel"){let r=document.createElement("div");return r.setAttribute("role","gridcell"),r.setAttribute("aria-colindex","1"),t.appendChild(r),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,panelCell:r,epoch:ve}}if(e==="group"){let r=p("kanuni-datagrid-group-cell");r.setAttribute("role","gridcell"),r.setAttribute("aria-colindex","1");let u=p("kanuni-datagrid-group-twisty","span");u.setAttribute("aria-hidden","true");let f=p("kanuni-datagrid-group-caption","span"),b=p("kanuni-datagrid-group-label","span"),y=p("kanuni-datagrid-group-count","span"),h=p("kanuni-datagrid-group-aggregates","span");return r.append(u,f,b,y,h),t.appendChild(r),t.addEventListener("click",()=>{let E=t.getAttribute("data-group-key");E!==null&&i.toggleGroup(E);}),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,group:{cell:r,twisty:u,caption:f,label:b,count:y,aggregates:h},epoch:ve}}if(ut){let r=p("kanuni-datagrid-row-grip","span");r.setAttribute("aria-hidden","true"),r.title=m.dragToReorder??"Drag to reorder",r.innerHTML='<svg width="10" height="14" viewBox="0 0 10 14" focusable="false"><g fill="currentColor"><circle cx="3" cy="3" r="1.2"/><circle cx="7" cy="3" r="1.2"/><circle cx="3" cy="7" r="1.2"/><circle cx="7" cy="7" r="1.2"/><circle cx="3" cy="11" r="1.2"/><circle cx="7" cy="11" r="1.2"/></g></svg>',r.addEventListener("mouseenter",()=>{t.draggable=true;}),r.addEventListener("mouseleave",()=>{t.draggable=false;}),t.appendChild(r);}if($t)return {kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:ve};let o=null;P&&(o=p("kanuni-datagrid-cell kanuni-datagrid-cell--number kanuni-datagrid-cell--pinned kanuni-datagrid-rownum-cell"),o.setAttribute("role","gridcell"),o.style.width=`${Je}px`,o.style.flex="none",o.style.insetInlineStart="0px",t.appendChild(o));let n=null;if(st){let r=p("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-detail-toggle-cell");r.setAttribute("role","gridcell"),r.style.width=`${Ze}px`,r.style.flex="none",r.style.insetInlineStart=`${zt}px`;let u=document.createElement("button");u.type="button",u.className="kanuni-datagrid-detail-toggle",u.tabIndex=-1,u.addEventListener("click",f=>{f.stopPropagation();let b=t.getAttribute("data-row-key");if(b===null)return;let y=i.getRows().find(h=>String(h.key)===b);y&&y.kind==="data"&&i.toggleDetail(y.key);}),u.addEventListener("mousedown",f=>f.stopPropagation()),r.appendChild(u),t.appendChild(r),n=u;}let l=null;if(dt){let r=p("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-select-cell");r.setAttribute("role","gridcell"),r.style.width=`${At}px`,r.style.flex="none",r.style.insetInlineStart=`${Pn}px`;let u=document.createElement("input");u.type="checkbox",u.tabIndex=-1;let f=()=>{let b=t.getAttribute("data-row-key");if(b===null)return;let y=i.getRows().find(h=>String(h.key)===b);y&&i.toggleRow(y.key);};r.addEventListener("mousedown",b=>b.stopPropagation()),r.addEventListener("click",b=>{b.target.tagName!=="INPUT"&&(b.stopPropagation(),f());}),u.addEventListener("change",f),u.addEventListener("click",b=>b.stopPropagation()),u.addEventListener("mousedown",b=>b.stopPropagation()),r.appendChild(u),t.appendChild(r),l=u;}let a=[],d=null,s=false;for(let r of Z){!r.pinned&&!s&&(d=document.createElement("div"),d.style.flex=`0 0 ${_}px`,t.appendChild(d),s=true);let u=p(r.className);u.setAttribute("role","gridcell"),u.setAttribute("data-column-id",r.id),u.style.width=`${r.width}px`,u.style.flex="none",r.pinned==="left"&&(u.style.insetInlineStart=`${r.inset}px`),r.pinned==="right"&&(u.style.insetInlineEnd=`${r.inset}px`),t.appendChild(u),a.push({el:u,slot:r});}let c=document.createElement("div");return c.style.flex=`0 0 ${Xt}px`,t.appendChild(c),{kind:e,root:t,cells:a,rowNumberCell:o,selectInput:l,detailToggle:n,leadingSpacer:d,trailingSpacer:c,epoch:ve}}let Ge="";function wt(e,t){if(Ge===""||t===""){e.textContent=t;return}let o=foldText(t),n=o.indexOf(Ge);if(n===-1){e.textContent=t;return}let l=[],a=0;for(;n!==-1;){n>a&&l.push(document.createTextNode(t.slice(a,n)));let d=document.createElement("mark");d.className="kanuni-datagrid-highlight",d.textContent=t.slice(n,n+Ge.length),l.push(d),a=n+Ge.length,n=o.indexOf(Ge,a);}a<t.length&&l.push(document.createTextNode(t.slice(a))),e.replaceChildren(...l);}function dr(e,t,o){let n=i.getColumnModel().getCellValue(o.data,t.id),l=t.def;if(l.renderCell){let d=l.renderCell({value:n,row:o.data,node:o,column:l});typeof d=="string"?e.textContent=d:e.replaceChildren(d);return}let a=lookupLabel(l,n);if(a!==null){wt(e,a);return}if(l.valueFormatter){let d=l.valueFormatter(n,o.data);wt(e,typeof d=="string"?d:String(d??""));return}if(l.dateFormat&&l.dataType==="date"){wt(e,formatDateValue(n,l.dateFormat));return}wt(e,n==null?"":String(n));}function Xn(e,t,o){let n=e.root;if(n.setAttribute("aria-rowindex",String(o+2)),n.setAttribute("data-row-key",String(t.key)),t.kind==="detail"||t.kind==="editform"){let r=e.panelCell,u=t.kind==="detail";n.className=`kanuni-datagrid-row ${u?"kanuni-datagrid-detail-row":"kanuni-datagrid-editform-row"}`,n.style.height=`${t.height}px`,u?(n.setAttribute("data-detail-for",String(t.parentKey)),n.removeAttribute("data-editform-for")):(n.setAttribute("data-editform-for",t.parentKey===null?"":String(t.parentKey)),n.removeAttribute("data-detail-for")),r.className=u?"kanuni-datagrid-detail-cell":"kanuni-datagrid-editform-cell";let f=`${t.kind}:${String(t.key)}`;if(n.getAttribute("data-panel-for")!==f){n.setAttribute("data-panel-for",f);let b=u?Ln?.(t.data):t.parentKey===null?void 0:Fo?.(t.parentKey,t.data);r.textContent="",typeof b=="string"?r.textContent=b:b&&r.appendChild(b);}return}if(n.removeAttribute("data-panel-for"),n.removeAttribute("data-detail-for"),n.removeAttribute("data-editform-for"),t.kind==="filler"){n.style.display="none";return}n.style.display="",n.style.height=Un?"":`${i.getRowHeight()}px`,n.classList.toggle("kanuni-datagrid-row--odd",I&&o%2===1),n.classList.toggle("kanuni-datagrid-row--selected",i.isRowSelected(t.key));let l=i.getFocus();if(n.classList.toggle("kanuni-datagrid-row--focused",kn&&l!==null&&l.rowKey===t.key),e.leadingSpacer&&(e.leadingSpacer.style.flex=`0 0 ${_}px`),e.trailingSpacer&&(e.trailingSpacer.style.flex=`0 0 ${Xt}px`),ut){let r=ke!==null&&String(ke.key)===String(t.key);n.classList.toggle("kanuni-datagrid-row--drop-before",r&&ke.side==="before"),n.classList.toggle("kanuni-datagrid-row--drop-after",r&&ke.side==="after");}if(e.rowNumberCell&&(e.rowNumberCell.textContent=String(ar(o))),e.selectInput&&(e.selectInput.checked=i.isRowSelected(t.key),e.selectInput.setAttribute("aria-label",m.selectRowAria.replace("{row}",String(t.key)))),e.detailToggle&&t.kind==="data"){let r=i.isDetailExpanded(t.key);e.detailToggle.textContent=r?"\u25BE":"\u25B8",e.detailToggle.setAttribute("aria-expanded",String(r)),e.detailToggle.setAttribute("aria-label",r?m.collapseDetails:m.expandDetails);}if(t.kind==="group"&&e.group){let r=t;n.className=`kanuni-datagrid-row kanuni-datagrid-group-row kanuni-datagrid-group-row--level-${r.level}`,n.setAttribute("aria-expanded",String(r.expanded)),n.setAttribute("aria-level",String(r.level+1)),n.setAttribute("data-group-key",String(r.key)),n.setAttribute("data-group-level",String(r.level)),e.group.cell.style.paddingLeft=r.level>0?`${8+r.level*18}px`:"",e.group.twisty.textContent=r.expanded?"\u25BE":"\u25B8";let u=i.getColumnModel().getDef(r.columnId),f=u?.headerName??r.columnId;e.group.caption.textContent=`${f}:`,e.group.label.textContent=lookupLabel(u,r.value)??(r.label===""?m.filterBlank:r.label),e.group.count.textContent=`(${r.count})`,e.group.aggregates.textContent="";let b=r.aggregates??null;if(b)for(let y of i.getSummaryDefs()){let h=p("kanuni-datagrid-group-aggregate","span"),E=p("kanuni-datagrid-group-aggregate-label","span"),M=i.getColumnModel().getDef(y.columnId);E.textContent=`${summaryLabel(y,_t)} ${M?.headerName??y.columnId}:`,h.append(E,` ${formatSummaryValue(y,b[summaryKey(y.columnId,y.type)],M)}`),e.group.aggregates.appendChild(h);}return}if(t.kind!=="data"){for(let{el:r}of e.cells)r.textContent="";return}if(n.className=n.className.includes("group-row")?"kanuni-datagrid-row":n.className,$t){let r=ut?1:0,u=$t({row:t.data,node:t,rowIndex:o,selected:i.isRowSelected(t.key),focused:kn&&l!==null&&l.rowKey===t.key});if(u instanceof Node&&n.childNodes.length===r+1&&n.childNodes[r]===u)return;for(;n.childNodes.length>r;)n.removeChild(n.lastChild);typeof u=="string"?n.appendChild(document.createTextNode(u)):u&&n.appendChild(u);return}let a=l!==null&&l.rowKey===t.key?l.columnId:null,d=t.tree,s=d?(()=>{let r=i.getColumnLayout();return (r.left[0]??r.center[0]??r.right[0])?.state.id??null})():null,c=i.hasCellSpans();for(let{el:r,slot:u}of e.cells){let f=Kt||Ot?{node:t,columnId:u.id,rowIndex:o,columnIndex:u.visualIndex,value:i.getColumnModel().getCellValue(t.data,u.id)}:null,b=f&&Kt?Kt(f):void 0,y=false;if(b!==void 0?b instanceof Node&&r.childNodes.length===1&&r.firstChild===b?y=true:typeof b=="string"?r.textContent=b:r.replaceChildren(b):(dr(r,u,t),d&&u.id===s&&cr(r,t,d)),c&&!y){let L=ur(o,u.id);r.classList.toggle("kanuni-datagrid-cell--span",L?.kind==="draw"),r.classList.toggle("kanuni-datagrid-cell--span-covered",L?.kind==="covered");let fe=b!==void 0;if(L?.kind==="covered"&&a!==u.id&&!fe)r.replaceChildren();else if(L?.kind==="draw"){let K=p("kanuni-datagrid-span-box");K.style.height=`${L.height}px`,K.append(...Array.from(r.childNodes)),r.appendChild(K);}}else c||r.classList.remove("kanuni-datagrid-cell--span","kanuni-datagrid-cell--span-covered");if(we){let L=!!jt(t.key,u.id,t.data);r.classList.toggle("kanuni-datagrid-cell--noted",L);}r.id=`${g.gridId}-cell-${String(t.key)}-${u.id}`,r.classList.toggle("kanuni-datagrid-cell--focused",a===u.id);let h=r.getAttribute("data-slot-classes");if(h)for(let L of h.split(" "))r.classList.remove(L);let E=f&&Ot?Ot(f):void 0,M=u.def.cellClassName,V=[typeof M=="function"?M({value:i.getColumnModel().getCellValue(t.data,u.id),row:t.data,node:t,column:u.def}):M,E].filter(Boolean).join(" ")||void 0;if(V){for(let L of V.split(" "))r.classList.add(L);r.setAttribute("data-slot-classes",V);}else h&&r.removeAttribute("data-slot-classes");}}let Un=g.columns.some(e=>e.autoHeight);function sr(){if(!Un)return;let e=i.getVirtualWindow(),t=i.getRows(),o=new Map(i.getMeasuredRowHeights()),n=false;for(let l=e.rows.start;l<e.rows.end&&l<t.length;l++){let a=t[l];if(!a||a.kind!=="data")continue;let d=l-e.rows.start,s=qe[d]?.root;if(!s)continue;let c=s.getBoundingClientRect().height;c>0&&o.get(a.key)!==c&&(o.set(a.key,c),n=true);}n&&i.setMeasuredRowHeights(o);}let ht={start:0,end:0};function ur(e,t){let o=i.getCellSpans(t);if(o.length===0)return null;let n=spanRoleAt(o,e,ht.start,ht.end);if(!n)return null;if(n.role==="covered")return {kind:"covered"};let l=i.getRowOffset(n.drawStart);return {kind:"draw",height:i.getRowOffset(n.drawEnd)+i.getRowHeightAt(n.drawEnd)-l}}function cr(e,t,o){let n=p(`kanuni-datagrid-tree-cell${o.ancestorOnly?" kanuni-datagrid-tree-cell--ancestor":""}`,"span");if(n.style.paddingInlineStart=`${o.depth*16}px`,o.hasChildren){let l=document.createElement("button");l.type="button",l.className="kanuni-datagrid-tree-toggle",l.setAttribute("data-tree-toggle",""),l.setAttribute("aria-expanded",String(o.expanded)),l.setAttribute("aria-label",o.expanded?m.collapseDetails:m.expandDetails),l.textContent=o.expanded?"\u25BE":"\u25B8",l.addEventListener("mousedown",a=>a.stopPropagation()),l.addEventListener("click",a=>{a.stopPropagation(),i.toggleTreeRow(t.key);}),n.appendChild(l);}else n.appendChild(p("kanuni-datagrid-tree-toggle kanuni-datagrid-tree-toggle--leaf","span"));n.append(...Array.from(e.childNodes)),e.appendChild(n);}let jt=(e,t,o)=>we?we.get({rowKey:e,columnId:t,row:o})??null:null,Yn=null,ue=Ft?p("kanuni-datagrid-overlay"):null;ue&&(ue.style.position="absolute",ue.style.inset="0",ue.style.pointerEvents="none",F.appendChild(ue));function pr(){if(!Ft||!ue)return;let e=Ft();e!==Yn&&(Yn=e,e?ue.replaceChildren(e):ue.replaceChildren());}function Qt(){pr();let e=i.getVirtualWindow(),t=i.getRows(),o=Ve?{...e,rows:{...e.rows,start:0,end:t.length,offsetY:0,totalHeight:0}}:e;ir(t),F.style.height=`${o.rows.totalHeight}px`,D.style.transform=`translateY(${o.rows.offsetY}px)`,Ge=_o?normalizeSearch(i.getSearchText()):"";let n=Math.max(0,Math.min(o.rows.end,t.length)-o.rows.start);for(ht.start=o.rows.start,ht.end=Math.min(o.rows.end,t.length)-1;qe.length>n;)qe.pop().root.remove();for(let l=0;l<n;l++){let a=o.rows.start+l,d=t[a],s=d.kind==="data"?"data":d.kind==="group"?"group":d.kind==="detail"||d.kind==="editform"?"panel":"stub",c=qe[l];if(!c||c.epoch!==ve||c.kind!==s){let r=qn(s);c?D.replaceChild(r.root,c.root):D.appendChild(r.root),qe[l]=r,c=r;}Xn(c,d,a);}sr();}let jn=createDebouncedCommit(Bo??(i.isRemote()?200:0));function Jt(){if(!De)return;if(Ne.textContent="",J>0){let t=p("kanuni-datagrid-filter-cell kanuni-datagrid-filter-cell--pinned");t.style.width=`${J}px`,t.style.flex="none",t.style.insetInlineStart="0px",Ne.appendChild(t);}let e=false;for(let t of Z){if(!t.pinned&&!e){if(_>0){let n=p("kanuni-datagrid-spacer");n.style.width=`${_}px`,n.style.flex="none",Ne.appendChild(n);}e=true;}let o=p(`kanuni-datagrid-filter-cell${t.pinned?" kanuni-datagrid-filter-cell--pinned":""}`);if(o.style.width=`${t.width}px`,o.style.flex="none",t.pinned==="left"&&(o.style.insetInlineStart=`${t.inset}px`),t.pinned==="right"&&(o.style.insetInlineEnd=`${t.inset}px`),t.def.filterable!==false){let n=document.createElement("input");n.className="kanuni-datagrid-filter-input",n.setAttribute("aria-label",`${t.def.headerName??t.id} filter`);let l=()=>i.setColumnFilter(t.id,parseFilterInput(t.id,n.value,t.def.dataType),FILTER_PART_ROW);n.addEventListener("input",()=>jn.schedule(t.id,l));let a=()=>{jn.cancel(t.id),l();};n.addEventListener("keydown",d=>{d.key==="Enter"&&a();}),n.addEventListener("blur",a),o.appendChild(n);}Ne.appendChild(o);}}let Zt=()=>{};function fr(){if(!Mn)return;let e=document.createElement("input");e.type="search",e.className="kanuni-datagrid-toolbar-search",e.placeholder=m.toolbarSearch,e.setAttribute("aria-label",m.toolbarSearch);let t=null;e.addEventListener("input",()=>{t&&clearTimeout(t),t=setTimeout(()=>i.setSearchText(e.value),Uo);});let o=p("kanuni-datagrid-toolbar-spacer"),n=null;if(Oo){let r=document.createElement("button");r.type="button",r.textContent=m.toolbarColumns??"Columns",r.setAttribute("aria-haspopup","dialog"),r.addEventListener("click",()=>{let u=r.getBoundingClientRect();oo({left:u.left,top:u.bottom+2});}),n=r;}let l=de&&qo,a=de&&Xo,d=document.createElement("button");d.type="button",d.className="kanuni-datagrid-toolbar-icon-button",d.setAttribute("aria-haspopup","menu"),d.setAttribute("aria-label",m.exportMenu),d.setAttribute("data-testid","dg-export-menu"),d.title=m.exportMenu,d.appendChild(ml());let s=null;d.addEventListener("click",()=>{if(s)return;let r=d.getBoundingClientRect();Ee({left:r.right-190,top:r.bottom+2},u=>{u.setAttribute("role","menu"),u.setAttribute("aria-label",m.exportMenu);let f=[{kind:"csv",label:m.exportCsv,testId:"dg-export-csv",on:true},{kind:"excel",label:m.exportExcel,testId:"dg-export-excel",on:l},{kind:"excel-selected",label:m.exportExcelSelected,testId:"dg-export-excel-selected",on:l},{kind:"pdf",label:m.exportPdf,testId:"dg-export-pdf",on:a}];for(let b of f){if(!b.on)continue;let y=document.createElement("button");y.type="button",y.className="kanuni-datagrid-menu-item",y.setAttribute("role","menuitem"),y.setAttribute("data-testid",b.testId),y.textContent=b.label,b.kind==="excel-selected"&&i.getSelectedCount()===0&&(y.disabled=true),y.addEventListener("click",()=>{s=b.kind,d.disabled=true,W(),wn(i,b.kind).then(h=>{s=null,d.disabled=false,h.error&&Zt(h.error);});}),u.appendChild(y);}},"kanuni-datagrid-filter-popup kanuni-datagrid-export-menu");});for(let r of zo??[])ye.append(r);ye.append(e,o),n&&ye.append(n),ye.append(d);for(let r of Vo??[])ye.append(r);let c=p("kanuni-datagrid-toolbar-error","span");c.setAttribute("role","alert"),c.style.display="none",ye.append(c),Zt=r=>{c.textContent=r,c.style.display="";};}function Qn(){if(!Ie.isConnected)return;let e=i.getPage(),t=i.getPageCount();Ie.textContent="";let o=(s,c,r,u)=>{let f=document.createElement("button");return f.type="button",f.textContent=s,f.setAttribute("aria-label",c),f.disabled=r,f.addEventListener("click",u),f},n=p("kanuni-datagrid-pager-buttons"),l=e<=0,a=e>=t-1;n.append(o("\xAB",m.pagerFirst??"First",l,()=>i.setPage(0)),o("\u2039",m.pagerPrevious??"Previous",l,()=>i.setPage(e-1)));let d=p("kanuni-datagrid-pager-current","span");d.textContent=`${e+1} / ${t}`,n.append(d,o("\u203A",m.pagerNext??"Next",a,()=>i.setPage(e+1)),o("\xBB",m.pagerLast??"Last",a,()=>i.setPage(t-1))),Ie.appendChild(n);}function en(){if(!oe)return;let e=i.getColumnLayout(),t=i.getSummaries(),o=new Map(i.getSummaryDefs().map(l=>[l.columnId,l]));if($.textContent="",$.style.width=`${e.totalWidth+J}px`,J>0){let l=p("kanuni-datagrid-footer-cell kanuni-datagrid-footer-cell--pinned");l.style.width=`${J}px`,l.style.insetInlineStart="0px",$.appendChild(l);}let n=false;for(let l of Z){if(!l.pinned&&!n){if(_>0){let c=p("kanuni-datagrid-spacer");c.style.width=`${_}px`,$.appendChild(c);}n=true;}let a=o.get(l.id),d=l.def.dataType==="number",s=p(`kanuni-datagrid-footer-cell${l.pinned?" kanuni-datagrid-footer-cell--pinned":""}${d?" kanuni-datagrid-footer-cell--number":""}${a?" kanuni-datagrid-footer-cell--active":""}`);if(s.setAttribute("role","gridcell"),s.setAttribute("data-column-id",l.id),s.setAttribute("data-summary-type",a?.type??""),s.style.width=`${l.width}px`,l.pinned==="left"&&(s.style.insetInlineStart=`${l.inset}px`),l.pinned==="right"&&(s.style.insetInlineEnd=`${l.inset}px`),a){s.title=`${summaryLabel(a,_t)} \u2014 ${l.def.headerName??l.id}`;let c=p("kanuni-datagrid-footer-value","span");c.textContent=formatSummaryValue(a,t[summaryKey(a.columnId,a.type)],l.def),s.appendChild(c);}else {let c=p("kanuni-datagrid-footer-hint","span");c.textContent=ie?"\xB7":"",s.appendChild(c);}$.appendChild(s);}}function tn(){let e=(t,o,n)=>{t.textContent="",o.forEach((l,a)=>{let d=qn("data");Xn(d,{kind:"data",key:`__pinned-${n}-${a}`,sourceIndex:-1,data:l},a),d.root.classList.remove("kanuni-datagrid-row--odd"),d.root.removeAttribute("aria-rowindex"),d.rowNumberCell&&(d.rowNumberCell.textContent=""),t.appendChild(d.root);});};Le.length>0&&e(Oe,Le,"top"),Ae.length>0&&e(Nn,Ae,"bottom");}let $e=null,nn=null;function W(){nn?.(),nn=null,$e?.remove(),$e=null;}function Jn(e,t){let n=e.getBoundingClientRect();n.width===0&&n.height===0||(e.style.left=`${Math.max(8,Math.min(t.left,window.innerWidth-n.width-8))}px`,e.style.top=`${Math.max(8,Math.min(t.top,window.innerHeight-n.height-8))}px`);}function Ee(e,t,o="kanuni-datagrid-filter-popup"){W(),$e=p(`${Cn(g)} kanuni-datagrid-portal`);let n=p(o);n.style.position="fixed",n.style.left=`${e.left}px`,n.style.top=`${e.top}px`,n.style.zIndex="1000",t(n),$e.appendChild(n),document.body.appendChild($e),Jn(n,e);let l=$e,a=s=>{l.contains(s.target)||W();},d=s=>{s.key==="Escape"&&W();};document.addEventListener("pointerdown",a,true),document.addEventListener("keydown",d,true),nn=()=>{document.removeEventListener("pointerdown",a,true),document.removeEventListener("keydown",d,true);};}let Re=25,Zn=8,eo=new Map,to=0;function gr(e,t){let o=t.getBoundingClientRect(),n=++to;Ee({left:o.left,top:o.bottom+2},l=>{let a=[],d=true,s=new Set,c=false,r=0,u="",f=[],b=null,y="",h=[],E=document.createElement("input");E.type="search",E.className="kanuni-datagrid-filter-search",E.placeholder=m.search,E.setAttribute("data-testid","dg-filter-search");let M=p("kanuni-datagrid-filter-actions"),G=document.createElement("button");G.type="button",G.textContent=m.filterSelectAll,G.addEventListener("click",()=>{c=true,s=new Set(a.map(x=>x.label)),ee();});let V=document.createElement("button");V.type="button",V.textContent=m.clear,V.addEventListener("click",()=>{c=true,s=new Set,ee();}),M.append(G,V);let L=p("kanuni-datagrid-filter-list");L.setAttribute("role","listbox"),L.setAttribute("aria-multiselectable","true");let fe=document.createElement("div");fe.style.position="relative";let K=document.createElement("div");fe.appendChild(K),L.appendChild(fe);let Tt=()=>{let x=foldText(u.trim());if(!x){f=a;return}b||(b=a.map(A=>foldText(A.label))),f=y!==""&&x.includes(y)?h.filter(A=>foldText(A.label).includes(x)):a.filter((A,N)=>b[N].includes(x)),y=x,h=f;},ee=()=>{if(L.setAttribute("aria-busy",String(d)),L.setAttribute("aria-setsize",String(f.length)),d){fe.style.height="",K.textContent="";let U=p("kanuni-datagrid-filter-empty");U.textContent=m.filterLoading,K.appendChild(U);return}if(f.length===0){fe.style.height="",K.style.transform="",K.textContent="";let U=p("kanuni-datagrid-filter-empty");U.textContent=m.filterNoMatch,K.appendChild(U);return}let x=L.clientHeight||240,A=Math.max(0,Math.floor(L.scrollTop/Re)-Zn),N=Math.ceil(x/Re)+Zn*2,X=Math.min(A,Math.max(0,f.length-1)),Gr=Math.min(f.length,X+N);fe.style.height=`${f.length*Re}px`,K.style.transform=`translateY(${X*Re}px)`,K.textContent="";for(let U=X;U<Gr;U++){let Ke=f[U],te=p("kanuni-datagrid-filter-item");te.setAttribute("role","option"),te.setAttribute("aria-selected",String(s.has(Ke.label))),te.tabIndex=0,te.setAttribute("data-value",Ke.label),te.setAttribute("data-index",String(U)),U===r&&te.classList.add("kanuni-datagrid-filter-item--active");let Ye=document.createElement("input");Ye.type="checkbox",Ye.readOnly=true,Ye.checked=s.has(Ke.label),Ye.tabIndex=-1;let So=document.createElement("span");So.textContent=Ke.label===""?m.filterBlank:Ke.label,te.append(Ye,So),te.addEventListener("click",()=>Eo(Ke.label)),te.addEventListener("focus",()=>{r=U;}),K.appendChild(te);}},Eo=x=>{c=true,s.has(x)?s.delete(x):s.add(x);for(let A of K.querySelectorAll(".kanuni-datagrid-filter-item")){if(A.getAttribute("data-value")!==x)continue;A.setAttribute("aria-selected",String(s.has(x)));let N=A.querySelector("input");N&&(N.checked=s.has(x));}};L.addEventListener("scroll",()=>{eo.set(e,L.scrollTop),ee();}),E.addEventListener("input",()=>{u=E.value,r=0,Tt(),ee();});let mn=x=>{if(f.length===0)return;r=Math.max(0,Math.min(f.length-1,x));let A=r*Re,N=L.clientHeight||240;A<L.scrollTop?L.scrollTop=A:A+Re>L.scrollTop+N&&(L.scrollTop=A+Re-N),ee(),l.querySelector(`.kanuni-datagrid-filter-item[data-index="${r}"]`)?.focus();},Ro=()=>{if(d)return;let x;if(s.size===a.length)x=null;else {let A=s.has(""),N=a.filter(X=>X.label!==""&&s.has(X.label));N.length===0?x=A?{columnId:e,operator:"isnull"}:null:A?x={logic:"or",nodes:[{columnId:e,operator:"in",value:N.map(X=>X.value)},{columnId:e,operator:"isnull"}]}:x={columnId:e,operator:"in",value:N.map(X=>X.value)};}i.setColumnFilter(e,x,FILTER_PART_SET),W();};l.tabIndex=-1,l.addEventListener("keydown",x=>{let A=x.target===E;if(x.key==="Backspace"&&!A){x.preventDefault(),E.focus(),u=u.slice(0,-1),E.value=u,r=0,Tt(),ee();return}if(x.key==="ArrowDown"){x.preventDefault(),mn(A?0:r+1);return}if(x.key==="ArrowUp"){x.preventDefault(),mn(A?f.length-1:r-1);return}if(!A&&(x.key==="Home"||x.key==="End")){x.preventDefault(),mn(x.key==="Home"?0:f.length-1);return}if(x.key===" "&&!A){x.preventDefault();let N=f[r];N&&Eo(N.label);return}if(x.key==="Enter"){x.preventDefault(),Ro();return}!A&&x.key.length===1&&x.key!==" "&&!x.ctrlKey&&!x.metaKey&&!x.altKey&&(x.preventDefault(),E.focus(),u+=x.key,E.value=u,r=0,Tt(),ee());});let To=p("kanuni-datagrid-filter-footer"),St=document.createElement("button");St.type="button",St.textContent=m.cancel,St.addEventListener("click",()=>W());let ge=document.createElement("button");ge.type="button",ge.className="kanuni-datagrid-filter-primary",ge.setAttribute("data-testid","dg-filter-apply"),ge.textContent=m.apply,ge.disabled=true,ge.addEventListener("click",Ro),To.append(St,ge),l.append(E,M,L,To),ee(),queueMicrotask(()=>{E.isConnected&&E.focus();}),i.getDistinctValueSetAsync(e).then(x=>{if(to!==n||!l.isConnected)return;a=x.entries,b=null,y="",d=false,ge.disabled=false;let A=selectedLabelsFromFilter(i.getColumnFilter(e,FILTER_PART_SET)??i.getColumnFilter(e,FILTER_PART_DEFAULT),a);A?(c=true,s=new Set(A)):c||(s=new Set(a.map(X=>X.label))),Tt();let N=eo.get(e);ee(),N&&(L.scrollTop=N,ee());});});}function yt(e={}){let t=i.getClipboardText(e);i.notifyClipboardGesture("copy",t?t.split(`
2
- `).length:0,()=>!t||!navigator.clipboard?.writeText?false:(navigator.clipboard.writeText(t).catch(()=>{}),true));}function mr(e){if(nt===false)return [];let t=nt===true?{}:nt,o=[],n=a=>{e&&o.length===0&&o.push({separator:true,id:"__dg-sep"}),o.push(a);};t.copy!==false&&n({id:"__dg-copy",label:m.menuCopy,shortcut:`${wr}C`,onSelect:()=>yt()}),t.copyWithHeaders!==false&&n({id:"__dg-copy-headers",label:m.menuCopyWithHeaders,onSelect:()=>yt({includeHeaders:true})}),t.copyWithGroupHeaders!==false&&br()&&n({id:"__dg-copy-group-headers",label:m.menuCopyWithGroupHeaders,onSelect:()=>yt({includeGroupHeaders:true})});let l=t.export===false?[]:Array.isArray(t.export)?t.export:["csv","excel","excel-selected","pdf"];if(l.length>0){let a=i.getSelectedCount()===0,d={csv:m.exportCsv,excel:m.exportExcel,"excel-selected":m.exportExcelSelected,pdf:m.exportPdf};n({id:"__dg-export",label:m.menuExport,items:l.map(s=>({id:`__dg-export-${s}`,label:d[s],disabled:s==="excel-selected"&&a,onSelect:()=>{wn(i,s).then(c=>{c.error&&Zt(c.error);});}}))});}return o}function br(){let e=i.getColumnModel();return i.getVisualColumnIds().some(t=>{let o=e.getDef(t)?.band;return typeof o=="string"?o!=="":Array.isArray(o)&&o.length>0})}let wr=/Mac|iPhone|iPad|iPod/.test(navigator.platform??"")?"\u2318":"Ctrl+";function on(e,t,o){let n=null,l=()=>{n?.remove(),n=null;};t.forEach((a,d)=>{if(a.separator){let f=p("kanuni-datagrid-menu-separator");f.setAttribute("role","separator"),e.appendChild(f);return}let s=p("kanuni-datagrid-menu-row"),c=document.createElement("button");if(c.type="button",c.className="kanuni-datagrid-menu-item",c.setAttribute("role","menuitem"),c.setAttribute("data-item-index",String(d)),a.disabled&&(c.disabled=true),a.icon!==void 0){let f=p("kanuni-datagrid-menu-icon","span");typeof a.icon=="string"?f.textContent=a.icon:f.appendChild(a.icon),c.appendChild(f);}let r=p("kanuni-datagrid-menu-label","span");if(r.textContent=a.label??"",c.appendChild(r),a.shortcut){let f=p("kanuni-datagrid-menu-shortcut","span");f.textContent=a.shortcut,c.appendChild(f);}let u=a.items??[];if(u.length>0){let f=p("kanuni-datagrid-menu-caret","span");f.textContent="\u203A",c.appendChild(f),c.setAttribute("aria-haspopup","menu"),c.setAttribute("aria-expanded","false");let b=()=>{l();let y=p("kanuni-datagrid-context-menu kanuni-datagrid-submenu");y.setAttribute("role","menu");let h=c.getBoundingClientRect();y.style.left=`${h.right}px`,y.style.top=`${Math.max(0,h.top-4)}px`;for(let E of u){if(E.separator){let V=p("kanuni-datagrid-menu-separator");V.setAttribute("role","separator"),y.appendChild(V);continue}let M=document.createElement("button");M.type="button",M.className="kanuni-datagrid-menu-item",M.setAttribute("role","menuitem"),E.disabled&&(M.disabled=true);let G=p("kanuni-datagrid-menu-label","span");G.textContent=E.label??"",M.appendChild(G),M.addEventListener("click",()=>{E.onSelect?.(o),W();}),y.appendChild(M);}e.parentElement?.appendChild(y),Jn(y,{left:h.right,top:Math.max(0,h.top-4)}),n=y,c.setAttribute("aria-expanded","true");};c.addEventListener("mouseenter",b),c.addEventListener("click",b);}else c.addEventListener("mouseenter",l),c.addEventListener("click",()=>{a.onSelect?.(o),W();});s.appendChild(c),e.appendChild(s);});}let no=e=>{let o=e.target.closest(".kanuni-datagrid-row");if(!o||o.classList.contains("kanuni-datagrid-group-row"))return;let n=ce(e);if(n?.columnId&&i.notifyCell("cellContextMenu",n.node,n.rowIndex,n.columnId),!ot&&!nt||!n||n.node.kind!=="data")return;e.preventDefault(),i.isRowSelected(n.node.key)||i.handleRowClick(n.node.key,{}),n.columnId&&i.focusCell(n.node.key,n.columnId);let l={row:n.node.data,node:n.node,rowIndex:n.rowIndex,columnId:n.columnId,selectedKeys:i.getSelectedKeys()},a=(typeof ot=="function"?ot(l):ot)??[],d=[...a,...hr(l,a.length>0)],s=mr(d.length>0);d.length===0&&s.length===0||Ee({left:e.clientX,top:e.clientY},c=>{c.setAttribute("role","menu"),on(c,[...d,...s],l);},"kanuni-datagrid-context-menu");};function hr(e,t){if(!we?.onChange||we.menu===false)return [];let o=e.columnId;if(!o)return [];let n=e.node.key,l=jt(n,o,e.row),a=[];return t&&a.push({separator:true,id:"__note-sep"}),a.push({id:"__note-edit",label:l?m.editNote:m.addNote,onSelect:()=>yr(n,o,e.row,l??"")}),l&&a.push({id:"__note-delete",label:m.deleteNote,onSelect:()=>we.onChange?.({rowKey:n,columnId:o,row:e.row,text:null})}),a}function yr(e,t,o,n){let a=(S.querySelector(`[data-row-key="${CSS.escape(String(e))}"] [data-column-id="${CSS.escape(t)}"]`)??S).getBoundingClientRect();queueMicrotask(()=>{Ee({left:a.left,top:a.bottom+2},d=>{d.setAttribute("aria-label",m.noteEditorAria);let s=document.createElement("textarea");s.className="kanuni-datagrid-note-input",s.rows=4,s.value=n,s.setAttribute("aria-label",m.noteEditorAria),s.placeholder=m.notePlaceholder,s.setAttribute("data-testid","dg-note-input");let c=()=>{let b=s.value.trim();W(),we?.onChange?.({rowKey:e,columnId:t,row:o,text:b===""?null:b});};s.addEventListener("keydown",b=>{b.key==="Enter"&&(b.ctrlKey||b.metaKey)&&(b.preventDefault(),c()),b.key==="Escape"&&(b.preventDefault(),W());});let r=p("kanuni-datagrid-note-actions"),u=document.createElement("button");u.type="button",u.className="kanuni-datagrid-note-cancel",u.textContent=m.cancel,u.addEventListener("click",()=>W());let f=document.createElement("button");f.type="button",f.className="kanuni-datagrid-note-save",f.setAttribute("data-testid","dg-note-save"),f.textContent=m.save,f.addEventListener("click",c),r.append(u,f),d.append(s,r),queueMicrotask(()=>{s.focus(),s.select();});},"kanuni-datagrid-filter-popup kanuni-datagrid-note-editor");});}function Cr(e){xe!==e&&(xe=e,e?(S.insertBefore(B,T),an()):B.remove());}function xr(e){if(oe!==e){if(oe=e,e){if(he){let t=Le.length>0?Oe:F;O.insertBefore($,t);}else O.append($);en();}else $.remove();Oe.style.setProperty("--dg-pinned-gap",String(Wt+(oe&&he?1:0)));}}function rn(e){let t=hn(S,e);t!==null&&i.setColumnWidth(e,t);}function kr(e,t){let o=i.getColumnModel().getDef(e),n={columnId:e,headerName:o?.headerName??e},l=bn(n,{controller:i,t:m,groupPanelVisible:xe,footerVisible:oe,onToggleGroupPanel:()=>Cr(!xe),onToggleFooter:()=>xr(!oe),onOpenFieldChooser:()=>oo(t),onBestFit:rn,onBestFitAll:()=>{for(let d of i.getColumnStates())d.visible&&rn(d.id);},maxGroupLevels:de?Number.POSITIVE_INFINITY:1}),a=typeof Pt=="function"?Pt(n,l):l;a.length!==0&&Ee(t,d=>{d.setAttribute("role","menu"),on(d,a,n);},"kanuni-datagrid-context-menu");}function vr(e,t){let o=i.getColumnModel().getDef(e),n=i.getColumnSummary(e),l={columnId:e,headerName:o?.headerName??o?.field??e},a=[{id:"none",label:m.noTotal,disabled:n===null,onSelect:()=>i.setColumnSummary(e,null)},{id:"sep",separator:true},...allowedSummaryTypes(o?.dataType).map(d=>({id:d,label:_t[d],disabled:n?.type===d,onSelect:()=>i.setColumnSummary(e,d)}))];Ee(t,d=>{d.setAttribute("role","menu"),on(d,a,l);},"kanuni-datagrid-context-menu");}function oo(e){Ee(e,t=>{let o=p("kanuni-datagrid-filter-list");for(let n of i.getColumnStates()){let l=document.createElement("label");l.className="kanuni-datagrid-filter-item";let a=document.createElement("input");a.type="checkbox",a.checked=n.visible,a.addEventListener("change",()=>{i.setColumnVisible(n.id,a.checked);});let d=document.createElement("span"),s=i.getColumnModel().getDef(n.id);d.textContent=s?.headerName??n.id,l.append(a,d),o.appendChild(l);}t.appendChild(o);},"kanuni-datagrid-filter-popup kanuni-datagrid-column-chooser");}let Te=null,ln=null,Ct=e=>{B.classList.toggle("kanuni-datagrid-group-panel--over",e);};function ro(e,t,o){let n=i.getGroupLevels();if(e===t)return;let l=n.filter(s=>s!==e),a=l.indexOf(t);if(a<0)return;let d=o==="before"?a:a+1;ln=e,i.groupBy([...l.slice(0,d),e,...l.slice(d)]);}function lo(e,t){let o=i.getGroupLevels(),n=o.indexOf(e),l=n+t;n<0||l<0||l>=o.length||ro(e,o[l],t===-1?"before":"after");}function io(e,t){if(!e)return;let o=i.getGroupLevels();if(o.includes(e))return;let n=de?Number.POSITIVE_INFINITY:1;if(o.length>=n){i.groupBy([...o.slice(0,n-1),e]);return}let l=t??o.length;i.groupBy([...o.slice(0,l),e,...o.slice(l)]);}function an(){if(!xe)return;B.textContent="";let e=i.getGroupLevels();if(e.length===0){let c=p("kanuni-datagrid-group-panel-hint","span");c.textContent=m.groupPanelHint??"Drag a column header here to group by it",B.appendChild(c);return}let t=c=>i.getColumnModel().getDef(c)?.headerName??c,o=p("kanuni-datagrid-group-levels"),n=(c,r)=>c<r.top+r.height/2?"before":"after",l=(c,r)=>{for(let u of B.querySelectorAll(".kanuni-datagrid-group-level"))u.classList.remove("kanuni-datagrid-group-level--drop-before","kanuni-datagrid-group-level--drop-after");c&&r&&c.classList.add(`kanuni-datagrid-group-level--drop-${r}`);};e.forEach((c,r)=>{let u=p("kanuni-datagrid-group-level");u.style.setProperty("--dg-group-level",String(r)),u.setAttribute("data-group-level",String(r));let f=p("kanuni-datagrid-group-chip");if(f.setAttribute("role","button"),f.tabIndex=0,e.length>1&&(f.draggable=true),f.setAttribute("aria-label",`${fillText(m.groupLevelAria,{n:r+1})}: ${t(c)}`),f.addEventListener("dragstart",h=>{Te=c,h.dataTransfer&&(h.dataTransfer.effectAllowed="move",h.dataTransfer.setData("text/x-kanuni-column",c));}),f.addEventListener("dragend",()=>{Te=null,l(null,null);}),f.addEventListener("keydown",h=>{let E=h.ctrlKey||h.metaKey;E&&(h.key==="ArrowUp"||h.key==="ArrowLeft")?(h.preventDefault(),lo(c,-1)):E&&(h.key==="ArrowDown"||h.key==="ArrowRight")?(h.preventDefault(),lo(c,1)):(h.key==="Delete"||h.key==="Backspace")&&(h.preventDefault(),i.groupBy(e.filter(M=>M!==c)));}),u.addEventListener("dragover",h=>{!Te&&!(h.dataTransfer?.types.includes("text/x-kanuni-column")??false)||(h.preventDefault(),h.stopPropagation(),l(u,n(h.clientY,u.getBoundingClientRect())));}),u.addEventListener("drop",h=>{h.preventDefault(),h.stopPropagation();let E=n(h.clientY,u.getBoundingClientRect());l(null,null),Ct(false);let M=Te;if(Te=null,M){ro(M,c,E);return}let G=h.dataTransfer?.getData("text/x-kanuni-column");G&&io(G,E==="before"?r:r+1);}),e.length>1){let h=p("kanuni-datagrid-group-chip-level","span");h.textContent=String(r+1),f.appendChild(h);}let b=document.createElement("span");b.textContent=t(c);let y=document.createElement("button");y.type="button",y.setAttribute("aria-label",fillText(m.groupRemoveAria,{column:t(c)})),y.textContent="\xD7",y.addEventListener("click",()=>{i.groupBy(e.filter(h=>h!==c));}),y.draggable=false,f.append(b,y),u.appendChild(f),o.appendChild(u),ln===c&&(ln=null,queueMicrotask(()=>f.focus()));}),B.appendChild(o);let a=p("kanuni-datagrid-group-panel-actions"),d=document.createElement("button");d.type="button",d.textContent="Expand all",d.addEventListener("click",()=>i.expandAllGroups());let s=document.createElement("button");s.type="button",s.textContent="Collapse all",s.addEventListener("click",()=>i.collapseAllGroups()),a.append(d,s),B.appendChild(a);}if(xe){let e=t=>t.dataTransfer?.types.includes("text/x-kanuni-column")??false;B.addEventListener("dragover",t=>{e(t)&&(t.preventDefault(),Ct(true));}),B.addEventListener("dragleave",t=>{let o=t.relatedTarget;o&&B.contains(o)||Ct(false);}),B.addEventListener("drop",t=>{Ct(false);let o=t.dataTransfer?.getData("text/x-kanuni-column");if(o){if(t.preventDefault(),Te){Te=null;return}io(o);}});}let ao="";function so(){if(!En)return;let e=[fillText(m.announceRows,{n:i.getVisibleCount()})],t=i.getSort();if(t.length>0){let l=t.map(a=>{let d=i.getColumnModel().getDef(a.columnId),s=d?.headerName??d?.field??a.columnId,c=a.direction==="desc"?m.announceDescending:m.announceAscending;return `${s} ${c}`}).join(", ");e.push(fillText(m.announceSortedBy,{columns:l}));}let o=i.getSelectedCount();o>0&&e.push(fillText(m.announceSelected,{n:o}));let n=e.join(", ");n!==ao&&(ao=n,Be.textContent=n);}function uo(){if(!Nt)return;Ce.textContent="";let e=describeFilter(i.getEffectiveFilter(),i.getColumnModel(),{...Rn,labels:{...filterLabels(m),...Rn?.labels}});if(!e&&Nt!=="always"){Ce.style.display="none";return}Ce.style.display="";let t=i.isFilterEnabled();Ce.className=`kanuni-datagrid-filter-panel${t?"":" kanuni-datagrid-filter-panel--suspended"}`;let o=document.createElement("button");o.type="button",o.className="kanuni-datagrid-filter-panel-clear",o.title=m.filterRemove,o.setAttribute("aria-label",m.filterRemove),o.setAttribute("data-testid","dg-filter-panel-clear"),o.disabled=e===null,o.textContent="\xD7",o.addEventListener("click",()=>{i.setFilter(null),i.clearColumnFilters(),i.setFilterEnabled(true);});let n=document.createElement("input");n.type="checkbox",n.className="kanuni-datagrid-filter-panel-toggle",n.checked=t,n.disabled=e===null,n.title=m.filterToggle,n.setAttribute("aria-label",m.filterToggle),n.setAttribute("data-testid","dg-filter-panel-toggle"),n.addEventListener("change",()=>i.setFilterEnabled(n.checked));let l=p("kanuni-datagrid-filter-panel-text","span");if(l.setAttribute("data-testid","dg-filter-panel-text"),l.textContent=e??m.filterNone,e&&(l.title=e),Ce.append(o,n,l),xn){let a=document.createElement("button");a.type="button",a.className="kanuni-datagrid-filter-panel-builder",a.title=m.filterEditBuilder,a.setAttribute("aria-label",m.filterEditBuilder),a.setAttribute("data-testid","dg-filter-panel-builder"),a.textContent="\u25BE",a.addEventListener("click",xn),Ce.appendChild(a);}}let dn=new Set,Er=i.events.on("cellsFlashed",({rowKeys:e,columnIds:t,duration:o})=>{let n=e.length?e.map(s=>`[data-row-key="${CSS.escape(String(s))}"]`).join(","):".kanuni-datagrid-row",l=t.length?t.map(s=>`[data-column-id="${CSS.escape(s)}"]`).join(","):"[data-column-id]",a=[];D.querySelectorAll(n).forEach(s=>{s.querySelectorAll(l).forEach(c=>a.push(c));});for(let s of a)s.classList.remove("kanuni-datagrid-cell--flash");S.offsetWidth;for(let s of a)s.classList.add("kanuni-datagrid-cell--flash");let d=setTimeout(()=>{for(let s of a)s.classList.remove("kanuni-datagrid-cell--flash");dn.delete(d);},o);dn.add(d);});function ce(e){let t=e.target,o=t.closest(".kanuni-datagrid-row");if(!o||!D.contains(o))return null;let n=o.getAttribute("data-row-key");if(n===null)return null;let l=i.getRows(),a=l.findIndex(s=>String(s.key)===n);if(a===-1)return null;let d=t.closest(".kanuni-datagrid-cell")?.getAttribute("data-column-id")??null;return {node:l[a],rowIndex:a,columnId:d}}let co=e=>{let t=ce(e);t&&(Po?.(t.node),i.notifyRow("rowClicked",t.node,t.rowIndex),t.columnId&&i.notifyCell("cellClicked",t.node,t.rowIndex,t.columnId));},po=e=>{let t=ce(e);if(t){if(Sn){let o=gn(t);o&&Sn(o);}Ht?.(t.node),i.notifyRow("rowDoubleClicked",t.node,t.rowIndex),t.columnId&&i.notifyCell("cellDoubleClicked",t.node,t.rowIndex,t.columnId);}};D.addEventListener("click",co),D.addEventListener("dblclick",po);function Rr(e){let t=0,o=Q.querySelector(`[data-column-id="${CSS.escape(e)}"]`);o&&(t=o.scrollWidth),D.querySelectorAll(`[data-column-id="${CSS.escape(e)}"]`).forEach(n=>{n.scrollWidth>t&&(t=n.scrollWidth);}),t>0&&i.setColumnWidth(e,t+12,true);}function Tr(){if(H)for(let e of Q.querySelectorAll(".kanuni-datagrid-filter-button")){let t=e.parentElement?.getAttribute("data-column-id");t&&e.classList.toggle("kanuni-datagrid-filter-button--active",i.getColumnFilter(t)!==null);}}let sn=false,fo=false,Pe=null;function xt(){Pe!==null&&(clearTimeout(Pe),Pe=null);}function kt(e){Fe.style.display=e?"":"none";}function vt(){let e=i.getOverlay();if(at.style.display=e==="noRows"?"":"none",Bt===false){xt(),kt(false);return}if(!(e==="loading"&&(sn||!fo))){xt(),kt(false);return}if(sn||Dn<=0){xt(),kt(true);return}Pe!==null||Fe.style.display===""||(Pe=setTimeout(()=>{Pe=null,q||kt(true);},Dn));}let go=false,un=false,cn=false,pn=false,q=false;function Sr(){if(un=false,!q){if(cn)cn=false,pn&&(pn=false,ve++),Ut(),Yt(),Jt(),tn();else {let e=_;Ut(),_!==e&&(ve++,Yt(),Jt(),tn());}Qt(),Vn(),en(),Qn(),Tr(),an(),uo(),so(),vt();}}function fn(e){q||(e&&(cn=true),!un&&(un=true,queueMicrotask(Sr)));}let Lr=[...vn?[i.events.on("focusedRowChanged",e=>vn({rowKey:e.rowKey,row:e.row}))]:[],...sl.map(e=>i.events.on(e,()=>fn(true))),...ul.map(e=>i.events.on(e,()=>{pn=true;})),...cl.map(e=>i.events.on(e,()=>fn(false))),i.events.on("overlayChanged",e=>{sn=e.manual===true&&e.overlay==="loading",q||vt();}),i.events.on("busyChanged",e=>{fo=e.background===true,q||vt();}),i.events.on("paginationChanged",()=>{q||fn(false);}),i.events.on("scrollRequested",e=>{if(q)return;e.scrollTop!==void 0&&(T.scrollTop=e.scrollTop),e.scrollLeft!==void 0&&(T.scrollLeft=e.scrollLeft),i.setScroll(T.scrollTop,Math.abs(T.scrollLeft));let t=e.scrollTop;t===void 0||Math.abs(T.scrollTop-t)<=1||setTimeout(()=>{q||Math.abs(T.scrollTop-t)<=1||(T.scrollTop=t,i.setScroll(T.scrollTop,Math.abs(T.scrollLeft)));},0);}),...Gt==="fitGrid"?[i.events.on("gridSizeChanged",()=>i.sizeColumnsToFit())]:[],...Gt==="fitCells"?[i.events.on("firstDataRendered",()=>{q||go||(go=true,queueMicrotask(()=>{if(!q)for(let e of i.getColumnStates())e.visible&&rn(e.id);}));})]:[]];Gt==="fitGrid"&&i.sizeColumnsToFit();function gn(e){if(!e.columnId||e.node.kind!=="data")return null;let t=Z.find(o=>o.id===e.columnId);return t?{node:e.node,columnId:e.columnId,rowIndex:e.rowIndex,columnIndex:t.visualIndex,value:i.getColumnModel().getCellValue(e.node.data,t.id)}:null}let mo=e=>{let t=e.target;if(Tn){let s=ce(e),c=s?gn(s):null;c&&Tn(c,e);}let o=t.closest(".kanuni-datagrid-row");if(!o||o.classList.contains("kanuni-datagrid-group-row"))return;let n=o.getAttribute("data-row-key");if(n===null)return;let l=i.getRows().find(s=>String(s.key)===n);if(!l||l.kind!=="data")return;i.handleRowClick(l.key,{ctrlKey:e.ctrlKey||Zo&&!e.shiftKey,metaKey:e.metaKey,shiftKey:e.shiftKey});let a=t.closest(".kanuni-datagrid-cell"),d=a?Z.find(s=>a.id.endsWith(`-${s.id}`))?.id:void 0;d&&i.focusCell(l.key,d);},bo=e=>{if(!lt)return;let o=e.target.closest(".kanuni-datagrid-cell");if(!o||!D.contains(o)||e.relatedTarget?.closest?.(".kanuni-datagrid-cell")===o)return;let l=ce(e),a=l?gn(l):null;a&&lt(a,e);};D.addEventListener("mousedown",mo),D.addEventListener("contextmenu",no),lt&&D.addEventListener("mouseover",bo),ut&&(F.addEventListener("dragstart",er),F.addEventListener("dragover",tr),F.addEventListener("drop",nr),F.addEventListener("dragend",or),F.addEventListener("dragleave",rr)),S.tabIndex=0;let wo=e=>{let t=e.target;if(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)return;let o=resolveGridCommand({key:e.key,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,altKey:e.altKey});if(!o)return;if(o.type==="copy"){yt();return}if(o.type==="activate"){if(Ht){let a=i.getFocus(),d=a?i.getRows().find(s=>s.key===a.rowKey):void 0;d&&Ht(d);}o.preventDefault&&e.preventDefault();return}i.executeCommand(o),o.preventDefault&&e.preventDefault();let n=i.getFocusIndices();if(n){let d=i.getColumnLayout().center.findIndex(c=>c.state.id===i.getFocus()?.columnId),s=i.ensureVisible(n.rowIndex,d===-1?void 0:d);s&&(s.scrollTop!==void 0&&(T.scrollTop=s.scrollTop),s.scrollLeft!==void 0&&(T.scrollLeft=s.scrollLeft),i.setScroll(T.scrollTop,Math.abs(T.scrollLeft)));}let l=i.getFocus();S.setAttribute("aria-activedescendant",l?`${g.gridId}-cell-${String(l.rowKey)}-${l.columnId}`:"");};S.addEventListener("keydown",wo);let Ar=An?attachStateStoring(i,An):null,Mr=typeof be=="object"?be.delay??400:400,Dr=be!==false&&!(typeof be=="object"&&be.enabled===false),Nr=typeof be=="object"?be.showOnTruncation!==false:true,Xe=null,Et=null;function Ue(){Et&&clearTimeout(Et),Et=null,Xe?.remove(),Xe=null;}let Ir=e=>e.scrollWidth>e.clientWidth+1||e.scrollHeight>e.clientHeight+1;function Hr(e){let o=e.closest(".kanuni-datagrid-row")?.getAttribute("data-row-key"),n=Z.find(s=>e.id.endsWith(`-${s.id}`));if(!o||!n)return null;let l=i.getRows().find(s=>String(s.key)===o);if(!l||l.kind!=="data")return null;let a=n.def,d=jt(l.key,n.id,l.data);if(d)return d;if(typeof a.tooltip=="function")return a.tooltip({value:i.getColumnModel().getCellValue(l.data,n.id),row:l.data,node:l,column:a})??null;if(typeof a.tooltip=="string")return a.tooltip;if(a.tooltipField){let s=l.data[a.tooltipField];return s==null?null:String(s)}return Nr&&Ir(e)?e.textContent??null:null}let ho=e=>{if(!Dr)return;Ue();let t=e.target.closest(".kanuni-datagrid-cell");!t||!D.contains(t)||(Et=setTimeout(()=>{let o=Hr(t);if(!o)return;let n=t.getBoundingClientRect();Xe=p(`${Cn(g)} kanuni-datagrid-portal`);let l=p("kanuni-datagrid-tooltip");l.setAttribute("role","tooltip"),l.textContent=o,l.style.position="fixed",l.style.left=`${n.left}px`,l.style.top=`${n.bottom+4}px`,l.style.zIndex="1001",Xe.appendChild(l),document.body.appendChild(Xe);},Mr));},yo=()=>Ue();S.addEventListener("pointerover",ho),S.addEventListener("pointerout",yo),T.addEventListener("scroll",Ue,{passive:true});let Co=()=>{if(i.setScroll(T.scrollTop,Math.abs(T.scrollLeft)),pe)for(let e of xo())e.scroller.scrollLeft!==T.scrollLeft&&(e.scroller.scrollLeft=T.scrollLeft);};T.addEventListener("scroll",Co,{passive:true});let pe=null,xo=()=>{if(!j||!pe)return [];let e=Qe.get(j);return e?[...e].filter(t=>t!==pe):[]},ko=null;if(j){pe={controller:i,scroller:T};let e=Qe.get(j)??new Set;e.add(pe),Qe.set(j,e),ko=i.events.on("columnStateChanged",()=>{if(yn.has(j))return;let t=xo();if(t.length===0)return;let o=i.getColumnStates();yn.add(j);try{for(let n of t)n.controller.applyColumnStates(o);}finally{yn.delete(j);}});}let vo=()=>{i.setViewportSize(T.clientWidth,T.clientHeight),T.style.setProperty("--dg-viewport-width",`${T.clientWidth}px`);let e=F.getBoundingClientRect(),t=O.getBoundingClientRect();i.setChromeOffsets(e.top-t.top,t.bottom-e.bottom),calibrateMaxScrollOffset(T,i);};vo();let Rt=null;return typeof ResizeObserver<"u"&&(Rt=new ResizeObserver(vo),Rt.observe(T),Rt.observe(O)),Ut(),Yt(),Jt(),fr(),tn(),Qt(),en(),Qn(),an(),uo(),so(),vt(),We?.always&&qt(true),{controller:i,element:S,setData:e=>i.setData(e),setColumns:e=>i.setColumns(e),destroy:()=>{if(!q){if(q=true,Lr.forEach(e=>e()),Rt?.disconnect(),Wn?.(),Ve&&(Ve=false,Se--,Se<=0&&(Se=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),ko?.(),j&&pe){let e=Qe.get(j);e?.delete(pe),e&&e.size===0&&Qe.delete(j),pe=null;}T.removeEventListener("scroll",Co),D.removeEventListener("mousedown",mo),D.removeEventListener("contextmenu",no),lt&&D.removeEventListener("mouseover",bo),D.removeEventListener("click",co),D.removeEventListener("dblclick",po),Er(),xt();for(let e of dn)clearTimeout(e);S.removeEventListener("keydown",wo),S.removeEventListener("pointerover",ho),S.removeEventListener("pointerout",yo),T.removeEventListener("scroll",Ue),Ue(),Ar?.(),W(),i.dispose(),S.remove();}}}}export{At as CHECKBOX_COLUMN_WIDTH,Ze as DETAIL_COLUMN_WIDTH,Go as PRINT_MAX_ROWS,Mt as ROW_DRAG_MIME,Je as ROW_NUMBER_COLUMN_WIDTH,bn as buildHeaderMenu,yl as createGrid,hn as measureBestFitWidth};
1
+ import {getGridDictionary,summaryTypeLabels,datePeriodLabels,inferColumns,presetRowHeight,DataGridController,createDebouncedCommit,attachStateStoring,normalizeSearch,summaryLabel,formatSummaryValue,summaryKey,selectedLabelsFromFilter,FILTER_PART_SET,FILTER_PART_DEFAULT,foldText,allowedSummaryTypes,fillText,describeFilter,filterLabels,resolveGridCommand,calibrateMaxScrollOffset,periodSuggestionList,parseFilterInput,FILTER_PART_ROW,bandDepth,computeHeaderBands,bandPath,lookupLabel,downloadBlob,ExportAbortedError,formatDateValue,spanRoleAt}from'@kanunilabs/datagrid-core';export{DENSITY_ROW_HEIGHT,THEME_ROW_HEIGHT,isPackagedTheme,presetRowHeight}from'@kanunilabs/datagrid-core';function yn(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),ae=h.getGroupLevels(),ie=ae.includes(T),at=G?.sortable!==false,de=h.getColumnStates().find(P=>P.id===T)?.pinned??null,Ne=G?.groupable!==false,Ie=[{id:"sort-asc",label:v.sortAsc,disabled:!at||j?.direction==="asc",onSelect:()=>h.setSort([{columnId:T,direction:"asc"}])},{id:"sort-desc",label:v.sortDesc,disabled:!at||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:ie?v.ungroupColumn:v.groupByColumn,disabled:!Ne,onSelect:()=>{ie?h.groupBy(ae.filter(P=>P!==T)):h.groupBy([...ae,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}],He=h.getColumnStates().filter(P=>P.visible&&P.pinned===de).map(P=>P.id),oe=He.indexOf(T),Ge=G?.reorderable!==false&&oe>=0;return Ie.push({id:"sep-4",separator:true},{id:"move-left",label:v.moveLeft,disabled:!Ge||oe<=0,onSelect:()=>h.moveColumn(T,He[oe-1])},{id:"move-right",label:v.moveRight,disabled:!Ge||oe<0||oe>=He.length-1,onSelect:()=>h.moveColumn(T,He[oe+2])},{id:"fixed-position",label:v.fixedPosition,items:[{id:"pin-left",label:v.pinLeft,disabled:de==="left",onSelect:()=>h.setColumnPinned(T,"left")},{id:"pin-right",label:v.pinRight,disabled:de==="right",onSelect:()=>h.setColumnPinned(T,"right")},{id:"pin-sticky",label:v.pinSticky,disabled:de==="sticky",onSelect:()=>h.setColumnPinned(T,"sticky")}]},{id:"unpin",label:v.unpin,disabled:de===null,onSelect:()=>h.setColumnPinned(T,null)}),Ie}async function Cn(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 downloadBlob(h.blob,h.fileName),{completed:!0}}catch(h){return h instanceof ExportAbortedError?{completed:false}:{completed:false,error:h instanceof Error?h.message:String(h)}}}var Po=null;function Wr(){return typeof document>"u"?null:(Po??=document.createElement("canvas"),Po.getContext("2d"))}function $o(C){let m=getComputedStyle(C);return `${m.fontStyle} ${m.fontWeight} ${m.fontSize} ${m.fontFamily}`}function Vr(C){for(let m=C.firstElementChild;m;m=m.nextElementSibling)if(m.tagName!=="MARK")return true;return false}function zr(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 kn(C,m){let h=Wr();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=$o(O),G=h.measureText(O.textContent??"").width+44;}if(T.length>0){h.font=$o(T[0]);let O=[];for(let j=0;j<T.length;j++){if(Vr(T[j])){O.push(T[j]);continue}let ae=T[j].textContent??"";if(ae==="")continue;let ie=h.measureText(ae).width+20;ie>G&&(G=ie);}O.length>0&&(G=Math.max(G,zr(O)));}return G===0?null:Math.round(Math.min(640,Math.max(48,G)))}var ot=60,It=36,rt=28,Ht="application/x-kanuni-row",nt=new Map,Rn=new Set,Fo=5e3,De=0,bl=["columnStateChanged","sortChanged"],wl=["columnStateChanged"],hl=["contentReady","viewportChanged","filterChanged","selectionChanged","focusChanged","summariesChanged","cellsRefreshed"],g=(C,m="div")=>{let h=document.createElement(m);return h.className=C,h},lt="http://www.w3.org/2000/svg";function yl(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 Cl={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:""},Gt=new Set;function kl(C){for(let m of Object.keys(C)){let h=Cl[m];h===void 0||h===""||Gt.has(m)||(Gt.add(m),console.warn(`[datagrid] \`${m}\` is a React-only option \u2014 ${h}.`));}}function xl(){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 vl(){let C=document.createElementNS(lt,"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(lt,"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 El(C){let m=document.createElementNS(lt,"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(lt,"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(lt,"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 Rl(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 Tn(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 Tl(C,m){let{theme:h,palette:R,density:v,dark:T,striped:G=true,rowNumbers:O=false,locale:j="en",footer:ae=false,footerMenu:ie=true,footerPosition:at="bottom",notes:de,pinnedTopRows:Ne=[],pinnedBottomRows:Ie=[],resizable:He=true,reorderable:oe=true,filterRow:Ge=false,headerFilter:P=false,filterIconMode:Bo="hover",filterPanel:Pt=false,onOpenFilterBuilder:Sn,focusedRow:Ln=false,focusedRowKey:$t,onFocusedRowChanged:An,onRowClick:_o,onRowActivate:Kt,autoSizeStrategy:Ot="none",renderRow:it,announcements:Mn=true,filterPanelLabels:Dn,showRowCount:Wo=false,toolbarColumnChooser:Vo=false,cellMenu:dt=true,rowMenu:st,headerMenu:Ft,rowDrag:we,alignedGrids:Q,printLayout:ut,renderCellContent:Bt,getCellClassName:_t,onCellPointerDown:Nn,onCellPointerEnter:ct,onCellDoubleClick:In,renderDetail:Hn,renderEditForm:zo,enterpriseEdition:se=false,stateStoring:Gn,tooltip:he=true,renderOverlay:Wt,filterDebounce:qo,toolbar:Pn=false,highlightSearch:Xo=true,sortable:Uo=true,toolbarItemsAfter:Yo,toolbarItemsBefore:jo,toolbarExcel:Qo=false,toolbarPdf:Jo=false,searchDebounce:Zo=200,...er}=m;kl(m),Wo&&!Gt.has("showRowCount:deprecated")&&(Gt.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=getGridDictionary(j),{emptyText:tr=w.noData,loadingText:nr=w.busy,loadingOverlay:Vt=true,...q}=er,$n=typeof Vt=="number"?Vt:300,zt=summaryTypeLabels(w),Kn=datePeriodLabels(w);if((!q.columns||q.columns.length===0)&&m.autoColumns!==false){let e=Array.isArray(q.dataSource)?q.dataSource:[];q.columns=inferColumns(e,typeof m.autoColumns=="object"?m.autoColumns:{});}q.rowHeight===void 0&&(q.rowHeight=presetRowHeight(h,v,28));let or=se?q:yl(q,!!m.debugMode),ye=se?de:void 0;!se&&de&&m.debugMode&&console.warn("[datagrid] cell notes are an Enterprise feature \u2014 use createEnterpriseGrid from @kanunilabs/datagrid-enterprise to show them.");let l=new DataGridController(or);l.setEnterpriseEdition(se),$t!=null&&l.focusRow($t);let L=g(Tn(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 _e=g("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--top"),On=g("kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--bottom"),re=ae,Ce=at==="top",K=g(`kanuni-datagrid-footer-row kanuni-datagrid-footer-row--${Ce?"top":"bottom"}`);if(K.setAttribute("role","row"),K.setAttribute("aria-label",w.columnTotalsAria),ie){let e=t=>{let n=t.target?.closest(".kanuni-datagrid-footer-cell")?.getAttribute("data-column-id");n&&(t.preventDefault(),Lr(n,{left:t.clientX,top:t.clientY}));};K.addEventListener("click",e),K.addEventListener("contextmenu",e);}let pt=g("kanuni-datagrid-bands-host");pt.style.display="contents";let ke=g("kanuni-datagrid-filter-row");ke.setAttribute("role","row"),F.append(pt,J),Ge&&F.append(ke);let qt=Ge?2:1;K.style.setProperty("--dg-pinned-gap",String(Ce?qt:0)),_e.style.setProperty("--dg-pinned-gap",String(qt+(re&&Ce?1:0))),re&&Ce&&F.append(K),Ne.length>0&&F.append(_e),F.append(B),Ie.length>0&&F.append(On),re&&!Ce&&F.append(K),S.appendChild(F);let xe=g("kanuni-datagrid-toolbar"),Pe=g("kanuni-datagrid-pager");Pe.setAttribute("role","navigation"),Pe.setAttribute("aria-label","Pagination");let ve=g("kanuni-datagrid-filter-panel"),Ee=!!q.grouping?.panel,_=g("kanuni-datagrid-group-panel");Pn&&L.appendChild(xe),Ee&&L.appendChild(_),L.appendChild(S),Pt&&L.appendChild(ve);let Fn=q.pagination;Fn&&Fn.enabled!==false&&L.appendChild(Pe);let We=g("kanuni-datagrid-loading-overlay"),Bn=g("kanuni-datagrid-loading-card"),_n=g("kanuni-datagrid-loading-spinner","span");_n.setAttribute("aria-hidden","true");let Wn=g("kanuni-datagrid-loading-label","span");Wn.textContent=nr,Bn.append(_n,Wn),We.appendChild(Bn),We.style.display="none";let Ve=g("kanuni-datagrid-sr-only","div");Ve.setAttribute("role","status"),Ve.setAttribute("aria-live","polite"),Ve.setAttribute("aria-atomic","true");let gt=g("kanuni-datagrid-empty");gt.textContent=tr,gt.style.display="none",L.append(We,gt),Mn&&L.appendChild(Ve),C.appendChild(L);let ze=q.selection,Vn=l.getGroupDisplay()==="aligned",qe=(ze?.mode??"none")!=="none"&&(ze?.checkboxColumn??false),rr=(ze?.rowClick??(qe?"toggle":"replace"))==="toggle",ft=l.hasMasterDetail()&&!!Hn,Xt=O?ot:0,zn=Xt+(ft?rt:0),ee=(O?ot:0)+(ft?rt:0)+(qe?It:0);l.setLeadWidth(ee);let Xe=!!we?.enabled,Ue=we?.group??null,qn=we?.allowReordering??true,Xn=we?.allowDropInsert??Ue!==null,le=null,mt=null,bt=false,Re=null,ue=null;function $e(e){Re=e;for(let t of D.querySelectorAll(".kanuni-datagrid-row")){let r=t.getAttribute("data-row-key"),n=e!==null&&r===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 Un=(e,t)=>{let r=t.getBoundingClientRect();return e.clientY<r.top+r.height/2?"before":"after"},Yn=e=>e.dataTransfer?.types.includes(Ht)?le!==null?qn:Xn&&Ue!==null:false;function jn(e,t,r){let n=null;try{let o=e.dataTransfer?.getData(Ht);n=o?JSON.parse(o):null;}catch{n=null;}if(n){if(n.gridId===l.gridId){if(!qn)return;if(we?.onReorder){we.onReorder({dragKey:n.rowKey,targetKey:t,position:r,row:l.getRowByKey(n.rowKey)});return}l.moveRow(n.rowKey,t,r);return}!Xn||Ue===null||n.group!==Ue||we?.onAdd?.({row:n.row,rowKey:n.rowKey,otherGridId:n.gridId,targetKey:t,position:r});}}let lr=e=>{let t=ge(e);if(!t||t.node.kind!=="data"||!e.dataTransfer)return;le=t.node.key,mt=t.node.key,bt=false;let r={gridId:l.gridId,group:Ue,rowKey:t.node.key,row:t.node.data};e.dataTransfer.setData(Ht,JSON.stringify(r)),e.dataTransfer.setData("text/plain",String(t.node.key)),e.dataTransfer.effectAllowed="move",l.notifyRowDrag("enter",{rowKey:t.node.key});},ar=e=>{if(!Yn(e))return;e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move");let t=ge(e);if(!t||t.node.kind!=="data")return;if(le===t.node.key){ue=null,$e(null);return}let r=e.target.closest(".kanuni-datagrid-row"),n=Un(e,r),o=Re?.key!==t.node.key||Re.side!==n;ue={key:t.node.key,side:n},$e({key:t.node.key,side:n}),o&&le!==null&&l.notifyRowDrag("move",{rowKey:le,overKey:t.node.key,position:n});},ir=e=>{if(!Yn(e)){$e(null);return}e.preventDefault();let t=ge(e);if(bt=true,t&&t.node.kind==="data"){let r=e.target.closest(".kanuni-datagrid-row"),n=Un(e,r);ue={key:t.node.key,side:n},jn(e,t.node.key,n);}else ue=null,jn(e,null,"after");le=null,$e(null);},dr=()=>{mt!==null&&l.notifyRowDragEnd({rowKey:mt,dropped:bt,overKey:ue?.key??null,position:ue?.side??null}),bt=false,mt=null,le=null,ue=null,$e(null);},sr=e=>{let t=e.relatedTarget;t&&B.contains(t)||le!==null&&(ue=null,$e(null),l.notifyRowDrag("leave",{rowKey:le}));},Ye=ut===void 0||ut===false?null:(()=>{let e=ut===true?{}:ut;return {always:e.always??false,maxRows:e.maxRows??Fo}})(),je=false;function Ut(e){je!==e&&(je=e,L.classList.toggle("kanuni-datagrid-print",e),e?(De++,document.documentElement.classList.add("kanuni-datagrid-printing")):(De--,De<=0&&(De=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),tn());}let Qn=null;if(Ye&&!Ye.always){let e=()=>{let r=l.getRows().length;if(r>Ye.maxRows){l.isDebugMode()&&console.warn(`[datagrid] print layout skipped: ${r} rows exceeds maxRows (${Ye.maxRows}). Printing the visible rows instead \u2014 use exportPdf() for the whole result.`);return}Ut(true);},t=()=>Ut(false);window.addEventListener("beforeprint",e),window.addEventListener("afterprint",t),Qn=()=>{window.removeEventListener("beforeprint",e),window.removeEventListener("afterprint",t);};}let ce=0,te=[],W=0,Yt=0;function jt(){let e=l.getColumnLayout(),t=l.getVirtualWindow().columns,r=[],n=(a,d,s,c)=>{let i=a.def;r.push({def:i,id:a.state.id,width:a.state.width,pinned:d,inset:s,className:Rl(i.align,i.dataType)+(d?" kanuni-datagrid-cell--pinned":"")+(i.autoHeight?" kanuni-datagrid-cell--wrap":""),visualIndex:c});};e.left.forEach((a,d)=>n(a,"left",e.leftOffsets[d]+ee,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)),te=r,W=t.offsetX;let o=(e.centerOffsets[Math.min(t.end,e.center.length)]??0)-(e.centerOffsets[Math.min(t.start,e.center.length)]??0);Yt=Math.max(0,e.centerWidth-t.offsetX-o),F.style.minWidth=`${e.totalWidth+ee}px`;}let wt=26;function ur(){let e=l.getColumnLayout(),t=l.getVirtualWindow().columns,r=[...e.left,...e.center.slice(t.start,Math.min(t.end,e.center.length)),...e.right],n=bandDepth(r);if(pt.textContent="",J.style.top=`${n*wt}px`,L.style.setProperty("--dg-band-offset",`${n*wt}px`),n===0)return;computeHeaderBands(r,n).forEach((a,d)=>{let s=g("kanuni-datagrid-band-row");if(s.style.top=`${d*wt}px`,s.style.height=`${wt}px`,ee>0){let c=g("kanuni-datagrid-band-cell kanuni-datagrid-band-cell--spacer kanuni-datagrid-band-cell--pinned");c.style.width=`${ee}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 i=g(`kanuni-datagrid-band-cell${c.spacer?" kanuni-datagrid-band-cell--spacer":""}`);if(i.style.width=`${c.width}px`,i.style.flex="none",!c.spacer){if(c.columnIds.length>0){let b=bandPath(l.getColumnModel().getDef(c.columnIds[0])).slice(0,d+1);if(b.length===d+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(El(y)),u.addEventListener("click",k=>{k.stopPropagation(),l.toggleBand(b);}),i.appendChild(u);}}let p=g("kanuni-datagrid-band-label","span");p.textContent=c.label,i.appendChild(p);}s.appendChild(i);}pt.appendChild(s);});}let Qe=null,ht=null;function yt(e,t){ht&&ht!==e&&ht.classList.remove("kanuni-datagrid-header-cell--drop-before","kanuni-datagrid-header-cell--drop-after"),ht=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 Jn(){if(!Qe)return;let e=l.getSelectedCount(),t=l.getVisibleCount(),r=t>0&&e>=t;Qe.checked=r,Qe.indeterminate=!r&&e>0;}function Qt(){ur();let e=l.getSort(),t=new Map(e.map((n,o)=>[n.columnId,{direction:n.direction,order:o}]));if(J.textContent="",Qe=null,O){let n=g("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-rownum-cell");n.setAttribute("role","columnheader"),n.style.width=`${ot}px`,n.style.flex="none",n.style.insetInlineStart="0px",J.appendChild(n);}if(ft){let n=g("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-detail-toggle-cell");n.setAttribute("role","columnheader"),n.setAttribute("aria-label",w.detailsAria),n.style.width=`${rt}px`,n.style.flex="none",n.style.insetInlineStart=`${Xt}px`,J.appendChild(n);}if(qe){let n=g("kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-select-cell");n.setAttribute("role","columnheader"),n.style.width=`${It}px`,n.style.flex="none",n.style.insetInlineStart=`${zn}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();}),n.appendChild(o),J.appendChild(n),Qe=o,Jn();}let r=false;for(let n of te){if(!n.pinned&&!r){if(W>0){let i=document.createElement("div");i.style.flex=`0 0 ${W}px`,J.appendChild(i);}r=true;}let o=Uo&&n.def.sortable!==false,a=t.get(n.id),d=g(`kanuni-datagrid-header-cell${o?" kanuni-datagrid-header-cell--sortable":""}${n.pinned?" kanuni-datagrid-header-cell--pinned":""}`);d.setAttribute("role","columnheader"),d.setAttribute("data-column-id",n.id),d.setAttribute("aria-sort",a?a.direction==="asc"?"ascending":"descending":"none");let s=n.def.headerTooltip;s&&(d.title=s),d.style.width=`${n.width}px`,d.style.flex="none",n.pinned==="left"&&(d.style.insetInlineStart=`${n.inset}px`),n.pinned==="right"&&(d.style.insetInlineEnd=`${n.inset}px`);let c=g("kanuni-datagrid-header-label","span");if(n.def.renderHeader){let i=n.def.renderHeader({column:n.def});typeof i=="string"?c.textContent=i:c.appendChild(i);}else c.textContent=n.def.headerName??n.id;if(d.appendChild(c),a){let i=g("kanuni-datagrid-sort-indicator","span");if(i.setAttribute("aria-hidden","true"),i.textContent=a.direction==="asc"?"\u25B2":"\u25BC",d.appendChild(i),e.length>1){let p=g("kanuni-datagrid-sort-order","span");p.setAttribute("aria-hidden","true"),p.textContent=String(a.order+1),d.appendChild(p);}}if(o){let i=n.id;d.addEventListener("click",p=>{l.toggleSort(i,p.shiftKey);});}if(Ft!==false){let i=n.id;d.addEventListener("contextmenu",p=>{p.preventDefault(),Sr(i,{left:p.clientX,top:p.clientY});});}if(P&&n.def.filterable!==false){let i=document.createElement("button");i.type="button";let p=l.getColumnFilter(n.id)!==null;i.className=`kanuni-datagrid-filter-button${p?" kanuni-datagrid-filter-button--active":""}${Bo==="always"?" kanuni-datagrid-filter-button--pinned":""}`,i.setAttribute("aria-haspopup","dialog"),i.setAttribute("aria-label",`${n.def.headerName??n.id} filter`),i.appendChild(vl()),i.addEventListener("click",b=>{b.stopPropagation(),yr(n.id,i);}),d.appendChild(i);}if(oe&&n.def.reorderable!==false&&(d.draggable=true,d.addEventListener("dragstart",i=>{i.dataTransfer?.setData("text/x-kanuni-column",n.id),i.dataTransfer&&(i.dataTransfer.effectAllowed="move");}),d.addEventListener("dragover",i=>{if(!i.dataTransfer?.types.includes("text/x-kanuni-column"))return;i.preventDefault();let p=d.getBoundingClientRect(),b=i.clientX<p.left+p.width/2;yt(d,b?"before":"after");}),d.addEventListener("dragleave",i=>{let p=i.relatedTarget;(!p||!d.contains(p))&&yt(null,"before");}),d.addEventListener("drop",i=>{yt(null,"before");let p=i.dataTransfer?.getData("text/x-kanuni-column");if(!p||p===n.id)return;i.preventDefault();let b=d.getBoundingClientRect();if(i.clientX<b.left+b.width/2)l.moveColumn(p,n.id);else {let u=te.findIndex(f=>f.id===n.id);l.moveColumn(p,te[u+1]?.id);}}),d.addEventListener("dragend",()=>yt(null,"before"))),He&&n.def.resizable!==false){let i=g("kanuni-datagrid-resize-handle","span");i.setAttribute("data-resize-handle",n.id),i.setAttribute("role","presentation"),i.addEventListener("click",p=>p.stopPropagation()),i.addEventListener("dblclick",p=>{p.stopPropagation(),Mr(n.id);}),i.addEventListener("pointerdown",p=>{p.preventDefault(),p.stopPropagation();let b=p.clientX,y=n.width,u=getComputedStyle(d).direction==="rtl"?-1:1;d.draggable=false;let f=y,k=false,E=$=>{k=true,f=y+($.clientX-b)*u,l.setColumnWidth(n.id,f,false);},A=()=>{window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",A),window.removeEventListener("pointercancel",A),k&&l.setColumnWidth(n.id,f,true),d.draggable=oe&&n.def.reorderable!==false;};window.addEventListener("pointermove",E),window.addEventListener("pointerup",A),window.addEventListener("pointercancel",A);}),d.appendChild(i);}J.appendChild(d);}}let Zn=null,Ct=null;function cr(e){if(e===Zn)return;Zn=e;let t=[];for(let r=0;r<e.length;r++){let n=e[r];n&&n.kind!=="data"&&t.push(r);}Ct=t.length>0?t:null;}function pr(e){if(!Ct)return e+1;let t=0,r=Ct.length;for(;t<r;){let n=t+r>>1;Ct[n]<=e?t=n+1:r=n;}return e+1-t}let Te=[];function Jt(e="data"){let t=g("kanuni-datagrid-row");if(t.setAttribute("role","row"),e==="loading"){t.classList.add("kanuni-datagrid-row--loading"),t.setAttribute("aria-busy","true");let i=g("kanuni-datagrid-cell kanuni-datagrid-loading-cell");return i.setAttribute("role","gridcell"),i.setAttribute("aria-colindex","1"),i.appendChild(g("kanuni-datagrid-loading-bar","span")),t.appendChild(i),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:ce}}if(e==="data"&&Vn&&t.addEventListener("click",()=>{if(!t.classList.contains("kanuni-datagrid-group-row--aligned"))return;let i=t.getAttribute("data-group-key");i!==null&&l.toggleGroup(i);}),e==="panel"){let i=document.createElement("div");return i.setAttribute("role","gridcell"),i.setAttribute("aria-colindex","1"),t.appendChild(i),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,panelCell:i,epoch:ce}}if(e==="group"){let i=g("kanuni-datagrid-group-cell");i.setAttribute("role","gridcell"),i.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 qe&&ze?.mode==="multiple"&&(k=document.createElement("input"),k.type="checkbox",k.className="kanuni-datagrid-group-checkbox",k.tabIndex=-1,k.addEventListener("change",()=>{let E=t.getAttribute("data-group-key");E!==null&&l.toggleGroupSelection(E);}),k.addEventListener("click",E=>E.stopPropagation()),k.addEventListener("mousedown",E=>E.stopPropagation()),i.appendChild(k)),i.append(p,b,y,u,f),t.appendChild(i),t.addEventListener("click",()=>{let E=t.getAttribute("data-group-key");E!==null&&l.toggleGroup(E);}),{kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,group:{cell:i,check:k,twisty:p,caption:b,label:y,count:u,aggregates:f},epoch:ce}}if(Xe){let i=g("kanuni-datagrid-row-grip","span");i.setAttribute("aria-hidden","true"),i.title=w.dragToReorder??"Drag to reorder",i.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>',i.addEventListener("mouseenter",()=>{t.draggable=true;}),i.addEventListener("mouseleave",()=>{t.draggable=false;}),t.appendChild(i);}if(it)return {kind:e,root:t,cells:[],rowNumberCell:null,selectInput:null,detailToggle:null,leadingSpacer:null,trailingSpacer:null,epoch:ce};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=`${ot}px`,r.style.flex="none",r.style.insetInlineStart="0px",t.appendChild(r));let n=null;if(ft){let i=g("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-detail-toggle-cell");i.setAttribute("role","gridcell"),i.style.width=`${rt}px`,i.style.flex="none",i.style.insetInlineStart=`${Xt}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=t.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()),i.appendChild(p),t.appendChild(i),n=p;}let o=null;if(qe){let i=g("kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-select-cell");i.setAttribute("role","gridcell"),i.style.width=`${It}px`,i.style.flex="none",i.style.insetInlineStart=`${zn}px`;let p=document.createElement("input");p.type="checkbox",p.tabIndex=-1;let b=()=>{let y=t.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);};i.addEventListener("mousedown",y=>y.stopPropagation()),i.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()),i.appendChild(p),t.appendChild(i),o=p;}let a=[],d=null,s=false;for(let i of te){!i.pinned&&!s&&(d=document.createElement("div"),d.style.flex=`0 0 ${W}px`,t.appendChild(d),s=true);let p=g(i.className);p.setAttribute("role","gridcell"),p.setAttribute("data-column-id",i.id),p.style.width=`${i.width}px`,p.style.flex="none",i.pinned==="left"&&(p.style.insetInlineStart=`${i.inset}px`),i.pinned==="right"&&(p.style.insetInlineEnd=`${i.inset}px`),t.appendChild(p),a.push({el:p,slot:i});}let c=document.createElement("div");return c.style.flex=`0 0 ${Yt}px`,t.appendChild(c),{kind:e,root:t,cells:a,rowNumberCell:r,selectInput:o,detailToggle:n,leadingSpacer:d,trailingSpacer:c,epoch:ce}}let Ke="";function kt(e,t){if(Ke===""||t===""){e.textContent=t;return}let r=foldText(t),n=r.indexOf(Ke);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+Ke.length),o.push(d),a=n+Ke.length,n=r.indexOf(Ke,a);}a<t.length&&o.push(document.createTextNode(t.slice(a))),e.replaceChildren(...o);}function gr(e,t,r){let n=l.getColumnModel().getCellValue(r.data,t.id),o=t.def;if(o.renderCell){let d=o.renderCell({value:n,row:r.data,node:r,column:o});typeof d=="string"?e.textContent=d:e.replaceChildren(d);return}let a=lookupLabel(o,n);if(a!==null){kt(e,a);return}if(o.valueFormatter){let d=o.valueFormatter(n,r.data);kt(e,typeof d=="string"?d:String(d??""));return}if(o.dateFormat&&o.dataType==="date"){kt(e,formatDateValue(n,o.dateFormat));return}kt(e,n==null?"":String(n));}function eo(e,t,r){let n=e.root;if(n.setAttribute("aria-rowindex",String(r+2)),n.setAttribute("data-row-key",String(t.key)),t.kind==="detail"||t.kind==="editform"){let u=e.panelCell,f=t.kind==="detail";n.className=`kanuni-datagrid-row ${f?"kanuni-datagrid-detail-row":"kanuni-datagrid-editform-row"}`,n.style.height=`${t.height}px`,f?(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")),u.className=f?"kanuni-datagrid-detail-cell":"kanuni-datagrid-editform-cell";let k=`${t.kind}:${String(t.key)}`;if(n.getAttribute("data-panel-for")!==k){n.setAttribute("data-panel-for",k);let E=f?Hn?.(t.data):t.parentKey===null?void 0:zo?.(t.parentKey,t.data);u.textContent="",typeof E=="string"?u.textContent=E:E&&u.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=to?"":`${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 u of Array.from(n.classList))u.startsWith("kanuni-datagrid-group-row--level-")&&n.classList.remove(u);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",G&&r%2===1),n.classList.toggle("kanuni-datagrid-row--selected",l.isRowSelected(t.key));let a=l.getFocus();if(n.classList.toggle("kanuni-datagrid-row--focused",Ln&&a!==null&&a.rowKey===t.key),e.leadingSpacer&&(e.leadingSpacer.style.flex=`0 0 ${W}px`),e.trailingSpacer&&(e.trailingSpacer.style.flex=`0 0 ${Yt}px`),Xe){let u=Re!==null&&String(Re.key)===String(t.key);n.classList.toggle("kanuni-datagrid-row--drop-before",u&&Re.side==="before"),n.classList.toggle("kanuni-datagrid-row--drop-after",u&&Re.side==="after");}let d=t.kind==="treePath",s=d||o!==null;if(n.classList.toggle("kanuni-datagrid-row--tree-path",d),e.rowNumberCell&&(e.rowNumberCell.textContent=s?"":String(pr(r))),e.detailToggle&&(e.detailToggle.hidden=s),e.selectInput){let u=o!==null&&ze?.mode==="multiple";if(e.selectInput.hidden=d||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(t.key),e.selectInput.setAttribute("aria-label",w.selectRowAria.replace("{row}",String(t.key)));}if(e.detailToggle&&t.kind==="data"){let u=l.isDetailExpanded(t.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(t.kind==="group"&&e.group){let u=t;n.className=`kanuni-datagrid-row kanuni-datagrid-group-row kanuni-datagrid-group-row--level-${u.level}`,n.setAttribute("aria-expanded",String(u.expanded)),n.setAttribute("aria-level",String(u.level+1)),n.setAttribute("data-group-key",String(u.key)),n.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=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"),z=l.getColumnModel().getDef(A.columnId);I.textContent=`${summaryLabel(A,zt)} ${z?.headerName??A.columnId}:`,$.append(I,` ${formatSummaryValue(A,E[summaryKey(A.columnId,A.type)],z)}`),e.group.aggregates.appendChild($);}return}if(t.kind!=="data"&&!d&&!o){for(let{el:u}of e.cells)u.textContent="";return}if(it&&s){let u=Xe?1:0;for(;n.childNodes.length>u;)n.removeChild(n.lastChild);let f=g("kanuni-datagrid-cell");o?f.appendChild(no(o)):(f.appendChild(oo(t)),Zt(f,t,t.tree)),n.appendChild(f);return}if(it){let u=Xe?1:0,f=it({row:t.data,node:t,rowIndex:r,selected:l.isRowSelected(t.key),focused:Ln&&a!==null&&a.rowKey===t.key});if(f instanceof Node&&n.childNodes.length===u+1&&n.childNodes[u]===f)return;for(;n.childNodes.length>u;)n.removeChild(n.lastChild);typeof f=="string"?n.appendChild(document.createTextNode(f)):f&&n.appendChild(f);return}let c=a!==null&&a.rowKey===t.key?a.columnId:null,i=o?void 0:t.tree,p=i||o?(()=>{let u=l.getColumnLayout();return (u.left[0]??u.center[0]??u.right[0])?.state.id??null})():null,b=i?p:null,y=l.hasCellSpans();for(let{el:u,slot:f}of e.cells){let k=(Bt||_t)&&!s?{node:t,columnId:f.id,rowIndex:r,columnIndex:f.visualIndex,value:l.getColumnModel().getCellValue(t.data,f.id)}:null,E=k&&Bt?Bt(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(no(o)):u.replaceChildren(...br(o,f.id)):d?f.id===b?(u.replaceChildren(oo(t)),Zt(u,t,i)):u.replaceChildren():(gr(u,f,t),i&&f.id===b&&Zt(u,t,i)),y&&!A){let N=mr(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 Mt=E!==void 0;if(N?.kind==="covered"&&c!==f.id&&!Mt)u.replaceChildren();else if(N?.kind==="draw"){let Me=g("kanuni-datagrid-span-box");Me.style.height=`${N.height}px`,Me.append(...Array.from(u.childNodes)),u.appendChild(Me);}}else y||u.classList.remove("kanuni-datagrid-cell--span","kanuni-datagrid-cell--span-covered");if(ye){let N=!s&&!!en(t.key,f.id,t.data);u.classList.toggle("kanuni-datagrid-cell--noted",N);}u.id=`${m.gridId}-cell-${String(t.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&&_t?_t(k):void 0,z=f.def.cellClassName,me=[s?void 0:typeof z=="function"?z({value:l.getColumnModel().getCellValue(t.data,f.id),row:t.data,node:t,column:f.def}):z,I].filter(Boolean).join(" ")||void 0;if(me){for(let N of me.split(" "))u.classList.add(N);u.setAttribute("data-slot-classes",me);}else $&&u.removeAttribute("data-slot-classes");}}let to=m.columns.some(e=>e.autoHeight);function fr(){if(!to)return;let e=l.getVirtualWindow(),t=l.getRows(),r=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,s=Te[d]?.root;if(!s)continue;let c=s.getBoundingClientRect().height;c>0&&r.get(a.key)!==c&&(r.set(a.key,c),n=true);}n&&l.setMeasuredRowHeights(r);}let xt={start:0,end:0};function mr(e,t){let r=l.getCellSpans(t);if(r.length===0)return null;let n=spanRoleAt(r,e,xt.start,xt.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 no(e){let t=g("kanuni-datagrid-group-inline","span");t.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 n=l.getColumnModel().getDef(e.columnId),o=g("kanuni-datagrid-group-caption","span");o.textContent=`${n?.headerName??e.columnId}:`;let a=g("kanuni-datagrid-group-label","span");a.textContent=lookupLabel(n,e.value)??e.display??(e.label===""?w.filterBlank:e.label);let d=g("kanuni-datagrid-group-count","span");return d.textContent=`(${e.count})`,t.append(r,o,a,d),t}function br(e,t){if(!e.aggregates)return [];let r=l.getSummaryDefs().find(o=>o.columnId===t);if(!r)return [];let n=g("kanuni-datagrid-group-aggregate-value","span");return n.textContent=formatSummaryValue(r,e.aggregates[summaryKey(r.columnId,r.type)],l.getColumnModel().getDef(t)),[n]}function oo(e){let t=g("kanuni-datagrid-tree-path-label","span");return t.textContent=e.label,t}function Zt(e,t,r){let n=g(`kanuni-datagrid-tree-cell${r.ancestorOnly?" kanuni-datagrid-tree-cell--ancestor":""}`,"span");if(n.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(t.key);}),n.appendChild(o);}else n.appendChild(g("kanuni-datagrid-tree-toggle kanuni-datagrid-tree-toggle--leaf","span"));n.append(...Array.from(e.childNodes)),e.appendChild(n);}let en=(e,t,r)=>ye?ye.get({rowKey:e,columnId:t,row:r})??null:null,ro=null,pe=Wt?g("kanuni-datagrid-overlay"):null;pe&&(pe.style.position="absolute",pe.style.inset="0",pe.style.pointerEvents="none",B.appendChild(pe));function wr(){if(!Wt||!pe)return;let e=Wt();e!==ro&&(ro=e,e?pe.replaceChildren(e):pe.replaceChildren());}function tn(){wr();let e=l.getVirtualWindow(),t=l.getRows(),r=je?{...e,rows:{...e.rows,start:0,end:t.length,offsetY:0,totalHeight:0}}:e;cr(t),B.style.height=`${r.rows.totalHeight}px`,D.style.transform=`translateY(${r.rows.offsetY}px)`,Ke=Xo?normalizeSearch(l.getSearchText()):"";let n=Math.max(0,Math.min(r.rows.end,t.length)-r.rows.start);for(xt.start=r.rows.start,xt.end=Math.min(r.rows.end,t.length)-1;Te.length>n;)Te.pop().root.remove();for(let o=0;o<n;o++){let a=r.rows.start+o,d=t[a];if(!d){let i=Te[o];if(!i||i.kind!=="loading"){let p=Jt("loading");i?D.replaceChild(p.root,i.root):D.appendChild(p.root),Te[o]=p,i=p;}i.root.setAttribute("aria-rowindex",String(a+2)),i.root.style.height=`${l.getRowHeight()}px`;continue}let s=d.kind==="data"?"data":d.kind==="group"?Vn?"data":"group":d.kind==="detail"||d.kind==="editform"?"panel":"stub",c=Te[o];if(!c||c.epoch!==ce||c.kind!==s){let i=Jt(s);c?D.replaceChild(i.root,c.root):D.appendChild(i.root),Te[o]=i,c=i;}eo(c,d,a);}fr();}let lo=createDebouncedCommit(qo??(l.isRemote()?200:0));function nn(){if(!Ge)return;if(ke.textContent="",ee>0){let n=g("kanuni-datagrid-filter-cell kanuni-datagrid-filter-cell--pinned");n.style.width=`${ee}px`,n.style.flex="none",n.style.insetInlineStart="0px",ke.appendChild(n);}let e=false,t=null,r=()=>{if(!t){t=document.createElement("datalist"),t.id=`${m.gridId}-filter-periods`;for(let n of periodSuggestionList(Kn)){let o=document.createElement("option");o.value=n,t.appendChild(o);}ke.appendChild(t);}return t.id};for(let n of te){if(!n.pinned&&!e){if(W>0){let a=g("kanuni-datagrid-spacer");a.style.width=`${W}px`,a.style.flex="none",ke.appendChild(a);}e=true;}let o=g(`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",r());let d=()=>l.setColumnFilter(n.id,parseFilterInput(n.id,a.value,n.def.dataType,Kn),FILTER_PART_ROW);a.addEventListener("input",()=>lo.schedule(n.id,d));let s=()=>{lo.cancel(n.id),d();};a.addEventListener("keydown",c=>{c.key==="Enter"&&s();}),a.addEventListener("blur",s),o.appendChild(a);}ke.appendChild(o);}}let on=()=>{};function hr(){if(!Pn)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),Zo);});let r=g("kanuni-datagrid-toolbar-spacer"),n=null;if(Vo){let i=document.createElement("button");i.type="button",i.textContent=w.toolbarColumns??"Columns",i.setAttribute("aria-haspopup","dialog"),i.addEventListener("click",()=>{let p=i.getBoundingClientRect();go({left:p.left,top:p.bottom+2});}),n=i;}let o=se&&Qo,a=se&&Jo,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(xl());let s=null;d.addEventListener("click",()=>{if(s)return;let i=d.getBoundingClientRect();Se({left:i.right-190,top:i.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,d.disabled=true,V(),Cn(l,y.kind).then(f=>{s=null,d.disabled=false,f.error&&on(f.error);});}),p.appendChild(u);}},"kanuni-datagrid-filter-popup kanuni-datagrid-export-menu");});for(let i of jo??[])xe.append(i);xe.append(e,r),n&&xe.append(n),xe.append(d);for(let i of Yo??[])xe.append(i);let c=g("kanuni-datagrid-toolbar-error","span");c.setAttribute("role","alert"),c.style.display="none",xe.append(c),on=i=>{c.textContent=i,c.style.display="";};}function ao(){if(!Pe.isConnected)return;let e=l.getPage(),t=l.getPageCount();Pe.textContent="";let r=(s,c,i,p)=>{let b=document.createElement("button");return b.type="button",b.textContent=s,b.setAttribute("aria-label",c),b.disabled=i,b.addEventListener("click",p),b},n=g("kanuni-datagrid-pager-buttons"),o=e<=0,a=e>=t-1;n.append(r("\xAB",w.pagerFirst??"First",o,()=>l.setPage(0)),r("\u2039",w.pagerPrevious??"Previous",o,()=>l.setPage(e-1)));let d=g("kanuni-datagrid-pager-current","span");d.textContent=`${e+1} / ${t}`,n.append(d,r("\u203A",w.pagerNext??"Next",a,()=>l.setPage(e+1)),r("\xBB",w.pagerLast??"Last",a,()=>l.setPage(t-1))),Pe.appendChild(n);}function rn(){if(!re)return;let e=l.getColumnLayout(),t=l.getSummaries(),r=new Map(l.getSummaryDefs().map(o=>[o.columnId,o]));if(K.textContent="",K.style.width=`${e.totalWidth+ee}px`,ee>0){let o=g("kanuni-datagrid-footer-cell kanuni-datagrid-footer-cell--pinned");o.style.width=`${ee}px`,o.style.insetInlineStart="0px",K.appendChild(o);}let n=false;for(let o of te){if(!o.pinned&&!n){if(W>0){let c=g("kanuni-datagrid-spacer");c.style.width=`${W}px`,K.appendChild(c);}n=true;}let a=r.get(o.id),d=o.def.dataType==="number",s=g(`kanuni-datagrid-footer-cell${o.pinned?" kanuni-datagrid-footer-cell--pinned":""}${d?" 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=`${summaryLabel(a,zt)} \u2014 ${o.def.headerName??o.id}`;let c=g("kanuni-datagrid-footer-value","span");c.textContent=formatSummaryValue(a,t[summaryKey(a.columnId,a.type)],o.def),s.appendChild(c);}else {let c=g("kanuni-datagrid-footer-hint","span");c.textContent=ie?"\xB7":"",s.appendChild(c);}K.appendChild(s);}}function ln(){let e=(t,r,n)=>{t.textContent="",r.forEach((o,a)=>{let d=Jt("data");eo(d,{kind:"data",key:`__pinned-${n}-${a}`,sourceIndex:-1,data:o},a),d.root.classList.remove("kanuni-datagrid-row--odd"),d.root.removeAttribute("aria-rowindex"),d.rowNumberCell&&(d.rowNumberCell.textContent=""),t.appendChild(d.root);});};Ne.length>0&&e(_e,Ne,"top"),Ie.length>0&&e(On,Ie,"bottom");}let Oe=null,an=null;function V(){an?.(),an=null,Oe?.remove(),Oe=null;}function io(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 Se(e,t,r="kanuni-datagrid-filter-popup"){V(),Oe=g(`${Tn(m)} kanuni-datagrid-portal`);let n=g(r);n.style.position="fixed",n.style.left=`${e.left}px`,n.style.top=`${e.top}px`,n.style.zIndex="1000",t(n),Oe.appendChild(n),document.body.appendChild(Oe),io(n,e);let o=Oe,a=s=>{o.contains(s.target)||V();},d=s=>{s.key==="Escape"&&V();};document.addEventListener("pointerdown",a,true),document.addEventListener("keydown",d,true),an=()=>{document.removeEventListener("pointerdown",a,true),document.removeEventListener("keydown",d,true);};}let Le=25,so=8,uo=new Map,co=0;function yr(e,t){let r=t.getBoundingClientRect(),n=++co;Se({left:r.left,top:r.bottom+2},o=>{let a=[],d=true,s=new Set,c=false,i=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 z=document.createElement("div");z.style.position="relative";let Z=document.createElement("div");z.appendChild(Z),I.appendChild(z);let me=()=>{let x=foldText(p.trim());if(!x){b=a;return}y||(y=a.map(M=>foldText(M.label))),b=u!==""&&x.includes(u)?f.filter(M=>foldText(M.label).includes(x)):a.filter((M,H)=>y[H].includes(x)),u=x,f=b;},N=()=>{if(I.setAttribute("aria-busy",String(d)),I.setAttribute("aria-setsize",String(b.length)),d){z.style.height="",Z.textContent="";let Y=g("kanuni-datagrid-filter-empty");Y.textContent=w.filterLoading,Z.appendChild(Y);return}if(b.length===0){z.style.height="",Z.style.transform="",Z.textContent="";let Y=g("kanuni-datagrid-filter-empty");Y.textContent=w.filterNoMatch,Z.appendChild(Y);return}let x=I.clientHeight||240,M=Math.max(0,Math.floor(I.scrollTop/Le)-so),H=Math.ceil(x/Le)+so*2,U=Math.min(M,Math.max(0,b.length-1)),Fr=Math.min(b.length,U+H);z.style.height=`${b.length*Le}px`,Z.style.transform=`translateY(${U*Le}px)`,Z.textContent="";for(let Y=U;Y<Fr;Y++){let Be=b[Y],ne=g("kanuni-datagrid-filter-item");ne.setAttribute("role","option"),ne.setAttribute("aria-selected",String(s.has(Be.label))),ne.tabIndex=0,ne.setAttribute("data-value",Be.label),ne.setAttribute("data-index",String(Y)),Y===i&&ne.classList.add("kanuni-datagrid-filter-item--active");let et=document.createElement("input");et.type="checkbox",et.readOnly=true,et.checked=s.has(Be.label),et.tabIndex=-1;let Go=document.createElement("span");Go.textContent=Be.label===""?w.filterBlank:Be.label,ne.append(et,Go),ne.addEventListener("click",()=>Mt(Be.label)),ne.addEventListener("focus",()=>{i=Y;}),Z.appendChild(ne);}},Mt=x=>{c=true,s.has(x)?s.delete(x):s.add(x);for(let M of Z.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",()=>{uo.set(e,I.scrollTop),N();}),k.addEventListener("input",()=>{p=k.value,i=0,me(),N();});let Me=x=>{if(b.length===0)return;i=Math.max(0,Math.min(b.length-1,x));let M=i*Le,H=I.clientHeight||240;M<I.scrollTop?I.scrollTop=M:M+Le>I.scrollTop+H&&(I.scrollTop=M+Le-H),N(),o.querySelector(`.kanuni-datagrid-filter-item[data-index="${i}"]`)?.focus();},Io=()=>{if(d)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,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,i=0,me(),N();return}if(x.key==="ArrowDown"){x.preventDefault(),Me(M?0:i+1);return}if(x.key==="ArrowUp"){x.preventDefault(),Me(M?b.length-1:i-1);return}if(!M&&(x.key==="Home"||x.key==="End")){x.preventDefault(),Me(x.key==="Home"?0:b.length-1);return}if(x.key===" "&&!M){x.preventDefault();let H=b[i];H&&Mt(H.label);return}if(x.key==="Enter"){x.preventDefault(),Io();return}!M&&x.key.length===1&&x.key!==" "&&!x.ctrlKey&&!x.metaKey&&!x.altKey&&(x.preventDefault(),k.focus(),p+=x.key,k.value=p,i=0,me(),N());});let Ho=g("kanuni-datagrid-filter-footer"),Dt=document.createElement("button");Dt.type="button",Dt.textContent=w.cancel,Dt.addEventListener("click",()=>V());let be=document.createElement("button");be.type="button",be.className="kanuni-datagrid-filter-primary",be.setAttribute("data-testid","dg-filter-apply"),be.textContent=w.apply,be.disabled=true,be.addEventListener("click",Io),Ho.append(Dt,be),o.append(k,E,I,Ho),N(),queueMicrotask(()=>{k.isConnected&&k.focus();}),l.getDistinctValueSetAsync(e).then(x=>{if(co!==n||!o.isConnected)return;a=x.entries,y=null,u="",d=false,be.disabled=false;let M=selectedLabelsFromFilter(l.getColumnFilter(e,FILTER_PART_SET)??l.getColumnFilter(e,FILTER_PART_DEFAULT),a);M?(c=true,s=new Set(M)):c||(s=new Set(a.map(U=>U.label))),me();let H=uo.get(e);N(),H&&(I.scrollTop=H,N());});});}function vt(e={}){let t=l.getClipboardText(e);l.notifyClipboardGesture("copy",t?t.split(`
2
+ `).length:0,()=>!t||!navigator.clipboard?.writeText?false:(navigator.clipboard.writeText(t).catch(()=>{}),true));}function Cr(e){if(dt===false)return [];let t=dt===true?{}:dt,r=[],n=a=>{e&&r.length===0&&r.push({separator:true,id:"__dg-sep"}),r.push(a);};t.copy!==false&&n({id:"__dg-copy",label:w.menuCopy,shortcut:`${xr}C`,onSelect:()=>vt()}),t.copyWithHeaders!==false&&n({id:"__dg-copy-headers",label:w.menuCopyWithHeaders,onSelect:()=>vt({includeHeaders:true})}),t.copyWithGroupHeaders!==false&&kr()&&n({id:"__dg-copy-group-headers",label:w.menuCopyWithGroupHeaders,onSelect:()=>vt({includeGroupHeaders:true})});let o=t.export===false?[]:Array.isArray(t.export)?t.export:["csv","excel","excel-selected","pdf"];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(s=>({id:`__dg-export-${s}`,label:d[s],disabled:s==="excel-selected"&&a,onSelect:()=>{Cn(l,s).then(c=>{c.error&&on(c.error);});}}))});}return r}function kr(){let e=l.getColumnModel();return l.getVisualColumnIds().some(t=>{let r=e.getDef(t)?.band;return typeof r=="string"?r!=="":Array.isArray(r)&&r.length>0})}let xr=/Mac|iPhone|iPad|iPod/.test(navigator.platform??"")?"\u2318":"Ctrl+";function dn(e,t,r){let n=null,o=()=>{n?.remove(),n=null;};t.forEach((a,d)=>{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(d)),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 i=g("kanuni-datagrid-menu-label","span");if(i.textContent=a.label??"",c.appendChild(i),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),io(u,{left:f.right,top:Math.max(0,f.top-4)}),n=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 po=e=>{let r=e.target.closest(".kanuni-datagrid-row");if(!r||r.classList.contains("kanuni-datagrid-group-row"))return;let n=ge(e);if(n?.columnId&&l.notifyCell("cellContextMenu",n.node,n.rowIndex,n.columnId),!st&&!dt||!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 st=="function"?st(o):st)??[],d=[...a,...vr(o,a.length>0)],s=Cr(d.length>0);d.length===0&&s.length===0||Se({left:e.clientX,top:e.clientY},c=>{c.setAttribute("role","menu"),dn(c,[...d,...s],o);},"kanuni-datagrid-context-menu");};function vr(e,t){if(!ye?.onChange||ye.menu===false)return [];let r=e.columnId;if(!r)return [];let n=e.node.key,o=en(n,r,e.row),a=[];return t&&a.push({separator:true,id:"__note-sep"}),a.push({id:"__note-edit",label:o?w.editNote:w.addNote,onSelect:()=>Er(n,r,e.row,o??"")}),o&&a.push({id:"__note-delete",label:w.deleteNote,onSelect:()=>ye.onChange?.({rowKey:n,columnId:r,row:e.row,text:null})}),a}function Er(e,t,r,n){let a=(L.querySelector(`[data-row-key="${CSS.escape(String(e))}"] [data-column-id="${CSS.escape(t)}"]`)??L).getBoundingClientRect();queueMicrotask(()=>{Se({left:a.left,top:a.bottom+2},d=>{d.setAttribute("aria-label",w.noteEditorAria);let s=document.createElement("textarea");s.className="kanuni-datagrid-note-input",s.rows=4,s.value=n,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(),ye?.onChange?.({rowKey:e,columnId:t,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 i=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),i.append(p,b),d.append(s,i),queueMicrotask(()=>{s.focus(),s.select();});},"kanuni-datagrid-filter-popup kanuni-datagrid-note-editor");});}function Rr(e){Ee!==e&&(Ee=e,e?(L.insertBefore(_,S),cn()):_.remove());}function Tr(e){if(re!==e){if(re=e,e){if(Ce){let t=Ne.length>0?_e:B;F.insertBefore(K,t);}else F.append(K);rn();}else K.remove();_e.style.setProperty("--dg-pinned-gap",String(qt+(re&&Ce?1:0)));}}function sn(e){let t=kn(L,e);t!==null&&l.setColumnWidth(e,t);}function Sr(e,t){let r=l.getColumnModel().getDef(e),n={columnId:e,headerName:r?.headerName??e},o=yn(n,{controller:l,t:w,groupPanelVisible:Ee,footerVisible:re,onToggleGroupPanel:()=>Rr(!Ee),onToggleFooter:()=>Tr(!re),onOpenFieldChooser:()=>go(t),onBestFit:sn,onBestFitAll:()=>{for(let d of l.getColumnStates())d.visible&&sn(d.id);},maxGroupLevels:se?Number.POSITIVE_INFINITY:1}),a=typeof Ft=="function"?Ft(n,o):o;a.length!==0&&Se(t,d=>{d.setAttribute("role","menu"),dn(d,a,n);},"kanuni-datagrid-context-menu");}function Lr(e,t){let r=l.getColumnModel().getDef(e),n=l.getColumnSummary(e),o={columnId:e,headerName:r?.headerName??r?.field??e},a=[{id:"none",label:w.noTotal,disabled:n===null,onSelect:()=>l.setColumnSummary(e,null)},{id:"sep",separator:true},...allowedSummaryTypes(r?.dataType).map(d=>({id:d,label:zt[d],disabled:n?.type===d,onSelect:()=>l.setColumnSummary(e,d)}))];Se(t,d=>{d.setAttribute("role","menu"),dn(d,a,o);},"kanuni-datagrid-context-menu");}function go(e){Se(e,t=>{let r=g("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"),s=l.getColumnModel().getDef(n.id);d.textContent=s?.headerName??n.id,o.append(a,d),r.appendChild(o);}t.appendChild(r);},"kanuni-datagrid-filter-popup kanuni-datagrid-column-chooser");}let Ae=null,un=null,Et=e=>{_.classList.toggle("kanuni-datagrid-group-panel--over",e);};function fo(e,t,r){let n=l.getGroupLevels();if(e===t)return;let o=n.filter(s=>s!==e),a=o.indexOf(t);if(a<0)return;let d=r==="before"?a:a+1;un=e,l.groupBy([...o.slice(0,d),e,...o.slice(d)]);}function mo(e,t){let r=l.getGroupLevels(),n=r.indexOf(e),o=n+t;n<0||o<0||o>=r.length||fo(e,r[o],t===-1?"before":"after");}function bo(e,t){if(!e)return;let r=l.getGroupLevels();if(r.includes(e))return;let n=se?Number.POSITIVE_INFINITY:1;if(r.length>=n){l.groupBy([...r.slice(0,n-1),e]);return}let o=t??r.length;l.groupBy([...r.slice(0,o),e,...r.slice(o)]);}function cn(){if(!Ee)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 t=c=>l.getColumnModel().getDef(c)?.headerName??c,r=g("kanuni-datagrid-group-levels"),n=(c,i)=>c<i.top+i.height/2?"before":"after",o=(c,i)=>{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&&i&&c.classList.add(`kanuni-datagrid-group-level--drop-${i}`);};e.forEach((c,i)=>{let p=g("kanuni-datagrid-group-level");p.style.setProperty("--dg-group-level",String(i)),p.setAttribute("data-group-level",String(i));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",`${fillText(w.groupLevelAria,{n:i+1})}: ${t(c)}`),b.addEventListener("dragstart",f=>{Ae=c,f.dataTransfer&&(f.dataTransfer.effectAllowed="move",f.dataTransfer.setData("text/x-kanuni-column",c));}),b.addEventListener("dragend",()=>{Ae=null,o(null,null);}),b.addEventListener("keydown",f=>{let k=f.ctrlKey||f.metaKey;k&&(f.key==="ArrowUp"||f.key==="ArrowLeft")?(f.preventDefault(),mo(c,-1)):k&&(f.key==="ArrowDown"||f.key==="ArrowRight")?(f.preventDefault(),mo(c,1)):(f.key==="Delete"||f.key==="Backspace")&&(f.preventDefault(),l.groupBy(e.filter(E=>E!==c)));}),p.addEventListener("dragover",f=>{!Ae&&!(f.dataTransfer?.types.includes("text/x-kanuni-column")??false)||(f.preventDefault(),f.stopPropagation(),o(p,n(f.clientY,p.getBoundingClientRect())));}),p.addEventListener("drop",f=>{f.preventDefault(),f.stopPropagation();let k=n(f.clientY,p.getBoundingClientRect());o(null,null),Et(false);let E=Ae;if(Ae=null,E){fo(E,c,k);return}let A=f.dataTransfer?.getData("text/x-kanuni-column");A&&bo(A,k==="before"?i:i+1);}),e.length>1){let f=g("kanuni-datagrid-group-chip-level","span");f.textContent=String(i+1),b.appendChild(f);}let y=document.createElement("span");y.textContent=t(c);let u=document.createElement("button");u.type="button",u.setAttribute("aria-label",fillText(w.groupRemoveAria,{column:t(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),un===c&&(un=null,queueMicrotask(()=>b.focus()));}),_.appendChild(r);let a=g("kanuni-datagrid-group-panel-actions"),d=document.createElement("button");d.type="button",d.textContent="Expand all",d.addEventListener("click",()=>l.expandAllGroups());let s=document.createElement("button");s.type="button",s.textContent="Collapse all",s.addEventListener("click",()=>l.collapseAllGroups()),a.append(d,s),_.appendChild(a);}if(Ee){let e=t=>t.dataTransfer?.types.includes("text/x-kanuni-column")??false;_.addEventListener("dragover",t=>{e(t)&&(t.preventDefault(),Et(true));}),_.addEventListener("dragleave",t=>{let r=t.relatedTarget;r&&_.contains(r)||Et(false);}),_.addEventListener("drop",t=>{Et(false);let r=t.dataTransfer?.getData("text/x-kanuni-column");if(r){if(t.preventDefault(),Ae){Ae=null;return}bo(r);}});}let wo="";function ho(){if(!Mn)return;let e=[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),s=d?.headerName??d?.field??a.columnId,c=a.direction==="desc"?w.announceDescending:w.announceAscending;return `${s} ${c}`}).join(", ");e.push(fillText(w.announceSortedBy,{columns:o}));}let r=l.getSelectedCount();r>0&&e.push(fillText(w.announceSelected,{n:r}));let n=e.join(", ");n!==wo&&(wo=n,Ve.textContent=n);}function yo(){if(!Pt)return;ve.textContent="";let e=describeFilter(l.getEffectiveFilter(),l.getColumnModel(),{...Dn,labels:{...filterLabels(w),...Dn?.labels}});if(!e&&Pt!=="always"){ve.style.display="none";return}ve.style.display="";let t=l.isFilterEnabled();ve.className=`kanuni-datagrid-filter-panel${t?"":" 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 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=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),ve.append(r,n,o),Sn){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",Sn),ve.appendChild(a);}}let pn=new Set,Ar=l.events.on("cellsFlashed",({rowKeys:e,columnIds:t,duration:r})=>{let n=e.length?e.map(s=>`[data-row-key="${CSS.escape(String(s))}"]`).join(","):".kanuni-datagrid-row",o=t.length?t.map(s=>`[data-column-id="${CSS.escape(s)}"]`).join(","):"[data-column-id]",a=[];D.querySelectorAll(n).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 d=setTimeout(()=>{for(let s of a)s.classList.remove("kanuni-datagrid-cell--flash");pn.delete(d);},r);pn.add(d);});function ge(e){let t=e.target,r=t.closest(".kanuni-datagrid-row");if(!r||!D.contains(r))return null;let n=r.getAttribute("data-row-key");if(n===null)return null;let o=l.getRows(),a=o.findIndex(s=>s!==void 0&&String(s.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 Co=e=>{let t=ge(e);t&&(_o?.(t.node),l.notifyRow("rowClicked",t.node,t.rowIndex),t.columnId&&l.notifyCell("cellClicked",t.node,t.rowIndex,t.columnId));},ko=e=>{let t=ge(e);if(t){if(In){let r=hn(t);r&&In(r);}Kt?.(t.node),l.notifyRow("rowDoubleClicked",t.node,t.rowIndex),t.columnId&&l.notifyCell("cellDoubleClicked",t.node,t.rowIndex,t.columnId);}};D.addEventListener("click",Co),D.addEventListener("dblclick",ko);function Mr(e){let t=0,r=J.querySelector(`[data-column-id="${CSS.escape(e)}"]`);r&&(t=r.scrollWidth),D.querySelectorAll(`[data-column-id="${CSS.escape(e)}"]`).forEach(n=>{n.scrollWidth>t&&(t=n.scrollWidth);}),t>0&&l.setColumnWidth(e,t+12,true);}function Dr(){if(P)for(let e of J.querySelectorAll(".kanuni-datagrid-filter-button")){let t=e.parentElement?.getAttribute("data-column-id");t&&e.classList.toggle("kanuni-datagrid-filter-button--active",l.getColumnFilter(t)!==null);}}let gn=false,xo=false,Fe=null;function Rt(){Fe!==null&&(clearTimeout(Fe),Fe=null);}function Tt(e){We.style.display=e?"":"none";}function St(){let e=l.getOverlay();if(gt.style.display=e==="noRows"?"":"none",Vt===false){Rt(),Tt(false);return}if(!(e==="loading"&&(gn||!xo))){Rt(),Tt(false);return}if(gn||$n<=0){Rt(),Tt(true);return}Fe!==null||We.style.display===""||(Fe=setTimeout(()=>{Fe=null,X||Tt(true);},$n));}let vo=false,fn=false,mn=false,bn=false,X=false;function Nr(){if(fn=false,!X){if(mn)mn=false,bn&&(bn=false,ce++),jt(),Qt(),nn(),ln();else {let e=W;jt(),W!==e&&(ce++,Qt(),nn(),ln());}tn(),Jn(),rn(),ao(),Dr(),cn(),yo(),ho(),St();}}function wn(e){X||(e&&(mn=true),!fn&&(fn=true,queueMicrotask(Nr)));}let Ir=[...An?[l.events.on("focusedRowChanged",e=>An({rowKey:e.rowKey,row:e.row}))]:[],...bl.map(e=>l.events.on(e,()=>wn(true))),...wl.map(e=>l.events.on(e,()=>{bn=true;})),...hl.map(e=>l.events.on(e,()=>wn(false))),l.events.on("overlayChanged",e=>{gn=e.manual===true&&e.overlay==="loading",X||St();}),l.events.on("busyChanged",e=>{xo=e.background===true,X||St();}),l.events.on("paginationChanged",()=>{X||wn(false);}),l.events.on("scrollRequested",e=>{if(X)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 t=e.scrollTop;t===void 0||Math.abs(S.scrollTop-t)<=1||setTimeout(()=>{X||Math.abs(S.scrollTop-t)<=1||(S.scrollTop=t,l.setScroll(S.scrollTop,Math.abs(S.scrollLeft)));},0);}),...Ot==="fitGrid"?[l.events.on("gridSizeChanged",()=>l.sizeColumnsToFit())]:[],...Ot==="fitCells"?[l.events.on("firstDataRendered",()=>{X||vo||(vo=true,queueMicrotask(()=>{if(!X)for(let e of l.getColumnStates())e.visible&&sn(e.id);}));})]:[]];Ot==="fitGrid"&&l.sizeColumnsToFit();function hn(e){if(!e.columnId||e.node.kind!=="data")return null;let t=te.find(r=>r.id===e.columnId);return t?{node:e.node,columnId:e.columnId,rowIndex:e.rowIndex,columnIndex:t.visualIndex,value:e.node.kind==="data"?l.getColumnModel().getCellValue(e.node.data,t.id):void 0}:null}let Eo=e=>{let t=e.target;if(Nn){let s=ge(e),c=s?hn(s):null;c&&Nn(c,e);}let r=t.closest(".kanuni-datagrid-row");if(!r||r.classList.contains("kanuni-datagrid-group-row"))return;let n=r.getAttribute("data-row-key");if(n===null)return;let o=l.getRows().find(s=>s!==void 0&&String(s.key)===n);if(!o||o.kind!=="data")return;l.handleRowClick(o.key,{ctrlKey:e.ctrlKey||rr&&!e.shiftKey,metaKey:e.metaKey,shiftKey:e.shiftKey});let a=t.closest(".kanuni-datagrid-cell"),d=a?te.find(s=>a.id.endsWith(`-${s.id}`))?.id:void 0;d&&l.focusCell(o.key,d);},Ro=e=>{if(!ct)return;let r=e.target.closest(".kanuni-datagrid-cell");if(!r||!D.contains(r)||e.relatedTarget?.closest?.(".kanuni-datagrid-cell")===r)return;let o=ge(e),a=o?hn(o):null;a&&ct(a,e);};D.addEventListener("mousedown",Eo),D.addEventListener("contextmenu",po),ct&&D.addEventListener("mouseover",Ro),Xe&&(B.addEventListener("dragstart",lr),B.addEventListener("dragover",ar),B.addEventListener("drop",ir),B.addEventListener("dragend",dr),B.addEventListener("dragleave",sr)),L.tabIndex=0;let To=e=>{let t=e.target;if(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)return;let r=resolveGridCommand({key:e.key,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,altKey:e.altKey});if(!r)return;if(r.type==="copy"){vt();return}if(r.type==="activate"){if(Kt){let a=l.getFocus(),d=a?l.getRows().find(s=>s!==void 0&&s.key===a.rowKey):void 0;d&&Kt(d);}r.preventDefault&&e.preventDefault();return}l.executeCommand(r),r.preventDefault&&e.preventDefault();let n=l.getFocusIndices();if(n){let d=l.getColumnLayout().center.findIndex(c=>c.state.id===l.getFocus()?.columnId),s=l.ensureVisible(n.rowIndex,d===-1?void 0:d);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",To);let Hr=Gn?attachStateStoring(l,Gn):null,Gr=typeof he=="object"?he.delay??400:400,Pr=he!==false&&!(typeof he=="object"&&he.enabled===false),$r=typeof he=="object"?he.showOnTruncation!==false:true,Je=null,Lt=null;function Ze(){Lt&&clearTimeout(Lt),Lt=null,Je?.remove(),Je=null;}let Kr=e=>e.scrollWidth>e.clientWidth+1||e.scrollHeight>e.clientHeight+1;function Or(e){let r=e.closest(".kanuni-datagrid-row")?.getAttribute("data-row-key"),n=te.find(s=>e.id.endsWith(`-${s.id}`));if(!r||!n)return null;let o=l.getRows().find(s=>s!==void 0&&String(s.key)===r);if(!o||o.kind!=="data")return null;let a=n.def,d=en(o.key,n.id,o.data);if(d)return d;if(typeof a.tooltip=="function")return a.tooltip({value:l.getColumnModel().getCellValue(o.data,n.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 $r&&Kr(e)?e.textContent??null:null}let So=e=>{if(!Pr)return;Ze();let t=e.target.closest(".kanuni-datagrid-cell");!t||!D.contains(t)||(Lt=setTimeout(()=>{let r=Or(t);if(!r)return;let n=t.getBoundingClientRect();Je=g(`${Tn(m)} kanuni-datagrid-portal`);let o=g("kanuni-datagrid-tooltip");o.setAttribute("role","tooltip"),o.textContent=r,o.style.position="fixed",o.style.left=`${n.left}px`,o.style.top=`${n.bottom+4}px`,o.style.zIndex="1001",Je.appendChild(o),document.body.appendChild(Je);},Gr));},Lo=()=>Ze();L.addEventListener("pointerover",So),L.addEventListener("pointerout",Lo),S.addEventListener("scroll",Ze,{passive:true});let Ao=()=>{if(l.setScroll(S.scrollTop,Math.abs(S.scrollLeft)),fe)for(let e of Mo())e.scroller.scrollLeft!==S.scrollLeft&&(e.scroller.scrollLeft=S.scrollLeft);};S.addEventListener("scroll",Ao,{passive:true});let fe=null,Mo=()=>{if(!Q||!fe)return [];let e=nt.get(Q);return e?[...e].filter(t=>t!==fe):[]},Do=null;if(Q){fe={controller:l,scroller:S};let e=nt.get(Q)??new Set;e.add(fe),nt.set(Q,e),Do=l.events.on("columnStateChanged",()=>{if(Rn.has(Q))return;let t=Mo();if(t.length===0)return;let r=l.getColumnStates();Rn.add(Q);try{for(let n of t)n.controller.applyColumnStates(r);}finally{Rn.delete(Q);}});}let No=()=>{l.setViewportSize(S.clientWidth,S.clientHeight),S.style.setProperty("--dg-viewport-width",`${S.clientWidth}px`);let e=B.getBoundingClientRect(),t=F.getBoundingClientRect();l.setChromeOffsets(e.top-t.top,t.bottom-e.bottom),calibrateMaxScrollOffset(S,l);};No();let At=null;return typeof ResizeObserver<"u"&&(At=new ResizeObserver(No),At.observe(S),At.observe(F)),jt(),Qt(),nn(),hr(),ln(),tn(),rn(),ao(),cn(),yo(),ho(),St(),Ye?.always&&Ut(true),{controller:l,element:L,setData:e=>l.setData(e),setColumns:e=>l.setColumns(e),destroy:()=>{if(!X){if(X=true,Ir.forEach(e=>e()),At?.disconnect(),Qn?.(),je&&(je=false,De--,De<=0&&(De=0,document.documentElement.classList.remove("kanuni-datagrid-printing"))),Do?.(),Q&&fe){let e=nt.get(Q);e?.delete(fe),e&&e.size===0&&nt.delete(Q),fe=null;}S.removeEventListener("scroll",Ao),D.removeEventListener("mousedown",Eo),D.removeEventListener("contextmenu",po),ct&&D.removeEventListener("mouseover",Ro),D.removeEventListener("click",Co),D.removeEventListener("dblclick",ko),Ar(),Rt();for(let e of pn)clearTimeout(e);L.removeEventListener("keydown",To),L.removeEventListener("pointerover",So),L.removeEventListener("pointerout",Lo),S.removeEventListener("scroll",Ze),Ze(),Hr?.(),V(),l.dispose(),L.remove();}}}}export{It as CHECKBOX_COLUMN_WIDTH,rt as DETAIL_COLUMN_WIDTH,Fo as PRINT_MAX_ROWS,Ht as ROW_DRAG_MIME,ot as ROW_NUMBER_COLUMN_WIDTH,yn as buildHeaderMenu,Tl as createGrid,kn as measureBestFitWidth};
package/dist/styles.css CHANGED
@@ -869,6 +869,14 @@
869
869
  color: var(--dg-text-muted);
870
870
  }
871
871
 
872
+ /* Ticks every row under the group (multiple selection + checkbox column). */
873
+ .kanuni-datagrid-group-checkbox {
874
+ margin: 0;
875
+ margin-inline-end: 6px;
876
+ vertical-align: middle;
877
+ cursor: pointer;
878
+ }
879
+
872
880
  .kanuni-datagrid-group-caption {
873
881
  color: var(--dg-text-muted);
874
882
  font-weight: 400;
@@ -925,6 +933,22 @@
925
933
  cursor: default;
926
934
  }
927
935
 
936
+ /* `grouping.display: 'aligned'` — the group's name inside the first column's
937
+ cell, and each summary under its own column. The cell clips like any
938
+ other; the twisty and count stay with the name. */
939
+ .kanuni-datagrid-group-inline {
940
+ display: inline-flex;
941
+ align-items: center;
942
+ gap: 6px;
943
+ min-width: 0;
944
+ white-space: nowrap;
945
+ }
946
+
947
+ .kanuni-datagrid-group-aggregate-value {
948
+ font-weight: 600;
949
+ font-variant-numeric: tabular-nums;
950
+ }
951
+
928
952
  .kanuni-datagrid-group-row--focused {
929
953
  outline: 2px solid var(--dg-focus-ring);
930
954
  outline-offset: -2px;
@@ -2083,6 +2107,11 @@
2083
2107
  .kanuni-datagrid-tree-cell--ancestor {
2084
2108
  color: var(--dg-text-muted, #64748b);
2085
2109
  }
2110
+ /* A made-up step of a path tree (`tree.getDataPath`) — a folder, not a
2111
+ record: its name reads as a heading over the rows beneath it. */
2112
+ .kanuni-datagrid-tree-path-label {
2113
+ font-weight: 600;
2114
+ }
2086
2115
  /* ── Cell flash (P1.7) ─────────────────────────────────────
2087
2116
  The "this number just changed" pulse. Driven by a class the adapter adds
2088
2117
  and removes; the colour is a token so all six themes and dark mode inherit
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kanunilabs/datagrid",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "High-performance data grid for vanilla JavaScript — no framework required. Virtualized rows and columns, a Web Worker pipeline, sorting, filtering, grouping and theming, with a UMD build for script-tag use.",
5
5
  "keywords": [
6
6
  "data-grid",
@@ -59,7 +59,7 @@
59
59
  "access": "public"
60
60
  },
61
61
  "dependencies": {
62
- "@kanunilabs/datagrid-core": "1.4.0"
62
+ "@kanunilabs/datagrid-core": "1.5.0"
63
63
  },
64
64
  "devDependencies": {
65
65
  "jsdom": "^30.0.1",
@@ -67,7 +67,7 @@
67
67
  "react-dom": "^19.0.0",
68
68
  "@types/node": "^22.0.0",
69
69
  "esbuild": "^0.27.7",
70
- "@kanunilabs/datagrid-react": "1.2.1"
70
+ "@kanunilabs/datagrid-react": "1.3.0"
71
71
  },
72
72
  "scripts": {
73
73
  "build": "tsup && node scripts/build-css.mjs && node scripts/build-umd.mjs",