@nice2dev/ui-forms 1.0.10 → 1.0.11

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"),q=require("./index-tVSzr4V7.cjs"),t=require("react"),Ri=require("react-dom"),$t=({open:n,onClose:a,title:r,size:l="md",children:o,footer:u,closeOnOverlay:g=!0,closeOnEscape:c=!0,fullscreenable:p,zIndex:S,className:D,style:K,displayStyle:k})=>{const{t:W}=q.ue(),F=t.useContext(q.dt),J=t.useRef(null),[x,s]=t.useState(!1),b=q.Cs("modal",k),_=q.zs("modal",k);if(q.Ws(J,n),t.useEffect(()=>{if(!n||!c)return;const Z=B=>{B.key==="Escape"&&a()};return document.addEventListener("keydown",Z),()=>document.removeEventListener("keydown",Z)},[n,c,a]),t.useEffect(()=>(n?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[n]),!n||typeof document>"u")return null;const I=e.jsx("div",{className:"nice-modal-overlay",style:S?{zIndex:S}:void 0,onClick:g?a:void 0,children:e.jsxs("div",{ref:J,className:`nice-modal nice-modal--${x?"full":l} nice-modal--ds-${_} ${D||""}`,style:{...b,...K},role:"dialog","aria-modal":"true","aria-label":r,onClick:Z=>Z.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(Z=>!Z),"aria-label":x?"Exit fullscreen":"Fullscreen",children:x?"⇲":"⇱"}),e.jsx("button",{type:"button",className:"nice-modal__close",onClick:a,"aria-label":W("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:o}),u&&e.jsx("div",{className:"nice-modal__footer",children:u})]})});return Ri.createPortal(I,(F==null?void 0:F.portalTarget)??document.body)};function zi(n,a,r){const l=[];if(a<=1)return a===1&&l.push(1),l;const o=Math.max(2,n-r),u=Math.min(a-1,n+r);l.push(1),o>2&&l.push("dots");for(let g=o;g<=u;g++)l.push(g);return u<a-1&&l.push("dots"),l.push(a),l}const ai=({page:n,totalPages:a,onChange:r,showInfo:l,siblingCount:o=1,size:u="md",showFirstLast:g,showJumpInput:c,jumpInputLabel:p,showPageSize:S,pageSizeOptions:D,pageSize:K,onPageSizeChange:k,disabled:W,className:F,style:J})=>{const x=zi(n,a,o);return e.jsxs("nav",{className:`nice-pagination nice-pagination--${u} ${F||""}`,style:J,"aria-label":"Pagination",children:[g&&e.jsx("button",{className:"nice-pagination__btn",disabled:W||n<=1,onClick:()=>r(1),"aria-label":"First page",title:"First page",children:"⏮"}),e.jsx("button",{className:"nice-pagination__btn",disabled:W||n<=1,onClick:()=>r(n-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"})})}),x.map((s,b)=>s==="dots"?e.jsx("span",{className:"nice-pagination__ellipsis",children:"…"},`dots-${b}`):e.jsx("button",{className:`nice-pagination__btn ${s===n?"nice-pagination__btn--active":""}`,disabled:W,onClick:()=>r(s),"aria-current":s===n?"page":void 0,children:s},s)),e.jsx("button",{className:"nice-pagination__btn",disabled:W||n>=a,onClick:()=>r(n+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"})})}),g&&e.jsx("button",{className:"nice-pagination__btn",disabled:W||n>=a,onClick:()=>r(a),"aria-label":"Last page",title:"Last page",children:"⏭"}),l&&e.jsxs("span",{className:"nice-pagination__info",children:[n," / ",a]}),c&&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(q.ze,{size:u==="lg"?"md":"sm",min:1,max:a,step:1,value:n,disabled:W,onChange:s=>{const b=typeof s=="number"?s:Number(s);if(!Number.isNaN(b)){const _=Math.max(1,Math.min(a,Math.floor(b)));r(_)}}})]}),S&&D&&D.length>0&&e.jsx("select",{className:"nice-pagination__size",value:K??D[0],disabled:W,onChange:s=>k==null?void 0:k(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:D.map(s=>e.jsxs("option",{value:s,children:[s," / page"]},s))})]})};function ri({columns:n,data:a,striped:r,compact:l,emptyText:o,className:u,style:g,accessMode:c,id:p,displayStyle:S}){if(q.rl(c,p)==="hidden")return null;const D=q.Cs("table",S),K=q.zs("table",S),[k,W]=t.useState(null),F=t.useMemo(()=>k?[...a].sort((x,s)=>{const b=x[k.field]??"",_=s[k.field]??"",I=typeof b=="number"?b-_:String(b).localeCompare(String(_));return k.dir==="desc"?-I:I}):a,[a,k]),J=x=>{W(s=>(s==null?void 0:s.field)===x?s.dir==="asc"?{field:x,dir:"desc"}:null:{field:x,dir:"asc"})};return e.jsx("div",{className:`nice-table-wrapper ${u||""}`,style:{...D,...g},children:e.jsxs("table",{className:`nice-table nice-table--ds-${K} ${r?"nice-table--striped":""} ${l?"nice-table--compact":""}`,"aria-rowcount":F.length,"aria-colcount":n.length,children:[e.jsx("thead",{children:e.jsx("tr",{children:n.map(x=>{const s=x.sortable?(k==null?void 0:k.field)===x.field?k.dir==="asc"?"ascending":"descending":"none":void 0;return e.jsxs("th",{style:{width:x.width,textAlign:x.align},className:x.sortable?"th--sortable":void 0,onClick:()=>x.sortable&&J(x.field),scope:"col","aria-sort":s,children:[x.header,x.sortable&&(k==null?void 0:k.field)===x.field&&e.jsx("span",{className:"nice-table__sort-icon","aria-hidden":"true",children:k.dir==="asc"?"↑":"↓"})]},x.field)})})}),e.jsx("tbody",{children:F.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:n.length,className:"nice-table__empty",children:o||"No data"})}):F.map((x,s)=>e.jsx("tr",{children:n.map(b=>e.jsx("td",{style:{textAlign:b.align},children:b.render?b.render(x[b.field],x):String(x[b.field]??"")},b.field))},s))})]})})}function li(n,a,r){const l=n.map(o=>o[a]).filter(o=>typeof o=="number");if(l.length===0)return r==="count"?"0":"";switch(r){case"sum":return l.reduce((o,u)=>o+u,0).toLocaleString();case"avg":return(l.reduce((o,u)=>o+u,0)/l.length).toLocaleString(void 0,{maximumFractionDigits:2});case"count":return String(n.length);case"min":return Math.min(...l).toLocaleString();case"max":return Math.max(...l).toLocaleString()}}function lt(n){return n.includes(",")||n.includes('"')||n.includes(`
2
+ `)?`"${n.replace(/"/g,'""')}"`:n}function Ii(n){return typeof n=="boolean"?n?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(n??"")}function ct({columns:n,data:a,keyField:r="id",dataSource:l,sortable:o=!0,sortField:u,sortDirection:g,onSort:c,selectable:p,selectedKeys:S,onSelectionChange:D,pagination:K,pageSize:k=10,page:W,onPageChange:F,totalRows:J,searchable:x,searchPlaceholder:s,virtualScroll:b,rowHeight:_=40,groupBy:I,groupRender:Z,onCellEdit:B,editMode:me="inline",formItems:ce,formColumns:A=2,editFormTitle:ge,formProps:ye,onRowEdit:U,onRowAdd:oe,onRowDelete:Y,bulkActions:R,onBulkDelete:O,exportCsv:w,exportFilename:he="export",detailRow:E,expandedRowKeys:le,onExpandedRowChange:Q,columnReorder:ne,onColumnReorder:G,columnResize:Ce,rowDraggable:ve,onRowReorder:Me,striped:Ue,compact:Ye,loading:ze,emptyText:He,toolbar:Fe,onRowClick:Ae,pinnedTopKeys:X,pinnedBottomKeys:N,colSpan:_e,showStatusBar:fe,contextMenuItems:pe,onContextMenuAction:y,printFriendly:V,keyboardNavigation:be,focusedCell:nn,onFocusedCellChange:L,cellRangeSelection:Se,selectedCellRange:an,onCellRangeChange:xe,clipboard:sn,clipboardFormat:_n="text",onBeforeCopy:hn,onCopy:Sn,onPaste:Mn,quickFilters:Xe,activeQuickFilters:En,onQuickFilterChange:$,columnGroups:se,stateStorageKey:de,initialState:ke,onStateChange:cn,flashRowKeys:Ne,flashDuration:Te=500,autoFitColumns:on,showColumnStats:Ke,rowIndicator:Je,frozenRows:Dn,className:Gn,style:qn,accessMode:Qn,id:Bn,displayStyle:Hn}){var Yt,Jt;const dn=q.rl(Qn,Bn);if(dn==="hidden")return null;const ot=dn==="readOnly"||dn==="disabled",{t:Pe}=q.ue();q.Cs("table",Hn),q.zs("table",Hn);const tn=q.$d(l??null,{autoLoad:!!l,defaultPageSize:k}),Ge=!!l,xn=Ge?tn.data:a??[],Pn=Ge?tn.loading:ze,[Un,Xn]=t.useState({field:"",dir:null}),[Tn,Kn]=t.useState(1),[Vn,d]=t.useState(new Set),[m,M]=t.useState(""),[T,ee]=t.useState(k),[j,P]=t.useState(null),[H,Re]=t.useState(null),[De,te]=t.useState(null),[Qe,un]=t.useState(new Set),[pn,ln]=t.useState(0),gn=t.useRef(null),[dt,Fn]=t.useState(new Set),fn=le??dt,[bn,zn]=t.useState({}),[On,$n]=t.useState(null),[Wn,et]=t.useState(null),[wt,jt]=t.useState(null),[nt,An]=t.useState(null),[ut,kt]=t.useState([]),[Et,Ft]=t.useState(null),[tt,mt]=t.useState(new Set),[At,Pt]=t.useState(null),it=t.useRef(null),rn=nn??wt,Ve=an??nt,yn=En??ut;t.useEffect(()=>{if(!de)return;const i=localStorage.getItem(`nice-datagrid-${de}`);if(i&&!ke)try{const h=JSON.parse(i);h.columnWidths&&zn(h.columnWidths),h.expandedGroups&&un(new Set(h.expandedGroups))}catch{}},[de,ke]),t.useEffect(()=>{if(!(Ne!=null&&Ne.size))return;mt(new Set(Ne));const i=setTimeout(()=>mt(new Set),Te);return()=>clearTimeout(i)},[Ne,Te]),t.useEffect(()=>{if(!Wn)return;const i=()=>et(null);return document.addEventListener("click",i),()=>document.removeEventListener("click",i)},[Wn]);const ht=t.useCallback((i,h)=>{pe!=null&&pe.length&&(i.preventDefault(),et({x:i.clientX,y:i.clientY,row:h}))},[pe]),pt=t.useCallback(i=>{const h=new Set(fn);h.has(i)?h.delete(i):h.add(i),Q?Q(h):Fn(h)},[fn,Q]),at=t.useCallback((i,h)=>{var je;if(!Ce)return;h.preventDefault();const f=h.clientX,C=((je=h.target.closest("th"))==null?void 0:je.offsetWidth)??100,z=ie=>{const Le=Math.max(40,C+ie.clientX-f);zn(Ee=>({...Ee,[i]:Le}))},ae=()=>{document.removeEventListener("mousemove",z),document.removeEventListener("mouseup",ae)};document.addEventListener("mousemove",z),document.addEventListener("mouseup",ae)},[Ce]),v=Ge?((Yt=tn.sort[0])==null?void 0:Yt.field)??"":u??Un.field,re=Ge?((Jt=tn.sort[0])==null?void 0:Jt.direction)??null:g??Un.dir,we=Ge?tn.page:W??Tn,ue=S??Vn;t.useCallback(()=>{if(!de)return;const i={columnWidths:bn,sortField:v||void 0,sortDirection:re,pageSize:T,expandedGroups:Array.from(Qe)};localStorage.setItem(`nice-datagrid-${de}`,JSON.stringify(i)),cn==null||cn(i)},[de,bn,v,re,T,Qe,cn]);const Oe=t.useMemo(()=>n.filter(i=>!i.hidden),[n]),vn=t.useMemo(()=>Oe.filter(i=>i.pinned==="left"),[Oe]),wn=t.useMemo(()=>Oe.filter(i=>i.pinned==="right"),[Oe]),mn=t.useMemo(()=>Oe.filter(i=>!i.pinned),[Oe]),Ie=t.useMemo(()=>[...vn,...mn,...wn],[vn,mn,wn]),bi=t.useMemo(()=>Oe.some(i=>i.aggregate),[Oe]),rt=vn.length>0||wn.length>0,Tt=t.useCallback(i=>{const h=v===i?re==="asc"?"desc":re==="desc"?null:"asc":"asc";Ge?h?tn.setSortField(i,h):tn.setSort([]):c?c(i,h):Xn({field:i,dir:h})},[v,re,Ge,tn,c]),jn=t.useMemo(()=>{if(Ge)return xn;let i=[...xn];if(m){const h=m.toLowerCase();i=i.filter(f=>Oe.some(C=>String(f[C.field]??"").toLowerCase().includes(h)))}return!c&&v&&re&&i.sort((h,f)=>{const C=h[v]??"",z=f[v]??"",ae=typeof C=="number"?C-z:String(C).localeCompare(String(z));return re==="desc"?-ae:ae}),i},[xn,m,Oe,v,re,c,Ge]),gt=Ge?tn.totalCount:J??jn.length,Zn=Ge?tn.pageSize:T,_i=Math.max(1,Math.ceil(gt/Zn)),Rn=Ge?jn:K&&!J?jn.slice((we-1)*Zn,we*Zn):jn,Nt=t.useCallback(i=>{Ge?tn.setPage(i):F?F(i):Kn(i)},[Ge,tn,F]),Yn=t.useMemo(()=>Rn.map(i=>String(i[r])),[Rn,r]),Jn=Yn.length>0&&Yn.every(i=>ue.has(i)),Ot=Yn.some(i=>ue.has(i)),Wt=t.useCallback(()=>{const i=new Set(ue);Jn?Yn.forEach(h=>i.delete(h)):Yn.forEach(h=>i.add(h)),D?D(i):d(i)},[Jn,Yn,ue,D]),Ut=t.useCallback(i=>{const h=new Set(ue);h.has(i)?h.delete(i):h.add(i),D?D(h):d(h)},[ue,D]),Kt=({field:i})=>v!==i||!re?e.jsx("span",{className:"nice-table__sort-icon",style:{opacity:.3},children:"?"}):e.jsx("span",{className:"nice-table__sort-icon",children:"?"}),kn=t.useMemo(()=>{if(!I)return Rn.map((f,C)=>({type:"data",row:f,key:String(f[r]??C)}));const i=new Map;Rn.forEach(f=>{const C=f[I];i.has(C)||i.set(C,[]),i.get(C).push(f)});const h=[];return i.forEach((f,C)=>{const z=`__group_${String(C)}`,ae=Qe.has(z);h.push({type:"group",value:C,rows:f,expanded:ae,key:z}),ae&&f.forEach((je,ie)=>h.push({type:"data",row:je,key:String(je[r]??`${z}_${ie}`)}))}),h},[Rn,I,r,Qe]),{pinnedTopRows:xi,pinnedBottomRows:yi,normalRows:vi}=t.useMemo(()=>{if(!(X!=null&&X.size)&&!(N!=null&&N.size))return{pinnedTopRows:[],pinnedBottomRows:[],normalRows:kn};const i=[],h=[],f=[];for(const C of kn){if(C.type==="data"){const z=C.key;if(X!=null&&X.has(z)){i.push(C);continue}if(N!=null&&N.has(z)){h.push(C);continue}}f.push(C)}return{pinnedTopRows:i,pinnedBottomRows:h,normalRows:f}},[kn,X,N]),Gt=t.useCallback(i=>{un(h=>{const f=new Set(h);return f.has(i)?f.delete(i):f.add(i),f})},[]),wi=t.useMemo(()=>{var z;if(!b)return kn;const i=((z=gn.current)==null?void 0:z.clientHeight)??400,h=Math.ceil(i/_),f=Math.max(0,Math.floor(pn/_)-3),C=Math.min(kn.length-1,f+h+6);return kn.slice(f,C+1).map((ae,je)=>({...ae,_vIdx:f+je}))},[b,kn,pn,_]),ft=t.useCallback((i,h,f)=>{!B||ot||(P({rowKey:i,field:h}),Re(f))},[B]),qt=t.useCallback(()=>{j&&B&&B(j.rowKey,j.field,H),P(null),Re(null)},[j,H,B]),ji=t.useCallback(()=>{P(null),Re(null)},[]),ki=t.useCallback(()=>{const i=Oe,h=i.map(ie=>lt(ie.header)).join(","),f=jn.map(ie=>i.map(Le=>lt(String(ie[Le.field]??""))).join(",")),C=[h,...f].join(`
3
+ `),z=new Blob(["\uFEFF"+C],{type:"text/csv;charset=utf-8;"}),ae=URL.createObjectURL(z),je=document.createElement("a");je.href=ae,je.download=`${he}.csv`,je.click(),URL.revokeObjectURL(ae)},[Oe,jn,he]),bt=t.useCallback(i=>{L?L(i):jt(i)},[L]),_t=t.useCallback(i=>{xe?xe(i):An(i)},[xe]),Nn=t.useMemo(()=>kn.filter(i=>i.type==="data").map(i=>i.key),[kn]),Ni=t.useCallback(i=>{if(!be||j||!rn)return;const h=Nn.indexOf(rn.rowKey),f=Ie.findIndex(je=>je.field===rn.field);if(h<0||f<0)return;let C=h,z=f;switch(i.key){case"ArrowUp":C=Math.max(0,h-1);break;case"ArrowDown":C=Math.min(Nn.length-1,h+1);break;case"ArrowLeft":z=Math.max(0,f-1);break;case"ArrowRight":z=Math.min(Ie.length-1,f+1);break;case"Tab":i.preventDefault(),i.shiftKey?z=Math.max(0,f-1):z=Math.min(Ie.length-1,f+1);break;case"Enter":const je=Ie[f];if(je.editable&&B){const ie=Rn.find(Le=>String(Le[r])===rn.rowKey);ie&&ft(rn.rowKey,je.field,ie[je.field])}return;case"Escape":bt(null),_t(null);return;case"Home":i.ctrlKey&&(C=0),z=0;break;case"End":i.ctrlKey&&(C=Nn.length-1),z=Ie.length-1;break;case"PageUp":C=Math.max(0,h-T);break;case"PageDown":C=Math.min(Nn.length-1,h+T);break;default:return}i.preventDefault();const ae={rowKey:Nn[C],field:Ie[z].field};if(bt(ae),i.shiftKey&&Se){const je=(Ve==null?void 0:Ve.start)??rn;_t({start:je,end:ae})}else _t(null)},[be,j,rn,Nn,Ie,Se,Ve,bt,_t,B,Rn,r,ft,T]),Bt=t.useCallback(()=>{let i=[],h=[];if(Ve){const f=Nn.indexOf(Ve.start.rowKey),C=Nn.indexOf(Ve.end.rowKey),z=Math.min(f,C),ae=Math.max(f,C),je=Ie.findIndex(qe=>qe.field===Ve.start.field),ie=Ie.findIndex(qe=>qe.field===Ve.end.field),Le=Math.min(je,ie),Ee=Math.max(je,ie);h=Ie.slice(Le,Ee+1).map(qe=>qe.field),i=Rn.filter(qe=>{const We=Nn.indexOf(String(qe[r]));return We>=z&&We<=ae})}else ue.size>0&&(i=Rn.filter(f=>ue.has(String(f[r]))),h=Ie.map(f=>f.field));return{rows:i,fields:h}},[Ve,Nn,Ie,Rn,r,ue]),Ht=t.useCallback((i,h,f)=>{const C=Ie.filter(z=>h.includes(z.field));switch(f){case"json":return JSON.stringify(i.map(We=>Object.fromEntries(h.map(Be=>[Be,We[Be]]))),null,2);case"csv":const z=C.map(We=>lt(We.header)).join(","),ae=i.map(We=>C.map(Be=>lt(String(We[Be.field]??""))).join(",")).join(`
4
+ `);return z+`
5
+ `+ae;case"html":const je=C.map(We=>`<th>${We.header}</th>`).join(""),ie=i.map(We=>`<tr>${C.map(Be=>`<td>${We[Be.field]??""}</td>`).join("")}</tr>`).join("");return`<table><thead><tr>${je}</tr></thead><tbody>${ie}</tbody></table>`;case"markdown":const Le="| "+C.map(We=>We.header).join(" | ")+" |",Ee="| "+C.map(()=>"---").join(" | ")+" |",qe=i.map(We=>"| "+C.map(Be=>We[Be.field]??"").join(" | ")+" |").join(`
6
+ `);return Le+`
7
+ `+Ee+`
8
+ `+qe;default:return i.map(We=>C.map(Be=>We[Be.field]??"").join(" ")).join(`
9
+ `)}},[Ie]),Ct=t.useCallback(async()=>{if(!sn)return;const{rows:i,fields:h}=Bt();if(!i.length||(hn==null?void 0:hn(i,h))===!1)return;const f=Ht(i,h,_n);await navigator.clipboard.writeText(f),Sn==null||Sn(i,h,_n)},[sn,Bt,hn,Ht,_n,Sn]),Xt=t.useCallback(async()=>{if(!sn||!rn||!Mn)return;const i=(await navigator.clipboard.readText()).split(`
10
+ `).map(h=>h.split(" "));Mn(i,rn)},[sn,rn,Mn]);t.useEffect(()=>{if(!sn||!it.current)return;const i=h=>{var f;(f=it.current)!=null&&f.contains(document.activeElement)&&(h.type==="copy"&&(h.preventDefault(),Ct()),h.type==="paste"&&(h.preventDefault(),Xt()))};return document.addEventListener("copy",i),document.addEventListener("paste",i),()=>{document.removeEventListener("copy",i),document.removeEventListener("paste",i)}},[sn,Ct,Xt]);const Ci=t.useCallback(i=>{const h=yn.includes(i)?yn.filter(f=>f!==i):[...yn,i];$?$(h):kt(h)},[yn,$]),Si=t.useMemo(()=>{if(!(Xe!=null&&Xe.length)||!yn.length)return jn;const i=Xe.filter(h=>yn.includes(h.key));return jn.filter(h=>i.every(f=>f.filter(h)))},[jn,Xe,yn]),Vt=Xe!=null&&Xe.length?Si:jn;t.useCallback(i=>{const h=jn.map(Le=>Le[i]).filter(Le=>Le!=null),f=h.filter(Le=>typeof Le=="number");if(f.length===0){const Le=new Set(h).size;return{count:h.length,unique:Le,type:"text"}}const C=f.reduce((Le,Ee)=>Le+Ee,0),z=C/f.length,ae=Math.min(...f),je=Math.max(...f),ie=Math.sqrt(f.reduce((Le,Ee)=>Le+(Ee-z)**2,0)/f.length);return{count:f.length,sum:C,avg:z,min:ae,max:je,stdDev:ie,type:"numeric"}},[jn]);const Mi=t.useCallback((i,h,f)=>{if(!i.cellVisualization)return null;const C=Number(h);if(isNaN(C))return null;const z=i.visualMin??0,ae=i.visualMax??100,je=Math.max(0,Math.min(100,(C-z)/(ae-z)*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:`${je}%`,height:"100%",background:je>80?"var(--color-success)":je>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(je),"%"]})]});case"rating":const ie=Math.round(C/ae*5);return e.jsx("div",{className:"nice-datagrid__cell-rating",children:[1,2,3,4,5].map(Qt=>e.jsx("span",{style:{color:Qt<=ie?"var(--color-warning)":"var(--text-muted)",fontSize:"0.85rem"},children:"?"},Qt))});case"trend":const Le=i.visualMin??C,Ee=C-Le,qe="?",We=Ee>0?"var(--color-success)":Ee<0?"var(--color-danger)":"var(--text-muted)";return e.jsxs("span",{style:{color:We,fontWeight:500},children:[qe," ",Math.abs(Ee).toFixed(1),"%"]});case"heatmap":const Be=je/100,yt=`rgba(${Math.round(255*Be)}, ${Math.round(100*(1-Be))}, ${Math.round(50*(1-Be))}, 0.6)`;return e.jsx("span",{style:{background:yt,padding:"2px 8px",borderRadius:4},children:C});default:return null}},[]),Di=t.useCallback((i,h,f)=>{var C;if(!((C=i.conditionalFormats)!=null&&C.length))return{};for(const z of i.conditionalFormats)if(z.when(h,f,i.field))return{className:z.className,style:{...z.style,backgroundColor:z.backgroundColor,color:z.color}};return{}},[]),St=t.useCallback((i,h)=>{if(!rt||!i.pinned)return{};const f={position:"sticky",zIndex:2,background:"var(--bg-primary, #fff)"};if(i.pinned==="left"){let C=0;for(let z=0;z<h;z++){const ae=Ie[z];ae.pinned==="left"&&(C+=typeof ae.width=="number"?ae.width:parseInt(String(ae.width)||"100",10))}p&&h===0&&(C=36),f.left=C}else{let C=0;for(let z=Ie.length-1;z>h;z--){const ae=Ie[z];ae.pinned==="right"&&(C+=typeof ae.width=="number"?ae.width:parseInt(String(ae.width)||"100",10))}f.right=C}return f},[rt,Ie,p]),Zt=(i,h,f,C)=>(j==null?void 0:j.rowKey)===f&&(j==null?void 0:j.field)===i.field?i.editor?i.editor(H,h,ae=>Re(ae)):e.jsx("input",{className:"nice-datagrid__edit-input",autoFocus:!0,value:H??"",onChange:ae=>Re(ae.target.value),onBlur:qt,onKeyDown:ae=>{ae.key==="Enter"&&qt(),ae.key==="Escape"&&ji()}}):Mi(i,h[i.field],h)||(i.render?i.render(h[i.field],h,C):Ii(h[i.field])),$i=(i,h,f,C)=>{const z=(rn==null?void 0:rn.rowKey)===f&&(rn==null?void 0:rn.field)===i.field,ae=Ve&&(()=>{const ie=Nn.indexOf(Ve.start.rowKey),Le=Nn.indexOf(Ve.end.rowKey),Ee=Nn.indexOf(f),qe=Ie.findIndex(Be=>Be.field===Ve.start.field),We=Ie.findIndex(Be=>Be.field===Ve.end.field);return Ee>=Math.min(ie,Le)&&Ee<=Math.max(ie,Le)&&C>=Math.min(qe,We)&&C<=Math.max(qe,We)})(),je=Di(i,h[i.field],h);return{className:[je.className,z&&"nice-datagrid__cell--focused",ae&&"nice-datagrid__cell--in-range"].filter(Boolean).join(" "),style:{...St(i,C),textAlign:i.align,...je.style,...z?{outline:"2px solid var(--color-primary)",outlineOffset:-2}:{},...ae?{background:"var(--color-primary-light, rgba(59,130,246,0.15))"}:{}}}},xt=Ie.length+(p?1:0)+(E?1:0)+(ve?1:0)+(Je?1:0),Mt=(i,h,f)=>{const{row:C,key:z}=i,ae=ue.has(z),je=fn.has(z),ie=tt.has(z),Le=[ae&&"nice-datagrid__row--selected",On===h&&"nice-datagrid__row--dragging",f&&"nice-datagrid__row--pinned",ie&&"nice-datagrid__row--flash"].filter(Boolean).join(" ");return e.jsxs(t.Fragment,{children:[e.jsxs("tr",{className:Le,onClick:()=>Ae==null?void 0:Ae(C),onDoubleClick:me==="popup"&&(U||B)?()=>te({key:z,data:{...C}}):void 0,onContextMenu:Ee=>ht(Ee,C),style:Ae||me==="popup"?{cursor:"pointer"}:void 0,draggable:ve,onDragStart:ve?()=>$n(h):void 0,onDragOver:ve?Ee=>Ee.preventDefault():void 0,onDrop:ve&&Me&&On!=null?()=>{Me(On,h),$n(null)}:void 0,onDragEnd:ve?()=>$n(null):void 0,children:[Je&&e.jsx("td",{className:"nice-datagrid__row-indicator",style:{width:32,padding:"0 4px"},children:Je(C)}),E&&e.jsx("td",{className:"nice-datagrid__expand-col",onClick:Ee=>{Ee.stopPropagation(),pt(z)},children:e.jsx("span",{className:"nice-datagrid__expand-btn",children:"?"})}),ve&&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:Ee=>Ee.stopPropagation(),style:rt?{position:"sticky",left:0,zIndex:1,background:"var(--bg-primary, #fff)"}:void 0,children:e.jsx("input",{type:"checkbox",checked:ae,onChange:()=>Ut(z),"aria-label":`Select row ${z}`})}),(()=>{let Ee=0;return Ie.map((qe,We)=>{if(Ee>0)return Ee--,null;const Be=_e?_e(C,qe,We):void 0;Be&&Be>1&&(Ee=Be-1);const yt=$i(qe,C,z,We);return e.jsx("td",{colSpan:Be,className:yt.className,style:yt.style,onClick:be?()=>bt({rowKey:z,field:qe.field}):void 0,onDoubleClick:qe.editable&&B?()=>ft(z,qe.field,C[qe.field]):void 0,children:Zt(qe,C,z,h)},qe.field)})})()]}),E&&je&&e.jsx("tr",{className:"nice-datagrid__detail-row",children:e.jsx("td",{colSpan:xt,children:E(C)})})]},z)};return e.jsxs("div",{ref:it,className:`nice-datagrid ${V?"nice-datagrid--print":""} ${Gn||""}`,style:qn,role:"grid","aria-label":Pe("datagrid.title","Data Grid"),"aria-rowcount":kn.length,"aria-colcount":Oe.length,"aria-busy":Pn||void 0,tabIndex:be?0:void 0,onKeyDown:be?Ni:void 0,children:[(x||Fe||w||(Xe==null?void 0:Xe.length)||oe)&&e.jsxs("div",{className:"nice-datagrid__toolbar",children:[x&&e.jsx("div",{className:"nice-datagrid__search",children:e.jsx("input",{type:"text",value:Ge?tn.search:m,"aria-label":Pe("controls.search","Search"),onChange:i=>{Ge?tn.setSearch(i.target.value):(M(i.target.value),Nt(1))},placeholder:s||Pe("controls.search","Search...")})}),Xe&&Xe.length>0&&e.jsx("div",{className:"nice-datagrid__quick-filters",style:{display:"flex",gap:6,flexWrap:"wrap"},children:Xe.map(i=>e.jsxs("button",{className:`nice-datagrid__quick-filter ${yn.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:yn.includes(i.key)?`var(--color-${i.color||"primary"})`:"var(--bg-primary)",color:yn.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))}),sn&&e.jsx("button",{className:"nice-btn nice-btn--sm nice-btn--ghost",onClick:Ct,title:Pe("controls.copy","Copy selected"),style:{marginLeft:4},children:"??"}),w&&e.jsx("button",{className:"nice-btn nice-btn--sm",onClick:ki,title:Pe("controls.exportCsv","Export CSV"),children:"CSV ?"}),oe&&e.jsxs("button",{type:"button",className:"nice-btn nice-btn--sm nice-btn--primary",onClick:()=>te({key:null,data:{}}),title:Pe("datagrid.addRow","Add row"),children:["+ ",Pe("datagrid.add","Add")]}),Fe]}),p&&ue.size>0&&((R==null?void 0:R.length)||O)&&e.jsxs("div",{className:"nice-datagrid__bulk-toolbar",role:"toolbar","aria-label":Pe("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:Pe("datagrid.selectedCount","{count} selected").replace("{count}",String(ue.size))}),(R||[]).map(i=>{var z;const h=Array.from(ue),f=Vt.filter(ae=>ue.has(String(ae[r]))),C=((z=i.disabled)==null?void 0:z.call(i,h,f))||!1;return e.jsxs("button",{type:"button",className:`nice-btn nice-btn--sm nice-btn--${i.variant||"secondary"}`,disabled:C,onClick:()=>i.onClick(h,f),children:[i.icon,i.icon&&" ",i.label]},i.key)}),O&&!(R!=null&&R.length)&&e.jsxs("button",{type:"button",className:"nice-btn nice-btn--sm nice-btn--danger",onClick:()=>{const i=Array.from(ue),h=Vt.filter(f=>ue.has(String(f[r])));O(i,h)},children:["?? ",Pe("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&&d(i),D==null||D(i)},style:{marginLeft:"auto"},children:Pe("datagrid.clearSelection","Clear")})]}),e.jsxs("div",{ref:gn,className:`nice-datagrid__table-wrap ${b?"nice-datagrid__table-wrap--virtual":""}`,style:b?{maxHeight:Math.min(kn.length*_,600),overflowY:"auto"}:void 0,onScroll:b?i=>ln(i.currentTarget.scrollTop):void 0,children:[b&&e.jsxs("div",{style:{height:kn.length*_,position:"relative"},children:[e.jsx("table",{className:`${Ue?"nice-table--striped":""} ${Ye?"nice-table--compact":""}`,style:{position:"sticky",top:0,zIndex:3},children:e.jsx("thead",{children:e.jsxs("tr",{children:[E&&e.jsx("th",{className:"nice-datagrid__expand-col",style:{width:36}}),ve&&e.jsx("th",{style:{width:28}}),p&&e.jsx("th",{className:"nice-datagrid__checkbox",style:rt?{position:"sticky",left:0,zIndex:3,background:"var(--bg-primary, #fff)"}:void 0,children:e.jsx("input",{type:"checkbox",checked:Jn,ref:i=>{i&&(i.indeterminate=Ot&&!Jn)},onChange:Wt,"aria-label":Pe("controls.selectAll","Select all")})}),Ie.map((i,h)=>e.jsxs("th",{style:{width:bn[i.field]||i.width,minWidth:i.minWidth,textAlign:i.align,position:"relative",...St(i,h)},className:o&&i.sortable!==!1?"nice-datagrid__th--sortable":void 0,onClick:()=>o&&i.sortable!==!1&&Tt(i.field),children:[i.header,o&&i.sortable!==!1&&e.jsx(Kt,{field:i.field}),Ce&&e.jsx("span",{className:"nice-datagrid__resize-handle",onMouseDown:f=>{f.stopPropagation(),at(i.field,f)}})]},i.field))]})})}),wi.map((i,h)=>{const f=i._vIdx??0;if(i.type==="group"){const ie=i;return e.jsxs("div",{className:"nice-datagrid__group-row",style:{position:"absolute",top:f*_,height:_,left:0,right:0},onClick:()=>Gt(ie.key),children:[e.jsx("span",{className:"nice-datagrid__group-toggle",children:(ie.expanded,"?")}),Z?Z(ie.value,ie.rows):e.jsxs(e.Fragment,{children:[String(ie.value)," (",ie.rows.length,")"]})]},ie.key)}const{row:C,key:z}=i,ae=ue.has(z),je=fn.has(z);return e.jsxs(t.Fragment,{children:[e.jsxs("div",{className:`nice-datagrid__vrow ${ae?"nice-datagrid__row--selected":""} ${On===h?"nice-datagrid__row--dragging":""}`,style:{position:"absolute",top:f*_,height:_,left:0,right:0,display:"flex",alignItems:"center"},onClick:()=>Ae==null?void 0:Ae(C),onDoubleClick:me==="popup"&&(U||B)?()=>te({key:z,data:{...C}}):void 0,draggable:ve,onDragStart:ve?()=>$n(h):void 0,onDragOver:ve?ie=>ie.preventDefault():void 0,onDrop:ve&&Me&&On!=null?()=>{Me(On,h),$n(null)}:void 0,onDragEnd:ve?()=>$n(null):void 0,children:[E&&e.jsx("div",{className:"nice-datagrid__expand-col",style:{width:36,flexShrink:0,textAlign:"center",cursor:"pointer"},onClick:ie=>{ie.stopPropagation(),pt(z)},children:e.jsx("span",{className:"nice-datagrid__expand-btn",children:"?"})}),ve&&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:ie=>ie.stopPropagation(),children:e.jsx("input",{type:"checkbox",checked:ae,onChange:()=>Ut(z)})}),Ie.map(ie=>e.jsx("div",{className:"nice-datagrid__vcell",style:{width:bn[ie.field]||ie.width||"auto",flex:bn[ie.field]||ie.width?`0 0 ${typeof(bn[ie.field]||ie.width)=="number"?(bn[ie.field]||ie.width)+"px":bn[ie.field]||ie.width}`:1,textAlign:ie.align,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",padding:"0 8px"},onDoubleClick:ie.editable&&B?()=>ft(z,ie.field,C[ie.field]):void 0,children:Zt(ie,C,z,f)},ie.field))]}),E&&je&&e.jsx("div",{className:"nice-datagrid__detail-row",style:{position:"absolute",top:(f+1)*_,left:0,right:0,padding:"8px 12px",background:"var(--bg-secondary, #f8f8f8)"},children:E(C)})]},z)})]}),!b&&e.jsxs("table",{className:`${Ue?"nice-table--striped":""} ${Ye?"nice-table--compact":""}`,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[E&&e.jsx("th",{className:"nice-datagrid__expand-col",style:{width:36}}),ve&&e.jsx("th",{style:{width:28}}),p&&e.jsx("th",{className:"nice-datagrid__checkbox",style:rt?{position:"sticky",left:0,zIndex:3,background:"var(--bg-primary, #fff)"}:void 0,children:e.jsx("input",{type:"checkbox",checked:Jn,ref:i=>{i&&(i.indeterminate=Ot&&!Jn)},onChange:Wt,"aria-label":Pe("controls.selectAll","Select all")})}),Ie.map((i,h)=>{const f=o&&i.sortable!==!1,C=f?v===i.field?re==="asc"?"ascending":re==="desc"?"descending":"none":"none":void 0;return e.jsxs("th",{style:{width:bn[i.field]||i.width,minWidth:i.minWidth,textAlign:i.align,position:"relative",...St(i,h)},className:f?"nice-datagrid__th--sortable":void 0,onClick:()=>f&&Tt(i.field),"aria-sort":C,scope:"col",children:[i.header,f&&e.jsx(Kt,{field:i.field}),Ce&&e.jsx("span",{className:"nice-datagrid__resize-handle",onMouseDown:z=>{z.stopPropagation(),at(i.field,z)}})]},i.field)})]})}),e.jsx("tbody",{children:Pn?e.jsx("tr",{children:e.jsx("td",{colSpan:xt,className:"nice-datagrid__empty",children:e.jsx("div",{className:"nice-spinner nice-spinner--md",style:{margin:"0 auto"}})})}):kn.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:xt,className:"nice-datagrid__empty",children:He||Pe("controls.noData","No data available")})}):e.jsxs(e.Fragment,{children:[xi.map((i,h)=>i.type==="data"&&Mt(i,h,"top")),vi.map((i,h)=>{if(i.type==="group"){const f=i;return e.jsx("tr",{className:"nice-datagrid__group-row",onClick:()=>Gt(f.key),children:e.jsxs("td",{colSpan:xt,className:"nice-datagrid__group-cell",children:[e.jsx("span",{className:"nice-datagrid__group-toggle",children:(f.expanded,"?")}),Z?Z(f.value,f.rows):e.jsxs(e.Fragment,{children:[String(f.value)," (",f.rows.length,")"]})]})},f.key)}return Mt(i,h)}),yi.map((i,h)=>i.type==="data"&&Mt(i,h,"bottom"))]})}),bi&&!Pn&&Rn.length>0&&e.jsx("tfoot",{children:e.jsxs("tr",{className:"nice-datagrid__aggregate-row",children:[p&&e.jsx("td",{}),Ie.map(i=>e.jsx("td",{style:{textAlign:i.align,fontWeight:600},children:i.aggregate?(i.aggregateLabel||i.aggregate.toUpperCase())+": "+li(jn,i.field,i.aggregate):""},i.field))]})})]})]}),K&&e.jsxs("div",{className:"nice-datagrid__footer",children:[e.jsxs("span",{className:"nice-datagrid__footer-info",children:[Pe("controls.showing","Showing")," ",(we-1)*Zn+1,"�",Math.min(we*Zn,gt)," ",Pe("controls.of","of")," ",gt]}),e.jsx(ai,{page:we,totalPages:_i,onChange:Nt,showInfo:!0,pageSize:Zn,showPageSize:!0,pageSizeOptions:[5,10,25,50,100],onPageSizeChange:i=>{Ge?tn.setPageSize(i):(ee(i),Nt(1))},showFirstLast:!0})]}),fe&&!Pn&&e.jsxs("div",{className:"nice-datagrid__status-bar",children:[e.jsxs("span",{children:[Pe("controls.totalRows","Total rows"),": ",gt]}),p&&ue.size>0&&e.jsxs("span",{children:[Pe("controls.selected","Selected"),": ",ue.size]})]}),Wn&&pe&&e.jsx("div",{className:"nice-datagrid__context-menu",style:{position:"fixed",left:Wn.x,top:Wn.y,zIndex:9999},onClick:i=>i.stopPropagation(),children:pe.map(i=>e.jsxs("button",{className:"nice-datagrid__context-item",disabled:i.disabled,onClick:()=>{y==null||y(i.key,Wn.row),et(null)},children:[i.icon&&e.jsx("span",{className:"nice-datagrid__context-icon",children:i.icon}),i.label]},i.key))}),(me==="popup"||oe)&&De&&(()=>{const i=De.key===null,h=ce??n.filter(f=>!f.hidden&&f.field!==r).map(f=>{var z;let C="text";return f.dataType==="number"||f.dataType==="currency"||f.dataType==="percent"?C="number":f.dataType==="boolean"?C="checkbox":f.dataType==="date"&&(C="date"),{field:f.field,label:f.header,type:C,required:(z=f.validation)==null?void 0:z.required}});return e.jsx($t,{open:!0,onClose:()=>te(null),title:ge??(i?Pe("datagrid.addRow","Add row"):Pe("datagrid.editRow","Edit row")),size:"lg",children:e.jsx(q.La,{items:h,data:De.data,columns:A,showActions:!0,submitLabel:i?Pe("controls.add","Add"):Pe("controls.save","Save"),cancelLabel:Pe("controls.cancel","Cancel"),onCancel:()=>te(null),...ye,onFieldChange:(f,C)=>te(z=>z&&{...z,data:{...z.data,[f]:C}}),onSubmit:f=>{i?oe==null||oe(f):De.key&&(U?U(De.key,f):B&&Object.keys(f).forEach(C=>{B(De.key,C,f[C])})),te(null)}})})})()]})}ct.displayName="NiceDataGrid";const Li=Object.freeze(Object.defineProperty({__proto__:null,NiceDataGrid:ct},Symbol.toStringTag,{value:"Module"}));function Ei(n,a){return n.filter(r=>a.every(l=>{const o=r[l.field],u=l.value;switch(l.operator){case"eq":return o===u;case"ne":return o!==u;case"gt":return typeof o=="number"&&typeof u=="number"&&o>u;case"gte":return typeof o=="number"&&typeof u=="number"&&o>=u;case"lt":return typeof o=="number"&&typeof u=="number"&&o<u;case"lte":return typeof o=="number"&&typeof u=="number"&&o<=u;case"contains":return String(o).toLowerCase().includes(String(u).toLowerCase());case"startsWith":return String(o).toLowerCase().startsWith(String(u).toLowerCase());case"endsWith":return String(o).toLowerCase().endsWith(String(u).toLowerCase());default:return!0}}))}function Fi(n){return n.map(a=>({field:a.field,type:a.dataType||"string",label:typeof a.header=="string"?a.header:a.field}))}function Ai(n,a){const{enableAI:r=!0,aiModel:l,enableNLSearch:o=!0,enableInsights:u=!0,nlPlaceholder:g,onAIFilter:c,onInsights:p,showAISearchBar:S=!0,exampleQueries:D=["Show items from last week","Filter by status = active","Orders over $1000",'Names starting with "A"'],columns:K,data:k,...W}=n,[F,J]=t.useState(""),[x,s]=t.useState([]),[b,_]=t.useState([]),[I,Z]=t.useState(!1),[B,me]=t.useState(null),ce=t.useRef(null),{t:A}=q.ue(),ge=q.me(),{parseFilter:ye,isLoading:U}=q.wd(),oe=r&&ge.isConfigured,Y=x.length>0?Ei(k||[],x):k,R=t.useCallback(async Q=>{if(!oe||!o||!Q.trim())return;me(Q);const ne=Fi(K);try{const G=await ye(Q,ne);s(G),c==null||c(Q,G)}catch{s([])}},[oe,o,K,ye,c]),O=t.useCallback(()=>{s([]),me(null),J("")},[]),w=t.useCallback(()=>x,[x]),he=t.useCallback(async()=>{if(!oe||!u||!(k!=null&&k.length))return[];try{const Q=await ge.complete([{role:"user",content:`Analyze this data and provide 3-5 key insights. Data sample (${k.length} total rows): ${JSON.stringify(k.slice(0,20))}
11
+
12
+ Columns: ${K.map(ne=>ne.field).join(", ")}
13
+
14
+ Return a JSON array of insight strings. Be specific with numbers and trends.`}],{temperature:.3,maxTokens:500});try{const ne=JSON.parse(Q.content),G=Array.isArray(ne)?ne:[];return _(G),p==null||p(G),G}catch{return[]}}catch{return[]}},[oe,u,k,K,ge,p]),E=Q=>{Q.preventDefault(),F.trim()&&R(F)},le=Q=>{J(Q),R(Q)};return t.useImperativeHandle(a,()=>({applyNLFilter:R,clearAIFilters:O,getAIFilters:w,generateInsights:he})),e.jsxs("div",{className:"nice-data-grid-ai","data-testid":n["data-testid"],children:[S&&oe&&o&&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:E,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:ce,type:"text",value:F,onChange:Q=>J(Q.target.value),placeholder:g||A("dataGridAI.searchPlaceholder","Search with natural language..."),className:"nice-data-grid-ai__input",disabled:U}),U&&e.jsx("span",{className:"nice-data-grid-ai__loading-spinner"}),F&&!U&&e.jsx("button",{type:"button",className:"nice-data-grid-ai__clear-input",onClick:()=>J(""),children:"✕"})]}),e.jsx("button",{type:"submit",className:"nice-data-grid-ai__search-btn",disabled:U||!F.trim(),children:U?A("dataGridAI.searching","Searching..."):A("dataGridAI.search","Search")})]}),u&&e.jsxs("button",{type:"button",className:"nice-data-grid-ai__insights-btn",onClick:()=>{he(),Z(!0)},disabled:U||!(k!=null&&k.length),title:A("dataGridAI.generateInsights","Generate AI Insights"),children:["💡 ",A("dataGridAI.insights","Insights")]})]}),S&&oe&&o&&!B&&D.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:D.slice(0,4).map((Q,ne)=>e.jsxs("button",{type:"button",className:"nice-data-grid-ai__example",onClick:()=>le(Q),children:['"',Q,'"']},ne))})]}),B&&x.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:['"',B,'"']}),e.jsxs("span",{className:"nice-data-grid-ai__filter-count",children:["(",(Y==null?void 0:Y.length)||0," ",A("dataGridAI.results","results"),")"]})]}),e.jsx("div",{className:"nice-data-grid-ai__filter-badges",children:x.map((Q,ne)=>e.jsxs("span",{className:"nice-data-grid-ai__filter-badge",children:[Q.field," ",Q.operator," ",String(Q.value)]},ne))}),e.jsxs("button",{type:"button",className:"nice-data-grid-ai__clear-filter",onClick:O,children:["✕ ",A("dataGridAI.clearFilter","Clear")]})]}),e.jsx("div",{className:"nice-data-grid-ai__grid-wrapper",children:e.jsx(ct,{columns:K,data:Y,...W})}),I&&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:()=>Z(!1),children:"✕"})]}),e.jsx("div",{className:"nice-data-grid-ai__insights-body",children:U?e.jsx("div",{className:"nice-data-grid-ai__insights-loading",children:A("dataGridAI.analyzing","Analyzing data...")}):b.length>0?e.jsx("ul",{className:"nice-data-grid-ai__insights-list",children:b.map((Q,ne)=>e.jsxs("li",{className:"nice-data-grid-ai__insight",children:[e.jsx("span",{className:"nice-data-grid-ai__insight-bullet",children:"•"}),Q]},ne))}):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:()=>he(),disabled:U,children:["🔄 ",A("dataGridAI.refresh","Refresh")]})})]})]})}t.forwardRef(Ai);const si=({items:n,selectedKeys:a=[],onSelectionChange:r,selectionMode:l="none",searchable:o,searchPlaceholder:u,grouped:g,groupField:c="group",reorderable:p,onReorder:S,onItemClick:D,renderItem:K,showCheckboxes:k,loading:W,emptyText:F,size:J="md",bordered:x=!0,swipeActions:s,className:b,style:_,accessMode:I,id:Z})=>{if(q.rl(I,Z)==="hidden")return null;const{t:B}=q.ue(),[me,ce]=t.useState(""),[A,ge]=t.useState(null),[ye,U]=t.useState(null),oe=t.useRef(null),Y=t.useMemo(()=>{if(!me)return n;const E=me.toLowerCase();return n.filter(le=>le.text.toLowerCase().includes(E))},[n,me]),R=t.useMemo(()=>{if(!g)return null;const E=new Map;return Y.forEach(le=>{const Q=String(le[c]??"");E.has(Q)||E.set(Q,[]),E.get(Q).push(le)}),E},[Y,g,c]),O=t.useCallback(E=>{r&&(l==="single"?r(a.includes(E)?[]:[E]):l==="multiple"&&r(a.includes(E)?a.filter(le=>le!==E):[...a,E]))},[a,l,r]),w=t.useCallback(E=>{A!==null&&A!==E&&S&&S(A,E),ge(null)},[A,S]),he=(E,le)=>{const Q=a.includes(E.key),ne=ye===E.key;return e.jsxs("li",{className:`nice-list__item ${Q?"nice-list__item--selected":""} ${E.disabled?"nice-list__item--disabled":""} ${ne?"nice-list__item--swiped":""}`,onClick:()=>{E.disabled||(O(E.key),D==null||D(E))},draggable:p,onDragStart:()=>ge(le),onDragOver:G=>G.preventDefault(),onDrop:()=>w(le),onTouchStart:s!=null&&s.length?G=>{oe.current={x:G.touches[0].clientX,key:E.key}}:void 0,onTouchEnd:s!=null&&s.length?G=>{if(!oe.current)return;const Ce=G.changedTouches[0].clientX-oe.current.x;Ce<-50&&oe.current.key===E.key?U(E.key):Ce>50&&U(null),oe.current=null}:void 0,role:l!=="none"?"option":void 0,"aria-selected":l!=="none"?Q:void 0,children:[e.jsxs("div",{className:"nice-list__item-content",children:[k&&l!=="none"&&e.jsx("input",{type:"checkbox",checked:Q,readOnly:!0,tabIndex:-1,className:"nice-list__checkbox"}),K?K(E):e.jsxs(e.Fragment,{children:[E.icon&&e.jsx("span",{className:"nice-list__icon",children:E.icon}),e.jsx("span",{className:"nice-list__text",children:E.text}),E.badge&&e.jsx("span",{className:"nice-list__badge",children:E.badge})]})]}),s&&ne&&e.jsx("div",{className:"nice-list__swipe-actions",children:s.map(G=>e.jsx("button",{className:"nice-list__swipe-btn",style:G.color?{backgroundColor:G.color}:void 0,onClick:Ce=>{Ce.stopPropagation(),G.onClick(E),U(null)},children:G.label},G.key))})]},E.key)};return e.jsxs("div",{className:`nice-list nice-list--${J} ${x?"nice-list--bordered":""} ${b||""}`,style:_,children:[o&&e.jsx("div",{className:"nice-list__search",children:e.jsx("input",{type:"text",value:me,onChange:E=>ce(E.target.value),placeholder:u||B("controls.search","Search...")})}),W?e.jsx("div",{className:"nice-list__loading",children:e.jsx("div",{className:"nice-spinner nice-spinner--sm"})}):Y.length===0?e.jsx("div",{className:"nice-list__empty",children:F||B("controls.noData","No data available")}):R?e.jsx("div",{role:"listbox",children:Array.from(R.entries()).map(([E,le])=>e.jsxs("div",{className:"nice-list__group",children:[e.jsx("div",{className:"nice-list__group-header",children:E}),e.jsx("ul",{className:"nice-list__items",children:le.map((Q,ne)=>he(Q,ne))})]},E))}):e.jsx("ul",{className:"nice-list__items",role:"listbox",children:Y.map((E,le)=>he(E,le))})]})};function ci(n){const a=[];if(n.children)for(const r of n.children)a.push(r.key),a.push(...ci(r));return a}function Dt(n,a){if(!n.children||n.children.length===0)return a.has(n.key)?"checked":"unchecked";let r=!0,l=a.has(n.key);for(const o of n.children){const u=Dt(o,a);u==="checked"?l=!0:(u==="indeterminate"&&(l=!0),r=!1)}return r&&l?"checked":l?"indeterminate":"unchecked"}const oi=({nodes:n,selectedKeys:a=[],expandedKeys:r,onSelectionChange:l,onExpandedChange:o,selectionMode:u="none",showCheckboxes:g,searchable:c,searchPlaceholder:p,onNodeClick:S,renderNode:D,showLines:K,loading:k,className:W,style:F,accessMode:J,id:x,draggable:s,onNodeDrop:b,onLoadChildren:_,contextMenuItems:I,onContextMenuAction:Z,editable:B,onNodeEdit:me})=>{if(q.rl(J,x)==="hidden")return null;const{t:ce}=q.ue(),[A,ge]=t.useState([]),[ye,U]=t.useState(""),[oe,Y]=t.useState(new Set),[R,O]=t.useState(new Map),[w,he]=t.useState(null),[E,le]=t.useState(null),[Q,ne]=t.useState(null),[G,Ce]=t.useState(""),ve=t.useRef(null),Me=r??A,Ue=t.useMemo(()=>new Set(a),[a]),Ye=t.useCallback(async(N,_e)=>{var y;const fe=!Me.includes(N),pe=fe?[...Me,N]:Me.filter(V=>V!==N);if(o?o(pe):ge(pe),fe&&_&&!((y=_e.children)!=null&&y.length)&&_e.leaf!==!0&&!R.has(N)){Y(be=>new Set(be).add(N));const V=await _(_e);O(be=>new Map(be).set(N,V)),Y(be=>{const nn=new Set(be);return nn.delete(N),nn})}},[Me,o,_,R]),ze=t.useCallback((N,_e)=>{var fe;if(l){if(u==="single")l(a.includes(N)?[]:[N]);else if(u==="multiple")if(g&&((fe=_e.children)!=null&&fe.length)){const pe=ci(_e),y=[N,...pe];if(Dt(_e,Ue)==="checked")l(a.filter(V=>!y.includes(V)));else{const V=new Set([...a,...y]);l(Array.from(V))}}else l(a.includes(N)?a.filter(pe=>pe!==N):[...a,N])}},[a,u,l,g,Ue]),He=t.useCallback(N=>{var fe;if(!ye)return!0;const _e=ye.toLowerCase();return N.text.toLowerCase().includes(_e)?!0:((fe=R.get(N.key)??N.children)==null?void 0:fe.some(pe=>He(pe)))??!1},[ye,R]),Fe=t.useCallback((N,_e)=>{I!=null&&I.length&&(N.preventDefault(),le({x:N.clientX,y:N.clientY,node:_e}))},[I]),Ae=t.useCallback(()=>{Q&&me&&me(Q,G),ne(null)},[Q,G,me]),X=(N,_e)=>{if(ye&&!He(N))return null;const fe=R.get(N.key)??N.children,pe=fe&&fe.length>0||N.leaf!==!0&&_&&!(fe!=null&&fe.length),y=Me.includes(N.key),V=Ue.has(N.key),be=oe.has(N.key),nn=g&&u==="multiple"&&(fe!=null&&fe.length)?Dt(N,Ue):V?"checked":"unchecked";return e.jsxs("li",{className:"nice-tree__node",role:"treeitem","aria-expanded":pe?y:void 0,draggable:s&&!N.disabled,onDragStart:s?L=>{L.stopPropagation(),he(N.key)}:void 0,onDragOver:s?L=>{L.preventDefault(),L.stopPropagation()}:void 0,onDrop:s&&w?L=>{L.stopPropagation(),b==null||b(w,N.key,"inside"),he(null)}:void 0,onDragEnd:s?()=>he(null):void 0,children:[e.jsxs("div",{className:`nice-tree__row ${V?"nice-tree__row--selected":""} ${N.disabled?"nice-tree__row--disabled":""} ${w===N.key?"nice-tree__row--dragging":""}`,style:{paddingLeft:_e*20+4},onClick:()=>{N.disabled||(ze(N.key,N),S==null||S(N))},onContextMenu:L=>Fe(L,N),onDoubleClick:B&&!N.disabled?()=>{ne(N.key),Ce(N.text)}:void 0,children:[e.jsx("span",{className:`nice-tree__toggle ${pe?y?"nice-tree__toggle--expanded":"":"nice-tree__toggle--leaf"}`,onClick:L=>{L.stopPropagation(),pe&&Ye(N.key,N)},children:be?e.jsx("span",{className:"nice-spinner nice-spinner--xs"}):pe?y?"▾":"▸":""}),g&&u!=="none"&&e.jsx("input",{type:"checkbox",checked:nn==="checked",ref:L=>{L&&(L.indeterminate=nn==="indeterminate")},onChange:()=>ze(N.key,N),onClick:L=>L.stopPropagation(),tabIndex:-1,className:"nice-tree__checkbox"}),Q===N.key?e.jsx("input",{type:"text",className:"nice-tree__edit-input",value:G,onChange:L=>Ce(L.target.value),onBlur:Ae,onKeyDown:L=>{L.key==="Enter"&&Ae(),L.key==="Escape"&&ne(null)},autoFocus:!0,onClick:L=>L.stopPropagation()}):D?D(N):e.jsxs(e.Fragment,{children:[N.icon&&e.jsx("span",{className:"nice-tree__icon",children:N.icon}),e.jsx("span",{className:"nice-tree__text",children:N.text})]})]}),fe&&fe.length>0&&y&&e.jsx("ul",{className:"nice-tree__children",role:"group",children:fe.map(L=>X(L,_e+1))})]},N.key)};return e.jsxs("div",{className:`nice-tree ${K?"nice-tree--lines":""} ${W||""}`,style:F,ref:ve,onClick:()=>le(null),children:[c&&e.jsx("div",{className:"nice-tree__search",children:e.jsx("input",{type:"text",value:ye,onChange:N=>U(N.target.value),placeholder:p||ce("controls.search","Search..."),"aria-label":p||ce("controls.search","Search tree")})}),k?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:n.map(N=>X(N,0))}),E&&I&&e.jsx("div",{className:"nice-tree__context-menu",style:{position:"fixed",top:E.y,left:E.x,zIndex:9999},children:I.map(N=>e.jsxs("div",{className:`nice-tree__context-item ${N.disabled?"nice-tree__context-item--disabled":""}`,onClick:()=>{N.disabled||(Z==null||Z(N.key,E.node),le(null))},children:[N.icon&&e.jsx("span",{children:N.icon}),N.label]},N.key))})]})};function Pi(n,a,r){const l=new Map,o=[];return n.forEach(u=>{const g={...u,children:[]};l.set(String(g[a]),g)}),n.forEach(u=>{const g=u[r];g!=null&&l.has(String(g))?l.get(String(g)).children.push(l.get(String(u[a]))):o.push(l.get(String(u[a])))}),o}function di({columns:n,data:a,keyField:r="key",parentKeyField:l="parentKey",expandedKeys:o,onExpandedChange:u,selectedKeys:g=[],onSelectionChange:c,selectable:p,loading:S,emptyText:D,className:K,style:k,accessMode:W,id:F}){if(q.rl(W,F)==="hidden")return null;const{t:J}=q.ue(),[x,s]=t.useState([]),b=o??x,_=t.useMemo(()=>Pi(a,r,l),[a,r,l]),I=t.useMemo(()=>n.filter(ce=>!ce.hidden),[n]),Z=t.useCallback(ce=>{const A=b.includes(ce)?b.filter(ge=>ge!==ce):[...b,ce];u?u(A):s(A)},[b,u]),B=t.useCallback(ce=>{c&&c(g.includes(ce)?g.filter(A=>A!==ce):[...g,ce])},[g,c]),me=(ce,A)=>{const ge=String(ce[r]),ye=ce.children&&ce.children.length>0,U=b.includes(ge),oe=g.includes(ge);return e.jsxs(t.Fragment,{children:[e.jsxs("tr",{className:oe?"nice-treelist__row--selected":"",children:[p&&e.jsx("td",{className:"nice-treelist__checkbox",children:e.jsx("input",{type:"checkbox",checked:oe,onChange:()=>B(ge)})}),I.map((Y,R)=>e.jsxs("td",{style:{textAlign:Y.align},children:[R===0&&e.jsx("span",{style:{display:"inline-block",width:A*20}}),R===0&&e.jsx("span",{className:"nice-treelist__toggle",onClick:()=>ye&&Z(ge),style:{cursor:ye?"pointer":"default",width:20,display:"inline-block"},children:ye?U?"▾":"▸":""}),Y.render?Y.render(ce[Y.field],ce,0):String(ce[Y.field]??"")]},Y.field))]}),ye&&U&&ce.children.map(Y=>me(Y,A+1))]},ge)};return e.jsx("div",{className:`nice-treelist ${K||""}`,style:k,children:e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[p&&e.jsx("th",{className:"nice-treelist__checkbox"}),I.map(ce=>e.jsx("th",{style:{width:ce.width,minWidth:ce.minWidth,textAlign:ce.align},children:ce.header},ce.field))]})}),e.jsx("tbody",{children:S?e.jsx("tr",{children:e.jsx("td",{colSpan:I.length+(p?1:0),className:"nice-treelist__empty",children:e.jsx("div",{className:"nice-spinner nice-spinner--md",style:{margin:"0 auto"}})})}):_.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:I.length+(p?1:0),className:"nice-treelist__empty",children:D||J("controls.noData","No data available")})}):_.map(ce=>me(ce,0))})]})})}function ui({items:n,renderCard:a,columns:r=3,gap:l=16,searchable:o,searchField:u="text",searchPlaceholder:g,loading:c,emptyText:p,onCardClick:S,className:D,style:K,accessMode:k,id:W}){if(q.rl(k,W)==="hidden")return null;const{t:F}=q.ue(),[J,x]=t.useState(""),s=t.useMemo(()=>{if(!J)return n;const b=J.toLowerCase();return n.filter(_=>String(_[u]??"").toLowerCase().includes(b))},[n,J,u]);return e.jsxs("div",{className:`nice-cardview ${D||""}`,style:K,children:[o&&e.jsx("div",{className:"nice-cardview__search",children:e.jsx("input",{type:"text",value:J,onChange:b=>x(b.target.value),placeholder:g||F("controls.search","Search...")})}),c?e.jsx("div",{className:"nice-cardview__loading",children:e.jsx("div",{className:"nice-spinner nice-spinner--md"})}):s.length===0?e.jsx("div",{className:"nice-cardview__empty",children:p||F("controls.noData","No data available")}):e.jsx("div",{className:"nice-cardview__grid",style:{display:"grid",gridTemplateColumns:`repeat(${r}, 1fr)`,gap:l},children:s.map(b=>e.jsx("div",{className:"nice-cardview__card",onClick:()=>S==null?void 0:S(b),style:S?{cursor:"pointer"}:void 0,children:a(b)},b.key))})]})}function mi({items:n,tileWidth:a=180,tileHeight:r=180,direction:l="horizontal",renderTile:o,onTileClick:u,loading:g,emptyText:c,className:p,style:S}){const{t:D}=q.ue();return e.jsx("div",{className:`nice-tileview nice-tileview--${l} ${p||""}`,style:S,children:g?e.jsx("div",{className:"nice-tileview__loading",children:e.jsx("div",{className:"nice-spinner nice-spinner--md"})}):n.length===0?e.jsx("div",{className:"nice-tileview__empty",children:c||D("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:n.map(K=>e.jsx("div",{className:"nice-tileview__tile",style:{width:a,height:r,cursor:u?"pointer":void 0},onClick:()=>u==null?void 0:u(K),children:o?o(K):e.jsxs(e.Fragment,{children:[K.image&&e.jsx("img",{src:K.image,alt:K.text||"",className:"nice-tileview__image"}),K.text&&e.jsx("div",{className:"nice-tileview__label",children:K.text})]})},K.key))})})}const ei=[{key:"row",label:"Rows"},{key:"column",label:"Columns"},{key:"data",label:"Values"},{key:"filter",label:"Filters"}],Rt=({fields:n,onChange:a,className:r,style:l})=>{const o=n.filter(c=>!c.area),u=(c,p)=>{a(n.map(S=>S.field===c?{...S,area:p}:S))},g=c=>{a(n.map(p=>p.field===c?{...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:o.map(c=>e.jsxs("li",{className:"nice-field-chooser__item",children:[e.jsx("span",{children:c.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:()=>u(c.field,p.key),children:p.label},p.key))})]},c.field))})]}),ei.map(c=>{const p=n.filter(S=>S.area===c.key);return e.jsxs("div",{className:"nice-field-chooser__section",children:[e.jsx("h4",{children:c.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:()=>g(S.field),children:"✕"})]},S.field))})]},c.key)})]})})};function Ti(n,a){if(n.length===0)return 0;switch(a){case"sum":return n.reduce((r,l)=>r+l,0);case"count":return n.length;case"avg":return n.reduce((r,l)=>r+l,0)/n.length;case"min":return Math.min(...n);case"max":return Math.max(...n);default:return n.reduce((r,l)=>r+l,0)}}function ni(n,a){return[...new Set(n.map(r=>String(r[a]??"")))].sort()}const zt=({data:n,fields:a,onFieldsChange:r,showFieldChooser:l,loading:o,emptyText:u,exportCsv:g,exportFilename:c="pivot-export",onDrillThrough:p,className:S,style:D,accessMode:K,id:k})=>{if(q.rl(K,k)==="hidden")return null;const{t:W}=q.ue(),[F,J]=t.useState(a),[x,s]=t.useState(!1),b=t.useMemo(()=>F.filter(U=>U.area==="row"),[F]),_=t.useMemo(()=>F.filter(U=>U.area==="column"),[F]),I=t.useMemo(()=>F.filter(U=>U.area==="data"),[F]),Z=t.useMemo(()=>b.length===0?["Total"]:ni(n,b[0].field),[n,b]),B=t.useMemo(()=>_.length===0?["Total"]:ni(n,_[0].field),[n,_]),me=t.useCallback((U,oe,Y)=>{let R=n;b.length>0&&(R=R.filter(he=>String(he[b[0].field])===U)),_.length>0&&(R=R.filter(he=>String(he[_[0].field])===oe));const O=R.map(he=>Number(he[Y.field])||0),w=Ti(O,Y.summaryType||"sum");return Y.format?Y.format(w):w},[n,b,_]),ce=t.useCallback(U=>{J(U),r==null||r(U)},[r]),A=t.useCallback((U,oe)=>{let Y=n;return b.length>0&&(Y=Y.filter(R=>String(R[b[0].field])===U)),_.length>0&&(Y=Y.filter(R=>String(R[_[0].field])===oe)),Y},[n,b,_]),ge=t.useCallback((U,oe)=>{p&&p(U,oe,A(U,oe))},[p,A]),ye=t.useCallback(()=>{const U=["",...B.flatMap(he=>I.length>0?I.map(E=>`${he} - ${E.caption}`):[he])],oe=Z.map(he=>{const E=B.flatMap(le=>I.length>0?I.map(Q=>String(me(he,le,Q))):["—"]);return[he,...E]}),Y=[U,...oe].map(he=>he.map(E=>`"${String(E).replace(/"/g,'""')}"`).join(",")).join(`
15
+ `),R=new Blob(["\uFEFF"+Y],{type:"text/csv;charset=utf-8;"}),O=URL.createObjectURL(R),w=document.createElement("a");w.href=O,w.download=`${c}.csv`,w.click(),URL.revokeObjectURL(O)},[B,Z,I,me,c]);return e.jsxs("div",{className:`nice-pivotgrid ${S||""}`,style:D,children:[(l||g)&&e.jsxs("div",{className:"nice-pivotgrid__toolbar",children:[l&&e.jsx("button",{type:"button",className:"nice-btn nice-btn--outline nice-btn--sm",onClick:()=>s(!x),children:W("controls.fieldChooser","Field Chooser")}),g&&e.jsx("button",{type:"button",className:"nice-btn nice-btn--sm",onClick:ye,children:"CSV ↓"})]}),x&&e.jsx(Rt,{fields:F,onChange:ce}),o?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:b.map(U=>U.caption).join(" / ")||""}),B.map(U=>e.jsx("th",{colSpan:I.length||1,children:U},U))]}),I.length>1&&e.jsxs("tr",{children:[e.jsx("th",{}),B.map(U=>I.map(oe=>e.jsx("th",{children:oe.caption},`${U}-${oe.field}`)))]})]}),e.jsx("tbody",{children:Z.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:1+B.length*Math.max(I.length,1),className:"nice-pivotgrid__empty",children:u||W("controls.noData","No data available")})}):Z.map(U=>e.jsxs("tr",{children:[e.jsx("td",{className:"nice-pivotgrid__row-header",children:U}),B.map(oe=>I.length>0?I.map(Y=>e.jsx("td",{className:`nice-pivotgrid__cell ${p?"nice-pivotgrid__cell--clickable":""}`,onClick:p?()=>ge(U,oe):void 0,children:me(U,oe,Y)},`${oe}-${Y.field}`)):e.jsx("td",{className:"nice-pivotgrid__cell",children:"—"},oe))]},U))})]})})]})},Oi=Object.freeze(Object.defineProperty({__proto__:null,NicePivotGrid:zt},Symbol.toStringTag,{value:"Module"})),It=t.forwardRef(({columns:n,cards:a,onCardMove:r,onCardClick:l,renderCard:o,onAddCard:u,disabled:g=!1,size:c="md",collapsible:p=!1,viewMode:S,onViewModeChange:D,collapsedColumns:K,onCollapsedColumnsChange:k,formItems:W,formColumns:F=1,formProps:J,editCardTitle:x,newCardTitle:s,onCardEdit:b,onCardCreate:_,onCardDelete:I,cookies:Z=!1,localStorage:B=!0,sessionStorage:me=!1,storageMode:ce,storageKey:A,className:ge,style:ye,id:U,...oe},Y)=>{const{t:R}=q.ue(),[O,w]=t.useState(null),[he,E]=t.useState(null),[le,Q]=t.useState(null),ne=!!W&&(!!b||!!_),G=t.useCallback(y=>{if(ne&&b){Q({key:y.key,data:{...y},column:y.column});return}l==null||l(y)},[ne,l,b]),Ce=t.useCallback(y=>{if(ne&&_){Q({key:null,data:{title:"",description:""},column:y});return}u==null||u(y)},[ne,u,_]),ve=q.la(A??"nice-kanban"),[Me,Ue]=t.useState(()=>ve.get("state")??{collapsedColumns:[],viewMode:"default"}),Ye=K??Me.collapsedColumns??[],ze=S??Me.viewMode??"default",He=t.useCallback(y=>{Ue(V=>{const be={...V,...y};return ve.set("state",be),be})},[ve]),Fe=t.useCallback(y=>{const V=Ye.includes(y)?Ye.filter(be=>be!==y):[...Ye,y];k?k(V):He({collapsedColumns:V})},[Ye,k,He]);t.useCallback(y=>{D?D(y):He({viewMode:y})},[D,He]);const Ae=t.useCallback(y=>a.filter(V=>V.column===y).sort((V,be)=>(V.order??0)-(be.order??0)),[a]),X=t.useCallback((y,V)=>{g||(y.dataTransfer.effectAllowed="move",y.dataTransfer.setData("text/plain",String(V.key)),w({cardKey:V.key,fromColumn:V.column}))},[g]),N=t.useCallback((y,V)=>{y.preventDefault(),y.dataTransfer.dropEffect="move",E({column:V})},[]),_e=t.useCallback(()=>{E(null)},[]),fe=t.useCallback((y,V)=>{if(y.preventDefault(),E(null),!O||g)return;const be=Ae(V);r==null||r(O.cardKey,V,be.length),w(null)},[O,g,Ae,r]),pe=t.useCallback(()=>{w(null),E(null)},[]);return e.jsxs(e.Fragment,{children:[e.jsx("div",{ref:Y,id:U,className:`nice-kanban nice-kanban--${c} nice-kanban--${ze} ${g?"nice-kanban--disabled":""} ${ge||""}`,style:ye,...oe,children:n.map(y=>{const V=Ae(y.key),be=(he==null?void 0:he.column)===y.key,nn=y.limit!=null&&V.length>=y.limit,L=p&&Ye.includes(y.key);return e.jsxs("div",{className:`nice-kanban__column ${be?"nice-kanban__column--dragover":""} ${L?"nice-kanban__column--collapsed":""}`,onDragOver:Se=>!L&&N(Se,y.key),onDragLeave:_e,onDrop:Se=>!L&&fe(Se,y.key),children:[e.jsxs("div",{className:"nice-kanban__column-header",style:y.color?{borderTopColor:y.color}:void 0,onClick:p?()=>Fe(y.key):void 0,role:p?"button":void 0,tabIndex:p?0:void 0,onKeyDown:p?Se=>{(Se.key==="Enter"||Se.key===" ")&&Fe(y.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:y.title}),e.jsxs("span",{className:"nice-kanban__column-count",children:[V.length,y.limit!=null&&` / ${y.limit}`]})]}),!L&&e.jsxs("div",{className:"nice-kanban__column-body",children:[V.map(Se=>e.jsx("div",{className:`nice-kanban__card nice-kanban__card--${ze} ${(O==null?void 0:O.cardKey)===Se.key?"nice-kanban__card--dragging":""}`,draggable:!g,onDragStart:an=>X(an,Se),onDragEnd:pe,onClick:()=>G(Se),role:"article",children:o?o(Se):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"nice-kanban__card-title",children:Se.title}),ze!=="compact"&&Se.description&&e.jsx("div",{className:"nice-kanban__card-desc",children:Se.description})]})},Se.key)),V.length===0&&e.jsx("div",{className:"nice-kanban__empty",children:R("kanban.empty","No cards")})]}),!L&&(u||ne&&_)&&!nn&&e.jsxs("button",{type:"button",className:"nice-kanban__add",onClick:()=>Ce(y.key),disabled:g,children:["+ ",R("kanban.addCard","Add card")]})]},y.key)})}),ne&&le&&e.jsxs($t,{open:!0,onClose:()=>Q(null),title:le.key==null?s||R("kanban.newCard","New card"):x||R("kanban.editCard","Edit card"),children:[e.jsx(q.La,{items:W,data:le.data,columns:F,...J,onFieldChange:(y,V)=>Q(be=>be&&{...be,data:{...be.data,[y]:V}})}),e.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end",marginTop:16,flexWrap:"wrap"},children:[le.key!=null&&I&&e.jsx(q.on,{type:"button",size:"sm",variant:"error",style:{marginRight:"auto"},onClick:()=>{I(le.key),Q(null)},children:R("controls.delete","Delete")}),e.jsx(q.on,{type:"button",size:"sm",variant:"secondary",onClick:()=>Q(null),children:R("controls.cancel","Cancel")}),e.jsx(q.on,{type:"button",size:"sm",variant:"primary",onClick:()=>{if(le.key==null){const y={key:`card-${Date.now()}`,title:"",column:le.column,...le.data};_==null||_(y)}else b==null||b(le.key,{...le.data,key:le.key,column:le.column});Q(null)},children:R("controls.save","Save")})]})]})]})});It.displayName="NiceKanbanBoard";function Ln(...n){return n.filter(Boolean).map(a=>typeof a=="object"?Object.entries(a).filter(([,r])=>r).map(([r])=>r).join(" "):a).join(" ")}const Wi=50,Ui=[10,25,50,100,200],Ki=40,Gi=10,qi=768,Bi=500,Hi=10;function Cn(n,a){return a.split(".").reduce((r,l)=>r==null?void 0:r[l],n)}function st(n,a,r="pl-PL"){var l,o,u;if(n==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(n);case"currency":return new Intl.NumberFormat(r,{style:"currency",currency:a.currencyCode||"PLN"}).format(n);case"percent":return new Intl.NumberFormat(r,{style:"percent",minimumFractionDigits:0,maximumFractionDigits:2}).format(n/100);case"date":return new Intl.DateTimeFormat(r,{dateStyle:"short"}).format(new Date(n));case"datetime":return new Intl.DateTimeFormat(r,{dateStyle:"short",timeStyle:"short"}).format(new Date(n));case"boolean":return n?"✓":"✗";case"enum":return((u=(o=a.enumOptions)==null?void 0:o.find(g=>g.value===n))==null?void 0:u.label)||String(n);default:return String(n)}}function Xi(n,a,r,l){const[o,u]=t.useState(0),{startIndex:g,endIndex:c,totalHeight:p,offsetY:S}=t.useMemo(()=>{const k=n.length*r,W=Math.ceil(a/r),F=Math.max(0,Math.floor(o/r)-l),J=Math.min(n.length,Math.ceil(o/r)+W+l),x=F*r;return{startIndex:F,endIndex:J,totalHeight:k,offsetY:x}},[n.length,a,r,o,l]),D=t.useMemo(()=>n.slice(g,c),[n,g,c]),K=t.useCallback(k=>{u(k.currentTarget.scrollTop)},[]);return{visibleData:D,totalHeight:p,offsetY:S,handleScroll:K,startIndex:g}}function Vi(n,a){const[r,l]=t.useState(()=>{if(n&&typeof window<"u"){const u=localStorage.getItem(`nice-module-grid-${n}`);if(u)return JSON.parse(u)}return a||{}}),o=t.useCallback(u=>{l(g=>{const c={...g,...u};return n&&typeof window<"u"&&localStorage.setItem(`nice-module-grid-${n}`,JSON.stringify(c)),c})},[n]);return[r,o]}function Zi(n){const[a,r]=t.useState(typeof window<"u"&&window.innerWidth<n);return t.useEffect(()=>{if(typeof window>"u")return;const l=()=>r(window.innerWidth<n);return window.addEventListener("resize",l),()=>window.removeEventListener("resize",l)},[n]),a}function Yi({column:n,sort:a,onSort:r,onResize:l,resizable:o,t:u}){const g=t.useRef(null),[c,p]=t.useState(!1),S=t.useCallback(k=>{if(!o||!l)return;k.preventDefault(),p(!0);const W=k.clientX,F=n.width||150,J=s=>{const b=s.clientX-W,_=Math.max(n.minWidth||50,F+b);l(n.field,Math.min(_,n.maxWidth||1/0))},x=()=>{p(!1),document.removeEventListener("mousemove",J),document.removeEventListener("mouseup",x)};document.addEventListener("mousemove",J),document.addEventListener("mouseup",x)},[n,o,l]),D=a==null?void 0:a.direction,K=D==="asc"?"↑":D==="desc"?"↓":null;return e.jsxs("div",{className:Ln("nice-module-grid__header-cell",n.sortable&&"nice-module-grid__header-cell--sortable",c&&"nice-module-grid__header-cell--resizing"),style:{width:n.width==="auto"?"auto":n.width||150,minWidth:n.minWidth,maxWidth:n.maxWidth,textAlign:n.align},onClick:()=>n.sortable&&(r==null?void 0:r(n.field)),role:"columnheader","aria-sort":D==="asc"?"ascending":D==="desc"?"descending":"none",title:n.headerTooltip,children:[e.jsx("span",{className:"nice-module-grid__header-text",children:n.header}),K&&e.jsx("span",{className:"nice-module-grid__sort-indicator",children:K}),o&&e.jsx("div",{ref:g,className:"nice-module-grid__resize-handle",onMouseDown:S})]})}function Ji({column:n,row:a,rowIndex:r,value:l,locale:o="pl-PL",onClick:u}){const g=q.wl({onClick:u}),c=u?g:{};if(n.render)return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align},...c,children:n.render(l,a,r)});if(n.type==="enum"&&n.enumOptions){const p=n.enumOptions.find(S=>S.value===l);if(p)return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align},...c,children:e.jsxs("span",{className:Ln("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(n.type==="progress"){const p=Math.min(100,Math.max(0,Number(l)||0));return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align},...c,children:e.jsxs("div",{className:"nice-module-grid__progress",children:[e.jsx("div",{className:Ln("nice-module-grid__progress-bar",`nice-module-grid__progress-bar--${n.progressColor||"primary"}`),style:{width:`${p}%`}}),e.jsxs("span",{className:"nice-module-grid__progress-text",children:[p,"%"]})]})})}if(n.type==="rating"){const p=n.maxRating||5,S=Number(l)||0;return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align},...c,children:e.jsx("span",{className:"nice-module-grid__rating","aria-label":`${S} out of ${p} stars`,children:Array.from({length:p},(D,K)=>e.jsx("span",{className:Ln("nice-module-grid__star",K<S&&"nice-module-grid__star--filled"),children:"★"},K))})})}if(n.type==="link"&&n.linkTemplate){const p=n.linkTemplate.replace(/\{\{(\w+)\}\}/g,(S,D)=>String(Cn(a,D)??""));return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align},...c,children:e.jsx("a",{href:p,target:n.linkNewTab?"_blank":void 0,rel:n.linkNewTab?"noopener noreferrer":void 0,className:"nice-module-grid__link",children:st(l,n,o)})})}if(n.type==="image"){const p={xs:24,sm:32,md:48,lg:64}[n.imageSize||"sm"];return e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align},...c,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 n.type==="avatar"?e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align},...c,children:l?e.jsx("img",{src:String(l),alt:"",className:"nice-module-grid__avatar"}):e.jsx("div",{className:"nice-module-grid__avatar-placeholder",children:"?"})}):n.type==="color"?e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align},...c,children:e.jsx("span",{className:"nice-module-grid__color-swatch",style:{backgroundColor:l||"transparent"},title:l})}):n.type==="boolean"?e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align||"center"},...c,children:e.jsx("span",{className:Ln("nice-module-grid__boolean",!!l&&"nice-module-grid__boolean--true"),children:l?"✓":"✗"})}):e.jsx("div",{className:"nice-module-grid__cell",style:{textAlign:n.align},...c,children:st(l,n,o)})}function Qi({row:n,index:a,columns:r,primaryField:l,secondaryField:o,customRender:u,selected:g,onClick:c,locale:p="pl-PL",t:S}){if(u)return e.jsx("div",{className:Ln("nice-module-grid__mobile-card",g&&"nice-module-grid__mobile-card--selected"),onClick:c,children:u(n,a)});const D=r.find(k=>k.field===l)||r[0],K=r.find(k=>k.field===o)||r[1];return e.jsxs("div",{className:Ln("nice-module-grid__mobile-card",g&&"nice-module-grid__mobile-card--selected"),onClick:c,role:"row","aria-selected":g,children:[e.jsxs("div",{className:"nice-module-grid__mobile-card-header",children:[e.jsx("div",{className:"nice-module-grid__mobile-card-title",children:st(Cn(n,(D==null?void 0:D.field)||""),D,p)}),K&&e.jsx("div",{className:"nice-module-grid__mobile-card-subtitle",children:st(Cn(n,K.field),K,p)})]}),e.jsx("div",{className:"nice-module-grid__mobile-card-body",children:r.filter(k=>!k.hidden&&k.field!==l&&k.field!==o).slice(0,4).map(k=>e.jsxs("div",{className:"nice-module-grid__mobile-card-field",children:[e.jsx("span",{className:"nice-module-grid__mobile-card-label",children:k.header}),e.jsx("span",{className:"nice-module-grid__mobile-card-value",children:st(Cn(n,k.field),k,p)})]},k.field))})]})}function ea({page:n,pageSize:a,totalRows:r,pageSizeOptions:l,onPageChange:o,t:u}){const g=Math.ceil(r/a),c=(n-1)*a+1,p=Math.min(n*a,r);return e.jsxs("div",{className:"nice-module-grid__pagination",role:"navigation","aria-label":u("pagination.ariaLabel","Pagination"),children:[e.jsxs("div",{className:"nice-module-grid__pagination-info",children:[u("pagination.showing","Showing")," ",c,"–",p," ",u("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=>o(1,Number(S.target.value)),"aria-label":u("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:()=>o(1,a),disabled:n===1,"aria-label":u("pagination.first","First"),children:"««"}),e.jsx("button",{className:"nice-module-grid__pagination-btn",onClick:()=>o(n-1,a),disabled:n===1,"aria-label":u("pagination.previous","Previous"),children:"«"}),e.jsxs("span",{className:"nice-module-grid__pagination-page",children:[n," / ",g]}),e.jsx("button",{className:"nice-module-grid__pagination-btn",onClick:()=>o(n+1,a),disabled:n>=g,"aria-label":u("pagination.next","Next"),children:"»"}),e.jsx("button",{className:"nice-module-grid__pagination-btn",onClick:()=>o(g,a),disabled:n>=g,"aria-label":u("pagination.last","Last"),children:"»»"})]})]})}function na({columns:n}){return e.jsx("div",{className:"nice-module-grid__row nice-module-grid__row--skeleton",role:"row",children:n.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 ta(n,a){var at;const{columns:r,data:l,keyField:o="id",dataSource:u,onFetch:g,sortable:c=!0,sort:p,onSortChange:S,multiSort:D=!1,filterable:K=!1,filter:k,onFilterChange:W,searchText:F,onSearchChange:J,searchPlaceholder:x="moduleGrid.searchPlaceholder",pagination:s=!0,page:b,pageSize:_,pageSizeOptions:I=Ui,totalRows:Z,onPageChange:B,virtualScroll:me=!0,rowHeight:ce=Ki,overscan:A=Gi,selectionMode:ge="none",selectedKeys:ye,onSelectionChange:U,columnReorder:oe=!0,onColumnOrderChange:Y,columnResize:R=!0,onColumnWidthChange:O,groupBy:w,onGroupByChange:he,groupRowRender:E,expandAllGroups:le=!1,editable:Q=!1,onCellEdit:ne,onRowEdit:G,editMode:Ce="cell",contextMenuItems:ve,onContextMenuAction:Me,exportable:Ue=!0,exportFormats:Ye=["csv","excel"],onExport:ze,preferencesKey:He,initialPreferences:Fe,onPreferencesChange:Ae,density:X="normal",striped:N=!0,bordered:_e=!1,hoverable:fe=!0,loading:pe=!1,emptyState:y,toolbar:V,onRowClick:be,onRowDoubleClick:nn,rowClassName:L,rowStyle:Se,mobileCardView:an=!0,mobileBreakpoint:xe=qi,mobileCardRender:sn,mobilePrimaryField:_n,mobileSecondaryField:hn,moduleId:Sn,permissions:Mn,size:Xe="medium",skeletonLoading:En=!0,skeletonRows:$=Hi,"aria-label":se,"aria-labelledby":de,"aria-describedby":ke,className:cn,style:Ne,id:Te,testId:on}=n,{t:Ke}=q.ue();q.rl(),q.Cs("table");const Je=Zi(xe),[Dn,Gn]=Vi(He,Fe),qn=t.useRef(null),Qn=t.useRef(null),[Bn,Hn]=t.useState([]),[dn,ot]=t.useState(),[Pe,tn]=t.useState(""),[Ge,xn]=t.useState(1),[Pn,Un]=t.useState(_||Wi),[Xn,Tn]=t.useState(new Set),[Kn,Vn]=t.useState([]),[d,m]=t.useState(0),[M,T]=t.useState(!1),[ee,j]=t.useState(new Set),[P,H]=t.useState(null),[Re,De]=t.useState({}),te=p??Bn,Qe=k??dn,un=F??Pe,pn=b??Ge,ln=_??Pn,gn=ye??Xn,dt=Z??d??(l==null?void 0:l.length)??0,Fn=!!(g||u),fn=t.useMemo(()=>{const v=new Set(Dn.hiddenColumns||[]);return r.filter(re=>!re.hidden&&!v.has(re.field))},[r,Dn.hiddenColumns]),bn=t.useMemo(()=>{if(Fn)return Kn;if(!l)return[];let v=[...l];if(un){const re=un.toLowerCase(),we=r.filter(ue=>ue.searchable!==!1).map(ue=>ue.field);v=v.filter(ue=>we.some(Oe=>{const vn=Cn(ue,Oe);return String(vn??"").toLowerCase().includes(re)}))}return te.length>0&&v.sort((re,we)=>{for(const ue of te){const Oe=Cn(re,ue.field),vn=Cn(we,ue.field),wn=Oe<vn?-1:Oe>vn?1:0;if(wn!==0)return ue.direction==="asc"?wn:-wn}return 0}),v},[Fn,Kn,l,un,te,r]),zn=t.useMemo(()=>{if(Fn||!s)return bn;const v=(pn-1)*ln;return bn.slice(v,v+ln)},[Fn,bn,s,pn,ln]),On=((at=qn.current)==null?void 0:at.clientHeight)||400,$n=me&&zn.length>Bi,{visibleData:Wn,totalHeight:et,offsetY:wt,handleScroll:jt,startIndex:nt}=Xi(zn,On,ce,A),An=$n?Wn:zn,ut=t.useCallback(async()=>{if(g){T(!0);try{const v=await g({page:pn,pageSize:ln,sort:te,filter:Qe,search:un});Vn(v.data),m(v.total)}catch(v){console.error("NiceModuleGrid fetch error:",v)}finally{T(!1)}}},[g,pn,ln,te,Qe,un]);t.useEffect(()=>{Fn&&ut()},[Fn,ut]);const kt=t.useCallback(v=>{const re=te.find(ue=>ue.field===v);let we;re?re.direction==="asc"?we=te.map(ue=>ue.field===v?{...ue,direction:"desc"}:ue):we=te.filter(ue=>ue.field!==v):we=D?[...te,{field:v,direction:"asc"}]:[{field:v,direction:"asc"}],S?S(we):Hn(we)},[te,D,S]),Et=t.useCallback((v,re)=>{B?B(v,re):(xn(v),Un(re))},[B]),Ft=t.useCallback(v=>{J?J(v):tn(v),B||xn(1)},[J,B]),tt=t.useCallback((v,re)=>{const we=new Set(gn);if(ge==="single"?(we.clear(),we.add(v)):(ge==="multiple"||ge==="checkbox")&&(we.has(v)?we.delete(v):we.add(v)),U){const ue=zn.filter(Oe=>we.has(String(Cn(Oe,o))));U(we,ue)}else Tn(we)},[gn,ge,U,zn,o]),mt=t.useCallback((v,re)=>{De(we=>({...we,[v]:re})),O==null||O(v,re),Gn({columnWidths:{...Dn.columnWidths,[v]:re}})},[O,Gn,Dn.columnWidths]),At=t.useCallback((v,re)=>{ve!=null&&ve.length&&(v.preventDefault(),H({x:v.clientX,y:v.clientY,row:re}))},[ve]),Pt=t.useCallback(v=>{P&&(Me==null||Me(v,P.row)),H(null)},[P,Me]),it=t.useCallback(async v=>{if(ze)await ze(v,{selectedOnly:gn.size>0,columns:fn.map(re=>re.field)});else if(v==="csv"){const re=fn.map(mn=>mn.header).join(","),we=zn.map(mn=>fn.map(Ie=>JSON.stringify(Cn(mn,Ie.field)??"")).join(",")),ue=[re,...we].join(`
16
+ `),Oe=new Blob([ue],{type:"text/csv;charset=utf-8;"}),vn=URL.createObjectURL(Oe),wn=document.createElement("a");wn.href=vn,wn.download=`export-${new Date().toISOString().slice(0,10)}.csv`,wn.click(),URL.revokeObjectURL(vn)}},[ze,gn,fn,zn,Ke]);t.useEffect(()=>{if(!P)return;const v=()=>H(null);return document.addEventListener("click",v),()=>document.removeEventListener("click",v)},[P]);const rn=t.useCallback(v=>{v.key==="Escape"&&H(null)},[]),Ve=pe||M,yn=!Ve&&An.length===0,ht=Je&&an,pt=Ln("nice-module-grid",`nice-module-grid--${X}`,`nice-module-grid--${Xe}`,N&&"nice-module-grid--striped",_e&&"nice-module-grid--bordered",fe&&"nice-module-grid--hoverable",Ve&&"nice-module-grid--loading",ht&&"nice-module-grid--mobile",cn);return e.jsxs("div",{ref:a,id:Te,"data-testid":on,className:pt,style:Ne,onKeyDown:rn,role:"grid","aria-label":se,"aria-labelledby":de,"aria-describedby":ke,"aria-rowcount":dt,"aria-colcount":fn.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:x,value:un,onChange:v=>Ft(v.target.value),"aria-label":Ke("moduleGrid.searchAriaLabel","Search")})}),V,Ue&&e.jsx("div",{className:"nice-module-grid__toolbar-export",children:Ye.map(v=>e.jsx("button",{className:"nice-module-grid__export-btn",onClick:()=>it(v),"aria-label":Ke(`moduleGrid.export.${v}`,`Export to ${v.toUpperCase()}`),children:v.toUpperCase()},v))})]}),e.jsx("div",{ref:qn,className:"nice-module-grid__container",onScroll:$n?jt:void 0,children:ht?e.jsx("div",{className:"nice-module-grid__mobile-list",children:Ve&&En?Array.from({length:$},(v,re)=>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}})]},re)):yn?e.jsxs("div",{className:"nice-module-grid__empty",children:[(y==null?void 0:y.icon)&&e.jsx("div",{className:"nice-module-grid__empty-icon",children:y.icon}),e.jsx("div",{className:"nice-module-grid__empty-title",children:(y==null?void 0:y.title)||Ke("moduleGrid.noData","No data")}),(y==null?void 0:y.description)&&e.jsx("div",{className:"nice-module-grid__empty-description",children:y.description}),(y==null?void 0:y.action)&&e.jsxs("button",{className:"nice-module-grid__empty-action",onClick:y.action.onClick,children:[y.action.icon,y.action.label]})]}):An.map((v,re)=>{const we=String(Cn(v,o));return e.jsx(Qi,{row:v,index:nt+re,columns:fn,primaryField:_n,secondaryField:hn,customRender:sn,selected:gn.has(we),onClick:()=>{ge!=="none"&&tt(we,v),be==null||be(v,nt+re)},t:Ke},we)})}):e.jsxs("div",{ref:Qn,className:"nice-module-grid__table",children:[e.jsxs("div",{className:"nice-module-grid__header",role:"row",children:[ge==="checkbox"&&e.jsx("div",{className:"nice-module-grid__header-cell nice-module-grid__header-cell--checkbox",children:e.jsx("input",{type:"checkbox",checked:gn.size>0&&gn.size===An.length,onChange:()=>{if(gn.size===An.length)U==null||U(new Set,[]),Tn(new Set);else{const v=new Set(An.map(re=>String(Cn(re,o))));U==null||U(v,An),Tn(v)}},"aria-label":Ke("moduleGrid.selectAll","Select all")})}),fn.map(v=>e.jsx(Yi,{column:{...v,width:Re[v.field]||v.width},sort:te.find(re=>re.field===v.field),onSort:c?kt:void 0,onResize:R?mt:void 0,resizable:R,t:Ke},v.field))]}),e.jsx("div",{className:"nice-module-grid__body",style:$n?{height:et,position:"relative"}:void 0,children:Ve&&En?Array.from({length:$},(v,re)=>e.jsx(na,{columns:fn},re)):yn?e.jsxs("div",{className:"nice-module-grid__empty",children:[(y==null?void 0:y.icon)&&e.jsx("div",{className:"nice-module-grid__empty-icon",children:y.icon}),e.jsx("div",{className:"nice-module-grid__empty-title",children:(y==null?void 0:y.title)||Ke("moduleGrid.noData","No data")}),(y==null?void 0:y.description)&&e.jsx("div",{className:"nice-module-grid__empty-description",children:y.description}),(y==null?void 0:y.action)&&e.jsxs("button",{className:"nice-module-grid__empty-action",onClick:y.action.onClick,children:[y.action.icon,y.action.label]})]}):e.jsx("div",{style:$n?{transform:`translateY(${wt}px)`}:void 0,children:An.map((v,re)=>{const we=String(Cn(v,o)),ue=nt+re,Oe=gn.has(we),vn=typeof L=="function"?L(v,ue):L,wn=typeof Se=="function"?Se(v,ue):Se;return e.jsxs("div",{className:Ln("nice-module-grid__row",Oe&&"nice-module-grid__row--selected",vn),style:{...wn,height:ce},role:"row","aria-rowindex":ue+1,"aria-selected":Oe,onClick:()=>{ge!=="none"&&tt(we,v),be==null||be(v,ue)},onDoubleClick:()=>nn==null?void 0:nn(v,ue),onContextMenu:mn=>At(mn,v),children:[ge==="checkbox"&&e.jsx("div",{className:"nice-module-grid__cell nice-module-grid__cell--checkbox",children:e.jsx("input",{type:"checkbox",checked:Oe,onChange:()=>tt(we,v),onClick:mn=>mn.stopPropagation(),"aria-label":Ke("moduleGrid.selectRow","Select row")})}),fn.map(mn=>e.jsx(Ji,{column:{...mn,width:Re[mn.field]||mn.width},row:v,rowIndex:ue,value:Cn(v,mn.field)},mn.field))]},we)})})})]})}),s&&dt>0&&e.jsx(ea,{page:pn,pageSize:ln,totalRows:Fn?d:bn.length,pageSizeOptions:I,onPageChange:Et,t:Ke}),P&&ve&&e.jsx("div",{className:"nice-module-grid__context-menu",style:{left:P.x,top:P.y},role:"menu",children:ve.filter(v=>typeof v.hidden=="function"?!v.hidden(P.row):!v.hidden).map(v=>{if(v.divider)return e.jsx("div",{className:"nice-module-grid__context-menu-divider"},v.key);const re=typeof v.disabled=="function"?v.disabled(P.row):v.disabled;return e.jsxs("button",{className:Ln("nice-module-grid__context-menu-item",v.danger&&"nice-module-grid__context-menu-item--danger",re&&"nice-module-grid__context-menu-item--disabled"),onClick:()=>{var we;re||((we=v.onClick)==null||we.call(v,P.row),Pt(v.key))},disabled:re,role:"menuitem",children:[v.icon&&e.jsx("span",{className:"nice-module-grid__context-menu-icon",children:v.icon}),v.label]},v.key)})}),Ve&&!En&&e.jsx("div",{className:"nice-module-grid__loading-overlay",children:e.jsx("div",{className:"nice-module-grid__spinner","aria-label":Ke("moduleGrid.loading","Loading")})})]})}t.forwardRef(ta);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: 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: 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: 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: 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: 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: 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: 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 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: 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: 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: 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: 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: 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 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 In(n,a="PLN",r="pl-PL"){return new Intl.NumberFormat(r,{style:"currency",currency:a,minimumFractionDigits:2,maximumFractionDigits:2}).format(n)}function vt(n,a="pl-PL"){return n?(typeof n=="string"?new Date(n):n).toLocaleDateString(a,{year:"numeric",month:"2-digit",day:"2-digit"}):"-"}function aa(n){return n>=80?"high":n>=50?"medium":"low"}function ra(){return`match-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function la({item:n,isSelected:a,isDragging:r,isDropTarget:l,suggestion:o,currency:u,locale:g,onSelect:c,onDoubleClick:p,onDragStart:S,onDragEnd:D,onDrop:K,disabled:k}){const W=n.status??"unmatched",F=(o==null?void 0:o.confidence)??n.confidence,J=s=>{s.dataTransfer.setData("text/plain",n.id),s.dataTransfer.setData("source","statement"),s.dataTransfer.effectAllowed="move",S()},x=s=>{s.dataTransfer.types.includes("source")&&s.dataTransfer.getData("source")!=="statement"&&s.preventDefault()};return e.jsxs("div",{className:`nice-reconciliation__row nice-reconciliation__row--${W} ${a?"nice-reconciliation__row--selected":""} ${r?"nice-reconciliation__row--dragging":""} ${l?"nice-reconciliation__row--drop-target":""}`,draggable:!k&&W!=="matched",onDragStart:J,onDragEnd:D,onDragOver:x,onDrop:K,onClick:c,onDoubleClick:p,role:"row","aria-selected":a,tabIndex:0,children:[e.jsx("span",{className:`nice-reconciliation__status nice-reconciliation__status--${W}`}),e.jsxs("div",{className:"nice-reconciliation__row-main",children:[e.jsx("div",{className:"nice-reconciliation__row-date",children:vt(n.date,g)}),e.jsx("div",{className:"nice-reconciliation__row-description",title:n.description,children:n.description}),n.counterparty&&e.jsx("div",{className:"nice-reconciliation__row-counterparty",children:n.counterparty})]}),F!=null&&e.jsxs("span",{className:`nice-reconciliation__confidence nice-reconciliation__confidence--${aa(F)}`,children:[F,"%"]}),e.jsx("span",{className:`nice-reconciliation__row-amount ${n.amount>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:In(n.amount,u,g)})]})}function sa({item:n,isSelected:a,isDragging:r,isDropTarget:l,currency:o,locale:u,onSelect:g,onDoubleClick:c,onDragStart:p,onDragEnd:S,onDrop:D,disabled:K}){const k=n.status??"unmatched",W=J=>{J.dataTransfer.setData("text/plain",n.id),J.dataTransfer.setData("source","entry"),J.dataTransfer.effectAllowed="move",p()},F=J=>{J.dataTransfer.types.includes("source")&&J.dataTransfer.getData("source")!=="entry"&&J.preventDefault()};return e.jsxs("div",{className:`nice-reconciliation__row nice-reconciliation__row--${k} ${a?"nice-reconciliation__row--selected":""} ${r?"nice-reconciliation__row--dragging":""} ${l?"nice-reconciliation__row--drop-target":""}`,draggable:!K&&k!=="matched",onDragStart:W,onDragEnd:S,onDragOver:F,onDrop:D,onClick:g,onDoubleClick:c,role:"row","aria-selected":a,tabIndex:0,children:[e.jsx("span",{className:`nice-reconciliation__status nice-reconciliation__status--${k}`}),e.jsxs("div",{className:"nice-reconciliation__row-main",children:[e.jsxs("div",{className:"nice-reconciliation__row-date",children:[vt(n.date,u),n.documentNumber&&e.jsxs("span",{children:[" · ",n.documentNumber]})]}),e.jsx("div",{className:"nice-reconciliation__row-description",title:n.description,children:n.description}),n.partyName&&e.jsx("div",{className:"nice-reconciliation__row-counterparty",children:n.partyName})]}),e.jsx("span",{className:`nice-reconciliation__row-amount ${n.amount>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:In(n.amount,o,u)})]})}t.forwardRef(function(n,a){const{statements:r,bankTransactions:l,entries:o,accountingEntries:u,matches:g,defaultMatches:c=[],suggestions:p=[],config:S={},currency:D,showConfidence:K,statementPanelConfig:k,entryPanelConfig:W,onMatch:F,onAutoMatch:J,onUnmatch:x,onBatchAction:s,onFilterChange:b,onRequestSuggestions:_,onSelectionChange:I,onComplete:Z,size:B="medium",showToolbar:me=!0,showFilters:ce=!0,showSummary:A=!0,showSuggestions:ge=!0,layout:ye="horizontal",enableDragDrop:U=!0,enableKeyboard:oe=!0,enableDetailPanel:Y=!0,loading:R=!1,disabled:O=!1,readOnly:w=!1,locale:he="pl-PL",labels:E={},className:le,style:Q}=n,ne=r??l??[],G=o??u??[],Ce=D??S.currency??"PLN",[ve,Me]=t.useState(c),[Ue,Ye]=t.useState(new Set),[ze,He]=t.useState(new Set),[Fe,Ae]=t.useState(null),[X,N]=t.useState(null),[_e,fe]=t.useState({}),[pe,y]=t.useState(null),V=g??ve,be=t.useRef(null),nn=t.useRef(null);t.useEffect(()=>{const $="nice-reconciliation-styles";if(!document.getElementById($)){const se=document.createElement("style");se.id=$,se.textContent=ia,document.head.appendChild(se)}},[]);const L=t.useMemo(()=>{const $=new Set;return V.forEach(se=>se.statementIds.forEach(de=>$.add(de))),$},[V]),Se=t.useMemo(()=>{const $=new Set;return V.forEach(se=>se.entryIds.forEach(de=>$.add(de))),$},[V]),an=t.useMemo(()=>{const $=ne.filter(Ne=>!L.has(Ne.id)),se=G.filter(Ne=>!Se.has(Ne.id)),de=ne.reduce((Ne,Te)=>Ne+Te.amount,0),ke=G.reduce((Ne,Te)=>Ne+Te.amount,0),cn=ne.filter(Ne=>L.has(Ne.id)).reduce((Ne,Te)=>Ne+Te.amount,0);return{totalStatements:ne.length,totalEntries:G.length,matchedStatements:ne.length-$.length,matchedEntries:G.length-se.length,unmatchedStatements:$.length,unmatchedEntries:se.length,statementTotal:de,entryTotal:ke,matchedAmount:cn,unmatchedStatementAmount:$.reduce((Ne,Te)=>Ne+Te.amount,0),unmatchedEntryAmount:se.reduce((Ne,Te)=>Ne+Te.amount,0),difference:de-ke,matchPercentage:ne.length>0?Math.round((ne.length-$.length)/ne.length*100):0,matchCount:V.length,partialMatchCount:V.filter(Ne=>Ne.status==="partial").length,pendingSuggestions:p.length}},[ne,G,V,p,L,Se]),xe=t.useCallback(($,se)=>{const de=ne.filter(Je=>$.includes(Je.id)),ke=G.filter(Je=>se.includes(Je.id));if(de.length===0||ke.length===0)return null;const cn=de.reduce((Je,Dn)=>Je+Dn.amount,0),Ne=ke.reduce((Je,Dn)=>Je+Dn.amount,0),Te=Math.abs(cn-Ne),on=S.amountTolerance??.01,Ke={id:ra(),statementIds:$,entryIds:se,status:Te<=on?"matched":"partial",statementTotal:cn,entryTotal:Ne,difference:Te,confidence:Te<=on?100:Math.max(0,100-Te/Math.max(Math.abs(cn),1)*100),matchedBy:"user",matchedAt:new Date};return g||Me(Je=>[...Je,Ke]),F==null||F(Ke,de,ke),Ye(new Set),He(new Set),Ke},[ne,G,S.amountTolerance,g,F]),sn=t.useCallback($=>{const se=V.find(de=>de.id===$);se&&(g||Me(de=>de.filter(ke=>ke.id!==$)),x==null||x($,se.statementIds,se.entryIds))},[V,g,x]),_n=t.useCallback(async()=>{const $=[],se=new Set(L),de=new Set(Se),ke=S.amountTolerance??.01,cn=S.dateTolerance??3;for(const Ne of ne){if(se.has(Ne.id))continue;const Te=G.filter(on=>{if(de.has(on.id)||Math.abs(Ne.amount-on.amount)>ke)return!1;const Ke=new Date(Ne.date),Je=new Date(on.date);return!(Math.abs(Ke.getTime()-Je.getTime())/(1e3*60*60*24)>cn)});if(Te.length===1){const on=Te[0],Ke=xe([Ne.id],[on.id]);Ke&&($.push(Ke),se.add(Ne.id),de.add(on.id))}}return s==null||s("autoMatch",$),$},[ne,G,L,Se,S,xe,s]),hn=t.useCallback(($,se,de,ke)=>{ke!==se&&(ke==="statement"?xe([de],[$]):xe([$],[de]),Ae(null),N(null))},[xe]),Sn=t.useCallback(()=>{const $=Array.from(Ue),se=Array.from(ze);$.length>0&&se.length>0&&xe($,se)},[Ue,ze,xe]);t.useEffect(()=>{I==null||I(Array.from(Ue),Array.from(ze))},[Ue,ze,I]),t.useImperativeHandle(a,()=>({getMatches:()=>V,getUnmatchedStatements:()=>ne.filter($=>!L.has($.id)),getUnmatchedEntries:()=>G.filter($=>!Se.has($.id)),createMatch:xe,removeMatch:sn,autoMatch:_n,getSuggestions:async $=>_?_($??ne.filter(se=>!L.has(se.id)).map(se=>se.id)):[],applySuggestion:$=>xe([$.statementId],$.entryIds),approveAll:()=>{s==null||s("approveAll",V)},clearAll:()=>{g||Me([]),s==null||s("clearAll",[])},exportMatched:$=>{s==null||s("exportMatched",V)},getSummary:()=>an,reset:()=>{g||Me([]),Ye(new Set),He(new Set),fe({})},focusStatements:()=>{var $;return($=be.current)==null?void 0:$.focus()},focusEntries:()=>{var $;return($=nn.current)==null?void 0:$.focus()}}),[V,ne,G,L,Se,xe,sn,_n,_,s,g,an]);const Mn=t.useMemo(()=>ne.filter($=>{var se,de;if(_e.status&&_e.status.length>0){const ke=L.has($.id)?"matched":"unmatched";if(!_e.status.includes(ke))return!1}if(_e.searchText){const ke=_e.searchText.toLowerCase();if(!((se=$.description)!=null&&se.toLowerCase().includes(ke))&&!((de=$.counterparty)!=null&&de.toLowerCase().includes(ke)))return!1}return!0}),[ne,_e,L]),Xe=t.useMemo(()=>G.filter($=>{var se,de;if(_e.status&&_e.status.length>0){const ke=Se.has($.id)?"matched":"unmatched";if(!_e.status.includes(ke))return!1}if(_e.searchText){const ke=_e.searchText.toLowerCase();if(!((se=$.description)!=null&&se.toLowerCase().includes(ke))&&!((de=$.partyName)!=null&&de.toLowerCase().includes(ke)))return!1}return!0}),[G,_e,Se]),En=Ue.size>0&&ze.size>0&&!w&&!O;return e.jsxs("div",{className:`nice-reconciliation nice-reconciliation--${ye} ${le??""}`,style:Q,children:[me&&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:_n,disabled:O||w||R,children:["⚡ ",E.autoMatch??"Auto-match"]}),e.jsx("button",{type:"button",className:"nice-reconciliation__btn nice-reconciliation__btn--success",onClick:Sn,disabled:!En||R,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",V),disabled:V.length===0||O||R,children:["✓ ",E.approveAll??"Approve All"]}),e.jsxs("button",{type:"button",className:"nice-reconciliation__btn",onClick:()=>{g||Me([]),s==null||s("clearAll",[])},disabled:V.length===0||O||w||R,children:["✕ ",E.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:["📄 ",E.statementPanelTitle??"Bank Statement",e.jsx("span",{className:"nice-reconciliation__panel-badge",children:Mn.length})]})}),e.jsx("div",{ref:be,className:"nice-reconciliation__panel-content",role:"listbox","aria-multiselectable":"true",children:Mn.length===0?e.jsxs("div",{className:"nice-reconciliation__empty",children:[e.jsx("div",{className:"nice-reconciliation__empty-icon",children:"📋"}),E.noStatements??"No statement items"]}):Mn.map($=>e.jsx(la,{item:{...$,status:L.has($.id)?"matched":"unmatched"},isSelected:Ue.has($.id),isDragging:Fe===$.id,isDropTarget:X===$.id,suggestion:p.find(se=>se.statementId===$.id),currency:Ce,locale:he,onSelect:()=>{O||Ye(se=>{const de=new Set(se);return de.has($.id)?de.delete($.id):de.add($.id),de})},onDoubleClick:()=>Y&&y({type:"statement",id:$.id}),onDragStart:()=>Ae($.id),onDragEnd:()=>{Ae(null),N(null)},onDrop:()=>{Fe&&Fe!==$.id&&hn($.id,"statement",Fe,"entry")},disabled:O||w||!U},$.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:["📒 ",E.entryPanelTitle??"Book Entries",e.jsx("span",{className:"nice-reconciliation__panel-badge",children:Xe.length})]})}),e.jsx("div",{ref:nn,className:"nice-reconciliation__panel-content",role:"listbox","aria-multiselectable":"true",children:Xe.length===0?e.jsxs("div",{className:"nice-reconciliation__empty",children:[e.jsx("div",{className:"nice-reconciliation__empty-icon",children:"📚"}),E.noEntries??"No book entries"]}):Xe.map($=>e.jsx(sa,{item:{...$,status:Se.has($.id)?"matched":"unmatched"},isSelected:ze.has($.id),isDragging:Fe===$.id,isDropTarget:X===$.id,currency:Ce,locale:he,onSelect:()=>{O||He(se=>{const de=new Set(se);return de.has($.id)?de.delete($.id):de.add($.id),de})},onDoubleClick:()=>Y&&y({type:"entry",id:$.id}),onDragStart:()=>Ae($.id),onDragEnd:()=>{Ae(null),N(null)},onDrop:()=>{Fe&&Fe!==$.id&&hn($.id,"entry",Fe,"statement")},disabled:O||w||!U},$.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:[an.matchedStatements,"/",an.totalStatements," (",an.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:In(an.matchedAmount,Ce,he)})]}),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:In(an.unmatchedStatementAmount,Ce,he)})]}),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(an.difference)<.01?"nice-reconciliation__summary-value--success":"nice-reconciliation__summary-value--danger"}`,children:In(an.difference,Ce,he)})]})]}),Y&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`nice-reconciliation__detail-backdrop ${pe?"nice-reconciliation__detail-backdrop--visible":""}`,onClick:()=>y(null)}),e.jsx("div",{className:`nice-reconciliation__detail-panel ${pe?"nice-reconciliation__detail-panel--open":""}`,children:pe&&e.jsx(ca,{type:pe.type,id:pe.id,statements:ne,entries:G,matches:V,currency:Ce,locale:he,labels:E,onClose:()=>y(null)})})]})]})});function ca({type:n,id:a,statements:r,entries:l,matches:o,currency:u,locale:g,labels:c,onClose:p}){var J;const S=n==="statement"?r.find(x=>x.id===a):l.find(x=>x.id===a),D=n==="statement"?o.find(x=>x.statementIds.includes(a)):o.find(x=>x.entryIds.includes(a)),K=D?n==="statement"?l.filter(x=>D.entryIds.includes(x.id)):r.filter(x=>D.statementIds.includes(x.id)):[];if(!S)return null;const k=n==="statement",W=k?S:null,F=k?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:[k?"📄":"📒"," ",k?c.statementDetails??"Transaction Details":c.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:[D&&e.jsxs("div",{className:"nice-reconciliation__detail-match-info",children:[e.jsxs("div",{className:"nice-reconciliation__detail-match-header",children:["✓ ",c.matchedWith??"Matched"," (",((J=D.confidence)==null?void 0:J.toFixed(0))??100,"% confidence)"]}),e.jsx("div",{className:"nice-reconciliation__detail-match-detail",children:D.matchedBy==="ai"?c.matchedByAI??"Matched automatically by AI":c.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:c.statementTotal??"Statement"}),e.jsx("div",{className:`nice-reconciliation__detail-side-amount ${D.statementTotal>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:In(D.statementTotal,u,g)})]}),e.jsxs("div",{className:"nice-reconciliation__detail-side-item",children:[e.jsx("div",{className:"nice-reconciliation__detail-side-label",children:c.entryTotal??"Book Entry"}),e.jsx("div",{className:`nice-reconciliation__detail-side-amount ${D.entryTotal>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:In(D.entryTotal,u,g)})]})]}),D.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:[c.difference??"Difference",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",style:{color:"var(--nice-warning, #f59e0b)"},children:In(D.difference,u,g)})]})]}),e.jsxs("div",{className:"nice-reconciliation__detail-section",children:[e.jsxs("div",{className:"nice-reconciliation__detail-section-title",children:["📋"," ",k?c.transactionInfo??"Transaction Information":c.entryInfo??"Entry Information"]}),e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[c.date??"Date",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:vt(S.date,g)})]}),e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[c.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:[c.amount??"Amount",":"]}),e.jsx("span",{className:`nice-reconciliation__detail-value ${S.amount>=0?"nice-reconciliation__row-amount--positive":"nice-reconciliation__row-amount--negative"}`,children:In(S.amount,u,g)})]}),k&&(W==null?void 0:W.counterparty)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[c.counterparty??"Counterparty",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:W.counterparty})]}),k&&(W==null?void 0:W.counterpartyAccount)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[c.accountNumber??"Account",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",style:{fontFamily:"monospace",fontSize:"0.75rem"},children:W.counterpartyAccount})]}),!k&&(F==null?void 0:F.partyName)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[c.party??"Party",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:F.partyName})]}),!k&&(F==null?void 0:F.documentNumber)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[c.documentRef??"Document Ref",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:F.documentNumber})]}),k&&(W==null?void 0:W.referenceNumber)&&e.jsxs("div",{className:"nice-reconciliation__detail-row",children:[e.jsxs("span",{className:"nice-reconciliation__detail-label",children:[c.reference??"Reference",":"]}),e.jsx("span",{className:"nice-reconciliation__detail-value",children:W.referenceNumber})]})]}),K.length>0&&e.jsxs("div",{className:"nice-reconciliation__detail-section",children:[e.jsxs("div",{className:"nice-reconciliation__detail-section-title",children:["🔗"," ",k?c.matchedEntries??"Matched Entries":c.matchedStatements??"Matched Statements"]}),K.map(x=>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:x.description}),e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",color:"var(--nice-text-secondary)"},children:[e.jsx("span",{children:vt(x.date,g)}),e.jsx("span",{style:{fontWeight:600,color:x.amount>=0?"var(--nice-success)":"var(--nice-danger)"},children:In(x.amount,u,g)})]})]},x.id))]})]})]})}function oa(n,a,r){const l=new Map,o=[];n.forEach(g=>l.set(String(g[a]),{data:g,children:[],key:String(g[a]),depth:0})),n.forEach(g=>{const c=g[r],p=l.get(String(g[a]));if(c!=null&&c!==""&&l.has(String(c))){const S=l.get(String(c));p.depth=S.depth+1,S.children.push(p)}else o.push(p)});const u=(g,c)=>{g.forEach(p=>{p.depth=c,u(p.children,c+1)})};return u(o,0),o}function hi(n,a,r,l=0){return n.map(o=>({data:o,key:String(o[r]),depth:l,children:Array.isArray(o[a])?hi(o[a],a,r,l+1):[]}))}function da(n){const a=[],r=l=>{l.forEach(o=>{a.push(o.key),r(o.children)})};return r(n),a}function ua(n,a){const r=[],l=o=>{o.forEach(u=>{r.push(u),u.children.length>0&&a.has(u.key)&&l(u.children)})};return l(n),r}function pi(n,a,r){return!a||!r?n:[...n].sort((l,o)=>{const u=l.data[a]??"",g=o.data[a]??"",c=typeof u=="number"&&typeof g=="number"?u-g:String(u).localeCompare(String(g));return r==="desc"?-c:c}).map(l=>({...l,children:pi(l.children,a,r)}))}function gi({columns:n,data:a,keyField:r="id",parentKeyField:l="parentId",nested:o=!1,childrenField:u="children",expandedKeys:g,onExpandedChange:c,defaultExpandAll:p=!1,sortable:S=!0,sortField:D,sortDirection:K,onSort:k,selectable:W,selectedKeys:F,onSelectionChange:J,searchable:x,searchPlaceholder:s,striped:b,compact:_,loading:I,emptyText:Z,toolbar:B,onRowClick:me,className:ce,style:A}){const{t:ge}=q.ue(),ye=t.useMemo(()=>o?hi(a,u,r):oa(a,r,l),[a,r,l,o,u]),U=t.useMemo(()=>da(ye),[ye]),[oe,Y]=t.useState(()=>p?new Set(U):new Set),R=g?new Set(g):oe,[O,w]=t.useState({field:"",dir:null}),[he,E]=t.useState(new Set),[le,Q]=t.useState(""),ne=D??O.field,G=K??O.dir,Ce=F??he,ve=t.useMemo(()=>n.filter(X=>!X.hidden),[n]),Me=t.useCallback(X=>{const N=ne===X?G==="asc"?"desc":G==="desc"?null:"asc":"asc";k?k(X,N):w({field:X,dir:N})},[ne,G,k]),Ue=t.useCallback(X=>{const N=new Set(R);N.has(X)?N.delete(X):N.add(X),c?c([...N]):Y(N)},[R,c]),Ye=t.useCallback(X=>{const N=new Set(Ce);N.has(X)?N.delete(X):N.add(X),J?J(N):E(N)},[Ce,J]),ze=t.useMemo(()=>{if(!le)return ye;const X=le.toLowerCase(),N=_e=>_e.reduce((fe,pe)=>{const y=N(pe.children);return(ve.some(V=>String(pe.data[V.field]??"").toLowerCase().includes(X))||y.length>0)&&fe.push({...pe,children:y}),fe},[]);return N(ye)},[ye,le,ve]),He=t.useMemo(()=>pi(ze,ne,G),[ze,ne,G]),Fe=t.useMemo(()=>ua(He,R),[He,R]),Ae=({field:X})=>ne!==X||!G?e.jsx("span",{className:"nice-table__sort-icon",style:{opacity:.3},children:"↕"}):e.jsx("span",{className:"nice-table__sort-icon",children:G==="asc"?"↑":"↓"});return e.jsxs("div",{className:`nice-treegrid nice-datagrid ${ce||""}`,style:A,children:[(x||B)&&e.jsxs("div",{className:"nice-datagrid__toolbar",children:[x&&e.jsx("div",{className:"nice-datagrid__search",children:e.jsx("input",{type:"text",value:le,onChange:X=>Q(X.target.value),placeholder:s||ge("controls.search","Search...")})}),B]}),e.jsx("div",{className:"nice-datagrid__table-wrap",children:e.jsxs("table",{className:`${b?"nice-table--striped":""} ${_?"nice-table--compact":""}`,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[W&&e.jsx("th",{className:"nice-datagrid__checkbox",style:{width:36}}),ve.map(X=>e.jsxs("th",{style:{width:X.width,minWidth:X.minWidth,textAlign:X.align},className:S&&X.sortable!==!1?"nice-datagrid__th--sortable":void 0,onClick:()=>S&&X.sortable!==!1&&Me(X.field),children:[X.header,S&&X.sortable!==!1&&e.jsx(Ae,{field:X.field})]},X.field))]})}),e.jsx("tbody",{children:I?e.jsx("tr",{children:e.jsx("td",{colSpan:ve.length+(W?1:0),className:"nice-datagrid__empty",children:e.jsx("div",{className:"nice-spinner nice-spinner--md",style:{margin:"0 auto"}})})}):Fe.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:ve.length+(W?1:0),className:"nice-datagrid__empty",children:Z||ge("controls.noData","No data available")})}):Fe.map((X,N)=>{const _e=Ce.has(X.key),fe=X.children.length>0,pe=R.has(X.key);return e.jsxs("tr",{className:_e?"nice-datagrid__row--selected":void 0,onClick:()=>me==null?void 0:me(X.data),style:me?{cursor:"pointer"}:void 0,children:[W&&e.jsx("td",{className:"nice-datagrid__checkbox",onClick:y=>y.stopPropagation(),children:e.jsx("input",{type:"checkbox",checked:_e,onChange:()=>Ye(X.key),"aria-label":`Select row ${X.key}`})}),ve.map((y,V)=>e.jsxs("td",{style:{textAlign:y.align},children:[V===0&&e.jsxs(e.Fragment,{children:[e.jsx("span",{style:{display:"inline-block",width:X.depth*20}}),e.jsx("button",{className:`nice-treegrid__toggle ${fe?"":"nice-treegrid__toggle--leaf"}`,onClick:be=>{be.stopPropagation(),fe&&Ue(X.key)},tabIndex:fe?0:-1,"aria-expanded":fe?pe:void 0,"aria-label":fe?pe?"Collapse":"Expand":void 0,children:fe?pe?"▾":"▸":""})]}),y.render?y.render(X.data[y.field],X.data,N):String(X.data[y.field]??"")]},y.field))]},X.key)})})]})})]})}function fi(n){let a="",r=n;for(;r>=0;)a=String.fromCharCode(65+r%26)+a,r=Math.floor(r/26)-1;return a}function $e(n,a){return`${fi(a)}${n+1}`}function en(n){const a=n.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(n,a,r=new Set){const l=n.startsWith("=")?n.slice(1).trim():n,o=(x,s)=>{if(!x||!s)return[];const b=[];for(let _=x.row;_<=s.row;_++)for(let I=x.col;I<=s.col;I++){const Z=Ze($e(_,I),a,new Set(r));typeof Z=="number"&&b.push(Z)}return b},u=(x,s)=>{if(!x||!s)return[];const b=[];for(let _=x.row;_<=s.row;_++)for(let I=x.col;I<=s.col;I++)b.push(Ze($e(_,I),a,new Set(r)));return b},g=l.match(/^(\w+)\(([A-Z]+\d+):([A-Z]+\d+)\)$/i);if(g){const x=g[1].toUpperCase(),s=en(g[2].toUpperCase()),b=en(g[3].toUpperCase());switch(x){case"SUM":return o(s,b).reduce((_,I)=>_+I,0);case"AVG":case"AVERAGE":{const _=o(s,b);return _.length>0?_.reduce((I,Z)=>I+Z,0)/_.length:0}case"COUNT":return o(s,b).length;case"COUNTA":return u(s,b).filter(_=>_!==null&&_!=="").length;case"COUNTBLANK":return u(s,b).filter(_=>_===null||_==="").length;case"MIN":{const _=o(s,b);return _.length?Math.min(..._):0}case"MAX":{const _=o(s,b);return _.length?Math.max(..._):0}case"MEDIAN":{const _=o(s,b).sort((Z,B)=>Z-B);if(!_.length)return 0;const I=Math.floor(_.length/2);return _.length%2?_[I]:(_[I-1]+_[I])/2}case"STDEV":{const _=o(s,b);if(_.length<2)return 0;const I=_.reduce((Z,B)=>Z+B,0)/_.length;return Math.sqrt(_.reduce((Z,B)=>Z+(B-I)**2,0)/(_.length-1))}case"PRODUCT":{const _=o(s,b);return _.length?_.reduce((I,Z)=>I*Z,1):0}}}const c=l.match(/^(SUMIF|COUNTIF)\(([A-Z]+\d+):([A-Z]+\d+)\s*,\s*"?([^"]*)"?\)$/i);if(c){const x=c[1].toUpperCase(),s=en(c[2].toUpperCase()),b=en(c[3].toUpperCase()),_=c[4];if(s&&b){let I=0;for(let Z=s.row;Z<=b.row;Z++)for(let B=s.col;B<=b.col;B++){const me=Ze($e(Z,B),a,new Set(r));(_.startsWith(">")?Number(me)>Number(_.slice(1)):_.startsWith("<")?Number(me)<Number(_.slice(1)):String(me)===_||typeof me=="number"&&me===Number(_))&&(I+=x==="SUMIF"?typeof me=="number"?me:0:1)}return I}}const p=l.match(/^IF\(([^,]+),\s*([^,]+),\s*([^)]+)\)$/i);if(p){const x=p[1].trim(),s=p[2].trim(),b=p[3].trim(),_=x.match(/^([A-Z]+\d+)\s*([><=!]+)\s*(\S+)$/i);let I=!1;if(_){const me=Ze(_[1].toUpperCase(),a,new Set(r)),ce=isNaN(Number(_[3]))?_[3].replace(/^"|"$/g,""):Number(_[3]),A=_[2],ge=typeof me=="number"?me:Number(me)||0,ye=typeof ce=="number"?ce:Number(ce)||0;switch(A){case">":I=ge>ye;break;case"<":I=ge<ye;break;case">=":I=ge>=ye;break;case"<=":I=ge<=ye;break;case"=":case"==":I=ge===ye;break;case"<>":case"!=":I=ge!==ye;break}}const Z=I?s:b;if(en(Z.toUpperCase()))return Ze(Z.toUpperCase(),a,new Set(r));const B=Number(Z);return isNaN(B)?Z.replace(/^"|"$/g,""):B}const S=l.match(/^CONCAT\((.+)\)$/i);if(S)return S[1].split(",").map(x=>x.trim()).map(x=>{if(x.startsWith('"')&&x.endsWith('"'))return x.slice(1,-1);if(en(x.toUpperCase())){const s=Ze(x.toUpperCase(),a,new Set(r));return s!==null?String(s):""}return x}).join("");const D=l.match(/^VLOOKUP\(([^,]+),\s*([A-Z]+\d+):([A-Z]+\d+),\s*(\d+)\)$/i);if(D){let x;en(D[1].trim().toUpperCase())?x=Ze(D[1].trim().toUpperCase(),a,new Set(r)):x=isNaN(Number(D[1]))?D[1].replace(/^"|"$/g,""):Number(D[1]);const s=en(D[2].toUpperCase()),b=en(D[3].toUpperCase()),_=parseInt(D[4])-1;if(s&&b)for(let I=s.row;I<=b.row;I++){const Z=Ze($e(I,s.col),a,new Set(r));if(String(Z)===String(x))return Ze($e(I,s.col+_),a,new Set(r))}return null}const K=l.match(/^(ABS|ROUND|FLOOR|CEIL|CEILING|SQRT|LEN|UPPER|LOWER|TRIM|INT)\(([^)]+)\)$/i);if(K){const x=K[1].toUpperCase(),s=K[2].trim();let b;switch(en(s.toUpperCase())?b=Ze(s.toUpperCase(),a,new Set(r)):b=isNaN(Number(s))?s.replace(/^"|"$/g,""):Number(s),x){case"ABS":return Math.abs(Number(b)||0);case"ROUND":return Math.round(Number(b)||0);case"FLOOR":return Math.floor(Number(b)||0);case"CEIL":case"CEILING":return Math.ceil(Number(b)||0);case"SQRT":return Math.sqrt(Number(b)||0);case"INT":return Math.trunc(Number(b)||0);case"LEN":return String(b??"").length;case"UPPER":return String(b??"").toUpperCase();case"LOWER":return String(b??"").toLowerCase();case"TRIM":return String(b??"").trim()}}const k=l.match(/^POWER\(([^,]+),\s*([^)]+)\)$/i);if(k){const x=Number(en(k[1].trim().toUpperCase())?Ze(k[1].trim().toUpperCase(),a,new Set(r)):k[1].trim())||0,s=Number(en(k[2].trim().toUpperCase())?Ze(k[2].trim().toUpperCase(),a,new Set(r)):k[2].trim())||0;return Math.pow(x,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 W=l.match(/^([A-Z]+\d+)$/i);if(W)return Ze(W[1].toUpperCase(),a,r);const F=l.match(/^([A-Z]+\d+)\s*([+\-*/])\s*([A-Z]+\d+|\d+\.?\d*)$/i);if(F){const x=F[1].toUpperCase(),s=F[2],b=F[3],_=Ze(x,a,r),I=en(b.toUpperCase())?Ze(b.toUpperCase(),a,r):parseFloat(b),Z=typeof _=="number"?_:0,B=typeof I=="number"?I:0;switch(s){case"+":return Z+B;case"-":return Z-B;case"*":return Z*B;case"/":return B!==0?Z/B:null}}const J=parseFloat(l);return isNaN(J)?l:J}function Ze(n,a,r){if(r.has(n))return null;r.add(n);const l=a[n];return l?l.formula?ma(l.formula,a,r):l.value:null}function ti(n,a){return n==null?"":a==="percent"&&typeof n=="number"?`${(n*100).toFixed(1)}%`:a==="currency"&&typeof n=="number"?`$${n.toFixed(2)}`:String(n)}function ii(n){return{name:n,data:{}}}const Lt=t.forwardRef(({sheets:n,activeSheet:a,rows:r=50,cols:l=26,showToolbar:o=!0,showFormulaBar:u=!0,showSheetTabs:g=!0,readOnly:c=!1,onChange:p,onActiveSheetChange:S,onCellSelect:D,onCopy:K,onPaste:k,onInsert:W,onRemove:F,maxUndo:J=50,sortable:x=!1,filterable:s=!1,rangeSelection:b=!0,className:_,style:I,id:Z,...B},me)=>{var Un,Xn,Tn,Kn,Vn;const ce=q.Os(Z),{t:A}=q.ue(),[ge,ye]=t.useState(()=>n??[ii(A("spreadsheet.sheet","Sheet")+" 1")]),[U,oe]=t.useState(0),Y=n??ge,R=a??U,O=Y[R]??Y[0],[w,he]=t.useState(null),[E,le]=t.useState(null),[Q,ne]=t.useState(!1),[G,Ce]=t.useState(null),[ve,Me]=t.useState(""),Ue=t.useRef(null),Ye=t.useRef(null),[ze,He]=t.useState([]),[Fe,Ae]=t.useState([]),[X,N]=t.useState(null),_e=t.useRef({x:0,width:80}),[fe,pe]=t.useState(null),[y,V]=t.useState(null),[be,nn]=t.useState("");t.useEffect(()=>{G&&Ue.current&&Ue.current.focus()},[G]);const L=t.useMemo(()=>{if(!w)return null;const d=E??w;return{startRow:Math.min(w.row,d.row),startCol:Math.min(w.col,d.col),endRow:Math.max(w.row,d.row),endCol:Math.max(w.col,d.col)}},[w,E]),Se=t.useCallback((d,m)=>L?d>=L.startRow&&d<=L.endRow&&m>=L.startCol&&m<=L.endCol:!1,[L]),an=t.useCallback(d=>{He(m=>{const M=[...m,d.map(T=>({...T,data:{...T.data}}))];return M.length>J?M.slice(-J):M}),Ae([])},[J]),xe=t.useCallback((d,m=!0)=>{m&&an(Y);const M=d(Y);n||ye(M),p==null||p(M)},[Y,n,p,an]),sn=t.useCallback(()=>{if(ze.length===0)return;const d=ze[ze.length-1];Ae(m=>[...m,Y.map(M=>({...M,data:{...M.data}}))]),He(m=>m.slice(0,-1)),n||ye(d),p==null||p(d)},[ze,Y,n,p]),_n=t.useCallback(()=>{if(Fe.length===0)return;const d=Fe[Fe.length-1];He(m=>[...m,Y.map(M=>({...M,data:{...M.data}}))]),Ae(m=>m.slice(0,-1)),n||ye(d),p==null||p(d)},[Fe,Y,n,p]),hn=t.useCallback(d=>{a||oe(d),S==null||S(d),he(null),le(null),Ce(null)},[a,S]),Sn=t.useCallback((d,m,M)=>{const T=$e(d,m);xe(ee=>{const j=ee.map((H,Re)=>Re===R?{...H,data:{...H.data}}:H),P=M.startsWith("=");return j[R].data[T]={...j[R].data[T]??{value:null},formula:P?M:void 0,value:P?null:isNaN(Number(M))?M:Number(M)},j})},[R,xe]),Mn=t.useCallback((d,m,M)=>{M!=null&&M.shiftKey&&b&&w?le({row:d,col:m}):(he({row:d,col:m}),le(null)),Ce(null),D==null||D(R,d,m)},[R,D,b,w]),Xe=t.useCallback((d,m,M)=>{M.button===0&&(Mn(d,m,M),b&&!M.shiftKey&&ne(!0))},[Mn,b]),En=t.useCallback((d,m)=>{Q&&le({row:d,col:m})},[Q]);t.useEffect(()=>{if(!Q)return;const d=()=>ne(!1);return document.addEventListener("mouseup",d),()=>document.removeEventListener("mouseup",d)},[Q]);const $=t.useCallback((d,m)=>{if(c)return;const M=$e(d,m),T=O.data[M];T!=null&&T.readOnly||(Ce({row:d,col:m}),Me((T==null?void 0:T.formula)??((T==null?void 0:T.value)!=null?String(T.value):"")))},[c,O.data]),se=t.useCallback(()=>{G&&(Sn(G.row,G.col,ve),Ce(null))},[G,ve,Sn]),de=t.useCallback(d=>{if(d.key==="Enter")se();else if(d.key==="Escape")Ce(null);else if(d.key==="Tab"&&(d.preventDefault(),se(),w)){const m=d.shiftKey?Math.max(0,w.col-1):Math.min(l-1,w.col+1);he({row:w.row,col:m})}},[se,w,l]),ke=t.useCallback((d,m)=>{if(!w)return;const M=L??{startRow:w.row,startCol:w.col,endRow:w.row,endCol:w.col};xe(T=>{const ee=T.map((j,P)=>P===R?{...j,data:{...j.data}}:j);for(let j=M.startRow;j<=M.endRow;j++)for(let P=M.startCol;P<=M.endCol;P++){const H=$e(j,P);ee[R].data[H]={...ee[R].data[H]??{value:null},[d]:m}}return ee})},[w,L,R,xe]),cn=t.useCallback(d=>{if(!L||(K==null?void 0:K(L))===!1)return;const{startRow:m,startCol:M,endRow:T,endCol:ee}=L,j=[];for(let P=m;P<=T;P++){const H=[];for(let Re=M;Re<=ee;Re++){const De=$e(P,Re),te=O.data[De],Qe=te?Ze(De,O.data,new Set):null;H.push(ti(Qe,te==null?void 0:te.format))}j.push(H.join(" "))}d.clipboardData.setData("text/plain",j.join(`
595
+ `)),d.preventDefault()},[L,O.data,K]),Ne=t.useCallback(d=>{if(c||!w)return;const m=d.clipboardData.getData("text/plain");if(!m)return;const M=m.split(`
596
+ `).map(T=>T.split(" "));(k==null?void 0:k(M,w.row,w.col))!==!1&&(xe(T=>{const ee=T.map((j,P)=>P===R?{...j,data:{...j.data}}:j);return M.forEach((j,P)=>{j.forEach((H,Re)=>{const De=$e(w.row+P,w.col+Re),te=H.startsWith("=");ee[R].data[De]={...ee[R].data[De]??{value:null},formula:te?H:void 0,value:te?null:isNaN(Number(H))?H:Number(H)}})}),ee}),d.preventDefault())},[c,w,R,xe,k]),Te=t.useCallback(d=>{xe(m=>m.map((M,T)=>{if(T!==R)return M;const ee={};for(const[j,P]of Object.entries(M.data)){const H=en(j);H&&(H.row>d?ee[$e(H.row+1,H.col)]=P:ee[j]=P)}return{...M,data:ee}})),W==null||W("row",d)},[R,xe,W]),on=t.useCallback(d=>{xe(m=>m.map((M,T)=>{if(T!==R)return M;const ee={};for(const[j,P]of Object.entries(M.data)){const H=en(j);H&&(H.col>d?ee[$e(H.row,H.col+1)]=P:ee[j]=P)}return{...M,data:ee}})),W==null||W("column",d)},[R,xe,W]),Ke=t.useCallback(d=>{xe(m=>m.map((M,T)=>{if(T!==R)return M;const ee={};for(const[j,P]of Object.entries(M.data)){const H=en(j);H&&H.row!==d&&(H.row>d?ee[$e(H.row-1,H.col)]=P:ee[j]=P)}return{...M,data:ee}})),F==null||F("row",d)},[R,xe,F]),Je=t.useCallback(d=>{xe(m=>m.map((M,T)=>{if(T!==R)return M;const ee={};for(const[j,P]of Object.entries(M.data)){const H=en(j);H&&H.col!==d&&(H.col>d?ee[$e(H.row,H.col-1)]=P:ee[j]=P)}return{...M,data:ee}})),F==null||F("column",d)},[R,xe,F]),Dn=t.useCallback((d,m)=>{xe(M=>M.map((T,ee)=>{if(ee!==R)return T;const j=new Map;for(const[Re,De]of Object.entries(T.data)){const te=en(Re);te&&(j.has(te.row)||j.set(te.row,{}),j.get(te.row)[te.col]=De)}const P=Array.from(j.entries()).sort((Re,De)=>{const te=Ze($e(Re[0],d),T.data,new Set),Qe=Ze($e(De[0],d),T.data,new Set),un=typeof te=="number"?te:Number(te),pn=typeof Qe=="number"?Qe:Number(Qe);if(!isNaN(un)&&!isNaN(pn))return m==="asc"?un-pn:pn-un;const ln=String(te??""),gn=String(Qe??"");return m==="asc"?ln.localeCompare(gn):gn.localeCompare(ln)}),H={};return P.forEach(([,Re],De)=>{for(const[te,Qe]of Object.entries(Re))H[$e(De,Number(te))]=Qe}),{...T,data:H,sortColumn:d,sortDirection:m}}))},[R,xe]),Gn=t.useCallback((d,m)=>{const M=O.conditionalFormats;if(!(M!=null&&M.length))return;const T=$e(d,m),ee=Ze(T,O.data,new Set),j=typeof ee=="number"?ee:Number(ee);for(const P of M){const H=P.range.match(/^([A-Z]+\d+):([A-Z]+\d+)$/i);if(!H)continue;const Re=en(H[1].toUpperCase()),De=en(H[2].toUpperCase());if(!Re||!De||d<Re.row||d>De.row||m<Re.col||m>De.col)continue;let te=!1;switch(P.type){case"greaterThan":te=!isNaN(j)&&j>Number(P.value);break;case"lessThan":te=!isNaN(j)&&j<Number(P.value);break;case"equalTo":te=String(ee)===String(P.value);break;case"between":te=!isNaN(j)&&j>=Number(P.value)&&j<=Number(P.value2);break;case"textContains":te=String(ee).includes(String(P.value));break;case"isEmpty":te=ee===null||ee==="";break;case"isNotEmpty":te=ee!==null&&ee!=="";break}if(te)return{backgroundColor:P.style.bgColor,color:P.style.color,fontWeight:P.style.bold?"bold":void 0,fontStyle:P.style.italic?"italic":void 0}}},[O.conditionalFormats,O.data]),qn=t.useCallback(()=>{const d=`${A("spreadsheet.sheet","Sheet")} ${Y.length+1}`;xe(m=>[...m,ii(d)]),hn(Y.length)},[Y.length,xe,hn,A]),Qn=t.useCallback(()=>{Y.length<=1||(xe(d=>d.filter((m,M)=>M!==R)),hn(Math.max(0,R-1)))},[Y.length,R,xe,hn]),Bn=t.useCallback((d,m)=>{m.trim()&&(xe(M=>M.map((T,ee)=>ee===d?{...T,name:m.trim()}:T),!1),V(null))},[xe]),Hn=t.useMemo(()=>{if(!w)return"";const d=$e(w.row,w.col),m=O.data[d];return(m==null?void 0:m.formula)??((m==null?void 0:m.value)!=null?String(m.value):"")},[w,O.data]),dn=t.useMemo(()=>{if(!L)return null;const{startRow:d,startCol:m,endRow:M,endCol:T}=L;if(d===M&&m===T)return null;const ee=[];let j=0;for(let P=d;P<=M;P++)for(let H=m;H<=T;H++){const Re=$e(P,H),De=Ze(Re,O.data,new Set);De!==null&&De!==""&&j++,typeof De=="number"&&ee.push(De)}return ee.length===0?{count:j}:{count:j,sum:ee.reduce((P,H)=>P+H,0),avg:ee.reduce((P,H)=>P+H,0)/ee.length,min:Math.min(...ee),max:Math.max(...ee)}},[L,O.data]),ot=t.useCallback((d,m)=>{var M;m.preventDefault(),m.stopPropagation(),N(d),_e.current={x:m.clientX,width:((M=O.colWidths)==null?void 0:M[d])??80}},[O.colWidths]);t.useEffect(()=>{if(X===null)return;const d=M=>{const T=M.clientX-_e.current.x,ee=Math.max(30,_e.current.width+T);xe(j=>j.map((P,H)=>H===R?{...P,colWidths:{...P.colWidths,[X]:ee}}:P),!1)},m=()=>N(null);return document.addEventListener("mousemove",d),document.addEventListener("mouseup",m),()=>{document.removeEventListener("mousemove",d),document.removeEventListener("mouseup",m)}},[X,R,xe]);const Pe=t.useCallback((d,m,M)=>{d.preventDefault(),he({row:m,col:M}),pe({x:d.clientX,y:d.clientY})},[]);t.useEffect(()=>{if(!fe)return;const d=()=>pe(null);return document.addEventListener("click",d),()=>document.removeEventListener("click",d)},[fe]);const tn=t.useCallback(d=>{if((d.ctrlKey||d.metaKey)&&!G){if(d.key==="z"){d.preventDefault(),sn();return}if(d.key==="y"){d.preventDefault(),_n();return}}if(G||!w)return;let{row:m,col:M}=w;switch(d.key){case"ArrowUp":m=Math.max(0,m-1);break;case"ArrowDown":m=Math.min(r-1,m+1);break;case"ArrowLeft":M=Math.max(0,M-1);break;case"ArrowRight":M=Math.min(l-1,M+1);break;case"Enter":$(m,M);return;case"Delete":case"Backspace":c||(L&&(L.startRow!==L.endRow||L.startCol!==L.endCol)?xe(T=>{const ee=T.map((j,P)=>P===R?{...j,data:{...j.data}}:j);for(let j=L.startRow;j<=L.endRow;j++)for(let P=L.startCol;P<=L.endCol;P++)delete ee[R].data[$e(j,P)];return ee}):Sn(m,M,""));return;default:if(d.key.length===1&&!d.ctrlKey&&!d.metaKey&&!c){Ce({row:m,col:M}),Me(d.key);return}return}d.preventDefault(),d.shiftKey&&b?le({row:m,col:M}):(he({row:m,col:M}),le(null)),D==null||D(R,m,M)},[G,w,r,l,c,$,Sn,R,D,sn,_n,L,xe,b]),Ge=O.frozenRows??0,xn=O.frozenCols??0,Pn=[{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:me,id:ce,className:`nice-spreadsheet ${c?"nice-spreadsheet--readonly":""} ${_??""}`,style:I,onKeyDown:tn,onCopy:cn,onPaste:Ne,tabIndex:0,role:"application","aria-label":A("spreadsheet.label","Spreadsheet"),...B,children:[o&&!c&&e.jsxs("div",{className:"nice-spreadsheet__toolbar",role:"toolbar",children:[e.jsx(q.on,{variant:"ghost",size:"sm",onClick:sn,disabled:ze.length===0,title:A("spreadsheet.undo","Undo"),children:"?"}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:_n,disabled:Fe.length===0,title:A("spreadsheet.redo","Redo"),children:"?"}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(q.on,{variant:(Un=O.data[w?$e(w.row,w.col):""])!=null&&Un.bold?"primary":"ghost",size:"sm",onClick:()=>{var d;return ke("bold",!((d=O.data[w?$e(w.row,w.col):""])!=null&&d.bold))},title:A("spreadsheet.bold","Bold"),children:e.jsx("strong",{children:"B"})}),e.jsx(q.on,{variant:(Xn=O.data[w?$e(w.row,w.col):""])!=null&&Xn.italic?"primary":"ghost",size:"sm",onClick:()=>{var d;return ke("italic",!((d=O.data[w?$e(w.row,w.col):""])!=null&&d.italic))},title:A("spreadsheet.italic","Italic"),children:e.jsx("em",{children:"I"})}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>ke("align","left"),title:A("spreadsheet.alignLeft","Align left"),children:"?"}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>ke("align","center"),title:A("spreadsheet.alignCenter","Center"),children:"?"}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>ke("align","right"),title:A("spreadsheet.alignRight","Align right"),children:"?"}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(q.an,{value:((Tn=O.data[w?$e(w.row,w.col):""])==null?void 0:Tn.bgColor)??"var(--bg-primary, #ffffff)",onChange:d=>ke("bgColor",d),title:A("spreadsheet.bgColor","Background color")}),e.jsx(q.an,{value:((Kn=O.data[w?$e(w.row,w.col):""])==null?void 0:Kn.color)??"var(--text-primary, #000000)",onChange:d=>ke("color",d),title:A("spreadsheet.textColor","Text color")}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(q.Je,{size:"sm",value:((Vn=O.data[w?$e(w.row,w.col):""])==null?void 0:Vn.format)??"text",onChange:d=>ke("format",d),options:Pn,"aria-label":A("spreadsheet.format","Cell format")}),e.jsx("span",{className:"nice-spreadsheet__separator"}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>w&&Te(w.row),title:A("spreadsheet.insertRow","Insert row"),children:"+?"}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>w&&on(w.col),title:A("spreadsheet.insertCol","Insert column"),children:"+?"}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>w&&Ke(w.row),title:A("spreadsheet.deleteRow","Delete row"),children:"-?"}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>w&&Je(w.col),title:A("spreadsheet.deleteCol","Delete column"),children:"-?"})]}),u&&e.jsxs("div",{className:"nice-spreadsheet__formula-bar",children:[e.jsxs("span",{className:"nice-spreadsheet__cell-label",children:[w?$e(w.row,w.col):"",L&&L.startRow!==L.endRow||L&&L.startCol!==L.endCol?`:${$e(L.endRow,L.endCol)}`:""]}),e.jsx(q.Ye,{className:"nice-spreadsheet__formula-input",value:G?ve:Hn,onChange:d=>{G?Me(d):w&&(Ce(w),Me(d))},onKeyDown:de,readOnly:c,"aria-label":A("spreadsheet.formulaBar","Formula bar")})]}),e.jsx("div",{className:"nice-spreadsheet__grid",ref:Ye,children:e.jsxs("table",{role:"grid","aria-label":O.name,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{className:"nice-spreadsheet__corner"}),Array.from({length:l},(d,m)=>{var M;return e.jsxs("th",{className:`nice-spreadsheet__col-header ${m<xn?"nice-spreadsheet__col-header--frozen":""}`,style:{width:((M=O.colWidths)==null?void 0:M[m])??80,position:m<xn?"sticky":void 0,left:m<xn?m*80+40:void 0,zIndex:m<xn?3:void 0},children:[e.jsx("span",{children:fi(m)}),x&&e.jsx("span",{className:"nice-spreadsheet__sort-trigger",onClick:()=>Dn(m,O.sortColumn===m&&O.sortDirection==="asc"?"desc":"asc"),title:A("spreadsheet.sort","Sort"),children:(O.sortColumn===m&&O.sortDirection,"?")}),!c&&e.jsx("span",{className:"nice-spreadsheet__col-resize",onMouseDown:T=>ot(m,T)})]},m)})]})}),e.jsx("tbody",{children:Array.from({length:r},(d,m)=>e.jsxs("tr",{className:m<Ge?"nice-spreadsheet__row--frozen":"",style:m<Ge?{position:"sticky",top:m*24,zIndex:2}:void 0,children:[e.jsx("td",{className:"nice-spreadsheet__row-header",children:m+1}),Array.from({length:l},(M,T)=>{var un,pn;const ee=$e(m,T),j=O.data[ee];if(j!=null&&j.mergedInto)return null;const P=(w==null?void 0:w.row)===m&&(w==null?void 0:w.col)===T,H=Se(m,T),Re=(G==null?void 0:G.row)===m&&(G==null?void 0:G.col)===T,De=j?Ze(ee,O.data,new Set):null,te=Gn(m,T),Qe=m<Ge||T<xn;return e.jsxs("td",{className:`nice-spreadsheet__cell ${P?"nice-spreadsheet__cell--selected":""} ${H&&!P?"nice-spreadsheet__cell--in-range":""} ${j!=null&&j.readOnly?"nice-spreadsheet__cell--readonly":""} ${Qe?"nice-spreadsheet__cell--frozen":""}`,style:{textAlign:j==null?void 0:j.align,fontWeight:j!=null&&j.bold?"bold":void 0,fontStyle:j!=null&&j.italic?"italic":void 0,backgroundColor:(te==null?void 0:te.backgroundColor)??(j==null?void 0:j.bgColor),color:(te==null?void 0:te.color)??(j==null?void 0:j.color),width:(un=O.colWidths)==null?void 0:un[T],height:(pn=O.rowHeights)==null?void 0:pn[m],position:Qe?"sticky":void 0,left:T<xn?T*80+40:void 0,zIndex:Qe?1:void 0,...te},colSpan:j==null?void 0:j.colSpan,rowSpan:j==null?void 0:j.rowSpan,onMouseDown:ln=>Xe(m,T,ln),onMouseEnter:()=>En(m,T),onDoubleClick:()=>$(m,T),onContextMenu:ln=>Pe(ln,m,T),role:"gridcell","aria-selected":P,title:j==null?void 0:j.comment,children:[(j==null?void 0:j.comment)&&e.jsx("span",{className:"nice-spreadsheet__comment-indicator"}),Re?e.jsx("input",{ref:Ue,className:"nice-spreadsheet__cell-editor",value:ve,onChange:ln=>Me(ln.target.value),onKeyDown:de,onBlur:se}):ti(De,j==null?void 0:j.format)]},T)})]},m))})]})}),fe&&!c&&w&&e.jsxs("div",{className:"nice-spreadsheet__context-menu",style:{position:"fixed",left:fe.x,top:fe.y,zIndex:1e3},children:[e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>{Te(w.row),pe(null)},children:A("spreadsheet.insertRowAbove","Insert row above")}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>{Te(w.row+1),pe(null)},children:A("spreadsheet.insertRowBelow","Insert row below")}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>{on(w.col),pe(null)},children:A("spreadsheet.insertColLeft","Insert column left")}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>{on(w.col+1),pe(null)},children:A("spreadsheet.insertColRight","Insert column right")}),e.jsx("hr",{className:"nice-spreadsheet__context-sep"}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>{Ke(w.row),pe(null)},children:A("spreadsheet.deleteRow","Delete row")}),e.jsx(q.on,{variant:"ghost",size:"sm",onClick:()=>{Je(w.col),pe(null)},children:A("spreadsheet.deleteCol","Delete column")})]}),dn&&e.jsxs("div",{className:"nice-spreadsheet__status-bar",children:[e.jsxs("span",{children:[A("spreadsheet.count","Count"),": ",dn.count]}),dn.sum!==void 0&&e.jsxs("span",{children:[A("spreadsheet.sum","Sum"),": ",dn.sum.toFixed(2)]}),dn.avg!==void 0&&e.jsxs("span",{children:[A("spreadsheet.avg","Avg"),": ",dn.avg.toFixed(2)]}),dn.min!==void 0&&e.jsxs("span",{children:[A("spreadsheet.min","Min"),": ",dn.min]}),dn.max!==void 0&&e.jsxs("span",{children:[A("spreadsheet.max","Max"),": ",dn.max]})]}),g&&e.jsxs("div",{className:"nice-spreadsheet__tabs",role:"tablist",children:[Y.map((d,m)=>e.jsx("span",{className:"nice-spreadsheet__tab-wrapper",children:y===m?e.jsx(q.Ye,{className:"nice-spreadsheet__tab-rename",value:be,onChange:M=>nn(M),onBlur:()=>Bn(m,be),onKeyDown:M=>{M.key==="Enter"&&Bn(m,be),M.key==="Escape"&&V(null)},autoFocus:!0}):e.jsx("span",{onDoubleClick:()=>{c||(V(m),nn(d.name))},children:e.jsx(q.on,{variant:m===R?"primary":"ghost",size:"sm",onClick:()=>hn(m),children:d.name})})},m)),!c&&e.jsxs(e.Fragment,{children:[e.jsx(q.on,{variant:"ghost",size:"sm",onClick:qn,title:A("spreadsheet.addSheet","Add sheet"),children:"+"}),Y.length>1&&e.jsx(q.on,{variant:"ghost",size:"sm",onClick:Qn,title:A("spreadsheet.removeSheet","Remove sheet"),children:"�"})]})]})]})});Lt.displayName="NiceSpreadsheet";const ha=Object.freeze(Object.defineProperty({__proto__:null,N:ui,a:ct,c:It,d:si,f:zt,g:Rt,j:Lt,k:ri,l:mi,m:gi,n:di,o:oi,p:li,q:lt,r:Li,s:Oi},Symbol.toStringTag,{value:"Module"}));exports.Bi=Rt;exports.Ea=ri;exports.Fn=ct;exports.L=ai;exports.La=oi;exports.NiceSavedQueryPanelBSGzs7Oc=ha;exports.Oa=mi;exports.Pa=ui;exports.S=$t;exports.Ta=di;exports.Xi=zt;exports.ja=gi;exports.qi=It;exports.wa=Lt;exports.za=si;