UNPKG

@cgi-learning-hub/ui

Version:

@cgi-learning-hub/ui is an open-source React component library that implements UI for HUB's features

6 lines (5 loc) 33.8 kB
"use strict";const k=require("react/jsx-runtime"),_=require("react"),l=require("../../CustomTreeItem-Bg8Ub4dn.cjs"),z=require("./style.cjs.js"),F=require("./utils.cjs.js"),x=require("../../ButtonBase-Dp6sf_dP.cjs"),$=require("../../TransitionGroupContext-Zt4NoR0u.cjs"),b=require("../../index-DLnSn8GT.cjs"),J=require("../../identifier-BoZelETM.cjs"),S=require("../../useEventCallback-BxpcFap0.cjs"),N=require("../../warning-DMUNDgRg.cjs"),le=require("../../index-CrINMjCH.cjs"),Y=require("../../useSlotProps-CrQGQLdL.cjs"),ie=require("../../useForkRef-CFhhTu-Q.cjs"),Q=require("../../DefaultPropsProvider-Cnf49AIv.cjs"),ce=require("../../Typography-CSTmKyr8.cjs"),ue=require("../../Alert-DPSZppEy.cjs");function ae(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const r=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(e,o,r.get?r:{enumerable:!0,get:()=>t[o]})}}return e.default=t,Object.freeze(e)}const P=ae(_);function de(t){return J.generateUtilityClass("MuiRichTreeView",t)}J.generateUtilityClasses("MuiRichTreeView",["root","item","itemContent","itemGroupTransition","itemIconContainer","itemLabel","itemCheckbox","itemLabelInput"]);class pe{constructor(){this.maxListeners=20,this.warnOnce=!1,this.events={}}on(e,o,r={}){let i=this.events[e];if(i||(i={highPriority:new Map,regular:new Map},this.events[e]=i),r.isFirst?i.highPriority.set(o,!0):i.regular.set(o,!0),process.env.NODE_ENV!=="production"){const m=i.highPriority.size+i.regular.size;m>this.maxListeners&&!this.warnOnce&&(this.warnOnce=!0,console.warn([`Possible EventEmitter memory leak detected. ${m} ${e} listeners added.`].join(` `)))}}removeListener(e,o){this.events[e]&&(this.events[e].regular.delete(o),this.events[e].highPriority.delete(o))}removeAllListeners(){this.events={}}emit(e,...o){const r=this.events[e];if(!r)return;const i=Array.from(r.highPriority.keys()),m=Array.from(r.regular.keys());for(let p=i.length-1;p>=0;p-=1){const u=i[p];r.highPriority.has(u)&&u.apply(this,o)}for(let p=0;p<m.length;p+=1){const u=m[p];r.regular.has(u)&&u.apply(this,o)}}once(e,o){const r=this;this.on(e,function i(...m){r.removeListener(e,i),o.apply(r,m)})}}const fe=t=>t.isPropagationStopped!==void 0,Z=()=>{const[t]=P.useState(()=>new pe),e=P.useCallback((...r)=>{const[i,m,p={}]=r;p.defaultMuiPrevented=!1,!(fe(p)&&p.isPropagationStopped())&&t.emit(i,m,p)},[t]),o=P.useCallback((r,i)=>(t.on(r,i),()=>{t.removeListener(r,i)}),[t]);return{instance:{$$publishEvent:e,$$subscribeEvent:o}}};Z.params={};const H=({plugins:t})=>{const e=new Set(t);return{instance:{getAvailablePlugins:()=>e}}};H.params={};const U=({params:t,store:e})=>{P.useEffect(()=>{e.update(r=>t.id===r.id.providedTreeId&&r.id.treeId!==void 0?r:x._extends({},r,{id:x._extends({},r.id,{treeId:t.id??l.createTreeViewDefaultId()})}))},[e,t.id]);const o=l.useSelector(e,l.selectorTreeViewId);return{getRootProps:()=>({id:o})}};U.params={id:!0};U.getInitialState=({id:t})=>({id:{treeId:void 0,providedTreeId:t}});const Ie=[Z,H,U],me=["apiRef"],he=t=>{let{props:{apiRef:e},plugins:o}=t,r=$._objectWithoutPropertiesLoose(t.props,me);const i=P.useMemo(()=>{const u={};return o.forEach(a=>{Object.assign(u,a.params)}),u},[o]),{forwardedProps:m,pluginParams:p}=P.useMemo(()=>{const u={},a={};Object.keys(r).forEach(c=>{const n=r[c];i[c]?u[c]=n:a[c]=n});const g=o.reduce((c,n)=>n.applyDefaultValuesToParams?n.applyDefaultValuesToParams({params:c}):c,u);return{forwardedProps:a,pluginParams:g}},[o,r,i]);return{forwardedProps:m,pluginParams:p,apiRef:e}},ge=t=>{const{plugins:e,instance:o,publicAPI:r,store:i,rootRef:m}=t,p=P.useCallback(g=>{let c=null,n=null;const s=[],h={};e.forEach(I=>{if(!I.itemPlugin)return;const d=I.itemPlugin({props:g,rootRef:c,contentRef:n});d!=null&&d.rootRef&&(c=d.rootRef),d!=null&&d.contentRef&&(n=d.contentRef),d!=null&&d.propsEnhancers&&(s.push(d.propsEnhancers),Object.keys(d.propsEnhancers).forEach(f=>{h[f]=!0}))});const T=I=>d=>{const f={};return s.forEach(y=>{const C=y[I];C!=null&&Object.assign(f,C(d))}),f},E=Object.fromEntries(Object.keys(h).map(I=>[I,T(I)]));return{contentRef:n,rootRef:c,propsEnhancers:E}},[e]),u=P.useCallback(({itemId:g,children:c,idAttribute:n})=>{let s=c;for(let h=e.length-1;h>=0;h-=1){const T=e[h];T.wrapItem&&(s=T.wrapItem({instance:o,itemId:g,children:s,idAttribute:n}))}return s},[e,o]),a=P.useCallback(({children:g})=>{let c=g;for(let n=e.length-1;n>=0;n-=1){const s=e[n];s.wrapRoot&&(c=s.wrapRoot({children:c}))}return c},[e]);return P.useMemo(()=>({runItemPlugins:p,wrapItem:u,wrapRoot:a,instance:o,publicAPI:r,store:i,rootRef:m}),[p,u,a,o,r,i,m])};class be{constructor(e){this.value=void 0,this.listeners=void 0,this.subscribe=o=>(this.listeners.add(o),()=>{this.listeners.delete(o)}),this.getSnapshot=()=>this.value,this.update=o=>{const r=o(this.value);r!==this.value&&(this.value=r,this.listeners.forEach(i=>i(r)))},this.value=e,this.listeners=new Set}}function Ee(t){return t.current==null&&(t.current={}),t}function Te(t){const e=P.useRef({});return t?Ee(t):e}let G=0;const xe=({plugins:t,rootRef:e,props:o})=>{const r=P.useMemo(()=>[...Ie,...t],[t]),{pluginParams:i,forwardedProps:m,apiRef:p}=he({plugins:r,props:o}),a=P.useRef({}).current,g=Te(p),c=P.useRef(null),n=ie.useForkRef(c,e),s=P.useRef(null);if(s.current==null){G+=1;const d={cacheKey:{id:G}};r.forEach(f=>{f.getInitialState&&Object.assign(d,f.getInitialState(i))}),s.current=new be(d)}const h=ge({plugins:r,instance:a,publicAPI:g.current,store:s.current,rootRef:c}),T=[],E=d=>{const f=d({instance:a,params:i,rootRef:c,plugins:r,store:s.current});f.getRootProps&&T.push(f.getRootProps),f.publicAPI&&Object.assign(g.current,f.publicAPI),f.instance&&Object.assign(a,f.instance)};return r.forEach(E),{getRootProps:(d={})=>{const f=x._extends({role:"tree"},m,d,{ref:n});return T.forEach(y=>{Object.assign(f,y(d))}),f},rootRef:n,contextValue:h}},j={};function Pe(t){const{contextValue:e,classes:o=j,slots:r=j,slotProps:i=j,children:m}=t,p=P.useMemo(()=>({classes:o,slots:{collapseIcon:r.collapseIcon,expandIcon:r.expandIcon,endIcon:r.endIcon},slotProps:{collapseIcon:i.collapseIcon,expandIcon:i.expandIcon,endIcon:i.endIcon}}),[o,r.collapseIcon,r.expandIcon,r.endIcon,i.collapseIcon,i.expandIcon,i.endIcon]);return k.jsx(l.TreeViewContext.Provider,{value:e,children:k.jsx(l.TreeViewStyleContext.Provider,{value:p,children:e.wrapRoot({children:m})})})}const V=(t,e,o)=>{t.$$publishEvent(e,o)},ye=(t,e,o)=>{if(t==null)throw new Error(["MUI X: The Tree View component requires all items to have a unique `id` property.","Alternatively, you can use the `getItemId` prop to specify a custom id for each item.","An item was provided without id in the `items` prop:",JSON.stringify(e)].join(` `));if(o[t]!=null)throw new Error(["MUI X: The Tree View component requires all items to have a unique `id` property.","Alternatively, you can use the `getItemId` prop to specify a custom id for each item.",`Two items were provided with the same id in the \`items\` prop: "${t}"`].join(` `))},q=({disabledItemsFocusable:t,items:e,isItemDisabled:o,getItemLabel:r,getItemChildren:i,getItemId:m,initialDepth:p=0,initialParentId:u=null,getChildrenCount:a,ignoreChildren:g=!1})=>{const c={},n={},s={[l.TREE_VIEW_ROOT_PARENT_ID]:[]},h=(E,I,d)=>{const f=m?m(E):E.id;ye(f,E,c);const y=r?r(E):E.label;if(y==null)throw new Error(["MUI X: The Tree View component requires all items to have a `label` property.","Alternatively, you can use the `getItemLabel` prop to specify a custom label for each item.","An item was provided without label in the `items` prop:",JSON.stringify(E)].join(` `));const C=i?i(E):E.children;c[f]={id:f,label:y,parentId:d,idAttribute:void 0,expandable:a?a(E)>0:!!(C!=null&&C.length),disabled:o?o(E):!1,depth:I},n[f]=E;const w=d??l.TREE_VIEW_ROOT_PARENT_ID;s[w]||(s[w]=[]),s[w].push(f),g||C==null||C.forEach(R=>h(R,I+1,f))};e==null||e.forEach(E=>h(E,p,u));const T={};return Object.keys(s).forEach(E=>{T[E]=l.buildSiblingIndexes(s[E])}),{disabledItemsFocusable:t,itemMetaLookup:c,itemModelLookup:n,itemOrderedChildrenIdsLookup:s,itemChildrenIndexesLookup:T}},M=({instance:t,params:e,store:o})=>{const r=P.useCallback(d=>l.selectorItemModel(o.value,d),[o]),i=P.useCallback(d=>{const f=l.selectorItemMeta(o.value,d);return(f==null?void 0:f.parentId)||null},[o]),m=S.useEventCallback(d=>{o.update(f=>x._extends({},f,{items:x._extends({},f.items,{loading:d})}))}),p=S.useEventCallback(d=>{o.update(f=>x._extends({},f,{items:x._extends({},f.items,{error:d})}))}),u=S.useEventCallback(({itemId:d,shouldBeDisabled:f})=>{o.update(y=>{if(!y.items.itemMetaLookup[d])return y;const C=x._extends({},y.items.itemMetaLookup);return C[d]=x._extends({},C[d],{disabled:f??!C[d].disabled}),x._extends({},y,{items:x._extends({},y.items,{itemMetaLookup:C})})})}),a=P.useCallback(()=>{const d=f=>{const y=l.selectorItemModel(o.value,f),C=l.selectorItemOrderedChildrenIds(o.value,f);return C.length>0?y.children=C.map(d):delete y.children,y};return l.selectorItemOrderedChildrenIds(o.value,null).map(d)},[o]),g=P.useCallback(d=>l.selectorItemOrderedChildrenIds(o.value,d),[o]),c=d=>{const f=l.selectorItemMeta(o.value,d);if(f==null)return null;const y=l.generateTreeItemIdAttribute({treeId:l.selectorTreeViewId(o.value),itemId:d,id:f.idAttribute});return document.getElementById(y)},n=P.useRef(!1),s=P.useCallback(()=>{n.current=!0},[]),h=P.useCallback(()=>n.current,[]),T=({items:d,parentId:f,depth:y,getChildrenCount:C})=>{if(d){const w=q({disabledItemsFocusable:e.disabledItemsFocusable,items:d,isItemDisabled:e.isItemDisabled,getItemId:e.getItemId,getItemLabel:e.getItemLabel,getItemChildren:e.getItemChildren,getChildrenCount:C,initialDepth:y,initialParentId:f,ignoreChildren:!0});o.update(R=>{let L;return f?L={itemModelLookup:x._extends({},R.items.itemModelLookup,w.itemModelLookup),itemMetaLookup:x._extends({},R.items.itemMetaLookup,w.itemMetaLookup),itemOrderedChildrenIdsLookup:x._extends({},w.itemOrderedChildrenIdsLookup,R.items.itemOrderedChildrenIdsLookup),itemChildrenIndexesLookup:x._extends({},w.itemChildrenIndexesLookup,R.items.itemChildrenIndexesLookup)}:L={itemModelLookup:w.itemModelLookup,itemMetaLookup:w.itemMetaLookup,itemOrderedChildrenIdsLookup:w.itemOrderedChildrenIdsLookup,itemChildrenIndexesLookup:w.itemChildrenIndexesLookup},Object.values(R.items.itemMetaLookup).forEach(v=>{w.itemMetaLookup[v.id]||V(t,"removeItem",{id:v.id})}),x._extends({},R,{items:x._extends({},R.items,L)})})}},E=d=>{o.update(f=>{if(!d)return x._extends({},f,{items:x._extends({},f.items,{itemMetaLookup:{},itemOrderedChildrenIdsLookup:{},itemChildrenIndexesLookup:{}})});const y=Object.keys(f.items.itemMetaLookup).reduce((R,L)=>{const v=f.items.itemMetaLookup[L];return v.parentId===d?(V(t,"removeItem",{id:v.id}),R):x._extends({},R,{[v.id]:v})},{}),C=f.items.itemOrderedChildrenIdsLookup,w=f.items.itemChildrenIndexesLookup;return delete w[d],delete C[d],x._extends({},f,{items:x._extends({},f.items,{itemMetaLookup:y,itemOrderedChildrenIdsLookup:C,itemChildrenIndexesLookup:w})})})};P.useEffect(()=>{t.areItemUpdatesPrevented()||o.update(d=>{const f=q({disabledItemsFocusable:e.disabledItemsFocusable,items:e.items,isItemDisabled:e.isItemDisabled,getItemId:e.getItemId,getItemLabel:e.getItemLabel,getItemChildren:e.getItemChildren});return Object.values(d.items.itemMetaLookup).forEach(y=>{f.itemMetaLookup[y.id]||V(t,"removeItem",{id:y.id})}),x._extends({},d,{items:x._extends({},d.items,f)})})},[t,o,e.items,e.disabledItemsFocusable,e.isItemDisabled,e.getItemId,e.getItemLabel,e.getItemChildren]);const I=S.useEventCallback((d,f)=>{e.onItemClick&&e.onItemClick(d,f)});return{getRootProps:()=>({style:{"--TreeView-itemChildrenIndentation":typeof e.itemChildrenIndentation=="number"?`${e.itemChildrenIndentation}px`:e.itemChildrenIndentation}}),publicAPI:{getItem:r,getItemDOMElement:c,getItemTree:a,getItemOrderedChildrenIds:g,setIsItemDisabled:u,getParentId:i},instance:{getItemDOMElement:c,preventItemUpdates:s,areItemUpdatesPrevented:h,addItems:T,setTreeViewLoading:m,setTreeViewError:p,removeChildren:E,handleItemClick:I}}};M.getInitialState=t=>({items:x._extends({},q({disabledItemsFocusable:t.disabledItemsFocusable,items:t.items,isItemDisabled:t.isItemDisabled,getItemId:t.getItemId,getItemLabel:t.getItemLabel,getItemChildren:t.getItemChildren}),{loading:!1,error:null})});M.applyDefaultValuesToParams=({params:t})=>x._extends({},t,{disabledItemsFocusable:t.disabledItemsFocusable??!1,itemChildrenIndentation:t.itemChildrenIndentation??"12px"});M.wrapRoot=({children:t})=>k.jsx(l.TreeViewItemDepthContext.Provider,{value:l.selectorItemDepth,children:t});process.env.NODE_ENV!=="production"&&(M.wrapRoot.displayName="useTreeViewItems.wrapRoot");M.params={disabledItemsFocusable:!0,items:!0,isItemDisabled:!0,getItemLabel:!0,getItemChildren:!0,getItemId:!0,onItemClick:!0,itemChildrenIndentation:!0};function Ce(t){const{componentName:e,propName:o,controlled:r,defaultValue:i,warningPrefix:m="MUI X"}=t,[{initialDefaultValue:p,isControlled:u}]=P.useState({initialDefaultValue:i,isControlled:r!==void 0});u!==(r!==void 0)&&N.warnOnce([`${m}: A component is changing the ${u?"":"un"}controlled ${o} state of ${e} to be ${u?"un":""}controlled.`,"Elements should not switch from uncontrolled to controlled (or vice versa).",`Decide between using a controlled or uncontrolled ${o} element for the lifetime of the component.`,"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.","More info: https://fb.me/react-controlled-components"],"error"),JSON.stringify(p)!==JSON.stringify(i)&&N.warnOnce([`${m}: A component is changing the default ${o} state of an uncontrolled ${e} after being initialized. To suppress this warning opt to use a controlled ${e}.`],"error")}const ee=process.env.NODE_ENV==="production"?()=>{}:Ce,te=({isItemEditable:t,expansionTrigger:e})=>e||(t?"iconContainer":"content"),A=({instance:t,store:e,params:o})=>{ee({componentName:"Tree View",propName:"expandedItems",controlled:o.expandedItems,defaultValue:o.defaultExpandedItems}),S.useEnhancedEffect(()=>{e.update(u=>{const a=te({isItemEditable:o.isItemEditable,expansionTrigger:o.expansionTrigger});return u.expansion.expansionTrigger===a?u:x._extends({},u,{expansion:x._extends({},u.expansion,{expansionTrigger:a})})})},[e,o.isItemEditable,o.expansionTrigger]);const r=(u,a)=>{var g;o.expandedItems===void 0&&e.update(c=>x._extends({},c,{expansion:x._extends({},c.expansion,{expandedItems:a})})),(g=o.onExpandedItemsChange)==null||g.call(o,u,a)},i=S.useEventCallback(({itemId:u,event:a,shouldBeExpanded:g})=>{const c=l.selectorExpandedItems(e.value);let n;g?n=[u].concat(c):n=c.filter(s=>s!==u),o.onItemExpansionToggle&&o.onItemExpansionToggle(a,u,g),r(a,n)}),m=S.useEventCallback(({itemId:u,event:a=null,shouldBeExpanded:g})=>{const c=l.selectorIsItemExpanded(e.value,u),n=g??!c;if(c===n)return;const s={isExpansionPrevented:!1,shouldBeExpanded:n,event:a,itemId:u};V(t,"beforeItemToggleExpansion",s),!s.isExpansionPrevented&&t.applyItemExpansion({itemId:u,event:a,shouldBeExpanded:n})}),p=(u,a)=>{const g=l.selectorItemMeta(e.value,a);if(g==null)return;const n=l.selectorItemOrderedChildrenIds(e.value,g.parentId).filter(h=>l.selectorIsItemExpandable(e.value,h)&&!l.selectorIsItemExpanded(e.value,h)),s=l.selectorExpandedItems(e.value).concat(n);n.length>0&&(o.onItemExpansionToggle&&n.forEach(h=>{o.onItemExpansionToggle(u,h,!0)}),r(u,s))};return S.useEnhancedEffect(()=>{const u=o.expandedItems;u!==void 0&&e.update(a=>x._extends({},a,{expansion:x._extends({},a.expansion,{expandedItems:u})}))},[e,o.expandedItems]),{publicAPI:{setItemExpansion:m},instance:{setItemExpansion:m,applyItemExpansion:i,expandAllSiblings:p}}},we=[];A.applyDefaultValuesToParams=({params:t})=>x._extends({},t,{defaultExpandedItems:t.defaultExpandedItems??we});A.getInitialState=t=>({expansion:{expandedItems:t.expandedItems===void 0?t.defaultExpandedItems:t.expandedItems,expansionTrigger:te(t)}});A.params={expandedItems:!0,defaultExpandedItems:!0,onExpandedItemsChange:!0,onItemExpansionToggle:!0,expansionTrigger:!0};const D=t=>{const e={};return t.forEach(o=>{e[o]=!0}),e},ne=({store:t,oldModel:e,newModel:o})=>{const r=new Map;return o.forEach(i=>{r.set(i,!0)}),{added:o.filter(i=>!l.selectorIsItemSelected(t.value,i)),removed:e.filter(i=>!r.has(i))}},ke=({store:t,selectionPropagation:e,newModel:o,oldModel:r,additionalItemsToPropagate:i})=>{if(!e.descendants&&!e.parents)return o;let m=!1;const p=D(o),u=ne({store:t,newModel:o,oldModel:r});return i==null||i.forEach(a=>{p[a]?u.added.includes(a)||u.added.push(a):u.removed.includes(a)||u.removed.push(a)}),u.added.forEach(a=>{if(e.descendants){const g=c=>{c!==a&&(m=!0,p[c]=!0),l.selectorItemOrderedChildrenIds(t.value,c).forEach(g)};g(a)}if(e.parents){const g=n=>p[n]?l.selectorItemOrderedChildrenIds(t.value,n).every(g):!1,c=n=>{const s=l.selectorItemParentId(t.value,n);if(s==null)return;l.selectorItemOrderedChildrenIds(t.value,s).every(g)&&(m=!0,p[s]=!0,c(s))};c(a)}}),u.removed.forEach(a=>{if(e.parents){let g=l.selectorItemParentId(t.value,a);for(;g!=null;)p[g]&&(m=!0,delete p[g]),g=l.selectorItemParentId(t.value,g)}if(e.descendants){const g=c=>{c!==a&&(m=!0,delete p[c]),l.selectorItemOrderedChildrenIds(t.value,c).forEach(g)};g(a)}}),m?Object.keys(p):o},Se=Object.is;function oe(t,e){if(t===e)return!0;if(!(t instanceof Object)||!(e instanceof Object))return!1;let o=0,r=0;for(const i in t)if(o+=1,!Se(t[i],e[i])||!(i in e))return!1;for(const i in e)r+=1;return o===r}function Re(t,e){const o=l.selectorIsCheckboxSelectionEnabled(t),r=l.selectorIsItemSelectionEnabled(t,e);if(l.selectorIsItemSelected(t,e))return{disabled:!r,visible:o,indeterminate:!1,checked:!0};if(l.selectorItemOrderedChildrenIds(t,e).length===0)return{disabled:!r,visible:o,indeterminate:!1,checked:!1};let m=!1,p=!1;const u=a=>{a!==e&&(l.selectorIsItemSelected(t,a)?m=!0:p=!0),l.selectorItemOrderedChildrenIds(t,a).forEach(u)};return u(e),{disabled:!r,visible:o,indeterminate:m&&p,checked:l.selectorSelectionPropagationRules(t).parents?m&&!p:!1}}const ve=({props:t})=>{const{itemId:e}=t,{store:o}=l.useTreeViewContext(),r=l.useSelector(o,Re,e,oe);return{propsEnhancers:{checkbox:({externalEventHandlers:i,interactions:m})=>{const p=u=>{var a;(a=i.onChange)==null||a.call(i,u),!u.defaultMuiPrevented&&l.selectorIsItemSelectionEnabled(o.value,e)&&m.handleCheckboxSelection(u)};return x._extends({tabIndex:-1,onChange:p},r)}}}},O=({store:t,params:e})=>{ee({componentName:"Tree View",propName:"selectedItems",controlled:e.selectedItems,defaultValue:e.defaultSelectedItems});const o=P.useRef(null),r=P.useRef({}),i=(s,h,T)=>{var f;const E=l.selectorSelectionModel(t.value);let I;const d=l.selectorIsMultiSelectEnabled(t.value);if(d&&(e.selectionPropagation.descendants||e.selectionPropagation.parents)?I=ke({store:t,selectionPropagation:e.selectionPropagation,newModel:h,oldModel:E,additionalItemsToPropagate:T}):I=h,e.onItemSelectionToggle)if(d){const y=ne({store:t,newModel:I,oldModel:E});e.onItemSelectionToggle&&(y.added.forEach(C=>{e.onItemSelectionToggle(s,C,!0)}),y.removed.forEach(C=>{e.onItemSelectionToggle(s,C,!1)}))}else e.onItemSelectionToggle&&I!==E&&(E!=null&&e.onItemSelectionToggle(s,E,!1),I!=null&&e.onItemSelectionToggle(s,I,!0));e.selectedItems===void 0&&t.update(y=>x._extends({},y,{selection:x._extends({},y.selection,{selectedItems:I})})),(f=e.onSelectedItemsChange)==null||f.call(e,s,I)},m=({itemId:s,event:h=null,keepExistingSelection:T=!1,shouldBeSelected:E})=>{if(!l.selectorIsSelectionEnabled(t.value))return;let I;const d=l.selectorIsMultiSelectEnabled(t.value);if(T){const f=l.selectorSelectionModelArray(t.value),y=l.selectorIsItemSelected(t.value,s);y&&(E===!1||E==null)?I=f.filter(C=>C!==s):!y&&(E===!0||E==null)?I=[s].concat(f):I=f}else E===!1||E==null&&l.selectorIsItemSelected(t.value,s)?I=d?[]:null:I=d?[s]:s;i(h,I,[s]),o.current=s,r.current={}},p=(s,[h,T])=>{if(!l.selectorIsMultiSelectEnabled(t.value))return;let I=l.selectorSelectionModelArray(t.value).slice();Object.keys(r.current).length>0&&(I=I.filter(C=>!r.current[C]));const d=D(I),f=l.getNonDisabledItemsInRange(t.value,h,T),y=f.filter(C=>!d[C]);I=I.concat(y),i(s,I),r.current=D(f)},u=(s,h)=>{if(o.current!=null){const[T,E]=l.findOrderInTremauxTree(t.value,h,o.current);p(s,[T,E])}},a=(s,h)=>{p(s,[l.getFirstNavigableItem(t.value),h])},g=(s,h)=>{p(s,[h,l.getLastNavigableItem(t.value)])},c=s=>{if(!l.selectorIsMultiSelectEnabled(t.value))return;const T=l.getAllNavigableItems(t.value);i(s,T),r.current=D(T)},n=(s,h,T)=>{if(!l.selectorIsMultiSelectEnabled(t.value))return;let I=l.selectorSelectionModelArray(t.value).slice();Object.keys(r.current).length===0?(I.push(T),r.current={[h]:!0,[T]:!0}):(r.current[h]||(r.current={}),r.current[T]?(I=I.filter(d=>d!==h),delete r.current[h]):(I.push(T),r.current[T]=!0)),i(s,I)};return S.useEnhancedEffect(()=>{t.update(s=>x._extends({},s,{selection:{selectedItems:e.selectedItems===void 0?s.selection.selectedItems:e.selectedItems,isEnabled:!e.disableSelection,isMultiSelectEnabled:e.multiSelect,isCheckboxSelectionEnabled:e.checkboxSelection,selectionPropagation:{descendants:e.selectionPropagation.descendants,parents:e.selectionPropagation.parents}}}))},[t,e.selectedItems,e.multiSelect,e.checkboxSelection,e.disableSelection,e.selectionPropagation.descendants,e.selectionPropagation.parents]),{getRootProps:()=>({"aria-multiselectable":e.multiSelect}),publicAPI:{setItemSelection:m},instance:{setItemSelection:m,selectAllNavigableItems:c,expandSelectionRange:u,selectRangeFromStartToItem:a,selectRangeFromItemToEnd:g,selectItemFromArrowNavigation:n}}};O.itemPlugin=ve;const Me=[],Le={};O.applyDefaultValuesToParams=({params:t})=>x._extends({},t,{disableSelection:t.disableSelection??!1,multiSelect:t.multiSelect??!1,checkboxSelection:t.checkboxSelection??!1,defaultSelectedItems:t.defaultSelectedItems??(t.multiSelect?Me:null),selectionPropagation:t.selectionPropagation??Le});O.getInitialState=t=>({selection:{selectedItems:t.selectedItems===void 0?t.defaultSelectedItems:t.selectedItems,isEnabled:!t.disableSelection,isMultiSelectEnabled:t.multiSelect,isCheckboxSelectionEnabled:t.checkboxSelection,selectionPropagation:t.selectionPropagation}});O.params={disableSelection:!0,multiSelect:!0,checkboxSelection:!0,defaultSelectedItems:!0,selectedItems:!0,onSelectedItemsChange:!0,onItemSelectionToggle:!0,selectionPropagation:!0};const X=1e3;class Oe{constructor(e=X){this.timeouts=new Map,this.cleanupTimeout=X,this.cleanupTimeout=e}register(e,o,r){this.timeouts||(this.timeouts=new Map);const i=setTimeout(()=>{typeof o=="function"&&o(),this.timeouts.delete(r.cleanupToken)},this.cleanupTimeout);this.timeouts.set(r.cleanupToken,i)}unregister(e){const o=this.timeouts.get(e.cleanupToken);o&&(this.timeouts.delete(e.cleanupToken),clearTimeout(o))}reset(){this.timeouts&&(this.timeouts.forEach((e,o)=>{this.unregister({cleanupToken:o})}),this.timeouts=void 0)}}class _e{constructor(){this.registry=new FinalizationRegistry(e=>{typeof e=="function"&&e()})}register(e,o,r){this.registry.register(e,o,r)}unregister(e){this.registry.unregister(e)}reset(){}}class Ve{}function De(t){let e=0;return function(r,i,m){t.registry===null&&(t.registry=typeof FinalizationRegistry<"u"?new _e:new Oe);const[p]=P.useState(new Ve),u=P.useRef(null),a=P.useRef(void 0);a.current=m;const g=P.useRef(null);if(!u.current&&a.current){const c=(n,s)=>{var h;s.defaultMuiPrevented||(h=a.current)==null||h.call(a,n,s)};u.current=r.$$subscribeEvent(i,c),e+=1,g.current={cleanupToken:e},t.registry.register(p,()=>{var n;(n=u.current)==null||n.call(u),u.current=null,g.current=null},g.current)}else!a.current&&u.current&&(u.current(),u.current=null,g.current&&(t.registry.unregister(g.current),g.current=null));P.useEffect(()=>{if(!u.current&&a.current){const c=(n,s)=>{var h;s.defaultMuiPrevented||(h=a.current)==null||h.call(a,n,s)};u.current=r.$$subscribeEvent(i,c)}return g.current&&t.registry&&(t.registry.unregister(g.current),g.current=null),()=>{var c;(c=u.current)==null||c.call(u),u.current=null}},[r,i])}}const Ae={registry:null},Fe=De(Ae),B=({instance:t,params:e,store:o})=>{const r=S.useEventCallback(c=>{o.update(n=>l.selectorFocusedItemId(n)===c?n:x._extends({},n,{focus:x._extends({},n.focus,{focusedItemId:c})}))}),i=c=>{const n=l.selectorItemMeta(o.value,c);return n&&(n.parentId==null||l.selectorIsItemExpanded(o.value,n.parentId))},m=(c,n)=>{const s=t.getItemDOMElement(n);s&&s.focus(),r(n),e.onItemFocus&&e.onItemFocus(c,n)},p=S.useEventCallback((c,n)=>{i(n)&&m(c,n)}),u=S.useEventCallback(()=>{const c=l.selectorFocusedItemId(o.value);if(c==null)return;if(l.selectorItemMeta(o.value,c)){const s=t.getItemDOMElement(c);s&&s.blur()}r(null)});Fe(t,"removeItem",({id:c})=>{const n=l.selectorFocusedItemId(o.value),s=l.selectorDefaultFocusableItemId(o.value);n===c&&s!=null&&m(null,s)});const a=c=>n=>{var h;if((h=c.onFocus)==null||h.call(c,n),n.defaultMuiPrevented)return;const s=l.selectorDefaultFocusableItemId(o.value);n.target===n.currentTarget&&s!=null&&m(n,s)},g=c=>n=>{var s;(s=c.onBlur)==null||s.call(c,n),!n.defaultMuiPrevented&&r(null)};return{getRootProps:c=>({onFocus:a(c),onBlur:g(c)}),publicAPI:{focusItem:p},instance:{focusItem:p,removeFocusedItem:u}}};B.getInitialState=()=>({focus:{focusedItemId:null}});B.params={onItemFocus:!0};function je(t){return!!t&&t.length===1&&!!t.match(/\S/)}const se=({instance:t,store:e,params:o})=>{const r=le.useRtl(),i=P.useRef({}),m=S.useEventCallback(n=>{i.current=n(i.current)}),p=l.useSelector(e,l.selectorItemMetaLookup);P.useEffect(()=>{if(t.areItemUpdatesPrevented())return;const n={},s=h=>{n[h.id]=h.label.substring(0,1).toLowerCase()};Object.values(p).forEach(s),i.current=n},[p,o.getItemId,t]);const u=(n,s)=>{const h=s.toLowerCase(),T=f=>{const y=l.getNextNavigableItem(e.value,f);return y===null?l.getFirstNavigableItem(e.value):y};let E=null,I=T(n);const d={};for(;E==null&&!d[I];)i.current[I]===h?E=I:(d[I]=!0,I=T(I));return E},a=n=>l.selectorIsSelectionEnabled(e.value)&&!l.selectorIsItemDisabled(e.value,n),g=n=>!l.selectorIsItemDisabled(e.value,n)&&l.selectorIsItemExpandable(e.value,n);return{instance:{updateFirstCharMap:m,handleItemKeyDown:async(n,s)=>{if(n.defaultMuiPrevented||n.altKey||l.isTargetInDescendants(n.target,n.currentTarget))return;const h=n.ctrlKey||n.metaKey,T=n.key,E=l.selectorIsMultiSelectEnabled(e.value);switch(!0){case(T===" "&&a(s)):{n.preventDefault(),E&&n.shiftKey?t.expandSelectionRange(n,s):t.setItemSelection({event:n,itemId:s,keepExistingSelection:E,shouldBeSelected:void 0});break}case T==="Enter":{l.hasPlugin(t,l.useTreeViewLabel)&&l.selectorIsItemEditable(e.value,s)&&!l.selectorIsItemBeingEdited(e.value,s)?t.setEditedItem(s):g(s)?(t.setItemExpansion({event:n,itemId:s}),n.preventDefault()):a(s)&&(E?(n.preventDefault(),t.setItemSelection({event:n,itemId:s,keepExistingSelection:!0})):l.selectorIsItemSelected(e.value,s)||(t.setItemSelection({event:n,itemId:s}),n.preventDefault()));break}case T==="ArrowDown":{const I=l.getNextNavigableItem(e.value,s);I&&(n.preventDefault(),t.focusItem(n,I),E&&n.shiftKey&&a(I)&&t.selectItemFromArrowNavigation(n,s,I));break}case T==="ArrowUp":{const I=l.getPreviousNavigableItem(e.value,s);I&&(n.preventDefault(),t.focusItem(n,I),E&&n.shiftKey&&a(I)&&t.selectItemFromArrowNavigation(n,s,I));break}case(T==="ArrowRight"&&!r||T==="ArrowLeft"&&r):{if(h)return;if(l.selectorIsItemExpanded(e.value,s)){const I=l.getNextNavigableItem(e.value,s);I&&(t.focusItem(n,I),n.preventDefault())}else g(s)&&(t.setItemExpansion({event:n,itemId:s}),n.preventDefault());break}case(T==="ArrowLeft"&&!r||T==="ArrowRight"&&r):{if(h)return;if(g(s)&&l.selectorIsItemExpanded(e.value,s))t.setItemExpansion({event:n,itemId:s}),n.preventDefault();else{const I=l.selectorItemParentId(e.value,s);I&&(t.focusItem(n,I),n.preventDefault())}break}case T==="Home":{a(s)&&E&&h&&n.shiftKey?t.selectRangeFromStartToItem(n,s):t.focusItem(n,l.getFirstNavigableItem(e.value)),n.preventDefault();break}case T==="End":{a(s)&&E&&h&&n.shiftKey?t.selectRangeFromItemToEnd(n,s):t.focusItem(n,l.getLastNavigableItem(e.value)),n.preventDefault();break}case T==="*":{t.expandAllSiblings(n,s),n.preventDefault();break}case(String.fromCharCode(n.keyCode)==="A"&&h&&E&&l.selectorIsSelectionEnabled(e.value)):{t.selectAllNavigableItems(n),n.preventDefault();break}case(!h&&!n.shiftKey&&je(T)):{const I=u(s,T);I!=null&&(t.focusItem(n,I),n.preventDefault());break}}}}}};se.params={};const Ne=[M,A,O,B,se,l.useTreeViewLabel],qe=["ownerState"],K=P.createContext(null);process.env.NODE_ENV!=="production"&&(K.displayName="RichTreeViewItemsContext");const re=P.memo(function({itemSlot:e,itemSlotProps:o,itemId:r}){const i=P.useContext(K),{store:m}=l.useTreeViewContext(),p=l.useSelector(m,l.selectorItemMeta,r),u=l.useSelector(m,l.selectorItemOrderedChildrenIds,r),a=e??l.TreeItem,g=Y.useSlotProps({elementType:a,externalSlotProps:o,additionalProps:{label:p==null?void 0:p.label,id:p==null?void 0:p.idAttribute,itemId:r},ownerState:{itemId:r,label:p==null?void 0:p.label}}),c=$._objectWithoutPropertiesLoose(g,qe);return k.jsx(a,x._extends({},c,{children:u==null?void 0:u.map(i)}))},oe);process.env.NODE_ENV!=="production"&&(re.displayName="WrappedTreeItem");function $e(t){const{slots:e,slotProps:o}=t,{store:r}=l.useTreeViewContext(),i=e==null?void 0:e.item,m=o==null?void 0:o.item,p=l.useSelector(r,l.selectorItemOrderedChildrenIds,null),u=P.useCallback(a=>k.jsx(re,{itemSlot:i,itemSlotProps:m,itemId:a},a),[i,m]);return k.jsx(K.Provider,{value:u,children:p.map(u)})}const Ue=["slots","slotProps"],Be=l.createUseThemeProps(),Ke=t=>{const{classes:e}=t;return P.useMemo(()=>{const o={root:["root"],item:["item"],itemContent:["itemContent"],itemGroupTransition:["itemGroupTransition"],itemIconContainer:["itemIconContainer"],itemLabel:["itemLabel"],itemLabelInput:["itemLabelInput"],itemCheckbox:["itemCheckbox"]};return Q.composeClasses(o,de,e)},[e])},We=Q.styled("ul",{name:"MuiRichTreeView",slot:"Root"})({padding:0,margin:0,listStyle:"none",outline:0,position:"relative"}),W=P.forwardRef(function(e,o){const r=Be({props:e,name:"MuiRichTreeView"}),{slots:i,slotProps:m}=r,p=$._objectWithoutPropertiesLoose(r,Ue);process.env.NODE_ENV!=="production"&&r.children!=null&&N.warnOnce(["MUI X: The Rich Tree View component does not support JSX children.","If you want to add items, you need to use the `items` prop.","Check the documentation for more details: https://mui.com/x/react-tree-view/rich-tree-view/items/."]);const{getRootProps:u,contextValue:a}=xe({plugins:Ne,rootRef:o,props:p}),g=l.useSelector(a.store,l.selectorIsTreeViewLoading),c=l.useSelector(a.store,l.selectorGetTreeViewError),n=Ke(r),s=(i==null?void 0:i.root)??We,h=Y.useSlotProps({elementType:s,externalSlotProps:m==null?void 0:m.root,className:n.root,getSlotProps:u,ownerState:r});return g?k.jsx(ce.Typography,{children:"Loading..."}):c?k.jsx(ue.Alert,{severity:"error",children:c.message}):k.jsx(Pe,{contextValue:a,classes:n,slots:i,slotProps:m,children:k.jsx(s,x._extends({},h,{children:k.jsx($e,{slots:i,slotProps:m})}))})});process.env.NODE_ENV!=="production"&&(W.displayName="RichTreeView");process.env.NODE_ENV!=="production"&&(W.propTypes={apiRef:b.PropTypes.shape({current:b.PropTypes.shape({focusItem:b.PropTypes.func.isRequired,getItem:b.PropTypes.func.isRequired,getItemDOMElement:b.PropTypes.func.isRequired,getItemOrderedChildrenIds:b.PropTypes.func.isRequired,getItemTree:b.PropTypes.func.isRequired,getParentId:b.PropTypes.func.isRequired,setEditedItem:b.PropTypes.func.isRequired,setIsItemDisabled:b.PropTypes.func.isRequired,setItemExpansion:b.PropTypes.func.isRequired,setItemSelection:b.PropTypes.func.isRequired,updateItemLabel:b.PropTypes.func.isRequired})}),checkboxSelection:b.PropTypes.bool,classes:b.PropTypes.object,className:b.PropTypes.string,defaultExpandedItems:b.PropTypes.arrayOf(b.PropTypes.string),defaultSelectedItems:b.PropTypes.any,disabledItemsFocusable:b.PropTypes.bool,disableSelection:b.PropTypes.bool,expandedItems:b.PropTypes.arrayOf(b.PropTypes.string),expansionTrigger:b.PropTypes.oneOf(["content","iconContainer"]),getItemChildren:b.PropTypes.func,getItemId:b.PropTypes.func,getItemLabel:b.PropTypes.func,id:b.PropTypes.string,isItemDisabled:b.PropTypes.func,isItemEditable:b.PropTypes.oneOfType([b.PropTypes.func,b.PropTypes.bool]),itemChildrenIndentation:b.PropTypes.oneOfType([b.PropTypes.number,b.PropTypes.string]),items:b.PropTypes.array.isRequired,multiSelect:b.PropTypes.bool,onExpandedItemsChange:b.PropTypes.func,onItemClick:b.PropTypes.func,onItemExpansionToggle:b.PropTypes.func,onItemFocus:b.PropTypes.func,onItemLabelChange:b.PropTypes.func,onItemSelectionToggle:b.PropTypes.func,onSelectedItemsChange:b.PropTypes.func,selectedItems:b.PropTypes.any,selectionPropagation:b.PropTypes.shape({descendants:b.PropTypes.bool,parents:b.PropTypes.bool}),slotProps:b.PropTypes.object,slots:b.PropTypes.object,sx:b.PropTypes.oneOfType([b.PropTypes.arrayOf(b.PropTypes.oneOfType([b.PropTypes.func,b.PropTypes.object,b.PropTypes.bool])),b.PropTypes.func,b.PropTypes.object])});const ze=({items:t,selectedItemId:e,handleSelectedItemChange:o,iconColor:r="primary",hasNoIcons:i=!1,maxHeight:m=300,defaultExpandedItems:p=[]})=>{const[u,a]=_.useState(p),g=_.useMemo(()=>F.buildItemDataMap(t),[t]);_.useEffect(()=>{if(e){const n=F.findItemPath(t,e);if(n){const s=n.slice(0,-1);a(h=>{const T=s.filter(E=>!h.includes(E));return T.length>0?[...h,...T]:h})}}},[e,t]);const c=(n,s)=>{a(s)};return k.jsx(z.TreeContainer,{maxHeight:m,"data-treeview-root":"true",children:k.jsx(W,{items:t,selectedItems:e,expandedItems:u,onExpandedItemsChange:c,itemChildrenIndentation:z.DEFAULT_CHILDREN_INDENT,onSelectedItemsChange:o,getItemId:F.getItemId,slots:{item:n=>{const s=n.itemId?g[n.itemId]:void 0;return k.jsx(l.CustomTreeItem,{...n,itemData:s,iconColor:r,hasNoIcons:i})}}})})};module.exports=ze;