"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(91),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}}]);
