diff --git a/ruoyi-admin/src/main/resources/static/4346.cc329ea7.async.js b/ruoyi-admin/src/main/resources/static/4346.cc329ea7.async.js
new file mode 100644
index 0000000..ef8db43
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/static/4346.cc329ea7.async.js
@@ -0,0 +1,27 @@
+!(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])}}}]);
+}());
\ No newline at end of file
