UNPKG

react-accessible-treeview

Version:

A react component that implements the treeview pattern as described by the WAI-ARIA Authoring Practices.

2 lines (1 loc) 28.8 kB
import e from"classnames";import t from"prop-types";import n,{useRef as a,useEffect as l,useReducer as r}from"react";function d(e){return(d="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 i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(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)||o(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 c(e){return function(e){if(Array.isArray(e))return u(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(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 o(e,t){if(e){if("string"==typeof e)return u(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)?u(e,t):void 0}}function u(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 f(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=o(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 h(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 p={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"},v={select:"SELECT",focus:"FOCUS",exclusiveSelect:"EXCLUSIVE_SELECT"},b=Object.freeze(Object.values(v)),I=Object.freeze(Object.values({check:"check",select:"select"})),y="COLLAPSE",S="COLLAPSE_MANY",g="EXPAND",m="EXPAND_MANY",w="HALF_SELECT",E="SELECT",O="DESELECT",A="TOGGLE",W="TOGGLE_SELECT",x="SELECT_MANY",T="EXCLUSIVE_CHANGE_SELECT_MANY",j="FOCUS",N="CLEAR_FOCUS",D="BLUR",C="DISABLE",U="ENABLE",M="CLEAR_MANUALLY_TOGGLED",L="CONTROLLED_SELECT_MANY",k="UPDATE_TREE_STATE_WHEN_DATA_CHANGED",R=function(){},F=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=f(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},B=function(e,t){return new Set([].concat(c(_(e,t)),c(_(t,e))))},z=function(e){var t=a();return l((function(){t.current=e}),[e]),t.current},H=function(e,t){var n;return!!(null===(n=de(e,t).children)||void 0===n?void 0:n.length)},K=function(e,t){return de(e,t).parent},P=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},G=function(e,t,n){var a=[];return function e(t,l){var r=de(t,l);if(null!=r.children){var d,i=f(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},V=function(e,t){var n=de(e,t);return null==n.children?[]:n.children},Y=function(e,t,n){var a=K(e,t);if(null!=a){var l=de(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=de(e,t);for(re(e).id===t&&(a=de(e,de(e,t).children[de(e,t).children.length-1]));n.has(a.id)&&H(e,a.id);)a=de(e,a.children[a.children.length-1]);return a.id},X=function(e,t,n){if(t===re(e).children[0])return null;var a=Y(e,t,-1);return null==a?K(e,t):q(e,a,n)},$=function(e,t,n){var a=de(e,t).id;if(H(e,a)&&n.has(a))return de(e,a).children[0];for(;;){var l=Y(e,a,1);if(null!=l)return l;if(null==(a=K(e,a)))return null}},J=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=$(t,s,n))&&r.push(s),null!=s&&s!==l);)i+=1;else if(a>l)for(;i<d&&(null!=(s=X(t,s,n))&&r.push(s),null!=s&&s!==l);)i+=1;return r},Q=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=f(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=f(n.values());try{for(o.s();!(c=o.n()).done;){var u=c.value;u.parent===d.id&&d.children.push(u.id)}}catch(e){o.e(e)}finally{o.f()}}}(e,null),n},Z=function(e){var t=e.isSelected,n=e.isDisabled,a=e.multiSelect;return n||a?t:!!t||void 0},ee=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},te=function(e,t,n){return t.concat.apply(t,c(t.filter((function(t){return H(e,t)})).map((function(t){return G(e,t,n)}))))},ne=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>")},ae=function(e,t,n){var a=V(e,t);return H(e,t)&&!n.has(t)&&1===a.length&&a.every((function(e){return n.has(e)}))},le=function(e,t,n,a){var l=function(e,t,n){return H(e,t)&&n.has(t)&&G(e,t,new Set).some((function(e){return n.has(e)}))}(e,t,n),r=function(e,t,n){var a=V(e,t);return H(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=G(e,t,new Set);return H(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)?W:l&&!r?w:W},re=function(e){var t=e.find((function(e){return null===e.parent}));if(!t)throw Error("TreeView data must contain parent node.");return t},de=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},ie=function(e){var t=Array.from(new Set(e));return e.length!==t.length},se=function(e,t){switch(t.type){case y: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 S:var a,l=new Set(e.expandedIds),r=f(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 g: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 m:var s=new Set([].concat(c(e.expandedIds),c(t.ids)));return Object.assign(Object.assign({},e),{expandedIds:s,lastAction:t.type,lastInteractedWith:t.lastInteractedWith});case A: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 w:if(e.disabledIds.has(t.id))return e;var u=new Set(e.halfSelectedIds),h=new Set(e.selectedIds);return u.add(t.id),h.delete(t.id),Object.assign(Object.assign({},e),{selectedIds:h,halfSelectedIds:u,tabbableId:t.keepFocus?e.tabbableId:t.id,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled,lastUserSelect:t.NotUserAction?e.lastUserSelect:t.id});case E: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,I=b===t.lastInteractedWith||!0!==t.NotUserAction;return Object.assign(Object.assign({},e),{selectedIds:p,halfSelectedIds:v,tabbableId:b,isFocused:I,lastUserSelect:t.NotUserAction?e.lastUserSelect:t.id,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled});case O: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 W: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 H=new Set(e.halfSelectedIds);return H.delete(t.id),Object.assign(Object.assign({},e),{selectedIds:B,halfSelectedIds:H,tabbableId:t.id,isFocused:!0,lastUserSelect:t.NotUserAction?e.lastUserSelect:t.id,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled});case x:var K,P=t.ids.filter((function(t){return!e.disabledIds.has(t)}));if(t.multiSelect){K=t.select?new Set([].concat(c(e.selectedIds),c(P))):_(e.selectedIds,new Set(P));var G=_(e.halfSelectedIds,K);return Object.assign(Object.assign({},e),{selectedIds:K,halfSelectedIds:G,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled})}return e;case T:var V,Y=t.ids.filter((function(t){return!e.disabledIds.has(t)}));if(t.multiSelect){V=t.select?new Set(Y):_(e.selectedIds,new Set(Y));var q=_(e.halfSelectedIds,V);return Object.assign(Object.assign({},e),{selectedIds:V,halfSelectedIds:q,lastAction:t.type,lastInteractedWith:t.lastInteractedWith,lastManuallyToggled:t.lastManuallyToggled})}return e;case L: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 j:return Object.assign(Object.assign({},e),{tabbableId:t.id,isFocused:!0,lastAction:t.type,lastInteractedWith:t.lastInteractedWith});case D:return Object.assign(Object.assign({},e),{isFocused:!1});case N: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 U:var ne=new Set(e.disabledIds);return ne.delete(t.id),Object.assign(Object.assign({},e),{disabledIds:ne});case M:return Object.assign(Object.assign({},e),{lastManuallyToggled:null});case k: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")}},ce=function(t){var a=t.element,l=t.dispatch,r=t.data,d=t.selectedIds,s=t.tabbableId,o=t.isFocused,u=t.expandedIds,f=t.disabledIds,p=t.halfSelectedIds,b=t.lastUserSelect,I=t.nodeRefs,y=t.leafRefs,g=t.baseClassNames,m=t.nodeRenderer,w=t.nodeAction,O=t.setsize,N=t.posinset,D=t.level,C=t.propagateCollapse,U=t.propagateSelect,M=t.multiSelect,L=t.togglableSelect,k=t.clickAction,_=t.state,B=function(e){if(!(e.ctrlKey||e.altKey||e.shiftKey))if(u.has(a.id)&&C){var t=[a.id].concat(c(G(r,a.id,new Set)));l({type:S,ids:t,lastInteractedWith:a.id})}else l({type:A,id:a.id,lastInteractedWith:a.id})},z=function(){return l({type:j,id:a.id,lastInteractedWith:a.id})},K=function(e){if(e.shiftKey){var t=J({data:r,expandedIds:u,from:b,to:a.id}).filter((function(e){return!f.has(e)}));t=U?te(r,t,f):t,l({type:T,select:!0,multiSelect:M,ids:t,lastInteractedWith:a.id,lastManuallyToggled:a.id})}else e.ctrlKey||k===v.select?(l({type:L?le(r,a.id,d,f):E,id:a.id,multiSelect:M,lastInteractedWith:a.id,lastManuallyToggled:a.id}),U&&!f.has(a.id)&&l({type:x,ids:te(r,[a.id],f),select:!L||!d.has(a.id),multiSelect:M,lastInteractedWith:a.id,lastManuallyToggled:a.id})):k===v.exclusiveSelect?l({type:L?W:E,id:a.id,multiSelect:!1,lastInteractedWith:a.id,lastManuallyToggled:a.id}):k===v.focus&&l({type:j,id:a.id,lastInteractedWith:a.id})},P=function(t){var n;return e(t,(i(n={},"".concat(t,"--expanded"),u.has(a.id)),i(n,"".concat(t,"--selected"),d.has(a.id)),i(n,"".concat(t,"--focused"),s===a.id&&o),n))},V="select"===w?{"aria-selected":Z({isSelected:d.has(a.id),isDisabled:f.has(a.id),multiSelect:M})}:{"aria-checked":ee({isSelected:d.has(a.id),isDisabled:f.has(a.id),isHalfSelected:p.has(a.id),multiSelect:M})};return H(r,a.id)||a.isBranch?n.createElement("li",Object.assign({role:"treeitem","aria-expanded":u.has(a.id),"aria-setsize":O,"aria-posinset":N,"aria-level":D,"aria-disabled":f.has(a.id),tabIndex:s===a.id?0:-1,ref:function(e){null!=(null==I?void 0:I.current)&&null!=e&&(I.current[a.id]=e)},className:g.branchWrapper},V),n.createElement(n.Fragment,null,m({element:a,isBranch:!0,isSelected:d.has(a.id),isHalfSelected:p.has(a.id),isExpanded:u.has(a.id),isDisabled:f.has(a.id),dispatch:l,getNodeProps:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.onClick;return{onClick:null==n?F(K,B,z):F(n,z),className:e(P(g.node),g.branch),ref:function(e){null!=(null==y?void 0:y.current)&&(y.current[a.id]=e)}}},setsize:O,posinset:N,level:D,handleSelect:K,handleExpand:B,treeState:_}),n.createElement(oe,Object.assign({getClasses:P},function(e){e.setsize,e.posinset;return h(e,["setsize","posinset"])}(t))))):n.createElement("li",{role:"none",className:P(g.leafListItem)},m({element:a,isBranch:!1,isSelected:d.has(a.id),isHalfSelected:!1,isExpanded:!1,isDisabled:f.has(a.id),dispatch:l,getNodeProps:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.onClick;return Object.assign({role:"treeitem",tabIndex:s===a.id?0:-1,onClick:F(null==n?K:n,z),ref:function(e){null!=(null==I?void 0:I.current)&&null!=(null==y?void 0:y.current)&&(I.current[a.id]=e,y.current[a.id]=e)},className:e(P(g.node),g.leaf),"aria-setsize":O,"aria-posinset":N,"aria-level":D,disabled:f.has(a.id),"aria-disabled":f.has(a.id)},V)},setsize:O,posinset:N,level:D,handleSelect:K,handleExpand:R,treeState:_}))},oe=function(e){var t=e.data,a=e.element,l=e.expandedIds,r=e.getClasses,i=e.baseClassNames,s=e.level,c=h(e,["data","element","expandedIds","getClasses","baseClassNames","level"]);return n.createElement("ul",{role:"group",className:r(i.nodeGroup)},l.has(a.id)&&a.children.length>0&&a.children.map((function(e,r){return n.createElement(ce,Object.assign({data:t,expandedIds:l,baseClassNames:i,key:"".concat(e,"-").concat(d(e)),element:de(t,e),setsize:a.children.length,posinset:r+1,level:s+1},c))})))},ue=function(e){var t=e.data,n=e.controlledSelectedIds,d=e.controlledExpandedIds,i=e.defaultExpandedIds,o=e.defaultSelectedIds,u=e.defaultDisabledIds,h=e.nodeRefs,p=e.leafRefs,v=e.onSelect,b=e.onNodeSelect,I=e.onExpand,W=e.onLoadData,T=e.togglableSelect,D=e.multiSelect,C=e.propagateSelect,U=e.propagateSelectUpwards,F=e.treeRef,V=e.focusedId,Y=re(t),q=s(r(se,{selectedIds:new Set(n||o),controlledIds:new Set(n),tabbableId:Y.children[0],isFocused:!1,expandedIds:new Set(d||i),halfSelectedIds:new Set,lastUserSelect:Y.children[0],lastInteractedWith:null,lastManuallyToggled:null,disabledIds:new Set(u)}),2),X=q[0],$=q[1],J=X.selectedIds,Q=X.expandedIds,Z=X.disabledIds,ee=X.tabbableId,ne=X.halfSelectedIds,le=X.lastAction,ie=X.lastInteractedWith,ce=X.lastManuallyToggled,oe=z(J)||new Set,ue=B(J,oe);l((function(){var e;if(null!=v&&v!==R){var n,a=f(ue);try{for(a.s();!(n=a.n()).done;){var l=n.value,r=H(t,l)||!!(null===(e=de(t,ee))||void 0===e?void 0:e.isBranch);v({element:de(t,l),isBranch:r,isExpanded:!!r&&Q.has(l),isSelected:J.has(l),isDisabled:Z.has(l),isHalfSelected:!!r&&ne.has(l),treeState:X})}}catch(e){a.e(e)}finally{a.f()}}}),[t,J,Q,Z,ne,ue,v,X]),l((function(){null!=b&&b!==R&&null!=ce&&ue.size&&(b({element:de(t,ce),isSelected:J.has(ce),isBranch:H(t,ce),treeState:X}),$({type:M}))}),[ce,J,ue]);var fe=z(Q)||new Set;l((function(){var e=B(Q,fe);if(null!=I&&I!==R){var n,a=f(e);try{for(a.s();!(n=a.n()).done;){var l=n.value;I({element:de(t,l),isExpanded:Q.has(l),isSelected:J.has(l),isDisabled:Z.has(l),isHalfSelected:ne.has(l),treeState:X})}}catch(e){a.e(e)}finally{a.f()}}}),[t,J,Q,Z,ne,fe,I,X]);var he,pe,ve=(he=t,pe=a(),l((function(){pe.current=he})),pe.current||new Map);l((function(){var e=B(Q,fe);if(W){var n,a=f(e);try{for(a.s();!(n=a.n()).done;){var l=n.value;W({element:de(t,l),isExpanded:Q.has(l),isSelected:J.has(l),isDisabled:Z.has(l),isHalfSelected:ne.has(l),treeState:X})}}catch(e){a.e(e)}finally{a.f()}if(ve!==t&&T&&C){var r,d=f(Q);try{for(d.s();!(r=d.n()).done;){var i=r.value;J.has(i)&&$({type:x,ids:te(t,[i],Z),select:!0,multiSelect:D,lastInteractedWith:i})}}catch(e){d.e(e)}finally{d.f()}}}}),[t,J,Q,Z,ne,fe,W,X]),l((function(){if(ve!==t){var e=re(t);e.children.length&&$({type:k,tabbableId:t.find((function(e){return e.id===X.tabbableId}))?X.tabbableId:e.children[0],lastInteractedWith:t.find((function(e){return e.id===X.lastInteractedWith}))?X.lastInteractedWith:null,lastManuallyToggled:t.find((function(e){return e.id===X.lastManuallyToggled}))?X.lastManuallyToggled:null,lastUserSelect:t.find((function(e){return e.id===X.lastUserSelect}))?X.lastUserSelect:e.children[0]})}}),[t]);var be=B(new Set(n),J);return l((function(){var e=n||o;if(n&&be.size&&$({type:L,ids:n,multiSelect:D}),e){var a,l=f(e);try{for(l.s();!(a=l.n()).done;){var r=a.value;C&&!Z.has(r)&&$({type:x,ids:te(t,[r],Z),select:!0,multiSelect:D,lastInteractedWith:r})}}catch(e){l.e(e)}finally{l.f()}}}),[n]),l((function(){var e=new Set(d),n=_(e,fe),a=_(fe,e);if(a.size){var l,r=f(a);try{for(r.s();!(l=r.n()).done;){var i=l.value;if(H(t,i)||de(t,i).isBranch){var s=[i].concat(c(G(t,i,new Set)));$({type:S,ids:s,lastInteractedWith:i})}}}catch(e){r.e(e)}finally{r.f()}}if(n.size){var o,u=f(n);try{for(u.s();!(o=u.n()).done;){var h=o.value;if(H(t,h)||de(t,h).isBranch){var p=K(t,h);$(p?{type:m,ids:[h,p],lastInteractedWith:h}:{type:g,id:h,lastInteractedWith:h})}}}catch(e){u.e(e)}finally{u.f()}}}),[d]),l((function(){if(U){var e=new Set(c(ue));ie&&le!==j&&le!==y&&le!==g&&le!==A&&e.add(ie);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=f(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 u=de(e,o).children.filter((function(e){return!a.has(e)}));if(0===u.length)break;if(u.some((function(e){return n.has(e)||i.some.has(e)&&!i.none.has(e)||l.has(e)&&!i.none.has(e)})))u.every((function(e){return n.has(e)}))?i.every.add(o):i.some.add(o);else{var h=P(e,c,a).find((function(e){return n.has(e)}));if(!r&&h){G(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,J,Z,ne,D),r=l.every,d=l.some,i=l.none;n&&e.forEach((function(e){H(t,e)&&(G(t,e,new Set).every((function(e){return J.has(e)}))&&r.add(e))}));var s,o=f(r);try{for(o.s();!(s=o.n()).done;){var u=s.value;J.has(u)||$({type:E,id:u,multiSelect:D||ae(t,u,J),keepFocus:!0,NotUserAction:!0,lastInteractedWith:ie})}}catch(e){o.e(e)}finally{o.f()}var h,p=f(d);try{for(p.s();!(h=p.n()).done;){var v=h.value;ne.has(v)||$({type:w,id:v,lastInteractedWith:ie,keepFocus:!0,NotUserAction:!0})}}catch(e){p.e(e)}finally{p.f()}var b,I=f(i);try{for(I.s();!(b=I.n()).done;){var S=b.value;(J.has(S)||ne.has(S))&&$({type:O,id:S,multiSelect:D,keepFocus:!0,NotUserAction:!0,lastInteractedWith:ie,lastManuallyToggled:ce})}}catch(e){I.e(e)}finally{I.f()}}}),[t,D,U,J,Q,Z,ne,le,oe,ue,ie,be]),l((function(){if(null!=ie&&(null!=ee&&null!=(null==h?void 0:h.current)&&null!=(null==p?void 0:p.current)&&(null==(null==F?void 0:F.current)||document.activeElement&&F.current.contains(document.activeElement)||V))){var e=h.current[ee];!function(e){null!=e&&e.scrollIntoView&&e.scrollIntoView({block:"nearest"})}(p.current[ie]),function(e){null!=e&&e.focus&&e.focus({preventScroll:!0})}(e)}}),[ee,h,p,ie]),l((function(){if(V||$({type:N,id:Y.children[0]}),V&&t.find((function(e){return e.id===V}))){var e=function e(t,n){var a=K(t,n),l=a&&(H(t,a)||de(t,a).isBranch);return a&&l?[a].concat(c(e(t,a))):[]}(t,V);e.length&&$({type:m,ids:e,lastInteractedWith:V}),$({type:j,id:V,lastInteractedWith:V})}}),[V]),[X,$]},fe=n.forwardRef((function(t,l){var r=t.data,i=t.selectedIds,c=t.nodeRenderer,o=t.onSelect,u=void 0===o?R:o,f=t.onNodeSelect,b=void 0===f?R:f,I=t.onExpand,y=void 0===I?R:I,S=t.onLoadData,g=t.className,m=void 0===g?"":g,w=t.multiSelect,E=void 0!==w&&w,O=t.propagateSelect,A=void 0!==O&&O,W=t.propagateSelectUpwards,x=void 0!==W&&W,T=t.propagateCollapse,j=void 0!==T&&T,N=t.expandOnKeyboardSelect,C=void 0!==N&&N,U=t.togglableSelect,M=void 0!==U&&U,L=t.defaultExpandedIds,k=void 0===L?[]:L,F=t.defaultSelectedIds,_=void 0===F?[]:F,B=t.defaultDisabledIds,z=void 0===B?[]:B,H=t.clickAction,K=void 0===H?v.select:H,P=t.nodeAction,G=void 0===P?"select":P,V=t.expandedIds,Y=t.focusedId,q=t.onBlur,X=h(t,["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(ie(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(ie(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.");re(e).children.length||console.warn("TreeView have no nodes to display.")}(r);var $=a({}),J=a({}),Q=a(null);null!=l&&(Q=l);var Z=s(ue({data:r,controlledSelectedIds:i,controlledExpandedIds:V,defaultExpandedIds:k,defaultSelectedIds:_,defaultDisabledIds:z,nodeRefs:$,leafRefs:J,onSelect:u,onNodeSelect:b,onExpand:y,onLoadData:S,togglableSelect:M,multiSelect:E,propagateSelect:A,propagateSelectUpwards:x,treeRef:Q,focusedId:Y}),2),ee=Z[0],te=Z[1];return A=A&&E,n.createElement("ul",Object.assign({className:e(p.root,m),role:"tree","aria-multiselectable":"select"===G?E:void 0,ref:Q,onBlur:function(e){ne(e,Q.current,(function(){q&&q({treeState:ee,dispatch:te}),te({type:D})}))},onKeyDown:he({data:r,tabbableId:ee.tabbableId,expandedIds:ee.expandedIds,selectedIds:ee.selectedIds,disabledIds:ee.disabledIds,halfSelectedIds:ee.halfSelectedIds,clickAction:K,dispatch:te,propagateCollapse:j,propagateSelect:A,multiSelect:E,expandOnKeyboardSelect:C,togglableSelect:M})},X),re(r).children.map((function(e,t){return n.createElement(ce,Object.assign({key:"".concat(e,"-").concat(d(e)),data:r,element:de(r,e),setsize:re(r).children.length,posinset:t+1,level:1},ee,{state:ee,dispatch:te,nodeRefs:$,leafRefs:J,baseClassNames:p,nodeRenderer:c,propagateCollapse:j,propagateSelect:A,propagateSelectUpwards:x,multiSelect:E,togglableSelect:M,clickAction:K,nodeAction:G}))})))})),he=function(e){var t=e.data,n=e.expandedIds,a=e.selectedIds,l=e.disabledIds,r=e.tabbableId,d=e.dispatch,i=e.propagateCollapse,s=e.propagateSelect,o=e.multiSelect,u=e.expandOnKeyboardSelect,f=e.togglableSelect,h=e.clickAction;return function(e){var p=de(t,r),b=p.id;if(e.ctrlKey){if("a"===e.key&&h!==v.focus){e.preventDefault();var I=t.filter((function(e){return null!==e.parent})).map((function(e){return e.id})).filter((function(e){return!l.has(e)}));d({type:x,multiSelect:o,select:Array.from(a).filter((function(e){return!l.has(e)})).length!==I.length,ids:I,lastInteractedWith:p.id})}else if(e.shiftKey&&("Home"===e.key||"End"===e.key)&&h!==v.focus){var w="Home"===e.key?re(t).children[0]:q(t,b,n),O=J({data:t,expandedIds:n,from:b,to:w}).filter((function(e){return!l.has(e)}));d({type:x,multiSelect:o,select:!0,ids:s?te(t,O,l):O}),d({type:j,id:w,lastInteractedWith:w})}}else{if(e.shiftKey)switch(e.key){case"ArrowUp":e.preventDefault();var W=X(t,b,n);return void(null==W||l.has(W)||(h!==v.focus&&d({type:x,ids:s?te(t,[W],l):[W],select:!0,multiSelect:o,lastInteractedWith:W,lastManuallyToggled:W}),d({type:j,id:W,lastInteractedWith:W})));case"ArrowDown":e.preventDefault();var T=$(t,b,n);return void(null==T||l.has(T)||(h!==v.focus&&d({type:x,ids:s?te(t,[T],l):[T],multiSelect:o,select:!0,lastInteractedWith:T,lastManuallyToggled:T}),d({type:j,id:T,lastInteractedWith:T})))}switch(e.key){case"ArrowDown":e.preventDefault();var N=$(t,b,n);return void(null!=N&&d({type:j,id:N,lastInteractedWith:N}));case"ArrowUp":e.preventDefault();var D=X(t,b,n);return void(null!=D&&d({type:j,id:D,lastInteractedWith:D}));case"ArrowLeft":if(e.preventDefault(),(H(t,b)||p.isBranch)&&n.has(r))if(i){var C=[b].concat(c(G(t,b,new Set)));d({type:S,ids:C,lastInteractedWith:p.id})}else d({type:y,id:b,lastInteractedWith:b});else if(!re(t).children.includes(b)){var U=K(t,b);if(null==U)throw new Error("parentId of root element is null");d({type:j,id:U,lastInteractedWith:U})}return;case"ArrowRight":return e.preventDefault(),void((H(t,b)||p.isBranch)&&(n.has(r)?d({type:j,id:p.children[0],lastInteractedWith:p.children[0]}):d({type:g,id:b,lastInteractedWith:b})));case"Home":e.preventDefault(),d({type:j,id:re(t).children[0],lastInteractedWith:re(t).children[0]});break;case"End":e.preventDefault();var M=q(t,re(t).id,n);return void d({type:j,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=de(t,L).children.filter((function(e){return H(t,e)||de(t,e).isBranch}));return void d({type:m,ids:k,lastInteractedWith:b});case"Enter":case" ":case"Spacebar":if(e.preventDefault(),h===v.focus)return;return d({type:f?le(t,b,a,l):E,id:b,multiSelect:o,lastInteractedWith:b,lastManuallyToggled:b}),s&&!l.has(p.id)&&d({type:x,ids:te(t,[b],l),select:!f||!a.has(b),multiSelect:o,lastInteractedWith:b,lastManuallyToggled:b}),void(u&&d({type:A,id:b,lastInteractedWith:b}));default:if(1===e.key.length)for(var R=$(t,b,n);R!==b;)if(null!=R){if(de(t,R).name[0].toLowerCase()===e.key.toLowerCase())return void d({type:j,id:R,lastInteractedWith:b});R=$(t,R,n)}else R=re(t).children[0];return}}}};fe.propTypes={data:t.array.isRequired,onSelect:t.func,onNodeSelect:t.func,onExpand:t.func,className:t.string,nodeRenderer:t.func.isRequired,defaultExpandedIds:t.array,defaultSelectedIds:t.array,expandedIds:t.array,selectedIds:t.array,defaultDisabledIds:t.array,propagateCollapse:t.bool,propagateSelect:t.bool,propagateSelectUpwards:t.bool,multiSelect:t.bool,expandOnKeyboardSelect:t.bool,togglableSelect:t.bool,nodeAction:t.oneOf(I),clickAction:t.oneOf(b),onBlur:t.func,onLoadData:t.func,focusedId:t.oneOfType([t.string,t.number])};export default fe;export{b as CLICK_ACTIONS,Q as flattenTree};