ezux 1.1.11 → 1.1.13
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/{EzContextMenu-C3eDRS7E.cjs → EzContextMenu-B6HBUjWv.cjs} +1 -1
- package/dist/{EzContextMenu-BsHdOgtL.js → EzContextMenu-BSA_B6Pr.js} +1 -1
- package/dist/{EzEventModal-FP2rs1pp.js → EzEventModal-BUMp_BFi.js} +6 -6
- package/dist/{EzEventModal-DkowH9rh.cjs → EzEventModal-xzHfzi0O.cjs} +1 -1
- package/dist/{EzGroupingPanel-DuKrZuqq.js → EzGroupingPanel-BUsIYDRi.js} +5 -5
- package/dist/EzGroupingPanel-D0HdSomF.cjs +1 -0
- package/dist/{EzSchedulerQuickAdd-s2jtG8vH.js → EzSchedulerQuickAdd-C653LTGh.js} +5 -5
- package/dist/{EzSchedulerQuickAdd-BLF22CDh.cjs → EzSchedulerQuickAdd-UnOWCpJd.cjs} +1 -1
- package/dist/{EzSchedulerToolbar-CaVVmnjt.cjs → EzSchedulerToolbar-C-5OdRY6.cjs} +1 -1
- package/dist/{EzSchedulerToolbar-tz6h80GC.js → EzSchedulerToolbar-CO5jjDQg.js} +15 -15
- package/dist/{EzSignature-CPoQLAyS.cjs → EzSignature-BaNesxwC.cjs} +1 -1
- package/dist/{EzSignature-D7134EQo.js → EzSignature-D4EYwo9W.js} +2 -2
- package/dist/{EzTableEditDialog-3eU6i9cv.js → EzTableEditDialog-Cd948V1C.js} +3 -3
- package/dist/{EzTableEditDialog-ftpeOKI_.cjs → EzTableEditDialog-NiOubaMT.cjs} +1 -1
- package/dist/{EzTableFooter-BiyI1m1O.cjs → EzTableFooter-CWjfGCjL.cjs} +1 -1
- package/dist/{EzTableFooter-DuAaOcLd.js → EzTableFooter-DveD12RC.js} +1 -1
- package/dist/{EzTableToolbar-DmAb94U-.js → EzTableToolbar-Bz8UWv6j.js} +50 -54
- package/dist/EzTableToolbar-DHE7Bb1R.cjs +1 -0
- package/dist/{HighlightText-C0sUEoCH.js → HighlightText-8D6KEyBw.js} +9 -11
- package/dist/HighlightText-LtZmzCle.cjs +1 -0
- package/dist/{NotificationPanel-xjIHKnlE.js → NotificationPanel-D2Y-_ahk.js} +3 -3
- package/dist/NotificationPanel-zLxrtTGf.cjs +1 -0
- package/dist/{TooltipWrapper-Bv7F-Gk4.js → TooltipWrapper-BrRTi5EJ.js} +1 -1
- package/dist/{TooltipWrapper-CgYlx0Jq.cjs → TooltipWrapper-DWts4bAI.cjs} +1 -1
- package/dist/{avatar-BkA_3sri.js → avatar-BeK0E4mn.js} +1 -1
- package/dist/{avatar-CJH7L2Or.cjs → avatar-DZAaTK2f.cjs} +1 -1
- package/dist/bell-DAz8P0BR.js +14 -0
- package/dist/bell-DOX2y38e.cjs +1 -0
- package/dist/{calendar-ChRJyGvt.cjs → calendar-BMZ8ddOf.cjs} +1 -1
- package/dist/{calendar-CCxXqG5a.js → calendar-Dy3rVMW2.js} +4 -4
- package/dist/{checkbox-_Uxyw6xN.cjs → checkbox-B0lGHUyy.cjs} +1 -1
- package/dist/{checkbox-DTLp-Oqj.js → checkbox-boJRxICT.js} +1 -1
- package/dist/circle-x-Cv7bfIC_.js +9 -0
- package/dist/circle-x-DwVXxhXr.cjs +1 -0
- package/dist/{date-time-picker-BPwpIWxg.cjs → date-time-picker-DTxHdPgQ.cjs} +1 -1
- package/dist/{date-time-picker-B9QBboUX.js → date-time-picker-Dj2eftJI.js} +6 -6
- package/dist/ezux.css +1 -1
- package/dist/grip-vertical-CSyDKBul.js +12 -0
- package/dist/grip-vertical-DZNBW1Dn.cjs +1 -0
- package/dist/{index-BmjgUrNF.cjs → index-B3ipEEhH.cjs} +2 -2
- package/dist/index-BPPb7bcs.js +3220 -0
- package/dist/{index-pr_yrvsV.js → index-BQKw_Vho.js} +4026 -1904
- package/dist/{index-B7foCkRR.js → index-C5STgBSy.js} +678 -677
- package/dist/{index-CpEN0z3t.js → index-C6NfgycP.js} +357 -357
- package/dist/index-D4f2ZdrG.cjs +2 -0
- package/dist/index-DUY1SqMo.cjs +1 -0
- package/dist/index-c1Zg--dt.cjs +7 -0
- package/dist/index.cjs +2 -2
- package/dist/index.d.ts +67 -14
- package/dist/index.es.js +136 -135
- package/dist/{input-D1zXv4Kl.cjs → input-BgM_la4k.cjs} +1 -1
- package/dist/{input-DG8ycH6m.js → input-jYQ5VKNR.js} +1 -1
- package/dist/{isBefore-DdLSsf0_.js → isBefore-C3Y_wbk3.js} +1 -1
- package/dist/{isBefore-BAixcVtb.cjs → isBefore-Cp1ttk6q.cjs} +1 -1
- package/dist/kanban.cjs +1 -1
- package/dist/kanban.es.js +4 -4
- package/dist/{label-Ch1wkGGP.js → label-ClOW9UCt.js} +2 -2
- package/dist/{label-DrUloKDN.cjs → label-Dx6oDB-X.cjs} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.d.ts +29 -1
- package/dist/layout.es.js +3 -3
- package/dist/{popover-4Ng-GmwM.cjs → popover-BJq1CKmi.cjs} +1 -1
- package/dist/{popover-DstiJFa3.js → popover-Cmlb7w3R.js} +1 -1
- package/dist/scheduler.cjs +1 -1
- package/dist/scheduler.es.js +5 -5
- package/dist/{scroll-area-mGPAChYm.js → scroll-area-9fwpVNxT.js} +1 -1
- package/dist/{scroll-area-B_yufXtG.cjs → scroll-area-CwwZSSA4.cjs} +1 -1
- package/dist/select-GxA46anr.cjs +1 -0
- package/dist/select-mDCun_IR.js +35 -0
- package/dist/{settings-HCrwja-A.js → settings-CvyjK75A.js} +14 -14
- package/dist/settings-DKPknrt8.cjs +1 -0
- package/dist/signature.cjs +1 -1
- package/dist/signature.es.js +1 -1
- package/dist/{sortable.esm-DDmDbyCC.cjs → sortable.esm-CsRPuXyD.cjs} +1 -1
- package/dist/{sortable.esm-eBjUK76c.js → sortable.esm-CzMCDPet.js} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.d.ts +18 -0
- package/dist/table.es.js +10 -9
- package/dist/theme-vars.css +2 -2
- package/dist/{tooltip-CDLAzCi8.cjs → tooltip-B41iztKT.cjs} +1 -1
- package/dist/{tooltip-C216fkmP.js → tooltip-BCtrEe0z.js} +1 -1
- package/dist/treeview.cjs +1 -2
- package/dist/treeview.es.js +558 -543
- package/dist/{useInitCoreServices-DSudhSFo.cjs → useInitCoreServices-CwXv2p4S.cjs} +1 -1
- package/dist/{useInitCoreServices-BC7QMeLn.js → useInitCoreServices-D1WaWlaI.js} +4 -3
- package/dist/{useService-DBnjCLOu.cjs → useService-8OoezWr8.cjs} +1 -1
- package/dist/{useService-BKWyN7jJ.js → useService-BUi3uAqE.js} +1 -1
- package/dist/{useServiceState-MlrHzngO.cjs → useServiceState-BjpCjUn2.cjs} +1 -1
- package/dist/{useServiceState-DWb3cncq.js → useServiceState-VE-viK8b.js} +1 -1
- package/package.json +21 -20
- package/dist/EzGroupingPanel-Dw4bbefz.cjs +0 -1
- package/dist/EzTableToolbar-qlNVxvsL.cjs +0 -1
- package/dist/HighlightText-BDclEh_K.cjs +0 -1
- package/dist/NotificationPanel-juBrjjOY.cjs +0 -1
- package/dist/index-BKsqtcvu.cjs +0 -2
- package/dist/index-D2HX-sbl.js +0 -3092
- package/dist/index-DEIRrhVY.cjs +0 -1
- package/dist/index-DGhcUfqi.cjs +0 -7
- package/dist/info-BY2cfl1l.cjs +0 -1
- package/dist/info-BuURqzhx.js +0 -14
- package/dist/select-BxcAKVaB.cjs +0 -1
- package/dist/select-BxiFqo8j.js +0 -35
- package/dist/settings-BuS8Pqjb.cjs +0 -1
package/dist/treeview.cjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("react/jsx-runtime"),l=require("react"),_=require("./useInitCoreServices-DSudhSFo.cjs"),Y=require("./HighlightText-BDclEh_K.cjs"),fe=require("./useComponentState-DDgGbBXv.cjs"),W=require("./EzErrorBoundary-CEdz_hDo.cjs"),ge=require("./useService-DBnjCLOu.cjs"),me=require("./useServiceState-MlrHzngO.cjs"),O=require("./EzContextMenu-C3eDRS7E.cjs"),J=require("./sortable.esm-DDmDbyCC.cjs"),Ne=require("./chevron-down-DZVL7VHW.cjs");class pe{name="HierarchyService";nodeMap=new Map;constructor(){}registerNode(t){this.nodeMap.set(t.id,t)}unregisterNode(t){this.nodeMap.delete(t)}getParent(t){const r=this.nodeMap.get(t);if(r&&r.parentId)return this.nodeMap.get(r.parentId)}getChildren(t){const r=this.nodeMap.get(t);return r&&r.children?r.children.map(o=>this.nodeMap.get(o)).filter(o=>!!o):[]}getDescendants(t){const r=[],o=[...this.nodeMap.get(t)?.children||[]];for(;o.length>0;){const c=o.pop();r.push(c);const S=this.nodeMap.get(c);S?.children&&o.push(...S.children)}return r}getAncestors(t){const r=[];let o=this.nodeMap.get(t)?.parentId;for(;o;)r.push(o),o=this.nodeMap.get(o)?.parentId;return r}getNode(t){return this.nodeMap.get(t)}cleanup(){this.nodeMap.clear()}}const xe=(e,t)=>t?{id:t.id?e[t.id]:e.id,label:t.text?e[t.text]:e.label,children:t.children?e[t.children]:e.children,icon:t.icon?e[t.icon]:e.icon,...e}:e,te=(e,t)=>!t||t==="None"?e:[...e].sort((o,c)=>{const S=o.label.localeCompare(c.label);return t==="Ascending"?S:-S}).map(o=>({...o,children:o.children?te(o.children,t):void 0})),Q=Y.findNodeById,U=Y.updateNodeInNodes,we=e=>{const{data:t,fields:r,sortOrder:o,onDataSourceChanged:c,onDataBound:S}=e,{state:N,setState:f}=fe.useComponentState({initialState:{internalTreeData:t,loadingNodes:new Set}}),x=l.useRef(!1),k=l.useCallback(d=>{f(s=>({...s,internalTreeData:typeof d=="function"?d(s.internalTreeData):d}))},[f]),v=l.useCallback(d=>{f(s=>({...s,loadingNodes:typeof d=="function"?d(s.loadingNodes):d}))},[f]),{internalTreeData:g,loadingNodes:b}=N,M=l.useMemo(()=>{let d=g;if(r){const s=D=>D.map(T=>{const A=xe(T,r);return A.children&&(A.children=s(A.children)),A});d=s(d)}return o&&(d=te(d,o)),d},[g,r,o]),C=l.useRef(t);l.useEffect(()=>{C.current!==t&&(k(t),c?.(),C.current=t)},[t,c]),l.useEffect(()=>{x.current&&S?.()},[M,S]),l.useEffect(()=>(x.current=!0,()=>{x.current=!1}),[]);const E=l.useCallback((d,s)=>{k(D=>U(D,d,s))},[k]);return{treeData:M,setInternalTreeData:k,loadingNodes:b,setLoadingNodes:v,updateNode:E}},Se=(e,t,r,o,c)=>{const{expandedNodes:S,onNodeExpanding:N,onNodeExpanded:f,onNodeCollapsing:x,onNodeCollapsed:k,onNodeExpand:v,onLoadChildren:g,onActionFailure:b}=e,[M,C]=l.useState(new Set),E=S?new Set(S):M,d=l.useCallback(async s=>{const D=E.has(s),T=!D;if(T){if(N?.(s)===!1)return}else if(x?.(s)===!1)return;if(T&&(g||c)){const K=Q(t,s);if(K&&!K.isLoaded&&!K.isLeaf){o(z=>new Set(z).add(s));try{const z=c?await c.loadNodes(s):await g(s);r(s,{children:z,isLoaded:!0})}catch(z){b?.(z);return}finally{o(z=>{const y=new Set(z);return y.delete(s),y})}}}const A=new Set(E);D?A.delete(s):A.add(s),S||C(A),v?.(s,T),T?f?.(s):k?.(s)},[E,t,g,v,S,N,x,f,k,b,r,o,c]);return{expandedNodes:E,setInternalExpandedNodes:C,toggleExpand:d}},ve=(e,t)=>{const{selectedNodes:r,checkedNodes:o,selectionMode:c="single",onSelectionChange:S,onCheckedChange:N,onNodeSelecting:f,onNodeSelected:x,onNodeChecking:k,onNodeChecked:v,autoCheck:g=!0}=e,[b,M]=l.useState(new Set),C=r?new Set(r):b,[E,d]=l.useState(new Set),s=o?new Set(o):E,[D,T]=l.useState(new Set),A=l.useCallback(y=>{if(f?.(y)===!1)return;const P=new Set(c==="multiple"?C:[]);P.has(y)?P.delete(y):P.add(y),r||M(P),S?.(Array.from(P)),x?.(y)},[C,c,S,r,f,x]),K=l.useCallback((y,P)=>{const n=new Set(s),a=new Set(D),u=t.getDescendants(y),h=t.getAncestors(y);P?(n.add(y),a.delete(y),g&&u.forEach(m=>{n.add(m),a.delete(m)})):(n.delete(y),a.delete(y),g&&u.forEach(m=>{n.delete(m),a.delete(m)})),g&&h.forEach(m=>{const V=t.getChildren(m),L=V.every(I=>n.has(I.id)),$=V.every(I=>!n.has(I.id)&&!a.has(I.id));L?(n.add(m),a.delete(m)):$?(n.delete(m),a.delete(m)):(n.delete(m),a.add(m))}),o||(d(n),T(a)),N?.(Array.from(n)),v?.(y,P)},[s,D,t,N,g,o,v]),z=l.useCallback(y=>{const P=s.has(y);k?.(y,!P)!==!1&&K(y,!P)},[s,K,k]);return{selectedNodes:C,setInternalSelectedNodes:M,toggleSelect:A,checkedNodes:s,setInternalCheckedNodes:d,indeterminateNodes:D,setIndeterminateNodes:T,toggleCheck:z,updateCheckState:K}},be=(e,t,r="")=>{const o=r.toLowerCase(),c=l.useMemo(()=>{if(!o)return null;const N=new Map,f=x=>{if(N.has(x.id))return N.get(x.id);let k=x.label.toLowerCase().includes(o),v=!1;if(x.children)for(const b of x.children)f(b).matches&&(v=!0);const g={matches:k||v,hasChildMatch:v};return N.set(x.id,g),g};return e.forEach(x=>f(x)),N},[e,o]);return{flattenedNodes:l.useMemo(()=>{const N=[],f=(x,k=0)=>{x.forEach(v=>{const g=c?c.get(v.id):void 0;if((c?g?.matches:!0)===!1)return;N.push({node:v,level:k});const M=c&&g?.hasChildMatch;(t.has(v.id)||M)&&v.children&&f(v.children,k+1)})};return f(e),N},[e,t,c])}},Ce=(e,t,r,o,c,S,N,f,x,k,v,g,b,M,C={})=>{const E=_.useEzServiceRegistry(),{expandedNodes:d,checkedNodes:s,selectedNodes:D,onNodeExpand:T,onCheckedChange:A,onSelectionChange:K,onNodeEditing:z}=e,y=l.useMemo(()=>({...C,...{expandAll:()=>{const n=Array.from(g.nodeMap.keys());d?T?.(n[0],!0):c(new Set(n))},collapseAll:()=>{d?T?.("",!1):c(new Set)},checkAll:()=>{const n=Array.from(g.nodeMap.keys());s?A?.(n):(N(new Set(n)),x(new Set))},uncheckAll:()=>{s?A?.([]):(N(new Set),x(new Set))},selectNode:n=>{D?K?.([n]):f(new Set([n]))},expandNode:(n,a=!0)=>{d?T?.(n,a):c(u=>{const h=new Set(u);return a?h.add(n):h.delete(n),h})},checkNode:(n,a=!0)=>k(n,a),getFlattenedNodes:()=>v,addNodes:(n,a,u)=>{if(!a)r(h=>{const m=[...h];return u!==void 0?m.splice(u,0,...n):m.push(...n),m});else{const h=m=>m.map(V=>{if(V.id===a){const L=[...V.children||[]];return u!==void 0?L.splice(u,0,...n):L.push(...n),{...V,children:L}}return V.children?{...V,children:h(V.children)}:V});r(m=>h(m))}E.get("NotificationService")?.show({type:"success",message:`${n.length} Node(s) Added`,duration:2e3})},removeNodes:n=>{const a=new Set(n),u=h=>h.filter(m=>!a.has(m.id)).map(m=>({...m,children:m.children?u(m.children):void 0}));r(h=>u(h)),E.get("NotificationService")?.show({type:"success",message:`${n.length} Node(s) Removed`,duration:2e3})},updateNode:(n,a)=>{r(u=>U(u,n,a)),E.get("NotificationService")?.show({type:"success",message:"Node Updated Successfully",duration:2e3})},moveNodes:(n,a,u)=>{const h=[],m=new Set(n),V=I=>I.filter(i=>m.has(i.id)?(h.push(i),!1):!0).map(i=>({...i,children:i.children?V(i.children):void 0})),L=V(t),$=I=>I.map(i=>{if(i.id===a){const R=[...i.children||[]];return u!==void 0?R.splice(u,0,...h):R.push(...h),{...i,children:R}}return i.children?{...i,children:$(i.children)}:i});r($(L)),E.get("NotificationService")?.show({type:"success",message:"Nodes Moved Successfully",duration:2e3})},getNode:n=>Q(t,n),getTreeData:()=>t,ensureVisible:n=>{const a=g.getAncestors(n);d?(a.forEach(u=>T?.(u,!0)),T?.(n,!0)):c(u=>{const h=new Set(u);return a.forEach(m=>h.add(m)),h.add(n),h})},beginEdit:n=>{Q(t,n)&&z?.(n)!==!1&&b(n)},disableNodes:(n,a=!0)=>{n.forEach(u=>{r(h=>U(h,u,{disabled:a}))})},enableNodes:n=>{n.forEach(a=>{r(u=>U(u,a,{disabled:!1}))})},getAllCheckedNodes:()=>Array.from(S),getDisabledNodes:()=>{const n=[],a=u=>{u.forEach(h=>{h.disabled&&n.push(h.id),h.children&&a(h.children)})};return a(t),n}}}),[g,t,o,S,d,s,D,T,A,K,z,r,c,N,f,x,k,v,b,C]);W.useComponentImperativeAPI(M,y)},ye=e=>{const t=_.useEzServiceRegistry(),o=me.useServiceState("I18nService")?.dir||"ltr",c=_.useBaseComponent(e),{serviceRegistry:S,api:N}=c,{dir:f,apiRef:x,searchTerm:k}=e,v=f==="auto"||!f?o:f,{treeData:g,setInternalTreeData:b,loadingNodes:M,setLoadingNodes:C,updateNode:E}=we(e),d=l.useMemo(()=>e.service?e.service:e.serviceName?t.get(e.serviceName):null,[e.service,e.serviceName]);l.useEffect(()=>{d&&d.loadNodes().then(R=>{b(R)})},[d,b]);const s=ge.useService("HierarchyService",()=>new pe,S||t),D=l.useCallback((R,p=0,B)=>{R.forEach(F=>{const H={id:F.id,level:p,parentId:B,children:F.children?.map(q=>q.id)};s.registerNode(H),F.children&&D(F.children,p+1,F.id)})},[s]);l.useEffect(()=>{s&&(s.cleanup(),D(g))},[g,s,D]);const{selectedNodes:T,setInternalSelectedNodes:A,toggleSelect:K,checkedNodes:z,setInternalCheckedNodes:y,indeterminateNodes:P,setIndeterminateNodes:n,toggleCheck:a,updateCheckState:u}=ve(e,s),{expandedNodes:h,setInternalExpandedNodes:m,toggleExpand:V}=Se(e,g,E,C,d),{flattenedNodes:L}=be(g,h,k),[$,I]=l.useState(null),i=l.useCallback((R,p)=>{E(R,{label:p}),e.onNodeRename?.(R,p)},[E,e.onNodeRename]);return Ce(e,g,b,h,m,z,y,A,n,u,L,s,I,x,N),{state:{treeData:g,expandedNodes:h,selectedNodes:T,checkedNodes:z,indeterminateNodes:P,loadingNodes:M,flattenedNodes:L,editingNodeId:$},actions:{toggleExpand:V,toggleSelect:K,toggleCheck:a,handleNodeRename:i,setEditingNodeId:I},config:{allowTextWrap:e.allowTextWrap,animation:e.animation,checkOnClick:e.checkOnClick,fullRowSelect:e.fullRowSelect,fullRowNavigable:e.fullRowNavigable,onKeyPress:e.onKeyPress,onNodeClicked:e.onNodeClicked,onDrawNode:e.onDrawNode},dir:v,baseApi:N}},ke=()=>w.jsx("div",{className:"flex flex-col items-center justify-center min-h-screen p-4",children:w.jsxs("div",{className:"flex flex-col items-center gap-4 max-w-md w-full",children:[w.jsx("div",{className:"flex items-center justify-center w-16 h-16 rounded-full bg-destructive/10",children:w.jsx(W.TriangleAlert,{className:"w-8 h-8 text-destructive"})}),w.jsxs("div",{className:"flex flex-col items-center gap-2 text-center",children:[w.jsx("h2",{className:"text-lg font-semibold",children:"Tree View Error"}),w.jsx("p",{className:"text-sm text-muted-foreground",children:"Something went wrong with the tree view. Please refresh the page or try again."})]}),w.jsxs("button",{onClick:()=>window.location.reload(),className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-primary hover:bg-primary/10 rounded-md transition-colors",children:[w.jsx(W.RefreshCw,{className:"w-4 h-4"}),"Refresh Page"]})]})}),ne=l.memo(({node:e,level:t,isExpanded:r,isSelected:o,isChecked:c,isIndeterminate:S,isLoading:N,hasChildren:f,onToggleExpand:x,onToggleSelect:k,onToggleCheck:v,onRename:g,showCheckboxes:b,allowEditing:M,searchTerm:C,style:E,onKeyDown:d,tabIndex:s,autoFocus:D,slots:T,slotProps:A,allowTextWrap:K,animation:z,checkOnClick:y,fullRowSelect:P,fullRowNavigable:n,onNodeClicked:a,onDrawNode:u,isEditing:h,onEditingChange:m,dir:V})=>{const L=V==="rtl",[$,I]=l.useState(!1),[i,R]=l.useState(e.label);l.useEffect(()=>{h!==void 0&&h!==$&&(I(h),h&&R(e.label))},[h,$,e.label]),l.useEffect(()=>{u?.(e)},[e,u]);const{setNodeRef:p,transform:B,isDragging:F,attributes:H,listeners:q,transition:re}=J.useSortable({id:e.id,data:{node:e,type:"tree-item",level:t}}),G=l.useRef(null),oe=j=>{p(j),G.current=j};l.useEffect(()=>{D&&G.current&&!$&&G.current.focus({preventScroll:!0})},[D,$]);const ie=()=>{M&&(I(!0),R(e.label),m?.(!0))},ce=j=>{j.key==="Enter"?(g(e.id,i),I(!1),m?.(!1)):j.key==="Escape"&&(R(e.label),I(!1),m?.(!1))},le=t*20+(f?0:20),ae={...E,transform:O.CSS.Translate.toString(B)?`${E.transform||""} ${O.CSS.Translate.toString(B)}`:E.transform,transition:re||E.transition,opacity:F?.3:1,zIndex:F?999:"auto"},X=T?.node,Z=T?.expandIcon,ee=T?.checkbox,de=()=>{if(N)return w.jsx(W.LoaderCircle,{className:"w-3.5 h-3.5 animate-spin"});if(!f)return null;if(Z){const j=Z;return w.jsx(j,{isExpanded:r,isLoading:N,...A?.expandIcon})}return r?w.jsx(Ne.ChevronDown,{className:"w-4 h-4"}):L?w.jsx(W.ChevronRight,{className:"w-4 h-4 rotate-180"}):w.jsx(W.ChevronRight,{className:"w-4 h-4"})},ue=()=>{if(!b)return null;if(ee){const j=ee;return w.jsx(j,{checked:c,indeterminate:S,onChange:()=>v(e.id),...A?.checkbox})}return w.jsxs("div",{"data-testid":`tree-checkbox-${e.id}`,onClick:j=>{j.stopPropagation(),v(e.id)},className:`w-4 h-4 me-2 flex items-center justify-center rounded border transition-colors cursor-pointer
|
|
2
|
-
${c||S?"bg-primary border-primary text-primary-foreground":"bg-background border-input"}`,children:[c&&w.jsx(W.Check,{className:"w-3 h-3"}),S&&w.jsx(Y.Minus,{className:"w-3 h-3"})]})},he=j=>{j==="edit"&&M&&(I(!0),R(e.label))};return w.jsx(O.EzContextMenu,{contextId:"tree-node",data:e,onAction:he,children:w.jsx("div",{ref:oe,...H,...q,role:"treeitem","data-testid":`tree-item-${e.id}`,"aria-expanded":f?r:void 0,"aria-selected":o,tabIndex:s,onKeyDown:j=>{M&&j.key==="F2"&&(j.stopPropagation(),I(!0),R(e.label)),q?.onKeyDown&&q.onKeyDown(j),d(j,e.id)},onClick:()=>{k(e.id),a?.(e.id),y&&b&&v(e.id)},className:_.cn("flex items-center py-1.5 px-2 cursor-pointer hover:bg-muted/50 rounded-md w-full group outline-none focus:ring-1 focus:ring-primary/30 select-none",o?"bg-primary/10 text-primary":"text-foreground",F?"bg-primary/5":"",z?"transition-all duration-200":""),style:{...ae,paddingInlineStart:`${le}px`},children:X?w.jsx(X,{node:e,level:t,isExpanded:r,isSelected:o,isChecked:c,isIndeterminate:S,onToggleExpand:()=>x(e.id),onToggleSelect:()=>k(e.id),onToggleCheck:()=>v(e.id),...A?.node||{}}):w.jsxs(w.Fragment,{children:[f||N?w.jsx("button",{"data-testid":"expand-button",onClick:j=>{j.stopPropagation(),x(e.id)},onPointerDown:j=>j.stopPropagation(),className:"w-5 h-5 flex items-center justify-center me-1 text-muted-foreground hover:text-foreground hover:bg-muted rounded focus:outline-none transition-colors",tabIndex:-1,children:de()}):null,ue(),e.icon&&w.jsx("span",{className:"me-2 flex-shrink-0 text-muted-foreground group-hover:text-foreground transition-colors",children:e.icon}),$?w.jsx("input",{"data-testid":"tree-item-edit-input",autoFocus:!0,value:i,onChange:j=>R(j.target.value),onKeyDown:ce,onBlur:()=>I(!1),onClick:j=>j.stopPropagation(),className:"flex-1 bg-background border border-primary rounded px-1 text-sm outline-none"}):w.jsx("span",{className:`text-sm font-medium flex-1 ${K?"whitespace-normal":"truncate"}`,onDoubleClick:j=>{j.stopPropagation(),ie()},children:w.jsx(Y.HighlightText,{text:e.label,highlight:C})})]})})})});ne.displayName="EzTreeViewItem";const se=l.memo(({items:e,expandedNodes:t,selectedNodes:r,checkedNodes:o,indeterminateNodes:c,loadingNodes:S,onToggleExpand:N,onToggleSelect:f,onToggleCheck:x,onNodeRename:k,className:v,dir:g,showCheckboxes:b,allowEditing:M,searchTerm:C,slots:E,slotProps:d,allowTextWrap:s,animation:D,checkOnClick:T,fullRowSelect:A,fullRowNavigable:K,onKeyPress:z,onNodeClicked:y,onDrawNode:P,editingNodeId:n,setEditingNodeId:a})=>{const{rowVirtualizer:u,parentRef:h,getVirtualItems:m}=O.useVirtualization({rowCount:e.length,rowHeight:32,overscanCount:10,progressiveRendering:!0}),[V,L]=l.useState(0),$=l.useMemo(()=>{const i=new Map;return e.forEach((R,p)=>i.set(R.node.id,p)),i},[e]),I=l.useCallback((i,R,p)=>{const B=g==="rtl",F=B?"ArrowLeft":"ArrowRight",H=B?"ArrowRight":"ArrowLeft";if(i.key==="ArrowDown"){i.preventDefault();const q=Math.min(e.length-1,R+1);L(q),u.scrollToIndex(q)}else if(i.key==="ArrowUp"){i.preventDefault();const q=Math.max(0,R-1);L(q),u.scrollToIndex(q)}else if(i.key===F)i.preventDefault(),(p.children?.length||!p.isLoaded&&!p.isLeaf)&&!t.has(p.id)?N(p.id):p.children?.length&&t.has(p.id)&&R+1<e.length&&e[R+1].level>(p.level??0)&&(L(R+1),u.scrollToIndex(R+1));else if(i.key===H){if(i.preventDefault(),t.has(p.id))N(p.id);else if(p.parentId){const q=$.get(p.parentId);q!==void 0&&(L(q),u.scrollToIndex(q))}}else(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),b?x(p.id):f(p.id))},[e,t,N,f,x,b,$,u]);return w.jsx("div",{ref:h,className:_.cn("absolute inset-0 overflow-y-auto bg-background border rounded-lg shadow-sm focus:outline-none focus:ring-1 focus:ring-primary/20",v),dir:g,role:"tree",onKeyDown:i=>z?.(i),children:w.jsx("div",{style:{height:`${u.getTotalSize()}px`,width:"100%",position:"relative"},children:w.jsx(J.SortableContext,{items:e.map(i=>i.node.id),strategy:J.verticalListSortingStrategy,children:m().map(i=>{const R=e[i.index],{node:p,level:B}=R,F=V===i.index;return w.jsx(ne,{node:p,level:B,isExpanded:t.has(p.id),isSelected:r.has(p.id),isChecked:o.has(p.id),isIndeterminate:c.has(p.id),isLoading:S.has(p.id),hasChildren:!!p.children?.length||!p.isLoaded&&!p.isLeaf,onToggleExpand:N,onToggleSelect:f,onToggleCheck:x,onRename:k,showCheckboxes:b,allowEditing:M,searchTerm:C,onKeyDown:H=>I(H,i.index,p),style:{position:"absolute",top:`${i.start}px`,left:0,width:"100%",height:`${i.size}px`},tabIndex:F?0:-1,autoFocus:F,slots:E,slotProps:d,allowTextWrap:s,animation:D,checkOnClick:T,fullRowSelect:A,fullRowNavigable:K,onNodeClicked:y,onDrawNode:P,isEditing:n===p.id,onEditingChange:H=>a(H?p.id:null),dir:g},p.id)})})})})});se.displayName="EzVirtualTree";const Ee=({onDragEnd:e,onDragStart:t})=>{const[r,o]=l.useState(null),[c,S]=l.useState(null),[N,f]=l.useState("inside"),x=O.useSensors(O.useSensor(O.PointerSensor,{activationConstraint:{distance:8}})),k=l.useCallback(b=>{const{active:M}=b,C=M.data.current?.node;C&&(o(C),t?.(C))},[t]),v=l.useCallback(b=>{b.preventDefault();const{active:M,over:C}=b;if(!C)return;const E=M.data.current?.node,d=C.data.current?.node;if(E&&d&&E.id!==d.id){const s=C.rect,D=s.top+s.height/2;D<s.top+10?f("before"):D>s.bottom-10?f("after"):f("inside"),S(d)}},[]),g=l.useCallback(b=>{const{active:M,over:C}=b;M&&C&&r&&c&&e(r,c,N),o(null),S(null),f("inside")},[r,c,N,e]);return{sensors:x,activeNode:r,dragOverNode:c,dragPosition:N,handleDragStart:k,handleDragOver:v,handleDragEnd:g}},Me=e=>{_.useInitCoreServices();const t=ye(e),{state:{expandedNodes:r,selectedNodes:o,checkedNodes:c,indeterminateNodes:S,loadingNodes:N,flattenedNodes:f,editingNodeId:x},actions:{toggleExpand:k,toggleSelect:v,toggleCheck:g,handleNodeRename:b,setEditingNodeId:M},config:{allowTextWrap:C,animation:E,checkOnClick:d,fullRowSelect:s,fullRowNavigable:D,onKeyPress:T,onNodeClicked:A,onDrawNode:K},dir:z}=t,{handleDragEnd:y,sensors:P}=Ee({onDragEnd:(n,a,u)=>{e.onNodeDrop&&e.onNodeDrop(n,a,u)}});return w.jsx(W.EzErrorBoundary,{fallback:w.jsx(ke,{}),children:w.jsx("div",{className:_.cn("relative flex-1 w-full h-full min-h-0",e.className),children:w.jsx(O.DndContext,{sensors:P,collisionDetection:O.closestCenter,onDragEnd:y,children:w.jsx(se,{items:f,expandedNodes:r,selectedNodes:o,checkedNodes:c,indeterminateNodes:S,loadingNodes:N,onToggleExpand:k,onToggleSelect:v,onToggleCheck:g,onNodeRename:b,dir:z,showCheckboxes:e.showCheckboxes,allowEditing:e.allowEditing,searchTerm:e.searchTerm,slots:e.slots,slotProps:e.slotProps,allowTextWrap:C,animation:E,checkOnClick:d,fullRowSelect:s,fullRowNavigable:D,onKeyPress:T,onNodeClicked:A,onDrawNode:K,editingNodeId:x,setEditingNodeId:M})})})})};exports.EzTreeView=Me;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("react/jsx-runtime"),h=require("react"),O=require("./useInitCoreServices-CwXv2p4S.cjs"),Q=require("./HighlightText-LtZmzCle.cjs"),he=require("./useComponentState-DDgGbBXv.cjs"),U=require("./EzErrorBoundary-CEdz_hDo.cjs"),fe=require("./useService-8OoezWr8.cjs"),me=require("./useServiceState-BjpCjUn2.cjs"),H=require("./EzContextMenu-B6HBUjWv.cjs"),G=require("./sortable.esm-CsRPuXyD.cjs"),ge=require("./chevron-down-DZVL7VHW.cjs");class Ne{name="HierarchyService";nodeMap=new Map;constructor(){}registerNode(t){this.nodeMap.set(t.id,t)}unregisterNode(t){this.nodeMap.delete(t)}getParent(t){const o=this.nodeMap.get(t);if(o&&o.parentId)return this.nodeMap.get(o.parentId)}getChildren(t){const o=this.nodeMap.get(t);return o&&o.children?o.children.map(i=>this.nodeMap.get(i)).filter(i=>!!i):[]}getDescendants(t){const o=[],i=[...this.nodeMap.get(t)?.children||[]];for(;i.length>0;){const d=i.pop();o.push(d);const S=this.nodeMap.get(d);S?.children&&i.push(...S.children)}return o}getAncestors(t){const o=[];let i=this.nodeMap.get(t)?.parentId;for(;i;)o.push(i),i=this.nodeMap.get(i)?.parentId;return o}getNode(t){return this.nodeMap.get(t)}cleanup(){this.nodeMap.clear()}}const pe=(e,t)=>t?{id:t.id?e[t.id]:e.id,label:t.text?e[t.text]:e.label,children:t.children?e[t.children]:e.children,icon:t.icon?e[t.icon]:e.icon,...e}:e,te=(e,t)=>!t||t==="None"?e:[...e].sort((i,d)=>{const S=i.label.localeCompare(d.label);return t==="Ascending"?S:-S}).map(i=>({...i,children:i.children?te(i.children,t):void 0})),J=Q.findNodeById,W=Q.updateNodeInNodes,xe=e=>{const{data:t,fields:o,sortOrder:i,onDataSourceChanged:d,onDataBound:S}=e,{state:g,setState:f}=he.useComponentState({initialState:{internalTreeData:t,loadingNodes:new Set}}),p=h.useRef(!1),M=h.useCallback(m=>{f(r=>({...r,internalTreeData:typeof m=="function"?m(r.internalTreeData):m}))},[f]),b=h.useCallback(m=>{f(r=>({...r,loadingNodes:typeof m=="function"?m(r.loadingNodes):m}))},[f]),{internalTreeData:N,loadingNodes:x}=g,T=h.useMemo(()=>{let m=N;if(o){const r=v=>v.map(j=>{const I=pe(j,o);return I.children&&(I.children=r(I.children)),I});m=r(m)}return i&&(m=te(m,i)),m},[N,o,i]),E=h.useRef(t);h.useEffect(()=>{E.current!==t&&(M(t),d?.(),E.current=t)},[t,d]),h.useEffect(()=>{p.current&&S?.()},[T,S]),h.useEffect(()=>(p.current=!0,()=>{p.current=!1}),[]);const k=h.useCallback((m,r)=>{M(v=>W(v,m,r))},[M]);return{treeData:T,setInternalTreeData:M,loadingNodes:x,setLoadingNodes:b,updateNode:k}},we=(e,t,o,i,d)=>{const{expandedNodes:S,onNodeExpanding:g,onNodeExpanded:f,onNodeCollapsing:p,onNodeCollapsed:M,onNodeExpand:b,onLoadChildren:N,onActionFailure:x}=e,[T,E]=h.useState(new Set),k=S?new Set(S):T,m=h.useCallback(async r=>{const v=k.has(r),j=!v;if(j){if(g?.(r)===!1)return}else if(p?.(r)===!1)return;if(j&&(N||d)){const K=J(t,r);if(K&&!K.isLoaded&&!K.isLeaf){i(P=>new Set(P).add(r));try{const P=d?await d.loadNodes(r):await N(r);o(r,{children:P,isLoaded:!0})}catch(P){x?.(P);return}finally{i(P=>{const q=new Set(P);return q.delete(r),q})}}}const I=new Set(k);v?I.delete(r):I.add(r),S||E(I),b?.(r,j),j?f?.(r):M?.(r)},[k,t,N,b,S,g,p,f,M,x,o,i,d]);return{expandedNodes:k,setInternalExpandedNodes:E,toggleExpand:m}},Se=(e,t,o)=>{const{selectedNodes:i,checkedNodes:d,selectionMode:S="single",onSelectionChange:g,onCheckedChange:f,onNodeSelecting:p,onNodeSelected:M,onNodeChecking:b,onNodeChecked:N,autoCheck:x=!0}=e,[T,E]=h.useState(new Set),k=i?new Set(i):T,[m,r]=h.useState(new Set),v=d?new Set(d):m,[j,I]=h.useState(new Set),K=h.useCallback(R=>{if(p?.(R)===!1)return;const n=new Set(S==="multiple"?k:[]);n.has(R)?n.delete(R):n.add(R),i||E(n),g?.(Array.from(n)),M?.(R)},[k,S,g,i,p,M]),P=h.useCallback((R,n)=>{const a=new Set(v),c=new Set(j),u=t.getDescendants(R),D=t.getAncestors(R);n?(a.add(R),c.delete(R),x&&u.forEach(y=>{a.add(y),c.delete(y)})):(a.delete(R),c.delete(R),x&&u.forEach(y=>{a.delete(y),c.delete(y)})),x&&D.forEach(y=>{const C=t.getChildren(y),V=C.every(s=>a.has(s.id)),L=C.every(s=>!a.has(s.id)&&!c.has(s.id));V?(a.add(y),c.delete(y)):L?(a.delete(y),c.delete(y)):(a.delete(y),c.add(y))}),I(c),d||r(a),f?.(Array.from(a)),N?.(R,n)},[v,j,t,f,x,d,N]),q=h.useCallback(R=>{const n=v.has(R);b?.(R,!n)!==!1&&P(R,!n)},[v,P,b]);return h.useEffect(()=>{if(!x||!t||!o.length)return;const R=new Set,n=new Set(v),a=C=>{if(!(C.children&&C.children.length>0))return{isChecked:n.has(C.id),isIndeterminate:!1};const L=C.children.map(l=>a(l)),s=L.every(l=>!l.isChecked&&!l.isIndeterminate);return L.every(l=>l.isChecked&&!l.isIndeterminate)?(n.add(C.id),{isChecked:!0,isIndeterminate:!1}):s?(n.delete(C.id),{isChecked:!1,isIndeterminate:!1}):(n.delete(C.id),R.add(C.id),{isChecked:!1,isIndeterminate:!0})};o.forEach(C=>a(C));const c=Array.from(j).sort().join(","),u=Array.from(R).sort().join(",");c!==u&&I(R);const D=Array.from(v).sort().join(","),y=Array.from(n).sort().join(",");D!==y&&(d||r(n),f?.(Array.from(n)))},[v,t,x,o,d,f,r]),{selectedNodes:k,setInternalSelectedNodes:E,toggleSelect:K,checkedNodes:v,setInternalCheckedNodes:r,indeterminateNodes:j,setIndeterminateNodes:I,toggleCheck:q,updateCheckState:P}},be=(e,t,o="")=>{const i=o.toLowerCase(),d=h.useMemo(()=>{if(!i)return null;const g=new Map,f=p=>{if(g.has(p.id))return g.get(p.id);let M=p.label.toLowerCase().includes(i),b=!1;if(p.children)for(const x of p.children)f(x).matches&&(b=!0);const N={matches:M||b,hasChildMatch:b};return g.set(p.id,N),N};return e.forEach(p=>f(p)),g},[e,i]);return{flattenedNodes:h.useMemo(()=>{const g=[],f=(p,M=0)=>{p.forEach(b=>{const N=d?d.get(b.id):void 0;if((d?N?.matches:!0)===!1)return;g.push({node:b,level:M});const T=d&&N?.hasChildMatch;(t.has(b.id)||T)&&b.children&&f(b.children,M+1)})};return f(e),g},[e,t,d])}},Ce=(e,t,o,i,d,S,g,f,p,M,b,N,x,T,E={})=>{const k=O.useEzServiceRegistry(),{expandedNodes:m,checkedNodes:r,selectedNodes:v,onNodeExpand:j,onCheckedChange:I,onSelectionChange:K,onNodeEditing:P}=e,q=h.useMemo(()=>({...E,...{expandAll:()=>{const n=Array.from(N.nodeMap.keys());m?j?.(n[0],!0):d(new Set(n))},collapseAll:()=>{m?j?.("",!1):d(new Set)},checkAll:()=>{const n=Array.from(N.nodeMap.keys());r?I?.(n):(g(new Set(n)),p(new Set))},uncheckAll:()=>{r?I?.([]):(g(new Set),p(new Set))},selectNode:n=>{v?K?.([n]):f(new Set([n]))},expandNode:(n,a=!0)=>{m?j?.(n,a):d(c=>{const u=new Set(c);return a?u.add(n):u.delete(n),u})},checkNode:(n,a=!0)=>M(n,a),getFlattenedNodes:()=>b,addNodes:(n,a,c)=>{if(!a)o(u=>{const D=[...u];return c!==void 0?D.splice(c,0,...n):D.push(...n),D});else{const u=D=>D.map(y=>{if(y.id===a){const C=[...y.children||[]];return c!==void 0?C.splice(c,0,...n):C.push(...n),{...y,children:C}}return y.children?{...y,children:u(y.children)}:y});o(D=>u(D))}k.get("NotificationService")?.show({type:"success",message:`${n.length} Node(s) Added`,duration:2e3})},removeNodes:n=>{const a=new Set(n),c=u=>u.filter(D=>!a.has(D.id)).map(D=>({...D,children:D.children?c(D.children):void 0}));o(u=>c(u)),k.get("NotificationService")?.show({type:"success",message:`${n.length} Node(s) Removed`,duration:2e3})},updateNode:(n,a)=>{o(c=>W(c,n,a)),k.get("NotificationService")?.show({type:"success",message:"Node Updated Successfully",duration:2e3})},moveNodes:(n,a,c)=>{const u=[],D=new Set(n),y=L=>L.filter(s=>D.has(s.id)?(u.push(s),!1):!0).map(s=>({...s,children:s.children?y(s.children):void 0})),C=y(t),V=L=>L.map(s=>{if(s.id===a){const z=[...s.children||[]];return c!==void 0?z.splice(c,0,...u):z.push(...u),{...s,children:z}}return s.children?{...s,children:V(s.children)}:s});o(V(C)),k.get("NotificationService")?.show({type:"success",message:"Nodes Moved Successfully",duration:2e3})},getNode:n=>J(t,n),getTreeData:()=>t,ensureVisible:n=>{const a=N.getAncestors(n);m?(a.forEach(c=>j?.(c,!0)),j?.(n,!0)):d(c=>{const u=new Set(c);return a.forEach(D=>u.add(D)),u.add(n),u})},beginEdit:n=>{J(t,n)&&P?.(n)!==!1&&x(n)},disableNodes:(n,a=!0)=>{n.forEach(c=>{o(u=>W(u,c,{disabled:a}))})},enableNodes:n=>{n.forEach(a=>{o(c=>W(c,a,{disabled:!1}))})},getAllCheckedNodes:()=>Array.from(S),getDisabledNodes:()=>{const n=[],a=c=>{c.forEach(u=>{u.disabled&&n.push(u.id),u.children&&a(u.children)})};return a(t),n}}}),[N,t,i,S,m,r,v,j,I,K,P,o,d,g,f,p,M,b,x,E]);U.useComponentImperativeAPI(T,q)},ve=e=>{const t=O.useEzServiceRegistry(),i=me.useServiceState("I18nService")?.dir||"ltr",d=O.useBaseComponent(e),{serviceRegistry:S,api:g}=d,{dir:f,apiRef:p,searchTerm:M}=e,b=f==="auto"||!f?i:f,{treeData:N,setInternalTreeData:x,loadingNodes:T,setLoadingNodes:E,updateNode:k}=xe(e),m=h.useMemo(()=>e.service?e.service:e.serviceName?t.get(e.serviceName):null,[e.service,e.serviceName]);h.useEffect(()=>{m&&m.loadNodes().then(z=>{x(z)})},[m,x]);const r=fe.useService("HierarchyService",()=>new Ne,S||t),v=h.useCallback((z,l=0,B)=>{z.forEach(F=>{const _={id:F.id,level:l,parentId:B,children:F.children?.map($=>$.id)};r.registerNode(_),F.children&&v(F.children,l+1,F.id)})},[r]);h.useEffect(()=>{r&&(r.cleanup(),v(N))},[N,r,v]);const{selectedNodes:j,setInternalSelectedNodes:I,toggleSelect:K,checkedNodes:P,setInternalCheckedNodes:q,indeterminateNodes:R,setIndeterminateNodes:n,toggleCheck:a,updateCheckState:c}=Se(e,r,N),{expandedNodes:u,setInternalExpandedNodes:D,toggleExpand:y}=we(e,N,k,E,m),{flattenedNodes:C}=be(N,u,M),[V,L]=h.useState(null),s=h.useCallback((z,l)=>{k(z,{label:l}),e.onNodeRename?.(z,l)},[k,e.onNodeRename]);return Ce(e,N,x,u,D,P,q,I,n,c,C,r,L,p,g),{state:{treeData:N,expandedNodes:u,selectedNodes:j,checkedNodes:P,indeterminateNodes:R,loadingNodes:T,flattenedNodes:C,editingNodeId:V},actions:{toggleExpand:y,toggleSelect:K,toggleCheck:a,handleNodeRename:s,setEditingNodeId:L},config:{allowTextWrap:e.allowTextWrap,animation:e.animation,checkOnClick:e.checkOnClick,fullRowSelect:e.fullRowSelect,fullRowNavigable:e.fullRowNavigable,onKeyPress:e.onKeyPress,onNodeClicked:e.onNodeClicked,onDrawNode:e.onDrawNode},dir:b,baseApi:g}},ke=()=>w.jsx("div",{className:"flex flex-col items-center justify-center min-h-screen p-4",children:w.jsxs("div",{className:"flex flex-col items-center gap-4 max-w-md w-full",children:[w.jsx("div",{className:"flex items-center justify-center w-16 h-16 rounded-full bg-destructive/10",children:w.jsx(U.TriangleAlert,{className:"w-8 h-8 text-destructive"})}),w.jsxs("div",{className:"flex flex-col items-center gap-2 text-center",children:[w.jsx("h2",{className:"text-lg font-semibold",children:"Tree View Error"}),w.jsx("p",{className:"text-sm text-muted-foreground",children:"Something went wrong with the tree view. Please refresh the page or try again."})]}),w.jsxs("button",{onClick:()=>window.location.reload(),className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-primary hover:bg-primary/10 rounded-md transition-colors",children:[w.jsx(U.RefreshCw,{className:"w-4 h-4"}),"Refresh Page"]})]})}),ne=h.memo(({node:e,level:t,isExpanded:o,isSelected:i,isChecked:d,isIndeterminate:S,isLoading:g,hasChildren:f,onToggleExpand:p,onToggleSelect:M,onToggleCheck:b,onRename:N,showCheckboxes:x,allowEditing:T,searchTerm:E,style:k,onKeyDown:m,tabIndex:r,autoFocus:v,slots:j,slotProps:I,allowTextWrap:K,animation:P,checkOnClick:q,fullRowSelect:R,fullRowNavigable:n,onNodeClicked:a,onDrawNode:c,isEditing:u,onEditingChange:D,dir:y})=>{const[C,V]=h.useState(!1),[L,s]=h.useState(e.label);h.useEffect(()=>{u!==void 0&&u!==C&&(V(u),u&&s(e.label))},[u,C,e.label]),h.useEffect(()=>{c?.(e)},[e,c]);const{setNodeRef:z,transform:l,isDragging:B,attributes:F,listeners:_,transition:$}=G.useSortable({id:e.id,data:{node:e,type:"tree-item",level:t}}),Y=h.useRef(null),re=A=>{z(A),Y.current=A};h.useEffect(()=>{v&&Y.current&&!C&&Y.current.focus({preventScroll:!0})},[v,C]);const oe=()=>{T&&(V(!0),s(e.label),D?.(!0))},ie=A=>{A.key==="Enter"?(N(e.id,L),V(!1),D?.(!1)):A.key==="Escape"&&(s(e.label),V(!1),D?.(!1))},ce=t*20+(f?0:20),ae={...k,transform:H.CSS.Translate.toString(l)?`${k.transform||""} ${H.CSS.Translate.toString(l)}`:k.transform,transition:$||k.transition,opacity:B?.3:1,zIndex:B?999:"auto"},X=j?.node,Z=j?.expandIcon,ee=j?.checkbox,le=()=>{if(g)return w.jsx(U.LoaderCircle,{className:"w-3.5 h-3.5 animate-spin"});if(!f)return null;if(Z){const A=Z;return w.jsx(A,{isExpanded:o,isLoading:g,...I?.expandIcon})}return o?w.jsx(ge.ChevronDown,{className:"w-4 h-4"}):w.jsx(U.ChevronRight,{className:"w-4 h-4"})},de=()=>{if(!x)return null;if(ee){const A=ee;return w.jsx(A,{checked:d,indeterminate:S,onChange:()=>b(e.id),...I?.checkbox})}return w.jsxs("div",{"data-testid":`tree-checkbox-${e.id}`,onClick:A=>{A.stopPropagation(),b(e.id)},className:O.cn("w-4 h-4 me-2 flex items-center justify-center rounded border-2 transition-all cursor-pointer",d?"bg-primary border-primary text-primary-foreground":S?"bg-background border-primary shadow-[0_0_0_1px_inset_rgba(var(--primary),0.1)]":"bg-background border-slate-500 dark:border-slate-400 hover:border-primary/50"),children:[d&&w.jsx(U.Check,{className:"w-3.5 h-3.5 stroke-[3]"}),S&&w.jsx("div",{className:"w-2.5 h-0.5 bg-primary rounded-full"})]})},ue=A=>{A==="edit"&&T&&(V(!0),s(e.label))};return w.jsx(H.EzContextMenu,{contextId:"tree-node",data:e,onAction:ue,children:w.jsx("div",{ref:re,...F,..._,role:"treeitem","data-testid":`tree-item-${e.id}`,"aria-expanded":f?o:void 0,"aria-selected":i,tabIndex:r,onKeyDown:A=>{T&&A.key==="F2"&&(A.stopPropagation(),V(!0),s(e.label)),_?.onKeyDown&&_.onKeyDown(A),m(A,e.id)},onClick:()=>{M(e.id),a?.(e.id),q&&x&&b(e.id)},className:O.cn("flex items-center py-1.5 px-2 cursor-pointer hover:bg-muted/50 rounded-md w-full group outline-none focus:ring-1 focus:ring-primary/30 select-none",i?"bg-primary/10 text-primary":"text-foreground",B?"bg-primary/5":"",P?"transition-all duration-200":""),style:{...ae,paddingInlineStart:`${ce}px`},children:X?w.jsx(X,{node:e,level:t,isExpanded:o,isSelected:i,isChecked:d,isIndeterminate:S,onToggleExpand:()=>p(e.id),onToggleSelect:()=>M(e.id),onToggleCheck:()=>b(e.id),...I?.node||{}}):w.jsxs(w.Fragment,{children:[f||g?w.jsx("button",{"data-testid":"expand-button",onClick:A=>{A.stopPropagation(),p(e.id)},onPointerDown:A=>A.stopPropagation(),className:"w-5 h-5 flex items-center justify-center me-1 text-muted-foreground hover:text-foreground hover:bg-muted rounded focus:outline-none transition-colors",tabIndex:-1,children:le()}):null,de(),e.icon&&w.jsx("span",{className:"me-2 flex-shrink-0 text-muted-foreground group-hover:text-foreground transition-colors",children:e.icon}),C?w.jsx("input",{"data-testid":"tree-item-edit-input",autoFocus:!0,value:L,onChange:A=>s(A.target.value),onKeyDown:ie,onBlur:()=>V(!1),onClick:A=>A.stopPropagation(),className:"flex-1 bg-background border border-primary rounded px-1 text-sm outline-none"}):w.jsx("span",{className:`text-base font-semibold flex-1 ${K?"whitespace-normal":"truncate"}`,onDoubleClick:A=>{A.stopPropagation(),oe()},children:w.jsx(Q.HighlightText,{text:e.label,highlight:E})})]})})})});ne.displayName="EzTreeViewItem";const se=h.memo(({items:e,expandedNodes:t,selectedNodes:o,checkedNodes:i,indeterminateNodes:d,loadingNodes:S,onToggleExpand:g,onToggleSelect:f,onToggleCheck:p,onNodeRename:M,className:b,dir:N,showCheckboxes:x,allowEditing:T,searchTerm:E,slots:k,slotProps:m,allowTextWrap:r,animation:v,checkOnClick:j,fullRowSelect:I,fullRowNavigable:K,onKeyPress:P,onNodeClicked:q,onDrawNode:R,editingNodeId:n,setEditingNodeId:a})=>{const{rowVirtualizer:c,parentRef:u,getVirtualItems:D}=H.useVirtualization({rowCount:e.length,rowHeight:32,overscanCount:10,progressiveRendering:!0}),[y,C]=h.useState(0),V=h.useMemo(()=>{const s=new Map;return e.forEach((z,l)=>s.set(z.node.id,l)),s},[e]),L=h.useCallback((s,z,l)=>{const B=N==="rtl",F=B?"ArrowLeft":"ArrowRight",_=B?"ArrowRight":"ArrowLeft";if(s.key==="ArrowDown"){s.preventDefault();const $=Math.min(e.length-1,z+1);C($),c.scrollToIndex($)}else if(s.key==="ArrowUp"){s.preventDefault();const $=Math.max(0,z-1);C($),c.scrollToIndex($)}else if(s.key===F)s.preventDefault(),(l.children?.length||!l.isLoaded&&!l.isLeaf)&&!t.has(l.id)?g(l.id):l.children?.length&&t.has(l.id)&&z+1<e.length&&e[z+1].level>(l.level??0)&&(C(z+1),c.scrollToIndex(z+1));else if(s.key===_){if(s.preventDefault(),t.has(l.id))g(l.id);else if(l.parentId){const $=V.get(l.parentId);$!==void 0&&(C($),c.scrollToIndex($))}}else(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),x?p(l.id):f(l.id))},[e,t,g,f,p,x,V,c]);return w.jsx("div",{ref:u,className:O.cn("absolute inset-0 overflow-y-auto bg-background border rounded-lg shadow-sm focus:outline-none focus:ring-1 focus:ring-primary/20",b),dir:N,role:"tree",onKeyDown:s=>P?.(s),children:w.jsx("div",{style:{height:`${c.getTotalSize()}px`,width:"100%",position:"relative"},children:w.jsx(G.SortableContext,{items:e.map(s=>s.node.id),strategy:G.verticalListSortingStrategy,children:D().map(s=>{const z=e[s.index],{node:l,level:B}=z,F=y===s.index;return w.jsx(ne,{node:l,level:B,isExpanded:t.has(l.id),isSelected:o.has(l.id),isChecked:i.has(l.id),isIndeterminate:d.has(l.id),isLoading:S.has(l.id),hasChildren:!!l.children?.length||!l.isLoaded&&!l.isLeaf,onToggleExpand:g,onToggleSelect:f,onToggleCheck:p,onRename:M,showCheckboxes:x,allowEditing:T,searchTerm:E,onKeyDown:_=>L(_,s.index,l),style:{position:"absolute",top:`${s.start}px`,left:0,width:"100%",height:`${s.size}px`},tabIndex:F?0:-1,autoFocus:F,slots:k,slotProps:m,allowTextWrap:r,animation:v,checkOnClick:j,fullRowSelect:I,fullRowNavigable:K,onNodeClicked:q,onDrawNode:R,isEditing:n===l.id,onEditingChange:_=>a(_?l.id:null),dir:N},l.id)})})})})});se.displayName="EzVirtualTree";const ye=({onDragEnd:e,onDragStart:t})=>{const[o,i]=h.useState(null),[d,S]=h.useState(null),[g,f]=h.useState("inside"),p=H.useSensors(H.useSensor(H.PointerSensor,{activationConstraint:{distance:8}})),M=h.useCallback(x=>{const{active:T}=x,E=T.data.current?.node;E&&(i(E),t?.(E))},[t]),b=h.useCallback(x=>{x.preventDefault();const{active:T,over:E}=x;if(!E)return;const k=T.data.current?.node,m=E.data.current?.node;if(k&&m&&k.id!==m.id){const r=E.rect,v=r.top+r.height/2;v<r.top+10?f("before"):v>r.bottom-10?f("after"):f("inside"),S(m)}},[]),N=h.useCallback(x=>{const{active:T,over:E}=x;T&&E&&o&&d&&e(o,d,g),i(null),S(null),f("inside")},[o,d,g,e]);return{sensors:p,activeNode:o,dragOverNode:d,dragPosition:g,handleDragStart:M,handleDragOver:b,handleDragEnd:N}},Ee=e=>{O.useInitCoreServices();const t=ve(e),{state:{expandedNodes:o,selectedNodes:i,checkedNodes:d,indeterminateNodes:S,loadingNodes:g,flattenedNodes:f,editingNodeId:p},actions:{toggleExpand:M,toggleSelect:b,toggleCheck:N,handleNodeRename:x,setEditingNodeId:T},config:{allowTextWrap:E,animation:k,checkOnClick:m,fullRowSelect:r,fullRowNavigable:v,onKeyPress:j,onNodeClicked:I,onDrawNode:K},dir:P}=t,{handleDragEnd:q,sensors:R}=ye({onDragEnd:(n,a,c)=>{e.onNodeDrop&&e.onNodeDrop(n,a,c)}});return w.jsx(U.EzErrorBoundary,{fallback:w.jsx(ke,{}),children:w.jsx("div",{className:O.cn("relative flex-1 w-full h-full min-h-0",e.className),children:w.jsx(H.DndContext,{sensors:R,collisionDetection:H.closestCenter,onDragEnd:q,children:w.jsx(se,{items:f,expandedNodes:o,selectedNodes:i,checkedNodes:d,indeterminateNodes:S,loadingNodes:g,onToggleExpand:M,onToggleSelect:b,onToggleCheck:N,onNodeRename:x,dir:P,showCheckboxes:e.showCheckboxes,allowEditing:e.allowEditing,searchTerm:e.searchTerm,slots:e.slots,slotProps:e.slotProps,allowTextWrap:E,animation:k,checkOnClick:m,fullRowSelect:r,fullRowNavigable:v,onKeyPress:j,onNodeClicked:I,onDrawNode:K,editingNodeId:p,setEditingNodeId:T})})})})};exports.EzTreeView=Ee;
|