!(function(){var zn=(ye,J)=>(J=Symbol[ye])?J:Symbol.for("Symbol."+ye),lo=ye=>{throw TypeError(ye)};var uo=function(ye,J){this[0]=ye,this[1]=J};var Fn=ye=>{var J=ye[zn("asyncIterator")],f=!1,l,Y={};return J==null?(J=ye[zn("iterator")](),l=ee=>Y[ee]=le=>J[ee](le)):(J=J.call(ye),l=ee=>Y[ee]=le=>{if(f){if(f=!1,ee==="throw")throw le;return le}return f=!0,{done:!1,value:new uo(new Promise(G=>{var s=J[ee](le);s instanceof Object||lo("Object expected"),G(s)}),1)}}),Y[zn("iterator")]=()=>Y,l("next"),"throw"in J?l("throw"):Y.throw=ee=>{throw ee},"return"in J&&l("return"),Y};(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[4346],{85040:function(ye,J,f){"use strict";f.d(J,{f:function(){return Ka}});var l=f(4942),Y=f(74165),ee=f(15861),le=f(91),G=f(97685),s=f(1413),q=f(10915),Q=f(21770),p=f(67294);function ve(r){var e=typeof window=="undefined",n=(0,p.useState)(function(){return e?!1:window.matchMedia(r).matches}),t=(0,G.Z)(n,2),a=t[0],i=t[1];return(0,p.useLayoutEffect)(function(){if(!e){var o=window.matchMedia(r),c=function(v){return i(v.matches)};return o.addListener(c),function(){return o.removeListener(c)}}},[r]),a}var ge={xs:{maxWidth:575,matchMedia:"(max-width: 575px)"},sm:{minWidth:576,maxWidth:767,matchMedia:"(min-width: 576px) and (max-width: 767px)"},md:{minWidth:768,maxWidth:991,matchMedia:"(min-width: 768px) and (max-width: 991px)"},lg:{minWidth:992,maxWidth:1199,matchMedia:"(min-width: 992px) and (max-width: 1199px)"},xl:{minWidth:1200,maxWidth:1599,matchMedia:"(min-width: 1200px) and (max-width: 1599px)"},xxl:{minWidth:1600,matchMedia:"(min-width: 1600px)"}},_e=function(){var e=void 0;if(typeof window=="undefined")return e;var n=Object.keys(ge).find(function(t){var a=ge[t].matchMedia;return!!window.matchMedia(a).matches});return e=n,e},Ze=function(){var e=ve(ge.md.matchMedia),n=ve(ge.lg.matchMedia),t=ve(ge.xxl.matchMedia),a=ve(ge.xl.matchMedia),i=ve(ge.sm.matchMedia),o=ve(ge.xs.matchMedia),c=(0,p.useState)(_e()),d=(0,G.Z)(c,2),v=d[0],m=d[1];return(0,p.useEffect)(function(){if(t){m("xxl");return}if(a){m("xl");return}if(n){m("lg");return}if(e){m("md");return}if(i){m("sm");return}if(o){m("xs");return}m("md")},[e,n,t,a,i,o]),v},he=f(12044);function I(r,e){var n=typeof r.pageName=="string"?r.title:e;(0,p.useEffect)(function(){(0,he.j)()&&n&&(document.title=n)},[r.title,n])}var j=f(1977),R=f(73177);function U(r){if((0,j.n)((0,R.b)(),"5.6.0")<0)return r;var e={colorGroupTitle:"groupTitleColor",radiusItem:"itemBorderRadius",radiusSubMenuItem:"subMenuItemBorderRadius",colorItemText:"itemColor",colorItemTextHover:"itemHoverColor",colorItemTextHoverHorizontal:"horizontalItemHoverColor",colorItemTextSelected:"itemSelectedColor",colorItemTextSelectedHorizontal:"horizontalItemSelectedColor",colorItemTextDisabled:"itemDisabledColor",colorDangerItemText:"dangerItemColor",colorDangerItemTextHover:"dangerItemHoverColor",colorDangerItemTextSelected:"dangerItemSelectedColor",colorDangerItemBgActive:"dangerItemActiveBg",colorDangerItemBgSelected:"dangerItemSelectedBg",colorItemBg:"itemBg",colorItemBgHover:"itemHoverBg",colorSubItemBg:"subMenuItemBg",colorItemBgActive:"itemActiveBg",colorItemBgSelected:"itemSelectedBg",colorItemBgSelectedHorizontal:"horizontalItemSelectedBg",colorActiveBarWidth:"activeBarWidth",colorActiveBarHeight:"activeBarHeight",colorActiveBarBorderSize:"activeBarBorderWidth"},n=(0,s.Z)({},r);return Object.keys(e).forEach(function(t){n[t]!==void 0&&(n[e[t]]=n[t],delete n[t])}),n}var ce=f(47930);function K(r,e){return e>>>r|e<<32-r}function ne(r,e,n){return r&e^~r&n}function ae(r,e,n){return r&e^r&n^e&n}function ue(r){return K(2,r)^K(13,r)^K(22,r)}function Z(r){return K(6,r)^K(11,r)^K(25,r)}function C(r){return K(7,r)^K(18,r)^r>>>3}function h(r){return K(17,r)^K(19,r)^r>>>10}function W(r,e){return r[e&15]+=h(r[e+14&15])+r[e+9&15]+C(r[e+1&15])}var _=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],b,$,M,de="0123456789abcdef";function fe(r,e){var n=(r&65535)+(e&65535),t=(r>>16)+(e>>16)+(n>>16);return t<<16|n&65535}function Ee(){b=new Array(8),$=new Array(2),M=new Array(64),$[0]=$[1]=0,b[0]=1779033703,b[1]=3144134277,b[2]=1013904242,b[3]=2773480762,b[4]=1359893119,b[5]=2600822924,b[6]=528734635,b[7]=1541459225}function pe(){var r,e,n,t,a,i,o,c,d,v,m=new Array(16);r=b[0],e=b[1],n=b[2],t=b[3],a=b[4],i=b[5],o=b[6],c=b[7];for(var S=0;S<16;S++)m[S]=M[(S<<2)+3]|M[(S<<2)+2]<<8|M[(S<<2)+1]<<16|M[S<<2]<<24;for(var x=0;x<64;x++)d=c+Z(a)+ne(a,i,o)+_[x],x<16?d+=m[x]:d+=W(m,x),v=ue(r)+ae(r,e,n),c=o,o=i,i=a,a=fe(t,d),t=n,n=e,e=r,r=fe(d,v);b[0]+=r,b[1]+=e,b[2]+=n,b[3]+=t,b[4]+=a,b[5]+=i,b[6]+=o,b[7]+=c}function je(r,e){var n,t,a=0;t=$[0]>>3&63;var i=e&63;for(($[0]+=e<<3)<e<<3&&$[1]++,$[1]+=e>>29,n=0;n+63<e;n+=64){for(var o=t;o<64;o++)M[o]=r.charCodeAt(a++);pe(),t=0}for(var c=0;c<i;c++)M[c]=r.charCodeAt(a++)}function Te(){var r=$[0]>>3&63;if(M[r++]=128,r<=56)for(var e=r;e<56;e++)M[e]=0;else{for(var n=r;n<64;n++)M[n]=0;pe();for(var t=0;t<56;t++)M[t]=0}M[56]=$[1]>>>24&255,M[57]=$[1]>>>16&255,M[58]=$[1]>>>8&255,M[59]=$[1]&255,M[60]=$[0]>>>24&255,M[61]=$[0]>>>16&255,M[62]=$[0]>>>8&255,M[63]=$[0]&255,pe()}function De(){for(var r=0,e=new Array(32),n=0;n<8;n++)e[r++]=b[n]>>>24&255,e[r++]=b[n]>>>16&255,e[r++]=b[n]>>>8&255,e[r++]=b[n]&255;return e}function ze(){for(var r=new String,e=0;e<8;e++)for(var n=28;n>=0;n-=4)r+=de.charAt(b[e]>>>n&15);return r}function hn(r){return Ee(),je(r,r.length),Te(),ze()}var Mn=hn;function nn(r){"@babel/helpers - typeof";return nn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},nn(r)}var Et=["pro_layout_parentKeys","children","icon","flatMenu","indexRoute","routes"];function jt(r,e){return Dt(r)||Lt(r,e)||Rn(r,e)||wt()}function wt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Lt(r,e){var n=r==null?null:typeof Symbol!="undefined"&&r[Symbol.iterator]||r["@@iterator"];if(n!=null){var t=[],a=!0,i=!1,o,c;try{for(n=n.call(r);!(a=(o=n.next()).done)&&(t.push(o.value),!(e&&t.length===e));a=!0);}catch(d){i=!0,c=d}finally{try{!a&&n.return!=null&&n.return()}finally{if(i)throw c}}return t}}function Dt(r){if(Array.isArray(r))return r}function Nt(r,e){var n=typeof Symbol!="undefined"&&r[Symbol.iterator]||r["@@iterator"];if(!n){if(Array.isArray(r)||(n=Rn(r))||e&&r&&typeof r.length=="number"){n&&(r=n);var t=0,a=function(){};return{s:a,n:function(){return t>=r.length?{done:!0}:{done:!1,value:r[t++]}},e:function(v){throw v},f:a}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i=!0,o=!1,c;return{s:function(){n=n.call(r)},n:function(){var v=n.next();return i=v.done,v},e:function(v){o=!0,c=v},f:function(){try{!i&&n.return!=null&&n.return()}finally{if(o)throw c}}}}function At(r,e){if(!(r instanceof e))throw new TypeError("Cannot call a class as a function")}function Kn(r,e){for(var n=0;n<e.length;n++){var t=e[n];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(r,t.key,t)}}function Ot(r,e,n){return e&&Kn(r.prototype,e),n&&Kn(r,n),Object.defineProperty(r,"prototype",{writable:!1}),r}function Ht(r,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),e&&tn(r,e)}function $t(r){var e=Un();return function(){var t=rn(r),a;if(e){var i=rn(this).constructor;a=Reflect.construct(t,arguments,i)}else a=t.apply(this,arguments);return Wt(this,a)}}function Wt(r,e){if(e&&(nn(e)==="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return zt(r)}function zt(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function In(r){var e=typeof Map=="function"?new Map:void 0;return In=function(t){if(t===null||!Ft(t))return t;if(typeof t!="function")throw new TypeError("Super expression must either be null or a function");if(typeof e!="undefined"){if(e.has(t))return e.get(t);e.set(t,a)}function a(){return gn(t,arguments,rn(this).constructor)}return a.prototype=Object.create(t.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),tn(a,t)},In(r)}function gn(r,e,n){return Un()?gn=Reflect.construct.bind():gn=function(a,i,o){var c=[null];c.push.apply(c,i);var d=Function.bind.apply(a,c),v=new d;return o&&tn(v,o.prototype),v},gn.apply(null,arguments)}function Un(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(r){return!1}}function Ft(r){return Function.toString.call(r).indexOf("[native code]")!==-1}function tn(r,e){return tn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},tn(r,e)}function rn(r){return rn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},rn(r)}function Gn(r){return Gt(r)||Ut(r)||Rn(r)||Kt()}function Kt(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Rn(r,e){if(r){if(typeof r=="string")return Tn(r,e);var n=Object.prototype.toString.call(r).slice(8,-1);if(n==="Object"&&r.constructor&&(n=r.constructor.name),n==="Map"||n==="Set")return Array.from(r);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Tn(r,e)}}function Ut(r){if(typeof Symbol!="undefined"&&r[Symbol.iterator]!=null||r["@@iterator"]!=null)return Array.from(r)}function Gt(r){if(Array.isArray(r))return Tn(r)}function Tn(r,e){(e==null||e>r.length)&&(e=r.length);for(var n=0,t=new Array(e);n<e;n++)t[n]=r[n];return t}function Xt(r,e){if(r==null)return{};var n=Vt(r,e),t,a;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);for(a=0;a<i.length;a++)t=i[a],!(e.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(r,t)&&(n[t]=r[t])}return n}function Vt(r,e){if(r==null)return{};var n={},t=Object.keys(r),a,i;for(i=0;i<t.length;i++)a=t[i],!(e.indexOf(a)>=0)&&(n[a]=r[a]);return n}function Xn(r,e){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);e&&(t=t.filter(function(a){return Object.getOwnPropertyDescriptor(r,a).enumerable})),n.push.apply(n,t)}return n}function xe(r){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Xn(Object(n),!0).forEach(function(t){kt(r,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):Xn(Object(n)).forEach(function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(n,t))})}return r}function kt(r,e,n){return e in r?Object.defineProperty(r,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):r[e]=n,r}var we="routes";function an(r){return r.split("?")[0].split("#")[0]}var Pn=function(e){if(!e.startsWith("http"))return!1;try{var n=new URL(e);return!!n}catch(t){return!1}},Qt=function(e){var n=e.path;if(!n||n==="/")try{return"/".concat(Mn(JSON.stringify(e)))}catch(t){}return n&&an(n)},Jt=function(e,n){var t=e.name,a=e.locale;return"locale"in e&&a===!1||!t?!1:e.locale||"".concat(n,".").concat(t)},Vn=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"/";return e.endsWith("/*")?e.replace("/*","/"):(e||n).startsWith("/")||Pn(e)?e:"/".concat(n,"/").concat(e).replace(/\/\//g,"/").replace(/\/\//g,"/")},Yt=function(e,n){var t=e.menu,a=t===void 0?{}:t,i=e.indexRoute,o=e.path,c=o===void 0?"":o,d=e.children||[],v=a.name,m=v===void 0?e.name:v,S=a.icon,x=S===void 0?e.icon:S,P=a.hideChildren,N=P===void 0?e.hideChildren:P,D=a.flatMenu,B=D===void 0?e.flatMenu:D,z=i&&Object.keys(i).join(",")!=="redirect"?[xe({path:c,menu:a},i)].concat(d||[]):d,H=xe({},e);if(m&&(H.name=m),x&&(H.icon=x),z&&z.length){if(N)return delete H.children,H;var F=Bn(xe(xe({},n),{},{data:z}),e);if(B)return F;delete H[we]}return H},Xe=function(e){return Array.isArray(e)&&e.length>0};function Bn(r){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{path:"/"},n=r.data,t=r.formatMessage,a=r.parentName,i=r.locale;return!n||!Array.isArray(n)?[]:n.filter(function(o){return o?Xe(o.children)||o.path||o.originPath||o.layout?!0:(o.redirect||o.unaccessible,!1):!1}).filter(function(o){var c,d;return!(o==null||(c=o.menu)===null||c===void 0)&&c.name||o!=null&&o.flatMenu||!(o==null||(d=o.menu)===null||d===void 0)&&d.flatMenu?!0:o.menu!==!1}).map(function(o){var c=xe(xe({},o),{},{path:o.path||o.originPath});return!c.children&&c[we]&&(c.children=c[we],delete c[we]),c.unaccessible&&delete c.name,c.path==="*"&&(c.path="."),c.path==="/*"&&(c.path="."),!c.path&&c.originPath&&(c.path=c.originPath),c}).map(function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{path:"/"},c=o.children||o[we]||[],d=Vn(o.path,e?e.path:"/"),v=o.name,m=Jt(o,a||"menu"),S=m!==!1&&i!==!1&&t&&m?t({id:m,defaultMessage:v}):v,x=e.pro_layout_parentKeys,P=x===void 0?[]:x,N=e.children,D=e.icon,B=e.flatMenu,z=e.indexRoute,H=e.routes,F=Xt(e,Et),L=new Set([].concat(Gn(P),Gn(o.parentKeys||[])));e.key&&L.add(e.key);var A=xe(xe(xe({},F),{},{menu:void 0},o),{},{path:d,locale:m,key:o.key||Qt(xe(xe({},o),{},{path:d})),pro_layout_parentKeys:Array.from(L).filter(function(E){return E&&E!=="/"})});if(S?A.name=S:delete A.name,A.menu===void 0&&delete A.menu,Xe(c)){var y=Bn(xe(xe({},r),{},{data:c,parentName:m||""}),A);Xe(y)&&(A.children=y)}return Yt(A,r)}).flat(1)}var qt=function r(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return e.filter(function(n){return n&&(n.name||Xe(n.children))&&!n.hideInMenu&&!n.redirect}).map(function(n){var t=xe({},n),a=t.children||n[we]||[];if(delete t[we],Xe(a)&&!t.hideChildrenInMenu&&a.some(function(o){return o&&!!o.name})){var i=r(a);if(i.length)return xe(xe({},t),{},{children:i})}return xe({},n)}).filter(function(n){return n})},er=function(r){Ht(n,r);var e=$t(n);function n(){return At(this,n),e.apply(this,arguments)}return Ot(n,[{key:"get",value:function(a){var i;try{var o=Nt(this.entries()),c;try{for(o.s();!(c=o.n()).done;){var d=jt(c.value,2),v=d[0],m=d[1],S=an(v);if(!Pn(v)&&(0,ce.Bo)(S,[]).test(a)){i=m;break}}}catch(x){o.e(x)}finally{o.f()}}catch(x){i=void 0}return i}}]),n}(In(Map)),nr=function(e){var n=new er,t=function a(i,o){i.forEach(function(c){var d=c.children||c[we]||[];Xe(d)&&a(d,c);var v=Vn(c.path,o?o.path:"/");n.set(an(v),c)})};return t(e),n},tr=function r(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return e.map(function(n){var t=n.children||n[we];if(Xe(t)){var a=r(t);if(a.length)return xe({},n)}var i=xe({},n);return delete i[we],delete i.children,i}).filter(function(n){return n})},rr=function(e,n,t,a){var i=Bn({data:e,formatMessage:t,locale:n}),o=a?tr(i):qt(i),c=nr(i);return{breadcrumb:c,menuData:o}},ar=rr;function kn(r,e){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);e&&(t=t.filter(function(a){return Object.getOwnPropertyDescriptor(r,a).enumerable})),n.push.apply(n,t)}return n}function on(r){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?kn(Object(n),!0).forEach(function(t){or(r,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):kn(Object(n)).forEach(function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(n,t))})}return r}function or(r,e,n){return e in r?Object.defineProperty(r,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):r[e]=n,r}var ir=function r(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],n={};return e.forEach(function(t){var a=on({},t);if(!(!a||!a.key)){!a.children&&a[we]&&(a.children=a[we],delete a[we]);var i=a.children||[];n[an(a.path||a.key||"/")]=on({},a),n[a.key||a.path||"/"]=on({},a),i&&(n=on(on({},n),r(i)))}}),n},lr=ir,ur=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;return e.filter(function(a){if(a==="/"&&n==="/")return!0;if(a!=="/"&&a!=="/*"&&a&&!Pn(a)){var i=an(a);try{if(t&&(0,ce.Bo)("".concat(i)).test(n)||(0,ce.Bo)("".concat(i),[]).test(n)||(0,ce.Bo)("".concat(i,"/(.*)")).test(n))return!0}catch(o){}}return!1}).sort(function(a,i){return a===n?10:i===n?-10:a.substr(1).split("/").length-i.substr(1).split("/").length})},cr=function(e,n,t,a){var i=lr(n),o=Object.keys(i),c=ur(o,e||"/",a);return!c||c.length<1?[]:(t||(c=[c[c.length-1]]),c.map(function(d){var v=i[d]||{pro_layout_parentKeys:"",key:""},m=new Map,S=(v.pro_layout_parentKeys||[]).map(function(x){return m.has(x)?null:(m.set(x,!0),i[x])}).filter(function(x){return x});return v.key&&S.push(v),S}).flat(1))},dr=cr,He=f(21532),Ve=f(26058),sr=f(93967),te=f.n(sr),Qn=f(98423),vr=f(80334),fr=f(5068),mr=f(25269),hr=f(78164),u=f(85893),gr=function(e){var n=(0,p.useContext)(q.L_),t=n.hashId,a=e.style,i=e.prefixCls,o=e.children,c=e.hasPageContainer,d=c===void 0?0:c,v=te()("".concat(i,"-content"),t,(0,l.Z)((0,l.Z)({},"".concat(i,"-has-header"),e.hasHeader),"".concat(i,"-content-has-page-container"),d>0)),m=e.ErrorBoundary||hr.S;return e.ErrorBoundary===!1?(0,u.jsx)(Ve.Z.Content,{className:v,style:a,children:o}):(0,u.jsx)(m,{children:(0,u.jsx)(Ve.Z.Content,{className:v,style:a,children:o})})},pr=function(){return(0,u.jsxs)("svg",{width:"1em",height:"1em",viewBox:"0 0 200 200",children:[(0,u.jsxs)("defs",{children:[(0,u.jsxs)("linearGradient",{x1:"62.1023273%",y1:"0%",x2:"108.19718%",y2:"37.8635764%",id:"linearGradient-1",children:[(0,u.jsx)("stop",{stopColor:"#4285EB",offset:"0%"}),(0,u.jsx)("stop",{stopColor:"#2EC7FF",offset:"100%"})]}),(0,u.jsxs)("linearGradient",{x1:"69.644116%",y1:"0%",x2:"54.0428975%",y2:"108.456714%",id:"linearGradient-2",children:[(0,u.jsx)("stop",{stopColor:"#29CDFF",offset:"0%"}),(0,u.jsx)("stop",{stopColor:"#148EFF",offset:"37.8600687%"}),(0,u.jsx)("stop",{stopColor:"#0A60FF",offset:"100%"})]}),(0,u.jsxs)("linearGradient",{x1:"69.6908165%",y1:"-12.9743587%",x2:"16.7228981%",y2:"117.391248%",id:"linearGradient-3",children:[(0,u.jsx)("stop",{stopColor:"#FA816E",offset:"0%"}),(0,u.jsx)("stop",{stopColor:"#F74A5C",offset:"41.472606%"}),(0,u.jsx)("stop",{stopColor:"#F51D2C",offset:"100%"})]}),(0,u.jsxs)("linearGradient",{x1:"68.1279872%",y1:"-35.6905737%",x2:"30.4400914%",y2:"114.942679%",id:"linearGradient-4",children:[(0,u.jsx)("stop",{stopColor:"#FA8E7D",offset:"0%"}),(0,u.jsx)("stop",{stopColor:"#F74A5C",offset:"51.2635191%"}),(0,u.jsx)("stop",{stopColor:"#F51D2C",offset:"100%"})]})]}),(0,u.jsx)("g",{stroke:"none",strokeWidth:1,fill:"none",fillRule:"evenodd",children:(0,u.jsx)("g",{transform:"translate(-20.000000, -20.000000)",children:(0,u.jsx)("g",{transform:"translate(20.000000, 20.000000)",children:(0,u.jsxs)("g",{children:[(0,u.jsxs)("g",{fillRule:"nonzero",children:[(0,u.jsxs)("g",{children:[(0,u.jsx)("path",{d:"M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C99.2571609,26.9692191 101.032305,26.9692191 102.20193,28.1378823 L129.985225,55.8983314 C134.193707,60.1033528 141.017005,60.1033528 145.225487,55.8983314 C149.433969,51.69331 149.433969,44.8756232 145.225487,40.6706018 L108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z",fill:"url(#linearGradient-1)"}),(0,u.jsx)("path",{d:"M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C100.999864,25.6271836 105.751642,20.541824 112.729652,19.3524487 C117.915585,18.4685261 123.585219,20.4140239 129.738554,25.1889424 C125.624663,21.0784292 118.571995,14.0340304 108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z",fill:"url(#linearGradient-2)"})]}),(0,u.jsx)("path",{d:"M153.685633,135.854579 C157.894115,140.0596 164.717412,140.0596 168.925894,135.854579 L195.959977,108.842726 C200.659183,104.147384 200.659183,96.5636133 195.960527,91.8688194 L168.690777,64.7181159 C164.472332,60.5180858 157.646868,60.5241425 153.435895,64.7316526 C149.227413,68.936674 149.227413,75.7543607 153.435895,79.9593821 L171.854035,98.3623765 C173.02366,99.5310396 173.02366,101.304724 171.854035,102.473387 L153.685633,120.626849 C149.47715,124.83187 149.47715,131.649557 153.685633,135.854579 Z",fill:"url(#linearGradient-3)"})]}),(0,u.jsx)("ellipse",{fill:"url(#linearGradient-4)",cx:"100.519339",cy:"100.436681",rx:"23.6001926",ry:"23.580786"})]})})})})]})},yr=f(33197),ln=f(62812),xr=f(60532),Cr=f(55241),br=function(){return(0,u.jsx)("svg",{width:"1em",height:"1em",viewBox:"0 0 12 12",fill:"currentColor","aria-hidden":"true",children:(0,u.jsx)("path",{d:"M0 0h3v3H0V0zm4.5 0h3v3h-3V0zM9 0h3v3H9V0zM0 4.5h3v3H0v-3zm4.503 0h3v3h-3v-3zM9 4.5h3v3H9v-3zM0 9h3v3H0V9zm4.503 0h3v3h-3V9zM9 9h3v3H9V9z"})})},Sr=function r(e){var n=e.appList,t=e.baseClassName,a=e.hashId,i=e.itemClick;return(0,u.jsx)("div",{className:"".concat(t,"-content ").concat(a).trim(),children:(0,u.jsx)("ul",{className:"".concat(t,"-content-list ").concat(a).trim(),children:n==null?void 0:n.map(function(o,c){var d;return o!=null&&(d=o.children)!==null&&d!==void 0&&d.length?(0,u.jsxs)("div",{className:"".concat(t,"-content-list-item-group ").concat(a).trim(),children:[(0,u.jsx)("div",{className:"".concat(t,"-content-list-item-group-title ").concat(a).trim(),children:o.title}),(0,u.jsx)(r,{hashId:a,itemClick:i,appList:o==null?void 0:o.children,baseClassName:t})]},c):(0,u.jsx)("li",{className:"".concat(t,"-content-list-item ").concat(a).trim(),onClick:function(m){m.stopPropagation(),i==null||i(o)},children:(0,u.jsxs)("a",{href:i?void 0:o.url,target:o.target,rel:"noreferrer",children:[En(o.icon),(0,u.jsxs)("div",{children:[(0,u.jsx)("div",{children:o.title}),o.desc?(0,u.jsx)("span",{children:o.desc}):null]})]})},c)})})})},_n=function(e){if(!e||!e.startsWith("http"))return!1;try{var n=new URL(e);return!!n}catch(t){return!1}},Zr=function(e,n){if(e&&typeof e=="string"&&_n(e))return(0,u.jsx)("img",{src:e,alt:"logo"});if(typeof e=="function")return e();if(e&&typeof e=="string")return(0,u.jsx)("div",{id:"avatarLogo",children:e});if(!e&&n&&typeof n=="string"){var t=n.substring(0,1);return(0,u.jsx)("div",{id:"avatarLogo",children:t})}return e},Mr=function r(e){var n=e.appList,t=e.baseClassName,a=e.hashId,i=e.itemClick;return(0,u.jsx)("div",{className:"".concat(t,"-content ").concat(a).trim(),children:(0,u.jsx)("ul",{className:"".concat(t,"-content-list ").concat(a).trim(),children:n==null?void 0:n.map(function(o,c){var d;return o!=null&&(d=o.children)!==null&&d!==void 0&&d.length?(0,u.jsxs)("div",{className:"".concat(t,"-content-list-item-group ").concat(a).trim(),children:[(0,u.jsx)("div",{className:"".concat(t,"-content-list-item-group-title ").concat(a).trim(),children:o.title}),(0,u.jsx)(r,{hashId:a,itemClick:i,appList:o==null?void 0:o.children,baseClassName:t})]},c):(0,u.jsx)("li",{className:"".concat(t,"-content-list-item ").concat(a).trim(),onClick:function(m){m.stopPropagation(),i==null||i(o)},children:(0,u.jsxs)("a",{href:i?"javascript:;":o.url,target:o.target,rel:"noreferrer",children:[Zr(o.icon,o.title),(0,u.jsx)("div",{children:(0,u.jsx)("div",{children:o.title})})]})},c)})})})},Pe=f(64847),Ir=function(e){return{"&-content":{maxHeight:"calc(100vh - 48px)",overflow:"auto","&-list":{boxSizing:"content-box",maxWidth:656,marginBlock:0,marginInline:0,paddingBlock:0,paddingInline:0,listStyle:"none","&-item":{position:"relative",display:"inline-block",width:328,height:72,paddingInline:16,paddingBlock:16,verticalAlign:"top",listStyleType:"none",transition:"transform 0.2s cubic-bezier(0.333, 0, 0, 1)",borderRadius:e.borderRadius,"&-group":{marginBottom:16,"&-title":{margin:"16px 0 8px 12px",fontWeight:600,color:"rgba(0, 0, 0, 0.88)",fontSize:16,opacity:.85,lineHeight:1.5,"&:first-child":{marginTop:12}}},"&:hover":{backgroundColor:e.colorBgTextHover},"* div":Pe.Wf===null||Pe.Wf===void 0?void 0:(0,Pe.Wf)(e),a:{display:"flex",height:"100%",fontSize:12,textDecoration:"none","& > img":{width:40,height:40},"& > div":{marginInlineStart:14,color:e.colorTextHeading,fontSize:14,lineHeight:"22px",whiteSpace:"nowrap",textOverflow:"ellipsis"},"& > div > span":{color:e.colorTextSecondary,fontSize:12,lineHeight:"20px"}}}}}}},Rr=function(e){return{"&-content":{maxHeight:"calc(100vh - 48px)",overflow:"auto","&-list":{boxSizing:"border-box",maxWidth:376,marginBlock:0,marginInline:0,paddingBlock:0,paddingInline:0,listStyle:"none","&-item":{position:"relative",display:"inline-block",width:104,height:104,marginBlock:8,marginInline:8,paddingInline:24,paddingBlock:24,verticalAlign:"top",listStyleType:"none",transition:"transform 0.2s cubic-bezier(0.333, 0, 0, 1)",borderRadius:e.borderRadius,"&-group":{marginBottom:16,"&-title":{margin:"16px 0 8px 12px",fontWeight:600,color:"rgba(0, 0, 0, 0.88)",fontSize:16,opacity:.85,lineHeight:1.5,"&:first-child":{marginTop:12}}},"&:hover":{backgroundColor:e.colorBgTextHover},a:{display:"flex",flexDirection:"column",alignItems:"center",height:"100%",fontSize:12,textDecoration:"none","& > #avatarLogo":{width:40,height:40,margin:"0 auto",color:e.colorPrimary,fontSize:22,lineHeight:"40px",textAlign:"center",backgroundImage:"linear-gradient(180deg, #E8F0FB 0%, #F6F8FC 100%)",borderRadius:e.borderRadius},"& > img":{width:40,height:40},"& > div":{marginBlockStart:5,marginInlineStart:0,color:e.colorTextHeading,fontSize:14,lineHeight:"22px",whiteSpace:"nowrap",textOverflow:"ellipsis"},"& > div > span":{color:e.colorTextSecondary,fontSize:12,lineHeight:"20px"}}}}}}},Tr=function(e){var n,t,a,i,o;return(0,l.Z)({},e.componentCls,{"&-icon":{display:"inline-flex",alignItems:"center",justifyContent:"center",paddingInline:4,paddingBlock:0,fontSize:14,lineHeight:"14px",height:28,width:28,cursor:"pointer",color:(n=e.layout)===null||n===void 0?void 0:n.colorTextAppListIcon,borderRadius:e.borderRadius,"&:hover":{color:(t=e.layout)===null||t===void 0?void 0:t.colorTextAppListIconHover,backgroundColor:(a=e.layout)===null||a===void 0?void 0:a.colorBgAppListIconHover},"&-active":{color:(i=e.layout)===null||i===void 0?void 0:i.colorTextAppListIconHover,backgroundColor:(o=e.layout)===null||o===void 0?void 0:o.colorBgAppListIconHover}},"&-item-title":{marginInlineStart:"16px",marginInlineEnd:"8px",marginBlockStart:0,marginBlockEnd:"12px",fontWeight:600,color:"rgba(0, 0, 0, 0.88)",fontSize:16,opacity:.85,lineHeight:1.5,"&:first-child":{marginBlockStart:12}},"&-popover":(0,l.Z)({},"".concat(e.antCls,"-popover-arrow"),{display:"none"}),"&-simple":Rr(e),"&-default":Ir(e)})};function Pr(r){return(0,Pe.Xj)("AppsLogoComponents",function(e){var n=(0,s.Z)((0,s.Z)({},e),{},{componentCls:".".concat(r)});return[Tr(n)]})}var En=function(e){return typeof e=="string"?(0,u.jsx)("img",{width:"auto",height:22,src:e,alt:"logo"}):typeof e=="function"?e():e},jn=function(e){var n,t=e.appList,a=e.appListRender,i=e.prefixCls,o=i===void 0?"ant-pro":i,c=e.onItemClick,d=p.useRef(null),v=p.useRef(null),m="".concat(o,"-layout-apps"),S=Pr(m),x=S.wrapSSR,P=S.hashId,N=(0,p.useState)(!1),D=(0,G.Z)(N,2),B=D[0],z=D[1],H=function(E){c==null||c(E,v)},F=(0,p.useMemo)(function(){var y=t==null?void 0:t.some(function(E){return!(E!=null&&E.desc)});return y?(0,u.jsx)(Mr,{hashId:P,appList:t,itemClick:c?H:void 0,baseClassName:"".concat(m,"-simple")}):(0,u.jsx)(Sr,{hashId:P,appList:t,itemClick:c?H:void 0,baseClassName:"".concat(m,"-default")})},[t,m,P]);if(!(e!=null&&(n=e.appList)!==null&&n!==void 0&&n.length))return null;var L=a?a(e==null?void 0:e.appList,F):F,A=(0,R.X)(void 0,function(y){return z(y)});return x((0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("div",{ref:d,onClick:function(E){E.stopPropagation(),E.preventDefault()}}),(0,u.jsx)(Cr.Z,(0,s.Z)((0,s.Z)({placement:"bottomRight",trigger:["click"],zIndex:9999,arrow:!1},A),{},{overlayClassName:"".concat(m,"-popover ").concat(P).trim(),content:L,getPopupContainer:function(){return d.current||document.body},children:(0,u.jsx)("span",{ref:v,onClick:function(E){E.stopPropagation()},className:te()("".concat(m,"-icon"),P,(0,l.Z)({},"".concat(m,"-icon-active"),B)),children:(0,u.jsx)(br,{})})}))]}))},Jn=f(68997),Br=f(78957),Yn=f(50136);function _r(){return(0,u.jsx)("svg",{width:"1em",height:"1em",viewBox:"0 0 12 12",fill:"currentColor","aria-hidden":"true",children:(0,u.jsx)("path",{d:"M6.432 7.967a.448.448 0 01-.318.133h-.228a.46.46 0 01-.318-.133L2.488 4.85a.305.305 0 010-.43l.427-.43a.293.293 0 01.42 0L6 6.687l2.665-2.699a.299.299 0 01.426 0l.42.431a.305.305 0 010 .43L6.432 7.967z"})})}var Er=function(e){var n,t,a;return(0,l.Z)({},e.componentCls,{position:"absolute",insetBlockStart:"18px",zIndex:"101",width:"24px",height:"24px",fontSize:["14px","16px"],textAlign:"center",borderRadius:"40px",insetInlineEnd:"-13px",transition:"transform 0.3s",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",color:(n=e.layout)===null||n===void 0||(n=n.sider)===null||n===void 0?void 0:n.colorTextCollapsedButton,backgroundColor:(t=e.layout)===null||t===void 0||(t=t.sider)===null||t===void 0?void 0:t.colorBgCollapsedButton,boxShadow:"0 2px 8px -2px rgba(0,0,0,0.05), 0 1px 4px -1px rgba(25,15,15,0.07), 0 0 1px 0 rgba(0,0,0,0.08)","&:hover":{color:(a=e.layout)===null||a===void 0||(a=a.sider)===null||a===void 0?void 0:a.colorTextCollapsedButtonHover,boxShadow:"0 4px 16px -4px rgba(0,0,0,0.05), 0 2px 8px -2px rgba(25,15,15,0.07), 0 1px 2px 0 rgba(0,0,0,0.08)"},".anticon":{fontSize:"14px"},"& > svg":{transition:"transform  0.3s",transform:"rotate(90deg)"},"&-collapsed":{"& > svg":{transform:"rotate(-90deg)"}}})};function jr(r){return(0,Pe.Xj)("SiderMenuCollapsedIcon",function(e){var n=(0,s.Z)((0,s.Z)({},e),{},{componentCls:".".concat(r)});return[Er(n)]})}var wr=["isMobile","collapsed"],Lr=function(e){var n=e.isMobile,t=e.collapsed,a=(0,le.Z)(e,wr),i=jr(e.className),o=i.wrapSSR,c=i.hashId;return n&&t?null:o((0,u.jsx)("div",(0,s.Z)((0,s.Z)({},a),{},{className:te()(e.className,c,(0,l.Z)((0,l.Z)({},"".concat(e.className,"-collapsed"),t),"".concat(e.className,"-is-mobile"),n)),children:(0,u.jsx)(_r,{})})))},pn=f(74902),Dr=f(43144),Nr=f(15671),qn=f(91321);function Ar(r){return/\w.(png|jpg|jpeg|svg|webp|gif|bmp)$/i.test(r)}var Or=f(83062),Hr=f(48054),et=f(14192),$r=function(e,n){var t,a,i=n.includes("horizontal")?(t=e.layout)===null||t===void 0?void 0:t.header:(a=e.layout)===null||a===void 0?void 0:a.sider;return(0,s.Z)((0,s.Z)((0,l.Z)({},"".concat(e.componentCls),(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({background:"transparent",color:i==null?void 0:i.colorTextMenu,border:"none"},"".concat(e.componentCls,"-menu-item"),{transition:"none !important"}),"".concat(e.componentCls,"-submenu-has-icon"),(0,l.Z)({},"> ".concat(e.antCls,"-menu-sub"),{paddingInlineStart:10})),"".concat(e.antCls,"-menu-title-content"),{width:"100%",height:"100%",display:"inline-flex"}),"".concat(e.antCls,"-menu-title-content"),{"&:first-child":{width:"100%"}}),"".concat(e.componentCls,"-item-icon"),{display:"flex",alignItems:"center"}),"&&-collapsed",(0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(e.antCls,`-menu-item, 
        `).concat(e.antCls,"-menu-item-group > ").concat(e.antCls,"-menu-item-group-list > ").concat(e.antCls,`-menu-item, 
        `).concat(e.antCls,"-menu-item-group > ").concat(e.antCls,"-menu-item-group-list > ").concat(e.antCls,"-menu-submenu > ").concat(e.antCls,`-menu-submenu-title, 
        `).concat(e.antCls,"-menu-submenu > ").concat(e.antCls,"-menu-submenu-title"),{paddingInline:"0 !important",marginBlock:"4px !important"}),"".concat(e.antCls,"-menu-item-group > ").concat(e.antCls,"-menu-item-group-list > ").concat(e.antCls,"-menu-submenu-selected > ").concat(e.antCls,`-menu-submenu-title, 
        `).concat(e.antCls,"-menu-submenu-selected > ").concat(e.antCls,"-menu-submenu-title"),{backgroundColor:i==null?void 0:i.colorBgMenuItemSelected,borderRadius:e.borderRadiusLG}),"".concat(e.componentCls,"-group"),(0,l.Z)({},"".concat(e.antCls,"-menu-item-group-title"),{paddingInline:0}))),"&-item-title",(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({display:"flex",flexDirection:"row",alignItems:"center",gap:e.marginXS},"".concat(e.componentCls,"-item-text"),{maxWidth:"100%",textOverflow:"ellipsis",overflow:"hidden",wordBreak:"break-all",whiteSpace:"nowrap"}),"&-collapsed",(0,l.Z)((0,l.Z)({minWidth:40,height:40},"".concat(e.componentCls,"-item-icon"),{height:"16px",width:"16px",lineHeight:"16px !important",".anticon":{lineHeight:"16px !important",height:"16px"}}),"".concat(e.componentCls,"-item-text-has-icon"),{display:"none !important"})),"&-collapsed-level-0",{flexDirection:"column",justifyContent:"center"}),"&".concat(e.componentCls,"-group-item-title"),{gap:e.marginXS,height:18,overflow:"hidden"}),"&".concat(e.componentCls,"-item-collapsed-show-title"),(0,l.Z)({lineHeight:"16px",gap:0},"&".concat(e.componentCls,"-item-title-collapsed"),(0,l.Z)((0,l.Z)({display:"flex"},"".concat(e.componentCls,"-item-icon"),{height:"16px",width:"16px",lineHeight:"16px !important",".anticon":{lineHeight:"16px!important",height:"16px"}}),"".concat(e.componentCls,"-item-text"),{opacity:"1 !important",display:"inline !important",textAlign:"center",fontSize:12,height:12,lineHeight:"12px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",width:"100%",margin:0,padding:0,marginBlockStart:4})))),"&-group",(0,l.Z)({},"".concat(e.antCls,"-menu-item-group-title"),{fontSize:12,color:e.colorTextLabel,".anticon":{marginInlineEnd:8}})),"&-group-divider",{color:e.colorTextSecondary,fontSize:12,lineHeight:20})),n.includes("horizontal")?{}:(0,l.Z)({},"".concat(e.antCls,"-menu-submenu").concat(e.antCls,"-menu-submenu-popup"),(0,l.Z)({},"".concat(e.componentCls,"-item-title"),{alignItems:"flex-start"}))),{},(0,l.Z)({},"".concat(e.antCls,"-menu-submenu-popup"),{backgroundColor:"rgba(255, 255, 255, 0.42)","-webkit-backdrop-filter":"blur(8px)",backdropFilter:"blur(8px)"}))};function Wr(r,e){return(0,Pe.Xj)("ProLayoutBaseMenu"+e,function(n){var t=(0,s.Z)((0,s.Z)({},n),{},{componentCls:".".concat(r)});return[$r(t,e||"inline")]})}var nt=function(e){var n=(0,p.useState)(e.collapsed),t=(0,G.Z)(n,2),a=t[0],i=t[1],o=(0,p.useState)(!1),c=(0,G.Z)(o,2),d=c[0],v=c[1];return(0,p.useEffect)(function(){v(!1),setTimeout(function(){i(e.collapsed)},400)},[e.collapsed]),e.disable?e.children:(0,u.jsx)(Or.Z,{title:e.title,open:a&&e.collapsed?d:!1,placement:"right",onOpenChange:v,children:e.children})},tt=(0,qn.Z)({scriptUrl:et.h.iconfontUrl}),rt=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"icon-",t=arguments.length>2?arguments[2]:void 0;if(typeof e=="string"&&e!==""){if(_n(e)||Ar(e))return(0,u.jsx)("img",{width:16,src:e,alt:"icon",className:t},e);if(e.startsWith(n))return(0,u.jsx)(tt,{type:e})}return e},at=function(e){if(e&&typeof e=="string"){var n=e.substring(0,1).toUpperCase();return n}return null},zr=(0,Dr.Z)(function r(e){var n=this;(0,Nr.Z)(this,r),(0,l.Z)(this,"props",void 0),(0,l.Z)(this,"getNavMenuItems",function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],a=arguments.length>1?arguments[1]:void 0,i=arguments.length>2?arguments[2]:void 0;return t.map(function(o){return n.getSubMenuOrItem(o,a,i)}).filter(function(o){return o}).flat(1)}),(0,l.Z)(this,"getSubMenuOrItem",function(t,a,i){var o=n.props,c=o.subMenuItemRender,d=o.baseClassName,v=o.prefixCls,m=o.collapsed,S=o.menu,x=o.iconPrefixes,P=o.layout,N=(S==null?void 0:S.type)==="group"&&P!=="top",D=n.props.token,B=n.getIntlName(t),z=(t==null?void 0:t.children)||(t==null?void 0:t.routes),H=N&&a===0?"group":void 0;if(Array.isArray(z)&&z.length>0){var F,L,A,y,E,V=a===0||N&&a===1,O=rt(t.icon,x,"".concat(d,"-icon ").concat((F=n.props)===null||F===void 0?void 0:F.hashId)),w=m&&V?at(B):null,re=(0,u.jsxs)("div",{className:te()("".concat(d,"-item-title"),(L=n.props)===null||L===void 0?void 0:L.hashId,(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(d,"-item-title-collapsed"),m),"".concat(d,"-item-title-collapsed-level-").concat(i),m),"".concat(d,"-group-item-title"),H==="group"),"".concat(d,"-item-collapsed-show-title"),(S==null?void 0:S.collapsedShowTitle)&&m)),children:[H==="group"&&m?null:V&&O?(0,u.jsx)("span",{className:"".concat(d,"-item-icon ").concat((A=n.props)===null||A===void 0?void 0:A.hashId).trim(),children:O}):w,(0,u.jsx)("span",{className:te()("".concat(d,"-item-text"),(y=n.props)===null||y===void 0?void 0:y.hashId,(0,l.Z)({},"".concat(d,"-item-text-has-icon"),H!=="group"&&V&&(O||w))),children:B})]}),se=c?c((0,s.Z)((0,s.Z)({},t),{},{isUrl:!1}),re,n.props):re;if(N&&a===0&&n.props.collapsed&&!S.collapsedShowGroupTitle)return n.getNavMenuItems(z,a+1,a);var g=n.getNavMenuItems(z,a+1,N&&a===0&&n.props.collapsed?a:a+1);return[{type:H,key:t.key||t.path,label:se,onClick:N?void 0:t.onTitleClick,children:g,className:te()((0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(d,"-group"),H==="group"),"".concat(d,"-submenu"),H!=="group"),"".concat(d,"-submenu-has-icon"),H!=="group"&&V&&O))},N&&a===0?{type:"divider",prefixCls:v,className:"".concat(d,"-divider"),key:(t.key||t.path)+"-group-divider",style:{padding:0,borderBlockEnd:0,margin:n.props.collapsed?"4px":"6px 16px",marginBlockStart:n.props.collapsed?4:8,borderColor:D==null||(E=D.layout)===null||E===void 0||(E=E.sider)===null||E===void 0?void 0:E.colorMenuItemDivider}}:void 0].filter(Boolean)}return{className:"".concat(d,"-menu-item"),disabled:t.disabled,key:t.key||t.path,onClick:t.onTitleClick,label:n.getMenuItemPath(t,a,i)}}),(0,l.Z)(this,"getIntlName",function(t){var a=t.name,i=t.locale,o=n.props,c=o.menu,d=o.formatMessage,v=a;return i&&(c==null?void 0:c.locale)!==!1&&(v=d==null?void 0:d({id:i,defaultMessage:a})),n.props.menuTextRender?n.props.menuTextRender(t,v,n.props):v}),(0,l.Z)(this,"getMenuItemPath",function(t,a,i){var o,c,d,v,m=n.conversionPath(t.path||"/"),S=n.props,x=S.location,P=x===void 0?{pathname:"/"}:x,N=S.isMobile,D=S.onCollapse,B=S.menuItemRender,z=S.iconPrefixes,H=n.getIntlName(t),F=n.props,L=F.baseClassName,A=F.menu,y=F.collapsed,E=(A==null?void 0:A.type)==="group",V=a===0||E&&a===1,O=V?rt(t.icon,z,"".concat(L,"-icon ").concat((o=n.props)===null||o===void 0?void 0:o.hashId)):null,w=y&&V?at(H):null,re=(0,u.jsxs)("div",{className:te()("".concat(L,"-item-title"),(c=n.props)===null||c===void 0?void 0:c.hashId,(0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(L,"-item-title-collapsed"),y),"".concat(L,"-item-title-collapsed-level-").concat(i),y),"".concat(L,"-item-collapsed-show-title"),(A==null?void 0:A.collapsedShowTitle)&&y)),children:[(0,u.jsx)("span",{className:"".concat(L,"-item-icon ").concat((d=n.props)===null||d===void 0?void 0:d.hashId).trim(),style:{display:w===null&&!O?"none":""},children:O||(0,u.jsx)("span",{className:"anticon",children:w})}),(0,u.jsx)("span",{className:te()("".concat(L,"-item-text"),(v=n.props)===null||v===void 0?void 0:v.hashId,(0,l.Z)({},"".concat(L,"-item-text-has-icon"),V&&(O||w))),children:H})]},m),se=_n(m);if(se){var g,me,T;re=(0,u.jsxs)("span",{onClick:function(){var Ce,ie;(Ce=window)===null||Ce===void 0||(ie=Ce.open)===null||ie===void 0||ie.call(Ce,m,"_blank")},className:te()("".concat(L,"-item-title"),(g=n.props)===null||g===void 0?void 0:g.hashId,(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(L,"-item-title-collapsed"),y),"".concat(L,"-item-title-collapsed-level-").concat(i),y),"".concat(L,"-item-link"),!0),"".concat(L,"-item-collapsed-show-title"),(A==null?void 0:A.collapsedShowTitle)&&y)),children:[(0,u.jsx)("span",{className:"".concat(L,"-item-icon ").concat((me=n.props)===null||me===void 0?void 0:me.hashId).trim(),style:{display:w===null&&!O?"none":""},children:O||(0,u.jsx)("span",{className:"anticon",children:w})}),(0,u.jsx)("span",{className:te()("".concat(L,"-item-text"),(T=n.props)===null||T===void 0?void 0:T.hashId,(0,l.Z)({},"".concat(L,"-item-text-has-icon"),V&&(O||w))),children:H})]},m)}if(B){var k=(0,s.Z)((0,s.Z)({},t),{},{isUrl:se,itemPath:m,isMobile:N,replace:m===P.pathname,onClick:function(){return D&&D(!0)},children:void 0});return a===0?(0,u.jsx)(nt,{collapsed:y,title:H,disable:t.disabledTooltip,children:B(k,re,n.props)}):B(k,re,n.props)}return a===0?(0,u.jsx)(nt,{collapsed:y,title:H,disable:t.disabledTooltip,children:re}):re}),(0,l.Z)(this,"conversionPath",function(t){return t&&t.indexOf("http")===0?t:"/".concat(t||"").replace(/\/+/g,"/")}),this.props=e}),Fr=function(e,n){var t=n.layout,a=n.collapsed,i={};return e&&!a&&["side","mix"].includes(t||"mix")&&(i={openKeys:e}),i},ot=function(e){var n=e.mode,t=e.className,a=e.handleOpenChange,i=e.style,o=e.menuData,c=e.prefixCls,d=e.menu,v=e.matchMenuKeys,m=e.iconfontUrl,S=e.selectedKeys,x=e.onSelect,P=e.menuRenderType,N=e.openKeys,D=(0,p.useContext)(q.L_),B=D.dark,z=D.token,H="".concat(c,"-base-menu-").concat(n),F=(0,p.useRef)([]),L=(0,Q.Z)(d==null?void 0:d.defaultOpenAll),A=(0,G.Z)(L,2),y=A[0],E=A[1],V=(0,Q.Z)(function(){return d!=null&&d.defaultOpenAll?(0,ln.O7)(o)||[]:N===!1?!1:[]},{value:N===!1?void 0:N,onChange:a}),O=(0,G.Z)(V,2),w=O[0],re=O[1],se=(0,Q.Z)([],{value:S,onChange:x?function(Se){x&&Se&&x(Se)}:void 0}),g=(0,G.Z)(se,2),me=g[0],T=g[1];(0,p.useEffect)(function(){d!=null&&d.defaultOpenAll||N===!1||v&&(re(v),T(v))},[v.join("-")]),(0,p.useEffect)(function(){m&&(tt=(0,qn.Z)({scriptUrl:m}))},[m]),(0,p.useEffect)(function(){if(v.join("-")!==(me||[]).join("-")&&T(v),!y&&N!==!1&&v.join("-")!==(w||[]).join("-")){var Se=v;(d==null?void 0:d.autoClose)===!1&&(Se=Array.from(new Set([].concat((0,pn.Z)(v),(0,pn.Z)(w||[]))))),re(Se)}else d!=null&&d.ignoreFlatMenu&&y?re((0,ln.O7)(o)):E(!1)},[v.join("-")]);var k=(0,p.useMemo)(function(){return Fr(w,e)},[w&&w.join(","),e.layout,e.collapsed]),oe=Wr(H,n),Ce=oe.wrapSSR,ie=oe.hashId,Me=(0,p.useMemo)(function(){return new zr((0,s.Z)((0,s.Z)({},e),{},{token:z,menuRenderType:P,baseClassName:H,hashId:ie}))},[e,z,P,H,ie]);if(d!=null&&d.loading)return(0,u.jsx)("div",{style:n!=null&&n.includes("inline")?{padding:24}:{marginBlockStart:16},children:(0,u.jsx)(Hr.Z,{active:!0,title:!1,paragraph:{rows:n!=null&&n.includes("inline")?6:1}})});e.openKeys===!1&&!e.handleOpenChange&&(F.current=v);var be=e.postMenuData?e.postMenuData(o):o;return be&&(be==null?void 0:be.length)<1?null:Ce((0,p.createElement)(Yn.Z,(0,s.Z)((0,s.Z)({},k),{},{_internalDisableMenuItemTitleTooltip:!0,key:"Menu",mode:n,inlineIndent:16,defaultOpenKeys:F.current,theme:B?"dark":"light",selectedKeys:me,style:(0,s.Z)({backgroundColor:"transparent",border:"none"},i),className:te()(t,ie,H,(0,l.Z)((0,l.Z)({},"".concat(H,"-horizontal"),n==="horizontal"),"".concat(H,"-collapsed"),e.collapsed)),items:Me.getNavMenuItems(be,0,0),onOpenChange:function(Ne){e.collapsed||re(Ne)}},e.menuProps)))};function Kr(r,e){var n=e.stylish,t=e.proLayoutCollapsedWidth;return(0,Pe.Xj)("ProLayoutSiderMenuStylish",function(a){var i=(0,s.Z)((0,s.Z)({},a),{},{componentCls:".".concat(r),proLayoutCollapsedWidth:t});return n?[(0,l.Z)({},"div".concat(a.proComponentsCls,"-layout"),(0,l.Z)({},"".concat(i.componentCls),n==null?void 0:n(i)))]:[]})}var Ur=["title","render"],Gr=p.memo(function(r){return(0,u.jsx)(u.Fragment,{children:r.children})}),Xr=Ve.Z.Sider,it=Ve.Z._InternalSiderContext,Vr=it===void 0?{Provider:Gr}:it,wn=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"menuHeaderRender",t=e.logo,a=e.title,i=e.layout,o=e[n];if(o===!1)return null;var c=En(t),d=(0,u.jsx)("h1",{children:a!=null?a:"Ant Design Pro"});return o?o(c,e.collapsed?null:d,e):e.isMobile?null:i==="mix"&&n==="menuHeaderRender"?!1:e.collapsed?(0,u.jsx)("a",{children:c},"title"):(0,u.jsxs)("a",{children:[c,d]},"title")},lt=function(e){var n,t=e.collapsed,a=e.originCollapsed,i=e.fixSiderbar,o=e.menuFooterRender,c=e.onCollapse,d=e.theme,v=e.siderWidth,m=e.isMobile,S=e.onMenuHeaderClick,x=e.breakpoint,P=x===void 0?"lg":x,N=e.style,D=e.layout,B=e.menuExtraRender,z=B===void 0?!1:B,H=e.links,F=e.menuContentRender,L=e.collapsedButtonRender,A=e.prefixCls,y=e.avatarProps,E=e.rightContentRender,V=e.actionsRender,O=e.onOpenChange,w=e.stylish,re=e.logoStyle,se=(0,p.useContext)(q.L_),g=se.hashId,me=(0,p.useMemo)(function(){return!(m||D==="mix")},[m,D]),T="".concat(A,"-sider"),k=64,oe=Kr("".concat(T,".").concat(T,"-stylish"),{stylish:w,proLayoutCollapsedWidth:k}),Ce=te()("".concat(T),g,(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(T,"-fixed"),i),"".concat(T,"-fixed-mix"),D==="mix"&&!m&&i),"".concat(T,"-collapsed"),e.collapsed),"".concat(T,"-layout-").concat(D),D&&!m),"".concat(T,"-light"),d!=="dark"),"".concat(T,"-mix"),D==="mix"&&!m),"".concat(T,"-stylish"),!!w)),ie=wn(e),Me=z&&z(e),be=(0,p.useMemo)(function(){return F!==!1&&(0,p.createElement)(ot,(0,s.Z)((0,s.Z)({},e),{},{key:"base-menu",mode:t&&!m?"vertical":"inline",handleOpenChange:O,style:{width:"100%"},className:"".concat(T,"-menu ").concat(g).trim()}))},[T,g,F,O,e]),Se=(H||[]).map(function(Ie,Oe){return{className:"".concat(T,"-link"),label:Ie,key:Oe}}),Ne=(0,p.useMemo)(function(){return F?F(e,be):be},[F,be,e]),Be=(0,p.useMemo)(function(){if(!y)return null;var Ie=y.title,Oe=y.render,Ae=(0,le.Z)(y,Ur),Cn=(0,u.jsxs)("div",{className:"".concat(T,"-actions-avatar"),children:[Ae!=null&&Ae.src||Ae!=null&&Ae.srcSet||Ae.icon||Ae.children?(0,u.jsx)(Jn.Z,(0,s.Z)({size:28},Ae)):null,y.title&&!t&&(0,u.jsx)("span",{children:Ie})]});return Oe?Oe(y,Cn,e):Cn},[y,T,t]),Le=(0,p.useMemo)(function(){return V?(0,u.jsx)(Br.Z,{align:"center",size:4,direction:t?"vertical":"horizontal",className:te()(["".concat(T,"-actions-list"),t&&"".concat(T,"-actions-list-collapsed"),g]),children:[V==null?void 0:V(e)].flat(1).map(function(Ie,Oe){return(0,u.jsx)("div",{className:"".concat(T,"-actions-list-item ").concat(g).trim(),children:Ie},Oe)})}):null},[V,T,t]),$e=(0,p.useMemo)(function(){return(0,u.jsx)(jn,{onItemClick:e.itemClick,appListRender:e.appListRender,appList:e.appList,prefixCls:e.prefixCls})},[e.appList,e.appListRender,e.prefixCls]),Fe=(0,p.useMemo)(function(){if(L===!1)return null;var Ie=(0,u.jsx)(Lr,{isMobile:m,collapsed:a,className:"".concat(T,"-collapsed-button"),onClick:function(){c==null||c(!a)}});return L?L(t,Ie):Ie},[L,m,a,T,t,c]),Ke=(0,p.useMemo)(function(){return!Be&&!Le?null:(0,u.jsxs)("div",{className:te()("".concat(T,"-actions"),g,t&&"".concat(T,"-actions-collapsed")),children:[Be,Le]})},[Le,Be,T,t,g]),Ue=(0,p.useMemo)(function(){var Ie;return e!=null&&(Ie=e.menu)!==null&&Ie!==void 0&&Ie.hideMenuWhenCollapsed&&t?"".concat(T,"-hide-menu-collapsed"):null},[T,t,e==null||(n=e.menu)===null||n===void 0?void 0:n.hideMenuWhenCollapsed]),un=o&&(o==null?void 0:o(e)),xn=(0,u.jsxs)(u.Fragment,{children:[ie&&(0,u.jsxs)("div",{className:te()([te()("".concat(T,"-logo"),g,(0,l.Z)({},"".concat(T,"-logo-collapsed"),t))]),onClick:me?S:void 0,id:"logo",style:re,children:[ie,$e]}),Me&&(0,u.jsx)("div",{className:te()(["".concat(T,"-extra"),!ie&&"".concat(T,"-extra-no-logo"),g]),children:Me}),(0,u.jsx)("div",{style:{flex:1,overflowY:"auto",overflowX:"hidden"},children:Ne}),(0,u.jsxs)(Vr.Provider,{value:{},children:[H?(0,u.jsx)("div",{className:"".concat(T,"-links ").concat(g).trim(),children:(0,u.jsx)(Yn.Z,{inlineIndent:16,className:"".concat(T,"-link-menu ").concat(g).trim(),selectedKeys:[],openKeys:[],theme:d,mode:"inline",items:Se})}):null,me&&(0,u.jsxs)(u.Fragment,{children:[Ke,!Le&&E?(0,u.jsx)("div",{className:te()("".concat(T,"-actions"),g,(0,l.Z)({},"".concat(T,"-actions-collapsed"),t)),children:E==null?void 0:E(e)}):null]}),un&&(0,u.jsx)("div",{className:te()(["".concat(T,"-footer"),g,(0,l.Z)({},"".concat(T,"-footer-collapsed"),t)]),children:un})]})]});return oe.wrapSSR((0,u.jsxs)(u.Fragment,{children:[i&&!m&&!Ue&&(0,u.jsx)("div",{style:(0,s.Z)({width:t?k:v,overflow:"hidden",flex:"0 0 ".concat(t?k:v,"px"),maxWidth:t?k:v,minWidth:t?k:v,transition:"all 0.2s ease 0s"},N)}),(0,u.jsxs)(Xr,{collapsible:!0,trigger:null,collapsed:t,breakpoint:P===!1?void 0:P,onCollapse:function(Oe){m||c==null||c(Oe)},collapsedWidth:k,style:N,theme:d,width:v,className:te()(Ce,g,Ue),children:[Ue?(0,u.jsx)("div",{className:"".concat(T,"-hide-when-collapsed ").concat(g).trim(),style:{height:"100%",width:"100%",opacity:Ue?0:1},children:xn}):xn,Fe]})]}))},kr=f(10178),Qr=f(48555),Jr=function(e){var n,t,a,i,o;return(0,l.Z)({},e.componentCls,{"&-header-actions":{display:"flex",height:"100%",alignItems:"center","&-item":{display:"inline-flex",alignItems:"center",justifyContent:"center",paddingBlock:0,paddingInline:2,color:(n=e.layout)===null||n===void 0||(n=n.header)===null||n===void 0?void 0:n.colorTextRightActionsItem,fontSize:"16px",cursor:"pointer",borderRadius:e.borderRadius,"> *":{paddingInline:6,paddingBlock:6,borderRadius:e.borderRadius,"&:hover":{backgroundColor:(t=e.layout)===null||t===void 0||(t=t.header)===null||t===void 0?void 0:t.colorBgRightActionsItemHover}}},"&-avatar":{display:"inline-flex",alignItems:"center",justifyContent:"center",paddingInlineStart:e.padding,paddingInlineEnd:e.padding,cursor:"pointer",color:(a=e.layout)===null||a===void 0||(a=a.header)===null||a===void 0?void 0:a.colorTextRightActionsItem,"> div":{height:"44px",color:(i=e.layout)===null||i===void 0||(i=i.header)===null||i===void 0?void 0:i.colorTextRightActionsItem,paddingInline:8,paddingBlock:8,cursor:"pointer",display:"flex",alignItems:"center",lineHeight:"44px",borderRadius:e.borderRadius,"&:hover":{backgroundColor:(o=e.layout)===null||o===void 0||(o=o.header)===null||o===void 0?void 0:o.colorBgRightActionsItemHover}}}}})};function Yr(r){return(0,Pe.Xj)("ProLayoutRightContent",function(e){var n=(0,s.Z)((0,s.Z)({},e),{},{componentCls:".".concat(r)});return[Jr(n)]})}var qr=["rightContentRender","avatarProps","actionsRender","headerContentRender"],ea=["title","render"],ut=function(e){var n=e.rightContentRender,t=e.avatarProps,a=e.actionsRender,i=e.headerContentRender,o=(0,le.Z)(e,qr),c=(0,p.useContext)(He.ZP.ConfigContext),d=c.getPrefixCls,v="".concat(d(),"-pro-global-header"),m=Yr(v),S=m.wrapSSR,x=m.hashId,P=(0,p.useState)("auto"),N=(0,G.Z)(P,2),D=N[0],B=N[1],z=(0,p.useMemo)(function(){if(!t)return null;var A=t.title,y=t.render,E=(0,le.Z)(t,ea),V=[E!=null&&E.src||E!=null&&E.srcSet||E.icon||E.children?(0,p.createElement)(Jn.Z,(0,s.Z)((0,s.Z)({},E),{},{size:28,key:"avatar"})):null,A?(0,u.jsx)("span",{style:{marginInlineStart:8},children:A},"name"):void 0];return y?y(t,(0,u.jsx)("div",{children:V}),o):(0,u.jsx)("div",{children:V})},[t]),H=a||z?function(A){var y=a&&(a==null?void 0:a(A));return!y&&!z?null:Array.isArray(y)?S((0,u.jsxs)("div",{className:"".concat(v,"-header-actions ").concat(x).trim(),children:[y.filter(Boolean).map(function(E,V){var O=!1;if(p.isValidElement(E)){var w;O=!!(E!=null&&(w=E.props)!==null&&w!==void 0&&w["aria-hidden"])}return(0,u.jsx)("div",{className:te()("".concat(v,"-header-actions-item ").concat(x),(0,l.Z)({},"".concat(v,"-header-actions-hover"),!O)),children:E},V)}),z&&(0,u.jsx)("span",{className:"".concat(v,"-header-actions-avatar ").concat(x).trim(),children:z})]})):S((0,u.jsxs)("div",{className:"".concat(v,"-header-actions ").concat(x).trim(),children:[y,z&&(0,u.jsx)("span",{className:"".concat(v,"-header-actions-avatar ").concat(x).trim(),children:z})]}))}:void 0,F=(0,kr.D)(function(){var A=(0,ee.Z)((0,Y.Z)().mark(function y(E){return(0,Y.Z)().wrap(function(O){for(;;)switch(O.prev=O.next){case 0:B(E);case 1:case"end":return O.stop()}},y)}));return function(y){return A.apply(this,arguments)}}(),160),L=H||n;return(0,u.jsx)("div",{className:"".concat(v,"-right-content ").concat(x).trim(),style:{minWidth:D,height:"100%"},children:(0,u.jsx)("div",{style:{height:"100%"},children:(0,u.jsx)(Qr.Z,{onResize:function(y){var E=y.width;F.run(E)},children:L?(0,u.jsx)("div",{style:{display:"flex",alignItems:"center",height:"100%",justifyContent:"flex-end"},children:L((0,s.Z)((0,s.Z)({},o),{},{rightContentSize:D}))}):null})})})},na=function(e){var n,t;return(0,l.Z)({},e.componentCls,{position:"relative",width:"100%",height:"100%",backgroundColor:"transparent",".anticon":{color:"inherit"},"&-main":{display:"flex",height:"100%",paddingInlineStart:"16px","&-left":(0,l.Z)({display:"flex",alignItems:"center"},"".concat(e.proComponentsCls,"-layout-apps-icon"),{marginInlineEnd:16,marginInlineStart:-8})},"&-wide":{maxWidth:1152,margin:"0 auto"},"&-logo":{position:"relative",display:"flex",height:"100%",alignItems:"center",overflow:"hidden","> *:first-child":{display:"flex",alignItems:"center",minHeight:"22px",fontSize:"22px"},"> *:first-child > img":{display:"inline-block",height:"32px",verticalAlign:"middle"},"> *:first-child > h1":{display:"inline-block",marginBlock:0,marginInline:0,lineHeight:"24px",marginInlineStart:6,fontWeight:"600",fontSize:"16px",color:(n=e.layout)===null||n===void 0||(n=n.header)===null||n===void 0?void 0:n.colorHeaderTitle,verticalAlign:"top"}},"&-menu":{minWidth:0,display:"flex",alignItems:"center",paddingInline:6,paddingBlock:6,lineHeight:"".concat(Math.max((((t=e.layout)===null||t===void 0||(t=t.header)===null||t===void 0?void 0:t.heightLayoutHeader)||56)-12,40),"px")}})};function ta(r){return(0,Pe.Xj)("ProLayoutTopNavHeader",function(e){var n=(0,s.Z)((0,s.Z)({},e),{},{componentCls:".".concat(r)});return[na(n)]})}var ct=function(e){var n,t,a,i,o,c,d,v=(0,p.useRef)(null),m=e.onMenuHeaderClick,S=e.contentWidth,x=e.rightContentRender,P=e.className,N=e.style,D=e.headerContentRender,B=e.layout,z=e.actionsRender,H=(0,p.useContext)(He.ZP.ConfigContext),F=H.getPrefixCls,L=(0,p.useContext)(q.L_),A=L.dark,y="".concat(e.prefixCls||F("pro"),"-top-nav-header"),E=ta(y),V=E.wrapSSR,O=E.hashId,w=void 0;e.menuHeaderRender!==void 0?w="menuHeaderRender":(B==="mix"||B==="top")&&(w="headerTitleRender");var re=wn((0,s.Z)((0,s.Z)({},e),{},{collapsed:!1}),w),se=(0,p.useContext)(q.L_),g=se.token,me=(0,p.useMemo)(function(){var T,k,oe,Ce,ie,Me,be,Se,Ne,Be,Le,$e,Fe,Ke=(0,u.jsx)(He.ZP,{theme:{hashed:(0,q.nu)(),components:{Layout:{headerBg:"transparent",bodyBg:"transparent"},Menu:(0,s.Z)({},U({colorItemBg:((T=g.layout)===null||T===void 0||(T=T.header)===null||T===void 0?void 0:T.colorBgHeader)||"transparent",colorSubItemBg:((k=g.layout)===null||k===void 0||(k=k.header)===null||k===void 0?void 0:k.colorBgHeader)||"transparent",radiusItem:g.borderRadius,colorItemBgSelected:((oe=g.layout)===null||oe===void 0||(oe=oe.header)===null||oe===void 0?void 0:oe.colorBgMenuItemSelected)||(g==null?void 0:g.colorBgTextHover),itemHoverBg:((Ce=g.layout)===null||Ce===void 0||(Ce=Ce.header)===null||Ce===void 0?void 0:Ce.colorBgMenuItemHover)||(g==null?void 0:g.colorBgTextHover),colorItemBgSelectedHorizontal:((ie=g.layout)===null||ie===void 0||(ie=ie.header)===null||ie===void 0?void 0:ie.colorBgMenuItemSelected)||(g==null?void 0:g.colorBgTextHover),colorActiveBarWidth:0,colorActiveBarHeight:0,colorActiveBarBorderSize:0,colorItemText:((Me=g.layout)===null||Me===void 0||(Me=Me.header)===null||Me===void 0?void 0:Me.colorTextMenu)||(g==null?void 0:g.colorTextSecondary),colorItemTextHoverHorizontal:((be=g.layout)===null||be===void 0||(be=be.header)===null||be===void 0?void 0:be.colorTextMenuActive)||(g==null?void 0:g.colorText),colorItemTextSelectedHorizontal:((Se=g.layout)===null||Se===void 0||(Se=Se.header)===null||Se===void 0?void 0:Se.colorTextMenuSelected)||(g==null?void 0:g.colorTextBase),horizontalItemBorderRadius:4,colorItemTextHover:((Ne=g.layout)===null||Ne===void 0||(Ne=Ne.header)===null||Ne===void 0?void 0:Ne.colorTextMenuActive)||"rgba(0, 0, 0, 0.85)",horizontalItemHoverBg:((Be=g.layout)===null||Be===void 0||(Be=Be.header)===null||Be===void 0?void 0:Be.colorBgMenuItemHover)||"rgba(0, 0, 0, 0.04)",colorItemTextSelected:((Le=g.layout)===null||Le===void 0||(Le=Le.header)===null||Le===void 0?void 0:Le.colorTextMenuSelected)||"rgba(0, 0, 0, 1)",popupBg:g==null?void 0:g.colorBgElevated,subMenuItemBg:g==null?void 0:g.colorBgElevated,darkSubMenuItemBg:"transparent",darkPopupBg:g==null?void 0:g.colorBgElevated}))},token:{colorBgElevated:(($e=g.layout)===null||$e===void 0||($e=$e.header)===null||$e===void 0?void 0:$e.colorBgHeader)||"transparent"}},children:(0,u.jsx)(ot,(0,s.Z)((0,s.Z)((0,s.Z)({theme:A?"dark":"light"},e),{},{className:"".concat(y,"-base-menu ").concat(O).trim()},e.menuProps),{},{style:(0,s.Z)({width:"100%"},(Fe=e.menuProps)===null||Fe===void 0?void 0:Fe.style),collapsed:!1,menuRenderType:"header",mode:"horizontal"}))});return D?D(e,Ke):Ke},[(n=g.layout)===null||n===void 0||(n=n.header)===null||n===void 0?void 0:n.colorBgHeader,(t=g.layout)===null||t===void 0||(t=t.header)===null||t===void 0?void 0:t.colorBgMenuItemSelected,(a=g.layout)===null||a===void 0||(a=a.header)===null||a===void 0?void 0:a.colorBgMenuItemHover,(i=g.layout)===null||i===void 0||(i=i.header)===null||i===void 0?void 0:i.colorTextMenu,(o=g.layout)===null||o===void 0||(o=o.header)===null||o===void 0?void 0:o.colorTextMenuActive,(c=g.layout)===null||c===void 0||(c=c.header)===null||c===void 0?void 0:c.colorTextMenuSelected,(d=g.layout)===null||d===void 0||(d=d.header)===null||d===void 0?void 0:d.colorBgMenuElevated,g.borderRadius,g==null?void 0:g.colorBgTextHover,g==null?void 0:g.colorTextSecondary,g==null?void 0:g.colorText,g==null?void 0:g.colorTextBase,g.colorBgElevated,A,e,y,O,D]);return V((0,u.jsx)("div",{className:te()(y,O,P,(0,l.Z)({},"".concat(y,"-light"),!0)),style:N,children:(0,u.jsxs)("div",{ref:v,className:te()("".concat(y,"-main"),O,(0,l.Z)({},"".concat(y,"-wide"),S==="Fixed"&&B==="top")),children:[re&&(0,u.jsxs)("div",{className:te()("".concat(y,"-main-left ").concat(O)),onClick:m,children:[(0,u.jsx)(jn,(0,s.Z)({},e)),(0,u.jsx)("div",{className:"".concat(y,"-logo ").concat(O).trim(),id:"logo",children:re},"logo")]}),(0,u.jsx)("div",{style:{flex:1},className:"".concat(y,"-menu ").concat(O).trim(),children:me}),(x||z||e.avatarProps)&&(0,u.jsx)(ut,(0,s.Z)((0,s.Z)({rightContentRender:x},e),{},{prefixCls:y}))]})}))},ra=function(e){var n,t,a;return(0,l.Z)({},e.componentCls,(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({position:"relative",background:"transparent",display:"flex",alignItems:"center",marginBlock:0,marginInline:16,height:((n=e.layout)===null||n===void 0||(n=n.header)===null||n===void 0?void 0:n.heightLayoutHeader)||56,boxSizing:"border-box","> a":{height:"100%"}},"".concat(e.proComponentsCls,"-layout-apps-icon"),{marginInlineEnd:16}),"&-collapsed-button",{minHeight:"22px",color:(t=e.layout)===null||t===void 0||(t=t.header)===null||t===void 0?void 0:t.colorHeaderTitle,fontSize:"18px",marginInlineEnd:"16px"}),"&-logo",{position:"relative",marginInlineEnd:"16px",a:{display:"flex",alignItems:"center",height:"100%",minHeight:"22px",fontSize:"20px"},img:{height:"28px"},h1:{height:"32px",marginBlock:0,marginInline:0,marginInlineStart:8,fontWeight:"600",color:((a=e.layout)===null||a===void 0||(a=a.header)===null||a===void 0?void 0:a.colorHeaderTitle)||e.colorTextHeading,fontSize:"18px",lineHeight:"32px"},"&-mix":{display:"flex",alignItems:"center"}}),"&-logo-mobile",{minWidth:"24px",marginInlineEnd:0}))};function aa(r){return(0,Pe.Xj)("ProLayoutGlobalHeader",function(e){var n=(0,s.Z)((0,s.Z)({},e),{},{componentCls:".".concat(r)});return[ra(n)]})}var oa=function(e,n){return e===!1?null:e?e(n,null):n},ia=function(e){var n=e.isMobile,t=e.logo,a=e.collapsed,i=e.onCollapse,o=e.rightContentRender,c=e.menuHeaderRender,d=e.onMenuHeaderClick,v=e.className,m=e.style,S=e.layout,x=e.children,P=e.splitMenus,N=e.menuData,D=e.prefixCls,B=(0,p.useContext)(He.ZP.ConfigContext),z=B.getPrefixCls,H=B.direction,F="".concat(D||z("pro"),"-global-header"),L=aa(F),A=L.wrapSSR,y=L.hashId,E=te()(v,F,y);if(S==="mix"&&!n&&P){var V=(N||[]).map(function(se){return(0,s.Z)((0,s.Z)({},se),{},{children:void 0,routes:void 0})}),O=(0,ln.QX)(V);return(0,u.jsx)(ct,(0,s.Z)((0,s.Z)({mode:"horizontal"},e),{},{splitMenus:!1,menuData:O}))}var w=te()("".concat(F,"-logo"),y,(0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(F,"-logo-rtl"),H==="rtl"),"".concat(F,"-logo-mix"),S==="mix"),"".concat(F,"-logo-mobile"),n)),re=(0,u.jsx)("span",{className:w,children:(0,u.jsx)("a",{children:En(t)})},"logo");return A((0,u.jsxs)("div",{className:E,style:(0,s.Z)({},m),children:[n&&(0,u.jsx)("span",{className:"".concat(F,"-collapsed-button ").concat(y).trim(),onClick:function(){i==null||i(!a)},children:(0,u.jsx)(xr.Z,{})}),n&&oa(c,re),S==="mix"&&!n&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(jn,(0,s.Z)({},e)),(0,u.jsx)("div",{className:w,onClick:d,children:wn((0,s.Z)((0,s.Z)({},e),{},{collapsed:!1}),"headerTitleRender")})]}),(0,u.jsx)("div",{style:{flex:1},children:x}),(o||e.actionsRender||e.avatarProps)&&(0,u.jsx)(ut,(0,s.Z)({rightContentRender:o},e))]}))},la=function(e){var n,t,a,i;return(0,l.Z)({},"".concat(e.proComponentsCls,"-layout"),(0,l.Z)({},"".concat(e.antCls,"-layout-header").concat(e.componentCls),{height:((n=e.layout)===null||n===void 0||(n=n.header)===null||n===void 0?void 0:n.heightLayoutHeader)||56,lineHeight:"".concat(((t=e.layout)===null||t===void 0||(t=t.header)===null||t===void 0?void 0:t.heightLayoutHeader)||56,"px"),zIndex:19,width:"100%",paddingBlock:0,paddingInline:0,borderBlockEnd:"1px solid ".concat(e.colorSplit),backgroundColor:((a=e.layout)===null||a===void 0||(a=a.header)===null||a===void 0?void 0:a.colorBgHeader)||"rgba(255, 255, 255, 0.4)",WebkitBackdropFilter:"blur(8px)",backdropFilter:"blur(8px)",transition:"background-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1)","&-fixed-header":{position:"fixed",insetBlockStart:0,width:"100%",zIndex:100,insetInlineEnd:0},"&-fixed-header-scroll":{backgroundColor:((i=e.layout)===null||i===void 0||(i=i.header)===null||i===void 0?void 0:i.colorBgScrollHeader)||"rgba(255, 255, 255, 0.8)"},"&-header-actions":{display:"flex",alignItems:"center",fontSize:"16",cursor:"pointer","& &-item":{paddingBlock:0,paddingInline:8,"&:hover":{color:e.colorText}}},"&-header-realDark":{boxShadow:"0 2px 8px 0 rgba(0, 0, 0, 65%)"},"&-header-actions-header-action":{transition:"width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1)"}}))};function ua(r){return(0,Pe.Xj)("ProLayoutHeader",function(e){var n=(0,s.Z)((0,s.Z)({},e),{},{componentCls:".".concat(r)});return[la(n)]})}function ca(r,e){var n=e.stylish,t=e.proLayoutCollapsedWidth;return(0,Pe.Xj)("ProLayoutHeaderStylish",function(a){var i=(0,s.Z)((0,s.Z)({},a),{},{componentCls:".".concat(r),proLayoutCollapsedWidth:t});return n?[(0,l.Z)({},"div".concat(a.proComponentsCls,"-layout"),(0,l.Z)({},"".concat(i.componentCls),n==null?void 0:n(i)))]:[]})}var dt=Ve.Z.Header,da=function(e){var n,t,a,i=e.isMobile,o=e.fixedHeader,c=e.className,d=e.style,v=e.collapsed,m=e.prefixCls,S=e.onCollapse,x=e.layout,P=e.headerRender,N=e.headerContentRender,D=(0,p.useContext)(q.L_),B=D.token,z=(0,p.useContext)(He.ZP.ConfigContext),H=(0,p.useState)(!1),F=(0,G.Z)(H,2),L=F[0],A=F[1],y=o||x==="mix",E=(0,p.useCallback)(function(){var T=x==="top",k=(0,ln.QX)(e.menuData||[]),oe=(0,u.jsx)(ia,(0,s.Z)((0,s.Z)({onCollapse:S},e),{},{menuData:k,children:N&&N(e,null)}));return T&&!i&&(oe=(0,u.jsx)(ct,(0,s.Z)((0,s.Z)({mode:"horizontal",onCollapse:S},e),{},{menuData:k}))),P&&typeof P=="function"?P(e,oe):oe},[N,P,i,x,S,e]);(0,p.useEffect)(function(){var T,k=(z==null||(T=z.getTargetContainer)===null||T===void 0?void 0:T.call(z))||document.body,oe=function(){var ie,Me=k.scrollTop;return Me>(((ie=B.layout)===null||ie===void 0||(ie=ie.header)===null||ie===void 0?void 0:ie.heightLayoutHeader)||56)&&!L?(A(!0),!0):(L&&A(!1),!1)};if(y&&typeof window!="undefined")return k.addEventListener("scroll",oe,{passive:!0}),function(){k.removeEventListener("scroll",oe)}},[(n=B.layout)===null||n===void 0||(n=n.header)===null||n===void 0?void 0:n.heightLayoutHeader,y,L]);var V=x==="top",O="".concat(m,"-layout-header"),w=ua(O),re=w.wrapSSR,se=w.hashId,g=ca("".concat(O,".").concat(O,"-stylish"),{proLayoutCollapsedWidth:64,stylish:e.stylish}),me=te()(c,se,O,(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(O,"-fixed-header"),y),"".concat(O,"-fixed-header-scroll"),L),"".concat(O,"-mix"),x==="mix"),"".concat(O,"-fixed-header-action"),!v),"".concat(O,"-top-menu"),V),"".concat(O,"-header"),!0),"".concat(O,"-stylish"),!!e.stylish));return x==="side"&&!i?null:g.wrapSSR(re((0,u.jsx)(u.Fragment,{children:(0,u.jsxs)(He.ZP,{theme:{hashed:(0,q.nu)(),components:{Layout:{headerBg:"transparent",bodyBg:"transparent"}}},children:[y&&(0,u.jsx)(dt,{style:(0,s.Z)({height:((t=B.layout)===null||t===void 0||(t=t.header)===null||t===void 0?void 0:t.heightLayoutHeader)||56,lineHeight:"".concat(((a=B.layout)===null||a===void 0||(a=a.header)===null||a===void 0?void 0:a.heightLayoutHeader)||56,"px"),backgroundColor:"transparent",zIndex:19},d)}),(0,u.jsx)(dt,{className:me,style:d,children:E()})]})})))},sa=f(83832),va=f(85265),fa=f(11568),st=new fa.E4("antBadgeLoadingCircle",{"0%":{display:"none",opacity:0,overflow:"hidden"},"80%":{overflow:"hidden"},"100%":{display:"unset",opacity:1}}),ma=function(e){var n,t,a,i,o,c,d,v,m,S,x,P;return(0,l.Z)({},"".concat(e.proComponentsCls,"-layout"),(0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(e.antCls,"-layout-sider").concat(e.componentCls),{background:((n=e.layout)===null||n===void 0||(n=n.sider)===null||n===void 0?void 0:n.colorMenuBackground)||"transparent"}),e.componentCls,(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({position:"relative",boxSizing:"border-box","&-menu":{position:"relative",zIndex:10,minHeight:"100%"}},"& ".concat(e.antCls,"-layout-sider-children"),{position:"relative",display:"flex",flexDirection:"column",height:"100%",paddingInline:(t=e.layout)===null||t===void 0||(t=t.sider)===null||t===void 0?void 0:t.paddingInlineLayoutMenu,paddingBlock:(a=e.layout)===null||a===void 0||(a=a.sider)===null||a===void 0?void 0:a.paddingBlockLayoutMenu,borderInlineEnd:"1px solid ".concat(e.colorSplit),marginInlineEnd:-1}),"".concat(e.antCls,"-menu"),(0,l.Z)((0,l.Z)({},"".concat(e.antCls,"-menu-item-group-title"),{fontSize:e.fontSizeSM,paddingBottom:4}),"".concat(e.antCls,"-menu-item:not(").concat(e.antCls,"-menu-item-selected):hover"),{color:(i=e.layout)===null||i===void 0||(i=i.sider)===null||i===void 0?void 0:i.colorTextMenuItemHover})),"&-logo",{position:"relative",display:"flex",alignItems:"center",justifyContent:"space-between",paddingInline:12,paddingBlock:16,color:(o=e.layout)===null||o===void 0||(o=o.sider)===null||o===void 0?void 0:o.colorTextMenu,cursor:"pointer",borderBlockEnd:"1px solid ".concat((c=e.layout)===null||c===void 0||(c=c.sider)===null||c===void 0?void 0:c.colorMenuItemDivider),"> a":{display:"flex",alignItems:"center",justifyContent:"center",minHeight:22,fontSize:22,"> img":{display:"inline-block",height:22,verticalAlign:"middle"},"> h1":{display:"inline-block",height:22,marginBlock:0,marginInlineEnd:0,marginInlineStart:6,color:(d=e.layout)===null||d===void 0||(d=d.sider)===null||d===void 0?void 0:d.colorTextMenuTitle,animationName:st,animationDuration:".4s",animationTimingFunction:"ease",fontWeight:600,fontSize:16,lineHeight:"22px",verticalAlign:"middle"}},"&-collapsed":(0,l.Z)({flexDirection:"column-reverse",margin:0,padding:12},"".concat(e.proComponentsCls,"-layout-apps-icon"),{marginBlockEnd:8,fontSize:16,transition:"font-size 0.2s ease-in-out,color 0.2s ease-in-out"})}),"&-actions",{display:"flex",alignItems:"center",justifyContent:"space-between",marginBlock:4,marginInline:0,color:(v=e.layout)===null||v===void 0||(v=v.sider)===null||v===void 0?void 0:v.colorTextMenu,"&-collapsed":{flexDirection:"column-reverse",paddingBlock:0,paddingInline:8,fontSize:16,transition:"font-size 0.3s ease-in-out"},"&-list":{color:(m=e.layout)===null||m===void 0||(m=m.sider)===null||m===void 0?void 0:m.colorTextMenuSecondary,"&-collapsed":{marginBlockEnd:8,animationName:"none"},"&-item":{paddingInline:6,paddingBlock:6,lineHeight:"16px",fontSize:16,cursor:"pointer",borderRadius:e.borderRadius,"&:hover":{background:e.colorBgTextHover}}},"&-avatar":{fontSize:14,paddingInline:8,paddingBlock:8,display:"flex",alignItems:"center",gap:e.marginXS,borderRadius:e.borderRadius,"& *":{cursor:"pointer"},"&:hover":{background:e.colorBgTextHover}}}),"&-hide-menu-collapsed",{insetInlineStart:"-".concat(e.proLayoutCollapsedWidth-12,"px"),position:"absolute"}),"&-extra",{marginBlockEnd:16,marginBlock:0,marginInline:16,"&-no-logo":{marginBlockStart:16}}),"&-links",{width:"100%",ul:{height:"auto"}}),"&-link-menu",{border:"none",boxShadow:"none",background:"transparent"}),"&-footer",{color:(S=e.layout)===null||S===void 0||(S=S.sider)===null||S===void 0?void 0:S.colorTextMenuSecondary,paddingBlockEnd:16,fontSize:e.fontSize,animationName:st,animationDuration:".4s",animationTimingFunction:"ease"})),"".concat(e.componentCls).concat(e.componentCls,"-fixed"),{position:"fixed",insetBlockStart:0,insetInlineStart:0,zIndex:"100",height:"100%","&-mix":{height:"calc(100% - ".concat(((x=e.layout)===null||x===void 0||(x=x.header)===null||x===void 0?void 0:x.heightLayoutHeader)||56,"px)"),insetBlockStart:"".concat(((P=e.layout)===null||P===void 0||(P=P.header)===null||P===void 0?void 0:P.heightLayoutHeader)||56,"px")}}))};function ha(r,e){var n=e.proLayoutCollapsedWidth;return(0,Pe.Xj)("ProLayoutSiderMenu",function(t){var a=(0,s.Z)((0,s.Z)({},t),{},{componentCls:".".concat(r),proLayoutCollapsedWidth:n});return[ma(a)]})}var vt=function(e){var n,t=e.isMobile,a=e.siderWidth,i=e.collapsed,o=e.onCollapse,c=e.style,d=e.className,v=e.hide,m=e.prefixCls,S=e.getContainer,x=(0,p.useContext)(q.L_),P=x.token;(0,p.useEffect)(function(){t===!0&&(o==null||o(!0))},[t]);var N=(0,Qn.Z)(e,["className","style"]),D=p.useContext(He.ZP.ConfigContext),B=D.direction,z=ha("".concat(m,"-sider"),{proLayoutCollapsedWidth:64}),H=z.wrapSSR,F=z.hashId,L=te()("".concat(m,"-sider"),d,F);if(v)return null;var A=(0,R.X)(!i,function(){return o==null?void 0:o(!0)});return H(t?(0,u.jsx)(va.Z,(0,s.Z)((0,s.Z)({placement:B==="rtl"?"right":"left",className:te()("".concat(m,"-drawer-sider"),d)},A),{},{style:(0,s.Z)({padding:0,height:"100vh"},c),onClose:function(){o==null||o(!0)},maskClosable:!0,closable:!1,getContainer:S||!1,width:a,styles:{body:{height:"100vh",padding:0,display:"flex",flexDirection:"row",backgroundColor:(n=P.layout)===null||n===void 0||(n=n.sider)===null||n===void 0?void 0:n.colorMenuBackground}},children:(0,u.jsx)(lt,(0,s.Z)((0,s.Z)({},N),{},{isMobile:!0,className:L,collapsed:t?!1:i,splitMenus:!1,originCollapsed:i}))})):(0,u.jsx)(lt,(0,s.Z)((0,s.Z)({className:L,originCollapsed:i},N),{},{style:c})))},ft=f(76509),Ln=f(16305),ga=function(e,n,t){if(t){var a=(0,pn.Z)(t.keys()).find(function(o){try{return o.startsWith("http")?!1:(0,Ln.EQ)(o)(e)}catch(c){return console.log("key",o,c),!1}});if(a)return t.get(a)}if(n){var i=Object.keys(n).find(function(o){try{return o!=null&&o.startsWith("http")?!1:(0,Ln.EQ)(o)(e)}catch(c){return console.log("key",o,c),!1}});if(i)return n[i]}return{path:""}},Dn=function(e,n){var t=e.pathname,a=t===void 0?"/":t,i=e.breadcrumb,o=e.breadcrumbMap,c=e.formatMessage,d=e.title,v=e.menu,m=v===void 0?{locale:!1}:v,S=n?"":d||"",x=ga(a,i,o);if(!x)return{title:S,id:"",pageName:S};var P=x.name;return m.locale!==!1&&x.locale&&c&&(P=c({id:x.locale||"",defaultMessage:x.name})),P?n||!d?{title:P,id:x.locale||"",pageName:P}:{title:"".concat(P," - ").concat(d),id:x.locale||"",pageName:P}:{title:S,id:x.locale||"",pageName:S}},co=function(e,n){return Dn(e,n).title},pa=f(52676),yn=f(67159),ke=f(34155),ya=function(){var e;return typeof ke=="undefined"?yn.Z:((e=ke)===null||ke===void 0||(ke={NODE_ENV:"production",PUBLIC_PATH:"/"})===null||ke===void 0?void 0:ke.ANTD_VERSION)||yn.Z},xa=function(e){var n,t,a,i,o,c,d,v,m,S,x,P,N,D,B,z,H,F,L,A,y,E,V,O,w,re,se,g,me,T,k,oe;return(n=ya())!==null&&n!==void 0&&n.startsWith("5")?{}:(0,l.Z)((0,l.Z)((0,l.Z)({},e.componentCls,(0,l.Z)((0,l.Z)({width:"100%",height:"100%"},"".concat(e.proComponentsCls,"-base-menu"),(y={color:(t=e.layout)===null||t===void 0||(t=t.sider)===null||t===void 0?void 0:t.colorTextMenu},(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)(y,"".concat(e.antCls,"-menu-sub"),{backgroundColor:"transparent!important",color:(a=e.layout)===null||a===void 0||(a=a.sider)===null||a===void 0?void 0:a.colorTextMenu}),"& ".concat(e.antCls,"-layout"),{backgroundColor:"transparent",width:"100%"}),"".concat(e.antCls,"-menu-submenu-expand-icon, ").concat(e.antCls,"-menu-submenu-arrow"),{color:"inherit"}),"&".concat(e.antCls,"-menu"),(0,l.Z)((0,l.Z)({color:(i=e.layout)===null||i===void 0||(i=i.sider)===null||i===void 0?void 0:i.colorTextMenu},"".concat(e.antCls,"-menu-item"),{"*":{transition:"none !important"}}),"".concat(e.antCls,"-menu-item a"),{color:"inherit"})),"&".concat(e.antCls,"-menu-inline"),(0,l.Z)({},"".concat(e.antCls,"-menu-selected::after,").concat(e.antCls,"-menu-item-selected::after"),{display:"none"})),"".concat(e.antCls,"-menu-sub ").concat(e.antCls,"-menu-inline"),{backgroundColor:"transparent!important"}),"".concat(e.antCls,`-menu-item:active, 
        `).concat(e.antCls,"-menu-submenu-title:active"),{backgroundColor:"transparent!important"}),"&".concat(e.antCls,"-menu-light"),(0,l.Z)({},"".concat(e.antCls,`-menu-item:hover, 
            `).concat(e.antCls,`-menu-item-active,
            `).concat(e.antCls,`-menu-submenu-active, 
            `).concat(e.antCls,"-menu-submenu-title:hover"),(0,l.Z)({color:(o=e.layout)===null||o===void 0||(o=o.sider)===null||o===void 0?void 0:o.colorTextMenuActive,borderRadius:e.borderRadius},"".concat(e.antCls,"-menu-submenu-arrow"),{color:(c=e.layout)===null||c===void 0||(c=c.sider)===null||c===void 0?void 0:c.colorTextMenuActive}))),"&".concat(e.antCls,"-menu:not(").concat(e.antCls,"-menu-horizontal)"),(0,l.Z)((0,l.Z)({},"".concat(e.antCls,"-menu-item-selected"),{backgroundColor:(d=e.layout)===null||d===void 0||(d=d.sider)===null||d===void 0?void 0:d.colorBgMenuItemSelected,borderRadius:e.borderRadius}),"".concat(e.antCls,`-menu-item:hover, 
            `).concat(e.antCls,`-menu-item-active,
            `).concat(e.antCls,"-menu-submenu-title:hover"),(0,l.Z)({color:(v=e.layout)===null||v===void 0||(v=v.sider)===null||v===void 0?void 0:v.colorTextMenuActive,borderRadius:e.borderRadius,backgroundColor:"".concat((m=e.layout)===null||m===void 0||(m=m.header)===null||m===void 0?void 0:m.colorBgMenuItemHover," !important")},"".concat(e.antCls,"-menu-submenu-arrow"),{color:(S=e.layout)===null||S===void 0||(S=S.sider)===null||S===void 0?void 0:S.colorTextMenuActive}))),"".concat(e.antCls,"-menu-item-selected"),{color:(x=e.layout)===null||x===void 0||(x=x.sider)===null||x===void 0?void 0:x.colorTextMenuSelected}),(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)(y,"".concat(e.antCls,"-menu-submenu-selected"),{color:(P=e.layout)===null||P===void 0||(P=P.sider)===null||P===void 0?void 0:P.colorTextMenuSelected}),"&".concat(e.antCls,"-menu:not(").concat(e.antCls,"-menu-inline) ").concat(e.antCls,"-menu-submenu-open"),{color:(N=e.layout)===null||N===void 0||(N=N.sider)===null||N===void 0?void 0:N.colorTextMenuSelected}),"&".concat(e.antCls,"-menu-vertical"),(0,l.Z)({},"".concat(e.antCls,"-menu-submenu-selected"),{borderRadius:e.borderRadius,color:(D=e.layout)===null||D===void 0||(D=D.sider)===null||D===void 0?void 0:D.colorTextMenuSelected})),"".concat(e.antCls,"-menu-submenu:hover > ").concat(e.antCls,"-menu-submenu-title > ").concat(e.antCls,"-menu-submenu-arrow"),{color:(B=e.layout)===null||B===void 0||(B=B.sider)===null||B===void 0?void 0:B.colorTextMenuActive}),"&".concat(e.antCls,"-menu-horizontal"),(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({},"".concat(e.antCls,`-menu-item:hover,
          `).concat(e.antCls,`-menu-submenu:hover,
          `).concat(e.antCls,`-menu-item-active,
          `).concat(e.antCls,"-menu-submenu-active"),{borderRadius:4,transition:"none",color:(z=e.layout)===null||z===void 0||(z=z.header)===null||z===void 0?void 0:z.colorTextMenuActive,backgroundColor:"".concat((H=e.layout)===null||H===void 0||(H=H.header)===null||H===void 0?void 0:H.colorBgMenuItemHover," !important")}),"".concat(e.antCls,`-menu-item-open,
          `).concat(e.antCls,`-menu-submenu-open,
          `).concat(e.antCls,`-menu-item-selected,
          `).concat(e.antCls,"-menu-submenu-selected"),(0,l.Z)({backgroundColor:(F=e.layout)===null||F===void 0||(F=F.header)===null||F===void 0?void 0:F.colorBgMenuItemSelected,borderRadius:e.borderRadius,transition:"none",color:"".concat((L=e.layout)===null||L===void 0||(L=L.header)===null||L===void 0?void 0:L.colorTextMenuSelected," !important")},"".concat(e.antCls,"-menu-submenu-arrow"),{color:"".concat((A=e.layout)===null||A===void 0||(A=A.header)===null||A===void 0?void 0:A.colorTextMenuSelected," !important")})),"> ".concat(e.antCls,"-menu-item, > ").concat(e.antCls,"-menu-submenu"),{paddingInline:16,marginInline:4}),"> ".concat(e.antCls,"-menu-item::after, > ").concat(e.antCls,"-menu-submenu::after"),{display:"none"})))),"".concat(e.proComponentsCls,"-top-nav-header-base-menu"),(0,l.Z)((0,l.Z)({},"&".concat(e.antCls,"-menu"),(0,l.Z)({color:(E=e.layout)===null||E===void 0||(E=E.header)===null||E===void 0?void 0:E.colorTextMenu},"".concat(e.antCls,"-menu-item a"),{color:"inherit"})),"&".concat(e.antCls,"-menu-light"),(0,l.Z)((0,l.Z)({},"".concat(e.antCls,`-menu-item:hover, 
            `).concat(e.antCls,`-menu-item-active,
            `).concat(e.antCls,`-menu-submenu-active, 
            `).concat(e.antCls,"-menu-submenu-title:hover"),(0,l.Z)({color:(V=e.layout)===null||V===void 0||(V=V.header)===null||V===void 0?void 0:V.colorTextMenuActive,borderRadius:e.borderRadius,transition:"none",backgroundColor:(O=e.layout)===null||O===void 0||(O=O.header)===null||O===void 0?void 0:O.colorBgMenuItemSelected},"".concat(e.antCls,"-menu-submenu-arrow"),{color:(w=e.layout)===null||w===void 0||(w=w.header)===null||w===void 0?void 0:w.colorTextMenuActive})),"".concat(e.antCls,"-menu-item-selected"),{color:(re=e.layout)===null||re===void 0||(re=re.header)===null||re===void 0?void 0:re.colorTextMenuSelected,borderRadius:e.borderRadius,backgroundColor:(se=e.layout)===null||se===void 0||(se=se.header)===null||se===void 0?void 0:se.colorBgMenuItemSelected})))),"".concat(e.antCls,"-menu-sub").concat(e.antCls,"-menu-inline"),{backgroundColor:"transparent!important"}),"".concat(e.antCls,"-menu-submenu-popup"),(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({backgroundColor:"rgba(255, 255, 255, 0.42)","-webkit-backdrop-filter":"blur(8px)",backdropFilter:"blur(8px)"},"".concat(e.antCls,"-menu"),(0,l.Z)({background:"transparent !important",backgroundColor:"transparent !important"},"".concat(e.antCls,`-menu-item:active, 
        `).concat(e.antCls,"-menu-submenu-title:active"),{backgroundColor:"transparent!important"})),"".concat(e.antCls,"-menu-item-selected"),{color:(g=e.layout)===null||g===void 0||(g=g.sider)===null||g===void 0?void 0:g.colorTextMenuSelected}),"".concat(e.antCls,"-menu-submenu-selected"),{color:(me=e.layout)===null||me===void 0||(me=me.sider)===null||me===void 0?void 0:me.colorTextMenuSelected}),"".concat(e.antCls,"-menu:not(").concat(e.antCls,"-menu-horizontal)"),(0,l.Z)((0,l.Z)({},"".concat(e.antCls,"-menu-item-selected"),{backgroundColor:"rgba(0, 0, 0, 0.04)",borderRadius:e.borderRadius,color:(T=e.layout)===null||T===void 0||(T=T.sider)===null||T===void 0?void 0:T.colorTextMenuSelected}),"".concat(e.antCls,`-menu-item:hover, 
          `).concat(e.antCls,`-menu-item-active,
          `).concat(e.antCls,"-menu-submenu-title:hover"),(0,l.Z)({color:(k=e.layout)===null||k===void 0||(k=k.sider)===null||k===void 0?void 0:k.colorTextMenuActive,borderRadius:e.borderRadius},"".concat(e.antCls,"-menu-submenu-arrow"),{color:(oe=e.layout)===null||oe===void 0||(oe=oe.sider)===null||oe===void 0?void 0:oe.colorTextMenuActive}))))},Ca=function(e){var n,t,a,i;return(0,l.Z)((0,l.Z)({},"".concat(e.antCls,"-layout"),{backgroundColor:"transparent !important"}),e.componentCls,(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({},"& ".concat(e.antCls,"-layout"),{display:"flex",backgroundColor:"transparent",width:"100%"}),"".concat(e.componentCls,"-content"),{display:"flex",flexDirection:"column",width:"100%",backgroundColor:((n=e.layout)===null||n===void 0||(n=n.pageContainer)===null||n===void 0?void 0:n.colorBgPageContainer)||"transparent",position:"relative",paddingBlock:(t=e.layout)===null||t===void 0||(t=t.pageContainer)===null||t===void 0?void 0:t.paddingBlockPageContainerContent,paddingInline:(a=e.layout)===null||a===void 0||(a=a.pageContainer)===null||a===void 0?void 0:a.paddingInlinePageContainerContent,"&-has-page-container":{padding:0}}),"".concat(e.componentCls,"-container"),{width:"100%",display:"flex",flexDirection:"column",minWidth:0,minHeight:0,backgroundColor:"transparent"}),"".concat(e.componentCls,"-bg-list"),{pointerEvents:"none",position:"fixed",overflow:"hidden",insetBlockStart:0,insetInlineStart:0,zIndex:0,height:"100%",width:"100%",background:(i=e.layout)===null||i===void 0?void 0:i.bgLayout}))};function ba(r){return(0,Pe.Xj)("ProLayout",function(e){var n=(0,s.Z)((0,s.Z)({},e),{},{componentCls:".".concat(r)});return[Ca(n),xa(n)]})}function Sa(r){if(!r||r==="/")return["/"];var e=r.split("/").filter(function(n){return n});return e.map(function(n,t){return"/".concat(e.slice(0,t+1).join("/"))})}var Qe=f(34155),Za=function(){var e;return typeof Qe=="undefined"?yn.Z:((e=Qe)===null||Qe===void 0||(Qe={NODE_ENV:"production",PUBLIC_PATH:"/"})===null||Qe===void 0?void 0:Qe.ANTD_VERSION)||yn.Z},Ma=function(e,n,t){var a=e,i=a.breadcrumbName,o=a.title,c=a.path,d=t.findIndex(function(v){return v.linkPath===e.path})===t.length-1;return d?(0,u.jsx)("span",{children:o||i}):(0,u.jsx)("span",{onClick:c?function(){return location.href=c}:void 0,children:o||i})},Ia=function(e,n){var t=n.formatMessage,a=n.menu;return e.locale&&t&&(a==null?void 0:a.locale)!==!1?t({id:e.locale,defaultMessage:e.name}):e.name},Ra=function(e,n){var t=e.get(n);if(!t){var a=Array.from(e.keys())||[],i=a.find(function(o){try{return o!=null&&o.startsWith("http")?!1:(0,Ln.EQ)(o.replace("?",""))(n)}catch(c){return console.log("path",o,c),!1}});i&&(t=e.get(i))}return t||{path:""}},Ta=function(e){var n=e.location,t=e.breadcrumbMap;return{location:n,breadcrumbMap:t}},Pa=function(e,n,t){var a=Sa(e==null?void 0:e.pathname),i=a.map(function(o){var c=Ra(n,o),d=Ia(c,t),v=c.hideInBreadcrumb;return d&&!v?{linkPath:o,breadcrumbName:d,title:d,component:c.component}:{linkPath:"",breadcrumbName:"",title:""}}).filter(function(o){return o&&o.linkPath});return i},Ba=function(e){var n=Ta(e),t=n.location,a=n.breadcrumbMap;return t&&t.pathname&&a?Pa(t,a,e):[]},_a=function(e,n){var t=e.breadcrumbRender,a=e.itemRender,i=n.breadcrumbProps||{},o=i.minLength,c=o===void 0?2:o,d=Ba(e),v=function(x){for(var P=a||Ma,N=arguments.length,D=new Array(N>1?N-1:0),B=1;B<N;B++)D[B-1]=arguments[B];return P==null?void 0:P.apply(void 0,[(0,s.Z)((0,s.Z)({},x),{},{path:x.linkPath||x.path})].concat(D))},m=d;return t&&(m=t(m||[])||void 0),(m&&m.length<c||t===!1)&&(m=void 0),(0,j.n)(Za(),"5.3.0")>-1?{items:m,itemRender:v}:{routes:m,itemRender:v}};function Ea(r){return(0,pn.Z)(r).reduce(function(e,n){var t=(0,G.Z)(n,2),a=t[0],i=t[1];return e[a]=i,e},{})}var ja=function r(e,n,t,a){var i=ar(e,(n==null?void 0:n.locale)||!1,t,!0),o=i.menuData,c=i.breadcrumb;return a?r(a(o),n,t,void 0):{breadcrumb:Ea(c),breadcrumbMap:c,menuData:o}},wa=f(71002),La=f(51812),Da=function(e){var n=(0,p.useState)({}),t=(0,G.Z)(n,2),a=t[0],i=t[1];return(0,p.useEffect)(function(){i((0,La.Y)({layout:(0,wa.Z)(e.layout)!=="object"?e.layout:void 0,navTheme:e.navTheme,menuRender:e.menuRender,footerRender:e.footerRender,menuHeaderRender:e.menuHeaderRender,headerRender:e.headerRender,fixSiderbar:e.fixSiderbar}))},[e.layout,e.navTheme,e.menuRender,e.footerRender,e.menuHeaderRender,e.headerRender,e.fixSiderbar]),a},Na=["id","defaultMessage"],Aa=["fixSiderbar","navTheme","layout"],mt=0,Oa=function(e,n){var t;return e.headerRender===!1||e.pure?null:(0,u.jsx)(da,(0,s.Z)((0,s.Z)({matchMenuKeys:n},e),{},{stylish:(t=e.stylish)===null||t===void 0?void 0:t.header}))},Ha=function(e){return e.footerRender===!1||e.pure?null:e.footerRender?e.footerRender((0,s.Z)({},e),(0,u.jsx)(yr.q,{})):null},$a=function(e,n){var t,a=e.layout,i=e.isMobile,o=e.selectedKeys,c=e.openKeys,d=e.splitMenus,v=e.suppressSiderWhenMenuEmpty,m=e.menuRender;if(e.menuRender===!1||e.pure)return null;var S=e.menuData;if(d&&(c!==!1||a==="mix")&&!i){var x=o||n,P=(0,G.Z)(x,1),N=P[0];if(N){var D;S=((D=e.menuData)===null||D===void 0||(D=D.find(function(F){return F.key===N}))===null||D===void 0?void 0:D.children)||[]}else S=[]}var B=(0,ln.QX)(S||[]);if(B&&(B==null?void 0:B.length)<1&&(d||v))return null;if(a==="top"&&!i){var z;return(0,u.jsx)(vt,(0,s.Z)((0,s.Z)({matchMenuKeys:n},e),{},{hide:!0,stylish:(z=e.stylish)===null||z===void 0?void 0:z.sider}))}var H=(0,u.jsx)(vt,(0,s.Z)((0,s.Z)({matchMenuKeys:n},e),{},{menuData:B,stylish:(t=e.stylish)===null||t===void 0?void 0:t.sider}));return m?m(e,H):H},Wa=function(e,n){var t=n.pageTitleRender,a=Dn(e);if(t===!1)return{title:n.title||"",id:"",pageName:""};if(t){var i=t(e,a.title,a);if(typeof i=="string")return Dn((0,s.Z)((0,s.Z)({},a),{},{title:i}));(0,vr.ZP)(typeof i=="string","pro-layout: renderPageTitle return value should be a string")}return a},za=function(e,n,t){return e?n?64:t:0},Fa=function(e){var n,t,a,i,o,c,d,v,m,S,x,P,N,D,B=e||{},z=B.children,H=B.onCollapse,F=B.location,L=F===void 0?{pathname:"/"}:F,A=B.contentStyle,y=B.route,E=B.defaultCollapsed,V=B.style,O=B.siderWidth,w=B.menu,re=B.siderMenuType,se=B.isChildrenLayout,g=B.menuDataRender,me=B.actionRef,T=B.bgLayoutImgList,k=B.formatMessage,oe=B.loading,Ce=(0,p.useMemo)(function(){return O||(e.layout==="mix"?215:256)},[e.layout,O]),ie=(0,p.useContext)(He.ZP.ConfigContext),Me=(n=e.prefixCls)!==null&&n!==void 0?n:ie.getPrefixCls("pro"),be=(0,Q.Z)(!1,{value:w==null?void 0:w.loading,onChange:w==null?void 0:w.onLoadingChange}),Se=(0,G.Z)(be,2),Ne=Se[0],Be=Se[1],Le=(0,p.useState)(function(){return mt+=1,"pro-layout-".concat(mt)}),$e=(0,G.Z)(Le,1),Fe=$e[0],Ke=(0,p.useCallback)(function(Re){var Ge=Re.id,Zn=Re.defaultMessage,fn=(0,le.Z)(Re,Na);if(k)return k((0,s.Z)({id:Ge,defaultMessage:Zn},fn));var mn=(0,pa.e)();return mn[Ge]?mn[Ge]:Zn},[k]),Ue=(0,fr.ZP)([Fe,w==null?void 0:w.params],function(){var Re=(0,ee.Z)((0,Y.Z)().mark(function Ge(Zn){var fn,mn,Bt,_t;return(0,Y.Z)().wrap(function(en){for(;;)switch(en.prev=en.next){case 0:return mn=(0,G.Z)(Zn,2),Bt=mn[1],Be(!0),en.next=4,w==null||(fn=w.request)===null||fn===void 0?void 0:fn.call(w,Bt||{},(y==null?void 0:y.children)||(y==null?void 0:y.routes)||[]);case 4:return _t=en.sent,Be(!1),en.abrupt("return",_t);case 7:case"end":return en.stop()}},Ge)}));return function(Ge){return Re.apply(this,arguments)}}(),{revalidateOnFocus:!1,shouldRetryOnError:!1,revalidateOnReconnect:!1}),un=Ue.data,xn=Ue.mutate,Ie=Ue.isLoading;(0,p.useEffect)(function(){Be(Ie)},[Ie]);var Oe=(0,mr.kY)(),Ae=Oe.cache;(0,p.useEffect)(function(){return function(){Ae instanceof Map&&Ae.delete(Fe)}},[]);var Cn=(0,p.useMemo)(function(){return ja(un||(y==null?void 0:y.children)||(y==null?void 0:y.routes)||[],w,Ke,g)},[Ke,w,g,un,y==null?void 0:y.children,y==null?void 0:y.routes]),Nn=Cn||{},Ua=Nn.breadcrumb,ht=Nn.breadcrumbMap,gt=Nn.menuData,cn=gt===void 0?[]:gt;me&&w!==null&&w!==void 0&&w.request&&(me.current={reload:function(){xn()}});var dn=(0,p.useMemo)(function(){return dr(L.pathname||"/",cn||[],!0)},[L.pathname,cn]),An=(0,p.useMemo)(function(){return Array.from(new Set(dn.map(function(Re){return Re.key||Re.path||""})))},[dn]),pt=dn[dn.length-1]||{},yt=Da(pt),bn=(0,s.Z)((0,s.Z)({},e),yt),Ga=bn.fixSiderbar,so=bn.navTheme,sn=bn.layout,Xa=(0,le.Z)(bn,Aa),Je=Ze(),Ye=(0,p.useMemo)(function(){return(Je==="sm"||Je==="xs")&&!e.disableMobile},[Je,e.disableMobile]),Va=sn!=="top"&&!Ye,ka=(0,Q.Z)(function(){return E!==void 0?E:!!(Ye||Je==="md")},{value:e.collapsed,onChange:H}),xt=(0,G.Z)(ka,2),vn=xt[0],Ct=xt[1],qe=(0,Qn.Z)((0,s.Z)((0,s.Z)((0,s.Z)({prefixCls:Me},e),{},{siderWidth:Ce},yt),{},{formatMessage:Ke,breadcrumb:Ua,menu:(0,s.Z)((0,s.Z)({},w),{},{type:re||(w==null?void 0:w.type),loading:Ne}),layout:sn}),["className","style","breadcrumbRender"]),On=Wa((0,s.Z)((0,s.Z)({pathname:L.pathname},qe),{},{breadcrumbMap:ht}),e),Qa=_a((0,s.Z)((0,s.Z)({},qe),{},{breadcrumbRender:e.breadcrumbRender,breadcrumbMap:ht}),e),Sn=$a((0,s.Z)((0,s.Z)({},qe),{},{menuData:cn,onCollapse:Ct,isMobile:Ye,collapsed:vn}),An),Hn=Oa((0,s.Z)((0,s.Z)({},qe),{},{children:null,hasSiderMenu:!!Sn,menuData:cn,isMobile:Ye,collapsed:vn,onCollapse:Ct}),An),bt=Ha((0,s.Z)({isMobile:Ye,collapsed:vn},qe)),Ja=(0,p.useContext)(ft.X),Ya=Ja.isChildrenLayout,$n=se!==void 0?se:Ya,We="".concat(Me,"-layout"),St=ba(We),qa=St.wrapSSR,Wn=St.hashId,eo=te()(e.className,Wn,"ant-design-pro",We,(0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)((0,l.Z)({},"screen-".concat(Je),Je),"".concat(We,"-top-menu"),sn==="top"),"".concat(We,"-is-children"),$n),"".concat(We,"-fix-siderbar"),Ga),"".concat(We,"-").concat(sn),sn)),no=za(!!Va,vn,Ce),Zt={position:"relative"};($n||A&&A.minHeight)&&(Zt.minHeight=0),(0,p.useEffect)(function(){var Re;(Re=e.onPageChange)===null||Re===void 0||Re.call(e,e.location)},[L.pathname,(t=L.pathname)===null||t===void 0?void 0:t.search]);var to=(0,p.useState)(!1),Mt=(0,G.Z)(to,2),It=Mt[0],ro=Mt[1],ao=(0,p.useState)(0),Rt=(0,G.Z)(ao,2),Tt=Rt[0],oo=Rt[1];I(On,e.title||!1);var io=(0,p.useContext)(q.L_),X=io.token,Pt=(0,p.useMemo)(function(){return T&&T.length>0?T==null?void 0:T.map(function(Re,Ge){return(0,u.jsx)("img",{src:Re.src,style:(0,s.Z)({position:"absolute"},Re)},Ge)}):null},[T]);return qa((0,u.jsx)(ft.X.Provider,{value:(0,s.Z)((0,s.Z)({},qe),{},{breadcrumb:Qa,menuData:cn,isMobile:Ye,collapsed:vn,hasPageContainer:Tt,setHasPageContainer:oo,isChildrenLayout:!0,title:On.pageName,hasSiderMenu:!!Sn,hasHeader:!!Hn,siderWidth:no,hasFooter:!!bt,hasFooterToolbar:It,setHasFooterToolbar:ro,pageTitleInfo:On,matchMenus:dn,matchMenuKeys:An,currentMenu:pt}),children:e.pure?(0,u.jsx)(u.Fragment,{children:z}):(0,u.jsxs)("div",{className:eo,children:[Pt||(a=X.layout)!==null&&a!==void 0&&a.bgLayout?(0,u.jsx)("div",{className:te()("".concat(We,"-bg-list"),Wn),children:Pt}):null,(0,u.jsxs)(Ve.Z,{style:(0,s.Z)({minHeight:"100%",flexDirection:Sn?"row":void 0},V),children:[(0,u.jsx)(He.ZP,{theme:{hashed:(0,q.nu)(),token:{controlHeightLG:((i=X.layout)===null||i===void 0||(i=i.sider)===null||i===void 0?void 0:i.menuHeight)||(X==null?void 0:X.controlHeightLG)},components:{Menu:U({colorItemBg:((o=X.layout)===null||o===void 0||(o=o.sider)===null||o===void 0?void 0:o.colorMenuBackground)||"transparent",colorSubItemBg:((c=X.layout)===null||c===void 0||(c=c.sider)===null||c===void 0?void 0:c.colorMenuBackground)||"transparent",radiusItem:X.borderRadius,colorItemBgSelected:((d=X.layout)===null||d===void 0||(d=d.sider)===null||d===void 0?void 0:d.colorBgMenuItemSelected)||(X==null?void 0:X.colorBgTextHover),colorItemBgHover:((v=X.layout)===null||v===void 0||(v=v.sider)===null||v===void 0?void 0:v.colorBgMenuItemHover)||(X==null?void 0:X.colorBgTextHover),colorItemBgActive:((m=X.layout)===null||m===void 0||(m=m.sider)===null||m===void 0?void 0:m.colorBgMenuItemActive)||(X==null?void 0:X.colorBgTextActive),colorItemBgSelectedHorizontal:((S=X.layout)===null||S===void 0||(S=S.sider)===null||S===void 0?void 0:S.colorBgMenuItemSelected)||(X==null?void 0:X.colorBgTextHover),colorActiveBarWidth:0,colorActiveBarHeight:0,colorActiveBarBorderSize:0,colorItemText:((x=X.layout)===null||x===void 0||(x=x.sider)===null||x===void 0?void 0:x.colorTextMenu)||(X==null?void 0:X.colorTextSecondary),colorItemTextHover:((P=X.layout)===null||P===void 0||(P=P.sider)===null||P===void 0?void 0:P.colorTextMenuItemHover)||"rgba(0, 0, 0, 0.85)",colorItemTextSelected:((N=X.layout)===null||N===void 0||(N=N.sider)===null||N===void 0?void 0:N.colorTextMenuSelected)||"rgba(0, 0, 0, 1)",popupBg:X==null?void 0:X.colorBgElevated,subMenuItemBg:X==null?void 0:X.colorBgElevated,darkSubMenuItemBg:"transparent",darkPopupBg:X==null?void 0:X.colorBgElevated})}},children:Sn}),(0,u.jsxs)("div",{style:Zt,className:"".concat(We,"-container ").concat(Wn).trim(),children:[Hn,(0,u.jsx)(gr,(0,s.Z)((0,s.Z)({hasPageContainer:Tt,isChildrenLayout:$n},Xa),{},{hasHeader:!!Hn,prefixCls:We,style:A,children:oe?(0,u.jsx)(sa.S,{}):z})),bt,It&&(0,u.jsx)("div",{className:"".concat(We,"-has-footer"),style:{height:64,marginBlockStart:(D=X.layout)===null||D===void 0||(D=D.pageContainer)===null||D===void 0?void 0:D.paddingBlockPageContainerContent}})]})]})]})}))},Ka=function(e){var n=e.colorPrimary,t=e.navTheme!==void 0?{dark:e.navTheme==="realDark"}:{};return(0,u.jsx)(He.ZP,{theme:n?{token:{colorPrimary:n}}:void 0,children:(0,u.jsx)(q._Y,(0,s.Z)((0,s.Z)({},t),{},{token:e.token,prefixCls:e.prefixCls,children:(0,u.jsx)(Fa,(0,s.Z)((0,s.Z)({logo:(0,u.jsx)(pr,{})},et.h),{},{location:(0,he.j)()?window.location:void 0},e))}))})}},83832:function(ye,J,f){"use strict";f.d(J,{S:function(){return q}});var l=f(1413),Y=f(91),ee=f(57381),le=f(67294),G=f(85893),s=["isLoading","pastDelay","timedOut","error","retry"],q=function(p){var ve=p.isLoading,ge=p.pastDelay,_e=p.timedOut,Ze=p.error,he=p.retry,I=(0,Y.Z)(p,s);return(0,G.jsx)("div",{style:{paddingBlockStart:100,textAlign:"center"},children:(0,G.jsx)(ee.Z,(0,l.Z)({size:"large"},I))})}},76509:function(ye,J,f){"use strict";f.d(J,{X:function(){return Y}});var l=f(67294),Y=(0,l.createContext)({})},78164:function(ye,J,f){"use strict";f.d(J,{S:function(){return ve}});var l=f(15671),Y=f(43144),ee=f(97326),le=f(60136),G=f(29388),s=f(4942),q=f(59720),Q=f(67294),p=f(85893),ve=function(ge){(0,le.Z)(Ze,ge);var _e=(0,G.Z)(Ze);function Ze(){var he;(0,l.Z)(this,Ze);for(var I=arguments.length,j=new Array(I),R=0;R<I;R++)j[R]=arguments[R];return he=_e.call.apply(_e,[this].concat(j)),(0,s.Z)((0,ee.Z)(he),"state",{hasError:!1,errorInfo:""}),he}return(0,Y.Z)(Ze,[{key:"componentDidCatch",value:function(I,j){console.log(I,j)}},{key:"render",value:function(){return this.state.hasError?(0,p.jsx)(q.ZP,{status:"error",title:"Something went wrong.",extra:this.state.errorInfo}):this.props.children}}],[{key:"getDerivedStateFromError",value:function(I){return{hasError:!0,errorInfo:I.message}}}]),Ze}(Q.Component)},10178:function(ye,J,f){"use strict";f.d(J,{D:function(){return G}});var l=f(74165),Y=f(15861),ee=f(67294),le=f(48171);function G(s,q){var Q=(0,le.J)(s),p=(0,ee.useRef)(),ve=(0,ee.useCallback)(function(){p.current&&(clearTimeout(p.current),p.current=null)},[]),ge=(0,ee.useCallback)((0,Y.Z)((0,l.Z)().mark(function _e(){var Ze,he,I,j=arguments;return(0,l.Z)().wrap(function(U){for(;;)switch(U.prev=U.next){case 0:for(Ze=j.length,he=new Array(Ze),I=0;I<Ze;I++)he[I]=j[I];if(!(q===0||q===void 0)){U.next=3;break}return U.abrupt("return",Q.apply(void 0,he));case 3:return ve(),U.abrupt("return",new Promise(function(ce){p.current=setTimeout((0,Y.Z)((0,l.Z)().mark(function K(){return(0,l.Z)().wrap(function(ae){for(;;)switch(ae.prev=ae.next){case 0:return ae.t0=ce,ae.next=3,Q.apply(void 0,he);case 3:return ae.t1=ae.sent,(0,ae.t0)(ae.t1),ae.abrupt("return");case 6:case"end":return ae.stop()}},K)})),q)}));case 5:case"end":return U.stop()}},_e)})),[Q,ve,q]);return(0,ee.useEffect)(function(){return ve},[ve]),{run:ge,cancel:ve}}},48171:function(ye,J,f){"use strict";f.d(J,{J:function(){return ee}});var l=f(74902),Y=f(67294),ee=function(G){var s=(0,Y.useRef)(null);return s.current=G,(0,Y.useCallback)(function(){for(var q,Q=arguments.length,p=new Array(Q),ve=0;ve<Q;ve++)p[ve]=arguments[ve];return(q=s.current)===null||q===void 0?void 0:q.call.apply(q,[s].concat((0,l.Z)(p)))},[])}},90591:function(ye,J,f){"use strict";var l=f(1413),Y=f(67294),ee=f(70391),le=f(276),G=function(Q,p){return Y.createElement(le.Z,(0,l.Z)((0,l.Z)({},Q),{},{ref:p,icon:ee.Z}))},s=Y.forwardRef(G);J.Z=s},47930:function(ye,J){var f;function l(I){"@babel/helpers - typeof";return l=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(j){return typeof j}:function(j){return j&&typeof Symbol=="function"&&j.constructor===Symbol&&j!==Symbol.prototype?"symbol":typeof j},l(I)}f={value:!0},J.Bo=f=f=f=f=f=f=void 0;function Y(I){for(var j=[],R=0;R<I.length;){var U=I[R];if(U==="*"||U==="+"||U==="?"){j.push({type:"MODIFIER",index:R,value:I[R++]});continue}if(U==="\\"){j.push({type:"ESCAPED_CHAR",index:R++,value:I[R++]});continue}if(U==="{"){j.push({type:"OPEN",index:R,value:I[R++]});continue}if(U==="}"){j.push({type:"CLOSE",index:R,value:I[R++]});continue}if(U===":"){for(var ce="",K=R+1;K<I.length;){var ne=I.charCodeAt(K);if(ne>=48&&ne<=57||ne>=65&&ne<=90||ne>=97&&ne<=122||ne===95){ce+=I[K++];continue}break}if(!ce)throw new TypeError("Missing parameter name at "+R);j.push({type:"NAME",index:R,value:ce}),R=K;continue}if(U==="("){var ae=1,ue="",K=R+1;if(I[K]==="?")throw new TypeError('Pattern cannot start with "?" at '+K);for(;K<I.length;){if(I[K]==="\\"){ue+=I[K++]+I[K++];continue}if(I[K]===")"){if(ae--,ae===0){K++;break}}else if(I[K]==="("&&(ae++,I[K+1]!=="?"))throw new TypeError("Capturing groups are not allowed at "+K);ue+=I[K++]}if(ae)throw new TypeError("Unbalanced pattern at "+R);if(!ue)throw new TypeError("Missing pattern at "+R);j.push({type:"PATTERN",index:R,value:ue}),R=K;continue}j.push({type:"CHAR",index:R,value:I[R++]})}return j.push({type:"END",index:R,value:""}),j}function ee(I,j){j===void 0&&(j={});for(var R=Y(I),U=j.prefixes,ce=U===void 0?"./":U,K="[^"+Q(j.delimiter||"/#?")+"]+?",ne=[],ae=0,ue=0,Z="",C=function(De){if(ue<R.length&&R[ue].type===De)return R[ue++].value},h=function(De){var ze=C(De);if(ze!==void 0)return ze;var hn=R[ue],Mn=hn.type,nn=hn.index;throw new TypeError("Unexpected "+Mn+" at "+nn+", expected "+De)},W=function(){for(var De="",ze;ze=C("CHAR")||C("ESCAPED_CHAR");)De+=ze;return De};ue<R.length;){var _=C("CHAR"),b=C("NAME"),$=C("PATTERN");if(b||$){var M=_||"";ce.indexOf(M)===-1&&(Z+=M,M=""),Z&&(ne.push(Z),Z=""),ne.push({name:b||ae++,prefix:M,suffix:"",pattern:$||K,modifier:C("MODIFIER")||""});continue}var de=_||C("ESCAPED_CHAR");if(de){Z+=de;continue}Z&&(ne.push(Z),Z="");var fe=C("OPEN");if(fe){var M=W(),Ee=C("NAME")||"",pe=C("PATTERN")||"",je=W();h("CLOSE"),ne.push({name:Ee||(pe?ae++:""),pattern:Ee&&!pe?K:pe,prefix:M,suffix:je,modifier:C("MODIFIER")||""});continue}h("END")}return ne}f=ee;function le(I,j){return G(ee(I,j),j)}f=le;function G(I,j){j===void 0&&(j={});var R=p(j),U=j.encode,ce=U===void 0?function(ue){return ue}:U,K=j.validate,ne=K===void 0?!0:K,ae=I.map(function(ue){if(l(ue)==="object")return new RegExp("^(?:"+ue.pattern+")$",R)});return function(ue){for(var Z="",C=0;C<I.length;C++){var h=I[C];if(typeof h=="string"){Z+=h;continue}var W=ue?ue[h.name]:void 0,_=h.modifier==="?"||h.modifier==="*",b=h.modifier==="*"||h.modifier==="+";if(Array.isArray(W)){if(!b)throw new TypeError('Expected "'+h.name+'" to not repeat, but got an array');if(W.length===0){if(_)continue;throw new TypeError('Expected "'+h.name+'" to not be empty')}for(var $=0;$<W.length;$++){var M=ce(W[$],h);if(ne&&!ae[C].test(M))throw new TypeError('Expected all "'+h.name+'" to match "'+h.pattern+'", but got "'+M+'"');Z+=h.prefix+M+h.suffix}continue}if(typeof W=="string"||typeof W=="number"){var M=ce(String(W),h);if(ne&&!ae[C].test(M))throw new TypeError('Expected "'+h.name+'" to match "'+h.pattern+'", but got "'+M+'"');Z+=h.prefix+M+h.suffix;continue}if(!_){var de=b?"an array":"a string";throw new TypeError('Expected "'+h.name+'" to be '+de)}}return Z}}f=G;function s(I,j){var R=[],U=he(I,R,j);return q(U,R,j)}f=s;function q(I,j,R){R===void 0&&(R={});var U=R.decode,ce=U===void 0?function(K){return K}:U;return function(K){var ne=I.exec(K);if(!ne)return!1;for(var ae=ne[0],ue=ne.index,Z=Object.create(null),C=function(_){if(ne[_]===void 0)return"continue";var b=j[_-1];b.modifier==="*"||b.modifier==="+"?Z[b.name]=ne[_].split(b.prefix+b.suffix).map(function($){return ce($,b)}):Z[b.name]=ce(ne[_],b)},h=1;h<ne.length;h++)C(h);return{path:ae,index:ue,params:Z}}}f=q;function Q(I){return I.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1")}function p(I){return I&&I.sensitive?"":"i"}function ve(I,j){if(!j)return I;var R=I.source.match(/\((?!\?)/g);if(R)for(var U=0;U<R.length;U++)j.push({name:U,prefix:"",suffix:"",modifier:"",pattern:""});return I}function ge(I,j,R){var U=I.map(function(ce){return he(ce,j,R).source});return new RegExp("(?:"+U.join("|")+")",p(R))}function _e(I,j,R){return Ze(ee(I,R),j,R)}function Ze(I,j,R){R===void 0&&(R={});for(var U=R.strict,ce=U===void 0?!1:U,K=R.start,ne=K===void 0?!0:K,ae=R.end,ue=ae===void 0?!0:ae,Z=R.encode,C=Z===void 0?function(Te){return Te}:Z,h="["+Q(R.endsWith||"")+"]|$",W="["+Q(R.delimiter||"/#?")+"]",_=ne?"^":"",b=0,$=I;b<$.length;b++){var M=$[b];if(typeof M=="string")_+=Q(C(M));else{var de=Q(C(M.prefix)),fe=Q(C(M.suffix));if(M.pattern)if(j&&j.push(M),de||fe)if(M.modifier==="+"||M.modifier==="*"){var Ee=M.modifier==="*"?"?":"";_+="(?:"+de+"((?:"+M.pattern+")(?:"+fe+de+"(?:"+M.pattern+"))*)"+fe+")"+Ee}else _+="(?:"+de+"("+M.pattern+")"+fe+")"+M.modifier;else _+="("+M.pattern+")"+M.modifier;else _+="(?:"+de+fe+")"+M.modifier}}if(ue)ce||(_+=W+"?"),_+=R.endsWith?"(?="+h+")":"$";else{var pe=I[I.length-1],je=typeof pe=="string"?W.indexOf(pe[pe.length-1])>-1:pe===void 0;ce||(_+="(?:"+W+"(?="+h+"))?"),je||(_+="(?="+W+"|"+h+")")}return new RegExp(_,p(R))}f=Ze;function he(I,j,R){return I instanceof RegExp?ve(I,j):Array.isArray(I)?ge(I,j,R):_e(I,j,R)}J.Bo=he},16305:function(ye,J){"use strict";var f;f={value:!0},f=void 0,f=_e,f=Ze,J.EQ=j,f=R,f=ne;const l="/",Y=Z=>Z,ee=/^[$_\p{ID_Start}]$/u,le=/^[$\u200c\u200d\p{ID_Continue}]$/u,G="https://git.new/pathToRegexpError",s={"{":"{","}":"}","(":"(",")":")","[":"[","]":"]","+":"+","?":"?","!":"!"};function q(Z){return Z.replace(/[{}()\[\]+?!:*]/g,"\\$&")}function Q(Z){return Z.replace(/[.+*?^${}()[\]|/\\]/g,"\\$&")}function*p(Z){const C=[...Z];let h=0;function W(){let _="";if(ee.test(C[++h]))for(_+=C[h];le.test(C[++h]);)_+=C[h];else if(C[h]==='"'){let b=h;for(;h<C.length;){if(C[++h]==='"'){h++,b=0;break}C[h]==="\\"?_+=C[++h]:_+=C[h]}if(b)throw new TypeError(`Unterminated quote at ${b}: ${G}`)}if(!_)throw new TypeError(`Missing parameter name at ${h}: ${G}`);return _}for(;h<C.length;){const _=C[h],b=s[_];if(b)yield{type:b,index:h++,value:_};else if(_==="\\")yield{type:"ESCAPED",index:h++,value:C[h++]};else if(_===":"){const $=W();yield{type:"PARAM",index:h,value:$}}else if(_==="*"){const $=W();yield{type:"WILDCARD",index:h,value:$}}else yield{type:"CHAR",index:h,value:C[h++]}}return{type:"END",index:h,value:""}}class ve{constructor(C){this.tokens=C}peek(){if(!this._peek){const C=this.tokens.next();this._peek=C.value}return this._peek}tryConsume(C){const h=this.peek();if(h.type===C)return this._peek=void 0,h.value}consume(C){const h=this.tryConsume(C);if(h!==void 0)return h;const{type:W,index:_}=this.peek();throw new TypeError(`Unexpected ${W} at ${_}, expected ${C}: ${G}`)}text(){let C="",h;for(;h=this.tryConsume("CHAR")||this.tryConsume("ESCAPED");)C+=h;return C}}class ge{constructor(C){this.tokens=C}}f=ge;function _e(Z,C={}){const{encodePath:h=Y}=C,W=new ve(p(Z));function _($){const M=[];for(;;){const de=W.text();de&&M.push({type:"text",value:h(de)});const fe=W.tryConsume("PARAM");if(fe){M.push({type:"param",name:fe});continue}const Ee=W.tryConsume("WILDCARD");if(Ee){M.push({type:"wildcard",name:Ee});continue}if(W.tryConsume("{")){M.push({type:"group",tokens:_("}")});continue}return W.consume($),M}}const b=_("END");return new ge(b)}function Ze(Z,C={}){const{encode:h=encodeURIComponent,delimiter:W=l}=C,_=Z instanceof ge?Z:_e(Z,C),b=he(_.tokens,W,h);return function(M={}){const[de,...fe]=b(M);if(fe.length)throw new TypeError(`Missing parameters: ${fe.join(", ")}`);return de}}function he(Z,C,h){const W=Z.map(_=>I(_,C,h));return _=>{const b=[""];for(const $ of W){const[M,...de]=$(_);b[0]+=M,b.push(...de)}return b}}function I(Z,C,h){if(Z.type==="text")return()=>[Z.value];if(Z.type==="group"){const _=he(Z.tokens,C,h);return b=>{const[$,...M]=_(b);return M.length?[""]:[$]}}const W=h||Y;return Z.type==="wildcard"&&h!==!1?_=>{const b=_[Z.name];if(b==null)return["",Z.name];if(!Array.isArray(b)||b.length===0)throw new TypeError(`Expected "${Z.name}" to be a non-empty array`);return[b.map(($,M)=>{if(typeof $!="string")throw new TypeError(`Expected "${Z.name}/${M}" to be a string`);return W($)}).join(C)]}:_=>{const b=_[Z.name];if(b==null)return["",Z.name];if(typeof b!="string")throw new TypeError(`Expected "${Z.name}" to be a string`);return[W(b)]}}function j(Z,C={}){const{decode:h=decodeURIComponent,delimiter:W=l}=C,{regexp:_,keys:b}=R(Z,C),$=b.map(M=>h===!1?Y:M.type==="param"?h:de=>de.split(W).map(h));return function(de){const fe=_.exec(de);if(!fe)return!1;const Ee=fe[0],pe=Object.create(null);for(let je=1;je<fe.length;je++){if(fe[je]===void 0)continue;const Te=b[je-1],De=$[je-1];pe[Te.name]=De(fe[je])}return{path:Ee,params:pe}}}function R(Z,C={}){const{delimiter:h=l,end:W=!0,sensitive:_=!1,trailing:b=!0}=C,$=[],M=[],de=_?"":"i",Ee=(Array.isArray(Z)?Z:[Z]).map(Te=>Te instanceof ge?Te:_e(Te,C));for(const{tokens:Te}of Ee)for(const De of U(Te,0,[])){const ze=ce(De,h,$);M.push(ze)}let pe=`^(?:${M.join("|")})`;return b&&(pe+=`(?:${Q(h)}$)?`),pe+=W?"$":`(?=${Q(h)}|$)`,{regexp:new RegExp(pe,de),keys:$}}function*U(Z,C,h){if(C===Z.length)return yield h;const W=Z[C];if(W.type==="group"){const _=h.slice();for(const b of U(W.tokens,0,_))yield*Fn(U(Z,C+1,b))}else h.push(W);yield*Fn(U(Z,C+1,h))}function ce(Z,C,h){let W="",_="",b=!0;for(let $=0;$<Z.length;$++){const M=Z[$];if(M.type==="text"){W+=Q(M.value),_+=M.value,b||(b=M.value.includes(C));continue}if(M.type==="param"||M.type==="wildcard"){if(!b&&!_)throw new TypeError(`Missing text after "${M.name}": ${G}`);M.type==="param"?W+=`(${K(C,b?"":_)}+)`:W+="([\\s\\S]+)",h.push(M),_="",b=!1;continue}}return W}function K(Z,C){return C.length<2?Z.length<2?`[^${Q(Z+C)}]`:`(?:(?!${Q(Z)})[^${Q(C)}])`:Z.length<2?`(?:(?!${Q(C)})[^${Q(Z)}])`:`(?:(?!${Q(C)}|${Q(Z)})[\\s\\S])`}function ne(Z){return Z.tokens.map(function C(h,W,_){if(h.type==="text")return q(h.value);if(h.type==="group")return`{${h.tokens.map(C).join("")}}`;const $=ae(h.name)&&ue(_[W+1])?h.name:JSON.stringify(h.name);if(h.type==="param")return`:${$}`;if(h.type==="wildcard")return`*${$}`;throw new TypeError(`Unexpected token: ${h}`)}).join("")}function ae(Z){const[C,...h]=Z;return ee.test(C)?h.every(W=>le.test(W)):!1}function ue(Z){return(Z==null?void 0:Z.type)!=="text"?!0:!le.test(Z.value[0])}}}]);
}());