react-accessible-treeview
Version:
A react component that implements the treeview pattern as described by the WAI-ARIA Authoring Practices.
2 lines (1 loc) • 29.1 kB
JavaScript
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=e(require("classnames")),n=e(require("prop-types")),a=require("react"),l=e(a);function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var a,l,r=[],d=!0,i=!1;try{for(n=n.call(e);!(d=(a=n.next()).done)&&(r.push(a.value),!t||r.length!==t);d=!0);}catch(e){i=!0,l=e}finally{try{d||null==n.return||n.return()}finally{if(i)throw l}}return r}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function u(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=c(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0,l=function(){};return{s:l,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:l}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,d=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return d=e.done,e},e:function(e){i=!0,r=e},f:function(){try{d||null==n.return||n.return()}finally{if(i)throw r}}}}function f(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var l=0;for(a=Object.getOwnPropertySymbols(e);l<a.length;l++)t.indexOf(a[l])<0&&Object.prototype.propertyIsEnumerable.call(e,a[l])&&(n[a[l]]=e[a[l]])}return n}var h={root:"tree",node:"tree-node",branch:"tree-node__branch",branchWrapper:"tree-branch-wrapper",leafListItem:"tree-leaf-list-item",leaf:"tree-node__leaf",nodeGroup:"tree-node-group"},p={select:"SELECT",focus:"FOCUS",exclusiveSelect:"EXCLUSIVE_SELECT"},v=Object.freeze(Object.values(p)),b=Object.freeze(Object.values({check:"check",select:"select"})),I="COLLAPSE",y="COLLAPSE_MANY",S="EXPAND",g="EXPAND_MANY",m="HALF_SELECT",w="SELECT",E="DESELECT",O="TOGGLE",A="TOGGLE_SELECT",W="SELECT_MANY",x="EXCLUSIVE_CHANGE_SELECT_MANY",T="FOCUS",j="CLEAR_FOCUS",N="BLUR",C="DISABLE",D="ENABLE",U="CLEAR_MANUALLY_TOGGLED",M="CONTROLLED_SELECT_MANY",L="UPDATE_TREE_STATE_WHEN_DATA_CHANGED",k=function(){},R=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){for(var n=0,a=t;n<a.length;n++){var l=a[n];if(l&&l(e),e.defaultPrevented)break}}},_=function(e,t){var n,a=new Set,l=u(e);try{for(l.s();!(n=l.n()).done;){var r=n.value;t.has(r)||a.add(r)}}catch(e){l.e(e)}finally{l.f()}return a},F=function(e,t){return new Set([].concat(s(_(e,t)),s(_(t,e))))},B=function(e){var t=a.useRef();return a.useEffect((function(){t.current=e}),[e]),t.current},z=function(e,t){var n;return!!(null===(n=le(e,t).children)||void 0===n?void 0:n.length)},K=function(e,t){return le(e,t).parent},H=function(e,t,n){for(var a=t,l=[];;){var r=K(e,a);if(0===r||null==r||null!=r&&n.has(r))break;l.push(r),a=r}return l},P=function(e,t,n){var a=[];return function e(t,l){var r=le(t,l);if(null!=r.children){var d,i=u(r.children.filter((function(e){return!n.has(e)})));try{for(i.s();!(d=i.n()).done;){var s=d.value;a.push(s),e(t,s)}}catch(e){i.e(e)}finally{i.f()}}}(e,t),a},G=function(e,t){var n=le(e,t);return null==n.children?[]:n.children},V=function(e,t,n){var a=K(e,t);if(null!=a){var l=le(e,a),r=l.children.indexOf(t)+n;if(l.children[r])return l.children[r]}return null},q=function(e,t,n){var a=le(e,t);for(ae(e).id===t&&(a=le(e,le(e,t).children[le(e,t).children.length-1]));n.has(a.id)&&z(e,a.id);)a=le(e,a.children[a.children.length-1]);return a.id},Y=function(e,t,n){if(t===ae(e).children[0])return null;var a=V(e,t,-1);return null==a?K(e,t):q(e,a,n)},X=function(e,t,n){var a=le(e,t).id;if(z(e,a)&&n.has(a))return le(e,a).children[0];for(;;){var l=V(e,a,1);if(null!=l)return l;if(null==(a=K(e,a)))return null}},$=function(e){var t=e.data,n=e.expandedIds,a=e.from,l=e.to,r=[],d=t.length,i=0,s=a;if(r.push(a),a<l)for(;i<d&&(null!=(s=X(t,s,n))&&r.push(s),null!=s&&s!==l);)i+=1;else if(a>l)for(;i<d&&(null!=(s=Y(t,s,n))&&r.push(s),null!=s&&s!==l);)i+=1;return r},J=function(e){var t=e.isSelected,n=e.isDisabled,a=e.multiSelect;return n||a?t:!!t||void 0},Q=function(e){var t=e.isSelected,n=e.isDisabled,a=e.isHalfSelected,l=e.multiSelect;return n?t:a?"mixed":l?t:!!t||void 0},Z=function(e,t,n){return t.concat.apply(t,s(t.filter((function(t){return z(e,t)})).map((function(t){return P(e,t,n)}))))},ee=function(e,t,n){null!=t?window.navigator.userAgent.match(/Trident/)?setTimeout((function(){return!t.contains(document.activeElement)&&n()}),0):!t.contains(e.nativeEvent.relatedTarget)&&n():console.warn("ref not set on <ul>")},te=function(e,t,n){var a=G(e,t);return z(e,t)&&!n.has(t)&&1===a.length&&a.every((function(e){return n.has(e)}))},ne=function(e,t,n,a){var l=function(e,t,n){return z(e,t)&&n.has(t)&&P(e,t,new Set).some((function(e){return n.has(e)}))}(e,t,n),r=function(e,t,n){var a=G(e,t);return z(e,t)&&n.has(t)&&1===a.length&&a.every((function(e){return n.has(e)}))}(e,t,n);return function(e,t,n,a){var l=P(e,t,new Set);return z(e,t)&&n.has(t)&&l.every((function(e){return n.has(e)}))&&l.every((function(e){return!a.has(e)}))}(e,t,n,a)?A:l&&!r?m:A},ae=function(e){var t=e.find((function(e){return null===e.parent}));if(!t)throw Error("TreeView data must contain parent node.");return t},le=function(e,t){var n=e.find((function(e){return e.id===t}));if(null==n)throw Error("Node with id=".concat(t," doesn't exist in the tree."));return n},re=function(e){var t=Array.from(new Set(e));return e.length!==t.length},de=function(e,t){switch(t.type){case I:var n=new Set(e.expandedIds);return n.delete(t.id),Object.assign(Object.assign({},e),{expandedIds:n,tabbableId:t.id,isFocused:!0,lastAction:t.type,lastInteractedWith:t.lastInteractedWith});case y:var a,l=new Set(e.expandedIds),r=u(t.ids);try{for(r.s();!(a=r.n()).done;){var d=a.value;l.delete(d)}}catch(e){r.e(e)}finally{r.f()}return Object.assign(Object.assign({},e),{expandedIds:l,lastAction:t.type,lastInteractedWith:t.lastInteractedWith});case S:var i=new Set(e.expandedIds);return i.add(t.id),Object.assign(Object.assign({},e),{expandedIds:i,tabbableId:t.id,isFocused:!0,lastAction:t.type,lastInteractedWith:t.lastInteractedWith});case g:var c=new Set([].concat(s(e.expandedIds),s(t.ids)));return Object.assign(Object.assign({},e),{expandedIds:c,lastAction:t.type,lastInteractedWith:t.lastInteractedWith});case O:var o=new Set(e.expandedIds);return e.expandedIds.has(t.id)?o.delete(t.id):o.add(t.id),Object.assign(Object.assign({},e),{expandedIds:o,tabbableId:t.id,isFocused:!0,lastAction:t.type,lastInteractedWith:t.lastInteractedWith});case m:if(e.disabledIds.has(t.id))return e;var f=new Set(e.halfSelectedIds),h=new Set(e.selectedIds);return f.add(t.id),h.delete(t.id),Object.assign(Object.assign({},e),{selectedIds:h,halfSelectedIds:f,tabbableId:t.keepFocus?e.tabbableId:t.id,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled,lastUserSelect:t.NotUserAction?e.lastUserSelect:t.id});case w:if(!t.NotUserAction&&e.disabledIds.has(t.id))return e;var p;t.multiSelect?(p=new Set(e.selectedIds)).add(t.id):(p=new Set).add(t.id);var v=new Set(e.halfSelectedIds);v.delete(t.id);var b=t.keepFocus?e.tabbableId:t.id,k=b===t.lastInteractedWith||!0!==t.NotUserAction;return Object.assign(Object.assign({},e),{selectedIds:p,halfSelectedIds:v,tabbableId:b,isFocused:k,lastUserSelect:t.NotUserAction?e.lastUserSelect:t.id,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled});case E:if(!t.NotUserAction&&e.disabledIds.has(t.id))return e;var R,F=new Set(e.selectedIds);return F.delete(t.id),t.multiSelect?(R=new Set(e.halfSelectedIds)).delete(t.id):R=new Set,Object.assign(Object.assign({},e),{selectedIds:F,halfSelectedIds:R,tabbableId:t.keepFocus?e.tabbableId:t.id,isFocused:!0,lastUserSelect:t.NotUserAction?e.lastUserSelect:t.id,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled});case A:if(e.disabledIds.has(t.id))return e;var B,z=e.selectedIds.has(t.id);t.multiSelect?(B=new Set(e.selectedIds),z?B.delete(t.id):B.add(t.id)):(B=new Set,z||B.add(t.id));var K=new Set(e.halfSelectedIds);return K.delete(t.id),Object.assign(Object.assign({},e),{selectedIds:B,halfSelectedIds:K,tabbableId:t.id,isFocused:!0,lastUserSelect:t.NotUserAction?e.lastUserSelect:t.id,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled});case W:var H,P=t.ids.filter((function(t){return!e.disabledIds.has(t)}));if(t.multiSelect){H=t.select?new Set([].concat(s(e.selectedIds),s(P))):_(e.selectedIds,new Set(P));var G=_(e.halfSelectedIds,H);return Object.assign(Object.assign({},e),{selectedIds:H,halfSelectedIds:G,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled})}return e;case x:var V,q=t.ids.filter((function(t){return!e.disabledIds.has(t)}));if(t.multiSelect){V=t.select?new Set(q):_(e.selectedIds,new Set(q));var Y=_(e.halfSelectedIds,V);return Object.assign(Object.assign({},e),{selectedIds:V,halfSelectedIds:Y,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled})}return e;case M:var X,$=e.lastInteractedWith,J=e.tabbableId;if(t.multiSelect)X=new Set(t.ids),t.ids.length&&($=t.ids[t.ids.length-1],J=t.ids[t.ids.length-1]);else{X=new Set,t.ids.length>1&&console.warn("Tree in singleSelect mode, only the first item from selectedIds will be selected.");var Q=t.ids[0];Q&&X.add(Q),$=null!=Q?Q:$,J=null!=Q?Q:$}var Z=new Set(e.halfSelectedIds);t.ids.every((function(e){return Z.delete(e)}));var ee=new Set(t.ids);return Object.assign(Object.assign({},e),{selectedIds:X,halfSelectedIds:Z,controlledIds:ee,isFocused:!0,lastAction:t.type,tabbableId:J,lastInteractedWith:$});case T:return Object.assign(Object.assign({},e),{tabbableId:t.id,isFocused:!0,lastAction:t.type,lastInteractedWith:t.lastInteractedWith});case N:return Object.assign(Object.assign({},e),{isFocused:!1});case j:return Object.assign(Object.assign({},e),{isFocused:!1,lastInteractedWith:null,tabbableId:t.id});case C:var te=new Set(e.disabledIds);return te.add(t.id),Object.assign(Object.assign({},e),{disabledIds:te});case D:var ne=new Set(e.disabledIds);return ne.delete(t.id),Object.assign(Object.assign({},e),{disabledIds:ne});case U:return Object.assign(Object.assign({},e),{lastManuallyToggled:null});case L:return Object.assign(Object.assign({},e),{tabbableId:t.tabbableId,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled,lastUserSelect:t.lastUserSelect});default:throw new Error("Invalid action passed to the reducer")}},ie=function(e){var n=e.element,a=e.dispatch,r=e.data,i=e.selectedIds,c=e.tabbableId,o=e.isFocused,u=e.expandedIds,h=e.disabledIds,v=e.halfSelectedIds,b=e.lastUserSelect,I=e.nodeRefs,S=e.leafRefs,g=e.baseClassNames,m=e.nodeRenderer,E=e.nodeAction,j=e.setsize,N=e.posinset,C=e.level,D=e.propagateCollapse,U=e.propagateSelect,M=e.multiSelect,L=e.togglableSelect,_=e.clickAction,F=e.state,B=function(e){if(!(e.ctrlKey||e.altKey||e.shiftKey))if(u.has(n.id)&&D){var t=[n.id].concat(s(P(r,n.id,new Set)));a({type:y,ids:t,lastInteractedWith:n.id})}else a({type:O,id:n.id,lastInteractedWith:n.id})},K=function(){return a({type:T,id:n.id,lastInteractedWith:n.id})},H=function(e){if(e.shiftKey){var t=$({data:r,expandedIds:u,from:b,to:n.id}).filter((function(e){return!h.has(e)}));t=U?Z(r,t,h):t,a({type:x,select:!0,multiSelect:M,ids:t,lastInteractedWith:n.id,lastManuallyToggled:n.id})}else e.ctrlKey||_===p.select?(a({type:L?ne(r,n.id,i,h):w,id:n.id,multiSelect:M,lastInteractedWith:n.id,lastManuallyToggled:n.id}),U&&!h.has(n.id)&&a({type:W,ids:Z(r,[n.id],h),select:!L||!i.has(n.id),multiSelect:M,lastInteractedWith:n.id,lastManuallyToggled:n.id})):_===p.exclusiveSelect?a({type:L?A:w,id:n.id,multiSelect:!1,lastInteractedWith:n.id,lastManuallyToggled:n.id}):_===p.focus&&a({type:T,id:n.id,lastInteractedWith:n.id})},G=function(e){var a;return t(e,(d(a={},"".concat(e,"--expanded"),u.has(n.id)),d(a,"".concat(e,"--selected"),i.has(n.id)),d(a,"".concat(e,"--focused"),c===n.id&&o),a))},V="select"===E?{"aria-selected":J({isSelected:i.has(n.id),isDisabled:h.has(n.id),multiSelect:M})}:{"aria-checked":Q({isSelected:i.has(n.id),isDisabled:h.has(n.id),isHalfSelected:v.has(n.id),multiSelect:M})};return z(r,n.id)||n.isBranch?l.createElement("li",Object.assign({role:"treeitem","aria-expanded":u.has(n.id),"aria-setsize":j,"aria-posinset":N,"aria-level":C,"aria-disabled":h.has(n.id),tabIndex:c===n.id?0:-1,ref:function(e){null!=(null==I?void 0:I.current)&&null!=e&&(I.current[n.id]=e)},className:g.branchWrapper},V),l.createElement(l.Fragment,null,m({element:n,isBranch:!0,isSelected:i.has(n.id),isHalfSelected:v.has(n.id),isExpanded:u.has(n.id),isDisabled:h.has(n.id),dispatch:a,getNodeProps:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=e.onClick;return{onClick:null==a?R(H,B,K):R(a,K),className:t(G(g.node),g.branch),ref:function(e){null!=(null==S?void 0:S.current)&&(S.current[n.id]=e)}}},setsize:j,posinset:N,level:C,handleSelect:H,handleExpand:B,treeState:F}),l.createElement(se,Object.assign({getClasses:G},function(e){e.setsize,e.posinset;return f(e,["setsize","posinset"])}(e))))):l.createElement("li",{role:"none",className:G(g.leafListItem)},m({element:n,isBranch:!1,isSelected:i.has(n.id),isHalfSelected:!1,isExpanded:!1,isDisabled:h.has(n.id),dispatch:a,getNodeProps:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=e.onClick;return Object.assign({role:"treeitem",tabIndex:c===n.id?0:-1,onClick:R(null==a?H:a,K),ref:function(e){null!=(null==I?void 0:I.current)&&null!=(null==S?void 0:S.current)&&(I.current[n.id]=e,S.current[n.id]=e)},className:t(G(g.node),g.leaf),"aria-setsize":j,"aria-posinset":N,"aria-level":C,disabled:h.has(n.id),"aria-disabled":h.has(n.id)},V)},setsize:j,posinset:N,level:C,handleSelect:H,handleExpand:k,treeState:F}))},se=function(e){var t=e.data,n=e.element,a=e.expandedIds,d=e.getClasses,i=e.baseClassNames,s=e.level,c=f(e,["data","element","expandedIds","getClasses","baseClassNames","level"]);return l.createElement("ul",{role:"group",className:d(i.nodeGroup)},a.has(n.id)&&n.children.length>0&&n.children.map((function(e,d){return l.createElement(ie,Object.assign({data:t,expandedIds:a,baseClassNames:i,key:"".concat(e,"-").concat(r(e)),element:le(t,e),setsize:n.children.length,posinset:d+1,level:s+1},c))})))},ce=function(e){var t=e.data,n=e.controlledSelectedIds,l=e.controlledExpandedIds,r=e.defaultExpandedIds,d=e.defaultSelectedIds,c=e.defaultDisabledIds,o=e.nodeRefs,f=e.leafRefs,h=e.onSelect,p=e.onNodeSelect,v=e.onExpand,b=e.onLoadData,A=e.togglableSelect,x=e.multiSelect,N=e.propagateSelect,C=e.propagateSelectUpwards,D=e.treeRef,R=e.focusedId,G=ae(t),V=i(a.useReducer(de,{selectedIds:new Set(n||d),controlledIds:new Set(n),tabbableId:G.children[0],isFocused:!1,expandedIds:new Set(l||r),halfSelectedIds:new Set,lastUserSelect:G.children[0],lastInteractedWith:null,lastManuallyToggled:null,disabledIds:new Set(c)}),2),q=V[0],Y=V[1],X=q.selectedIds,$=q.expandedIds,J=q.disabledIds,Q=q.tabbableId,ee=q.halfSelectedIds,ne=q.lastAction,re=q.lastInteractedWith,ie=q.lastManuallyToggled,se=B(X)||new Set,ce=F(X,se);a.useEffect((function(){var e;if(null!=h&&h!==k){var n,a=u(ce);try{for(a.s();!(n=a.n()).done;){var l=n.value,r=z(t,l)||!!(null===(e=le(t,Q))||void 0===e?void 0:e.isBranch);h({element:le(t,l),isBranch:r,isExpanded:!!r&&$.has(l),isSelected:X.has(l),isDisabled:J.has(l),isHalfSelected:!!r&&ee.has(l),treeState:q})}}catch(e){a.e(e)}finally{a.f()}}}),[t,X,$,J,ee,ce,h,q]),a.useEffect((function(){null!=p&&p!==k&&null!=ie&&ce.size&&(p({element:le(t,ie),isSelected:X.has(ie),isBranch:z(t,ie),treeState:q}),Y({type:U}))}),[ie,X,ce]);var oe=B($)||new Set;a.useEffect((function(){var e=F($,oe);if(null!=v&&v!==k){var n,a=u(e);try{for(a.s();!(n=a.n()).done;){var l=n.value;v({element:le(t,l),isExpanded:$.has(l),isSelected:X.has(l),isDisabled:J.has(l),isHalfSelected:ee.has(l),treeState:q})}}catch(e){a.e(e)}finally{a.f()}}}),[t,X,$,J,ee,oe,v,q]);var ue,fe,he=(ue=t,fe=a.useRef(),a.useEffect((function(){fe.current=ue})),fe.current||new Map);a.useEffect((function(){var e=F($,oe);if(b){var n,a=u(e);try{for(a.s();!(n=a.n()).done;){var l=n.value;b({element:le(t,l),isExpanded:$.has(l),isSelected:X.has(l),isDisabled:J.has(l),isHalfSelected:ee.has(l),treeState:q})}}catch(e){a.e(e)}finally{a.f()}if(he!==t&&A&&N){var r,d=u($);try{for(d.s();!(r=d.n()).done;){var i=r.value;X.has(i)&&Y({type:W,ids:Z(t,[i],J),select:!0,multiSelect:x,lastInteractedWith:i})}}catch(e){d.e(e)}finally{d.f()}}}}),[t,X,$,J,ee,oe,b,q]),a.useEffect((function(){if(he!==t){var e=ae(t);e.children.length&&Y({type:L,tabbableId:t.find((function(e){return e.id===q.tabbableId}))?q.tabbableId:e.children[0],lastInteractedWith:t.find((function(e){return e.id===q.lastInteractedWith}))?q.lastInteractedWith:null,lastManuallyToggled:t.find((function(e){return e.id===q.lastManuallyToggled}))?q.lastManuallyToggled:null,lastUserSelect:t.find((function(e){return e.id===q.lastUserSelect}))?q.lastUserSelect:e.children[0]})}}),[t]);var pe=F(new Set(n),X);return a.useEffect((function(){var e=n||d;if(n&&pe.size&&Y({type:M,ids:n,multiSelect:x}),e){var a,l=u(e);try{for(l.s();!(a=l.n()).done;){var r=a.value;N&&!J.has(r)&&Y({type:W,ids:Z(t,[r],J),select:!0,multiSelect:x,lastInteractedWith:r})}}catch(e){l.e(e)}finally{l.f()}}}),[n]),a.useEffect((function(){var e=new Set(l),n=_(e,oe),a=_(oe,e);if(a.size){var r,d=u(a);try{for(d.s();!(r=d.n()).done;){var i=r.value;if(z(t,i)||le(t,i).isBranch){var c=[i].concat(s(P(t,i,new Set)));Y({type:y,ids:c,lastInteractedWith:i})}}}catch(e){d.e(e)}finally{d.f()}}if(n.size){var o,f=u(n);try{for(f.s();!(o=f.n()).done;){var h=o.value;if(z(t,h)||le(t,h).isBranch){var p=K(t,h);Y(p?{type:g,ids:[h,p],lastInteractedWith:h}:{type:S,id:h,lastInteractedWith:h})}}}catch(e){f.e(e)}finally{f.f()}}}),[l]),a.useEffect((function(){if(C){var e=new Set(s(ce));re&&ne!==T&&ne!==I&&ne!==S&&ne!==O&&e.add(re);var a=[];e.forEach((function(e){t.find((function(t){return t.id===e}))||a.push(e)})),a.forEach((function(t){return e.delete(t)}));var l=function(e,t,n,a,l,r){var d,i={every:new Set,some:new Set,none:new Set},s=u(t);try{for(s.s();!(d=s.n()).done;)for(var c=d.value;;){var o=K(e,c);if(0===o||null==o||null!=o&&a.has(o))break;var f=le(e,o).children.filter((function(e){return!a.has(e)}));if(0===f.length)break;if(f.some((function(e){return n.has(e)||i.some.has(e)&&!i.none.has(e)||l.has(e)&&!i.none.has(e)})))f.every((function(e){return n.has(e)}))?i.every.add(o):i.some.add(o);else{var h=H(e,c,a).find((function(e){return n.has(e)}));if(!r&&h){P(e,h,a).forEach((function(e){l.has(e)&&i.none.add(e)}));break}i.none.add(o)}c=o}}catch(e){s.e(e)}finally{s.f()}return i}(t,e,X,J,ee,x),r=l.every,d=l.some,i=l.none;n&&e.forEach((function(e){z(t,e)&&(P(t,e,new Set).every((function(e){return X.has(e)}))&&r.add(e))}));var c,o=u(r);try{for(o.s();!(c=o.n()).done;){var f=c.value;X.has(f)||Y({type:w,id:f,multiSelect:x||te(t,f,X),keepFocus:!0,NotUserAction:!0,lastInteractedWith:re})}}catch(e){o.e(e)}finally{o.f()}var h,p=u(d);try{for(p.s();!(h=p.n()).done;){var v=h.value;ee.has(v)||Y({type:m,id:v,lastInteractedWith:re,keepFocus:!0,NotUserAction:!0})}}catch(e){p.e(e)}finally{p.f()}var b,y=u(i);try{for(y.s();!(b=y.n()).done;){var g=b.value;(X.has(g)||ee.has(g))&&Y({type:E,id:g,multiSelect:x,keepFocus:!0,NotUserAction:!0,lastInteractedWith:re,lastManuallyToggled:ie})}}catch(e){y.e(e)}finally{y.f()}}}),[t,x,C,X,$,J,ee,ne,se,ce,re,pe]),a.useEffect((function(){if(null!=re&&(null!=Q&&null!=(null==o?void 0:o.current)&&null!=(null==f?void 0:f.current)&&(null==(null==D?void 0:D.current)||document.activeElement&&D.current.contains(document.activeElement)||R))){var e=o.current[Q];!function(e){null!=e&&e.scrollIntoView&&e.scrollIntoView({block:"nearest"})}(f.current[re]),function(e){null!=e&&e.focus&&e.focus({preventScroll:!0})}(e)}}),[Q,o,f,re]),a.useEffect((function(){if(R||Y({type:j,id:G.children[0]}),R&&t.find((function(e){return e.id===R}))){var e=function e(t,n){var a=K(t,n),l=a&&(z(t,a)||le(t,a).isBranch);return a&&l?[a].concat(s(e(t,a))):[]}(t,R);e.length&&Y({type:g,ids:e,lastInteractedWith:R}),Y({type:T,id:R,lastInteractedWith:R})}}),[R]),[q,Y]},oe=l.forwardRef((function(e,n){var d=e.data,s=e.selectedIds,c=e.nodeRenderer,o=e.onSelect,u=void 0===o?k:o,v=e.onNodeSelect,b=void 0===v?k:v,I=e.onExpand,y=void 0===I?k:I,S=e.onLoadData,g=e.className,m=void 0===g?"":g,w=e.multiSelect,E=void 0!==w&&w,O=e.propagateSelect,A=void 0!==O&&O,W=e.propagateSelectUpwards,x=void 0!==W&&W,T=e.propagateCollapse,j=void 0!==T&&T,C=e.expandOnKeyboardSelect,D=void 0!==C&&C,U=e.togglableSelect,M=void 0!==U&&U,L=e.defaultExpandedIds,R=void 0===L?[]:L,_=e.defaultSelectedIds,F=void 0===_?[]:_,B=e.defaultDisabledIds,z=void 0===B?[]:B,K=e.clickAction,H=void 0===K?p.select:K,P=e.nodeAction,G=void 0===P?"select":P,V=e.expandedIds,q=e.focusedId,Y=e.onBlur,X=f(e,["data","selectedIds","nodeRenderer","onSelect","onNodeSelect","onExpand","onLoadData","className","multiSelect","propagateSelect","propagateSelectUpwards","propagateCollapse","expandOnKeyboardSelect","togglableSelect","defaultExpandedIds","defaultSelectedIds","defaultDisabledIds","clickAction","nodeAction","expandedIds","focusedId","onBlur"]);!function(e){if(re(e.map((function(e){return e.id}))))throw Error("Multiple TreeView nodes have the same ID. IDs must be unique.");if(e.forEach((function(e){if(e.id===e.parent)throw Error("Node with id=".concat(e.id," has parent reference to itself."));if(re(e.children))throw Error("Node with id=".concat(e.id," contains duplicate ids in its children."))})),0===e.filter((function(e){return null===e.parent})).length)throw Error("TreeView must have one root node.");if(e.filter((function(e){return null===e.parent})).length>1)throw Error("TreeView can have only one root node.");ae(e).children.length||console.warn("TreeView have no nodes to display.")}(d);var $=a.useRef({}),J=a.useRef({}),Q=a.useRef(null);null!=n&&(Q=n);var Z=i(ce({data:d,controlledSelectedIds:s,controlledExpandedIds:V,defaultExpandedIds:R,defaultSelectedIds:F,defaultDisabledIds:z,nodeRefs:$,leafRefs:J,onSelect:u,onNodeSelect:b,onExpand:y,onLoadData:S,togglableSelect:M,multiSelect:E,propagateSelect:A,propagateSelectUpwards:x,treeRef:Q,focusedId:q}),2),te=Z[0],ne=Z[1];return A=A&&E,l.createElement("ul",Object.assign({className:t(h.root,m),role:"tree","aria-multiselectable":"select"===G?E:void 0,ref:Q,onBlur:function(e){ee(e,Q.current,(function(){Y&&Y({treeState:te,dispatch:ne}),ne({type:N})}))},onKeyDown:ue({data:d,tabbableId:te.tabbableId,expandedIds:te.expandedIds,selectedIds:te.selectedIds,disabledIds:te.disabledIds,halfSelectedIds:te.halfSelectedIds,clickAction:H,dispatch:ne,propagateCollapse:j,propagateSelect:A,multiSelect:E,expandOnKeyboardSelect:D,togglableSelect:M})},X),ae(d).children.map((function(e,t){return l.createElement(ie,Object.assign({key:"".concat(e,"-").concat(r(e)),data:d,element:le(d,e),setsize:ae(d).children.length,posinset:t+1,level:1},te,{state:te,dispatch:ne,nodeRefs:$,leafRefs:J,baseClassNames:h,nodeRenderer:c,propagateCollapse:j,propagateSelect:A,propagateSelectUpwards:x,multiSelect:E,togglableSelect:M,clickAction:H,nodeAction:G}))})))})),ue=function(e){var t=e.data,n=e.expandedIds,a=e.selectedIds,l=e.disabledIds,r=e.tabbableId,d=e.dispatch,i=e.propagateCollapse,c=e.propagateSelect,o=e.multiSelect,u=e.expandOnKeyboardSelect,f=e.togglableSelect,h=e.clickAction;return function(e){var v=le(t,r),b=v.id;if(e.ctrlKey){if("a"===e.key&&h!==p.focus){e.preventDefault();var m=t.filter((function(e){return null!==e.parent})).map((function(e){return e.id})).filter((function(e){return!l.has(e)}));d({type:W,multiSelect:o,select:Array.from(a).filter((function(e){return!l.has(e)})).length!==m.length,ids:m,lastInteractedWith:v.id})}else if(e.shiftKey&&("Home"===e.key||"End"===e.key)&&h!==p.focus){var E="Home"===e.key?ae(t).children[0]:q(t,b,n),A=$({data:t,expandedIds:n,from:b,to:E}).filter((function(e){return!l.has(e)}));d({type:W,multiSelect:o,select:!0,ids:c?Z(t,A,l):A}),d({type:T,id:E,lastInteractedWith:E})}}else{if(e.shiftKey)switch(e.key){case"ArrowUp":e.preventDefault();var x=Y(t,b,n);return void(null==x||l.has(x)||(h!==p.focus&&d({type:W,ids:c?Z(t,[x],l):[x],select:!0,multiSelect:o,lastInteractedWith:x,lastManuallyToggled:x}),d({type:T,id:x,lastInteractedWith:x})));case"ArrowDown":e.preventDefault();var j=X(t,b,n);return void(null==j||l.has(j)||(h!==p.focus&&d({type:W,ids:c?Z(t,[j],l):[j],multiSelect:o,select:!0,lastInteractedWith:j,lastManuallyToggled:j}),d({type:T,id:j,lastInteractedWith:j})))}switch(e.key){case"ArrowDown":e.preventDefault();var N=X(t,b,n);return void(null!=N&&d({type:T,id:N,lastInteractedWith:N}));case"ArrowUp":e.preventDefault();var C=Y(t,b,n);return void(null!=C&&d({type:T,id:C,lastInteractedWith:C}));case"ArrowLeft":if(e.preventDefault(),(z(t,b)||v.isBranch)&&n.has(r))if(i){var D=[b].concat(s(P(t,b,new Set)));d({type:y,ids:D,lastInteractedWith:v.id})}else d({type:I,id:b,lastInteractedWith:b});else if(!ae(t).children.includes(b)){var U=K(t,b);if(null==U)throw new Error("parentId of root element is null");d({type:T,id:U,lastInteractedWith:U})}return;case"ArrowRight":return e.preventDefault(),void((z(t,b)||v.isBranch)&&(n.has(r)?d({type:T,id:v.children[0],lastInteractedWith:v.children[0]}):d({type:S,id:b,lastInteractedWith:b})));case"Home":e.preventDefault(),d({type:T,id:ae(t).children[0],lastInteractedWith:ae(t).children[0]});break;case"End":e.preventDefault();var M=q(t,ae(t).id,n);return void d({type:T,id:M,lastInteractedWith:M});case"*":e.preventDefault();var L=K(t,b);if(null==L)throw new Error("parentId of element is null");var k=le(t,L).children.filter((function(e){return z(t,e)||le(t,e).isBranch}));return void d({type:g,ids:k,lastInteractedWith:b});case"Enter":case" ":case"Spacebar":if(e.preventDefault(),h===p.focus)return;return d({type:f?ne(t,b,a,l):w,id:b,multiSelect:o,lastInteractedWith:b,lastManuallyToggled:b}),c&&!l.has(v.id)&&d({type:W,ids:Z(t,[b],l),select:!f||!a.has(b),multiSelect:o,lastInteractedWith:b,lastManuallyToggled:b}),void(u&&d({type:O,id:b,lastInteractedWith:b}));default:if(1===e.key.length)for(var R=X(t,b,n);R!==b;)if(null!=R){if(le(t,R).name[0].toLowerCase()===e.key.toLowerCase())return void d({type:T,id:R,lastInteractedWith:b});R=X(t,R,n)}else R=ae(t).children[0];return}}}};oe.propTypes={data:n.array.isRequired,onSelect:n.func,onNodeSelect:n.func,onExpand:n.func,className:n.string,nodeRenderer:n.func.isRequired,defaultExpandedIds:n.array,defaultSelectedIds:n.array,expandedIds:n.array,selectedIds:n.array,defaultDisabledIds:n.array,propagateCollapse:n.bool,propagateSelect:n.bool,propagateSelectUpwards:n.bool,multiSelect:n.bool,expandOnKeyboardSelect:n.bool,togglableSelect:n.bool,nodeAction:n.oneOf(b),clickAction:n.oneOf(v),onBlur:n.func,onLoadData:n.func,focusedId:n.oneOfType([n.string,n.number])},exports.CLICK_ACTIONS=v,exports.default=oe,exports.flattenTree=function(e){var t=0,n=[];return function e(a,l){var r,d=Object.assign(Object.assign({id:a.id||t,name:a.name,children:[]},a.isBranch&&{isBranch:a.isBranch}),{parent:l,metadata:a.metadata?Object.assign({},a.metadata):void 0});if(n.find((function(e){return e.id===d.id})))throw Error("Multiple TreeView nodes have the same ID (".concat(d.id,"). IDs must be unique."));if(n.push(d),t+=1,null===(r=a.children)||void 0===r?void 0:r.length){var i,s=u(a.children);try{for(s.s();!(i=s.n()).done;){e(i.value,d.id)}}catch(e){s.e(e)}finally{s.f()}var c,o=u(n.values());try{for(o.s();!(c=o.n()).done;){var f=c.value;f.parent===d.id&&d.children.push(f.id)}}catch(e){o.e(e)}finally{o.f()}}}(e,null),n};