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