@nice2dev/ui-forms 1.0.10 → 1.0.12

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.
@@ -0,0 +1,596 @@
1
+ "use strict";const e=require("react/jsx-runtime"),V=require("./index-P3TTpN4Q.cjs"),n=require("react"),Ei=require("react-dom"),En=({open:t,onClose:a,title:r,size:l="md",children:d,footer:m,closeOnOverlay:f=!0,closeOnEscape:o=!0,fullscreenable:p,zIndex:S,className:M,style:G,displayStyle:E})=>{const{t:F}=V.ue(),P=n.useContext(V.ut),W=n.useRef(null),[w,s]=n.useState(!1),y=V.Ts("modal",E),c=V.Fs("modal",E);if(V.Xs(W,t),n.useEffect(()=>{if(!t||!o)return;const O=H=>{H.key==="Escape"&&a()};return document.addEventListener("keydown",O),()=>document.removeEventListener("keydown",O)},[t,o,a]),n.useEffect(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[t]),!t||typeof document>"u")return null;const R=e.jsx("div",{className:"nice-modal-overlay",style:S?{zIndex:S}:void 0,onClick:f?a:void 0,children:e.jsxs("div",{ref:W,className:`nice-modal nice-modal--${w?"full":l} nice-modal--ds-${c} ${M||""}`,style:{...y,...G},role:"dialog","aria-modal":"true","aria-label":r,onClick:O=>O.stopPropagation(),children:[r&&e.jsxs("div",{className:"nice-modal__header",children:[e.jsx("h2",{className:"nice-modal__title",children:r}),e.jsxs("div",{className:"nice-modal__header-actions",children:[p&&e.jsx("button",{type:"button",className:"nice-modal__fullscreen",onClick:()=>s(O=>!O),"aria-label":w?"Exit fullscreen":"Fullscreen",children:w?"⇲":"⇱"}),e.jsx("button",{type:"button",className:"nice-modal__close",onClick:a,"aria-label":F("controls.close","Close"),children:e.jsx("svg",{width:"24",height:"24",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",children:e.jsx("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})})]})]}),e.jsx("div",{className:"nice-modal__body",children:d}),m&&e.jsx("div",{className:"nice-modal__footer",children:m})]})});return Ei.createPortal(R,(P==null?void 0:P.portalTarget)??document.body)};function Ii(t,a,r){const l=[];if(a<=1)return a===1&&l.push(1),l;const d=Math.max(2,t-r),m=Math.min(a-1,t+r);l.push(1),d>2&&l.push("dots");for(let f=d;f<=m;f++)l.push(f);return m<a-1&&l.push("dots"),l.push(a),l}const ai=({page:t,totalPages:a,onChange:r,showInfo:l,siblingCount:d=1,size:m="md",showFirstLast:f,showJumpInput:o,jumpInputLabel:p,showPageSize:S,pageSizeOptions:M,pageSize:G,onPageSizeChange:E,disabled:F,className:P,style:W})=>{const w=Ii(t,a,d);return e.jsxs("nav",{className:`nice-pagination nice-pagination--${m} ${P||""}`,style:W,"aria-label":"Pagination",children:[f&&e.jsx("button",{className:"nice-pagination__btn",disabled:F||t<=1,onClick:()=>r(1),"aria-label":"First page",title:"First page",children:"⏮"}),e.jsx("button",{className:"nice-pagination__btn",disabled:F||t<=1,onClick:()=>r(t-1),"aria-label":"Previous",children:e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z",clipRule:"evenodd"})})}),w.map((s,y)=>s==="dots"?e.jsx("span",{className:"nice-pagination__ellipsis",children:"…"},`dots-${y}`):e.jsx("button",{className:`nice-pagination__btn ${s===t?"nice-pagination__btn--active":""}`,disabled:F,onClick:()=>r(s),"aria-current":s===t?"page":void 0,children:s},s)),e.jsx("button",{className:"nice-pagination__btn",disabled:F||t>=a,onClick:()=>r(t+1),"aria-label":"Next",children:e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z",clipRule:"evenodd"})})}),f&&e.jsx("button",{className:"nice-pagination__btn",disabled:F||t>=a,onClick:()=>r(a),"aria-label":"Last page",title:"Last page",children:"⏭"}),l&&e.jsxs("span",{className:"nice-pagination__info",children:[t," / ",a]}),o&&e.jsxs("span",{className:"nice-pagination__jump",style:{display:"inline-flex",alignItems:"center",gap:6,marginLeft:8},children:[e.jsx("span",{style:{fontSize:"0.85rem",color:"var(--text-secondary)"},children:p??"Go to"}),e.jsx(V.Qe,{size:m==="lg"?"md":"sm",min:1,max:a,step:1,value:t,disabled:F,onChange:s=>{const y=typeof s=="number"?s:Number(s);if(!Number.isNaN(y)){const c=Math.max(1,Math.min(a,Math.floor(y)));r(c)}}})]}),S&&M&&M.length>0&&e.jsx("select",{className:"nice-pagination__size",value:G??M[0],disabled:F,onChange:s=>E==null?void 0:E(Number(s.target.value)),style:{marginLeft:8,padding:"4px 8px",border:"1px solid var(--border-color)",borderRadius:6,background:"var(--bg-primary)",color:"var(--text-primary)",font:"inherit",fontSize:"0.85rem"},"aria-label":"Rows per page",children:M.map(s=>e.jsxs("option",{value:s,children:[s," / page"]},s))})]})};function ri({columns:t,data:a,striped:r,compact:l,emptyText:d,className:m,style:f,accessMode:o,id:p,displayStyle:S}){const M=V.cl(o,p)==="hidden",G=V.Ts("table",S),E=V.Fs("table",S),[F,P]=n.useState(null),W=n.useMemo(()=>F?[...a].sort((s,y)=>{const c=s[F.field]??"",R=y[F.field]??"",O=typeof c=="number"?c-R:String(c).localeCompare(String(R));return F.dir==="desc"?-O:O}):a,[a,F]),w=s=>{P(y=>(y==null?void 0:y.field)===s?y.dir==="asc"?{field:s,dir:"desc"}:null:{field:s,dir:"asc"})};return M?null:e.jsx("div",{className:`nice-table-wrapper ${m||""}`,style:{...G,...f},children:e.jsxs("table",{className:`nice-table nice-table--ds-${E} ${r?"nice-table--striped":""} ${l?"nice-table--compact":""}`,"aria-rowcount":W.length,"aria-colcount":t.length,children:[e.jsx("thead",{children:e.jsx("tr",{children:t.map(s=>{const y=s.sortable?(F==null?void 0:F.field)===s.field?F.dir==="asc"?"ascending":"descending":"none":void 0;return e.jsxs("th",{style:{width:s.width,textAlign:s.align},className:s.sortable?"th--sortable":void 0,onClick:()=>s.sortable&&w(s.field),scope:"col","aria-sort":y,children:[s.header,s.sortable&&(F==null?void 0:F.field)===s.field&&e.jsx("span",{className:"nice-table__sort-icon","aria-hidden":"true",children:F.dir==="asc"?"↑":"↓"})]},s.field)})})}),e.jsx("tbody",{children:W.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:t.length,className:"nice-table__empty",children:d||"No data"})}):W.map((s,y)=>e.jsx("tr",{children:t.map(c=>e.jsx("td",{style:{textAlign:c.align},children:c.render?c.render(s[c.field],s):String(s[c.field]??"")},c.field))},y))})]})})}function li(t,a,r){const l=t.map(d=>d[a]).filter(d=>typeof d=="number");if(l.length===0)return r==="count"?"0":"";switch(r){case"sum":return l.reduce((d,m)=>d+m,0).toLocaleString();case"avg":return(l.reduce((d,m)=>d+m,0)/l.length).toLocaleString(void 0,{maximumFractionDigits:2});case"count":return String(t.length);case"min":return Math.min(...l).toLocaleString();case"max":return Math.max(...l).toLocaleString()}}function ln(t){return t.includes(",")||t.includes('"')||t.includes(`
2
+ `)?`"${t.replace(/"/g,'""')}"`:t}function Ti(t){return typeof t=="boolean"?t?e.jsx("svg",{className:"nice-datagrid__bool-icon nice-datagrid__bool-icon--true",width:"16",height:"16",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-label":"true",role:"img",children:e.jsx("path",{d:"M4 10.5l4 4L16 6"})}):e.jsx("svg",{className:"nice-datagrid__bool-icon nice-datagrid__bool-icon--false",width:"16",height:"16",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-label":"false",role:"img",children:e.jsx("path",{d:"M5 5l10 10M15 5L5 15"})}):String(t??"")}function cn({columns:t,data:a,keyField:r="id",dataSource:l,sortable:d=!0,sortField:m,sortDirection:f,onSort:o,selectable:p,selectedKeys:S,onSelectionChange:M,pagination:G,pageSize:E=10,page:F,onPageChange:P,totalRows:W,searchable:w,searchPlaceholder:s,virtualScroll:y,rowHeight:c=40,groupBy:R,groupRender:O,onCellEdit:H,editMode:de="inline",formItems:Ae,formColumns:A=2,editFormTitle:he,formProps:xe,onRowEdit:ge,onRowAdd:te,onRowDelete:ie,bulkActions:j,onBulkDelete:z,exportCsv:x,exportFilename:we="export",detailRow:se,expandedRowKeys:L,onExpandedRowChange:J,columnReorder:B,onColumnReorder:ne,columnResize:ve,rowDraggable:ue,onRowReorder:Te,striped:Ue,compact:Be,loading:ze,emptyText:Xe,toolbar:$e,onRowClick:Fe,pinnedTopKeys:Y,pinnedBottomKeys:ye,colSpan:I,showStatusBar:je,contextMenuItems:le,onContextMenuAction:_,printFriendly:X,keyboardNavigation:pe,focusedCell:Ze,onFocusedCellChange:q,cellRangeSelection:ae,selectedCellRange:nt,onCellRangeChange:_e,clipboard:ct,clipboardFormat:pt="text",onBeforeCopy:mt,onCopy:wt,onPaste:jt,quickFilters:qe,activeQuickFilters:At,onQuickFilterChange:T,columnGroups:oe,stateStorageKey:me,initialState:ke,onStateChange:ot,flashRowKeys:Ne,flashDuration:Oe=500,autoFitColumns:dt,showColumnStats:We,rowIndicator:et,frozenRows:kt,className:Gt,style:Bt,accessMode:Qt,id:Kt,displayStyle:Vt}){var Qn,Jn;const ut=V.cl(Qt,Kt),on=ut==="hidden",Jt=ut==="readOnly"||ut==="disabled",{t:Re}=V.ue();V.Ts("table",Vt),V.Fs("table",Vt);const Qe=V.Gd(l??null,{autoLoad:!!l,defaultPageSize:E}),Le=!!l,Pt=Le?Qe.data:a??[],Et=Le?Qe.loading:ze,[Ut,zt]=n.useState({field:"",dir:null}),[Wt,Yt]=n.useState(1),[u,h]=n.useState(new Set),[k,U]=n.useState(""),[Z,C]=n.useState(E),[$,Q]=n.useState(null),[Ie,Ee]=n.useState(null),[re,Ke]=n.useState(null),[it,ht]=n.useState(new Set),[at,gt]=n.useState(0),Ht=n.useRef(null),[It,Nt]=n.useState(new Set),Tt=L??It,[lt,dn]=n.useState({}),[Ct,Rt]=n.useState(null),[Lt,en]=n.useState(null),[yn,tn]=n.useState(null),[$t,un]=n.useState(null),[wn,jn]=n.useState([]),[Rn,mn]=n.useState(null),[kn,hn]=n.useState(new Set),[Ln,Fn]=n.useState(null),nn=n.useRef(null),Ve=Ze??yn,rt=nt??$t,ft=At??wn;n.useEffect(()=>{if(!me)return;const i=localStorage.getItem(`nice-datagrid-${me}`);if(i&&!ke)try{const g=JSON.parse(i);g.columnWidths&&dn(g.columnWidths),g.expandedGroups&&ht(new Set(g.expandedGroups))}catch{}},[me,ke]),n.useEffect(()=>{if(!(Ne!=null&&Ne.size))return;hn(new Set(Ne));const i=setTimeout(()=>hn(new Set),Oe);return()=>clearTimeout(i)},[Ne,Oe]),n.useEffect(()=>{if(!Lt)return;const i=()=>en(null);return document.addEventListener("click",i),()=>document.removeEventListener("click",i)},[Lt]);const Nn=n.useCallback((i,g)=>{le!=null&&le.length&&(i.preventDefault(),en({x:i.clientX,y:i.clientY,row:g}))},[le]),an=n.useCallback(i=>{const g=new Set(Tt);g.has(i)?g.delete(i):g.add(i),J?J(g):Nt(g)},[Tt,J]),v=n.useCallback((i,g)=>{var fe;if(!ve)return;g.preventDefault();const b=g.clientX,N=((fe=g.target.closest("th"))==null?void 0:fe.offsetWidth)??100,D=K=>{const Ce=Math.max(40,N+K.clientX-b);dn(Ge=>({...Ge,[i]:Ce}))},ee=()=>{document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",ee)};document.addEventListener("mousemove",D),document.addEventListener("mouseup",ee)},[ve]),ce=Le?((Qn=Qe.sort[0])==null?void 0:Qn.field)??"":m??Ut.field,be=Le?((Jn=Qe.sort[0])==null?void 0:Jn.direction)??null:f??Ut.dir,Se=Le?Qe.page:F??Wt,Me=S??u;n.useCallback(()=>{if(!me)return;const i={columnWidths:lt,sortField:ce||void 0,sortDirection:be,pageSize:Z,expandedGroups:Array.from(it)};localStorage.setItem(`nice-datagrid-${me}`,JSON.stringify(i)),ot==null||ot(i)},[me,lt,ce,be,Z,it,ot]);const Ye=n.useMemo(()=>t.filter(i=>!i.hidden),[t]),bt=n.useMemo(()=>Ye.filter(i=>i.pinned==="left"),[Ye]),st=n.useMemo(()=>Ye.filter(i=>i.pinned==="right"),[Ye]),gn=n.useMemo(()=>Ye.filter(i=>!i.pinned),[Ye]),Pe=n.useMemo(()=>[...bt,...gn,...st],[bt,gn,st]),bi=n.useMemo(()=>Ye.some(i=>i.aggregate),[Ye]),rn=bt.length>0||st.length>0,On=n.useCallback(i=>{const g=ce===i?be==="asc"?"desc":be==="desc"?null:"asc":"asc";Le?g?Qe.setSortField(i,g):Qe.setSort([]):o?o(i,g):zt({field:i,dir:g})},[ce,be,Le,Qe,o]),_t=n.useMemo(()=>{if(Le)return Pt;let i=[...Pt];if(k){const g=k.toLowerCase();i=i.filter(b=>Ye.some(N=>String(b[N.field]??"").toLowerCase().includes(g)))}return!o&&ce&&be&&i.sort((g,b)=>{const N=g[ce]??"",D=b[ce]??"",ee=typeof N=="number"?N-D:String(N).localeCompare(String(D));return be==="desc"?-ee:ee}),i},[Pt,k,Ye,ce,be,o,Le]),pn=Le?Qe.totalCount:W??_t.length,Xt=Le?Qe.pageSize:Z,_i=Math.max(1,Math.ceil(pn/Xt)),St=Le?_t:G&&!W?_t.slice((Se-1)*Xt,Se*Xt):_t,Cn=n.useCallback(i=>{Le?Qe.setPage(i):P?P(i):Yt(i)},[Le,Qe,P]),qt=n.useMemo(()=>St.map(i=>String(i[r])),[St,r]),Zt=qt.length>0&&qt.every(i=>Me.has(i)),Pn=qt.some(i=>Me.has(i)),Un=n.useCallback(()=>{const i=new Set(Me);Zt?qt.forEach(g=>i.delete(g)):qt.forEach(g=>i.add(g)),M?M(i):h(i)},[Zt,qt,Me,M]),Wn=n.useCallback(i=>{const g=new Set(Me);g.has(i)?g.delete(i):g.add(i),M?M(g):h(g)},[Me,M]),Gn=({field:i})=>ce!==i||!be?e.jsx("span",{className:"nice-table__sort-icon",style:{opacity:.3},children:"?"}):e.jsx("span",{className:"nice-table__sort-icon",children:"?"}),xt=n.useMemo(()=>{if(!R)return St.map((b,N)=>({type:"data",row:b,key:String(b[r]??N)}));const i=new Map;St.forEach(b=>{const N=b[R];i.has(N)||i.set(N,[]),i.get(N).push(b)});const g=[];return i.forEach((b,N)=>{const D=`__group_${String(N)}`,ee=it.has(D);g.push({type:"group",value:N,rows:b,expanded:ee,key:D}),ee&&b.forEach((fe,K)=>g.push({type:"data",row:fe,key:String(fe[r]??`${D}_${K}`)}))}),g},[St,R,r,it]),{pinnedTopRows:xi,pinnedBottomRows:vi,normalRows:yi}=n.useMemo(()=>{if(!(Y!=null&&Y.size)&&!(ye!=null&&ye.size))return{pinnedTopRows:[],pinnedBottomRows:[],normalRows:xt};const i=[],g=[],b=[];for(const N of xt){if(N.type==="data"){const D=N.key;if(Y!=null&&Y.has(D)){i.push(N);continue}if(ye!=null&&ye.has(D)){g.push(N);continue}}b.push(N)}return{pinnedTopRows:i,pinnedBottomRows:g,normalRows:b}},[xt,Y,ye]),Bn=n.useCallback(i=>{ht(g=>{const b=new Set(g);return b.has(i)?b.delete(i):b.add(i),b})},[]),wi=n.useMemo(()=>{var D;if(!y)return xt;const i=((D=Ht.current)==null?void 0:D.clientHeight)??400,g=Math.ceil(i/c),b=Math.max(0,Math.floor(at/c)-3),N=Math.min(xt.length-1,b+g+6);return xt.slice(b,N+1).map((ee,fe)=>({...ee,_vIdx:b+fe}))},[y,xt,at,c]),fn=n.useCallback((i,g,b)=>{!H||Jt||(Q({rowKey:i,field:g}),Ee(b))},[H]),Kn=n.useCallback(()=>{$&&H&&H($.rowKey,$.field,Ie),Q(null),Ee(null)},[$,Ie,H]),ji=n.useCallback(()=>{Q(null),Ee(null)},[]),ki=n.useCallback(()=>{const i=Ye,g=i.map(K=>ln(K.header)).join(","),b=_t.map(K=>i.map(Ce=>ln(String(K[Ce.field]??""))).join(",")),N=[g,...b].join(`
3
+ `),D=new Blob(["\uFEFF"+N],{type:"text/csv;charset=utf-8;"}),ee=URL.createObjectURL(D),fe=document.createElement("a");fe.href=ee,fe.download=`${we}.csv`,fe.click(),URL.revokeObjectURL(ee)},[Ye,_t,we]),bn=n.useCallback(i=>{q?q(i):tn(i)},[q]),_n=n.useCallback(i=>{_e?_e(i):un(i)},[_e]),vt=n.useMemo(()=>xt.filter(i=>i.type==="data").map(i=>i.key),[xt]),Ni=n.useCallback(i=>{if(!pe||$||!Ve)return;const g=vt.indexOf(Ve.rowKey),b=Pe.findIndex(fe=>fe.field===Ve.field);if(g<0||b<0)return;let N=g,D=b;switch(i.key){case"ArrowUp":N=Math.max(0,g-1);break;case"ArrowDown":N=Math.min(vt.length-1,g+1);break;case"ArrowLeft":D=Math.max(0,b-1);break;case"ArrowRight":D=Math.min(Pe.length-1,b+1);break;case"Tab":i.preventDefault(),i.shiftKey?D=Math.max(0,b-1):D=Math.min(Pe.length-1,b+1);break;case"Enter":{const fe=Pe[b];if(fe.editable&&H){const K=St.find(Ce=>String(Ce[r])===Ve.rowKey);K&&fn(Ve.rowKey,fe.field,K[fe.field])}return}case"Escape":bn(null),_n(null);return;case"Home":i.ctrlKey&&(N=0),D=0;break;case"End":i.ctrlKey&&(N=vt.length-1),D=Pe.length-1;break;case"PageUp":N=Math.max(0,g-Z);break;case"PageDown":N=Math.min(vt.length-1,g+Z);break;default:return}i.preventDefault();const ee={rowKey:vt[N],field:Pe[D].field};if(bn(ee),i.shiftKey&&ae){const fe=(rt==null?void 0:rt.start)??Ve;_n({start:fe,end:ee})}else _n(null)},[pe,$,Ve,vt,Pe,ae,rt,bn,_n,H,St,r,fn,Z]),Vn=n.useCallback(()=>{let i=[],g=[];if(rt){const b=vt.indexOf(rt.start.rowKey),N=vt.indexOf(rt.end.rowKey),D=Math.min(b,N),ee=Math.max(b,N),fe=Pe.findIndex(Je=>Je.field===rt.start.field),K=Pe.findIndex(Je=>Je.field===rt.end.field),Ce=Math.min(fe,K),Ge=Math.max(fe,K);g=Pe.slice(Ce,Ge+1).map(Je=>Je.field),i=St.filter(Je=>{const Ft=vt.indexOf(String(Je[r]));return Ft>=D&&Ft<=ee})}else Me.size>0&&(i=St.filter(b=>Me.has(String(b[r]))),g=Pe.map(b=>b.field));return{rows:i,fields:g}},[rt,vt,Pe,St,r,Me]),Yn=n.useCallback((i,g,b)=>{const N=Pe.filter(D=>g.includes(D.field));switch(b){case"json":return JSON.stringify(i.map(D=>Object.fromEntries(g.map(ee=>[ee,D[ee]]))),null,2);case"csv":{const D=N.map(fe=>ln(fe.header)).join(","),ee=i.map(fe=>N.map(K=>ln(String(fe[K.field]??""))).join(",")).join(`
4
+ `);return D+`
5
+ `+ee}case"html":{const D=N.map(fe=>`<th>${fe.header}</th>`).join(""),ee=i.map(fe=>`<tr>${N.map(K=>`<td>${fe[K.field]??""}</td>`).join("")}</tr>`).join("");return`<table><thead><tr>${D}</tr></thead><tbody>${ee}</tbody></table>`}case"markdown":{const D="| "+N.map(K=>K.header).join(" | ")+" |",ee="| "+N.map(()=>"---").join(" | ")+" |",fe=i.map(K=>"| "+N.map(Ce=>K[Ce.field]??"").join(" | ")+" |").join(`
6
+ `);return D+`
7
+ `+ee+`
8
+ `+fe}default:return i.map(D=>N.map(ee=>D[ee.field]??"").join(" ")).join(`
9
+ `)}},[Pe]),Sn=n.useCallback(async()=>{if(!ct)return;const{rows:i,fields:g}=Vn();if(!i.length||(mt==null?void 0:mt(i,g))===!1)return;const b=Yn(i,g,pt);await navigator.clipboard.writeText(b),wt==null||wt(i,g,pt)},[ct,Vn,mt,Yn,pt,wt]),Xn=n.useCallback(async()=>{if(!ct||!Ve||!jt)return;const i=(await navigator.clipboard.readText()).split(`
10
+ `).map(g=>g.split(" "));jt(i,Ve)},[ct,Ve,jt]);n.useEffect(()=>{if(!ct||!nn.current)return;const i=g=>{var b;(b=nn.current)!=null&&b.contains(document.activeElement)&&(g.type==="copy"&&(g.preventDefault(),Sn()),g.type==="paste"&&(g.preventDefault(),Xn()))};return document.addEventListener("copy",i),document.addEventListener("paste",i),()=>{document.removeEventListener("copy",i),document.removeEventListener("paste",i)}},[ct,Sn,Xn]);const Ci=n.useCallback(i=>{const g=ft.includes(i)?ft.filter(b=>b!==i):[...ft,i];T?T(g):jn(g)},[ft,T]),Si=n.useMemo(()=>{if(!(qe!=null&&qe.length)||!ft.length)return _t;const i=qe.filter(g=>ft.includes(g.key));return _t.filter(g=>i.every(b=>b.filter(g)))},[_t,qe,ft]),qn=qe!=null&&qe.length?Si:_t;n.useCallback(i=>{const g=_t.map(Ce=>Ce[i]).filter(Ce=>Ce!=null),b=g.filter(Ce=>typeof Ce=="number");if(b.length===0){const Ce=new Set(g).size;return{count:g.length,unique:Ce,type:"text"}}const N=b.reduce((Ce,Ge)=>Ce+Ge,0),D=N/b.length,ee=Math.min(...b),fe=Math.max(...b),K=Math.sqrt(b.reduce((Ce,Ge)=>Ce+(Ge-D)**2,0)/b.length);return{count:b.length,sum:N,avg:D,min:ee,max:fe,stdDev:K,type:"numeric"}},[_t]);const Mi=n.useCallback((i,g,b)=>{if(!i.cellVisualization)return null;const N=Number(g);if(isNaN(N))return null;const D=i.visualMin??0,ee=i.visualMax??100,fe=Math.max(0,Math.min(100,(N-D)/(ee-D)*100));switch(i.cellVisualization){case"progress":return e.jsxs("div",{className:"nice-datagrid__cell-progress",style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx("div",{style:{flex:1,height:6,background:"var(--border-color)",borderRadius:3,overflow:"hidden"},children:e.jsx("div",{style:{width:`${fe}%`,height:"100%",background:fe>80?"var(--color-success)":fe>50?"var(--color-primary)":"var(--color-warning)",transition:"width 0.3s ease"}})}),e.jsxs("span",{style:{fontSize:"0.75rem",minWidth:32,textAlign:"right"},children:[Math.round(fe),"%"]})]});case"rating":{const K=Math.round(N/ee*5);return e.jsx("div",{className:"nice-datagrid__cell-rating",children:[1,2,3,4,5].map(Ce=>e.jsx("span",{style:{color:Ce<=K?"var(--color-warning)":"var(--text-muted)",fontSize:"0.85rem"},children:"?"},Ce))})}case"trend":{const K=i.visualMin??N,Ce=N-K,Ge="?",Je=Ce>0?"var(--color-success)":Ce<0?"var(--color-danger)":"var(--text-muted)";return e.jsxs("span",{style:{color:Je,fontWeight:500},children:[Ge," ",Math.abs(Ce).toFixed(1),"%"]})}case"heatmap":{const K=fe/100,Ce=`rgba(${Math.round(255*K)}, ${Math.round(100*(1-K))}, ${Math.round(50*(1-K))}, 0.6)`;return e.jsx("span",{style:{background:Ce,padding:"2px 8px",borderRadius:4},children:N})}default:return null}},[]),Di=n.useCallback((i,g,b)=>{var N;if(!((N=i.conditionalFormats)!=null&&N.length))return{};for(const D of i.conditionalFormats)if(D.when(g,b,i.field))return{className:D.className,style:{...D.style,backgroundColor:D.backgroundColor,color:D.color}};return{}},[]),Mn=n.useCallback((i,g)=>{if(!rn||!i.pinned)return{};const b={position:"sticky",zIndex:2,background:"var(--bg-primary, #fff)"};if(i.pinned==="left"){let N=0;for(let D=0;D<g;D++){const ee=Pe[D];ee.pinned==="left"&&(N+=typeof ee.width=="number"?ee.width:parseInt(String(ee.width)||"100",10))}p&&g===0&&(N=36),b.left=N}else{let N=0;for(let D=Pe.length-1;D>g;D--){const ee=Pe[D];ee.pinned==="right"&&(N+=typeof ee.width=="number"?ee.width:parseInt(String(ee.width)||"100",10))}b.right=N}return b},[rn,Pe,p]),Zn=(i,g,b,N)=>($==null?void 0:$.rowKey)===b&&($==null?void 0:$.field)===i.field?i.editor?i.editor(Ie,g,ee=>Ee(ee)):e.jsx("input",{className:"nice-datagrid__edit-input",autoFocus:!0,value:Ie??"",onChange:ee=>Ee(ee.target.value),onBlur:Kn,onKeyDown:ee=>{ee.key==="Enter"&&Kn(),ee.key==="Escape"&&ji()}}):Mi(i,g[i.field],g)||(i.render?i.render(g[i.field],g,N):Ti(g[i.field])),Ai=(i,g,b,N)=>{const D=(Ve==null?void 0:Ve.rowKey)===b&&(Ve==null?void 0:Ve.field)===i.field,ee=rt&&(()=>{const K=vt.indexOf(rt.start.rowKey),Ce=vt.indexOf(rt.end.rowKey),Ge=vt.indexOf(b),Je=Pe.findIndex(Ot=>Ot.field===rt.start.field),Ft=Pe.findIndex(Ot=>Ot.field===rt.end.field);return Ge>=Math.min(K,Ce)&&Ge<=Math.max(K,Ce)&&N>=Math.min(Je,Ft)&&N<=Math.max(Je,Ft)})(),fe=Di(i,g[i.field],g);return{className:[fe.className,D&&"nice-datagrid__cell--focused",ee&&"nice-datagrid__cell--in-range"].filter(Boolean).join(" "),style:{...Mn(i,N),textAlign:i.align,...fe.style,...D?{outline:"2px solid var(--color-primary)",outlineOffset:-2}:{},...ee?{background:"var(--color-primary-light, rgba(59,130,246,0.15))"}:{}}}},xn=Pe.length+(p?1:0)+(se?1:0)+(ue?1:0)+(et?1:0),Dn=(i,g,b)=>{const{row:N,key:D}=i,ee=Me.has(D),fe=Tt.has(D),K=kn.has(D),Ce=[ee&&"nice-datagrid__row--selected",Ct===g&&"nice-datagrid__row--dragging",b&&"nice-datagrid__row--pinned",K&&"nice-datagrid__row--flash"].filter(Boolean).join(" ");return e.jsxs(n.Fragment,{children:[e.jsxs("tr",{className:Ce,onClick:()=>Fe==null?void 0:Fe(N),onDoubleClick:de==="popup"&&(ge||H)?()=>Ke({key:D,data:{...N}}):void 0,onContextMenu:Ge=>Nn(Ge,N),style:Fe||de==="popup"?{cursor:"pointer"}:void 0,draggable:ue,onDragStart:ue?()=>Rt(g):void 0,onDragOver:ue?Ge=>Ge.preventDefault():void 0,onDrop:ue&&Te&&Ct!=null?()=>{Te(Ct,g),Rt(null)}:void 0,onDragEnd:ue?()=>Rt(null):void 0,children:[et&&e.jsx("td",{className:"nice-datagrid__row-indicator",style:{width:32,padding:"0 4px"},children:et(N)}),se&&e.jsx("td",{className:"nice-datagrid__expand-col",onClick:Ge=>{Ge.stopPropagation(),an(D)},children:e.jsx("span",{className:"nice-datagrid__expand-btn",children:"?"})}),ue&&e.jsx("td",{className:"nice-datagrid__drag-handle",style:{cursor:"grab",textAlign:"center",color:"var(--text-muted)"},children:"?"}),p&&e.jsx("td",{className:"nice-datagrid__checkbox",onClick:Ge=>Ge.stopPropagation(),style:rn?{position:"sticky",left:0,zIndex:1,background:"var(--bg-primary, #fff)"}:void 0,children:e.jsx("input",{type:"checkbox",checked:ee,onChange:()=>Wn(D),"aria-label":`Select row ${D}`})}),(()=>{let Ge=0;return Pe.map((Je,Ft)=>{if(Ge>0)return Ge--,null;const Ot=I?I(N,Je,Ft):void 0;Ot&&Ot>1&&(Ge=Ot-1);const Hn=Ai(Je,N,D,Ft);return e.jsx("td",{colSpan:Ot,className:Hn.className,style:Hn.style,onClick:pe?()=>bn({rowKey:D,field:Je.field}):void 0,onDoubleClick:Je.editable&&H?()=>fn(D,Je.field,N[Je.field]):void 0,children:Zn(Je,N,D,g)},Je.field)})})()]}),se&&fe&&e.jsx("tr",{className:"nice-datagrid__detail-row",children:e.jsx("td",{colSpan:xn,children:se(N)})})]},D)};return on?null:e.jsxs("div",{ref:nn,className:`nice-datagrid ${X?"nice-datagrid--print":""} ${Gt||""}`,style:Bt,role:"grid","aria-label":Re("datagrid.title","Data Grid"),"aria-rowcount":xt.length,"aria-colcount":Ye.length,"aria-busy":Et||void 0,tabIndex:pe?0:void 0,onKeyDown:pe?Ni:void 0,children:[(w||$e||x||(qe==null?void 0:qe.length)||te)&&e.jsxs("div",{className:"nice-datagrid__toolbar",children:[w&&e.jsx("div",{className:"nice-datagrid__search",children:e.jsx("input",{type:"text",value:Le?Qe.search:k,"aria-label":Re("controls.search","Search"),onChange:i=>{Le?Qe.setSearch(i.target.value):(U(i.target.value),Cn(1))},placeholder:s||Re("controls.search","Search...")})}),qe&&qe.length>0&&e.jsx("div",{className:"nice-datagrid__quick-filters",style:{display:"flex",gap:6,flexWrap:"wrap"},children:qe.map(i=>e.jsxs("button",{className:`nice-datagrid__quick-filter ${ft.includes(i.key)?"nice-datagrid__quick-filter--active":""}`,onClick:()=>Ci(i.key),style:{display:"inline-flex",alignItems:"center",gap:4,padding:"3px 10px",fontSize:"0.75rem",border:"1px solid var(--border-color)",borderRadius:12,background:ft.includes(i.key)?`var(--color-${i.color||"primary"})`:"var(--bg-primary)",color:ft.includes(i.key)?"var(--bg-primary, #fff)":"inherit",cursor:"pointer",transition:"all 0.15s ease"},children:[i.icon&&e.jsx("span",{children:i.icon}),i.label]},i.key))}),ct&&e.jsx("button",{className:"nice-btn nice-btn--sm nice-btn--ghost",onClick:Sn,title:Re("controls.copy","Copy selected"),style:{marginLeft:4},children:"??"}),x&&e.jsx("button",{className:"nice-btn nice-btn--sm",onClick:ki,title:Re("controls.exportCsv","Export CSV"),children:"CSV ?"}),te&&e.jsxs("button",{type:"button",className:"nice-btn nice-btn--sm nice-btn--primary",onClick:()=>Ke({key:null,data:{}}),title:Re("datagrid.addRow","Add row"),children:["+ ",Re("datagrid.add","Add")]}),$e]}),p&&Me.size>0&&((j==null?void 0:j.length)||z)&&e.jsxs("div",{className:"nice-datagrid__bulk-toolbar",role:"toolbar","aria-label":Re("datagrid.bulkActions","Bulk actions"),style:{display:"flex",alignItems:"center",gap:8,padding:"6px 12px",background:"var(--bg-tertiary, #f1f5f9)",borderBottom:"1px solid var(--border-color)",flexWrap:"wrap"},children:[e.jsx("span",{style:{fontSize:"0.85rem",color:"var(--text-secondary)"},children:Re("datagrid.selectedCount","{count} selected").replace("{count}",String(Me.size))}),(j||[]).map(i=>{var D;const g=Array.from(Me),b=qn.filter(ee=>Me.has(String(ee[r]))),N=((D=i.disabled)==null?void 0:D.call(i,g,b))||!1;return e.jsxs("button",{type:"button",className:`nice-btn nice-btn--sm nice-btn--${i.variant||"secondary"}`,disabled:N,onClick:()=>i.onClick(g,b),children:[i.icon,i.icon&&" ",i.label]},i.key)}),z&&!(j!=null&&j.length)&&e.jsxs("button",{type:"button",className:"nice-btn nice-btn--sm nice-btn--danger",onClick:()=>{const i=Array.from(Me),g=qn.filter(b=>Me.has(String(b[r])));z(i,g)},children:["?? ",Re("datagrid.deleteSelected","Delete selected")]}),e.jsx("button",{type:"button",className:"nice-btn nice-btn--xs nice-btn--ghost",onClick:()=>{const i=new Set;S===void 0&&h(i),M==null||M(i)},style:{marginLeft:"auto"},children:Re("datagrid.clearSelection","Clear")})]}),e.jsxs("div",{ref:Ht,className:`nice-datagrid__table-wrap ${y?"nice-datagrid__table-wrap--virtual":""}`,style:y?{maxHeight:Math.min(xt.length*c,600),overflowY:"auto"}:void 0,onScroll:y?i=>gt(i.currentTarget.scrollTop):void 0,children:[y&&e.jsxs("div",{style:{height:xt.length*c,position:"relative"},children:[e.jsx("table",{className:`${Ue?"nice-table--striped":""} ${Be?"nice-table--compact":""}`,style:{position:"sticky",top:0,zIndex:3},children:e.jsx("thead",{children:e.jsxs("tr",{children:[se&&e.jsx("th",{className:"nice-datagrid__expand-col",style:{width:36}}),ue&&e.jsx("th",{style:{width:28}}),p&&e.jsx("th",{className:"nice-datagrid__checkbox",style:rn?{position:"sticky",left:0,zIndex:3,background:"var(--bg-primary, #fff)"}:void 0,children:e.jsx("input",{type:"checkbox",checked:Zt,ref:i=>{i&&(i.indeterminate=Pn&&!Zt)},onChange:Un,"aria-label":Re("controls.selectAll","Select all")})}),Pe.map((i,g)=>e.jsxs("th",{style:{width:lt[i.field]||i.width,minWidth:i.minWidth,textAlign:i.align,position:"relative",...Mn(i,g)},className:d&&i.sortable!==!1?"nice-datagrid__th--sortable":void 0,onClick:()=>d&&i.sortable!==!1&&On(i.field),children:[i.header,d&&i.sortable!==!1&&e.jsx(Gn,{field:i.field}),ve&&e.jsx("span",{className:"nice-datagrid__resize-handle",onMouseDown:b=>{b.stopPropagation(),v(i.field,b)}})]},i.field))]})})}),wi.map((i,g)=>{const b=i._vIdx??0;if(i.type==="group"){const K=i;return e.jsxs("div",{className:"nice-datagrid__group-row",style:{position:"absolute",top:b*c,height:c,left:0,right:0},onClick:()=>Bn(K.key),children:[e.jsx("span",{className:"nice-datagrid__group-toggle",children:(K.expanded,"?")}),O?O(K.value,K.rows):e.jsxs(e.Fragment,{children:[String(K.value)," (",K.rows.length,")"]})]},K.key)}const{row:N,key:D}=i,ee=Me.has(D),fe=Tt.has(D);return e.jsxs(n.Fragment,{children:[e.jsxs("div",{className:`nice-datagrid__vrow ${ee?"nice-datagrid__row--selected":""} ${Ct===g?"nice-datagrid__row--dragging":""}`,style:{position:"absolute",top:b*c,height:c,left:0,right:0,display:"flex",alignItems:"center"},onClick:()=>Fe==null?void 0:Fe(N),onDoubleClick:de==="popup"&&(ge||H)?()=>Ke({key:D,data:{...N}}):void 0,draggable:ue,onDragStart:ue?()=>Rt(g):void 0,onDragOver:ue?K=>K.preventDefault():void 0,onDrop:ue&&Te&&Ct!=null?()=>{Te(Ct,g),Rt(null)}:void 0,onDragEnd:ue?()=>Rt(null):void 0,children:[se&&e.jsx("div",{className:"nice-datagrid__expand-col",style:{width:36,flexShrink:0,textAlign:"center",cursor:"pointer"},onClick:K=>{K.stopPropagation(),an(D)},children:e.jsx("span",{className:"nice-datagrid__expand-btn",children:"?"})}),ue&&e.jsx("div",{style:{width:28,flexShrink:0,cursor:"grab",textAlign:"center",color:"var(--text-muted)"},children:"?"}),p&&e.jsx("div",{className:"nice-datagrid__checkbox",style:{width:36,flexShrink:0},onClick:K=>K.stopPropagation(),children:e.jsx("input",{type:"checkbox",checked:ee,onChange:()=>Wn(D)})}),Pe.map(K=>e.jsx("div",{className:"nice-datagrid__vcell",style:{width:lt[K.field]||K.width||"auto",flex:lt[K.field]||K.width?`0 0 ${typeof(lt[K.field]||K.width)=="number"?(lt[K.field]||K.width)+"px":lt[K.field]||K.width}`:1,textAlign:K.align,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",padding:"0 8px"},onDoubleClick:K.editable&&H?()=>fn(D,K.field,N[K.field]):void 0,children:Zn(K,N,D,b)},K.field))]}),se&&fe&&e.jsx("div",{className:"nice-datagrid__detail-row",style:{position:"absolute",top:(b+1)*c,left:0,right:0,padding:"8px 12px",background:"var(--bg-secondary, #f8f8f8)"},children:se(N)})]},D)})]}),!y&&e.jsxs("table",{className:`${Ue?"nice-table--striped":""} ${Be?"nice-table--compact":""}`,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[se&&e.jsx("th",{className:"nice-datagrid__expand-col",style:{width:36}}),ue&&e.jsx("th",{style:{width:28}}),p&&e.jsx("th",{className:"nice-datagrid__checkbox",style:rn?{position:"sticky",left:0,zIndex:3,background:"var(--bg-primary, #fff)"}:void 0,children:e.jsx("input",{type:"checkbox",checked:Zt,ref:i=>{i&&(i.indeterminate=Pn&&!Zt)},onChange:Un,"aria-label":Re("controls.selectAll","Select all")})}),Pe.map((i,g)=>{const b=d&&i.sortable!==!1,N=b?ce===i.field?be==="asc"?"ascending":be==="desc"?"descending":"none":"none":void 0;return e.jsxs("th",{style:{width:lt[i.field]||i.width,minWidth:i.minWidth,textAlign:i.align,position:"relative",...Mn(i,g)},className:b?"nice-datagrid__th--sortable":void 0,onClick:()=>b&&On(i.field),"aria-sort":N,scope:"col",children:[i.header,b&&e.jsx(Gn,{field:i.field}),ve&&e.jsx("span",{className:"nice-datagrid__resize-handle",onMouseDown:D=>{D.stopPropagation(),v(i.field,D)}})]},i.field)})]})}),e.jsx("tbody",{children:Et?e.jsx("tr",{children:e.jsx("td",{colSpan:xn,className:"nice-datagrid__empty",children:e.jsx("div",{className:"nice-spinner nice-spinner--md",style:{margin:"0 auto"}})})}):xt.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:xn,className:"nice-datagrid__empty",children:Xe||Re("controls.noData","No data available")})}):e.jsxs(e.Fragment,{children:[xi.map((i,g)=>i.type==="data"&&Dn(i,g,"top")),yi.map((i,g)=>{if(i.type==="group"){const b=i;return e.jsx("tr",{className:"nice-datagrid__group-row",onClick:()=>Bn(b.key),children:e.jsxs("td",{colSpan:xn,className:"nice-datagrid__group-cell",children:[e.jsx("span",{className:"nice-datagrid__group-toggle",children:(b.expanded,"?")}),O?O(b.value,b.rows):e.jsxs(e.Fragment,{children:[String(b.value)," (",b.rows.length,")"]})]})},b.key)}return Dn(i,g)}),vi.map((i,g)=>i.type==="data"&&Dn(i,g,"bottom"))]})}),bi&&!Et&&St.length>0&&e.jsx("tfoot",{children:e.jsxs("tr",{className:"nice-datagrid__aggregate-row",children:[p&&e.jsx("td",{}),Pe.map(i=>e.jsx("td",{style:{textAlign:i.align,fontWeight:600},children:i.aggregate?(i.aggregateLabel||i.aggregate.toUpperCase())+": "+li(_t,i.field,i.aggregate):""},i.field))]})})]})]}),G&&e.jsxs("div",{className:"nice-datagrid__footer",children:[e.jsxs("span",{className:"nice-datagrid__footer-info",children:[Re("controls.showing","Showing")," ",(Se-1)*Xt+1,"�",Math.min(Se*Xt,pn)," ",Re("controls.of","of")," ",pn]}),e.jsx(ai,{page:Se,totalPages:_i,onChange:Cn,showInfo:!0,pageSize:Xt,showPageSize:!0,pageSizeOptions:[5,10,25,50,100],onPageSizeChange:i=>{Le?Qe.setPageSize(i):(C(i),Cn(1))},showFirstLast:!0})]}),je&&!Et&&e.jsxs("div",{className:"nice-datagrid__status-bar",children:[e.jsxs("span",{children:[Re("controls.totalRows","Total rows"),": ",pn]}),p&&Me.size>0&&e.jsxs("span",{children:[Re("controls.selected","Selected"),": ",Me.size]})]}),Lt&&le&&e.jsx("div",{className:"nice-datagrid__context-menu",style:{position:"fixed",left:Lt.x,top:Lt.y,zIndex:9999},onClick:i=>i.stopPropagation(),children:le.map(i=>e.jsxs("button",{className:"nice-datagrid__context-item",disabled:i.disabled,onClick:()=>{_==null||_(i.key,Lt.row),en(null)},children:[i.icon&&e.jsx("span",{className:"nice-datagrid__context-icon",children:i.icon}),i.label]},i.key))}),(de==="popup"||te)&&re&&(()=>{const i=re.key===null,g=Ae??t.filter(b=>!b.hidden&&b.field!==r).map(b=>{var D;let N="text";return b.dataType==="number"||b.dataType==="currency"||b.dataType==="percent"?N="number":b.dataType==="boolean"?N="checkbox":b.dataType==="date"&&(N="date"),{field:b.field,label:b.header,type:N,required:(D=b.validation)==null?void 0:D.required}});return e.jsx(En,{open:!0,onClose:()=>Ke(null),title:he??(i?Re("datagrid.addRow","Add row"):Re("datagrid.editRow","Edit row")),size:"lg",children:e.jsx(V.Pa,{items:g,data:re.data,columns:A,showActions:!0,submitLabel:i?Re("controls.add","Add"):Re("controls.save","Save"),cancelLabel:Re("controls.cancel","Cancel"),onCancel:()=>Ke(null),...xe,onFieldChange:(b,N)=>Ke(D=>D&&{...D,data:{...D.data,[b]:N}}),onSubmit:b=>{i?te==null||te(b):re.key&&(ge?ge(re.key,b):H&&Object.keys(b).forEach(N=>{H(re.key,N,b[N])})),Ke(null)}})})})()]})}cn.displayName="NiceDataGrid";const $i=Object.freeze(Object.defineProperty({__proto__:null,NiceDataGrid:cn},Symbol.toStringTag,{value:"Module"}));function zi(t,a){return t.filter(r=>a.every(l=>{const d=r[l.field],m=l.value;switch(l.operator){case"eq":return d===m;case"ne":return d!==m;case"gt":return typeof d=="number"&&typeof m=="number"&&d>m;case"gte":return typeof d=="number"&&typeof m=="number"&&d>=m;case"lt":return typeof d=="number"&&typeof m=="number"&&d<m;case"lte":return typeof d=="number"&&typeof m=="number"&&d<=m;case"contains":return String(d).toLowerCase().includes(String(m).toLowerCase());case"startsWith":return String(d).toLowerCase().startsWith(String(m).toLowerCase());case"endsWith":return String(d).toLowerCase().endsWith(String(m).toLowerCase());default:return!0}}))}function Ri(t){return t.map(a=>({field:a.field,type:a.dataType||"string",label:typeof a.header=="string"?a.header:a.field}))}function Li(t,a){const{enableAI:r=!0,aiModel:l,enableNLSearch:d=!0,enableInsights:m=!0,nlPlaceholder:f,onAIFilter:o,onInsights:p,showAISearchBar:S=!0,exampleQueries:M=["Show items from last week","Filter by status = active","Orders over $1000",'Names starting with "A"'],columns:G,data:E,...F}=t,[P,W]=n.useState(""),[w,s]=n.useState([]),[y,c]=n.useState([]),[R,O]=n.useState(!1),[H,de]=n.useState(null),Ae=n.useRef(null),{t:A}=V.ue(),he=V.me(),{parseFilter:xe,isLoading:ge}=V.Md(),te=r&&he.isConfigured,ie=w.length>0?zi(E||[],w):E,j=n.useCallback(async J=>{if(!te||!d||!J.trim())return;de(J);const B=Ri(G);try{const ne=await xe(J,B);s(ne),o==null||o(J,ne)}catch{s([])}},[te,d,G,xe,o]),z=n.useCallback(()=>{s([]),de(null),W("")},[]),x=n.useCallback(()=>w,[w]),we=n.useCallback(async()=>{if(!te||!m||!(E!=null&&E.length))return[];try{const J=await he.complete([{role:"user",content:`Analyze this data and provide 3-5 key insights. Data sample (${E.length} total rows): ${JSON.stringify(E.slice(0,20))}
11
+
12
+ Columns: ${G.map(B=>B.field).join(", ")}
13
+
14
+ Return a JSON array of insight strings. Be specific with numbers and trends.`}],{temperature:.3,maxTokens:500});try{const B=JSON.parse(J.content),ne=Array.isArray(B)?B:[];return c(ne),p==null||p(ne),ne}catch{return[]}}catch{return[]}},[te,m,E,G,he,p]),se=J=>{J.preventDefault(),P.trim()&&j(P)},L=J=>{W(J),j(J)};return n.useImperativeHandle(a,()=>({applyNLFilter:j,clearAIFilters:z,getAIFilters:x,generateInsights:we})),e.jsxs("div",{className:"nice-data-grid-ai","data-testid":t["data-testid"],children:[S&&te&&d&&e.jsxs("div",{className:"nice-data-grid-ai__search-bar",children:[e.jsx("div",{className:"nice-data-grid-ai__search-left",children:e.jsx("span",{className:"nice-data-grid-ai__badge",children:"AI"})}),e.jsxs("form",{onSubmit:se,className:"nice-data-grid-ai__search-form",children:[e.jsxs("div",{className:"nice-data-grid-ai__input-wrapper",children:[e.jsx("span",{className:"nice-data-grid-ai__search-icon",children:"🔍"}),e.jsx("input",{ref:Ae,type:"text",value:P,onChange:J=>W(J.target.value),placeholder:f||A("dataGridAI.searchPlaceholder","Search with natural language..."),className:"nice-data-grid-ai__input",disabled:ge}),ge&&e.jsx("span",{className:"nice-data-grid-ai__loading-spinner"}),P&&!ge&&e.jsx("button",{type:"button",className:"nice-data-grid-ai__clear-input",onClick:()=>W(""),children:"✕"})]}),e.jsx("button",{type:"submit",className:"nice-data-grid-ai__search-btn",disabled:ge||!P.trim(),children:ge?A("dataGridAI.searching","Searching..."):A("dataGridAI.search","Search")})]}),m&&e.jsxs("button",{type:"button",className:"nice-data-grid-ai__insights-btn",onClick:()=>{we(),O(!0)},disabled:ge||!(E!=null&&E.length),title:A("dataGridAI.generateInsights","Generate AI Insights"),children:["💡 ",A("dataGridAI.insights","Insights")]})]}),S&&te&&d&&!H&&M.length>0&&e.jsxs("div",{className:"nice-data-grid-ai__examples",children:[e.jsx("span",{className:"nice-data-grid-ai__examples-label",children:A("dataGridAI.tryAsking","Try asking:")}),e.jsx("div",{className:"nice-data-grid-ai__examples-list",children:M.slice(0,4).map((J,B)=>e.jsxs("button",{type:"button",className:"nice-data-grid-ai__example",onClick:()=>L(J),children:['"',J,'"']},B))})]}),H&&w.length>0&&e.jsxs("div",{className:"nice-data-grid-ai__active-filter",children:[e.jsxs("div",{className:"nice-data-grid-ai__filter-info",children:[e.jsx("span",{className:"nice-data-grid-ai__filter-icon",children:"🎯"}),e.jsxs("span",{className:"nice-data-grid-ai__filter-query",children:['"',H,'"']}),e.jsxs("span",{className:"nice-data-grid-ai__filter-count",children:["(",(ie==null?void 0:ie.length)||0," ",A("dataGridAI.results","results"),")"]})]}),e.jsx("div",{className:"nice-data-grid-ai__filter-badges",children:w.map((J,B)=>e.jsxs("span",{className:"nice-data-grid-ai__filter-badge",children:[J.field," ",J.operator," ",String(J.value)]},B))}),e.jsxs("button",{type:"button",className:"nice-data-grid-ai__clear-filter",onClick:z,children:["✕ ",A("dataGridAI.clearFilter","Clear")]})]}),e.jsx("div",{className:"nice-data-grid-ai__grid-wrapper",children:e.jsx(cn,{columns:G,data:ie,...F})}),R&&e.jsxs("div",{className:"nice-data-grid-ai__insights-panel",children:[e.jsxs("div",{className:"nice-data-grid-ai__insights-header",children:[e.jsxs("h4",{children:["💡 ",A("dataGridAI.aiInsights","AI Insights")]}),e.jsx("button",{type:"button",className:"nice-data-grid-ai__insights-close",onClick:()=>O(!1),children:"✕"})]}),e.jsx("div",{className:"nice-data-grid-ai__insights-body",children:ge?e.jsx("div",{className:"nice-data-grid-ai__insights-loading",children:A("dataGridAI.analyzing","Analyzing data...")}):y.length>0?e.jsx("ul",{className:"nice-data-grid-ai__insights-list",children:y.map((J,B)=>e.jsxs("li",{className:"nice-data-grid-ai__insight",children:[e.jsx("span",{className:"nice-data-grid-ai__insight-bullet",children:"•"}),J]},B))}):e.jsx("div",{className:"nice-data-grid-ai__insights-empty",children:A("dataGridAI.noInsights","Click to generate insights from your data")})}),e.jsx("div",{className:"nice-data-grid-ai__insights-footer",children:e.jsxs("button",{type:"button",className:"nice-data-grid-ai__refresh-insights",onClick:()=>we(),disabled:ge,children:["🔄 ",A("dataGridAI.refresh","Refresh")]})})]})]})}n.forwardRef(Li);const si=({items:t,selectedKeys:a=[],onSelectionChange:r,selectionMode:l="none",searchable:d,searchPlaceholder:m,grouped:f,groupField:o="group",reorderable:p,onReorder:S,onItemClick:M,renderItem:G,showCheckboxes:E,loading:F,emptyText:P,size:W="md",bordered:w=!0,swipeActions:s,className:y,style:c,accessMode:R,id:O})=>{const H=V.cl(R,O)==="hidden",{t:de}=V.ue(),[Ae,A]=n.useState(""),[he,xe]=n.useState(null),[ge,te]=n.useState(null),ie=n.useRef(null),j=n.useMemo(()=>{if(!Ae)return t;const L=Ae.toLowerCase();return t.filter(J=>J.text.toLowerCase().includes(L))},[t,Ae]),z=n.useMemo(()=>{if(!f)return null;const L=new Map;return j.forEach(J=>{const B=String(J[o]??"");L.has(B)||L.set(B,[]),L.get(B).push(J)}),L},[j,f,o]),x=n.useCallback(L=>{r&&(l==="single"?r(a.includes(L)?[]:[L]):l==="multiple"&&r(a.includes(L)?a.filter(J=>J!==L):[...a,L]))},[a,l,r]),we=n.useCallback(L=>{he!==null&&he!==L&&S&&S(he,L),xe(null)},[he,S]),se=(L,J)=>{const B=a.includes(L.key),ne=ge===L.key;return e.jsxs("li",{className:`nice-list__item ${B?"nice-list__item--selected":""} ${L.disabled?"nice-list__item--disabled":""} ${ne?"nice-list__item--swiped":""}`,onClick:()=>{L.disabled||(x(L.key),M==null||M(L))},draggable:p,onDragStart:()=>xe(J),onDragOver:ve=>ve.preventDefault(),onDrop:()=>we(J),onTouchStart:s!=null&&s.length?ve=>{ie.current={x:ve.touches[0].clientX,key:L.key}}:void 0,onTouchEnd:s!=null&&s.length?ve=>{if(!ie.current)return;const ue=ve.changedTouches[0].clientX-ie.current.x;ue<-50&&ie.current.key===L.key?te(L.key):ue>50&&te(null),ie.current=null}:void 0,role:l!=="none"?"option":void 0,"aria-selected":l!=="none"?B:void 0,children:[e.jsxs("div",{className:"nice-list__item-content",children:[E&&l!=="none"&&e.jsx("input",{type:"checkbox",checked:B,readOnly:!0,tabIndex:-1,className:"nice-list__checkbox"}),G?G(L):e.jsxs(e.Fragment,{children:[L.icon&&e.jsx("span",{className:"nice-list__icon",children:L.icon}),e.jsx("span",{className:"nice-list__text",children:L.text}),L.badge&&e.jsx("span",{className:"nice-list__badge",children:L.badge})]})]}),s&&ne&&e.jsx("div",{className:"nice-list__swipe-actions",children:s.map(ve=>e.jsx("button",{className:"nice-list__swipe-btn",style:ve.color?{backgroundColor:ve.color}:void 0,onClick:ue=>{ue.stopPropagation(),ve.onClick(L),te(null)},children:ve.label},ve.key))})]},L.key)};return H?null:e.jsxs("div",{className:`nice-list nice-list--${W} ${w?"nice-list--bordered":""} ${y||""}`,style:c,children:[d&&e.jsx("div",{className:"nice-list__search",children:e.jsx("input",{type:"text",value:Ae,onChange:L=>A(L.target.value),placeholder:m||de("controls.search","Search...")})}),F?e.jsx("div",{className:"nice-list__loading",children:e.jsx("div",{className:"nice-spinner nice-spinner--sm"})}):j.length===0?e.jsx("div",{className:"nice-list__empty",children:P||de("controls.noData","No data available")}):z?e.jsx("div",{role:"listbox",children:Array.from(z.entries()).map(([L,J])=>e.jsxs("div",{className:"nice-list__group",children:[e.jsx("div",{className:"nice-list__group-header",children:L}),e.jsx("ul",{className:"nice-list__items",children:J.map((B,ne)=>se(B,ne))})]},L))}):e.jsx("ul",{className:"nice-list__items",role:"listbox",children:j.map((L,J)=>se(L,J))})]})};function ci(t){const a=[];if(t.children)for(const r of t.children)a.push(r.key),a.push(...ci(r));return a}function An(t,a){if(!t.children||t.children.length===0)return a.has(t.key)?"checked":"unchecked";let r=!0,l=a.has(t.key);for(const d of t.children){const m=An(d,a);m==="checked"?l=!0:(m==="indeterminate"&&(l=!0),r=!1)}return r&&l?"checked":l?"indeterminate":"unchecked"}const oi=({nodes:t,selectedKeys:a=[],expandedKeys:r,onSelectionChange:l,onExpandedChange:d,selectionMode:m="none",showCheckboxes:f,searchable:o,searchPlaceholder:p,onNodeClick:S,renderNode:M,showLines:G,loading:E,className:F,style:P,accessMode:W,id:w,draggable:s,onNodeDrop:y,onLoadChildren:c,contextMenuItems:R,onContextMenuAction:O,editable:H,onNodeEdit:de})=>{const Ae=V.cl(W,w)==="hidden",{t:A}=V.ue(),[he,xe]=n.useState([]),[ge,te]=n.useState(""),[ie,j]=n.useState(new Set),[z,x]=n.useState(new Map),[we,se]=n.useState(null),[L,J]=n.useState(null),[B,ne]=n.useState(null),[ve,ue]=n.useState(""),Te=n.useRef(null),Ue=r??he,Be=n.useMemo(()=>new Set(a),[a]),ze=n.useCallback(async(I,je)=>{var X;const le=!Ue.includes(I),_=le?[...Ue,I]:Ue.filter(pe=>pe!==I);if(d?d(_):xe(_),le&&c&&!((X=je.children)!=null&&X.length)&&je.leaf!==!0&&!z.has(I)){j(Ze=>new Set(Ze).add(I));const pe=await c(je);x(Ze=>new Map(Ze).set(I,pe)),j(Ze=>{const q=new Set(Ze);return q.delete(I),q})}},[Ue,d,c,z]),Xe=n.useCallback((I,je)=>{var le;if(l){if(m==="single")l(a.includes(I)?[]:[I]);else if(m==="multiple")if(f&&((le=je.children)!=null&&le.length)){const _=ci(je),X=[I,..._];if(An(je,Be)==="checked")l(a.filter(pe=>!X.includes(pe)));else{const pe=new Set([...a,...X]);l(Array.from(pe))}}else l(a.includes(I)?a.filter(_=>_!==I):[...a,I])}},[a,m,l,f,Be]),$e=n.useCallback(I=>{var le;if(!ge)return!0;const je=ge.toLowerCase();return I.text.toLowerCase().includes(je)?!0:((le=z.get(I.key)??I.children)==null?void 0:le.some(_=>$e(_)))??!1},[ge,z]),Fe=n.useCallback((I,je)=>{R!=null&&R.length&&(I.preventDefault(),J({x:I.clientX,y:I.clientY,node:je}))},[R]),Y=n.useCallback(()=>{B&&de&&de(B,ve),ne(null)},[B,ve,de]),ye=(I,je)=>{if(ge&&!$e(I))return null;const le=z.get(I.key)??I.children,_=le&&le.length>0||I.leaf!==!0&&c&&!(le!=null&&le.length),X=Ue.includes(I.key),pe=Be.has(I.key),Ze=ie.has(I.key),q=f&&m==="multiple"&&(le!=null&&le.length)?An(I,Be):pe?"checked":"unchecked";return e.jsxs("li",{className:"nice-tree__node",role:"treeitem","aria-expanded":_?X:void 0,draggable:s&&!I.disabled,onDragStart:s?ae=>{ae.stopPropagation(),se(I.key)}:void 0,onDragOver:s?ae=>{ae.preventDefault(),ae.stopPropagation()}:void 0,onDrop:s&&we?ae=>{ae.stopPropagation(),y==null||y(we,I.key,"inside"),se(null)}:void 0,onDragEnd:s?()=>se(null):void 0,children:[e.jsxs("div",{className:`nice-tree__row ${pe?"nice-tree__row--selected":""} ${I.disabled?"nice-tree__row--disabled":""} ${we===I.key?"nice-tree__row--dragging":""}`,style:{paddingLeft:je*20+4},onClick:()=>{I.disabled||(Xe(I.key,I),S==null||S(I))},onContextMenu:ae=>Fe(ae,I),onDoubleClick:H&&!I.disabled?()=>{ne(I.key),ue(I.text)}:void 0,children:[e.jsx("span",{className:`nice-tree__toggle ${_?X?"nice-tree__toggle--expanded":"":"nice-tree__toggle--leaf"}`,onClick:ae=>{ae.stopPropagation(),_&&ze(I.key,I)},children:Ze?e.jsx("span",{className:"nice-spinner nice-spinner--xs"}):_?X?"▾":"▸":""}),f&&m!=="none"&&e.jsx("input",{type:"checkbox",checked:q==="checked",ref:ae=>{ae&&(ae.indeterminate=q==="indeterminate")},onChange:()=>Xe(I.key,I),onClick:ae=>ae.stopPropagation(),tabIndex:-1,className:"nice-tree__checkbox"}),B===I.key?e.jsx("input",{type:"text",className:"nice-tree__edit-input",value:ve,onChange:ae=>ue(ae.target.value),onBlur:Y,onKeyDown:ae=>{ae.key==="Enter"&&Y(),ae.key==="Escape"&&ne(null)},autoFocus:!0,onClick:ae=>ae.stopPropagation()}):M?M(I):e.jsxs(e.Fragment,{children:[I.icon&&e.jsx("span",{className:"nice-tree__icon",children:I.icon}),e.jsx("span",{className:"nice-tree__text",children:I.text})]})]}),le&&le.length>0&&X&&e.jsx("ul",{className:"nice-tree__children",role:"group",children:le.map(ae=>ye(ae,je+1))})]},I.key)};return Ae?null:e.jsxs("div",{className:`nice-tree ${G?"nice-tree--lines":""} ${F||""}`,style:P,ref:Te,onClick:()=>J(null),children:[o&&e.jsx("div",{className:"nice-tree__search",children:e.jsx("input",{type:"text",value:ge,onChange:I=>te(I.target.value),placeholder:p||A("controls.search","Search..."),"aria-label":p||A("controls.search","Search tree")})}),E?e.jsx("div",{className:"nice-tree__loading",children:e.jsx("div",{className:"nice-spinner nice-spinner--sm"})}):e.jsx("ul",{className:"nice-tree__root",role:"tree",children:t.map(I=>ye(I,0))}),L&&R&&e.jsx("div",{className:"nice-tree__context-menu",style:{position:"fixed",top:L.y,left:L.x,zIndex:9999},children:R.map(I=>e.jsxs("div",{className:`nice-tree__context-item ${I.disabled?"nice-tree__context-item--disabled":""}`,onClick:()=>{I.disabled||(O==null||O(I.key,L.node),J(null))},children:[I.icon&&e.jsx("span",{children:I.icon}),I.label]},I.key))})]})};function Fi(t,a,r){const l=new Map,d=[];return t.forEach(m=>{const f={...m,children:[]};l.set(String(f[a]),f)}),t.forEach(m=>{const f=m[r];f!=null&&l.has(String(f))?l.get(String(f)).children.push(l.get(String(m[a]))):d.push(l.get(String(m[a])))}),d}function di({columns:t,data:a,keyField:r="key",parentKeyField:l="parentKey",expandedKeys:d,onExpandedChange:m,selectedKeys:f=[],onSelectionChange:o,selectable:p,loading:S,emptyText:M,className:G,style:E,accessMode:F,id:P}){const W=V.cl(F,P)==="hidden",{t:w}=V.ue(),[s,y]=n.useState([]),c=d??s,R=n.useMemo(()=>Fi(a,r,l),[a,r,l]),O=n.useMemo(()=>t.filter(A=>!A.hidden),[t]),H=n.useCallback(A=>{const he=c.includes(A)?c.filter(xe=>xe!==A):[...c,A];m?m(he):y(he)},[c,m]),de=n.useCallback(A=>{o&&o(f.includes(A)?f.filter(he=>he!==A):[...f,A])},[f,o]),Ae=(A,he)=>{const xe=String(A[r]),ge=A.children&&A.children.length>0,te=c.includes(xe),ie=f.includes(xe);return e.jsxs(n.Fragment,{children:[e.jsxs("tr",{className:ie?"nice-treelist__row--selected":"",children:[p&&e.jsx("td",{className:"nice-treelist__checkbox",children:e.jsx("input",{type:"checkbox",checked:ie,onChange:()=>de(xe)})}),O.map((j,z)=>e.jsxs("td",{style:{textAlign:j.align},children:[z===0&&e.jsx("span",{style:{display:"inline-block",width:he*20}}),z===0&&e.jsx("span",{className:"nice-treelist__toggle",onClick:()=>ge&&H(xe),style:{cursor:ge?"pointer":"default",width:20,display:"inline-block"},children:ge?te?"▾":"▸":""}),j.render?j.render(A[j.field],A,0):String(A[j.field]??"")]},j.field))]}),ge&&te&&A.children.map(j=>Ae(j,he+1))]},xe)};return W?null:e.jsx("div",{className:`nice-treelist ${G||""}`,style:E,children:e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[p&&e.jsx("th",{className:"nice-treelist__checkbox"}),O.map(A=>e.jsx("th",{style:{width:A.width,minWidth:A.minWidth,textAlign:A.align},children:A.header},A.field))]})}),e.jsx("tbody",{children:S?e.jsx("tr",{children:e.jsx("td",{colSpan:O.length+(p?1:0),className:"nice-treelist__empty",children:e.jsx("div",{className:"nice-spinner nice-spinner--md",style:{margin:"0 auto"}})})}):R.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:O.length+(p?1:0),className:"nice-treelist__empty",children:M||w("controls.noData","No data available")})}):R.map(A=>Ae(A,0))})]})})}function ui({items:t,renderCard:a,columns:r=3,gap:l=16,searchable:d,searchField:m="text",searchPlaceholder:f,loading:o,emptyText:p,onCardClick:S,className:M,style:G,accessMode:E,id:F}){const P=V.cl(E,F)==="hidden",{t:W}=V.ue(),[w,s]=n.useState(""),y=n.useMemo(()=>{if(!w)return t;const c=w.toLowerCase();return t.filter(R=>String(R[m]??"").toLowerCase().includes(c))},[t,w,m]);return P?null:e.jsxs("div",{className:`nice-cardview ${M||""}`,style:G,children:[d&&e.jsx("div",{className:"nice-cardview__search",children:e.jsx("input",{type:"text",value:w,onChange:c=>s(c.target.value),placeholder:f||W("controls.search","Search...")})}),o?e.jsx("div",{className:"nice-cardview__loading",children:e.jsx("div",{className:"nice-spinner nice-spinner--md"})}):y.length===0?e.jsx("div",{className:"nice-cardview__empty",children:p||W("controls.noData","No data available")}):e.jsx("div",{className:"nice-cardview__grid",style:{display:"grid",gridTemplateColumns:`repeat(${r}, 1fr)`,gap:l},children:y.map(c=>e.jsx("div",{className:"nice-cardview__card",onClick:()=>S==null?void 0:S(c),style:S?{cursor:"pointer"}:void 0,children:a(c)},c.key))})]})}function mi({items:t,tileWidth:a=180,tileHeight:r=180,direction:l="horizontal",renderTile:d,onTileClick:m,loading:f,emptyText:o,className:p,style:S}){const{t:M}=V.ue();return e.jsx("div",{className:`nice-tileview nice-tileview--${l} ${p||""}`,style:S,children:f?e.jsx("div",{className:"nice-tileview__loading",children:e.jsx("div",{className:"nice-spinner nice-spinner--md"})}):t.length===0?e.jsx("div",{className:"nice-tileview__empty",children:o||M("controls.noData","No data available")}):e.jsx("div",{className:"nice-tileview__container",style:{display:"flex",flexWrap:"wrap",gap:8,flexDirection:l==="vertical"?"column":"row"},children:t.map(G=>e.jsx("div",{className:"nice-tileview__tile",style:{width:a,height:r,cursor:m?"pointer":void 0},onClick:()=>m==null?void 0:m(G),children:d?d(G):e.jsxs(e.Fragment,{children:[G.image&&e.jsx("img",{src:G.image,alt:G.text||"",className:"nice-tileview__image"}),G.text&&e.jsx("div",{className:"nice-tileview__label",children:G.text})]})},G.key))})})}const ei=[{key:"row",label:"Rows"},{key:"column",label:"Columns"},{key:"data",label:"Values"},{key:"filter",label:"Filters"}],In=({fields:t,onChange:a,className:r,style:l})=>{const d=t.filter(o=>!o.area),m=(o,p)=>{a(t.map(S=>S.field===o?{...S,area:p}:S))},f=o=>{a(t.map(p=>p.field===o?{...p,area:void 0}:p))};return e.jsx("div",{className:`nice-field-chooser ${r||""}`,style:l,children:e.jsxs("div",{className:"nice-field-chooser__panel",children:[e.jsxs("div",{className:"nice-field-chooser__section",children:[e.jsx("h4",{children:"Available Fields"}),e.jsx("ul",{children:d.map(o=>e.jsxs("li",{className:"nice-field-chooser__item",children:[e.jsx("span",{children:o.caption}),e.jsx("div",{className:"nice-field-chooser__actions",children:ei.map(p=>e.jsx("button",{type:"button",className:"nice-btn nice-btn--ghost nice-btn--sm",onClick:()=>m(o.field,p.key),children:p.label},p.key))})]},o.field))})]}),ei.map(o=>{const p=t.filter(S=>S.area===o.key);return e.jsxs("div",{className:"nice-field-chooser__section",children:[e.jsx("h4",{children:o.label}),e.jsx("ul",{children:p.map(S=>e.jsxs("li",{className:"nice-field-chooser__item",children:[e.jsx("span",{children:S.caption}),e.jsx("button",{type:"button",className:"nice-btn nice-btn--ghost nice-btn--sm",onClick:()=>f(S.field),children:"✕"})]},S.field))})]},o.key)})]})})};function Oi(t,a){if(t.length===0)return 0;switch(a){case"sum":return t.reduce((r,l)=>r+l,0);case"count":return t.length;case"avg":return t.reduce((r,l)=>r+l,0)/t.length;case"min":return Math.min(...t);case"max":return Math.max(...t);default:return t.reduce((r,l)=>r+l,0)}}function ti(t,a){return[...new Set(t.map(r=>String(r[a]??"")))].sort()}const Tn=({data:t,fields:a,onFieldsChange:r,showFieldChooser:l,loading:d,emptyText:m,exportCsv:f,exportFilename:o="pivot-export",onDrillThrough:p,className:S,style:M,accessMode:G,id:E})=>{const F=V.cl(G,E)==="hidden",{t:P}=V.ue(),[W,w]=n.useState(a),[s,y]=n.useState(!1),c=n.useMemo(()=>W.filter(te=>te.area==="row"),[W]),R=n.useMemo(()=>W.filter(te=>te.area==="column"),[W]),O=n.useMemo(()=>W.filter(te=>te.area==="data"),[W]),H=n.useMemo(()=>c.length===0?["Total"]:ti(t,c[0].field),[t,c]),de=n.useMemo(()=>R.length===0?["Total"]:ti(t,R[0].field),[t,R]),Ae=n.useCallback((te,ie,j)=>{let z=t;c.length>0&&(z=z.filter(se=>String(se[c[0].field])===te)),R.length>0&&(z=z.filter(se=>String(se[R[0].field])===ie));const x=z.map(se=>Number(se[j.field])||0),we=Oi(x,j.summaryType||"sum");return j.format?j.format(we):we},[t,c,R]),A=n.useCallback(te=>{w(te),r==null||r(te)},[r]),he=n.useCallback((te,ie)=>{let j=t;return c.length>0&&(j=j.filter(z=>String(z[c[0].field])===te)),R.length>0&&(j=j.filter(z=>String(z[R[0].field])===ie)),j},[t,c,R]),xe=n.useCallback((te,ie)=>{p&&p(te,ie,he(te,ie))},[p,he]),ge=n.useCallback(()=>{const te=["",...de.flatMap(se=>O.length>0?O.map(L=>`${se} - ${L.caption}`):[se])],ie=H.map(se=>{const L=de.flatMap(J=>O.length>0?O.map(B=>String(Ae(se,J,B))):["—"]);return[se,...L]}),j=[te,...ie].map(se=>se.map(L=>`"${String(L).replace(/"/g,'""')}"`).join(",")).join(`
15
+ `),z=new Blob(["\uFEFF"+j],{type:"text/csv;charset=utf-8;"}),x=URL.createObjectURL(z),we=document.createElement("a");we.href=x,we.download=`${o}.csv`,we.click(),URL.revokeObjectURL(x)},[de,H,O,Ae,o]);return F?null:e.jsxs("div",{className:`nice-pivotgrid ${S||""}`,style:M,children:[(l||f)&&e.jsxs("div",{className:"nice-pivotgrid__toolbar",children:[l&&e.jsx("button",{type:"button",className:"nice-btn nice-btn--outline nice-btn--sm",onClick:()=>y(!s),children:P("controls.fieldChooser","Field Chooser")}),f&&e.jsx("button",{type:"button",className:"nice-btn nice-btn--sm",onClick:ge,children:"CSV ↓"})]}),s&&e.jsx(In,{fields:W,onChange:A}),d?e.jsx("div",{className:"nice-pivotgrid__loading",children:e.jsx("div",{className:"nice-spinner nice-spinner--md"})}):e.jsx("div",{className:"nice-pivotgrid__table-wrap",children:e.jsxs("table",{className:"nice-pivotgrid__table",children:[e.jsxs("thead",{children:[e.jsxs("tr",{children:[e.jsx("th",{children:c.map(te=>te.caption).join(" / ")||""}),de.map(te=>e.jsx("th",{colSpan:O.length||1,children:te},te))]}),O.length>1&&e.jsxs("tr",{children:[e.jsx("th",{}),de.map(te=>O.map(ie=>e.jsx("th",{children:ie.caption},`${te}-${ie.field}`)))]})]}),e.jsx("tbody",{children:H.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:1+de.length*Math.max(O.length,1),className:"nice-pivotgrid__empty",children:m||P("controls.noData","No data available")})}):H.map(te=>e.jsxs("tr",{children:[e.jsx("td",{className:"nice-pivotgrid__row-header",children:te}),de.map(ie=>O.length>0?O.map(j=>e.jsx("td",{className:`nice-pivotgrid__cell ${p?"nice-pivotgrid__cell--clickable":""}`,onClick:p?()=>xe(te,ie):void 0,children:Ae(te,ie,j)},`${ie}-${j.field}`)):e.jsx("td",{className:"nice-pivotgrid__cell",children:"—"},ie))]},te))})]})})]})},Pi=Object.freeze(Object.defineProperty({__proto__:null,NicePivotGrid:Tn},Symbol.toStringTag,{value:"Module"})),$n=n.forwardRef(({columns:t,cards:a,onCardMove:r,onCardClick:l,renderCard:d,onAddCard:m,disabled:f=!1,size:o="md",collapsible:p=!1,viewMode:S,onViewModeChange:M,collapsedColumns:G,onCollapsedColumnsChange:E,formItems:F,formColumns:P=1,formProps:W,editCardTitle:w,newCardTitle:s,onCardEdit:y,onCardCreate:c,onCardDelete:R,cookies:O=!1,localStorage:H=!0,sessionStorage:de=!1,storageMode:Ae,storageKey:A,className:he,style:xe,id:ge,...te},ie)=>{const{t:j}=V.ue(),[z,x]=n.useState(null),[we,se]=n.useState(null),[L,J]=n.useState(null),B=!!F&&(!!y||!!c),ne=n.useCallback(_=>{if(B&&y){J({key:_.key,data:{..._},column:_.column});return}l==null||l(_)},[B,l,y]),ve=n.useCallback(_=>{if(B&&c){J({key:null,data:{title:"",description:""},column:_});return}m==null||m(_)},[B,m,c]),ue=V.la$1(A??"nice-kanban"),[Te,Ue]=n.useState(()=>ue.get("state")??{collapsedColumns:[],viewMode:"default"}),Be=G??Te.collapsedColumns??[],ze=S??Te.viewMode??"default",Xe=n.useCallback(_=>{Ue(X=>{const pe={...X,..._};return ue.set("state",pe),pe})},[ue]),$e=n.useCallback(_=>{const X=Be.includes(_)?Be.filter(pe=>pe!==_):[...Be,_];E?E(X):Xe({collapsedColumns:X})},[Be,E,Xe]);n.useCallback(_=>{M?M(_):Xe({viewMode:_})},[M,Xe]);const Fe=n.useCallback(_=>a.filter(X=>X.column===_).sort((X,pe)=>(X.order??0)-(pe.order??0)),[a]),Y=n.useCallback((_,X)=>{f||(_.dataTransfer.effectAllowed="move",_.dataTransfer.setData("text/plain",String(X.key)),x({cardKey:X.key,fromColumn:X.column}))},[f]),ye=n.useCallback((_,X)=>{_.preventDefault(),_.dataTransfer.dropEffect="move",se({column:X})},[]),I=n.useCallback(()=>{se(null)},[]),je=n.useCallback((_,X)=>{if(_.preventDefault(),se(null),!z||f)return;const pe=Fe(X);r==null||r(z.cardKey,X,pe.length),x(null)},[z,f,Fe,r]),le=n.useCallback(()=>{x(null),se(null)},[]);return e.jsxs(e.Fragment,{children:[e.jsx("div",{ref:ie,id:ge,className:`nice-kanban nice-kanban--${o} nice-kanban--${ze} ${f?"nice-kanban--disabled":""} ${he||""}`,style:xe,...te,children:t.map(_=>{const X=Fe(_.key),pe=(we==null?void 0:we.column)===_.key,Ze=_.limit!=null&&X.length>=_.limit,q=p&&Be.includes(_.key);return e.jsxs("div",{className:`nice-kanban__column ${pe?"nice-kanban__column--dragover":""} ${q?"nice-kanban__column--collapsed":""}`,onDragOver:ae=>!q&&ye(ae,_.key),onDragLeave:I,onDrop:ae=>!q&&je(ae,_.key),children:[e.jsxs("div",{className:"nice-kanban__column-header",style:_.color?{borderTopColor:_.color}:void 0,onClick:p?()=>$e(_.key):void 0,role:p?"button":void 0,tabIndex:p?0:void 0,onKeyDown:p?ae=>{(ae.key==="Enter"||ae.key===" ")&&$e(_.key)}:void 0,children:[p&&e.jsx("span",{className:"nice-kanban__collapse-icon","aria-hidden":"true",children:"?"}),e.jsx("span",{className:"nice-kanban__column-title",children:_.title}),e.jsxs("span",{className:"nice-kanban__column-count",children:[X.length,_.limit!=null&&` / ${_.limit}`]})]}),!q&&e.jsxs("div",{className:"nice-kanban__column-body",children:[X.map(ae=>e.jsx("div",{className:`nice-kanban__card nice-kanban__card--${ze} ${(z==null?void 0:z.cardKey)===ae.key?"nice-kanban__card--dragging":""}`,draggable:!f,onDragStart:nt=>Y(nt,ae),onDragEnd:le,onClick:()=>ne(ae),role:"article",children:d?d(ae):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"nice-kanban__card-title",children:ae.title}),ze!=="compact"&&ae.description&&e.jsx("div",{className:"nice-kanban__card-desc",children:ae.description})]})},ae.key)),X.length===0&&e.jsx("div",{className:"nice-kanban__empty",children:j("kanban.empty","No cards")})]}),!q&&(m||B&&c)&&!Ze&&e.jsxs("button",{type:"button",className:"nice-kanban__add",onClick:()=>ve(_.key),disabled:f,children:["+ ",j("kanban.addCard","Add card")]})]},_.key)})}),B&&L&&e.jsxs(En,{open:!0,onClose:()=>J(null),title:L.key==null?s||j("kanban.newCard","New card"):w||j("kanban.editCard","Edit card"),children:[e.jsx(V.Pa,{items:F,data:L.data,columns:P,...W,onFieldChange:(_,X)=>J(pe=>pe&&{...pe,data:{...pe.data,[_]:X}})}),e.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end",marginTop:16,flexWrap:"wrap"},children:[L.key!=null&&R&&e.jsx(V.dn,{type:"button",size:"sm",variant:"error",style:{marginRight:"auto"},onClick:()=>{R(L.key),J(null)},children:j("controls.delete","Delete")}),e.jsx(V.dn,{type:"button",size:"sm",variant:"secondary",onClick:()=>J(null),children:j("controls.cancel","Cancel")}),e.jsx(V.dn,{type:"button",size:"sm",variant:"primary",onClick:()=>{if(L.key==null){const _={key:`card-${Date.now()}`,title:"",column:L.column,...L.data};c==null||c(_)}else y==null||y(L.key,{...L.data,key:L.key,column:L.column});J(null)},children:j("controls.save","Save")})]})]})]})});$n.displayName="NiceKanbanBoard";function Dt(...t){return t.filter(Boolean).map(a=>typeof a=="object"?Object.entries(a).filter(([,r])=>r).map(([r])=>r).join(" "):a).join(" ")}const Ui=50,Wi=[10,25,50,100,200],Gi=40,Bi=10,Ki=768,Vi=500,Yi=10;function yt(t,a){return a.split(".").reduce((r,l)=>r==null?void 0:r[l],t)}function sn(t,a,r="pl-PL"){var l,d,m;if(t==null)return"—";switch(a.type){case"number":return new Intl.NumberFormat(r,{minimumFractionDigits:(l=a.format)!=null&&l.includes(".")?a.format.split(".")[1].length:0}).format(t);case"currency":return new Intl.NumberFormat(r,{style:"currency",currency:a.currencyCode||"PLN"}).format(t);case"percent":return new Intl.NumberFormat(r,{style:"percent",minimumFractionDigits:0,maximumFractionDigits:2}).format(t/100);case"date":return new Intl.DateTimeFormat(r,{dateStyle:"short"}).format(new Date(t));case"datetime":return new Intl.DateTimeFormat(r,{dateStyle:"short",timeStyle:"short"}).format(new Date(t));case"boolean":return t?"✓":"✗";case"enum":return((m=(d=a.enumOptions)==null?void 0:d.find(f=>f.value===t))==null?void 0:m.label)||String(t);default:return String(t)}}function Xi(t,a,r,l){const[d,m]=n.useState(0),{startIndex:f,endIndex:o,totalHeight:p,offsetY:S}=n.useMemo(()=>{const E=t.length*r,F=Math.ceil(a/r),P=Math.max(0,Math.floor(d/r)-l),W=Math.min(t.length,Math.ceil(d/r)+F+l),w=P*r;return{startIndex:P,endIndex:W,totalHeight:E,offsetY:w}},[t.length,a,r,d,l]),M=n.useMemo(()=>t.slice(f,o),[t,f,o]),G=n.useCallback(E=>{m(E.currentTarget.scrollTop)},[]);return{visibleData:M,totalHeight:p,offsetY:S,handleScroll:G,startIndex:f}}function qi(t,a){const[r,l]=n.useState(()=>{if(t&&typeof window<"u"){const m=localStorage.getItem(`nice-module-grid-${t}`);if(m)return JSON.parse(m)}return a||{}}),d=n.useCallback(m=>{l(f=>{const o={...f,...m};return t&&typeof window<"u"&&localStorage.setItem(`nice-module-grid-${t}`,JSON.stringify(o)),o})},[t]);return[r,d]}function Zi(t){const[a,r]=n.useState(typeof window<"u"&&window.innerWidth<t);return n.useEffect(()=>{if(typeof window>"u")return;const l=()=>r(window.innerWidth<t);return window.addEventListener("resize",l),()=>window.removeEventListener("resize",l)},[t]),a}function Qi({column:t,sort:a,onSort:r,onResize:l,resizable:d,t:m}){const f=n.useRef(null),[o,p]=n.useState(!1),S=n.useCallback(E=>{if(!d||!l)return;E.preventDefault(),p(!0);const F=E.clientX,P=t.width||150,W=s=>{const y=s.clientX-F,c=Math.max(t.minWidth||50,P+y);l(t.field,Math.min(c,t.maxWidth||1/0))},w=()=>{p(!1),document.removeEventListener("mousemove",W),document.removeEventListener("mouseup",w)};document.addEventListener("mousemove",W),document.addEventListener("mouseup",w)},[t,d,l]),M=a==null?void 0:a.direction,G=M==="asc"?"↑":M==="desc"?"↓":null;return e.jsxs("div",{className:Dt("nice-module-grid__header-cell",t.sortable&&"nice-module-grid__header-cell--sortable",o&&"nice-module-grid__header-cell--resizing"),style:{width:t.width==="auto"?"auto":t.width||150,minWidth:t.minWidth,maxWidth:t.maxWidth,textAlign:t.align},onClick:()=>t.sortable&&(r==null?void 0:r(t.field)),role:"columnheader","aria-sort":M==="asc"?"ascending":M==="desc"?"descending":"none",title:t.headerTooltip,children:[e.jsx("span",{className:"nice-module-grid__header-text",children:t.header}),G&&e.jsx("span",{className:"nice-module-grid__sort-indicator",children:G}),d&&e.jsx("div",{ref:f,className:"nice-module-grid__resize-handle",onMouseDown:S})]})}function Ji({column:t,row:a,rowIndex:r,value:l,locale:d="pl-PL",onClick:m}){const f=V.Ml({onClick:m}),o=m?f:{};if(t.render)return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align},...o,children:t.render(l,a,r)});if(t.type==="enum"&&t.enumOptions){const p=t.enumOptions.find(S=>S.value===l);if(p)return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align},...o,children:e.jsxs("span",{className:Dt("nice-module-grid__badge",`nice-module-grid__badge--${p.color||"default"}`),children:[p.icon&&e.jsx("span",{className:"nice-module-grid__badge-icon",children:p.icon}),p.label]})})}if(t.type==="progress"){const p=Math.min(100,Math.max(0,Number(l)||0));return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align},...o,children:e.jsxs("div",{className:"nice-module-grid__progress",children:[e.jsx("div",{className:Dt("nice-module-grid__progress-bar",`nice-module-grid__progress-bar--${t.progressColor||"primary"}`),style:{width:`${p}%`}}),e.jsxs("span",{className:"nice-module-grid__progress-text",children:[p,"%"]})]})})}if(t.type==="rating"){const p=t.maxRating||5,S=Number(l)||0;return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align},...o,children:e.jsx("span",{className:"nice-module-grid__rating","aria-label":`${S} out of ${p} stars`,children:Array.from({length:p},(M,G)=>e.jsx("span",{className:Dt("nice-module-grid__star",G<S&&"nice-module-grid__star--filled"),children:"★"},G))})})}if(t.type==="link"&&t.linkTemplate){const p=t.linkTemplate.replace(/\{\{(\w+)\}\}/g,(S,M)=>String(yt(a,M)??""));return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align},...o,children:e.jsx("a",{href:p,target:t.linkNewTab?"_blank":void 0,rel:t.linkNewTab?"noopener noreferrer":void 0,className:"nice-module-grid__link",children:sn(l,t,d)})})}if(t.type==="image"){const p={xs:24,sm:32,md:48,lg:64}[t.imageSize||"sm"];return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align},...o,children:l?e.jsx("img",{src:String(l),alt:"",className:"nice-module-grid__image",style:{width:p,height:p}}):e.jsx("div",{className:"nice-module-grid__image-placeholder",style:{width:p,height:p}})})}return t.type==="avatar"?e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align},...o,children:l?e.jsx("img",{src:String(l),alt:"",className:"nice-module-grid__avatar"}):e.jsx("div",{className:"nice-module-grid__avatar-placeholder",children:"?"})}):t.type==="color"?e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align},...o,children:e.jsx("span",{className:"nice-module-grid__color-swatch",style:{backgroundColor:l||"transparent"},title:l})}):t.type==="boolean"?e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align||"center"},...o,children:e.jsx("span",{className:Dt("nice-module-grid__boolean",!!l&&"nice-module-grid__boolean--true"),children:l?"✓":"✗"})}):e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:t.align},...o,children:sn(l,t,d)})}function Hi({row:t,index:a,columns:r,primaryField:l,secondaryField:d,customRender:m,selected:f,onClick:o,locale:p="pl-PL",t:S}){if(m)return e.jsx("div",{className:Dt("nice-module-grid__mobile-card",f&&"nice-module-grid__mobile-card--selected"),onClick:o,children:m(t,a)});const M=r.find(E=>E.field===l)||r[0],G=r.find(E=>E.field===d)||r[1];return e.jsxs("div",{className:Dt("nice-module-grid__mobile-card",f&&"nice-module-grid__mobile-card--selected"),onClick:o,role:"row","aria-selected":f,children:[e.jsxs("div",{className:"nice-module-grid__mobile-card-header",children:[e.jsx("div",{className:"nice-module-grid__mobile-card-title",children:sn(yt(t,(M==null?void 0:M.field)||""),M,p)}),G&&e.jsx("div",{className:"nice-module-grid__mobile-card-subtitle",children:sn(yt(t,G.field),G,p)})]}),e.jsx("div",{className:"nice-module-grid__mobile-card-body",children:r.filter(E=>!E.hidden&&E.field!==l&&E.field!==d).slice(0,4).map(E=>e.jsxs("div",{className:"nice-module-grid__mobile-card-field",children:[e.jsx("span",{className:"nice-module-grid__mobile-card-label",children:E.header}),e.jsx("span",{className:"nice-module-grid__mobile-card-value",children:sn(yt(t,E.field),E,p)})]},E.field))})]})}function ea({page:t,pageSize:a,totalRows:r,pageSizeOptions:l,onPageChange:d,t:m}){const f=Math.ceil(r/a),o=(t-1)*a+1,p=Math.min(t*a,r);return e.jsxs("div",{className:"nice-module-grid__pagination",role:"navigation","aria-label":m("pagination.ariaLabel","Pagination"),children:[e.jsxs("div",{className:"nice-module-grid__pagination-info",children:[m("pagination.showing","Showing")," ",o,"–",p," ",m("pagination.of","of")," ",r]}),e.jsxs("div",{className:"nice-module-grid__pagination-controls",children:[e.jsx("select",{className:"nice-module-grid__page-size-select",value:a,onChange:S=>d(1,Number(S.target.value)),"aria-label":m("pagination.rowsPerPage","Rows per page"),children:l.map(S=>e.jsx("option",{value:S,children:S},S))}),e.jsx("button",{className:"nice-module-grid__pagination-btn",onClick:()=>d(1,a),disabled:t===1,"aria-label":m("pagination.first","First"),children:"««"}),e.jsx("button",{className:"nice-module-grid__pagination-btn",onClick:()=>d(t-1,a),disabled:t===1,"aria-label":m("pagination.previous","Previous"),children:"«"}),e.jsxs("span",{className:"nice-module-grid__pagination-page",children:[t," / ",f]}),e.jsx("button",{className:"nice-module-grid__pagination-btn",onClick:()=>d(t+1,a),disabled:t>=f,"aria-label":m("pagination.next","Next"),children:"»"}),e.jsx("button",{className:"nice-module-grid__pagination-btn",onClick:()=>d(f,a),disabled:t>=f,"aria-label":m("pagination.last","Last"),children:"»»"})]})]})}function ta({columns:t}){return e.jsx("div",{className:"nice-module-grid__row nice-module-grid__row--skeleton",role:"row",children:t.filter(a=>!a.hidden).map(a=>e.jsx("div",{className:"nice-module-grid__cell nice-module-grid__cell--skeleton",style:{width:a.width==="auto"?"auto":a.width||150},children:e.jsx("div",{className:"nice-module-grid__skeleton-bar"})},a.field))})}function na(t,a){var an;const{columns:r,data:l,keyField:d="id",dataSource:m,onFetch:f,sortable:o=!0,sort:p,onSortChange:S,multiSort:M=!1,filterable:G=!1,filter:E,onFilterChange:F,searchText:P,onSearchChange:W,searchPlaceholder:w="moduleGrid.searchPlaceholder",pagination:s=!0,page:y,pageSize:c,pageSizeOptions:R=Wi,totalRows:O,onPageChange:H,virtualScroll:de=!0,rowHeight:Ae=Gi,overscan:A=Bi,selectionMode:he="none",selectedKeys:xe,onSelectionChange:ge,columnReorder:te=!0,onColumnOrderChange:ie,columnResize:j=!0,onColumnWidthChange:z,groupBy:x,onGroupByChange:we,groupRowRender:se,expandAllGroups:L=!1,editable:J=!1,onCellEdit:B,onRowEdit:ne,editMode:ve="cell",contextMenuItems:ue,onContextMenuAction:Te,exportable:Ue=!0,exportFormats:Be=["csv","excel"],onExport:ze,preferencesKey:Xe,initialPreferences:$e,onPreferencesChange:Fe,density:Y="normal",striped:ye=!0,bordered:I=!1,hoverable:je=!0,loading:le=!1,emptyState:_,toolbar:X,onRowClick:pe,onRowDoubleClick:Ze,rowClassName:q,rowStyle:ae,mobileCardView:nt=!0,mobileBreakpoint:_e=Ki,mobileCardRender:ct,mobilePrimaryField:pt,mobileSecondaryField:mt,moduleId:wt,permissions:jt,size:qe="medium",skeletonLoading:At=!0,skeletonRows:T=Yi,"aria-label":oe,"aria-labelledby":me,"aria-describedby":ke,className:ot,style:Ne,id:Oe,testId:dt}=t,{t:We}=V.ue();V.cl(),V.Ts("table");const et=Zi(_e),[kt,Gt]=qi(Xe,$e),Bt=n.useRef(null),Qt=n.useRef(null),[Kt,Vt]=n.useState([]),[ut,on]=n.useState(),[Jt,Re]=n.useState(""),[Qe,Le]=n.useState(1),[Pt,Et]=n.useState(c||Ui),[Ut,zt]=n.useState(new Set),[Wt,Yt]=n.useState([]),[u,h]=n.useState(0),[k,U]=n.useState(!1),[Z,C]=n.useState(new Set),[$,Q]=n.useState(null),[Ie,Ee]=n.useState({}),re=p??Kt,Ke=E??ut,it=P??Jt,ht=y??Qe,at=c??Pt,gt=xe??Ut,Ht=O??u??(l==null?void 0:l.length)??0,It=!!(f||m),Nt=n.useMemo(()=>{const v=new Set(kt.hiddenColumns||[]);return r.filter(ce=>!ce.hidden&&!v.has(ce.field))},[r,kt.hiddenColumns]),Tt=n.useMemo(()=>{if(It)return Wt;if(!l)return[];let v=[...l];if(it){const ce=it.toLowerCase(),be=r.filter(Se=>Se.searchable!==!1).map(Se=>Se.field);v=v.filter(Se=>be.some(Me=>{const Ye=yt(Se,Me);return String(Ye??"").toLowerCase().includes(ce)}))}return re.length>0&&v.sort((ce,be)=>{for(const Se of re){const Me=yt(ce,Se.field),Ye=yt(be,Se.field),bt=Me<Ye?-1:Me>Ye?1:0;if(bt!==0)return Se.direction==="asc"?bt:-bt}return 0}),v},[It,Wt,l,it,re,r]),lt=n.useMemo(()=>{if(It||!s)return Tt;const v=(ht-1)*at;return Tt.slice(v,v+at)},[It,Tt,s,ht,at]),dn=((an=Bt.current)==null?void 0:an.clientHeight)||400,Ct=de&&lt.length>Vi,{visibleData:Rt,totalHeight:Lt,offsetY:en,handleScroll:yn,startIndex:tn}=Xi(lt,dn,Ae,A),$t=Ct?Rt:lt,un=n.useCallback(async()=>{if(f){U(!0);try{const v=await f({page:ht,pageSize:at,sort:re,filter:Ke,search:it});Yt(v.data),h(v.total)}catch(v){console.error("NiceModuleGrid fetch error:",v)}finally{U(!1)}}},[f,ht,at,re,Ke,it]);n.useEffect(()=>{It&&un()},[It,un]);const wn=n.useCallback(v=>{const ce=re.find(Se=>Se.field===v);let be;ce?ce.direction==="asc"?be=re.map(Se=>Se.field===v?{...Se,direction:"desc"}:Se):be=re.filter(Se=>Se.field!==v):be=M?[...re,{field:v,direction:"asc"}]:[{field:v,direction:"asc"}],S?S(be):Vt(be)},[re,M,S]),jn=n.useCallback((v,ce)=>{H?H(v,ce):(Le(v),Et(ce))},[H]),Rn=n.useCallback(v=>{W?W(v):Re(v),H||Le(1)},[W,H]),mn=n.useCallback((v,ce)=>{const be=new Set(gt);if(he==="single"?(be.clear(),be.add(v)):(he==="multiple"||he==="checkbox")&&(be.has(v)?be.delete(v):be.add(v)),ge){const Se=lt.filter(Me=>be.has(String(yt(Me,d))));ge(be,Se)}else zt(be)},[gt,he,ge,lt,d]),kn=n.useCallback((v,ce)=>{Ee(be=>({...be,[v]:ce})),z==null||z(v,ce),Gt({columnWidths:{...kt.columnWidths,[v]:ce}})},[z,Gt,kt.columnWidths]),hn=n.useCallback((v,ce)=>{ue!=null&&ue.length&&(v.preventDefault(),Q({x:v.clientX,y:v.clientY,row:ce}))},[ue]),Ln=n.useCallback(v=>{$&&(Te==null||Te(v,$.row)),Q(null)},[$,Te]),Fn=n.useCallback(async v=>{if(ze)await ze(v,{selectedOnly:gt.size>0,columns:Nt.map(ce=>ce.field)});else if(v==="csv"){const ce=Nt.map(st=>st.header).join(","),be=lt.map(st=>Nt.map(gn=>JSON.stringify(yt(st,gn.field)??"")).join(",")),Se=[ce,...be].join(`
16
+ `),Me=new Blob([Se],{type:"text/csv;charset=utf-8;"}),Ye=URL.createObjectURL(Me),bt=document.createElement("a");bt.href=Ye,bt.download=`export-${new Date().toISOString().slice(0,10)}.csv`,bt.click(),URL.revokeObjectURL(Ye)}},[ze,gt,Nt,lt,We]);n.useEffect(()=>{if(!$)return;const v=()=>Q(null);return document.addEventListener("click",v),()=>document.removeEventListener("click",v)},[$]);const nn=n.useCallback(v=>{v.key==="Escape"&&Q(null)},[]),Ve=le||k,rt=!Ve&&$t.length===0,ft=et&&nt,Nn=Dt("nice-module-grid",`nice-module-grid--${Y}`,`nice-module-grid--${qe}`,ye&&"nice-module-grid--striped",I&&"nice-module-grid--bordered",je&&"nice-module-grid--hoverable",Ve&&"nice-module-grid--loading",ft&&"nice-module-grid--mobile",ot);return e.jsxs("div",{ref:a,id:Oe,"data-testid":dt,className:Nn,style:Ne,onKeyDown:nn,role:"grid","aria-label":oe,"aria-labelledby":me,"aria-describedby":ke,"aria-rowcount":Ht,"aria-colcount":Nt.length,"aria-busy":Ve,children:[e.jsxs("div",{className:"nice-module-grid__toolbar",children:[e.jsx("div",{className:"nice-module-grid__toolbar-search",children:e.jsx("input",{type:"search",className:"nice-module-grid__search-input",placeholder:w,value:it,onChange:v=>Rn(v.target.value),"aria-label":We("moduleGrid.searchAriaLabel","Search")})}),X,Ue&&e.jsx("div",{className:"nice-module-grid__toolbar-export",children:Be.map(v=>e.jsx("button",{className:"nice-module-grid__export-btn",onClick:()=>Fn(v),"aria-label":We(`moduleGrid.export.${v}`,`Export to ${v.toUpperCase()}`),children:v.toUpperCase()},v))})]}),e.jsx("div",{ref:Bt,className:"nice-module-grid__container",onScroll:Ct?yn:void 0,children:ft?e.jsx("div",{className:"nice-module-grid__mobile-list",children:Ve&&At?Array.from({length:T},(v,ce)=>e.jsxs("div",{className:"nice-module-grid__mobile-card nice-module-grid__mobile-card--skeleton",children:[e.jsx("div",{className:"nice-module-grid__skeleton-bar",style:{width:"60%",height:20}}),e.jsx("div",{className:"nice-module-grid__skeleton-bar",style:{width:"40%",height:14}}),e.jsx("div",{className:"nice-module-grid__skeleton-bar",style:{width:"80%",height:14}})]},ce)):rt?e.jsxs("div",{className:"nice-module-grid__empty",children:[(_==null?void 0:_.icon)&&e.jsx("div",{className:"nice-module-grid__empty-icon",children:_.icon}),e.jsx("div",{className:"nice-module-grid__empty-title",children:(_==null?void 0:_.title)||We("moduleGrid.noData","No data")}),(_==null?void 0:_.description)&&e.jsx("div",{className:"nice-module-grid__empty-description",children:_.description}),(_==null?void 0:_.action)&&e.jsxs("button",{className:"nice-module-grid__empty-action",onClick:_.action.onClick,children:[_.action.icon,_.action.label]})]}):$t.map((v,ce)=>{const be=String(yt(v,d));return e.jsx(Hi,{row:v,index:tn+ce,columns:Nt,primaryField:pt,secondaryField:mt,customRender:ct,selected:gt.has(be),onClick:()=>{he!=="none"&&mn(be,v),pe==null||pe(v,tn+ce)},t:We},be)})}):e.jsxs("div",{ref:Qt,className:"nice-module-grid__table",children:[e.jsxs("div",{className:"nice-module-grid__header",role:"row",children:[he==="checkbox"&&e.jsx("div",{className:"nice-module-grid__header-cell nice-module-grid__header-cell--checkbox",children:e.jsx("input",{type:"checkbox",checked:gt.size>0&&gt.size===$t.length,onChange:()=>{if(gt.size===$t.length)ge==null||ge(new Set,[]),zt(new Set);else{const v=new Set($t.map(ce=>String(yt(ce,d))));ge==null||ge(v,$t),zt(v)}},"aria-label":We("moduleGrid.selectAll","Select all")})}),Nt.map(v=>e.jsx(Qi,{column:{...v,width:Ie[v.field]||v.width},sort:re.find(ce=>ce.field===v.field),onSort:o?wn:void 0,onResize:j?kn:void 0,resizable:j,t:We},v.field))]}),e.jsx("div",{className:"nice-module-grid__body",style:Ct?{height:Lt,position:"relative"}:void 0,children:Ve&&At?Array.from({length:T},(v,ce)=>e.jsx(ta,{columns:Nt},ce)):rt?e.jsxs("div",{className:"nice-module-grid__empty",children:[(_==null?void 0:_.icon)&&e.jsx("div",{className:"nice-module-grid__empty-icon",children:_.icon}),e.jsx("div",{className:"nice-module-grid__empty-title",children:(_==null?void 0:_.title)||We("moduleGrid.noData","No data")}),(_==null?void 0:_.description)&&e.jsx("div",{className:"nice-module-grid__empty-description",children:_.description}),(_==null?void 0:_.action)&&e.jsxs("button",{className:"nice-module-grid__empty-action",onClick:_.action.onClick,children:[_.action.icon,_.action.label]})]}):e.jsx("div",{style:Ct?{transform:`translateY(${en}px)`}:void 0,children:$t.map((v,ce)=>{const be=String(yt(v,d)),Se=tn+ce,Me=gt.has(be),Ye=typeof q=="function"?q(v,Se):q,bt=typeof ae=="function"?ae(v,Se):ae;return e.jsxs("div",{className:Dt("nice-module-grid__row",Me&&"nice-module-grid__row--selected",Ye),style:{...bt,height:Ae},role:"row","aria-rowindex":Se+1,"aria-selected":Me,onClick:()=>{he!=="none"&&mn(be,v),pe==null||pe(v,Se)},onDoubleClick:()=>Ze==null?void 0:Ze(v,Se),onContextMenu:st=>hn(st,v),children:[he==="checkbox"&&e.jsx("div",{className:"nice-module-grid__cell nice-module-grid__cell--checkbox",children:e.jsx("input",{type:"checkbox",checked:Me,onChange:()=>mn(be,v),onClick:st=>st.stopPropagation(),"aria-label":We("moduleGrid.selectRow","Select row")})}),Nt.map(st=>e.jsx(Ji,{column:{...st,width:Ie[st.field]||st.width},row:v,rowIndex:Se,value:yt(v,st.field)},st.field))]},be)})})})]})}),s&&Ht>0&&e.jsx(ea,{page:ht,pageSize:at,totalRows:It?u:Tt.length,pageSizeOptions:R,onPageChange:jn,t:We}),$&&ue&&e.jsx("div",{className:"nice-module-grid__context-menu",style:{left:$.x,top:$.y},role:"menu",children:ue.filter(v=>typeof v.hidden=="function"?!v.hidden($.row):!v.hidden).map(v=>{if(v.divider)return e.jsx("div",{className:"nice-module-grid__context-menu-divider"},v.key);const ce=typeof v.disabled=="function"?v.disabled($.row):v.disabled;return e.jsxs("button",{className:Dt("nice-module-grid__context-menu-item",v.danger&&"nice-module-grid__context-menu-item--danger",ce&&"nice-module-grid__context-menu-item--disabled"),onClick:()=>{var be;ce||((be=v.onClick)==null||be.call(v,$.row),Ln(v.key))},disabled:ce,role:"menuitem",children:[v.icon&&e.jsx("span",{className:"nice-module-grid__context-menu-icon",children:v.icon}),v.label]},v.key)})}),Ve&&!At&&e.jsx("div",{className:"nice-module-grid__loading-overlay",children:e.jsx("div",{className:"nice-module-grid__spinner","aria-label":We("moduleGrid.loading","Loading")})})]})}n.forwardRef(na);const ia=`
17
+ .nice-reconciliation {
18
+ display: flex;
19
+ flex-direction: column;
20
+ height: 100%;
21
+ background: var(--nice-bg-primary, #ffffff);
22
+ border: 1px solid var(--nice-border-color, #e5e7eb);
23
+ border-radius: var(--nice-radius-lg, 0.5rem);
24
+ overflow: hidden;
25
+ }
26
+
27
+ .nice-reconciliation__toolbar {
28
+ display: flex;
29
+ align-items: center;
30
+ gap: 0.75rem;
31
+ padding: 0.75rem 1rem;
32
+ background: var(--nice-bg-secondary, #f9fafb);
33
+ border-bottom: 1px solid var(--nice-border-color, #e5e7eb);
34
+ flex-wrap: wrap;
35
+ }
36
+
37
+ .nice-reconciliation__toolbar-group {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: 0.5rem;
41
+ }
42
+
43
+ .nice-reconciliation__toolbar-group--end {
44
+ margin-inline-start: auto;
45
+ }
46
+
47
+ .nice-reconciliation__btn {
48
+ display: inline-flex;
49
+ align-items: center;
50
+ gap: 0.375rem;
51
+ padding: 0.375rem 0.75rem;
52
+ font-size: 0.8125rem;
53
+ font-weight: 500;
54
+ border-radius: var(--nice-radius-md, 0.375rem);
55
+ cursor: pointer;
56
+ transition: all 0.15s ease;
57
+ border: 1px solid var(--nice-border-color, #d1d5db);
58
+ background: var(--nice-bg-primary, #ffffff);
59
+ color: var(--nice-text-primary);
60
+ }
61
+
62
+ .nice-reconciliation__btn:hover {
63
+ background: var(--nice-bg-hover, #f3f4f6);
64
+ }
65
+
66
+ .nice-reconciliation__btn--primary {
67
+ background: var(--nice-primary, #3b82f6);
68
+ border-color: var(--nice-primary, #3b82f6);
69
+ color: white;
70
+ }
71
+
72
+ .nice-reconciliation__btn--primary:hover {
73
+ background: var(--nice-primary-dark, #2563eb);
74
+ }
75
+
76
+ .nice-reconciliation__btn--success {
77
+ background: var(--nice-success, #10b981);
78
+ border-color: var(--nice-success, #10b981);
79
+ color: white;
80
+ }
81
+
82
+ .nice-reconciliation__btn:disabled {
83
+ opacity: 0.5;
84
+ cursor: not-allowed;
85
+ }
86
+
87
+ .nice-reconciliation__content {
88
+ display: flex;
89
+ flex: 1;
90
+ overflow: hidden;
91
+ }
92
+
93
+ .nice-reconciliation--vertical .nice-reconciliation__content {
94
+ flex-direction: column;
95
+ }
96
+
97
+ .nice-reconciliation__panel {
98
+ flex: 1;
99
+ display: flex;
100
+ flex-direction: column;
101
+ min-width: 0;
102
+ min-height: 0;
103
+ overflow: hidden;
104
+ }
105
+
106
+ .nice-reconciliation__panel--statements {
107
+ border-inline-end: 1px solid var(--nice-border-color, #e5e7eb);
108
+ }
109
+
110
+ .nice-reconciliation--vertical .nice-reconciliation__panel--statements {
111
+ border-inline-end: none;
112
+ border-block-end: 1px solid var(--nice-border-color, #e5e7eb);
113
+ }
114
+
115
+ .nice-reconciliation__panel-header {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: space-between;
119
+ padding: 0.75rem 1rem;
120
+ background: var(--nice-bg-secondary, #f9fafb);
121
+ border-bottom: 1px solid var(--nice-border-color, #e5e7eb);
122
+ }
123
+
124
+ .nice-reconciliation__panel-title {
125
+ font-weight: 600;
126
+ font-size: 0.875rem;
127
+ color: var(--nice-text-primary);
128
+ display: flex;
129
+ align-items: center;
130
+ gap: 0.5rem;
131
+ }
132
+
133
+ .nice-reconciliation__panel-badge {
134
+ font-size: 0.75rem;
135
+ font-weight: 500;
136
+ padding: 0.125rem 0.5rem;
137
+ border-radius: var(--nice-radius-full, 9999px);
138
+ background: var(--nice-bg-tertiary, #e5e7eb);
139
+ color: var(--nice-text-secondary);
140
+ }
141
+
142
+ .nice-reconciliation__panel-content {
143
+ flex: 1;
144
+ overflow: auto;
145
+ }
146
+
147
+ .nice-reconciliation__row {
148
+ display: flex;
149
+ align-items: center;
150
+ gap: 0.75rem;
151
+ padding: 0.625rem 1rem;
152
+ border-bottom: 1px solid var(--nice-border-divider, #f3f4f6);
153
+ cursor: pointer;
154
+ user-select: none;
155
+ transition: background 0.1s ease;
156
+ }
157
+
158
+ .nice-reconciliation__row:hover {
159
+ background: var(--nice-bg-hover, rgba(0, 0, 0, 0.02));
160
+ }
161
+
162
+ .nice-reconciliation__row--selected {
163
+ background: var(--nice-primary-light, rgba(59, 130, 246, 0.1));
164
+ }
165
+
166
+ .nice-reconciliation__row--dragging {
167
+ opacity: 0.6;
168
+ background: var(--nice-primary-light, rgba(59, 130, 246, 0.15));
169
+ }
170
+
171
+ .nice-reconciliation__row--drop-target {
172
+ background: var(--nice-success-light, rgba(16, 185, 129, 0.15));
173
+ box-shadow: inset 0 0 0 2px var(--nice-success, #10b981);
174
+ }
175
+
176
+ .nice-reconciliation__row--matched {
177
+ background: var(--nice-success-light, rgba(16, 185, 129, 0.08));
178
+ }
179
+
180
+ .nice-reconciliation__row--partial {
181
+ background: var(--nice-warning-light, rgba(245, 158, 11, 0.08));
182
+ }
183
+
184
+ .nice-reconciliation__row--unmatched {
185
+ background: transparent;
186
+ }
187
+
188
+ .nice-reconciliation__row--excluded {
189
+ opacity: 0.5;
190
+ background: var(--nice-bg-disabled, #f3f4f6);
191
+ }
192
+
193
+ .nice-reconciliation__status {
194
+ width: 0.5rem;
195
+ height: 0.5rem;
196
+ border-radius: var(--nice-radius-full, 50%);
197
+ flex-shrink: 0;
198
+ }
199
+
200
+ .nice-reconciliation__status--matched {
201
+ background: var(--nice-success, #10b981);
202
+ }
203
+
204
+ .nice-reconciliation__status--partial {
205
+ background: var(--nice-warning, #f59e0b);
206
+ }
207
+
208
+ .nice-reconciliation__status--unmatched {
209
+ background: var(--nice-danger, #ef4444);
210
+ }
211
+
212
+ .nice-reconciliation__status--excluded {
213
+ background: var(--nice-text-disabled, #9ca3af);
214
+ }
215
+
216
+ .nice-reconciliation__row-main {
217
+ flex: 1;
218
+ min-width: 0;
219
+ }
220
+
221
+ .nice-reconciliation__row-date {
222
+ font-size: 0.75rem;
223
+ color: var(--nice-text-secondary);
224
+ margin-bottom: 0.125rem;
225
+ }
226
+
227
+ .nice-reconciliation__row-description {
228
+ font-size: 0.8125rem;
229
+ color: var(--nice-text-primary);
230
+ white-space: nowrap;
231
+ overflow: hidden;
232
+ text-overflow: ellipsis;
233
+ }
234
+
235
+ .nice-reconciliation__row-counterparty {
236
+ font-size: 0.75rem;
237
+ color: var(--nice-text-tertiary);
238
+ white-space: nowrap;
239
+ overflow: hidden;
240
+ text-overflow: ellipsis;
241
+ }
242
+
243
+ .nice-reconciliation__row-amount {
244
+ font-size: 0.875rem;
245
+ font-weight: 600;
246
+ font-variant-numeric: tabular-nums;
247
+ white-space: nowrap;
248
+ }
249
+
250
+ .nice-reconciliation__row-amount--positive {
251
+ color: var(--nice-success, #10b981);
252
+ }
253
+
254
+ .nice-reconciliation__row-amount--negative {
255
+ color: var(--nice-danger, #ef4444);
256
+ }
257
+
258
+ .nice-reconciliation__confidence {
259
+ display: flex;
260
+ align-items: center;
261
+ gap: 0.25rem;
262
+ font-size: 0.6875rem;
263
+ padding: 0.125rem 0.375rem;
264
+ border-radius: var(--nice-radius-sm, 0.25rem);
265
+ }
266
+
267
+ .nice-reconciliation__confidence--high {
268
+ background: var(--nice-success-light, rgba(16, 185, 129, 0.15));
269
+ color: var(--nice-success-dark, #059669);
270
+ }
271
+
272
+ .nice-reconciliation__confidence--medium {
273
+ background: var(--nice-warning-light, rgba(245, 158, 11, 0.15));
274
+ color: var(--nice-warning-dark, #d97706);
275
+ }
276
+
277
+ .nice-reconciliation__confidence--low {
278
+ background: var(--nice-danger-light, rgba(239, 68, 68, 0.15));
279
+ color: var(--nice-danger-dark, #dc2626);
280
+ }
281
+
282
+ .nice-reconciliation__empty {
283
+ display: flex;
284
+ flex-direction: column;
285
+ align-items: center;
286
+ justify-content: center;
287
+ padding: 3rem 1rem;
288
+ color: var(--nice-text-secondary);
289
+ text-align: center;
290
+ }
291
+
292
+ .nice-reconciliation__empty-icon {
293
+ font-size: 2.5rem;
294
+ margin-bottom: 0.75rem;
295
+ opacity: 0.5;
296
+ }
297
+
298
+ .nice-reconciliation__summary {
299
+ display: flex;
300
+ align-items: center;
301
+ gap: 1.5rem;
302
+ padding: 0.75rem 1rem;
303
+ background: var(--nice-bg-secondary, #f9fafb);
304
+ border-top: 1px solid var(--nice-border-color, #e5e7eb);
305
+ font-size: 0.8125rem;
306
+ flex-wrap: wrap;
307
+ }
308
+
309
+ .nice-reconciliation__summary-item {
310
+ display: flex;
311
+ align-items: center;
312
+ gap: 0.375rem;
313
+ }
314
+
315
+ .nice-reconciliation__summary-label {
316
+ color: var(--nice-text-secondary);
317
+ }
318
+
319
+ .nice-reconciliation__summary-value {
320
+ font-weight: 600;
321
+ color: var(--nice-text-primary);
322
+ font-variant-numeric: tabular-nums;
323
+ }
324
+
325
+ .nice-reconciliation__summary-value--success {
326
+ color: var(--nice-success, #10b981);
327
+ }
328
+
329
+ .nice-reconciliation__summary-value--warning {
330
+ color: var(--nice-warning, #f59e0b);
331
+ }
332
+
333
+ .nice-reconciliation__summary-value--danger {
334
+ color: var(--nice-danger, #ef4444);
335
+ }
336
+
337
+ .nice-reconciliation__resizer {
338
+ width: 4px;
339
+ background: var(--nice-border-color, #e5e7eb);
340
+ cursor: col-resize;
341
+ transition: background 0.15s ease;
342
+ }
343
+
344
+ .nice-reconciliation__resizer:hover {
345
+ background: var(--nice-primary, #3b82f6);
346
+ }
347
+
348
+ .nice-reconciliation--vertical .nice-reconciliation__resizer {
349
+ width: 100%;
350
+ height: 4px;
351
+ cursor: row-resize;
352
+ }
353
+
354
+ .nice-reconciliation__suggestions {
355
+ padding: 0.75rem 1rem;
356
+ background: var(--nice-info-light, rgba(59, 130, 246, 0.08));
357
+ border-bottom: 1px solid var(--nice-info, #3b82f6);
358
+ }
359
+
360
+ .nice-reconciliation__suggestion {
361
+ display: flex;
362
+ align-items: center;
363
+ gap: 0.75rem;
364
+ padding: 0.5rem;
365
+ background: var(--nice-bg-primary, #ffffff);
366
+ border-radius: var(--nice-radius-md, 0.375rem);
367
+ margin-bottom: 0.5rem;
368
+ }
369
+
370
+ .nice-reconciliation__suggestion:last-child {
371
+ margin-bottom: 0;
372
+ }
373
+
374
+ /* Dark mode */
375
+ .dark .nice-reconciliation {
376
+ background: var(--nice-bg-primary-dark, #111827);
377
+ border-color: var(--nice-border-color-dark, #374151);
378
+ }
379
+
380
+ .dark .nice-reconciliation__toolbar,
381
+ .dark .nice-reconciliation__panel-header,
382
+ .dark .nice-reconciliation__summary {
383
+ background: var(--nice-bg-secondary-dark, #1f2937);
384
+ border-color: var(--nice-border-color-dark, #374151);
385
+ }
386
+
387
+ .dark .nice-reconciliation__row--selected {
388
+ background: var(--nice-primary-tint-20, rgba(59, 130, 246, 0.2));
389
+ }
390
+
391
+ /* RTL support */
392
+ [dir="rtl"] .nice-reconciliation__row-amount {
393
+ direction: ltr;
394
+ text-align: left;
395
+ }
396
+
397
+ /* Detail Panel */
398
+ .nice-reconciliation__detail-panel {
399
+ position: fixed;
400
+ inset-inline-end: 0;
401
+ top: 0;
402
+ bottom: 0;
403
+ width: 420px;
404
+ max-width: 90vw;
405
+ background: var(--nice-bg-primary, #ffffff);
406
+ box-shadow: -4px 0 24px var(--nice-overlay-15, rgba(0, 0, 0, 0.15));
407
+ z-index: 1000;
408
+ display: flex;
409
+ flex-direction: column;
410
+ transform: translateX(100%);
411
+ transition: transform 0.25s ease-out;
412
+ }
413
+
414
+ .nice-reconciliation__detail-panel--open {
415
+ transform: translateX(0);
416
+ }
417
+
418
+ .nice-reconciliation__detail-header {
419
+ display: flex;
420
+ align-items: center;
421
+ justify-content: space-between;
422
+ padding: 1rem;
423
+ border-bottom: 1px solid var(--nice-border-color, #e5e7eb);
424
+ background: var(--nice-bg-secondary, #f9fafb);
425
+ }
426
+
427
+ .nice-reconciliation__detail-title {
428
+ font-weight: 600;
429
+ font-size: 1rem;
430
+ color: var(--nice-text-primary);
431
+ display: flex;
432
+ align-items: center;
433
+ gap: 0.5rem;
434
+ }
435
+
436
+ .nice-reconciliation__detail-close {
437
+ width: 2rem;
438
+ height: 2rem;
439
+ display: flex;
440
+ align-items: center;
441
+ justify-content: center;
442
+ background: transparent;
443
+ border: none;
444
+ cursor: pointer;
445
+ font-size: 1.25rem;
446
+ color: var(--nice-text-secondary);
447
+ border-radius: var(--nice-radius-md, 0.375rem);
448
+ transition: all 0.15s ease;
449
+ }
450
+
451
+ .nice-reconciliation__detail-close:hover {
452
+ background: var(--nice-bg-hover, #f3f4f6);
453
+ color: var(--nice-text-primary);
454
+ }
455
+
456
+ .nice-reconciliation__detail-content {
457
+ flex: 1;
458
+ overflow: auto;
459
+ padding: 1rem;
460
+ }
461
+
462
+ .nice-reconciliation__detail-section {
463
+ margin-bottom: 1.5rem;
464
+ }
465
+
466
+ .nice-reconciliation__detail-section-title {
467
+ font-weight: 600;
468
+ font-size: 0.875rem;
469
+ color: var(--nice-text-primary);
470
+ margin-bottom: 0.75rem;
471
+ display: flex;
472
+ align-items: center;
473
+ gap: 0.375rem;
474
+ }
475
+
476
+ .nice-reconciliation__detail-row {
477
+ display: flex;
478
+ justify-content: space-between;
479
+ align-items: flex-start;
480
+ padding: 0.5rem 0;
481
+ border-bottom: 1px solid var(--nice-border-divider, #f3f4f6);
482
+ }
483
+
484
+ .nice-reconciliation__detail-row:last-child {
485
+ border-bottom: none;
486
+ }
487
+
488
+ .nice-reconciliation__detail-label {
489
+ font-size: 0.8125rem;
490
+ color: var(--nice-text-secondary);
491
+ }
492
+
493
+ .nice-reconciliation__detail-value {
494
+ font-size: 0.8125rem;
495
+ font-weight: 500;
496
+ color: var(--nice-text-primary);
497
+ text-align: end;
498
+ max-width: 60%;
499
+ word-break: break-word;
500
+ }
501
+
502
+ .nice-reconciliation__detail-divider {
503
+ height: 1px;
504
+ background: var(--nice-border-color, #e5e7eb);
505
+ margin: 1rem 0;
506
+ }
507
+
508
+ .nice-reconciliation__detail-match-info {
509
+ padding: 0.75rem;
510
+ background: var(--nice-success-light, rgba(16, 185, 129, 0.08));
511
+ border-radius: var(--nice-radius-md, 0.375rem);
512
+ margin-bottom: 1rem;
513
+ }
514
+
515
+ .nice-reconciliation__detail-match-header {
516
+ display: flex;
517
+ align-items: center;
518
+ gap: 0.5rem;
519
+ font-weight: 600;
520
+ font-size: 0.8125rem;
521
+ color: var(--nice-success-dark, #059669);
522
+ margin-bottom: 0.5rem;
523
+ }
524
+
525
+ .nice-reconciliation__detail-match-detail {
526
+ font-size: 0.75rem;
527
+ color: var(--nice-text-secondary);
528
+ }
529
+
530
+ .nice-reconciliation__detail-side-by-side {
531
+ display: grid;
532
+ grid-template-columns: 1fr 1fr;
533
+ gap: 1rem;
534
+ padding: 0.75rem;
535
+ background: var(--nice-bg-secondary, #f9fafb);
536
+ border-radius: var(--nice-radius-md, 0.375rem);
537
+ margin-top: 0.75rem;
538
+ }
539
+
540
+ .nice-reconciliation__detail-side-item {
541
+ padding: 0.5rem;
542
+ background: var(--nice-bg-primary, #ffffff);
543
+ border-radius: var(--nice-radius-sm, 0.25rem);
544
+ border: 1px solid var(--nice-border-color, #e5e7eb);
545
+ }
546
+
547
+ .nice-reconciliation__detail-side-label {
548
+ font-size: 0.6875rem;
549
+ font-weight: 500;
550
+ text-transform: uppercase;
551
+ color: var(--nice-text-tertiary);
552
+ margin-bottom: 0.375rem;
553
+ }
554
+
555
+ .nice-reconciliation__detail-side-amount {
556
+ font-size: 1.125rem;
557
+ font-weight: 600;
558
+ font-variant-numeric: tabular-nums;
559
+ }
560
+
561
+ .nice-reconciliation__detail-backdrop {
562
+ position: fixed;
563
+ inset: 0;
564
+ background: var(--nice-overlay-30, rgba(0, 0, 0, 0.3));
565
+ z-index: 999;
566
+ opacity: 0;
567
+ pointer-events: none;
568
+ transition: opacity 0.2s ease;
569
+ }
570
+
571
+ .nice-reconciliation__detail-backdrop--visible {
572
+ opacity: 1;
573
+ pointer-events: auto;
574
+ }
575
+
576
+ .dark .nice-reconciliation__detail-panel {
577
+ background: var(--nice-bg-primary-dark, #111827);
578
+ box-shadow: -4px 0 24px var(--nice-overlay-40, rgba(0, 0, 0, 0.4));
579
+ }
580
+
581
+ .dark .nice-reconciliation__detail-header {
582
+ background: var(--nice-bg-secondary-dark, #1f2937);
583
+ border-color: var(--nice-border-color-dark, #374151);
584
+ }
585
+
586
+ .dark .nice-reconciliation__detail-side-by-side {
587
+ background: var(--nice-bg-secondary-dark, #1f2937);
588
+ }
589
+
590
+ .dark .nice-reconciliation__detail-side-item {
591
+ background: var(--nice-bg-primary-dark, #111827);
592
+ border-color: var(--nice-border-color-dark, #374151);
593
+ }
594
+ `;function Mt(t,a="PLN",r="pl-PL"){return new Intl.NumberFormat(r,{style:"currency",currency:a,minimumFractionDigits:2,maximumFractionDigits:2}).format(t)}function vn(t,a="pl-PL"){return t?(typeof t=="string"?new Date(t):t).toLocaleDateString(a,{year:"numeric",month:"2-digit",day:"2-digit"}):"-"}function aa(t){return t>=80?"high":t>=50?"medium":"low"}function ra(){return`match-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function la({item:t,isSelected:a,isDragging:r,isDropTarget:l,suggestion:d,currency:m,locale:f,onSelect:o,onDoubleClick:p,onDragStart:S,onDragEnd:M,onDrop:G,disabled:E}){const F=t.status??"unmatched",P=(d==null?void 0:d.confidence)??t.confidence,W=s=>{s.dataTransfer.setData("text/plain",t.id),s.dataTransfer.setData("source","statement"),s.dataTransfer.effectAllowed="move",S()},w=s=>{s.dataTransfer.types.includes("source")&&s.dataTransfer.getData("source")!=="statement"&&s.preventDefault()};return e.jsxs("div",{className:`nice-reconciliation__row nice-reconciliation__row--${F} ${a?"nice-reconciliation__row--selected":""} ${r?"nice-reconciliation__row--dragging":""} ${l?"nice-reconciliation__row--drop-target":""}`,draggable:!E&&F!=="matched",onDragStart:W,onDragEnd:M,onDragOver:w,onDrop:G,onClick:o,onDoubleClick:p,role:"row","aria-selected":a,tabIndex:0,children:[e.jsx("span",{className:`nice-reconciliation__status nice-reconciliation__status--${F}`}),e.jsxs("div",{className:"nice-reconciliation__row-main",children:[e.jsx("div",{className:"nice-reconciliation__row-date",children:vn(t.date,f)}),e.jsx("div",{className:"nice-reconciliation__row-description",title:t.description,children:t.description}),t.counterparty&&e.jsx("div",{className:"nice-reconciliation__row-counterparty",children:t.counterparty})]}),P!=null&&e.jsxs("span",{className:`nice-reconciliation__confidence nice-reconciliation__confidence--${aa(P)}`,children:[P,"%"]}),e.jsx("span",{className:`nice-reconciliation__row-amount ${t.amount>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:Mt(t.amount,m,f)})]})}function sa({item:t,isSelected:a,isDragging:r,isDropTarget:l,currency:d,locale:m,onSelect:f,onDoubleClick:o,onDragStart:p,onDragEnd:S,onDrop:M,disabled:G}){const E=t.status??"unmatched",F=W=>{W.dataTransfer.setData("text/plain",t.id),W.dataTransfer.setData("source","entry"),W.dataTransfer.effectAllowed="move",p()},P=W=>{W.dataTransfer.types.includes("source")&&W.dataTransfer.getData("source")!=="entry"&&W.preventDefault()};return e.jsxs("div",{className:`nice-reconciliation__row nice-reconciliation__row--${E} ${a?"nice-reconciliation__row--selected":""} ${r?"nice-reconciliation__row--dragging":""} ${l?"nice-reconciliation__row--drop-target":""}`,draggable:!G&&E!=="matched",onDragStart:F,onDragEnd:S,onDragOver:P,onDrop:M,onClick:f,onDoubleClick:o,role:"row","aria-selected":a,tabIndex:0,children:[e.jsx("span",{className:`nice-reconciliation__status nice-reconciliation__status--${E}`}),e.jsxs("div",{className:"nice-reconciliation__row-main",children:[e.jsxs("div",{className:"nice-reconciliation__row-date",children:[vn(t.date,m),t.documentNumber&&e.jsxs("span",{children:[" · ",t.documentNumber]})]}),e.jsx("div",{className:"nice-reconciliation__row-description",title:t.description,children:t.description}),t.partyName&&e.jsx("div",{className:"nice-reconciliation__row-counterparty",children:t.partyName})]}),e.jsx("span",{className:`nice-reconciliation__row-amount ${t.amount>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:Mt(t.amount,d,m)})]})}n.forwardRef(function(t,a){const{statements:r,bankTransactions:l,entries:d,accountingEntries:m,matches:f,defaultMatches:o=[],suggestions:p=[],config:S={},currency:M,showConfidence:G,statementPanelConfig:E,entryPanelConfig:F,onMatch:P,onAutoMatch:W,onUnmatch:w,onBatchAction:s,onFilterChange:y,onRequestSuggestions:c,onSelectionChange:R,onComplete:O,size:H="medium",showToolbar:de=!0,showFilters:Ae=!0,showSummary:A=!0,showSuggestions:he=!0,layout:xe="horizontal",enableDragDrop:ge=!0,enableKeyboard:te=!0,enableDetailPanel:ie=!0,loading:j=!1,disabled:z=!1,readOnly:x=!1,locale:we="pl-PL",labels:se={},className:L,style:J}=t,B=r??l??[],ne=d??m??[],ve=M??S.currency??"PLN",[ue,Te]=n.useState(o),[Ue,Be]=n.useState(new Set),[ze,Xe]=n.useState(new Set),[$e,Fe]=n.useState(null),[Y,ye]=n.useState(null),[I,je]=n.useState({}),[le,_]=n.useState(null),X=f??ue,pe=n.useRef(null),Ze=n.useRef(null);n.useEffect(()=>{const T="nice-reconciliation-styles";if(!document.getElementById(T)){const oe=document.createElement("style");oe.id=T,oe.textContent=ia,document.head.appendChild(oe)}},[]);const q=n.useMemo(()=>{const T=new Set;return X.forEach(oe=>oe.statementIds.forEach(me=>T.add(me))),T},[X]),ae=n.useMemo(()=>{const T=new Set;return X.forEach(oe=>oe.entryIds.forEach(me=>T.add(me))),T},[X]),nt=n.useMemo(()=>{const T=B.filter(Ne=>!q.has(Ne.id)),oe=ne.filter(Ne=>!ae.has(Ne.id)),me=B.reduce((Ne,Oe)=>Ne+Oe.amount,0),ke=ne.reduce((Ne,Oe)=>Ne+Oe.amount,0),ot=B.filter(Ne=>q.has(Ne.id)).reduce((Ne,Oe)=>Ne+Oe.amount,0);return{totalStatements:B.length,totalEntries:ne.length,matchedStatements:B.length-T.length,matchedEntries:ne.length-oe.length,unmatchedStatements:T.length,unmatchedEntries:oe.length,statementTotal:me,entryTotal:ke,matchedAmount:ot,unmatchedStatementAmount:T.reduce((Ne,Oe)=>Ne+Oe.amount,0),unmatchedEntryAmount:oe.reduce((Ne,Oe)=>Ne+Oe.amount,0),difference:me-ke,matchPercentage:B.length>0?Math.round((B.length-T.length)/B.length*100):0,matchCount:X.length,partialMatchCount:X.filter(Ne=>Ne.status==="partial").length,pendingSuggestions:p.length}},[B,ne,X,p,q,ae]),_e=n.useCallback((T,oe)=>{const me=B.filter(et=>T.includes(et.id)),ke=ne.filter(et=>oe.includes(et.id));if(me.length===0||ke.length===0)return null;const ot=me.reduce((et,kt)=>et+kt.amount,0),Ne=ke.reduce((et,kt)=>et+kt.amount,0),Oe=Math.abs(ot-Ne),dt=S.amountTolerance??.01,We={id:ra(),statementIds:T,entryIds:oe,status:Oe<=dt?"matched":"partial",statementTotal:ot,entryTotal:Ne,difference:Oe,confidence:Oe<=dt?100:Math.max(0,100-Oe/Math.max(Math.abs(ot),1)*100),matchedBy:"user",matchedAt:new Date};return f||Te(et=>[...et,We]),P==null||P(We,me,ke),Be(new Set),Xe(new Set),We},[B,ne,S.amountTolerance,f,P]),ct=n.useCallback(T=>{const oe=X.find(me=>me.id===T);oe&&(f||Te(me=>me.filter(ke=>ke.id!==T)),w==null||w(T,oe.statementIds,oe.entryIds))},[X,f,w]),pt=n.useCallback(async()=>{const T=[],oe=new Set(q),me=new Set(ae),ke=S.amountTolerance??.01,ot=S.dateTolerance??3;for(const Ne of B){if(oe.has(Ne.id))continue;const Oe=ne.filter(dt=>{if(me.has(dt.id)||Math.abs(Ne.amount-dt.amount)>ke)return!1;const We=new Date(Ne.date),et=new Date(dt.date);return!(Math.abs(We.getTime()-et.getTime())/(1e3*60*60*24)>ot)});if(Oe.length===1){const dt=Oe[0],We=_e([Ne.id],[dt.id]);We&&(T.push(We),oe.add(Ne.id),me.add(dt.id))}}return s==null||s("autoMatch",T),T},[B,ne,q,ae,S,_e,s]),mt=n.useCallback((T,oe,me,ke)=>{ke!==oe&&(ke==="statement"?_e([me],[T]):_e([T],[me]),Fe(null),ye(null))},[_e]),wt=n.useCallback(()=>{const T=Array.from(Ue),oe=Array.from(ze);T.length>0&&oe.length>0&&_e(T,oe)},[Ue,ze,_e]);n.useEffect(()=>{R==null||R(Array.from(Ue),Array.from(ze))},[Ue,ze,R]),n.useImperativeHandle(a,()=>({getMatches:()=>X,getUnmatchedStatements:()=>B.filter(T=>!q.has(T.id)),getUnmatchedEntries:()=>ne.filter(T=>!ae.has(T.id)),createMatch:_e,removeMatch:ct,autoMatch:pt,getSuggestions:async T=>c?c(T??B.filter(oe=>!q.has(oe.id)).map(oe=>oe.id)):[],applySuggestion:T=>_e([T.statementId],T.entryIds),approveAll:()=>{s==null||s("approveAll",X)},clearAll:()=>{f||Te([]),s==null||s("clearAll",[])},exportMatched:T=>{s==null||s("exportMatched",X)},getSummary:()=>nt,reset:()=>{f||Te([]),Be(new Set),Xe(new Set),je({})},focusStatements:()=>{var T;return(T=pe.current)==null?void 0:T.focus()},focusEntries:()=>{var T;return(T=Ze.current)==null?void 0:T.focus()}}),[X,B,ne,q,ae,_e,ct,pt,c,s,f,nt]);const jt=n.useMemo(()=>B.filter(T=>{var oe,me;if(I.status&&I.status.length>0){const ke=q.has(T.id)?"matched":"unmatched";if(!I.status.includes(ke))return!1}if(I.searchText){const ke=I.searchText.toLowerCase();if(!((oe=T.description)!=null&&oe.toLowerCase().includes(ke))&&!((me=T.counterparty)!=null&&me.toLowerCase().includes(ke)))return!1}return!0}),[B,I,q]),qe=n.useMemo(()=>ne.filter(T=>{var oe,me;if(I.status&&I.status.length>0){const ke=ae.has(T.id)?"matched":"unmatched";if(!I.status.includes(ke))return!1}if(I.searchText){const ke=I.searchText.toLowerCase();if(!((oe=T.description)!=null&&oe.toLowerCase().includes(ke))&&!((me=T.partyName)!=null&&me.toLowerCase().includes(ke)))return!1}return!0}),[ne,I,ae]),At=Ue.size>0&&ze.size>0&&!x&&!z;return e.jsxs("div",{className:`nice-reconciliation nice-reconciliation--${xe} ${L??""}`,style:J,children:[de&&e.jsxs("div",{className:"nice-reconciliation__toolbar",children:[e.jsxs("div",{className:"nice-reconciliation__toolbar-group",children:[e.jsxs("button",{type:"button",className:"nice-reconciliation__btn nice-reconciliation__btn--primary",onClick:pt,disabled:z||x||j,children:["⚡ ",se.autoMatch??"Auto-match"]}),e.jsx("button",{type:"button",className:"nice-reconciliation__btn nice-reconciliation__btn--success",onClick:wt,disabled:!At||j,children:"🔗 Match Selected"})]}),e.jsxs("div",{className:"nice-reconciliation__toolbar-group nice-reconciliation__toolbar-group--end",children:[e.jsxs("button",{type:"button",className:"nice-reconciliation__btn",onClick:()=>s==null?void 0:s("approveAll",X),disabled:X.length===0||z||j,children:["✓ ",se.approveAll??"Approve All"]}),e.jsxs("button",{type:"button",className:"nice-reconciliation__btn",onClick:()=>{f||Te([]),s==null||s("clearAll",[])},disabled:X.length===0||z||x||j,children:["✕ ",se.clearAll??"Clear All"]})]})]}),e.jsxs("div",{className:"nice-reconciliation__content",children:[e.jsxs("div",{className:"nice-reconciliation__panel nice-reconciliation__panel--statements",children:[e.jsx("div",{className:"nice-reconciliation__panel-header",children:e.jsxs("span",{className:"nice-reconciliation__panel-title",children:["📄 ",se.statementPanelTitle??"Bank Statement",e.jsx("span",{className:"nice-reconciliation__panel-badge",children:jt.length})]})}),e.jsx("div",{ref:pe,className:"nice-reconciliation__panel-content",role:"listbox","aria-multiselectable":"true",children:jt.length===0?e.jsxs("div",{className:"nice-reconciliation__empty",children:[e.jsx("div",{className:"nice-reconciliation__empty-icon",children:"📋"}),se.noStatements??"No statement items"]}):jt.map(T=>e.jsx(la,{item:{...T,status:q.has(T.id)?"matched":"unmatched"},isSelected:Ue.has(T.id),isDragging:$e===T.id,isDropTarget:Y===T.id,suggestion:p.find(oe=>oe.statementId===T.id),currency:ve,locale:we,onSelect:()=>{z||Be(oe=>{const me=new Set(oe);return me.has(T.id)?me.delete(T.id):me.add(T.id),me})},onDoubleClick:()=>ie&&_({type:"statement",id:T.id}),onDragStart:()=>Fe(T.id),onDragEnd:()=>{Fe(null),ye(null)},onDrop:()=>{$e&&$e!==T.id&&mt(T.id,"statement",$e,"entry")},disabled:z||x||!ge},T.id))})]}),e.jsxs("div",{className:"nice-reconciliation__panel nice-reconciliation__panel--entries",children:[e.jsx("div",{className:"nice-reconciliation__panel-header",children:e.jsxs("span",{className:"nice-reconciliation__panel-title",children:["📒 ",se.entryPanelTitle??"Book Entries",e.jsx("span",{className:"nice-reconciliation__panel-badge",children:qe.length})]})}),e.jsx("div",{ref:Ze,className:"nice-reconciliation__panel-content",role:"listbox","aria-multiselectable":"true",children:qe.length===0?e.jsxs("div",{className:"nice-reconciliation__empty",children:[e.jsx("div",{className:"nice-reconciliation__empty-icon",children:"📚"}),se.noEntries??"No book entries"]}):qe.map(T=>e.jsx(sa,{item:{...T,status:ae.has(T.id)?"matched":"unmatched"},isSelected:ze.has(T.id),isDragging:$e===T.id,isDropTarget:Y===T.id,currency:ve,locale:we,onSelect:()=>{z||Xe(oe=>{const me=new Set(oe);return me.has(T.id)?me.delete(T.id):me.add(T.id),me})},onDoubleClick:()=>ie&&_({type:"entry",id:T.id}),onDragStart:()=>Fe(T.id),onDragEnd:()=>{Fe(null),ye(null)},onDrop:()=>{$e&&$e!==T.id&&mt(T.id,"entry",$e,"statement")},disabled:z||x||!ge},T.id))})]})]}),A&&e.jsxs("div",{className:"nice-reconciliation__summary",children:[e.jsxs("div",{className:"nice-reconciliation__summary-item",children:[e.jsx("span",{className:"nice-reconciliation__summary-label",children:"Matched:"}),e.jsxs("span",{className:"nice-reconciliation__summary-value nice-reconciliation__summary-value--success",children:[nt.matchedStatements,"/",nt.totalStatements," (",nt.matchPercentage,"%)"]})]}),e.jsxs("div",{className:"nice-reconciliation__summary-item",children:[e.jsx("span",{className:"nice-reconciliation__summary-label",children:"Matched Amount:"}),e.jsx("span",{className:"nice-reconciliation__summary-value",children:Mt(nt.matchedAmount,ve,we)})]}),e.jsxs("div",{className:"nice-reconciliation__summary-item",children:[e.jsx("span",{className:"nice-reconciliation__summary-label",children:"Unmatched:"}),e.jsx("span",{className:"nice-reconciliation__summary-value nice-reconciliation__summary-value--warning",children:Mt(nt.unmatchedStatementAmount,ve,we)})]}),e.jsxs("div",{className:"nice-reconciliation__summary-item",children:[e.jsx("span",{className:"nice-reconciliation__summary-label",children:"Difference:"}),e.jsx("span",{className:`nice-reconciliation__summary-value ${Math.abs(nt.difference)<.01?"nice-reconciliation__summary-value--success":"nice-reconciliation__summary-value--danger"}`,children:Mt(nt.difference,ve,we)})]})]}),ie&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`nice-reconciliation__detail-backdrop ${le?"nice-reconciliation__detail-backdrop--visible":""}`,onClick:()=>_(null)}),e.jsx("div",{className:`nice-reconciliation__detail-panel ${le?"nice-reconciliation__detail-panel--open":""}`,children:le&&e.jsx(ca,{type:le.type,id:le.id,statements:B,entries:ne,matches:X,currency:ve,locale:we,labels:se,onClose:()=>_(null)})})]})]})});function ca({type:t,id:a,statements:r,entries:l,matches:d,currency:m,locale:f,labels:o,onClose:p}){var W;const S=t==="statement"?r.find(w=>w.id===a):l.find(w=>w.id===a),M=t==="statement"?d.find(w=>w.statementIds.includes(a)):d.find(w=>w.entryIds.includes(a)),G=M?t==="statement"?l.filter(w=>M.entryIds.includes(w.id)):r.filter(w=>M.statementIds.includes(w.id)):[];if(!S)return null;const E=t==="statement",F=E?S:null,P=E?null:S;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-reconciliation__detail-header",children:[e.jsxs("span",{className:"nice-reconciliation__detail-title",children:[E?"📄":"📒"," ",E?o.statementDetails??"Transaction Details":o.entryDetails??"Entry Details"]}),e.jsx("button",{type:"button",className:"nice-reconciliation__detail-close",onClick:p,"aria-label":"Close",children:"✕"})]}),e.jsxs("div",{className:"nice-reconciliation__detail-content",children:[M&&e.jsxs("div",{className:"nice-reconciliation__detail-match-info",children:[e.jsxs("div",{className:"nice-reconciliation__detail-match-header",children:["✓ ",o.matchedWith??"Matched"," (",((W=M.confidence)==null?void 0:W.toFixed(0))??100,"% confidence)"]}),e.jsx("div",{className:"nice-reconciliation__detail-match-detail",children:M.matchedBy==="ai"?o.matchedByAI??"Matched automatically by AI":o.matchedManually??"Matched manually"}),e.jsxs("div",{className:"nice-reconciliation__detail-side-by-side",children:[e.jsxs("div",{className:"nice-reconciliation__detail-side-item",children:[e.jsx("div",{className:"nice-reconciliation__detail-side-label",children:o.statementTotal??"Statement"}),e.jsx("div",{className:`nice-reconciliation__detail-side-amount ${M.statementTotal>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:Mt(M.statementTotal,m,f)})]}),e.jsxs("div",{className:"nice-reconciliation__detail-side-item",children:[e.jsx("div",{className:"nice-reconciliation__detail-side-label",children:o.entryTotal??"Book Entry"}),e.jsx("div",{className:`nice-reconciliation__detail-side-amount ${M.entryTotal>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:Mt(M.entryTotal,m,f)})]})]}),M.difference>.01&&e.jsxs("div",{className:"nice-reconciliation__detail-row",style:{marginTop:"0.5rem",borderBottom:"none"},children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[o.difference??"Difference",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",style:{color:"var(--nice-warning, #f59e0b)"},children:Mt(M.difference,m,f)})]})]}),e.jsxs("div",{className:"nice-reconciliation__detail-section",children:[e.jsxs("div",{className:"nice-reconciliation__detail-section-title",children:["📋"," ",E?o.transactionInfo??"Transaction Information":o.entryInfo??"Entry Information"]}),e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[o.date??"Date",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:vn(S.date,f)})]}),e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[o.description??"Description",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:S.description})]}),e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[o.amount??"Amount",":"]}),e.jsx("span",{className:`nice-reconciliation__detail-value ${S.amount>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:Mt(S.amount,m,f)})]}),E&&(F==null?void 0:F.counterparty)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[o.counterparty??"Counterparty",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:F.counterparty})]}),E&&(F==null?void 0:F.counterpartyAccount)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[o.accountNumber??"Account",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",style:{fontFamily:"monospace",fontSize:"0.75rem"},children:F.counterpartyAccount})]}),!E&&(P==null?void 0:P.partyName)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[o.party??"Party",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:P.partyName})]}),!E&&(P==null?void 0:P.documentNumber)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[o.documentRef??"Document Ref",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:P.documentNumber})]}),E&&(F==null?void 0:F.referenceNumber)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[o.reference??"Reference",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:F.referenceNumber})]})]}),G.length>0&&e.jsxs("div",{className:"nice-reconciliation__detail-section",children:[e.jsxs("div",{className:"nice-reconciliation__detail-section-title",children:["🔗"," ",E?o.matchedEntries??"Matched Entries":o.matchedStatements??"Matched Statements"]}),G.map(w=>e.jsxs("div",{style:{padding:"0.5rem",background:"var(--nice-bg-secondary, #f9fafb)",borderRadius:"0.25rem",marginBottom:"0.5rem",fontSize:"0.8125rem"},children:[e.jsx("div",{style:{fontWeight:500,marginBottom:"0.25rem"},children:w.description}),e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",color:"var(--nice-text-secondary)"},children:[e.jsx("span",{children:vn(w.date,f)}),e.jsx("span",{style:{fontWeight:600,color:w.amount>=0?"var(--nice-success)":"var(--nice-danger)"},children:Mt(w.amount,m,f)})]})]},w.id))]})]})]})}function oa(t,a,r){const l=new Map,d=[];t.forEach(f=>l.set(String(f[a]),{data:f,children:[],key:String(f[a]),depth:0})),t.forEach(f=>{const o=f[r],p=l.get(String(f[a]));if(o!=null&&o!==""&&l.has(String(o))){const S=l.get(String(o));p.depth=S.depth+1,S.children.push(p)}else d.push(p)});const m=(f,o)=>{f.forEach(p=>{p.depth=o,m(p.children,o+1)})};return m(d,0),d}function hi(t,a,r,l=0){return t.map(d=>({data:d,key:String(d[r]),depth:l,children:Array.isArray(d[a])?hi(d[a],a,r,l+1):[]}))}function da(t){const a=[],r=l=>{l.forEach(d=>{a.push(d.key),r(d.children)})};return r(t),a}function ua(t,a){const r=[],l=d=>{d.forEach(m=>{r.push(m),m.children.length>0&&a.has(m.key)&&l(m.children)})};return l(t),r}function gi(t,a,r){return!a||!r?t:[...t].sort((l,d)=>{const m=l.data[a]??"",f=d.data[a]??"",o=typeof m=="number"&&typeof f=="number"?m-f:String(m).localeCompare(String(f));return r==="desc"?-o:o}).map(l=>({...l,children:gi(l.children,a,r)}))}function pi({columns:t,data:a,keyField:r="id",parentKeyField:l="parentId",nested:d=!1,childrenField:m="children",expandedKeys:f,onExpandedChange:o,defaultExpandAll:p=!1,sortable:S=!0,sortField:M,sortDirection:G,onSort:E,selectable:F,selectedKeys:P,onSelectionChange:W,searchable:w,searchPlaceholder:s,striped:y,compact:c,loading:R,emptyText:O,toolbar:H,onRowClick:de,className:Ae,style:A}){const{t:he}=V.ue(),xe=n.useMemo(()=>d?hi(a,m,r):oa(a,r,l),[a,r,l,d,m]),ge=n.useMemo(()=>da(xe),[xe]),[te,ie]=n.useState(()=>p?new Set(ge):new Set),j=f?new Set(f):te,[z,x]=n.useState({field:"",dir:null}),[we,se]=n.useState(new Set),[L,J]=n.useState(""),B=M??z.field,ne=G??z.dir,ve=P??we,ue=n.useMemo(()=>t.filter(Y=>!Y.hidden),[t]),Te=n.useCallback(Y=>{const ye=B===Y?ne==="asc"?"desc":ne==="desc"?null:"asc":"asc";E?E(Y,ye):x({field:Y,dir:ye})},[B,ne,E]),Ue=n.useCallback(Y=>{const ye=new Set(j);ye.has(Y)?ye.delete(Y):ye.add(Y),o?o([...ye]):ie(ye)},[j,o]),Be=n.useCallback(Y=>{const ye=new Set(ve);ye.has(Y)?ye.delete(Y):ye.add(Y),W?W(ye):se(ye)},[ve,W]),ze=n.useMemo(()=>{if(!L)return xe;const Y=L.toLowerCase(),ye=I=>I.reduce((je,le)=>{const _=ye(le.children);return(ue.some(X=>String(le.data[X.field]??"").toLowerCase().includes(Y))||_.length>0)&&je.push({...le,children:_}),je},[]);return ye(xe)},[xe,L,ue]),Xe=n.useMemo(()=>gi(ze,B,ne),[ze,B,ne]),$e=n.useMemo(()=>ua(Xe,j),[Xe,j]),Fe=({field:Y})=>B!==Y||!ne?e.jsx("span",{className:"nice-table__sort-icon",style:{opacity:.3},children:"↕"}):e.jsx("span",{className:"nice-table__sort-icon",children:ne==="asc"?"↑":"↓"});return e.jsxs("div",{className:`nice-treegrid nice-datagrid ${Ae||""}`,style:A,children:[(w||H)&&e.jsxs("div",{className:"nice-datagrid__toolbar",children:[w&&e.jsx("div",{className:"nice-datagrid__search",children:e.jsx("input",{type:"text",value:L,onChange:Y=>J(Y.target.value),placeholder:s||he("controls.search","Search...")})}),H]}),e.jsx("div",{className:"nice-datagrid__table-wrap",children:e.jsxs("table",{className:`${y?"nice-table--striped":""} ${c?"nice-table--compact":""}`,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[F&&e.jsx("th",{className:"nice-datagrid__checkbox",style:{width:36}}),ue.map(Y=>e.jsxs("th",{style:{width:Y.width,minWidth:Y.minWidth,textAlign:Y.align},className:S&&Y.sortable!==!1?"nice-datagrid__th--sortable":void 0,onClick:()=>S&&Y.sortable!==!1&&Te(Y.field),children:[Y.header,S&&Y.sortable!==!1&&e.jsx(Fe,{field:Y.field})]},Y.field))]})}),e.jsx("tbody",{children:R?e.jsx("tr",{children:e.jsx("td",{colSpan:ue.length+(F?1:0),className:"nice-datagrid__empty",children:e.jsx("div",{className:"nice-spinner nice-spinner--md",style:{margin:"0 auto"}})})}):$e.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:ue.length+(F?1:0),className:"nice-datagrid__empty",children:O||he("controls.noData","No data available")})}):$e.map((Y,ye)=>{const I=ve.has(Y.key),je=Y.children.length>0,le=j.has(Y.key);return e.jsxs("tr",{className:I?"nice-datagrid__row--selected":void 0,onClick:()=>de==null?void 0:de(Y.data),style:de?{cursor:"pointer"}:void 0,children:[F&&e.jsx("td",{className:"nice-datagrid__checkbox",onClick:_=>_.stopPropagation(),children:e.jsx("input",{type:"checkbox",checked:I,onChange:()=>Be(Y.key),"aria-label":`Select row ${Y.key}`})}),ue.map((_,X)=>e.jsxs("td",{style:{textAlign:_.align},children:[X===0&&e.jsxs(e.Fragment,{children:[e.jsx("span",{style:{display:"inline-block",width:Y.depth*20}}),e.jsx("button",{className:`nice-treegrid__toggle ${je?"":"nice-treegrid__toggle--leaf"}`,onClick:pe=>{pe.stopPropagation(),je&&Ue(Y.key)},tabIndex:je?0:-1,"aria-expanded":je?le:void 0,"aria-label":je?le?"Collapse":"Expand":void 0,children:je?le?"▾":"▸":""})]}),_.render?_.render(Y.data[_.field],Y.data,ye):String(Y.data[_.field]??"")]},_.field))]},Y.key)})})]})})]})}function fi(t){let a="",r=t;for(;r>=0;)a=String.fromCharCode(65+r%26)+a,r=Math.floor(r/26)-1;return a}function De(t,a){return`${fi(a)}${t+1}`}function tt(t){const a=t.match(/^([A-Z]+)(\d+)$/);if(!a)return null;let r=0;for(let l=0;l<a[1].length;l++)r=r*26+(a[1].charCodeAt(l)-64);return{row:parseInt(a[2],10)-1,col:r-1}}function ma(t,a,r=new Set){const l=t.startsWith("=")?t.slice(1).trim():t,d=(w,s)=>{if(!w||!s)return[];const y=[];for(let c=w.row;c<=s.row;c++)for(let R=w.col;R<=s.col;R++){const O=He(De(c,R),a,new Set(r));typeof O=="number"&&y.push(O)}return y},m=(w,s)=>{if(!w||!s)return[];const y=[];for(let c=w.row;c<=s.row;c++)for(let R=w.col;R<=s.col;R++)y.push(He(De(c,R),a,new Set(r)));return y},f=l.match(/^(\w+)\(([A-Z]+\d+):([A-Z]+\d+)\)$/i);if(f){const w=f[1].toUpperCase(),s=tt(f[2].toUpperCase()),y=tt(f[3].toUpperCase());switch(w){case"SUM":return d(s,y).reduce((c,R)=>c+R,0);case"AVG":case"AVERAGE":{const c=d(s,y);return c.length>0?c.reduce((R,O)=>R+O,0)/c.length:0}case"COUNT":return d(s,y).length;case"COUNTA":return m(s,y).filter(c=>c!==null&&c!=="").length;case"COUNTBLANK":return m(s,y).filter(c=>c===null||c==="").length;case"MIN":{const c=d(s,y);return c.length?Math.min(...c):0}case"MAX":{const c=d(s,y);return c.length?Math.max(...c):0}case"MEDIAN":{const c=d(s,y).sort((O,H)=>O-H);if(!c.length)return 0;const R=Math.floor(c.length/2);return c.length%2?c[R]:(c[R-1]+c[R])/2}case"STDEV":{const c=d(s,y);if(c.length<2)return 0;const R=c.reduce((O,H)=>O+H,0)/c.length;return Math.sqrt(c.reduce((O,H)=>O+(H-R)**2,0)/(c.length-1))}case"PRODUCT":{const c=d(s,y);return c.length?c.reduce((R,O)=>R*O,1):0}}}const o=l.match(/^(SUMIF|COUNTIF)\(([A-Z]+\d+):([A-Z]+\d+)\s*,\s*"?([^"]*)"?\)$/i);if(o){const w=o[1].toUpperCase(),s=tt(o[2].toUpperCase()),y=tt(o[3].toUpperCase()),c=o[4];if(s&&y){let R=0;for(let O=s.row;O<=y.row;O++)for(let H=s.col;H<=y.col;H++){const de=He(De(O,H),a,new Set(r));(c.startsWith(">")?Number(de)>Number(c.slice(1)):c.startsWith("<")?Number(de)<Number(c.slice(1)):String(de)===c||typeof de=="number"&&de===Number(c))&&(R+=w==="SUMIF"?typeof de=="number"?de:0:1)}return R}}const p=l.match(/^IF\(([^,]+),\s*([^,]+),\s*([^)]+)\)$/i);if(p){const w=p[1].trim(),s=p[2].trim(),y=p[3].trim(),c=w.match(/^([A-Z]+\d+)\s*([><=!]+)\s*(\S+)$/i);let R=!1;if(c){const de=He(c[1].toUpperCase(),a,new Set(r)),Ae=isNaN(Number(c[3]))?c[3].replace(/^"|"$/g,""):Number(c[3]),A=c[2],he=typeof de=="number"?de:Number(de)||0,xe=typeof Ae=="number"?Ae:Number(Ae)||0;switch(A){case">":R=he>xe;break;case"<":R=he<xe;break;case">=":R=he>=xe;break;case"<=":R=he<=xe;break;case"=":case"==":R=he===xe;break;case"<>":case"!=":R=he!==xe;break}}const O=R?s:y;if(tt(O.toUpperCase()))return He(O.toUpperCase(),a,new Set(r));const H=Number(O);return isNaN(H)?O.replace(/^"|"$/g,""):H}const S=l.match(/^CONCAT\((.+)\)$/i);if(S)return S[1].split(",").map(w=>w.trim()).map(w=>{if(w.startsWith('"')&&w.endsWith('"'))return w.slice(1,-1);if(tt(w.toUpperCase())){const s=He(w.toUpperCase(),a,new Set(r));return s!==null?String(s):""}return w}).join("");const M=l.match(/^VLOOKUP\(([^,]+),\s*([A-Z]+\d+):([A-Z]+\d+),\s*(\d+)\)$/i);if(M){let w;tt(M[1].trim().toUpperCase())?w=He(M[1].trim().toUpperCase(),a,new Set(r)):w=isNaN(Number(M[1]))?M[1].replace(/^"|"$/g,""):Number(M[1]);const s=tt(M[2].toUpperCase()),y=tt(M[3].toUpperCase()),c=parseInt(M[4])-1;if(s&&y)for(let R=s.row;R<=y.row;R++){const O=He(De(R,s.col),a,new Set(r));if(String(O)===String(w))return He(De(R,s.col+c),a,new Set(r))}return null}const G=l.match(/^(ABS|ROUND|FLOOR|CEIL|CEILING|SQRT|LEN|UPPER|LOWER|TRIM|INT)\(([^)]+)\)$/i);if(G){const w=G[1].toUpperCase(),s=G[2].trim();let y;switch(tt(s.toUpperCase())?y=He(s.toUpperCase(),a,new Set(r)):y=isNaN(Number(s))?s.replace(/^"|"$/g,""):Number(s),w){case"ABS":return Math.abs(Number(y)||0);case"ROUND":return Math.round(Number(y)||0);case"FLOOR":return Math.floor(Number(y)||0);case"CEIL":case"CEILING":return Math.ceil(Number(y)||0);case"SQRT":return Math.sqrt(Number(y)||0);case"INT":return Math.trunc(Number(y)||0);case"LEN":return String(y??"").length;case"UPPER":return String(y??"").toUpperCase();case"LOWER":return String(y??"").toLowerCase();case"TRIM":return String(y??"").trim()}}const E=l.match(/^POWER\(([^,]+),\s*([^)]+)\)$/i);if(E){const w=Number(tt(E[1].trim().toUpperCase())?He(E[1].trim().toUpperCase(),a,new Set(r)):E[1].trim())||0,s=Number(tt(E[2].trim().toUpperCase())?He(E[2].trim().toUpperCase(),a,new Set(r)):E[2].trim())||0;return Math.pow(w,s)}if(/^NOW\(\)$/i.test(l))return new Date().toISOString();if(/^TODAY\(\)$/i.test(l))return new Date().toISOString().split("T")[0];if(/^PI\(\)$/i.test(l))return Math.PI;const F=l.match(/^([A-Z]+\d+)$/i);if(F)return He(F[1].toUpperCase(),a,r);const P=l.match(/^([A-Z]+\d+)\s*([+\-*/])\s*([A-Z]+\d+|\d+\.?\d*)$/i);if(P){const w=P[1].toUpperCase(),s=P[2],y=P[3],c=He(w,a,r),R=tt(y.toUpperCase())?He(y.toUpperCase(),a,r):parseFloat(y),O=typeof c=="number"?c:0,H=typeof R=="number"?R:0;switch(s){case"+":return O+H;case"-":return O-H;case"*":return O*H;case"/":return H!==0?O/H:null}}const W=parseFloat(l);return isNaN(W)?l:W}function He(t,a,r){if(r.has(t))return null;r.add(t);const l=a[t];return l?l.formula?ma(l.formula,a,r):l.value:null}function ni(t,a){return t==null?"":a==="percent"&&typeof t=="number"?`${(t*100).toFixed(1)}%`:a==="currency"&&typeof t=="number"?`$${t.toFixed(2)}`:String(t)}function ii(t){return{name:t,data:{}}}const zn=n.forwardRef(({sheets:t,activeSheet:a,rows:r=50,cols:l=26,showToolbar:d=!0,showFormulaBar:m=!0,showSheetTabs:f=!0,readOnly:o=!1,onChange:p,onActiveSheetChange:S,onCellSelect:M,onCopy:G,onPaste:E,onInsert:F,onRemove:P,maxUndo:W=50,sortable:w=!1,filterable:s=!1,rangeSelection:y=!0,className:c,style:R,id:O,...H},de)=>{var Et,Ut,zt,Wt,Yt;const Ae=V.Us(O),{t:A}=V.ue(),[he,xe]=n.useState(()=>t??[ii(A("spreadsheet.sheet","Sheet")+" 1")]),[ge,te]=n.useState(0),ie=t??he,j=a??ge,z=ie[j]??ie[0],[x,we]=n.useState(null),[se,L]=n.useState(null),[J,B]=n.useState(!1),[ne,ve]=n.useState(null),[ue,Te]=n.useState(""),Ue=n.useRef(null),Be=n.useRef(null),[ze,Xe]=n.useState([]),[$e,Fe]=n.useState([]),[Y,ye]=n.useState(null),I=n.useRef({x:0,width:80}),[je,le]=n.useState(null),[_,X]=n.useState(null),[pe,Ze]=n.useState("");n.useEffect(()=>{ne&&Ue.current&&Ue.current.focus()},[ne]);const q=n.useMemo(()=>{if(!x)return null;const u=se??x;return{startRow:Math.min(x.row,u.row),startCol:Math.min(x.col,u.col),endRow:Math.max(x.row,u.row),endCol:Math.max(x.col,u.col)}},[x,se]),ae=n.useCallback((u,h)=>q?u>=q.startRow&&u<=q.endRow&&h>=q.startCol&&h<=q.endCol:!1,[q]),nt=n.useCallback(u=>{Xe(h=>{const k=[...h,u.map(U=>({...U,data:{...U.data}}))];return k.length>W?k.slice(-W):k}),Fe([])},[W]),_e=n.useCallback((u,h=!0)=>{h&&nt(ie);const k=u(ie);t||xe(k),p==null||p(k)},[ie,t,p,nt]),ct=n.useCallback(()=>{if(ze.length===0)return;const u=ze[ze.length-1];Fe(h=>[...h,ie.map(k=>({...k,data:{...k.data}}))]),Xe(h=>h.slice(0,-1)),t||xe(u),p==null||p(u)},[ze,ie,t,p]),pt=n.useCallback(()=>{if($e.length===0)return;const u=$e[$e.length-1];Xe(h=>[...h,ie.map(k=>({...k,data:{...k.data}}))]),Fe(h=>h.slice(0,-1)),t||xe(u),p==null||p(u)},[$e,ie,t,p]),mt=n.useCallback(u=>{a||te(u),S==null||S(u),we(null),L(null),ve(null)},[a,S]),wt=n.useCallback((u,h,k)=>{const U=De(u,h);_e(Z=>{const C=Z.map((Q,Ie)=>Ie===j?{...Q,data:{...Q.data}}:Q),$=k.startsWith("=");return C[j].data[U]={...C[j].data[U]??{value:null},formula:$?k:void 0,value:$?null:isNaN(Number(k))?k:Number(k)},C})},[j,_e]),jt=n.useCallback((u,h,k)=>{k!=null&&k.shiftKey&&y&&x?L({row:u,col:h}):(we({row:u,col:h}),L(null)),ve(null),M==null||M(j,u,h)},[j,M,y,x]),qe=n.useCallback((u,h,k)=>{k.button===0&&(jt(u,h,k),y&&!k.shiftKey&&B(!0))},[jt,y]),At=n.useCallback((u,h)=>{J&&L({row:u,col:h})},[J]);n.useEffect(()=>{if(!J)return;const u=()=>B(!1);return document.addEventListener("mouseup",u),()=>document.removeEventListener("mouseup",u)},[J]);const T=n.useCallback((u,h)=>{if(o)return;const k=De(u,h),U=z.data[k];U!=null&&U.readOnly||(ve({row:u,col:h}),Te((U==null?void 0:U.formula)??((U==null?void 0:U.value)!=null?String(U.value):"")))},[o,z.data]),oe=n.useCallback(()=>{ne&&(wt(ne.row,ne.col,ue),ve(null))},[ne,ue,wt]),me=n.useCallback(u=>{if(u.key==="Enter")oe();else if(u.key==="Escape")ve(null);else if(u.key==="Tab"&&(u.preventDefault(),oe(),x)){const h=u.shiftKey?Math.max(0,x.col-1):Math.min(l-1,x.col+1);we({row:x.row,col:h})}},[oe,x,l]),ke=n.useCallback((u,h)=>{if(!x)return;const k=q??{startRow:x.row,startCol:x.col,endRow:x.row,endCol:x.col};_e(U=>{const Z=U.map((C,$)=>$===j?{...C,data:{...C.data}}:C);for(let C=k.startRow;C<=k.endRow;C++)for(let $=k.startCol;$<=k.endCol;$++){const Q=De(C,$);Z[j].data[Q]={...Z[j].data[Q]??{value:null},[u]:h}}return Z})},[x,q,j,_e]),ot=n.useCallback(u=>{if(!q||(G==null?void 0:G(q))===!1)return;const{startRow:h,startCol:k,endRow:U,endCol:Z}=q,C=[];for(let $=h;$<=U;$++){const Q=[];for(let Ie=k;Ie<=Z;Ie++){const Ee=De($,Ie),re=z.data[Ee],Ke=re?He(Ee,z.data,new Set):null;Q.push(ni(Ke,re==null?void 0:re.format))}C.push(Q.join(" "))}u.clipboardData.setData("text/plain",C.join(`
595
+ `)),u.preventDefault()},[q,z.data,G]),Ne=n.useCallback(u=>{if(o||!x)return;const h=u.clipboardData.getData("text/plain");if(!h)return;const k=h.split(`
596
+ `).map(U=>U.split(" "));(E==null?void 0:E(k,x.row,x.col))!==!1&&(_e(U=>{const Z=U.map((C,$)=>$===j?{...C,data:{...C.data}}:C);return k.forEach((C,$)=>{C.forEach((Q,Ie)=>{const Ee=De(x.row+$,x.col+Ie),re=Q.startsWith("=");Z[j].data[Ee]={...Z[j].data[Ee]??{value:null},formula:re?Q:void 0,value:re?null:isNaN(Number(Q))?Q:Number(Q)}})}),Z}),u.preventDefault())},[o,x,j,_e,E]),Oe=n.useCallback(u=>{_e(h=>h.map((k,U)=>{if(U!==j)return k;const Z={};for(const[C,$]of Object.entries(k.data)){const Q=tt(C);Q&&(Q.row>u?Z[De(Q.row+1,Q.col)]=$:Z[C]=$)}return{...k,data:Z}})),F==null||F("row",u)},[j,_e,F]),dt=n.useCallback(u=>{_e(h=>h.map((k,U)=>{if(U!==j)return k;const Z={};for(const[C,$]of Object.entries(k.data)){const Q=tt(C);Q&&(Q.col>u?Z[De(Q.row,Q.col+1)]=$:Z[C]=$)}return{...k,data:Z}})),F==null||F("column",u)},[j,_e,F]),We=n.useCallback(u=>{_e(h=>h.map((k,U)=>{if(U!==j)return k;const Z={};for(const[C,$]of Object.entries(k.data)){const Q=tt(C);Q&&Q.row!==u&&(Q.row>u?Z[De(Q.row-1,Q.col)]=$:Z[C]=$)}return{...k,data:Z}})),P==null||P("row",u)},[j,_e,P]),et=n.useCallback(u=>{_e(h=>h.map((k,U)=>{if(U!==j)return k;const Z={};for(const[C,$]of Object.entries(k.data)){const Q=tt(C);Q&&Q.col!==u&&(Q.col>u?Z[De(Q.row,Q.col-1)]=$:Z[C]=$)}return{...k,data:Z}})),P==null||P("column",u)},[j,_e,P]),kt=n.useCallback((u,h)=>{_e(k=>k.map((U,Z)=>{if(Z!==j)return U;const C=new Map;for(const[Ie,Ee]of Object.entries(U.data)){const re=tt(Ie);re&&(C.has(re.row)||C.set(re.row,{}),C.get(re.row)[re.col]=Ee)}const $=Array.from(C.entries()).sort((Ie,Ee)=>{const re=He(De(Ie[0],u),U.data,new Set),Ke=He(De(Ee[0],u),U.data,new Set),it=typeof re=="number"?re:Number(re),ht=typeof Ke=="number"?Ke:Number(Ke);if(!isNaN(it)&&!isNaN(ht))return h==="asc"?it-ht:ht-it;const at=String(re??""),gt=String(Ke??"");return h==="asc"?at.localeCompare(gt):gt.localeCompare(at)}),Q={};return $.forEach(([,Ie],Ee)=>{for(const[re,Ke]of Object.entries(Ie))Q[De(Ee,Number(re))]=Ke}),{...U,data:Q,sortColumn:u,sortDirection:h}}))},[j,_e]),Gt=n.useCallback((u,h)=>{const k=z.conditionalFormats;if(!(k!=null&&k.length))return;const U=De(u,h),Z=He(U,z.data,new Set),C=typeof Z=="number"?Z:Number(Z);for(const $ of k){const Q=$.range.match(/^([A-Z]+\d+):([A-Z]+\d+)$/i);if(!Q)continue;const Ie=tt(Q[1].toUpperCase()),Ee=tt(Q[2].toUpperCase());if(!Ie||!Ee||u<Ie.row||u>Ee.row||h<Ie.col||h>Ee.col)continue;let re=!1;switch($.type){case"greaterThan":re=!isNaN(C)&&C>Number($.value);break;case"lessThan":re=!isNaN(C)&&C<Number($.value);break;case"equalTo":re=String(Z)===String($.value);break;case"between":re=!isNaN(C)&&C>=Number($.value)&&C<=Number($.value2);break;case"textContains":re=String(Z).includes(String($.value));break;case"isEmpty":re=Z===null||Z==="";break;case"isNotEmpty":re=Z!==null&&Z!=="";break}if(re)return{backgroundColor:$.style.bgColor,color:$.style.color,fontWeight:$.style.bold?"bold":void 0,fontStyle:$.style.italic?"italic":void 0}}},[z.conditionalFormats,z.data]),Bt=n.useCallback(()=>{const u=`${A("spreadsheet.sheet","Sheet")} ${ie.length+1}`;_e(h=>[...h,ii(u)]),mt(ie.length)},[ie.length,_e,mt,A]),Qt=n.useCallback(()=>{ie.length<=1||(_e(u=>u.filter((h,k)=>k!==j)),mt(Math.max(0,j-1)))},[ie.length,j,_e,mt]),Kt=n.useCallback((u,h)=>{h.trim()&&(_e(k=>k.map((U,Z)=>Z===u?{...U,name:h.trim()}:U),!1),X(null))},[_e]),Vt=n.useMemo(()=>{if(!x)return"";const u=De(x.row,x.col),h=z.data[u];return(h==null?void 0:h.formula)??((h==null?void 0:h.value)!=null?String(h.value):"")},[x,z.data]),ut=n.useMemo(()=>{if(!q)return null;const{startRow:u,startCol:h,endRow:k,endCol:U}=q;if(u===k&&h===U)return null;const Z=[];let C=0;for(let $=u;$<=k;$++)for(let Q=h;Q<=U;Q++){const Ie=De($,Q),Ee=He(Ie,z.data,new Set);Ee!==null&&Ee!==""&&C++,typeof Ee=="number"&&Z.push(Ee)}return Z.length===0?{count:C}:{count:C,sum:Z.reduce(($,Q)=>$+Q,0),avg:Z.reduce(($,Q)=>$+Q,0)/Z.length,min:Math.min(...Z),max:Math.max(...Z)}},[q,z.data]),on=n.useCallback((u,h)=>{var k;h.preventDefault(),h.stopPropagation(),ye(u),I.current={x:h.clientX,width:((k=z.colWidths)==null?void 0:k[u])??80}},[z.colWidths]);n.useEffect(()=>{if(Y===null)return;const u=k=>{const U=k.clientX-I.current.x,Z=Math.max(30,I.current.width+U);_e(C=>C.map(($,Q)=>Q===j?{...$,colWidths:{...$.colWidths,[Y]:Z}}:$),!1)},h=()=>ye(null);return document.addEventListener("mousemove",u),document.addEventListener("mouseup",h),()=>{document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",h)}},[Y,j,_e]);const Jt=n.useCallback((u,h,k)=>{u.preventDefault(),we({row:h,col:k}),le({x:u.clientX,y:u.clientY})},[]);n.useEffect(()=>{if(!je)return;const u=()=>le(null);return document.addEventListener("click",u),()=>document.removeEventListener("click",u)},[je]);const Re=n.useCallback(u=>{if((u.ctrlKey||u.metaKey)&&!ne){if(u.key==="z"){u.preventDefault(),ct();return}if(u.key==="y"){u.preventDefault(),pt();return}}if(ne||!x)return;let{row:h,col:k}=x;switch(u.key){case"ArrowUp":h=Math.max(0,h-1);break;case"ArrowDown":h=Math.min(r-1,h+1);break;case"ArrowLeft":k=Math.max(0,k-1);break;case"ArrowRight":k=Math.min(l-1,k+1);break;case"Enter":T(h,k);return;case"Delete":case"Backspace":o||(q&&(q.startRow!==q.endRow||q.startCol!==q.endCol)?_e(U=>{const Z=U.map((C,$)=>$===j?{...C,data:{...C.data}}:C);for(let C=q.startRow;C<=q.endRow;C++)for(let $=q.startCol;$<=q.endCol;$++)delete Z[j].data[De(C,$)];return Z}):wt(h,k,""));return;default:if(u.key.length===1&&!u.ctrlKey&&!u.metaKey&&!o){ve({row:h,col:k}),Te(u.key);return}return}u.preventDefault(),u.shiftKey&&y?L({row:h,col:k}):(we({row:h,col:k}),L(null)),M==null||M(j,h,k)},[ne,x,r,l,o,T,wt,j,M,ct,pt,q,_e,y]),Qe=z.frozenRows??0,Le=z.frozenCols??0,Pt=[{value:"text",label:A("spreadsheet.formatText","Text")},{value:"number",label:A("spreadsheet.formatNumber","Number")},{value:"percent",label:A("spreadsheet.formatPercent","Percent")},{value:"currency",label:A("spreadsheet.formatCurrency","Currency")},{value:"date",label:A("spreadsheet.formatDate","Date")}];return e.jsxs("div",{ref:de,id:Ae,className:`nice-spreadsheet ${o?"nice-spreadsheet--readonly":""} ${c??""}`,style:R,onKeyDown:Re,onCopy:ot,onPaste:Ne,tabIndex:0,role:"application","aria-label":A("spreadsheet.label","Spreadsheet"),...H,children:[d&&!o&&e.jsxs("div",{className:"nice-spreadsheet__toolbar",role:"toolbar",children:[e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:ct,disabled:ze.length===0,title:A("spreadsheet.undo","Undo"),children:"?"}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:pt,disabled:$e.length===0,title:A("spreadsheet.redo","Redo"),children:"?"}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(V.dn,{variant:(Et=z.data[x?De(x.row,x.col):""])!=null&&Et.bold?"primary":"ghost",size:"sm",onClick:()=>{var u;return ke("bold",!((u=z.data[x?De(x.row,x.col):""])!=null&&u.bold))},title:A("spreadsheet.bold","Bold"),children:e.jsx("strong",{children:"B"})}),e.jsx(V.dn,{variant:(Ut=z.data[x?De(x.row,x.col):""])!=null&&Ut.italic?"primary":"ghost",size:"sm",onClick:()=>{var u;return ke("italic",!((u=z.data[x?De(x.row,x.col):""])!=null&&u.italic))},title:A("spreadsheet.italic","Italic"),children:e.jsx("em",{children:"I"})}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>ke("align","left"),title:A("spreadsheet.alignLeft","Align left"),children:"?"}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>ke("align","center"),title:A("spreadsheet.alignCenter","Center"),children:"?"}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>ke("align","right"),title:A("spreadsheet.alignRight","Align right"),children:"?"}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(V.on,{value:((zt=z.data[x?De(x.row,x.col):""])==null?void 0:zt.bgColor)??"var(--bg-primary, #ffffff)",onChange:u=>ke("bgColor",u),title:A("spreadsheet.bgColor","Background color")}),e.jsx(V.on,{value:((Wt=z.data[x?De(x.row,x.col):""])==null?void 0:Wt.color)??"var(--text-primary, #000000)",onChange:u=>ke("color",u),title:A("spreadsheet.textColor","Text color")}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(V.Pe,{size:"sm",value:((Yt=z.data[x?De(x.row,x.col):""])==null?void 0:Yt.format)??"text",onChange:u=>ke("format",u),options:Pt,"aria-label":A("spreadsheet.format","Cell format")}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>x&&Oe(x.row),title:A("spreadsheet.insertRow","Insert row"),children:"+?"}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>x&&dt(x.col),title:A("spreadsheet.insertCol","Insert column"),children:"+?"}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>x&&We(x.row),title:A("spreadsheet.deleteRow","Delete row"),children:"-?"}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>x&&et(x.col),title:A("spreadsheet.deleteCol","Delete column"),children:"-?"})]}),m&&e.jsxs("div",{className:"nice-spreadsheet__formula-bar",children:[e.jsxs("span",{className:"nice-spreadsheet__cell-label",children:[x?De(x.row,x.col):"",q&&q.startRow!==q.endRow||q&&q.startCol!==q.endCol?`:${De(q.endRow,q.endCol)}`:""]}),e.jsx(V.Je,{className:"nice-spreadsheet__formula-input",value:ne?ue:Vt,onChange:u=>{ne?Te(u):x&&(ve(x),Te(u))},onKeyDown:me,readOnly:o,"aria-label":A("spreadsheet.formulaBar","Formula bar")})]}),e.jsx("div",{className:"nice-spreadsheet__grid",ref:Be,children:e.jsxs("table",{role:"grid","aria-label":z.name,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{className:"nice-spreadsheet__corner"}),Array.from({length:l},(u,h)=>{var k;return e.jsxs("th",{className:`nice-spreadsheet__col-header ${h<Le?"nice-spreadsheet__col-header--frozen":""}`,style:{width:((k=z.colWidths)==null?void 0:k[h])??80,position:h<Le?"sticky":void 0,left:h<Le?h*80+40:void 0,zIndex:h<Le?3:void 0},children:[e.jsx("span",{children:fi(h)}),w&&e.jsx("span",{className:"nice-spreadsheet__sort-trigger",onClick:()=>kt(h,z.sortColumn===h&&z.sortDirection==="asc"?"desc":"asc"),title:A("spreadsheet.sort","Sort"),children:(z.sortColumn===h&&z.sortDirection,"?")}),!o&&e.jsx("span",{className:"nice-spreadsheet__col-resize",onMouseDown:U=>on(h,U)})]},h)})]})}),e.jsx("tbody",{children:Array.from({length:r},(u,h)=>e.jsxs("tr",{className:h<Qe?"nice-spreadsheet__row--frozen":"",style:h<Qe?{position:"sticky",top:h*24,zIndex:2}:void 0,children:[e.jsx("td",{className:"nice-spreadsheet__row-header",children:h+1}),Array.from({length:l},(k,U)=>{var it,ht;const Z=De(h,U),C=z.data[Z];if(C!=null&&C.mergedInto)return null;const $=(x==null?void 0:x.row)===h&&(x==null?void 0:x.col)===U,Q=ae(h,U),Ie=(ne==null?void 0:ne.row)===h&&(ne==null?void 0:ne.col)===U,Ee=C?He(Z,z.data,new Set):null,re=Gt(h,U),Ke=h<Qe||U<Le;return e.jsxs("td",{className:`nice-spreadsheet__cell ${$?"nice-spreadsheet__cell--selected":""} ${Q&&!$?"nice-spreadsheet__cell--in-range":""} ${C!=null&&C.readOnly?"nice-spreadsheet__cell--readonly":""} ${Ke?"nice-spreadsheet__cell--frozen":""}`,style:{textAlign:C==null?void 0:C.align,fontWeight:C!=null&&C.bold?"bold":void 0,fontStyle:C!=null&&C.italic?"italic":void 0,backgroundColor:(re==null?void 0:re.backgroundColor)??(C==null?void 0:C.bgColor),color:(re==null?void 0:re.color)??(C==null?void 0:C.color),width:(it=z.colWidths)==null?void 0:it[U],height:(ht=z.rowHeights)==null?void 0:ht[h],position:Ke?"sticky":void 0,left:U<Le?U*80+40:void 0,zIndex:Ke?1:void 0,...re},colSpan:C==null?void 0:C.colSpan,rowSpan:C==null?void 0:C.rowSpan,onMouseDown:at=>qe(h,U,at),onMouseEnter:()=>At(h,U),onDoubleClick:()=>T(h,U),onContextMenu:at=>Jt(at,h,U),role:"gridcell","aria-selected":$,title:C==null?void 0:C.comment,children:[(C==null?void 0:C.comment)&&e.jsx("span",{className:"nice-spreadsheet__comment-indicator"}),Ie?e.jsx("input",{ref:Ue,className:"nice-spreadsheet__cell-editor",value:ue,onChange:at=>Te(at.target.value),onKeyDown:me,onBlur:oe}):ni(Ee,C==null?void 0:C.format)]},U)})]},h))})]})}),je&&!o&&x&&e.jsxs("div",{className:"nice-spreadsheet__context-menu",style:{position:"fixed",left:je.x,top:je.y,zIndex:1e3},children:[e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>{Oe(x.row),le(null)},children:A("spreadsheet.insertRowAbove","Insert row above")}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>{Oe(x.row+1),le(null)},children:A("spreadsheet.insertRowBelow","Insert row below")}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>{dt(x.col),le(null)},children:A("spreadsheet.insertColLeft","Insert column left")}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>{dt(x.col+1),le(null)},children:A("spreadsheet.insertColRight","Insert column right")}),e.jsx("hr",{className:"nice-spreadsheet__context-sep"}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>{We(x.row),le(null)},children:A("spreadsheet.deleteRow","Delete row")}),e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:()=>{et(x.col),le(null)},children:A("spreadsheet.deleteCol","Delete column")})]}),ut&&e.jsxs("div",{className:"nice-spreadsheet__status-bar",children:[e.jsxs("span",{children:[A("spreadsheet.count","Count"),": ",ut.count]}),ut.sum!==void 0&&e.jsxs("span",{children:[A("spreadsheet.sum","Sum"),": ",ut.sum.toFixed(2)]}),ut.avg!==void 0&&e.jsxs("span",{children:[A("spreadsheet.avg","Avg"),": ",ut.avg.toFixed(2)]}),ut.min!==void 0&&e.jsxs("span",{children:[A("spreadsheet.min","Min"),": ",ut.min]}),ut.max!==void 0&&e.jsxs("span",{children:[A("spreadsheet.max","Max"),": ",ut.max]})]}),f&&e.jsxs("div",{className:"nice-spreadsheet__tabs",role:"tablist",children:[ie.map((u,h)=>e.jsx("span",{className:"nice-spreadsheet__tab-wrapper",children:_===h?e.jsx(V.Je,{className:"nice-spreadsheet__tab-rename",value:pe,onChange:k=>Ze(k),onBlur:()=>Kt(h,pe),onKeyDown:k=>{k.key==="Enter"&&Kt(h,pe),k.key==="Escape"&&X(null)},autoFocus:!0}):e.jsx("span",{onDoubleClick:()=>{o||(X(h),Ze(u.name))},children:e.jsx(V.dn,{variant:h===j?"primary":"ghost",size:"sm",onClick:()=>mt(h),children:u.name})})},h)),!o&&e.jsxs(e.Fragment,{children:[e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:Bt,title:A("spreadsheet.addSheet","Add sheet"),children:"+"}),ie.length>1&&e.jsx(V.dn,{variant:"ghost",size:"sm",onClick:Qt,title:A("spreadsheet.removeSheet","Remove sheet"),children:"�"})]})]})]})});zn.displayName="NiceSpreadsheet";const ha=Object.freeze(Object.defineProperty({__proto__:null,N:ui,a:cn,c:$n,d:si,f:Tn,g:In,j:zn,k:ri,l:mi,m:pi,n:di,o:oi,p:li,q:ln,r:$i,s:Pi},Symbol.toStringTag,{value:"Module"}));exports.A=En;exports.Ea=ri;exports.Ki=In;exports.L=ai;exports.La=oi;exports.Na=zn;exports.NiceSavedQueryPanelBkYRk5cX=ha;exports.Oa=mi;exports.Pa=ui;exports.Ta=di;exports.Wt=cn;exports.Xi=Tn;exports.ja=pi;exports.qi=$n;exports.za=si;