"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[2362],{63185:function(Ie,me,l){l.d(me,{C2:function(){return k}});var F=l(11568),Z=l(14747),Q=l(83262),xe=l(83559);const De=o=>{const{checkboxCls:m}=o,R=`${m}-wrapper`;return[{[`${m}-group`]:Object.assign(Object.assign({},(0,Z.Wf)(o)),{display:"inline-flex",flexWrap:"wrap",columnGap:o.marginXS,[`> ${o.antCls}-row`]:{flex:1}}),[R]:Object.assign(Object.assign({},(0,Z.Wf)(o)),{display:"inline-flex",alignItems:"baseline",cursor:"pointer","&:after":{display:"inline-block",width:0,overflow:"hidden",content:"'\\a0'"},[`& + ${R}`]:{marginInlineStart:0},[`&${R}-in-form-item`]:{'input[type="checkbox"]':{width:14,height:14}}}),[m]:Object.assign(Object.assign({},(0,Z.Wf)(o)),{position:"relative",whiteSpace:"nowrap",lineHeight:1,cursor:"pointer",borderRadius:o.borderRadiusSM,alignSelf:"center",[`${m}-input`]:{position:"absolute",inset:0,zIndex:1,cursor:"pointer",opacity:0,margin:0,[`&:focus-visible + ${m}-inner`]:Object.assign({},(0,Z.oN)(o))},[`${m}-inner`]:{boxSizing:"border-box",display:"block",width:o.checkboxSize,height:o.checkboxSize,direction:"ltr",backgroundColor:o.colorBgContainer,border:`${(0,F.bf)(o.lineWidth)} ${o.lineType} ${o.colorBorder}`,borderRadius:o.borderRadiusSM,borderCollapse:"separate",transition:`all ${o.motionDurationSlow}`,"&:after":{boxSizing:"border-box",position:"absolute",top:"50%",insetInlineStart:"25%",display:"table",width:o.calc(o.checkboxSize).div(14).mul(5).equal(),height:o.calc(o.checkboxSize).div(14).mul(8).equal(),border:`${(0,F.bf)(o.lineWidthBold)} solid ${o.colorWhite}`,borderTop:0,borderInlineStart:0,transform:"rotate(45deg) scale(0) translate(-50%,-50%)",opacity:0,content:'""',transition:`all ${o.motionDurationFast} ${o.motionEaseInBack}, opacity ${o.motionDurationFast}`}},"& + span":{paddingInlineStart:o.paddingXS,paddingInlineEnd:o.paddingXS}})},{[`
        ${R}:not(${R}-disabled),
        ${m}:not(${m}-disabled)
      `]:{[`&:hover ${m}-inner`]:{borderColor:o.colorPrimary}},[`${R}:not(${R}-disabled)`]:{[`&:hover ${m}-checked:not(${m}-disabled) ${m}-inner`]:{backgroundColor:o.colorPrimaryHover,borderColor:"transparent"},[`&:hover ${m}-checked:not(${m}-disabled):after`]:{borderColor:o.colorPrimaryHover}}},{[`${m}-checked`]:{[`${m}-inner`]:{backgroundColor:o.colorPrimary,borderColor:o.colorPrimary,"&:after":{opacity:1,transform:"rotate(45deg) scale(1) translate(-50%,-50%)",transition:`all ${o.motionDurationMid} ${o.motionEaseOutBack} ${o.motionDurationFast}`}}},[`
        ${R}-checked:not(${R}-disabled),
        ${m}-checked:not(${m}-disabled)
      `]:{[`&:hover ${m}-inner`]:{backgroundColor:o.colorPrimaryHover,borderColor:"transparent"}}},{[m]:{"&-indeterminate":{[`${m}-inner`]:{backgroundColor:`${o.colorBgContainer} !important`,borderColor:`${o.colorBorder} !important`,"&:after":{top:"50%",insetInlineStart:"50%",width:o.calc(o.fontSizeLG).div(2).equal(),height:o.calc(o.fontSizeLG).div(2).equal(),backgroundColor:o.colorPrimary,border:0,transform:"translate(-50%, -50%) scale(1)",opacity:1,content:'""'}},[`&:hover ${m}-inner`]:{backgroundColor:`${o.colorBgContainer} !important`,borderColor:`${o.colorPrimary} !important`}}}},{[`${R}-disabled`]:{cursor:"not-allowed"},[`${m}-disabled`]:{[`&, ${m}-input`]:{cursor:"not-allowed",pointerEvents:"none"},[`${m}-inner`]:{background:o.colorBgContainerDisabled,borderColor:o.colorBorder,"&:after":{borderColor:o.colorTextDisabled}},"&:after":{display:"none"},"& + span":{color:o.colorTextDisabled},[`&${m}-indeterminate ${m}-inner::after`]:{background:o.colorTextDisabled}}}]};function k(o,m){const R=(0,Q.IX)(m,{checkboxCls:`.${o}`,checkboxSize:m.controlInteractiveSize});return[De(R)]}me.ZP=(0,xe.I$)("Checkbox",(o,m)=>{let{prefixCls:R}=m;return[k(R,o)]})},40561:function(Ie,me,l){l.d(me,{ZP:function(){return ae},Yk:function(){return A},TM:function(){return _}});var F=l(11568),Z=l(63185),Q=l(14747),xe=l(33507),De=l(83262),k=l(83559);const o=c=>{let{treeCls:s,treeNodeCls:h,directoryNodeSelectedBg:I,directoryNodeSelectedColor:S,motionDurationMid:n,borderRadius:t,controlItemBgHover:f}=c;return{[`${s}${s}-directory ${h}`]:{[`${s}-node-content-wrapper`]:{position:"static",[`> *:not(${s}-drop-indicator)`]:{position:"relative"},"&:hover":{background:"transparent"},"&:before":{position:"absolute",inset:0,transition:`background-color ${n}`,content:'""',borderRadius:t},"&:hover:before":{background:f}},[`${s}-switcher, ${s}-checkbox, ${s}-draggable-icon`]:{zIndex:1},"&-selected":{[`${s}-switcher, ${s}-draggable-icon`]:{color:S},[`${s}-node-content-wrapper`]:{color:S,background:"transparent","&:before, &:hover:before":{background:I}}}}}},m=new F.E4("ant-tree-node-fx-do-not-use",{"0%":{opacity:0},"100%":{opacity:1}}),R=(c,s)=>({[`.${c}-switcher-icon`]:{display:"inline-block",fontSize:10,verticalAlign:"baseline",svg:{transition:`transform ${s.motionDurationSlow}`}}}),g=(c,s)=>({[`.${c}-drop-indicator`]:{position:"absolute",zIndex:1,height:2,backgroundColor:s.colorPrimary,borderRadius:1,pointerEvents:"none","&:after":{position:"absolute",top:-3,insetInlineStart:-6,width:8,height:8,backgroundColor:"transparent",border:`${(0,F.bf)(s.lineWidthBold)} solid ${s.colorPrimary}`,borderRadius:"50%",content:'""'}}}),re=(c,s)=>{const{treeCls:h,treeNodeCls:I,treeNodePadding:S,titleHeight:n,indentSize:t,nodeSelectedBg:f,nodeHoverBg:E,colorTextQuaternary:K,controlItemBgActiveDisabled:D}=s;return{[h]:Object.assign(Object.assign({},(0,Q.Wf)(s)),{background:s.colorBgContainer,borderRadius:s.borderRadius,transition:`background-color ${s.motionDurationSlow}`,"&-rtl":{direction:"rtl"},[`&${h}-rtl ${h}-switcher_close ${h}-switcher-icon svg`]:{transform:"rotate(90deg)"},[`&-focused:not(:hover):not(${h}-active-focused)`]:Object.assign({},(0,Q.oN)(s)),[`${h}-list-holder-inner`]:{alignItems:"flex-start"},[`&${h}-block-node`]:{[`${h}-list-holder-inner`]:{alignItems:"stretch",[`${h}-node-content-wrapper`]:{flex:"auto"},[`${I}.dragging:after`]:{position:"absolute",inset:0,border:`1px solid ${s.colorPrimary}`,opacity:0,animationName:m,animationDuration:s.motionDurationSlow,animationPlayState:"running",animationFillMode:"forwards",content:'""',pointerEvents:"none",borderRadius:s.borderRadius}}},[I]:{display:"flex",alignItems:"flex-start",marginBottom:S,lineHeight:(0,F.bf)(n),position:"relative","&:before":{content:'""',position:"absolute",zIndex:1,insetInlineStart:0,width:"100%",top:"100%",height:S},[`&-disabled ${h}-node-content-wrapper`]:{color:s.colorTextDisabled,cursor:"not-allowed","&:hover":{background:"transparent"}},[`${h}-checkbox-disabled + ${h}-node-selected,&${I}-disabled${I}-selected ${h}-node-content-wrapper`]:{backgroundColor:D},[`${h}-checkbox-disabled`]:{pointerEvents:"unset"},[`&:not(${I}-disabled)`]:{[`${h}-node-content-wrapper`]:{"&:hover":{color:s.nodeHoverColor}}},[`&-active ${h}-node-content-wrapper`]:{background:s.controlItemBgHover},[`&:not(${I}-disabled).filter-node ${h}-title`]:{color:s.colorPrimary,fontWeight:500},"&-draggable":{cursor:"grab",[`${h}-draggable-icon`]:{flexShrink:0,width:n,textAlign:"center",visibility:"visible",color:K},[`&${I}-disabled ${h}-draggable-icon`]:{visibility:"hidden"}}},[`${h}-indent`]:{alignSelf:"stretch",whiteSpace:"nowrap",userSelect:"none","&-unit":{display:"inline-block",width:t}},[`${h}-draggable-icon`]:{visibility:"hidden"},[`${h}-switcher, ${h}-checkbox`]:{marginInlineEnd:s.calc(s.calc(n).sub(s.controlInteractiveSize)).div(2).equal()},[`${h}-switcher`]:Object.assign(Object.assign({},R(c,s)),{position:"relative",flex:"none",alignSelf:"stretch",width:n,textAlign:"center",cursor:"pointer",userSelect:"none",transition:`all ${s.motionDurationSlow}`,"&-noop":{cursor:"unset"},"&:before":{pointerEvents:"none",content:'""',width:n,height:n,position:"absolute",left:{_skip_check_:!0,value:0},top:0,borderRadius:s.borderRadius,transition:`all ${s.motionDurationSlow}`},[`&:not(${h}-switcher-noop):hover:before`]:{backgroundColor:s.colorBgTextHover},[`&_close ${h}-switcher-icon svg`]:{transform:"rotate(-90deg)"},"&-loading-icon":{color:s.colorPrimary},"&-leaf-line":{position:"relative",zIndex:1,display:"inline-block",width:"100%",height:"100%","&:before":{position:"absolute",top:0,insetInlineEnd:s.calc(n).div(2).equal(),bottom:s.calc(S).mul(-1).equal(),marginInlineStart:-1,borderInlineEnd:`1px solid ${s.colorBorder}`,content:'""'},"&:after":{position:"absolute",width:s.calc(s.calc(n).div(2).equal()).mul(.8).equal(),height:s.calc(n).div(2).equal(),borderBottom:`1px solid ${s.colorBorder}`,content:'""'}}}),[`${h}-node-content-wrapper`]:Object.assign(Object.assign({position:"relative",minHeight:n,paddingBlock:0,paddingInline:s.paddingXS,background:"transparent",borderRadius:s.borderRadius,cursor:"pointer",transition:`all ${s.motionDurationMid}, border 0s, line-height 0s, box-shadow 0s`},g(c,s)),{"&:hover":{backgroundColor:E},[`&${h}-node-selected`]:{color:s.nodeSelectedColor,backgroundColor:f},[`${h}-iconEle`]:{display:"inline-block",width:n,height:n,textAlign:"center",verticalAlign:"top","&:empty":{display:"none"}}}),[`${h}-unselectable ${h}-node-content-wrapper:hover`]:{backgroundColor:"transparent"},[`${I}.drop-container > [draggable]`]:{boxShadow:`0 0 0 2px ${s.colorPrimary}`},"&-show-line":{[`${h}-indent-unit`]:{position:"relative",height:"100%","&:before":{position:"absolute",top:0,insetInlineEnd:s.calc(n).div(2).equal(),bottom:s.calc(S).mul(-1).equal(),borderInlineEnd:`1px solid ${s.colorBorder}`,content:'""'},"&-end:before":{display:"none"}},[`${h}-switcher`]:{background:"transparent","&-line-icon":{verticalAlign:"-0.15em"}}},[`${I}-leaf-last ${h}-switcher-leaf-line:before`]:{top:"auto !important",bottom:"auto !important",height:`${(0,F.bf)(s.calc(n).div(2).equal())} !important`}})}},A=(c,s)=>{const h=`.${c}`,I=`${h}-treenode`,S=s.calc(s.paddingXS).div(2).equal(),n=(0,De.IX)(s,{treeCls:h,treeNodeCls:I,treeNodePadding:S});return[re(c,n),o(n)]},_=c=>{const{controlHeightSM:s,controlItemBgHover:h,controlItemBgActive:I}=c,S=s;return{titleHeight:S,indentSize:S,nodeHoverBg:h,nodeHoverColor:c.colorText,nodeSelectedBg:I,nodeSelectedColor:c.colorText}},X=c=>{const{colorTextLightSolid:s,colorPrimary:h}=c;return Object.assign(Object.assign({},_(c)),{directoryNodeSelectedColor:s,directoryNodeSelectedBg:h})};var ae=(0,k.I$)("Tree",(c,s)=>{let{prefixCls:h}=s;return[{[c.componentCls]:(0,Z.C2)(`${h}-checkbox`,c)},A(h,c),(0,xe.Z)(c)]},X)},61639:function(Ie,me,l){var F=l(67294),Z=l(68265),Q=l(26911),xe=l(50888),De=l(28638),k=l(13982),o=l(93967),m=l.n(o),R=l(96159);const g=re=>{const{prefixCls:A,switcherIcon:_,treeNodeProps:X,showLine:ae,switcherLoadingIcon:c}=re,{isLeaf:s,expanded:h,loading:I}=X;if(I)return F.isValidElement(c)?c:F.createElement(xe.Z,{className:`${A}-switcher-loading-icon`});let S;if(ae&&typeof ae=="object"&&(S=ae.showLeafIcon),s){if(!ae)return null;if(typeof S!="boolean"&&S){const f=typeof S=="function"?S(X):S,E=`${A}-switcher-line-custom-icon`;return F.isValidElement(f)?(0,R.Tm)(f,{className:m()(f.props.className||"",E)}):f}return S?F.createElement(Q.Z,{className:`${A}-switcher-line-icon`}):F.createElement("span",{className:`${A}-switcher-leaf-line`})}const n=`${A}-switcher-icon`,t=typeof _=="function"?_(X):_;return F.isValidElement(t)?(0,R.Tm)(t,{className:m()(t.props.className||"",n)}):t!==void 0?t:ae?h?F.createElement(De.Z,{className:`${A}-switcher-line-icon`}):F.createElement(k.Z,{className:`${A}-switcher-line-icon`}):F.createElement(Z.Z,{className:n})};me.Z=g},86128:function(Ie,me,l){l.d(me,{Z:function(){return S}});var F=l(87462),Z=l(4942),Q=l(1413),xe=l(97685),De=l(45987),k=l(67294),o=l(93967),m=l.n(o),R=l(64217),g=l(27822),re=function(t){for(var f=t.prefixCls,E=t.level,K=t.isStart,D=t.isEnd,M="".concat(f,"-indent-unit"),j=[],N=0;N<E;N+=1)j.push(k.createElement("span",{key:N,className:m()(M,(0,Z.Z)((0,Z.Z)({},"".concat(M,"-start"),K[N]),"".concat(M,"-end"),D[N]))}));return k.createElement("span",{"aria-hidden":"true",className:"".concat(f,"-indent")},j)},A=k.memo(re),_=l(35381),X=l(1089),ae=["eventKey","className","style","dragOver","dragOverGapTop","dragOverGapBottom","isLeaf","isStart","isEnd","expanded","selected","checked","halfChecked","loading","domRef","active","data","onMouseMove","selectable"],c="open",s="close",h="---",I=function(t){var f,E,K,D=t.eventKey,M=t.className,j=t.style,N=t.dragOver,ie=t.dragOverGapTop,ue=t.dragOverGapBottom,de=t.isLeaf,oe=t.isStart,le=t.isEnd,V=t.expanded,fe=t.selected,se=t.checked,ce=t.halfChecked,he=t.loading,q=t.domRef,Pe=t.active,ve=t.data,Le=t.onMouseMove,ke=t.selectable,_e=(0,De.Z)(t,ae),i=k.useContext(g.k),B=k.useContext(g.y),we=k.useRef(null),$e=k.useState(!1),Te=(0,xe.Z)($e,2),Oe=Te[0],Me=Te[1],be=!!(i.disabled||t.disabled||(f=B.nodeDisabled)!==null&&f!==void 0&&f.call(B,ve)),u=k.useMemo(function(){return!i.checkable||t.checkable===!1?!1:i.checkable},[i.checkable,t.checkable]),ee=function(x){be||i.onNodeSelect(x,(0,X.F)(t))},z=function(x){be||!u||t.disableCheckbox||i.onNodeCheck(x,(0,X.F)(t),!se)},e=k.useMemo(function(){return typeof ke=="boolean"?ke:i.selectable},[ke,i.selectable]),p=function(x){i.onNodeClick(x,(0,X.F)(t)),e?ee(x):z(x)},$=function(x){i.onNodeDoubleClick(x,(0,X.F)(t))},G=function(x){i.onNodeMouseEnter(x,(0,X.F)(t))},r=function(x){i.onNodeMouseLeave(x,(0,X.F)(t))},d=function(x){i.onNodeContextMenu(x,(0,X.F)(t))},a=k.useMemo(function(){return!!(i.draggable&&(!i.draggable.nodeDraggable||i.draggable.nodeDraggable(ve)))},[i.draggable,ve]),v=function(x){x.stopPropagation(),Me(!0),i.onNodeDragStart(x,t);try{x.dataTransfer.setData("text/plain","")}catch(Ne){}},b=function(x){x.preventDefault(),x.stopPropagation(),i.onNodeDragEnter(x,t)},O=function(x){x.preventDefault(),x.stopPropagation(),i.onNodeDragOver(x,t)},P=function(x){x.stopPropagation(),i.onNodeDragLeave(x,t)},T=function(x){x.stopPropagation(),Me(!1),i.onNodeDragEnd(x,t)},U=function(x){x.preventDefault(),x.stopPropagation(),Me(!1),i.onNodeDrop(x,t)},y=function(x){he||i.onNodeExpand(x,(0,X.F)(t))},C=k.useMemo(function(){var J=(0,_.Z)(i.keyEntities,D)||{},x=J.children;return!!(x||[]).length},[i.keyEntities,D]),W=k.useMemo(function(){return de===!1?!1:de||!i.loadData&&!C||i.loadData&&t.loaded&&!C},[de,i.loadData,C,t.loaded]);k.useEffect(function(){he||typeof i.loadData=="function"&&V&&!W&&!t.loaded&&i.onNodeLoad((0,X.F)(t))},[he,i.loadData,i.onNodeLoad,V,W,t]);var L=k.useMemo(function(){var J;return(J=i.draggable)!==null&&J!==void 0&&J.icon?k.createElement("span",{className:"".concat(i.prefixCls,"-draggable-icon")},i.draggable.icon):null},[i.draggable]),w=function(x){var Ne=t.switcherIcon||i.switcherIcon;return typeof Ne=="function"?Ne((0,Q.Z)((0,Q.Z)({},t),{},{isLeaf:x})):Ne},te=function(){if(W){var x=w(!0);return x!==!1?k.createElement("span",{className:m()("".concat(i.prefixCls,"-switcher"),"".concat(i.prefixCls,"-switcher-noop"))},x):null}var Ne=w(!1);return Ne!==!1?k.createElement("span",{onClick:y,className:m()("".concat(i.prefixCls,"-switcher"),"".concat(i.prefixCls,"-switcher_").concat(V?c:s))},Ne):null},Y=k.useMemo(function(){if(!u)return null;var J=typeof u!="boolean"?u:null;return k.createElement("span",{className:m()("".concat(i.prefixCls,"-checkbox"),(0,Z.Z)((0,Z.Z)((0,Z.Z)({},"".concat(i.prefixCls,"-checkbox-checked"),se),"".concat(i.prefixCls,"-checkbox-indeterminate"),!se&&ce),"".concat(i.prefixCls,"-checkbox-disabled"),be||t.disableCheckbox)),onClick:z,role:"checkbox","aria-checked":ce?"mixed":se,"aria-disabled":be||t.disableCheckbox,"aria-label":"Select ".concat(typeof t.title=="string"?t.title:"tree node")},J)},[u,se,ce,be,t.disableCheckbox,t.title]),H=k.useMemo(function(){return W?null:V?c:s},[W,V]),ne=k.useMemo(function(){return k.createElement("span",{className:m()("".concat(i.prefixCls,"-iconEle"),"".concat(i.prefixCls,"-icon__").concat(H||"docu"),(0,Z.Z)({},"".concat(i.prefixCls,"-icon_loading"),he))})},[i.prefixCls,H,he]),ge=k.useMemo(function(){var J=!!i.draggable,x=!t.disabled&&J&&i.dragOverNodeKey===D;return x?i.dropIndicatorRender({dropPosition:i.dropPosition,dropLevelOffset:i.dropLevelOffset,indent:i.indent,prefixCls:i.prefixCls,direction:i.direction}):null},[i.dropPosition,i.dropLevelOffset,i.indent,i.prefixCls,i.direction,i.draggable,i.dragOverNodeKey,i.dropIndicatorRender]),Ee=k.useMemo(function(){var J=t.title,x=J===void 0?h:J,Ne="".concat(i.prefixCls,"-node-content-wrapper"),Fe;if(i.showIcon){var Ae=t.icon||i.icon;Fe=Ae?k.createElement("span",{className:m()("".concat(i.prefixCls,"-iconEle"),"".concat(i.prefixCls,"-icon__customize"))},typeof Ae=="function"?Ae(t):Ae):ne}else i.loadData&&he&&(Fe=ne);var Be;return typeof x=="function"?Be=x(ve):i.titleRender?Be=i.titleRender(ve):Be=x,k.createElement("span",{ref:we,title:typeof x=="string"?x:"",className:m()(Ne,"".concat(Ne,"-").concat(H||"normal"),(0,Z.Z)({},"".concat(i.prefixCls,"-node-selected"),!be&&(fe||Oe))),onMouseEnter:G,onMouseLeave:r,onContextMenu:d,onClick:p,onDoubleClick:$},Fe,k.createElement("span",{className:"".concat(i.prefixCls,"-title")},Be),ge)},[i.prefixCls,i.showIcon,t,i.icon,ne,i.titleRender,ve,H,G,r,d,p,$]),ye=(0,R.Z)(_e,{aria:!0,data:!0}),Ke=(0,_.Z)(i.keyEntities,D)||{},Se=Ke.level,Ce=le[le.length-1],Ze=!be&&a,Ue=i.draggingNodeKey===D,Re=ke!==void 0?{"aria-selected":!!ke}:void 0;return k.createElement("div",(0,F.Z)({ref:q,role:"treeitem","aria-expanded":de?void 0:V,className:m()(M,"".concat(i.prefixCls,"-treenode"),(K={},(0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)(K,"".concat(i.prefixCls,"-treenode-disabled"),be),"".concat(i.prefixCls,"-treenode-switcher-").concat(V?"open":"close"),!de),"".concat(i.prefixCls,"-treenode-checkbox-checked"),se),"".concat(i.prefixCls,"-treenode-checkbox-indeterminate"),ce),"".concat(i.prefixCls,"-treenode-selected"),fe),"".concat(i.prefixCls,"-treenode-loading"),he),"".concat(i.prefixCls,"-treenode-active"),Pe),"".concat(i.prefixCls,"-treenode-leaf-last"),Ce),"".concat(i.prefixCls,"-treenode-draggable"),a),"dragging",Ue),(0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)((0,Z.Z)(K,"drop-target",i.dropTargetKey===D),"drop-container",i.dropContainerKey===D),"drag-over",!be&&N),"drag-over-gap-top",!be&&ie),"drag-over-gap-bottom",!be&&ue),"filter-node",(E=i.filterTreeNode)===null||E===void 0?void 0:E.call(i,(0,X.F)(t))),"".concat(i.prefixCls,"-treenode-leaf"),W))),style:j,draggable:Ze,onDragStart:Ze?v:void 0,onDragEnter:a?b:void 0,onDragOver:a?O:void 0,onDragLeave:a?P:void 0,onDrop:a?U:void 0,onDragEnd:a?T:void 0,onMouseMove:Le},Re,ye),k.createElement(A,{prefixCls:i.prefixCls,level:Se,isStart:oe,isEnd:le}),L,te(),Y,Ee)};I.isTreeNode=1;var S=I},27822:function(Ie,me,l){l.d(me,{k:function(){return Z},y:function(){return Q}});var F=l(67294),Z=F.createContext(null),Q=F.createContext({})},70593:function(Ie,me,l){l.d(me,{OF:function(){return D.Z},y6:function(){return s.y},ZP:function(){return be}});var F=l(87462),Z=l(71002),Q=l(1413),xe=l(74902),De=l(15671),k=l(43144),o=l(97326),m=l(60136),R=l(29388),g=l(4942),re=l(93967),A=l.n(re),_=l(15105),X=l(64217),ae=l(80334),c=l(67294),s=l(27822),h=function(ee){var z=ee.dropPosition,e=ee.dropLevelOffset,p=ee.indent,$={pointerEvents:"none",position:"absolute",right:0,backgroundColor:"red",height:2};switch(z){case-1:$.top=0,$.left=-e*p;break;case 1:$.bottom=0,$.left=-e*p;break;case 0:$.bottom=0,$.left=p;break}return c.createElement("div",{style:$})},I=h;function S(u){if(u==null)throw new TypeError("Cannot destructure "+u)}var n=l(97685),t=l(45987),f=l(8410),E=l(87718),K=l(29372),D=l(86128);function M(u,ee){var z=c.useState(!1),e=(0,n.Z)(z,2),p=e[0],$=e[1];(0,f.Z)(function(){if(p)return u(),function(){ee()}},[p]),(0,f.Z)(function(){return $(!0),function(){$(!1)}},[])}var j=M,N=l(1089),ie=["className","style","motion","motionNodes","motionType","onMotionStart","onMotionEnd","active","treeNodeRequiredProps"],ue=c.forwardRef(function(u,ee){var z=u.className,e=u.style,p=u.motion,$=u.motionNodes,G=u.motionType,r=u.onMotionStart,d=u.onMotionEnd,a=u.active,v=u.treeNodeRequiredProps,b=(0,t.Z)(u,ie),O=c.useState(!0),P=(0,n.Z)(O,2),T=P[0],U=P[1],y=c.useContext(s.k),C=y.prefixCls,W=$&&G!=="hide";(0,f.Z)(function(){$&&W!==T&&U(W)},[$]);var L=function(){$&&r()},w=c.useRef(!1),te=function(){$&&!w.current&&(w.current=!0,d())};j(L,te);var Y=function(ne){W===ne&&te()};return $?c.createElement(K.ZP,(0,F.Z)({ref:ee,visible:T},p,{motionAppear:G==="show",onVisibleChanged:Y}),function(H,ne){var ge=H.className,Ee=H.style;return c.createElement("div",{ref:ne,className:A()("".concat(C,"-treenode-motion"),ge),style:Ee},$.map(function(ye){var Ke=Object.assign({},(S(ye.data),ye.data)),Se=ye.title,Ce=ye.key,Ze=ye.isStart,Ue=ye.isEnd;delete Ke.children;var Re=(0,N.H8)(Ce,v);return c.createElement(D.Z,(0,F.Z)({},Ke,Re,{title:Se,active:a,data:ye.data,key:Ce,isStart:Ze,isEnd:Ue}))}))}):c.createElement(D.Z,(0,F.Z)({domRef:ee,className:z,style:e},b,{active:a}))}),de=ue;function oe(){var u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],ee=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],z=u.length,e=ee.length;if(Math.abs(z-e)!==1)return{add:!1,key:null};function p($,G){var r=new Map;$.forEach(function(a){r.set(a,!0)});var d=G.filter(function(a){return!r.has(a)});return d.length===1?d[0]:null}return z<e?{add:!0,key:p(u,ee)}:{add:!1,key:p(ee,u)}}function le(u,ee,z){var e=u.findIndex(function(r){return r.key===z}),p=u[e+1],$=ee.findIndex(function(r){return r.key===z});if(p){var G=ee.findIndex(function(r){return r.key===p.key});return ee.slice($+1,G)}return ee.slice($+1)}var V=["prefixCls","data","selectable","checkable","expandedKeys","selectedKeys","checkedKeys","loadedKeys","loadingKeys","halfCheckedKeys","keyEntities","disabled","dragging","dragOverNodeKey","dropPosition","motion","height","itemHeight","virtual","scrollWidth","focusable","activeItem","focused","tabIndex","onKeyDown","onFocus","onBlur","onActiveChange","onListChangeStart","onListChangeEnd"],fe={width:0,height:0,display:"flex",overflow:"hidden",opacity:0,border:0,padding:0,margin:0},se=function(){},ce="RC_TREE_MOTION_".concat(Math.random()),he={key:ce},q={key:ce,level:0,index:0,pos:"0",node:he,nodes:[he]},Pe={parent:null,children:[],pos:q.pos,data:he,title:null,key:ce,isStart:[],isEnd:[]};function ve(u,ee,z,e){return ee===!1||!z?u:u.slice(0,Math.ceil(z/e)+1)}function Le(u){var ee=u.key,z=u.pos;return(0,N.km)(ee,z)}function ke(u){for(var ee=String(u.data.key),z=u;z.parent;)z=z.parent,ee="".concat(z.data.key," > ").concat(ee);return ee}var _e=c.forwardRef(function(u,ee){var z=u.prefixCls,e=u.data,p=u.selectable,$=u.checkable,G=u.expandedKeys,r=u.selectedKeys,d=u.checkedKeys,a=u.loadedKeys,v=u.loadingKeys,b=u.halfCheckedKeys,O=u.keyEntities,P=u.disabled,T=u.dragging,U=u.dragOverNodeKey,y=u.dropPosition,C=u.motion,W=u.height,L=u.itemHeight,w=u.virtual,te=u.scrollWidth,Y=u.focusable,H=u.activeItem,ne=u.focused,ge=u.tabIndex,Ee=u.onKeyDown,ye=u.onFocus,Ke=u.onBlur,Se=u.onActiveChange,Ce=u.onListChangeStart,Ze=u.onListChangeEnd,Ue=(0,t.Z)(u,V),Re=c.useRef(null),J=c.useRef(null);c.useImperativeHandle(ee,function(){return{scrollTo:function(We){Re.current.scrollTo(We)},getIndentWidth:function(){return J.current.offsetWidth}}});var x=c.useState(G),Ne=(0,n.Z)(x,2),Fe=Ne[0],Ae=Ne[1],Be=c.useState(e),Qe=(0,n.Z)(Be,2),He=Qe[0],Je=Qe[1],rt=c.useState(e),qe=(0,n.Z)(rt,2),at=qe[0],ze=qe[1],Ge=c.useState([]),et=(0,n.Z)(Ge,2),ft=et[0],ot=et[1],vt=c.useState(null),st=(0,n.Z)(vt,2),gt=st[0],it=st[1],ct=c.useRef(e);ct.current=e;function dt(){var pe=ct.current;Je(pe),ze(pe),ot([]),it(null),Ze()}(0,f.Z)(function(){Ae(G);var pe=oe(Fe,G);if(pe.key!==null)if(pe.add){var We=He.findIndex(function(Ve){var Ye=Ve.key;return Ye===pe.key}),je=ve(le(He,e,pe.key),w,W,L),tt=He.slice();tt.splice(We+1,0,Pe),ze(tt),ot(je),it("show")}else{var Xe=e.findIndex(function(Ve){var Ye=Ve.key;return Ye===pe.key}),lt=ve(le(e,He,pe.key),w,W,L),nt=e.slice();nt.splice(Xe+1,0,Pe),ze(nt),ot(lt),it("hide")}else He!==e&&(Je(e),ze(e))},[G,e]),c.useEffect(function(){T||dt()},[T]);var ht=C?at:e,ut={expandedKeys:G,selectedKeys:r,loadedKeys:a,loadingKeys:v,checkedKeys:d,halfCheckedKeys:b,dragOverNodeKey:U,dropPosition:y,keyEntities:O};return c.createElement(c.Fragment,null,ne&&H&&c.createElement("span",{style:fe,"aria-live":"assertive"},ke(H)),c.createElement("div",null,c.createElement("input",{style:fe,disabled:Y===!1||P,tabIndex:Y!==!1?ge:null,onKeyDown:Ee,onFocus:ye,onBlur:Ke,value:"",onChange:se,"aria-label":"for screen reader"})),c.createElement("div",{className:"".concat(z,"-treenode"),"aria-hidden":!0,style:{position:"absolute",pointerEvents:"none",visibility:"hidden",height:0,overflow:"hidden",border:0,padding:0}},c.createElement("div",{className:"".concat(z,"-indent")},c.createElement("div",{ref:J,className:"".concat(z,"-indent-unit")}))),c.createElement(E.Z,(0,F.Z)({},Ue,{data:ht,itemKey:Le,height:W,fullHeight:!1,virtual:w,itemHeight:L,scrollWidth:te,prefixCls:"".concat(z,"-list"),ref:Re,role:"tree",onVisibleChange:function(We){We.every(function(je){return Le(je)!==ce})&&dt()}}),function(pe){var We=pe.pos,je=Object.assign({},(S(pe.data),pe.data)),tt=pe.title,Xe=pe.key,lt=pe.isStart,nt=pe.isEnd,Ve=(0,N.km)(Xe,We);delete je.key,delete je.children;var Ye=(0,N.H8)(Ve,ut);return c.createElement(de,(0,F.Z)({},je,Ye,{title:tt,active:!!H&&Xe===H.key,pos:We,data:pe.data,isStart:lt,isEnd:nt,motion:C,motionNodes:Xe===ce?ft:null,motionType:gt,onMotionStart:Ce,onMotionEnd:dt,treeNodeRequiredProps:ut,onMouseMove:function(){Se(null)}}))}))}),i=_e,B=l(10225),we=l(17341),$e=l(35381),Te=10,Oe=function(u){(0,m.Z)(z,u);var ee=(0,R.Z)(z);function z(){var e;(0,De.Z)(this,z);for(var p=arguments.length,$=new Array(p),G=0;G<p;G++)$[G]=arguments[G];return e=ee.call.apply(ee,[this].concat($)),(0,g.Z)((0,o.Z)(e),"destroyed",!1),(0,g.Z)((0,o.Z)(e),"delayedDragEnterLogic",void 0),(0,g.Z)((0,o.Z)(e),"loadingRetryTimes",{}),(0,g.Z)((0,o.Z)(e),"state",{keyEntities:{},indent:null,selectedKeys:[],checkedKeys:[],halfCheckedKeys:[],loadedKeys:[],loadingKeys:[],expandedKeys:[],draggingNodeKey:null,dragChildrenKeys:[],dropTargetKey:null,dropPosition:null,dropContainerKey:null,dropLevelOffset:null,dropTargetPos:null,dropAllowed:!0,dragOverNodeKey:null,treeData:[],flattenNodes:[],focused:!1,activeKey:null,listChanging:!1,prevProps:null,fieldNames:(0,N.w$)()}),(0,g.Z)((0,o.Z)(e),"dragStartMousePosition",null),(0,g.Z)((0,o.Z)(e),"dragNodeProps",null),(0,g.Z)((0,o.Z)(e),"currentMouseOverDroppableNodeKey",null),(0,g.Z)((0,o.Z)(e),"listRef",c.createRef()),(0,g.Z)((0,o.Z)(e),"onNodeDragStart",function(r,d){var a=e.state,v=a.expandedKeys,b=a.keyEntities,O=e.props.onDragStart,P=d.eventKey;e.dragNodeProps=d,e.dragStartMousePosition={x:r.clientX,y:r.clientY};var T=(0,B._5)(v,P);e.setState({draggingNodeKey:P,dragChildrenKeys:(0,B.wA)(P,b),indent:e.listRef.current.getIndentWidth()}),e.setExpandedKeys(T),window.addEventListener("dragend",e.onWindowDragEnd),O==null||O({event:r,node:(0,N.F)(d)})}),(0,g.Z)((0,o.Z)(e),"onNodeDragEnter",function(r,d){var a=e.state,v=a.expandedKeys,b=a.keyEntities,O=a.dragChildrenKeys,P=a.flattenNodes,T=a.indent,U=e.props,y=U.onDragEnter,C=U.onExpand,W=U.allowDrop,L=U.direction,w=d.pos,te=d.eventKey;if(e.currentMouseOverDroppableNodeKey!==te&&(e.currentMouseOverDroppableNodeKey=te),!e.dragNodeProps){e.resetDragState();return}var Y=(0,B.OM)(r,e.dragNodeProps,d,T,e.dragStartMousePosition,W,P,b,v,L),H=Y.dropPosition,ne=Y.dropLevelOffset,ge=Y.dropTargetKey,Ee=Y.dropContainerKey,ye=Y.dropTargetPos,Ke=Y.dropAllowed,Se=Y.dragOverNodeKey;if(O.includes(ge)||!Ke){e.resetDragState();return}if(e.delayedDragEnterLogic||(e.delayedDragEnterLogic={}),Object.keys(e.delayedDragEnterLogic).forEach(function(Ce){clearTimeout(e.delayedDragEnterLogic[Ce])}),e.dragNodeProps.eventKey!==d.eventKey&&(r.persist(),e.delayedDragEnterLogic[w]=window.setTimeout(function(){if(e.state.draggingNodeKey!==null){var Ce=(0,xe.Z)(v),Ze=(0,$e.Z)(b,d.eventKey);Ze&&(Ze.children||[]).length&&(Ce=(0,B.L0)(v,d.eventKey)),e.props.hasOwnProperty("expandedKeys")||e.setExpandedKeys(Ce),C==null||C(Ce,{node:(0,N.F)(d),expanded:!0,nativeEvent:r.nativeEvent})}},800)),e.dragNodeProps.eventKey===ge&&ne===0){e.resetDragState();return}e.setState({dragOverNodeKey:Se,dropPosition:H,dropLevelOffset:ne,dropTargetKey:ge,dropContainerKey:Ee,dropTargetPos:ye,dropAllowed:Ke}),y==null||y({event:r,node:(0,N.F)(d),expandedKeys:v})}),(0,g.Z)((0,o.Z)(e),"onNodeDragOver",function(r,d){var a=e.state,v=a.dragChildrenKeys,b=a.flattenNodes,O=a.keyEntities,P=a.expandedKeys,T=a.indent,U=e.props,y=U.onDragOver,C=U.allowDrop,W=U.direction;if(e.dragNodeProps){var L=(0,B.OM)(r,e.dragNodeProps,d,T,e.dragStartMousePosition,C,b,O,P,W),w=L.dropPosition,te=L.dropLevelOffset,Y=L.dropTargetKey,H=L.dropContainerKey,ne=L.dropTargetPos,ge=L.dropAllowed,Ee=L.dragOverNodeKey;v.includes(Y)||!ge||(e.dragNodeProps.eventKey===Y&&te===0?e.state.dropPosition===null&&e.state.dropLevelOffset===null&&e.state.dropTargetKey===null&&e.state.dropContainerKey===null&&e.state.dropTargetPos===null&&e.state.dropAllowed===!1&&e.state.dragOverNodeKey===null||e.resetDragState():w===e.state.dropPosition&&te===e.state.dropLevelOffset&&Y===e.state.dropTargetKey&&H===e.state.dropContainerKey&&ne===e.state.dropTargetPos&&ge===e.state.dropAllowed&&Ee===e.state.dragOverNodeKey||e.setState({dropPosition:w,dropLevelOffset:te,dropTargetKey:Y,dropContainerKey:H,dropTargetPos:ne,dropAllowed:ge,dragOverNodeKey:Ee}),y==null||y({event:r,node:(0,N.F)(d)}))}}),(0,g.Z)((0,o.Z)(e),"onNodeDragLeave",function(r,d){e.currentMouseOverDroppableNodeKey===d.eventKey&&!r.currentTarget.contains(r.relatedTarget)&&(e.resetDragState(),e.currentMouseOverDroppableNodeKey=null);var a=e.props.onDragLeave;a==null||a({event:r,node:(0,N.F)(d)})}),(0,g.Z)((0,o.Z)(e),"onWindowDragEnd",function(r){e.onNodeDragEnd(r,null,!0),window.removeEventListener("dragend",e.onWindowDragEnd)}),(0,g.Z)((0,o.Z)(e),"onNodeDragEnd",function(r,d){var a=e.props.onDragEnd;e.setState({dragOverNodeKey:null}),e.cleanDragState(),a==null||a({event:r,node:(0,N.F)(d)}),e.dragNodeProps=null,window.removeEventListener("dragend",e.onWindowDragEnd)}),(0,g.Z)((0,o.Z)(e),"onNodeDrop",function(r,d){var a,v=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,b=e.state,O=b.dragChildrenKeys,P=b.dropPosition,T=b.dropTargetKey,U=b.dropTargetPos,y=b.dropAllowed;if(y){var C=e.props.onDrop;if(e.setState({dragOverNodeKey:null}),e.cleanDragState(),T!==null){var W=(0,Q.Z)((0,Q.Z)({},(0,N.H8)(T,e.getTreeNodeRequiredProps())),{},{active:((a=e.getActiveItem())===null||a===void 0?void 0:a.key)===T,data:(0,$e.Z)(e.state.keyEntities,T).node}),L=O.includes(T);(0,ae.ZP)(!L,"Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.");var w=(0,B.yx)(U),te={event:r,node:(0,N.F)(W),dragNode:e.dragNodeProps?(0,N.F)(e.dragNodeProps):null,dragNodesKeys:[e.dragNodeProps.eventKey].concat(O),dropToGap:P!==0,dropPosition:P+Number(w[w.length-1])};v||C==null||C(te),e.dragNodeProps=null}}}),(0,g.Z)((0,o.Z)(e),"cleanDragState",function(){var r=e.state.draggingNodeKey;r!==null&&e.setState({draggingNodeKey:null,dropPosition:null,dropContainerKey:null,dropTargetKey:null,dropLevelOffset:null,dropAllowed:!0,dragOverNodeKey:null}),e.dragStartMousePosition=null,e.currentMouseOverDroppableNodeKey=null}),(0,g.Z)((0,o.Z)(e),"triggerExpandActionExpand",function(r,d){var a=e.state,v=a.expandedKeys,b=a.flattenNodes,O=d.expanded,P=d.key,T=d.isLeaf;if(!(T||r.shiftKey||r.metaKey||r.ctrlKey)){var U=b.filter(function(C){return C.key===P})[0],y=(0,N.F)((0,Q.Z)((0,Q.Z)({},(0,N.H8)(P,e.getTreeNodeRequiredProps())),{},{data:U.data}));e.setExpandedKeys(O?(0,B._5)(v,P):(0,B.L0)(v,P)),e.onNodeExpand(r,y)}}),(0,g.Z)((0,o.Z)(e),"onNodeClick",function(r,d){var a=e.props,v=a.onClick,b=a.expandAction;b==="click"&&e.triggerExpandActionExpand(r,d),v==null||v(r,d)}),(0,g.Z)((0,o.Z)(e),"onNodeDoubleClick",function(r,d){var a=e.props,v=a.onDoubleClick,b=a.expandAction;b==="doubleClick"&&e.triggerExpandActionExpand(r,d),v==null||v(r,d)}),(0,g.Z)((0,o.Z)(e),"onNodeSelect",function(r,d){var a=e.state.selectedKeys,v=e.state,b=v.keyEntities,O=v.fieldNames,P=e.props,T=P.onSelect,U=P.multiple,y=d.selected,C=d[O.key],W=!y;W?U?a=(0,B.L0)(a,C):a=[C]:a=(0,B._5)(a,C);var L=a.map(function(w){var te=(0,$e.Z)(b,w);return te?te.node:null}).filter(Boolean);e.setUncontrolledState({selectedKeys:a}),T==null||T(a,{event:"select",selected:W,node:d,selectedNodes:L,nativeEvent:r.nativeEvent})}),(0,g.Z)((0,o.Z)(e),"onNodeCheck",function(r,d,a){var v=e.state,b=v.keyEntities,O=v.checkedKeys,P=v.halfCheckedKeys,T=e.props,U=T.checkStrictly,y=T.onCheck,C=d.key,W,L={event:"check",node:d,checked:a,nativeEvent:r.nativeEvent};if(U){var w=a?(0,B.L0)(O,C):(0,B._5)(O,C),te=(0,B._5)(P,C);W={checked:w,halfChecked:te},L.checkedNodes=w.map(function(ye){return(0,$e.Z)(b,ye)}).filter(Boolean).map(function(ye){return ye.node}),e.setUncontrolledState({checkedKeys:w})}else{var Y=(0,we.S)([].concat((0,xe.Z)(O),[C]),!0,b),H=Y.checkedKeys,ne=Y.halfCheckedKeys;if(!a){var ge=new Set(H);ge.delete(C);var Ee=(0,we.S)(Array.from(ge),{checked:!1,halfCheckedKeys:ne},b);H=Ee.checkedKeys,ne=Ee.halfCheckedKeys}W=H,L.checkedNodes=[],L.checkedNodesPositions=[],L.halfCheckedKeys=ne,H.forEach(function(ye){var Ke=(0,$e.Z)(b,ye);if(Ke){var Se=Ke.node,Ce=Ke.pos;L.checkedNodes.push(Se),L.checkedNodesPositions.push({node:Se,pos:Ce})}}),e.setUncontrolledState({checkedKeys:H},!1,{halfCheckedKeys:ne})}y==null||y(W,L)}),(0,g.Z)((0,o.Z)(e),"onNodeLoad",function(r){var d,a=r.key,v=e.state.keyEntities,b=(0,$e.Z)(v,a);if(!(b!=null&&(d=b.children)!==null&&d!==void 0&&d.length)){var O=new Promise(function(P,T){e.setState(function(U){var y=U.loadedKeys,C=y===void 0?[]:y,W=U.loadingKeys,L=W===void 0?[]:W,w=e.props,te=w.loadData,Y=w.onLoad;if(!te||C.includes(a)||L.includes(a))return null;var H=te(r);return H.then(function(){var ne=e.state.loadedKeys,ge=(0,B.L0)(ne,a);Y==null||Y(ge,{event:"load",node:r}),e.setUncontrolledState({loadedKeys:ge}),e.setState(function(Ee){return{loadingKeys:(0,B._5)(Ee.loadingKeys,a)}}),P()}).catch(function(ne){if(e.setState(function(Ee){return{loadingKeys:(0,B._5)(Ee.loadingKeys,a)}}),e.loadingRetryTimes[a]=(e.loadingRetryTimes[a]||0)+1,e.loadingRetryTimes[a]>=Te){var ge=e.state.loadedKeys;(0,ae.ZP)(!1,"Retry for `loadData` many times but still failed. No more retry."),e.setUncontrolledState({loadedKeys:(0,B.L0)(ge,a)}),P()}T(ne)}),{loadingKeys:(0,B.L0)(L,a)}})});return O.catch(function(){}),O}}),(0,g.Z)((0,o.Z)(e),"onNodeMouseEnter",function(r,d){var a=e.props.onMouseEnter;a==null||a({event:r,node:d})}),(0,g.Z)((0,o.Z)(e),"onNodeMouseLeave",function(r,d){var a=e.props.onMouseLeave;a==null||a({event:r,node:d})}),(0,g.Z)((0,o.Z)(e),"onNodeContextMenu",function(r,d){var a=e.props.onRightClick;a&&(r.preventDefault(),a({event:r,node:d}))}),(0,g.Z)((0,o.Z)(e),"onFocus",function(){var r=e.props.onFocus;e.setState({focused:!0});for(var d=arguments.length,a=new Array(d),v=0;v<d;v++)a[v]=arguments[v];r==null||r.apply(void 0,a)}),(0,g.Z)((0,o.Z)(e),"onBlur",function(){var r=e.props.onBlur;e.setState({focused:!1}),e.onActiveChange(null);for(var d=arguments.length,a=new Array(d),v=0;v<d;v++)a[v]=arguments[v];r==null||r.apply(void 0,a)}),(0,g.Z)((0,o.Z)(e),"getTreeNodeRequiredProps",function(){var r=e.state,d=r.expandedKeys,a=r.selectedKeys,v=r.loadedKeys,b=r.loadingKeys,O=r.checkedKeys,P=r.halfCheckedKeys,T=r.dragOverNodeKey,U=r.dropPosition,y=r.keyEntities;return{expandedKeys:d||[],selectedKeys:a||[],loadedKeys:v||[],loadingKeys:b||[],checkedKeys:O||[],halfCheckedKeys:P||[],dragOverNodeKey:T,dropPosition:U,keyEntities:y}}),(0,g.Z)((0,o.Z)(e),"setExpandedKeys",function(r){var d=e.state,a=d.treeData,v=d.fieldNames,b=(0,N.oH)(a,r,v);e.setUncontrolledState({expandedKeys:r,flattenNodes:b},!0)}),(0,g.Z)((0,o.Z)(e),"onNodeExpand",function(r,d){var a=e.state.expandedKeys,v=e.state,b=v.listChanging,O=v.fieldNames,P=e.props,T=P.onExpand,U=P.loadData,y=d.expanded,C=d[O.key];if(!b){var W=a.includes(C),L=!y;if((0,ae.ZP)(y&&W||!y&&!W,"Expand state not sync with index check"),a=L?(0,B.L0)(a,C):(0,B._5)(a,C),e.setExpandedKeys(a),T==null||T(a,{node:d,expanded:L,nativeEvent:r.nativeEvent}),L&&U){var w=e.onNodeLoad(d);w&&w.then(function(){var te=(0,N.oH)(e.state.treeData,a,O);e.setUncontrolledState({flattenNodes:te})}).catch(function(){var te=e.state.expandedKeys,Y=(0,B._5)(te,C);e.setExpandedKeys(Y)})}}}),(0,g.Z)((0,o.Z)(e),"onListChangeStart",function(){e.setUncontrolledState({listChanging:!0})}),(0,g.Z)((0,o.Z)(e),"onListChangeEnd",function(){setTimeout(function(){e.setUncontrolledState({listChanging:!1})})}),(0,g.Z)((0,o.Z)(e),"onActiveChange",function(r){var d=e.state.activeKey,a=e.props,v=a.onActiveChange,b=a.itemScrollOffset,O=b===void 0?0:b;d!==r&&(e.setState({activeKey:r}),r!==null&&e.scrollTo({key:r,offset:O}),v==null||v(r))}),(0,g.Z)((0,o.Z)(e),"getActiveItem",function(){var r=e.state,d=r.activeKey,a=r.flattenNodes;return d===null?null:a.find(function(v){var b=v.key;return b===d})||null}),(0,g.Z)((0,o.Z)(e),"offsetActiveKey",function(r){var d=e.state,a=d.flattenNodes,v=d.activeKey,b=a.findIndex(function(T){var U=T.key;return U===v});b===-1&&r<0&&(b=a.length),b=(b+r+a.length)%a.length;var O=a[b];if(O){var P=O.key;e.onActiveChange(P)}else e.onActiveChange(null)}),(0,g.Z)((0,o.Z)(e),"onKeyDown",function(r){var d=e.state,a=d.activeKey,v=d.expandedKeys,b=d.checkedKeys,O=d.fieldNames,P=e.props,T=P.onKeyDown,U=P.checkable,y=P.selectable;switch(r.which){case _.Z.UP:{e.offsetActiveKey(-1),r.preventDefault();break}case _.Z.DOWN:{e.offsetActiveKey(1),r.preventDefault();break}}var C=e.getActiveItem();if(C&&C.data){var W=e.getTreeNodeRequiredProps(),L=C.data.isLeaf===!1||!!(C.data[O.children]||[]).length,w=(0,N.F)((0,Q.Z)((0,Q.Z)({},(0,N.H8)(a,W)),{},{data:C.data,active:!0}));switch(r.which){case _.Z.LEFT:{L&&v.includes(a)?e.onNodeExpand({},w):C.parent&&e.onActiveChange(C.parent.key),r.preventDefault();break}case _.Z.RIGHT:{L&&!v.includes(a)?e.onNodeExpand({},w):C.children&&C.children.length&&e.onActiveChange(C.children[0].key),r.preventDefault();break}case _.Z.ENTER:case _.Z.SPACE:{U&&!w.disabled&&w.checkable!==!1&&!w.disableCheckbox?e.onNodeCheck({},w,!b.includes(a)):!U&&y&&!w.disabled&&w.selectable!==!1&&e.onNodeSelect({},w);break}}}T==null||T(r)}),(0,g.Z)((0,o.Z)(e),"setUncontrolledState",function(r){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;if(!e.destroyed){var v=!1,b=!0,O={};Object.keys(r).forEach(function(P){if(e.props.hasOwnProperty(P)){b=!1;return}v=!0,O[P]=r[P]}),v&&(!d||b)&&e.setState((0,Q.Z)((0,Q.Z)({},O),a))}}),(0,g.Z)((0,o.Z)(e),"scrollTo",function(r){e.listRef.current.scrollTo(r)}),e}return(0,k.Z)(z,[{key:"componentDidMount",value:function(){this.destroyed=!1,this.onUpdated()}},{key:"componentDidUpdate",value:function(){this.onUpdated()}},{key:"onUpdated",value:function(){var p=this.props,$=p.activeKey,G=p.itemScrollOffset,r=G===void 0?0:G;$!==void 0&&$!==this.state.activeKey&&(this.setState({activeKey:$}),$!==null&&this.scrollTo({key:$,offset:r}))}},{key:"componentWillUnmount",value:function(){window.removeEventListener("dragend",this.onWindowDragEnd),this.destroyed=!0}},{key:"resetDragState",value:function(){this.setState({dragOverNodeKey:null,dropPosition:null,dropLevelOffset:null,dropTargetKey:null,dropContainerKey:null,dropTargetPos:null,dropAllowed:!1})}},{key:"render",value:function(){var p=this.state,$=p.focused,G=p.flattenNodes,r=p.keyEntities,d=p.draggingNodeKey,a=p.activeKey,v=p.dropLevelOffset,b=p.dropContainerKey,O=p.dropTargetKey,P=p.dropPosition,T=p.dragOverNodeKey,U=p.indent,y=this.props,C=y.prefixCls,W=y.className,L=y.style,w=y.showLine,te=y.focusable,Y=y.tabIndex,H=Y===void 0?0:Y,ne=y.selectable,ge=y.showIcon,Ee=y.icon,ye=y.switcherIcon,Ke=y.draggable,Se=y.checkable,Ce=y.checkStrictly,Ze=y.disabled,Ue=y.motion,Re=y.loadData,J=y.filterTreeNode,x=y.height,Ne=y.itemHeight,Fe=y.scrollWidth,Ae=y.virtual,Be=y.titleRender,Qe=y.dropIndicatorRender,He=y.onContextMenu,Je=y.onScroll,rt=y.direction,qe=y.rootClassName,at=y.rootStyle,ze=(0,X.Z)(this.props,{aria:!0,data:!0}),Ge;Ke&&((0,Z.Z)(Ke)==="object"?Ge=Ke:typeof Ke=="function"?Ge={nodeDraggable:Ke}:Ge={});var et={prefixCls:C,selectable:ne,showIcon:ge,icon:Ee,switcherIcon:ye,draggable:Ge,draggingNodeKey:d,checkable:Se,checkStrictly:Ce,disabled:Ze,keyEntities:r,dropLevelOffset:v,dropContainerKey:b,dropTargetKey:O,dropPosition:P,dragOverNodeKey:T,indent:U,direction:rt,dropIndicatorRender:Qe,loadData:Re,filterTreeNode:J,titleRender:Be,onNodeClick:this.onNodeClick,onNodeDoubleClick:this.onNodeDoubleClick,onNodeExpand:this.onNodeExpand,onNodeSelect:this.onNodeSelect,onNodeCheck:this.onNodeCheck,onNodeLoad:this.onNodeLoad,onNodeMouseEnter:this.onNodeMouseEnter,onNodeMouseLeave:this.onNodeMouseLeave,onNodeContextMenu:this.onNodeContextMenu,onNodeDragStart:this.onNodeDragStart,onNodeDragEnter:this.onNodeDragEnter,onNodeDragOver:this.onNodeDragOver,onNodeDragLeave:this.onNodeDragLeave,onNodeDragEnd:this.onNodeDragEnd,onNodeDrop:this.onNodeDrop};return c.createElement(s.k.Provider,{value:et},c.createElement("div",{className:A()(C,W,qe,(0,g.Z)((0,g.Z)((0,g.Z)({},"".concat(C,"-show-line"),w),"".concat(C,"-focused"),$),"".concat(C,"-active-focused"),a!==null)),style:at},c.createElement(i,(0,F.Z)({ref:this.listRef,prefixCls:C,style:L,data:G,disabled:Ze,selectable:ne,checkable:!!Se,motion:Ue,dragging:d!==null,height:x,itemHeight:Ne,virtual:Ae,focusable:te,focused:$,tabIndex:H,activeItem:this.getActiveItem(),onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,onActiveChange:this.onActiveChange,onListChangeStart:this.onListChangeStart,onListChangeEnd:this.onListChangeEnd,onContextMenu:He,onScroll:Je,scrollWidth:Fe},this.getTreeNodeRequiredProps(),ze))))}}],[{key:"getDerivedStateFromProps",value:function(p,$){var G=$.prevProps,r={prevProps:p};function d(H){return!G&&p.hasOwnProperty(H)||G&&G[H]!==p[H]}var a,v=$.fieldNames;if(d("fieldNames")&&(v=(0,N.w$)(p.fieldNames),r.fieldNames=v),d("treeData")?a=p.treeData:d("children")&&((0,ae.ZP)(!1,"`children` of Tree is deprecated. Please use `treeData` instead."),a=(0,N.zn)(p.children)),a){r.treeData=a;var b=(0,N.I8)(a,{fieldNames:v});r.keyEntities=(0,Q.Z)((0,g.Z)({},ce,q),b.keyEntities)}var O=r.keyEntities||$.keyEntities;if(d("expandedKeys")||G&&d("autoExpandParent"))r.expandedKeys=p.autoExpandParent||!G&&p.defaultExpandParent?(0,B.r7)(p.expandedKeys,O):p.expandedKeys;else if(!G&&p.defaultExpandAll){var P=(0,Q.Z)({},O);delete P[ce];var T=[];Object.keys(P).forEach(function(H){var ne=P[H];ne.children&&ne.children.length&&T.push(ne.key)}),r.expandedKeys=T}else!G&&p.defaultExpandedKeys&&(r.expandedKeys=p.autoExpandParent||p.defaultExpandParent?(0,B.r7)(p.defaultExpandedKeys,O):p.defaultExpandedKeys);if(r.expandedKeys||delete r.expandedKeys,a||r.expandedKeys){var U=(0,N.oH)(a||$.treeData,r.expandedKeys||$.expandedKeys,v);r.flattenNodes=U}if(p.selectable&&(d("selectedKeys")?r.selectedKeys=(0,B.BT)(p.selectedKeys,p):!G&&p.defaultSelectedKeys&&(r.selectedKeys=(0,B.BT)(p.defaultSelectedKeys,p))),p.checkable){var y;if(d("checkedKeys")?y=(0,B.E6)(p.checkedKeys)||{}:!G&&p.defaultCheckedKeys?y=(0,B.E6)(p.defaultCheckedKeys)||{}:a&&(y=(0,B.E6)(p.checkedKeys)||{checkedKeys:$.checkedKeys,halfCheckedKeys:$.halfCheckedKeys}),y){var C=y,W=C.checkedKeys,L=W===void 0?[]:W,w=C.halfCheckedKeys,te=w===void 0?[]:w;if(!p.checkStrictly){var Y=(0,we.S)(L,!0,O);L=Y.checkedKeys,te=Y.halfCheckedKeys}r.checkedKeys=L,r.halfCheckedKeys=te}}return d("loadedKeys")&&(r.loadedKeys=p.loadedKeys),r}}]),z}(c.Component);(0,g.Z)(Oe,"defaultProps",{prefixCls:"rc-tree",showLine:!1,showIcon:!0,selectable:!0,multiple:!1,checkable:!1,disabled:!1,checkStrictly:!1,draggable:!1,defaultExpandParent:!0,autoExpandParent:!1,defaultExpandAll:!1,defaultExpandedKeys:[],defaultCheckedKeys:[],defaultSelectedKeys:[],dropIndicatorRender:I,allowDrop:function(){return!0},expandAction:!1}),(0,g.Z)(Oe,"TreeNode",D.Z);var Me=Oe,be=Me},10225:function(Ie,me,l){l.d(me,{BT:function(){return c},E6:function(){return I},L0:function(){return g},OM:function(){return ae},_5:function(){return R},r7:function(){return S},wA:function(){return A},yx:function(){return re}});var F=l(74902),Z=l(71002),Q=l(80334),xe=l(67294),De=l(86128),k=l(35381),o=l(1089),m=null;function R(n,t){if(!n)return[];var f=n.slice(),E=f.indexOf(t);return E>=0&&f.splice(E,1),f}function g(n,t){var f=(n||[]).slice();return f.indexOf(t)===-1&&f.push(t),f}function re(n){return n.split("-")}function A(n,t){var f=[],E=(0,k.Z)(t,n);function K(){var D=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];D.forEach(function(M){var j=M.key,N=M.children;f.push(j),K(N)})}return K(E.children),f}function _(n){if(n.parent){var t=re(n.pos);return Number(t[t.length-1])===n.parent.children.length-1}return!1}function X(n){var t=re(n.pos);return Number(t[t.length-1])===0}function ae(n,t,f,E,K,D,M,j,N,ie){var ue,de=n.clientX,oe=n.clientY,le=n.target.getBoundingClientRect(),V=le.top,fe=le.height,se=(ie==="rtl"?-1:1)*(((K==null?void 0:K.x)||0)-de),ce=(se-12)/E,he=N.filter(function(be){var u;return(u=j[be])===null||u===void 0||(u=u.children)===null||u===void 0?void 0:u.length}),q=(0,k.Z)(j,f.eventKey);if(oe<V+fe/2){var Pe=M.findIndex(function(be){return be.key===q.key}),ve=Pe<=0?0:Pe-1,Le=M[ve].key;q=(0,k.Z)(j,Le)}var ke=q.key,_e=q,i=q.key,B=0,we=0;if(!he.includes(ke))for(var $e=0;$e<ce&&_(q);$e+=1)q=q.parent,we+=1;var Te=t.data,Oe=q.node,Me=!0;return X(q)&&q.level===0&&oe<V+fe/2&&D({dragNode:Te,dropNode:Oe,dropPosition:-1})&&q.key===f.eventKey?B=-1:(_e.children||[]).length&&he.includes(i)?D({dragNode:Te,dropNode:Oe,dropPosition:0})?B=0:Me=!1:we===0?ce>-1.5?D({dragNode:Te,dropNode:Oe,dropPosition:1})?B=1:Me=!1:D({dragNode:Te,dropNode:Oe,dropPosition:0})?B=0:D({dragNode:Te,dropNode:Oe,dropPosition:1})?B=1:Me=!1:D({dragNode:Te,dropNode:Oe,dropPosition:1})?B=1:Me=!1,{dropPosition:B,dropLevelOffset:we,dropTargetKey:q.key,dropTargetPos:q.pos,dragOverNodeKey:i,dropContainerKey:B===0?null:((ue=q.parent)===null||ue===void 0?void 0:ue.key)||null,dropAllowed:Me}}function c(n,t){if(n){var f=t.multiple;return f?n.slice():n.length?[n[0]]:n}}var s=function(t){return t};function h(n,t){if(!n)return[];var f=t||{},E=f.processProps,K=E===void 0?s:E,D=Array.isArray(n)?n:[n];return D.map(function(M){var j=M.children,N=_objectWithoutProperties(M,m),ie=h(j,t);return React.createElement(TreeNode,_extends({key:N.key},K(N)),ie)})}function I(n){if(!n)return null;var t;if(Array.isArray(n))t={checkedKeys:n,halfCheckedKeys:void 0};else if((0,Z.Z)(n)==="object")t={checkedKeys:n.checked||void 0,halfCheckedKeys:n.halfChecked||void 0};else return(0,Q.ZP)(!1,"`checkedKeys` is not an array or an object"),null;return t}function S(n,t){var f=new Set;function E(K){if(!f.has(K)){var D=(0,k.Z)(t,K);if(D){f.add(K);var M=D.parent,j=D.node;j.disabled||M&&E(M.key)}}}return(n||[]).forEach(function(K){E(K)}),(0,F.Z)(f)}},17341:function(Ie,me,l){l.d(me,{S:function(){return o}});var F=l(80334),Z=l(35381);function Q(m,R){var g=new Set;return m.forEach(function(re){R.has(re)||g.add(re)}),g}function xe(m){var R=m||{},g=R.disabled,re=R.disableCheckbox,A=R.checkable;return!!(g||re)||A===!1}function De(m,R,g,re){for(var A=new Set(m),_=new Set,X=0;X<=g;X+=1){var ae=R.get(X)||new Set;ae.forEach(function(I){var S=I.key,n=I.node,t=I.children,f=t===void 0?[]:t;A.has(S)&&!re(n)&&f.filter(function(E){return!re(E.node)}).forEach(function(E){A.add(E.key)})})}for(var c=new Set,s=g;s>=0;s-=1){var h=R.get(s)||new Set;h.forEach(function(I){var S=I.parent,n=I.node;if(!(re(n)||!I.parent||c.has(I.parent.key))){if(re(I.parent.node)){c.add(S.key);return}var t=!0,f=!1;(S.children||[]).filter(function(E){return!re(E.node)}).forEach(function(E){var K=E.key,D=A.has(K);t&&!D&&(t=!1),!f&&(D||_.has(K))&&(f=!0)}),t&&A.add(S.key),f&&_.add(S.key),c.add(S.key)}})}return{checkedKeys:Array.from(A),halfCheckedKeys:Array.from(Q(_,A))}}function k(m,R,g,re,A){for(var _=new Set(m),X=new Set(R),ae=0;ae<=re;ae+=1){var c=g.get(ae)||new Set;c.forEach(function(S){var n=S.key,t=S.node,f=S.children,E=f===void 0?[]:f;!_.has(n)&&!X.has(n)&&!A(t)&&E.filter(function(K){return!A(K.node)}).forEach(function(K){_.delete(K.key)})})}X=new Set;for(var s=new Set,h=re;h>=0;h-=1){var I=g.get(h)||new Set;I.forEach(function(S){var n=S.parent,t=S.node;if(!(A(t)||!S.parent||s.has(S.parent.key))){if(A(S.parent.node)){s.add(n.key);return}var f=!0,E=!1;(n.children||[]).filter(function(K){return!A(K.node)}).forEach(function(K){var D=K.key,M=_.has(D);f&&!M&&(f=!1),!E&&(M||X.has(D))&&(E=!0)}),f||_.delete(n.key),E&&X.add(n.key),s.add(n.key)}})}return{checkedKeys:Array.from(_),halfCheckedKeys:Array.from(Q(X,_))}}function o(m,R,g,re){var A=[],_;re?_=re:_=xe;var X=new Set(m.filter(function(h){var I=!!(0,Z.Z)(g,h);return I||A.push(h),I})),ae=new Map,c=0;Object.keys(g).forEach(function(h){var I=g[h],S=I.level,n=ae.get(S);n||(n=new Set,ae.set(S,n)),n.add(I),c=Math.max(c,S)}),(0,F.ZP)(!A.length,"Tree missing follow keys: ".concat(A.slice(0,100).map(function(h){return"'".concat(h,"'")}).join(", ")));var s;return R===!0?s=De(X,ae,c,_):s=k(X,R.halfCheckedKeys,ae,c,_),s}},35381:function(Ie,me,l){l.d(me,{Z:function(){return F}});function F(Z,Q){return Z[Q]}},1089:function(Ie,me,l){l.d(me,{F:function(){return S},H8:function(){return I},I8:function(){return h},km:function(){return A},oH:function(){return c},w$:function(){return _},zn:function(){return ae}});var F=l(71002),Z=l(74902),Q=l(1413),xe=l(45987),De=l(50344),k=l(98423),o=l(80334),m=l(35381),R=["children"];function g(n,t){return"".concat(n,"-").concat(t)}function re(n){return n&&n.type&&n.type.isTreeNode}function A(n,t){return n!=null?n:t}function _(n){var t=n||{},f=t.title,E=t._title,K=t.key,D=t.children,M=f||"title";return{title:M,_title:E||[M],key:K||"key",children:D||"children"}}function X(n,t){var f=new Map;function E(K){var D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";(K||[]).forEach(function(M){var j=M[t.key],N=M[t.children];warning(j!=null,"Tree node must have a certain key: [".concat(D).concat(j,"]"));var ie=String(j);warning(!f.has(ie)||j===null||j===void 0,"Same 'key' exist in the Tree: ".concat(ie)),f.set(ie,!0),E(N,"".concat(D).concat(ie," > "))})}E(n)}function ae(n){function t(f){var E=(0,De.Z)(f);return E.map(function(K){if(!re(K))return(0,o.ZP)(!K,"Tree/TreeNode can only accept TreeNode as children."),null;var D=K.key,M=K.props,j=M.children,N=(0,xe.Z)(M,R),ie=(0,Q.Z)({key:D},N),ue=t(j);return ue.length&&(ie.children=ue),ie}).filter(function(K){return K})}return t(n)}function c(n,t,f){var E=_(f),K=E._title,D=E.key,M=E.children,j=new Set(t===!0?[]:t),N=[];function ie(ue){var de=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;return ue.map(function(oe,le){for(var V=g(de?de.pos:"0",le),fe=A(oe[D],V),se,ce=0;ce<K.length;ce+=1){var he=K[ce];if(oe[he]!==void 0){se=oe[he];break}}var q=Object.assign((0,k.Z)(oe,[].concat((0,Z.Z)(K),[D,M])),{title:se,key:fe,parent:de,pos:V,children:null,data:oe,isStart:[].concat((0,Z.Z)(de?de.isStart:[]),[le===0]),isEnd:[].concat((0,Z.Z)(de?de.isEnd:[]),[le===ue.length-1])});return N.push(q),t===!0||j.has(fe)?q.children=ie(oe[M]||[],q):q.children=[],q})}return ie(n),N}function s(n,t,f){var E={};(0,F.Z)(f)==="object"?E=f:E={externalGetKey:f},E=E||{};var K=E,D=K.childrenPropName,M=K.externalGetKey,j=K.fieldNames,N=_(j),ie=N.key,ue=N.children,de=D||ue,oe;M?typeof M=="string"?oe=function(fe){return fe[M]}:typeof M=="function"&&(oe=function(fe){return M(fe)}):oe=function(fe,se){return A(fe[ie],se)};function le(V,fe,se,ce){var he=V?V[de]:n,q=V?g(se.pos,fe):"0",Pe=V?[].concat((0,Z.Z)(ce),[V]):[];if(V){var ve=oe(V,q),Le={node:V,index:fe,pos:q,key:ve,parentPos:se.node?se.pos:null,level:se.level+1,nodes:Pe};t(Le)}he&&he.forEach(function(ke,_e){le(ke,_e,{node:V,pos:q,level:se?se.level+1:-1},Pe)})}le(null)}function h(n){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},f=t.initWrapper,E=t.processEntity,K=t.onProcessFinished,D=t.externalGetKey,M=t.childrenPropName,j=t.fieldNames,N=arguments.length>2?arguments[2]:void 0,ie=D||N,ue={},de={},oe={posEntities:ue,keyEntities:de};return f&&(oe=f(oe)||oe),s(n,function(le){var V=le.node,fe=le.index,se=le.pos,ce=le.key,he=le.parentPos,q=le.level,Pe=le.nodes,ve={node:V,nodes:Pe,index:fe,key:ce,pos:se,level:q},Le=A(ce,se);ue[se]=ve,de[Le]=ve,ve.parent=ue[he],ve.parent&&(ve.parent.children=ve.parent.children||[],ve.parent.children.push(ve)),E&&E(ve,oe)},{externalGetKey:ie,childrenPropName:M,fieldNames:j}),K&&K(oe),oe}function I(n,t){var f=t.expandedKeys,E=t.selectedKeys,K=t.loadedKeys,D=t.loadingKeys,M=t.checkedKeys,j=t.halfCheckedKeys,N=t.dragOverNodeKey,ie=t.dropPosition,ue=t.keyEntities,de=(0,m.Z)(ue,n),oe={eventKey:n,expanded:f.indexOf(n)!==-1,selected:E.indexOf(n)!==-1,loaded:K.indexOf(n)!==-1,loading:D.indexOf(n)!==-1,checked:M.indexOf(n)!==-1,halfChecked:j.indexOf(n)!==-1,pos:String(de?de.pos:""),dragOver:N===n&&ie===0,dragOverGapTop:N===n&&ie===-1,dragOverGapBottom:N===n&&ie===1};return oe}function S(n){var t=n.data,f=n.expanded,E=n.selected,K=n.checked,D=n.loaded,M=n.loading,j=n.halfChecked,N=n.dragOver,ie=n.dragOverGapTop,ue=n.dragOverGapBottom,de=n.pos,oe=n.active,le=n.eventKey,V=(0,Q.Z)((0,Q.Z)({},t),{},{expanded:f,selected:E,checked:K,loaded:D,loading:M,halfChecked:j,dragOver:N,dragOverGapTop:ie,dragOverGapBottom:ue,pos:de,active:oe,key:le});return"props"in V||Object.defineProperty(V,"props",{get:function(){return(0,o.ZP)(!1,"Second param return from event is node data instead of TreeNode instance. Please read value directly instead of reading from `props`."),n}}),V}}}]);
