diff --git a/ruoyi-admin/src/main/resources/static/2398.b407888f.async.js b/ruoyi-admin/src/main/resources/static/2398.b407888f.async.js
new file mode 100644
index 0000000..d4cf683
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/static/2398.b407888f.async.js
@@ -0,0 +1,3 @@
+"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[2398],{92398:function(ln,Lt,p){p.d(Lt,{Z:function(){return Wa}});var a=p(67294),Zt=p(97937),Mt=p(89705),Nt=p(24969),zt=p(93967),Y=p.n(zt),se=p(87462),V=p(4942),q=p(1413),L=p(97685),De=p(71002),we=p(45987),Ue=p(21770),_t=p(31131),Ie=(0,a.createContext)(null),Fe=p(74902),Be=p(48555),Dt=p(66680),Bt=p(42550),Ye=p(75164),Ot=function(t){var n=t.activeTabOffset,r=t.horizontal,i=t.rtl,l=t.indicator,c=l===void 0?{}:l,o=c.size,d=c.align,s=d===void 0?"center":d,m=(0,a.useState)(),b=(0,L.Z)(m,2),C=b[0],Z=b[1],B=(0,a.useRef)(),P=a.useCallback(function($){return typeof o=="function"?o($):typeof o=="number"?o:$},[o]);function _(){Ye.Z.cancel(B.current)}return(0,a.useEffect)(function(){var $={};if(n)if(r){$.width=P(n.width);var g=i?"right":"left";s==="start"&&($[g]=n[g]),s==="center"&&($[g]=n[g]+n.width/2,$.transform=i?"translateX(50%)":"translateX(-50%)"),s==="end"&&($[g]=n[g]+n.width,$.transform="translateX(-100%)")}else $.height=P(n.height),s==="start"&&($.top=n.top),s==="center"&&($.top=n.top+n.height/2,$.transform="translateY(-50%)"),s==="end"&&($.top=n.top+n.height,$.transform="translateY(-100%)");return _(),B.current=(0,Ye.Z)(function(){Z($)}),_},[n,r,i,s,P]),{style:C}},At=Ot,Qe={width:0,height:0,left:0,top:0};function Wt(e,t,n){return(0,a.useMemo)(function(){for(var r,i=new Map,l=t.get((r=e[0])===null||r===void 0?void 0:r.key)||Qe,c=l.left+l.width,o=0;o<e.length;o+=1){var d=e[o].key,s=t.get(d);if(!s){var m;s=t.get((m=e[o-1])===null||m===void 0?void 0:m.key)||Qe}var b=i.get(d)||(0,q.Z)({},s);b.right=c-b.left-b.width,i.set(d,b)}return i},[e.map(function(r){return r.key}).join("_"),t,n])}function Je(e,t){var n=a.useRef(e),r=a.useState({}),i=(0,L.Z)(r,2),l=i[1];function c(o){var d=typeof o=="function"?o(n.current):o;d!==n.current&&t(d,n.current),n.current=d,l({})}return[n.current,c]}var jt=.1,qe=.01,Le=20,et=Math.pow(.995,Le);function Gt(e,t){var n=(0,a.useState)(),r=(0,L.Z)(n,2),i=r[0],l=r[1],c=(0,a.useState)(0),o=(0,L.Z)(c,2),d=o[0],s=o[1],m=(0,a.useState)(0),b=(0,L.Z)(m,2),C=b[0],Z=b[1],B=(0,a.useState)(),P=(0,L.Z)(B,2),_=P[0],$=P[1],g=(0,a.useRef)();function I(T){var R=T.touches[0],f=R.screenX,x=R.screenY;l({x:f,y:x}),window.clearInterval(g.current)}function O(T){if(i){var R=T.touches[0],f=R.screenX,x=R.screenY;l({x:f,y:x});var h=f-i.x,y=x-i.y;t(h,y);var K=Date.now();s(K),Z(K-d),$({x:h,y})}}function W(){if(i&&(l(null),$(null),_)){var T=_.x/C,R=_.y/C,f=Math.abs(T),x=Math.abs(R);if(Math.max(f,x)<jt)return;var h=T,y=R;g.current=window.setInterval(function(){if(Math.abs(h)<qe&&Math.abs(y)<qe){window.clearInterval(g.current);return}h*=et,y*=et,t(h*Le,y*Le)},Le)}}var j=(0,a.useRef)();function G(T){var R=T.deltaX,f=T.deltaY,x=0,h=Math.abs(R),y=Math.abs(f);h===y?x=j.current==="x"?R:f:h>y?(x=R,j.current="x"):(x=f,j.current="y"),t(-x,-x)&&T.preventDefault()}var z=(0,a.useRef)(null);z.current={onTouchStart:I,onTouchMove:O,onTouchEnd:W,onWheel:G},a.useEffect(function(){function T(h){z.current.onTouchStart(h)}function R(h){z.current.onTouchMove(h)}function f(h){z.current.onTouchEnd(h)}function x(h){z.current.onWheel(h)}return document.addEventListener("touchmove",R,{passive:!1}),document.addEventListener("touchend",f,{passive:!0}),e.current.addEventListener("touchstart",T,{passive:!0}),e.current.addEventListener("wheel",x,{passive:!1}),function(){document.removeEventListener("touchmove",R),document.removeEventListener("touchend",f)}},[])}var kt=p(8410);function tt(e){var t=(0,a.useState)(0),n=(0,L.Z)(t,2),r=n[0],i=n[1],l=(0,a.useRef)(0),c=(0,a.useRef)();return c.current=e,(0,kt.o)(function(){var o;(o=c.current)===null||o===void 0||o.call(c)},[r]),function(){l.current===r&&(l.current+=1,i(l.current))}}function Ht(e){var t=(0,a.useRef)([]),n=(0,a.useState)({}),r=(0,L.Z)(n,2),i=r[1],l=(0,a.useRef)(typeof e=="function"?e():e),c=tt(function(){var d=l.current;t.current.forEach(function(s){d=s(d)}),t.current=[],l.current=d,i({})});function o(d){t.current.push(d),c()}return[l.current,o]}var at={width:0,height:0,left:0,top:0,right:0};function Kt(e,t,n,r,i,l,c){var o=c.tabs,d=c.tabPosition,s=c.rtl,m,b,C;return["top","bottom"].includes(d)?(m="width",b=s?"right":"left",C=Math.abs(n)):(m="height",b="top",C=-n),(0,a.useMemo)(function(){if(!o.length)return[0,0];for(var Z=o.length,B=Z,P=0;P<Z;P+=1){var _=e.get(o[P].key)||at;if(Math.floor(_[b]+_[m])>Math.floor(C+t)){B=P-1;break}}for(var $=0,g=Z-1;g>=0;g-=1){var I=e.get(o[g].key)||at;if(I[b]<C){$=g+1;break}}return $>=B?[0,0]:[$,B]},[e,t,r,i,l,C,d,o.map(function(Z){return Z.key}).join("_"),s])}function nt(e){var t;return e instanceof Map?(t={},e.forEach(function(n,r){t[r]=n})):t=e,JSON.stringify(t)}var Xt="TABS_DQ";function rt(e){return String(e).replace(/"/g,Xt)}function Oe(e,t,n,r){return!(!n||r||e===!1||e===void 0&&(t===!1||t===null))}var Vt=a.forwardRef(function(e,t){var n=e.prefixCls,r=e.editable,i=e.locale,l=e.style;return!r||r.showAdd===!1?null:a.createElement("button",{ref:t,type:"button",className:"".concat(n,"-nav-add"),style:l,"aria-label":(i==null?void 0:i.addAriaLabel)||"Add tab",onClick:function(o){r.onEdit("add",{event:o})}},r.addIcon||"+")}),it=Vt,Ut=a.forwardRef(function(e,t){var n=e.position,r=e.prefixCls,i=e.extra;if(!i)return null;var l,c={};return(0,De.Z)(i)==="object"&&!a.isValidElement(i)?c=i:c.right=i,n==="right"&&(l=c.right),n==="left"&&(l=c.left),l?a.createElement("div",{className:"".concat(r,"-extra-content"),ref:t},l):null}),ot=Ut,Ft=p(29171),lt=p(72512),de=p(15105),Yt=a.forwardRef(function(e,t){var n=e.prefixCls,r=e.id,i=e.tabs,l=e.locale,c=e.mobile,o=e.more,d=o===void 0?{}:o,s=e.style,m=e.className,b=e.editable,C=e.tabBarGutter,Z=e.rtl,B=e.removeAriaLabel,P=e.onTabClick,_=e.getPopupContainer,$=e.popupClassName,g=(0,a.useState)(!1),I=(0,L.Z)(g,2),O=I[0],W=I[1],j=(0,a.useState)(null),G=(0,L.Z)(j,2),z=G[0],T=G[1],R=d.icon,f=R===void 0?"More":R,x="".concat(r,"-more-popup"),h="".concat(n,"-dropdown"),y=z!==null?"".concat(x,"-").concat(z):null,K=l==null?void 0:l.dropdownAriaLabel;function X(E,A){E.preventDefault(),E.stopPropagation(),b.onEdit("remove",{key:A,event:E})}var v=a.createElement(lt.ZP,{onClick:function(A){var H=A.key,F=A.domEvent;P(H,F),W(!1)},prefixCls:"".concat(h,"-menu"),id:x,tabIndex:-1,role:"listbox","aria-activedescendant":y,selectedKeys:[z],"aria-label":K!==void 0?K:"expanded dropdown"},i.map(function(E){var A=E.closable,H=E.disabled,F=E.closeIcon,J=E.key,ne=E.label,ee=Oe(A,F,b,H);return a.createElement(lt.sN,{key:J,id:"".concat(x,"-").concat(J),role:"option","aria-controls":r&&"".concat(r,"-panel-").concat(J),disabled:H},a.createElement("span",null,ne),ee&&a.createElement("button",{type:"button","aria-label":B||"remove",tabIndex:0,className:"".concat(h,"-menu-item-remove"),onClick:function(ve){ve.stopPropagation(),X(ve,J)}},F||b.removeIcon||"\xD7"))}));function U(E){for(var A=i.filter(function(ee){return!ee.disabled}),H=A.findIndex(function(ee){return ee.key===z})||0,F=A.length,J=0;J<F;J+=1){H=(H+E+F)%F;var ne=A[H];if(!ne.disabled){T(ne.key);return}}}function oe(E){var A=E.which;if(!O){[de.Z.DOWN,de.Z.SPACE,de.Z.ENTER].includes(A)&&(W(!0),E.preventDefault());return}switch(A){case de.Z.UP:U(-1),E.preventDefault();break;case de.Z.DOWN:U(1),E.preventDefault();break;case de.Z.ESC:W(!1);break;case de.Z.SPACE:case de.Z.ENTER:z!==null&&P(z,E);break}}(0,a.useEffect)(function(){var E=document.getElementById(y);E&&E.scrollIntoView&&E.scrollIntoView(!1)},[z]),(0,a.useEffect)(function(){O||T(null)},[O]);var k=(0,V.Z)({},Z?"marginRight":"marginLeft",C);i.length||(k.visibility="hidden",k.order=1);var Q=Y()((0,V.Z)({},"".concat(h,"-rtl"),Z)),fe=c?null:a.createElement(Ft.Z,(0,se.Z)({prefixCls:h,overlay:v,visible:i.length?O:!1,onVisibleChange:W,overlayClassName:Y()(Q,$),mouseEnterDelay:.1,mouseLeaveDelay:.1,getPopupContainer:_},d),a.createElement("button",{type:"button",className:"".concat(n,"-nav-more"),style:k,"aria-haspopup":"listbox","aria-controls":x,id:"".concat(r,"-more"),"aria-expanded":O,onKeyDown:oe},f));return a.createElement("div",{className:Y()("".concat(n,"-nav-operations"),m),style:s,ref:t},fe,a.createElement(it,{prefixCls:n,locale:l,editable:b}))}),Qt=a.memo(Yt,function(e,t){return t.tabMoving}),Jt=function(t){var n=t.prefixCls,r=t.id,i=t.active,l=t.focus,c=t.tab,o=c.key,d=c.label,s=c.disabled,m=c.closeIcon,b=c.icon,C=t.closable,Z=t.renderWrapper,B=t.removeAriaLabel,P=t.editable,_=t.onClick,$=t.onFocus,g=t.onBlur,I=t.onKeyDown,O=t.onMouseDown,W=t.onMouseUp,j=t.style,G=t.tabCount,z=t.currentPosition,T="".concat(n,"-tab"),R=Oe(C,m,P,s);function f(X){s||_(X)}function x(X){X.preventDefault(),X.stopPropagation(),P.onEdit("remove",{key:o,event:X})}var h=a.useMemo(function(){return b&&typeof d=="string"?a.createElement("span",null,d):d},[d,b]),y=a.useRef(null);a.useEffect(function(){l&&y.current&&y.current.focus()},[l]);var K=a.createElement("div",{key:o,"data-node-key":rt(o),className:Y()(T,(0,V.Z)((0,V.Z)((0,V.Z)((0,V.Z)({},"".concat(T,"-with-remove"),R),"".concat(T,"-active"),i),"".concat(T,"-disabled"),s),"".concat(T,"-focus"),l)),style:j,onClick:f},a.createElement("div",{ref:y,role:"tab","aria-selected":i,id:r&&"".concat(r,"-tab-").concat(o),className:"".concat(T,"-btn"),"aria-controls":r&&"".concat(r,"-panel-").concat(o),"aria-disabled":s,tabIndex:s?null:i?0:-1,onClick:function(v){v.stopPropagation(),f(v)},onKeyDown:I,onMouseDown:O,onMouseUp:W,onFocus:$,onBlur:g},l&&a.createElement("div",{"aria-live":"polite",style:{width:0,height:0,position:"absolute",overflow:"hidden",opacity:0}},"Tab ".concat(z," of ").concat(G)),b&&a.createElement("span",{className:"".concat(T,"-icon")},b),d&&h),R&&a.createElement("button",{type:"button",role:"tab","aria-label":B||"remove",tabIndex:i?0:-1,className:"".concat(T,"-remove"),onClick:function(v){v.stopPropagation(),x(v)}},m||P.removeIcon||"\xD7"));return Z?Z(K):K},qt=Jt,ea=function(t,n){var r=t.offsetWidth,i=t.offsetHeight,l=t.offsetTop,c=t.offsetLeft,o=t.getBoundingClientRect(),d=o.width,s=o.height,m=o.left,b=o.top;return Math.abs(d-r)<1?[d,s,m-n.left,b-n.top]:[r,i,c,l]},he=function(t){var n=t.current||{},r=n.offsetWidth,i=r===void 0?0:r,l=n.offsetHeight,c=l===void 0?0:l;if(t.current){var o=t.current.getBoundingClientRect(),d=o.width,s=o.height;if(Math.abs(d-i)<1)return[d,s]}return[i,c]},Ze=function(t,n){return t[n?0:1]},ta=a.forwardRef(function(e,t){var n=e.className,r=e.style,i=e.id,l=e.animated,c=e.activeKey,o=e.rtl,d=e.extra,s=e.editable,m=e.locale,b=e.tabPosition,C=e.tabBarGutter,Z=e.children,B=e.onTabClick,P=e.onTabScroll,_=e.indicator,$=a.useContext(Ie),g=$.prefixCls,I=$.tabs,O=(0,a.useRef)(null),W=(0,a.useRef)(null),j=(0,a.useRef)(null),G=(0,a.useRef)(null),z=(0,a.useRef)(null),T=(0,a.useRef)(null),R=(0,a.useRef)(null),f=b==="top"||b==="bottom",x=Je(0,function(w,u){f&&P&&P({direction:w>u?"left":"right"})}),h=(0,L.Z)(x,2),y=h[0],K=h[1],X=Je(0,function(w,u){!f&&P&&P({direction:w>u?"top":"bottom"})}),v=(0,L.Z)(X,2),U=v[0],oe=v[1],k=(0,a.useState)([0,0]),Q=(0,L.Z)(k,2),fe=Q[0],E=Q[1],A=(0,a.useState)([0,0]),H=(0,L.Z)(A,2),F=H[0],J=H[1],ne=(0,a.useState)([0,0]),ee=(0,L.Z)(ne,2),pe=ee[0],ve=ee[1],me=(0,a.useState)([0,0]),$e=(0,L.Z)(me,2),M=$e[0],le=$e[1],Te=Ht(new Map),vt=(0,L.Z)(Te,2),ja=vt[0],Ga=vt[1],Me=Wt(I,ja,F[0]),Ae=Ze(fe,f),Pe=Ze(F,f),We=Ze(pe,f),bt=Ze(M,f),mt=Math.floor(Ae)<Math.floor(Pe+We),ie=mt?Ae-bt:Ae-We,ka="".concat(g,"-nav-operations-hidden"),be=0,ge=0;f&&o?(be=0,ge=Math.max(0,Pe-ie)):(be=Math.min(0,ie-Pe),ge=0);function je(w){return w<be?be:w>ge?ge:w}var Ge=(0,a.useRef)(null),Ha=(0,a.useState)(),gt=(0,L.Z)(Ha,2),Ne=gt[0],ht=gt[1];function ke(){ht(Date.now())}function He(){Ge.current&&clearTimeout(Ge.current)}Gt(G,function(w,u){function N(D,re){D(function(te){var xe=je(te+re);return xe})}return mt?(f?N(K,w):N(oe,u),He(),ke(),!0):!1}),(0,a.useEffect)(function(){return He(),Ne&&(Ge.current=setTimeout(function(){ht(0)},100)),He},[Ne]);var Ka=Kt(Me,ie,f?y:U,Pe,We,bt,(0,q.Z)((0,q.Z)({},e),{},{tabs:I})),pt=(0,L.Z)(Ka,2),Xa=pt[0],Va=pt[1],$t=(0,Dt.Z)(function(){var w=arguments.length>0&&arguments[0]!==void 0?arguments[0]:c,u=Me.get(w)||{width:0,height:0,left:0,right:0,top:0};if(f){var N=y;o?u.right<y?N=u.right:u.right+u.width>y+ie&&(N=u.right+u.width-ie):u.left<-y?N=-u.left:u.left+u.width>-y+ie&&(N=-(u.left+u.width-ie)),oe(0),K(je(N))}else{var D=U;u.top<-U?D=-u.top:u.top+u.height>-U+ie&&(D=-(u.top+u.height-ie)),K(0),oe(je(D))}}),Ua=(0,a.useState)(),St=(0,L.Z)(Ua,2),Se=St[0],Ee=St[1],Fa=(0,a.useState)(!1),yt=(0,L.Z)(Fa,2),Ya=yt[0],xt=yt[1],ce=I.filter(function(w){return!w.disabled}).map(function(w){return w.key}),ye=function(u){var N=ce.indexOf(Se||c),D=ce.length,re=(N+u+D)%D,te=ce[re];Ee(te)},Qa=function(u){var N=u.code,D=o&&f,re=ce[0],te=ce[ce.length-1];switch(N){case"ArrowLeft":{f&&ye(D?1:-1);break}case"ArrowRight":{f&&ye(D?-1:1);break}case"ArrowUp":{u.preventDefault(),f||ye(-1);break}case"ArrowDown":{u.preventDefault(),f||ye(1);break}case"Home":{u.preventDefault(),Ee(re);break}case"End":{u.preventDefault(),Ee(te);break}case"Enter":case"Space":{u.preventDefault(),B(Se,u);break}case"Backspace":case"Delete":{var xe=ce.indexOf(Se),ae=I.find(function(Ce){return Ce.key===Se}),Ve=Oe(ae==null?void 0:ae.closable,ae==null?void 0:ae.closeIcon,s,ae==null?void 0:ae.disabled);Ve&&(u.preventDefault(),u.stopPropagation(),s.onEdit("remove",{key:Se,event:u}),xe===ce.length-1?ye(-1):ye(1));break}}},ze={};f?ze[o?"marginRight":"marginLeft"]=C:ze.marginTop=C;var Ct=I.map(function(w,u){var N=w.key;return a.createElement(qt,{id:i,prefixCls:g,key:N,tab:w,style:u===0?void 0:ze,closable:w.closable,editable:s,active:N===c,focus:N===Se,renderWrapper:Z,removeAriaLabel:m==null?void 0:m.removeAriaLabel,tabCount:ce.length,currentPosition:u+1,onClick:function(re){B(N,re)},onKeyDown:Qa,onFocus:function(){Ya||Ee(N),$t(N),ke(),G.current&&(o||(G.current.scrollLeft=0),G.current.scrollTop=0)},onBlur:function(){Ee(void 0)},onMouseDown:function(){xt(!0)},onMouseUp:function(){xt(!1)}})}),Tt=function(){return Ga(function(){var u,N=new Map,D=(u=z.current)===null||u===void 0?void 0:u.getBoundingClientRect();return I.forEach(function(re){var te,xe=re.key,ae=(te=z.current)===null||te===void 0?void 0:te.querySelector('[data-node-key="'.concat(rt(xe),'"]'));if(ae){var Ve=ea(ae,D),Ce=(0,L.Z)(Ve,4),an=Ce[0],nn=Ce[1],rn=Ce[2],on=Ce[3];N.set(xe,{width:an,height:nn,left:rn,top:on})}}),N})};(0,a.useEffect)(function(){Tt()},[I.map(function(w){return w.key}).join("_")]);var _e=tt(function(){var w=he(O),u=he(W),N=he(j);E([w[0]-u[0]-N[0],w[1]-u[1]-N[1]]);var D=he(R);ve(D);var re=he(T);le(re);var te=he(z);J([te[0]-D[0],te[1]-D[1]]),Tt()}),Ja=I.slice(0,Xa),qa=I.slice(Va+1),Pt=[].concat((0,Fe.Z)(Ja),(0,Fe.Z)(qa)),Et=Me.get(c),en=At({activeTabOffset:Et,horizontal:f,indicator:_,rtl:o}),tn=en.style;(0,a.useEffect)(function(){$t()},[c,be,ge,nt(Et),nt(Me),f]),(0,a.useEffect)(function(){_e()},[o]);var Rt=!!Pt.length,Re="".concat(g,"-nav-wrap"),Ke,Xe,wt,It;return f?o?(Xe=y>0,Ke=y!==ge):(Ke=y<0,Xe=y!==be):(wt=U<0,It=U!==be),a.createElement(Be.Z,{onResize:_e},a.createElement("div",{ref:(0,Bt.x1)(t,O),role:"tablist","aria-orientation":f?"horizontal":"vertical",className:Y()("".concat(g,"-nav"),n),style:r,onKeyDown:function(){ke()}},a.createElement(ot,{ref:W,position:"left",extra:d,prefixCls:g}),a.createElement(Be.Z,{onResize:_e},a.createElement("div",{className:Y()(Re,(0,V.Z)((0,V.Z)((0,V.Z)((0,V.Z)({},"".concat(Re,"-ping-left"),Ke),"".concat(Re,"-ping-right"),Xe),"".concat(Re,"-ping-top"),wt),"".concat(Re,"-ping-bottom"),It)),ref:G},a.createElement(Be.Z,{onResize:_e},a.createElement("div",{ref:z,className:"".concat(g,"-nav-list"),style:{transform:"translate(".concat(y,"px, ").concat(U,"px)"),transition:Ne?"none":void 0}},Ct,a.createElement(it,{ref:R,prefixCls:g,locale:m,editable:s,style:(0,q.Z)((0,q.Z)({},Ct.length===0?void 0:ze),{},{visibility:Rt?"hidden":null})}),a.createElement("div",{className:Y()("".concat(g,"-ink-bar"),(0,V.Z)({},"".concat(g,"-ink-bar-animated"),l.inkBar)),style:tn}))))),a.createElement(Qt,(0,se.Z)({},e,{removeAriaLabel:m==null?void 0:m.removeAriaLabel,ref:T,prefixCls:g,tabs:Pt,className:!Rt&&ka,tabMoving:!!Ne})),a.createElement(ot,{ref:j,position:"right",extra:d,prefixCls:g})))}),ct=ta,aa=a.forwardRef(function(e,t){var n=e.prefixCls,r=e.className,i=e.style,l=e.id,c=e.active,o=e.tabKey,d=e.children;return a.createElement("div",{id:l&&"".concat(l,"-panel-").concat(o),role:"tabpanel",tabIndex:c?0:-1,"aria-labelledby":l&&"".concat(l,"-tab-").concat(o),"aria-hidden":!c,style:i,className:Y()(n,c&&"".concat(n,"-active"),r),ref:t},d)}),st=aa,na=["renderTabBar"],ra=["label","key"],ia=function(t){var n=t.renderTabBar,r=(0,we.Z)(t,na),i=a.useContext(Ie),l=i.tabs;if(n){var c=(0,q.Z)((0,q.Z)({},r),{},{panes:l.map(function(o){var d=o.label,s=o.key,m=(0,we.Z)(o,ra);return a.createElement(st,(0,se.Z)({tab:d,key:s,tabKey:s},m))})});return n(c,ct)}return a.createElement(ct,r)},oa=ia,la=p(29372),ca=["key","forceRender","style","className","destroyInactiveTabPane"],sa=function(t){var n=t.id,r=t.activeKey,i=t.animated,l=t.tabPosition,c=t.destroyInactiveTabPane,o=a.useContext(Ie),d=o.prefixCls,s=o.tabs,m=i.tabPane,b="".concat(d,"-tabpane");return a.createElement("div",{className:Y()("".concat(d,"-content-holder"))},a.createElement("div",{className:Y()("".concat(d,"-content"),"".concat(d,"-content-").concat(l),(0,V.Z)({},"".concat(d,"-content-animated"),m))},s.map(function(C){var Z=C.key,B=C.forceRender,P=C.style,_=C.className,$=C.destroyInactiveTabPane,g=(0,we.Z)(C,ca),I=Z===r;return a.createElement(la.ZP,(0,se.Z)({key:Z,visible:I,forceRender:B,removeOnLeave:!!(c||$),leavedClassName:"".concat(b,"-hidden")},i.tabPaneMotion),function(O,W){var j=O.style,G=O.className;return a.createElement(st,(0,se.Z)({},g,{prefixCls:b,id:n,tabKey:Z,animated:m,active:I,style:(0,q.Z)((0,q.Z)({},P),j),className:Y()(_,G),ref:W}))})})))},da=sa,cn=p(80334);function ua(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{inkBar:!0,tabPane:!1},t;return e===!1?t={inkBar:!1,tabPane:!1}:e===!0?t={inkBar:!0,tabPane:!1}:t=(0,q.Z)({inkBar:!0},(0,De.Z)(e)==="object"?e:{}),t.tabPaneMotion&&t.tabPane===void 0&&(t.tabPane=!0),!t.tabPaneMotion&&t.tabPane&&(t.tabPane=!1),t}var fa=["id","prefixCls","className","items","direction","activeKey","defaultActiveKey","editable","animated","tabPosition","tabBarGutter","tabBarStyle","tabBarExtraContent","locale","more","destroyInactiveTabPane","renderTabBar","onChange","onTabClick","onTabScroll","getPopupContainer","popupClassName","indicator"],dt=0,va=a.forwardRef(function(e,t){var n=e.id,r=e.prefixCls,i=r===void 0?"rc-tabs":r,l=e.className,c=e.items,o=e.direction,d=e.activeKey,s=e.defaultActiveKey,m=e.editable,b=e.animated,C=e.tabPosition,Z=C===void 0?"top":C,B=e.tabBarGutter,P=e.tabBarStyle,_=e.tabBarExtraContent,$=e.locale,g=e.more,I=e.destroyInactiveTabPane,O=e.renderTabBar,W=e.onChange,j=e.onTabClick,G=e.onTabScroll,z=e.getPopupContainer,T=e.popupClassName,R=e.indicator,f=(0,we.Z)(e,fa),x=a.useMemo(function(){return(c||[]).filter(function(M){return M&&(0,De.Z)(M)==="object"&&"key"in M})},[c]),h=o==="rtl",y=ua(b),K=(0,a.useState)(!1),X=(0,L.Z)(K,2),v=X[0],U=X[1];(0,a.useEffect)(function(){U((0,_t.Z)())},[]);var oe=(0,Ue.Z)(function(){var M;return(M=x[0])===null||M===void 0?void 0:M.key},{value:d,defaultValue:s}),k=(0,L.Z)(oe,2),Q=k[0],fe=k[1],E=(0,a.useState)(function(){return x.findIndex(function(M){return M.key===Q})}),A=(0,L.Z)(E,2),H=A[0],F=A[1];(0,a.useEffect)(function(){var M=x.findIndex(function(Te){return Te.key===Q});if(M===-1){var le;M=Math.max(0,Math.min(H,x.length-1)),fe((le=x[M])===null||le===void 0?void 0:le.key)}F(M)},[x.map(function(M){return M.key}).join("_"),Q,H]);var J=(0,Ue.Z)(null,{value:n}),ne=(0,L.Z)(J,2),ee=ne[0],pe=ne[1];(0,a.useEffect)(function(){n||(pe("rc-tabs-".concat(dt)),dt+=1)},[]);function ve(M,le){j==null||j(M,le);var Te=M!==Q;fe(M),Te&&(W==null||W(M))}var me={id:ee,activeKey:Q,animated:y,tabPosition:Z,rtl:h,mobile:v},$e=(0,q.Z)((0,q.Z)({},me),{},{editable:m,locale:$,more:g,tabBarGutter:B,onTabClick:ve,onTabScroll:G,extra:_,style:P,panes:null,getPopupContainer:z,popupClassName:T,indicator:R});return a.createElement(Ie.Provider,{value:{tabs:x,prefixCls:i}},a.createElement("div",(0,se.Z)({ref:t,id:n,className:Y()(i,"".concat(i,"-").concat(Z),(0,V.Z)((0,V.Z)((0,V.Z)({},"".concat(i,"-mobile"),v),"".concat(i,"-editable"),m),"".concat(i,"-rtl"),h),l)},f),a.createElement(oa,(0,se.Z)({},$e,{renderTabBar:O})),a.createElement(da,(0,se.Z)({destroyInactiveTabPane:I},me,{animated:y}))))}),ba=va,ma=ba,ga=p(53124),ha=p(35792),pa=p(98675),$a=p(33603);const Sa={motionAppear:!1,motionEnter:!0,motionLeave:!0};function ya(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{inkBar:!0,tabPane:!1},n;return t===!1?n={inkBar:!1,tabPane:!1}:t===!0?n={inkBar:!0,tabPane:!0}:n=Object.assign({inkBar:!0},typeof t=="object"?t:{}),n.tabPane&&(n.tabPaneMotion=Object.assign(Object.assign({},Sa),{motionName:(0,$a.m)(e,"switch")})),n}var xa=p(50344),Ca=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n};function Ta(e){return e.filter(t=>t)}function Pa(e,t){if(e)return e;const n=(0,xa.Z)(t).map(r=>{if(a.isValidElement(r)){const{key:i,props:l}=r,c=l||{},{tab:o}=c,d=Ca(c,["tab"]);return Object.assign(Object.assign({key:String(i)},d),{label:o})}return null});return Ta(n)}var S=p(11568),ue=p(14747),Ea=p(83559),Ra=p(83262),ut=p(67771),wa=e=>{const{componentCls:t,motionDurationSlow:n}=e;return[{[t]:{[`${t}-switch`]:{"&-appear, &-enter":{transition:"none","&-start":{opacity:0},"&-active":{opacity:1,transition:`opacity ${n}`}},"&-leave":{position:"absolute",transition:"none",inset:0,"&-start":{opacity:1},"&-active":{opacity:0,transition:`opacity ${n}`}}}}},[(0,ut.oN)(e,"slide-up"),(0,ut.oN)(e,"slide-down")]]};const Ia=e=>{const{componentCls:t,tabsCardPadding:n,cardBg:r,cardGutter:i,colorBorderSecondary:l,itemSelectedColor:c}=e;return{[`${t}-card`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{margin:0,padding:n,background:r,border:`${(0,S.bf)(e.lineWidth)} ${e.lineType} ${l}`,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOut}`},[`${t}-tab-active`]:{color:c,background:e.colorBgContainer},[`${t}-tab-focus`]:Object.assign({},(0,ue.oN)(e,-3)),[`${t}-ink-bar`]:{visibility:"hidden"},[`& ${t}-tab${t}-tab-focus ${t}-tab-btn`]:{outline:"none"}},[`&${t}-top, &${t}-bottom`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab + ${t}-tab`]:{marginLeft:{_skip_check_:!0,value:(0,S.bf)(i)}}}},[`&${t}-top`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{borderRadius:`${(0,S.bf)(e.borderRadiusLG)} ${(0,S.bf)(e.borderRadiusLG)} 0 0`},[`${t}-tab-active`]:{borderBottomColor:e.colorBgContainer}}},[`&${t}-bottom`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{borderRadius:`0 0 ${(0,S.bf)(e.borderRadiusLG)} ${(0,S.bf)(e.borderRadiusLG)}`},[`${t}-tab-active`]:{borderTopColor:e.colorBgContainer}}},[`&${t}-left, &${t}-right`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab + ${t}-tab`]:{marginTop:(0,S.bf)(i)}}},[`&${t}-left`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{borderRadius:{_skip_check_:!0,value:`${(0,S.bf)(e.borderRadiusLG)} 0 0 ${(0,S.bf)(e.borderRadiusLG)}`}},[`${t}-tab-active`]:{borderRightColor:{_skip_check_:!0,value:e.colorBgContainer}}}},[`&${t}-right`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{borderRadius:{_skip_check_:!0,value:`0 ${(0,S.bf)(e.borderRadiusLG)} ${(0,S.bf)(e.borderRadiusLG)} 0`}},[`${t}-tab-active`]:{borderLeftColor:{_skip_check_:!0,value:e.colorBgContainer}}}}}}},La=e=>{const{componentCls:t,itemHoverColor:n,dropdownEdgeChildVerticalPadding:r}=e;return{[`${t}-dropdown`]:Object.assign(Object.assign({},(0,ue.Wf)(e)),{position:"absolute",top:-9999,left:{_skip_check_:!0,value:-9999},zIndex:e.zIndexPopup,display:"block","&-hidden":{display:"none"},[`${t}-dropdown-menu`]:{maxHeight:e.tabsDropdownHeight,margin:0,padding:`${(0,S.bf)(r)} 0`,overflowX:"hidden",overflowY:"auto",textAlign:{_skip_check_:!0,value:"left"},listStyleType:"none",backgroundColor:e.colorBgContainer,backgroundClip:"padding-box",borderRadius:e.borderRadiusLG,outline:"none",boxShadow:e.boxShadowSecondary,"&-item":Object.assign(Object.assign({},ue.vS),{display:"flex",alignItems:"center",minWidth:e.tabsDropdownWidth,margin:0,padding:`${(0,S.bf)(e.paddingXXS)} ${(0,S.bf)(e.paddingSM)}`,color:e.colorText,fontWeight:"normal",fontSize:e.fontSize,lineHeight:e.lineHeight,cursor:"pointer",transition:`all ${e.motionDurationSlow}`,"> span":{flex:1,whiteSpace:"nowrap"},"&-remove":{flex:"none",marginLeft:{_skip_check_:!0,value:e.marginSM},color:e.colorTextDescription,fontSize:e.fontSizeSM,background:"transparent",border:0,cursor:"pointer","&:hover":{color:n}},"&:hover":{background:e.controlItemBgHover},"&-disabled":{"&, &:hover":{color:e.colorTextDisabled,background:"transparent",cursor:"not-allowed"}}})}})}},Za=e=>{const{componentCls:t,margin:n,colorBorderSecondary:r,horizontalMargin:i,verticalItemPadding:l,verticalItemMargin:c,calc:o}=e;return{[`${t}-top, ${t}-bottom`]:{flexDirection:"column",[`> ${t}-nav, > div > ${t}-nav`]:{margin:i,"&::before":{position:"absolute",right:{_skip_check_:!0,value:0},left:{_skip_check_:!0,value:0},borderBottom:`${(0,S.bf)(e.lineWidth)} ${e.lineType} ${r}`,content:"''"},[`${t}-ink-bar`]:{height:e.lineWidthBold,"&-animated":{transition:`width ${e.motionDurationSlow}, left ${e.motionDurationSlow},
+            right ${e.motionDurationSlow}`}},[`${t}-nav-wrap`]:{"&::before, &::after":{top:0,bottom:0,width:e.controlHeight},"&::before":{left:{_skip_check_:!0,value:0},boxShadow:e.boxShadowTabsOverflowLeft},"&::after":{right:{_skip_check_:!0,value:0},boxShadow:e.boxShadowTabsOverflowRight},[`&${t}-nav-wrap-ping-left::before`]:{opacity:1},[`&${t}-nav-wrap-ping-right::after`]:{opacity:1}}}},[`${t}-top`]:{[`> ${t}-nav,
+        > div > ${t}-nav`]:{"&::before":{bottom:0},[`${t}-ink-bar`]:{bottom:0}}},[`${t}-bottom`]:{[`> ${t}-nav, > div > ${t}-nav`]:{order:1,marginTop:n,marginBottom:0,"&::before":{top:0},[`${t}-ink-bar`]:{top:0}},[`> ${t}-content-holder, > div > ${t}-content-holder`]:{order:0}},[`${t}-left, ${t}-right`]:{[`> ${t}-nav, > div > ${t}-nav`]:{flexDirection:"column",minWidth:o(e.controlHeight).mul(1.25).equal(),[`${t}-tab`]:{padding:l,textAlign:"center"},[`${t}-tab + ${t}-tab`]:{margin:c},[`${t}-nav-wrap`]:{flexDirection:"column","&::before, &::after":{right:{_skip_check_:!0,value:0},left:{_skip_check_:!0,value:0},height:e.controlHeight},"&::before":{top:0,boxShadow:e.boxShadowTabsOverflowTop},"&::after":{bottom:0,boxShadow:e.boxShadowTabsOverflowBottom},[`&${t}-nav-wrap-ping-top::before`]:{opacity:1},[`&${t}-nav-wrap-ping-bottom::after`]:{opacity:1}},[`${t}-ink-bar`]:{width:e.lineWidthBold,"&-animated":{transition:`height ${e.motionDurationSlow}, top ${e.motionDurationSlow}`}},[`${t}-nav-list, ${t}-nav-operations`]:{flex:"1 0 auto",flexDirection:"column"}}},[`${t}-left`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-ink-bar`]:{right:{_skip_check_:!0,value:0}}},[`> ${t}-content-holder, > div > ${t}-content-holder`]:{marginLeft:{_skip_check_:!0,value:(0,S.bf)(o(e.lineWidth).mul(-1).equal())},borderLeft:{_skip_check_:!0,value:`${(0,S.bf)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},[`> ${t}-content > ${t}-tabpane`]:{paddingLeft:{_skip_check_:!0,value:e.paddingLG}}}},[`${t}-right`]:{[`> ${t}-nav, > div > ${t}-nav`]:{order:1,[`${t}-ink-bar`]:{left:{_skip_check_:!0,value:0}}},[`> ${t}-content-holder, > div > ${t}-content-holder`]:{order:0,marginRight:{_skip_check_:!0,value:o(e.lineWidth).mul(-1).equal()},borderRight:{_skip_check_:!0,value:`${(0,S.bf)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},[`> ${t}-content > ${t}-tabpane`]:{paddingRight:{_skip_check_:!0,value:e.paddingLG}}}}}},Ma=e=>{const{componentCls:t,cardPaddingSM:n,cardPaddingLG:r,horizontalItemPaddingSM:i,horizontalItemPaddingLG:l}=e;return{[t]:{"&-small":{[`> ${t}-nav`]:{[`${t}-tab`]:{padding:i,fontSize:e.titleFontSizeSM}}},"&-large":{[`> ${t}-nav`]:{[`${t}-tab`]:{padding:l,fontSize:e.titleFontSizeLG}}}},[`${t}-card`]:{[`&${t}-small`]:{[`> ${t}-nav`]:{[`${t}-tab`]:{padding:n}},[`&${t}-bottom`]:{[`> ${t}-nav ${t}-tab`]:{borderRadius:`0 0 ${(0,S.bf)(e.borderRadius)} ${(0,S.bf)(e.borderRadius)}`}},[`&${t}-top`]:{[`> ${t}-nav ${t}-tab`]:{borderRadius:`${(0,S.bf)(e.borderRadius)} ${(0,S.bf)(e.borderRadius)} 0 0`}},[`&${t}-right`]:{[`> ${t}-nav ${t}-tab`]:{borderRadius:{_skip_check_:!0,value:`0 ${(0,S.bf)(e.borderRadius)} ${(0,S.bf)(e.borderRadius)} 0`}}},[`&${t}-left`]:{[`> ${t}-nav ${t}-tab`]:{borderRadius:{_skip_check_:!0,value:`${(0,S.bf)(e.borderRadius)} 0 0 ${(0,S.bf)(e.borderRadius)}`}}}},[`&${t}-large`]:{[`> ${t}-nav`]:{[`${t}-tab`]:{padding:r}}}}}},Na=e=>{const{componentCls:t,itemActiveColor:n,itemHoverColor:r,iconCls:i,tabsHorizontalItemMargin:l,horizontalItemPadding:c,itemSelectedColor:o,itemColor:d}=e,s=`${t}-tab`;return{[s]:{position:"relative",WebkitTouchCallout:"none",WebkitTapHighlightColor:"transparent",display:"inline-flex",alignItems:"center",padding:c,fontSize:e.titleFontSize,background:"transparent",border:0,outline:"none",cursor:"pointer",color:d,"&-btn, &-remove":{"&:focus:not(:focus-visible), &:active":{color:n}},"&-btn":{outline:"none",transition:`all ${e.motionDurationSlow}`,[`${s}-icon:not(:last-child)`]:{marginInlineEnd:e.marginSM}},"&-remove":Object.assign({flex:"none",marginRight:{_skip_check_:!0,value:e.calc(e.marginXXS).mul(-1).equal()},marginLeft:{_skip_check_:!0,value:e.marginXS},color:e.colorTextDescription,fontSize:e.fontSizeSM,background:"transparent",border:"none",outline:"none",cursor:"pointer",transition:`all ${e.motionDurationSlow}`,"&:hover":{color:e.colorTextHeading}},(0,ue.Qy)(e)),"&:hover":{color:r},[`&${s}-active ${s}-btn`]:{color:o,textShadow:e.tabsActiveTextShadow},[`&${s}-focus ${s}-btn`]:Object.assign({},(0,ue.oN)(e)),[`&${s}-disabled`]:{color:e.colorTextDisabled,cursor:"not-allowed"},[`&${s}-disabled ${s}-btn, &${s}-disabled ${t}-remove`]:{"&:focus, &:active":{color:e.colorTextDisabled}},[`& ${s}-remove ${i}`]:{margin:0},[`${i}:not(:last-child)`]:{marginRight:{_skip_check_:!0,value:e.marginSM}}},[`${s} + ${s}`]:{margin:{_skip_check_:!0,value:l}}}},za=e=>{const{componentCls:t,tabsHorizontalItemMarginRTL:n,iconCls:r,cardGutter:i,calc:l}=e;return{[`${t}-rtl`]:{direction:"rtl",[`${t}-nav`]:{[`${t}-tab`]:{margin:{_skip_check_:!0,value:n},[`${t}-tab:last-of-type`]:{marginLeft:{_skip_check_:!0,value:0}},[r]:{marginRight:{_skip_check_:!0,value:0},marginLeft:{_skip_check_:!0,value:(0,S.bf)(e.marginSM)}},[`${t}-tab-remove`]:{marginRight:{_skip_check_:!0,value:(0,S.bf)(e.marginXS)},marginLeft:{_skip_check_:!0,value:(0,S.bf)(l(e.marginXXS).mul(-1).equal())},[r]:{margin:0}}}},[`&${t}-left`]:{[`> ${t}-nav`]:{order:1},[`> ${t}-content-holder`]:{order:0}},[`&${t}-right`]:{[`> ${t}-nav`]:{order:0},[`> ${t}-content-holder`]:{order:1}},[`&${t}-card${t}-top, &${t}-card${t}-bottom`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab + ${t}-tab`]:{marginRight:{_skip_check_:!0,value:i},marginLeft:{_skip_check_:!0,value:0}}}}},[`${t}-dropdown-rtl`]:{direction:"rtl"},[`${t}-menu-item`]:{[`${t}-dropdown-rtl`]:{textAlign:{_skip_check_:!0,value:"right"}}}}},_a=e=>{const{componentCls:t,tabsCardPadding:n,cardHeight:r,cardGutter:i,itemHoverColor:l,itemActiveColor:c,colorBorderSecondary:o}=e;return{[t]:Object.assign(Object.assign(Object.assign(Object.assign({},(0,ue.Wf)(e)),{display:"flex",[`> ${t}-nav, > div > ${t}-nav`]:{position:"relative",display:"flex",flex:"none",alignItems:"center",[`${t}-nav-wrap`]:{position:"relative",display:"flex",flex:"auto",alignSelf:"stretch",overflow:"hidden",whiteSpace:"nowrap",transform:"translate(0)","&::before, &::after":{position:"absolute",zIndex:1,opacity:0,transition:`opacity ${e.motionDurationSlow}`,content:"''",pointerEvents:"none"}},[`${t}-nav-list`]:{position:"relative",display:"flex",transition:`opacity ${e.motionDurationSlow}`},[`${t}-nav-operations`]:{display:"flex",alignSelf:"stretch"},[`${t}-nav-operations-hidden`]:{position:"absolute",visibility:"hidden",pointerEvents:"none"},[`${t}-nav-more`]:{position:"relative",padding:n,background:"transparent",border:0,color:e.colorText,"&::after":{position:"absolute",right:{_skip_check_:!0,value:0},bottom:0,left:{_skip_check_:!0,value:0},height:e.calc(e.controlHeightLG).div(8).equal(),transform:"translateY(100%)",content:"''"}},[`${t}-nav-add`]:Object.assign({minWidth:r,marginLeft:{_skip_check_:!0,value:i},padding:(0,S.bf)(e.paddingXS),background:"transparent",border:`${(0,S.bf)(e.lineWidth)} ${e.lineType} ${o}`,borderRadius:`${(0,S.bf)(e.borderRadiusLG)} ${(0,S.bf)(e.borderRadiusLG)} 0 0`,outline:"none",cursor:"pointer",color:e.colorText,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOut}`,"&:hover":{color:l},"&:active, &:focus:not(:focus-visible)":{color:c}},(0,ue.Qy)(e,-3))},[`${t}-extra-content`]:{flex:"none"},[`${t}-ink-bar`]:{position:"absolute",background:e.inkBarColor,pointerEvents:"none"}}),Na(e)),{[`${t}-content`]:{position:"relative",width:"100%"},[`${t}-content-holder`]:{flex:"auto",minWidth:0,minHeight:0},[`${t}-tabpane`]:Object.assign(Object.assign({},(0,ue.Qy)(e)),{"&-hidden":{display:"none"}})}),[`${t}-centered`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-nav-wrap`]:{[`&:not([class*='${t}-nav-wrap-ping']) > ${t}-nav-list`]:{margin:"auto"}}}}}},Da=e=>{const t=e.controlHeightLG;return{zIndexPopup:e.zIndexPopupBase+50,cardBg:e.colorFillAlter,cardHeight:t,cardPadding:`${(t-Math.round(e.fontSize*e.lineHeight))/2-e.lineWidth}px ${e.padding}px`,cardPaddingSM:`${e.paddingXXS*1.5}px ${e.padding}px`,cardPaddingLG:`${e.paddingXS}px ${e.padding}px ${e.paddingXXS*1.5}px`,titleFontSize:e.fontSize,titleFontSizeLG:e.fontSizeLG,titleFontSizeSM:e.fontSize,inkBarColor:e.colorPrimary,horizontalMargin:`0 0 ${e.margin}px 0`,horizontalItemGutter:32,horizontalItemMargin:"",horizontalItemMarginRTL:"",horizontalItemPadding:`${e.paddingSM}px 0`,horizontalItemPaddingSM:`${e.paddingXS}px 0`,horizontalItemPaddingLG:`${e.padding}px 0`,verticalItemPadding:`${e.paddingXS}px ${e.paddingLG}px`,verticalItemMargin:`${e.margin}px 0 0 0`,itemColor:e.colorText,itemSelectedColor:e.colorPrimary,itemHoverColor:e.colorPrimaryHover,itemActiveColor:e.colorPrimaryActive,cardGutter:e.marginXXS/2}};var Ba=(0,Ea.I$)("Tabs",e=>{const t=(0,Ra.IX)(e,{tabsCardPadding:e.cardPadding,dropdownEdgeChildVerticalPadding:e.paddingXXS,tabsActiveTextShadow:"0 0 0.25px currentcolor",tabsDropdownHeight:200,tabsDropdownWidth:120,tabsHorizontalItemMargin:`0 0 0 ${(0,S.bf)(e.horizontalItemGutter)}`,tabsHorizontalItemMarginRTL:`0 0 0 ${(0,S.bf)(e.horizontalItemGutter)}`});return[Ma(t),za(t),Za(t),La(t),Ia(t),_a(t),wa(t)]},Da),Oa=()=>null,Aa=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n};const ft=e=>{var t,n,r,i,l,c,o,d,s,m,b;const{type:C,className:Z,rootClassName:B,size:P,onEdit:_,hideAdd:$,centered:g,addIcon:I,removeIcon:O,moreIcon:W,more:j,popupClassName:G,children:z,items:T,animated:R,style:f,indicatorSize:x,indicator:h}=e,y=Aa(e,["type","className","rootClassName","size","onEdit","hideAdd","centered","addIcon","removeIcon","moreIcon","more","popupClassName","children","items","animated","style","indicatorSize","indicator"]),{prefixCls:K}=y,{direction:X,tabs:v,getPrefixCls:U,getPopupContainer:oe}=a.useContext(ga.E_),k=U("tabs",K),Q=(0,ha.Z)(k),[fe,E,A]=Ba(k,Q);let H;C==="editable-card"&&(H={onEdit:(me,$e)=>{let{key:M,event:le}=$e;_==null||_(me==="add"?le:M,me)},removeIcon:(t=O!=null?O:v==null?void 0:v.removeIcon)!==null&&t!==void 0?t:a.createElement(Zt.Z,null),addIcon:(I!=null?I:v==null?void 0:v.addIcon)||a.createElement(Nt.Z,null),showAdd:$!==!0});const F=U(),J=(0,pa.Z)(P),ne=Pa(T,z),ee=ya(k,R),pe=Object.assign(Object.assign({},v==null?void 0:v.style),f),ve={align:(n=h==null?void 0:h.align)!==null&&n!==void 0?n:(r=v==null?void 0:v.indicator)===null||r===void 0?void 0:r.align,size:(o=(l=(i=h==null?void 0:h.size)!==null&&i!==void 0?i:x)!==null&&l!==void 0?l:(c=v==null?void 0:v.indicator)===null||c===void 0?void 0:c.size)!==null&&o!==void 0?o:v==null?void 0:v.indicatorSize};return fe(a.createElement(ma,Object.assign({direction:X,getPopupContainer:oe},y,{items:ne,className:Y()({[`${k}-${J}`]:J,[`${k}-card`]:["card","editable-card"].includes(C),[`${k}-editable-card`]:C==="editable-card",[`${k}-centered`]:g},v==null?void 0:v.className,Z,B,E,A,Q),popupClassName:Y()(G,E,A,Q),style:pe,editable:H,more:Object.assign({icon:(b=(m=(s=(d=v==null?void 0:v.more)===null||d===void 0?void 0:d.icon)!==null&&s!==void 0?s:v==null?void 0:v.moreIcon)!==null&&m!==void 0?m:W)!==null&&b!==void 0?b:a.createElement(Mt.Z,null),transitionName:`${F}-slide-up`},j),prefixCls:k,animated:ee,indicator:ve})))};ft.TabPane=Oa;var Wa=ft}}]);
