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