diff --git a/ruoyi-admin/src/main/resources/static/7903.bf5929ab.async.js b/ruoyi-admin/src/main/resources/static/7903.bf5929ab.async.js
new file mode 100644
index 0000000..45ff12e
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/static/7903.bf5929ab.async.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[7903,8975],{94162:function(ne,B,n){var E=n(64599),i=n.n(E),K=n(67294),t=n(66309),S=n(85893),T=function(c){function P(d){switch(d){case"primary":return"blue";case"success":return"success";case"info":return"green";case"warning":return"warning";case"danger":return"error";case"default":default:return"default"}}function C(d){if(d===void 0)return"";if(c.enums){var A=c.enums[d];return A.label}if(c.options){if(!Array.isArray(c.options))return console.log("DictTag options is no array!"),"";var o=i()(c.options),u;try{for(o.s();!(u=o.n()).done;){var _=u.value;if(_.value===d)return _.text}}catch(h){o.e(h)}finally{o.f()}}return String(c.value)}function l(d){if(d===void 0)return"default";if(c.enums){var A=c.enums[d];return A.listClass||"default"}if(c.options){if(!Array.isArray(c.options))return console.log("DictTag options is no array!"),"default";var o=i()(c.options),u;try{for(o.s();!(u=o.n()).done;){var _=u.value;if(_.value===d)return _.listClass||"default"}}catch(h){o.e(h)}finally{o.f()}}return String(c.value)}var D=function(){return P(l(c.value).toLowerCase())},x=function(){return C(c.value)};return(0,S.jsx)(t.Z,{color:D(),children:x()})};B.Z=T},33867:function(ne,B,n){n.d(B,{iK:function(){return E},zc:function(){return K}});var E=function(t){return t[t.SUCCESS=200]="SUCCESS",t[t.ERROR=-1]="ERROR",t[t.TIMEOUT=401]="TIMEOUT",t.TYPE="success",t}({}),i=function(t){return t.GET="GET",t.POST="POST",t.PUT="PUT",t.DELETE="DELETE",t}({}),K=function(t){return t.JSON="application/json;charset=UTF-8",t.FORM_URLENCODED="application/x-www-form-urlencoded;charset=UTF-8",t.FORM_DATA="multipart/form-data;charset=UTF-8",t}({})},59193:function(ne,B,n){n.r(B);var E=n(5574),i=n.n(E),K=n(15009),t=n.n(K),S=n(97857),T=n.n(S),g=n(99289),c=n.n(g),P=n(67294),C=n(76772),l=n(2453),D=n(83622),x=n(17788),d=n(6110),A=n(65385),o=n(2236),u=n(24969),_=n(11475),h=n(48689),O=n(52728),I=n(45349),v=n(92982),le=n(31981),oe=n(94162),f=n(85893),b=function(){var X=c()(t()().mark(function e(a){var m;return t()().wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return m=l.ZP.loading("\u6B63\u5728\u6DFB\u52A0"),r.prev=1,r.next=4,(0,O.bL)(T()({},a));case 4:return m(),l.ZP.success("\u6DFB\u52A0\u6210\u529F"),r.abrupt("return",!0);case 9:return r.prev=9,r.t0=r.catch(1),m(),l.ZP.error("\u6DFB\u52A0\u5931\u8D25\u8BF7\u91CD\u8BD5\uFF01"),r.abrupt("return",!1);case 14:case"end":return r.stop()}},e,null,[[1,9]])}));return function(a){return X.apply(this,arguments)}}(),R=function(){var X=c()(t()().mark(function e(a){var m;return t()().wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return m=l.ZP.loading("\u6B63\u5728\u914D\u7F6E"),r.prev=1,r.next=4,(0,O._8)(a);case 4:return m(),l.ZP.success("\u914D\u7F6E\u6210\u529F"),r.abrupt("return",!0);case 9:return r.prev=9,r.t0=r.catch(1),m(),l.ZP.error("\u914D\u7F6E\u5931\u8D25\u8BF7\u91CD\u8BD5\uFF01"),r.abrupt("return",!1);case 14:case"end":return r.stop()}},e,null,[[1,9]])}));return function(a){return X.apply(this,arguments)}}(),z=function(){var X=c()(t()().mark(function e(a){var m;return t()().wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(m=l.ZP.loading("\u6B63\u5728\u5220\u9664"),a){r.next=3;break}return r.abrupt("return",!0);case 3:return r.prev=3,r.next=6,(0,O.n_)(a.map(function(y){return y.menuId}).join(","));case 6:return m(),l.ZP.success("\u5220\u9664\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"),r.abrupt("return",!0);case 11:return r.prev=11,r.t0=r.catch(3),m(),l.ZP.error("\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),r.abrupt("return",!1);case 16:case"end":return r.stop()}},e,null,[[3,11]])}));return function(a){return X.apply(this,arguments)}}(),p=function(){var X=c()(t()().mark(function e(a){var m,s;return t()().wrap(function(y){for(;;)switch(y.prev=y.next){case 0:if(m=l.ZP.loading("\u6B63\u5728\u5220\u9664"),a){y.next=3;break}return y.abrupt("return",!0);case 3:return y.prev=3,s=[a.menuId],y.next=7,(0,O.n_)(s.join(","));case 7:return m(),l.ZP.success("\u5220\u9664\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"),y.abrupt("return",!0);case 12:return y.prev=12,y.t0=y.catch(3),m(),l.ZP.error("\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),y.abrupt("return",!1);case 17:case"end":return y.stop()}},e,null,[[3,12]])}));return function(a){return X.apply(this,arguments)}}(),k=function(){var e=(0,P.useState)(!1),a=i()(e,2),m=a[0],s=a[1],r=(0,P.useRef)(),y=(0,P.useState)(),W=i()(y,2),ee=W[0],G=W[1],re=(0,P.useState)([]),Q=i()(re,2),F=Q[0],J=Q[1],ie=(0,P.useState)([]),se=i()(ie,2),Y=se[0],ce=se[1],ue=(0,P.useState)([]),me=i()(ue,2),pe=me[0],fe=me[1],de=(0,P.useState)([]),he=i()(de,2),H=he[0],ge=he[1],te=(0,C.useAccess)(),be=(0,C.useIntl)();(0,P.useEffect)(function(){(0,v.pX)("sys_show_hide").then(function($){fe($)}),(0,v.pX)("sys_normal_disable").then(function($){ge($)})},[]);var ve=[{title:(0,f.jsx)(C.FormattedMessage,{id:"system.menu.menu_name",defaultMessage:"\u83DC\u5355\u540D\u79F0"}),dataIndex:"menuName",valueType:"text"},{title:(0,f.jsx)(C.FormattedMessage,{id:"system.menu.icon",defaultMessage:"\u83DC\u5355\u56FE\u6807"}),dataIndex:"icon",valueType:"text",hideInSearch:!0},{title:(0,f.jsx)(C.FormattedMessage,{id:"system.menu.order_num",defaultMessage:"\u663E\u793A\u987A\u5E8F"}),dataIndex:"orderNum",valueType:"text",hideInSearch:!0},{title:(0,f.jsx)(C.FormattedMessage,{id:"system.menu.component",defaultMessage:"\u7EC4\u4EF6\u8DEF\u5F84"}),dataIndex:"component",valueType:"text",hideInSearch:!0},{title:(0,f.jsx)(C.FormattedMessage,{id:"system.menu.perms",defaultMessage:"\u6743\u9650\u6807\u8BC6"}),dataIndex:"perms",valueType:"text",hideInSearch:!0},{title:(0,f.jsx)(C.FormattedMessage,{id:"system.menu.status",defaultMessage:"\u83DC\u5355\u72B6\u6001"}),dataIndex:"status",valueType:"select",valueEnum:H,render:function(Z,L){return(0,f.jsx)(oe.Z,{enums:H,value:L.status})}},{title:(0,f.jsx)(C.FormattedMessage,{id:"pages.searchTable.titleOption",defaultMessage:"\u64CD\u4F5C"}),dataIndex:"option",width:"220px",valueType:"option",render:function(Z,L){return[(0,f.jsx)(D.ZP,{type:"link",size:"small",hidden:!te.hasPerms("system:menu:edit"),onClick:function(){s(!0),G(L)},children:"\u7F16\u8F91"},"edit"),(0,f.jsx)(D.ZP,{type:"link",size:"small",danger:!0,hidden:!te.hasPerms("system:menu:remove"),onClick:c()(t()().mark(function M(){return t()().wrap(function(j){for(;;)switch(j.prev=j.next){case 0:x.Z.confirm({title:"\u5220\u9664",content:"\u786E\u5B9A\u5220\u9664\u8BE5\u9879\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var N=c()(t()().mark(function U(){var ae;return t()().wrap(function(_e){for(;;)switch(_e.prev=_e.next){case 0:return _e.next=2,p(L);case 2:ae=_e.sent,ae&&r.current&&r.current.reload();case 4:case"end":return _e.stop()}},U)}));function V(){return N.apply(this,arguments)}return V}()});case 1:case"end":return j.stop()}},M)})),children:"\u5220\u9664"},"batchRemove")]}}];return(0,f.jsxs)(d._z,{children:[(0,f.jsx)("div",{style:{width:"100%",float:"right"},children:(0,f.jsx)(A.Z,{headerTitle:be.formatMessage({id:"pages.searchTable.title",defaultMessage:"\u4FE1\u606F"}),actionRef:r,rowKey:"menuId",search:{labelWidth:120},toolBarRender:function(){return[(0,f.jsxs)(D.ZP,{type:"primary",hidden:!te.hasPerms("system:menu:add"),onClick:c()(t()().mark(function Z(){return t()().wrap(function(M){for(;;)switch(M.prev=M.next){case 0:G(void 0),s(!0);case 2:case"end":return M.stop()}},Z)})),children:[(0,f.jsx)(u.Z,{})," ",(0,f.jsx)(C.FormattedMessage,{id:"pages.searchTable.new",defaultMessage:"\u65B0\u5EFA"})]},"add"),(0,f.jsxs)(D.ZP,{type:"primary",danger:!0,hidden:(F==null?void 0:F.length)===0||!te.hasPerms("system:menu:remove"),onClick:c()(t()().mark(function Z(){return t()().wrap(function(M){for(;;)switch(M.prev=M.next){case 0:x.Z.confirm({title:"\u662F\u5426\u786E\u8BA4\u5220\u9664\u6240\u9009\u6570\u636E\u9879?",icon:(0,f.jsx)(_.Z,{}),content:"\u8BF7\u8C28\u614E\u64CD\u4F5C",onOk:function(){return c()(t()().mark(function j(){var N,V,U;return t()().wrap(function(w){for(;;)switch(w.prev=w.next){case 0:return w.next=2,z(F);case 2:N=w.sent,N&&(J([]),(V=r.current)===null||V===void 0||(U=V.reloadAndRest)===null||U===void 0||U.call(V));case 4:case"end":return w.stop()}},j)}))()},onCancel:function(){}});case 1:case"end":return M.stop()}},Z)})),children:[(0,f.jsx)(h.Z,{}),(0,f.jsx)(C.FormattedMessage,{id:"pages.searchTable.delete",defaultMessage:"\u5220\u9664"})]},"remove")]},request:function(Z){return(0,O.Af)(T()({},Z)).then(function(L){var M={id:0,label:"\u4E3B\u7C7B\u76EE",children:[],value:0},q=(0,le.C2)(L.data,"menuId","menuName","","","");M.children=q;var j=[];return j.push(M),ce(j),{data:q,total:L.data.length,success:!0}})},columns:ve,rowSelection:{onChange:function(Z,L){J(L)}}},"menuList")}),(F==null?void 0:F.length)>0&&(0,f.jsx)(o.S,{extra:(0,f.jsxs)("div",{children:[(0,f.jsx)(C.FormattedMessage,{id:"pages.searchTable.chosen",defaultMessage:"\u5DF2\u9009\u62E9"}),(0,f.jsx)("a",{style:{fontWeight:600},children:F.length}),(0,f.jsx)(C.FormattedMessage,{id:"pages.searchTable.item",defaultMessage:"\u9879"})]}),children:(0,f.jsx)(D.ZP,{danger:!0,hidden:!te.hasPerms("system:menu:del"),onClick:c()(t()().mark(function $(){return t()().wrap(function(L){for(;;)switch(L.prev=L.next){case 0:x.Z.confirm({title:"\u5220\u9664",content:"\u786E\u5B9A\u5220\u9664\u8BE5\u9879\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var M=c()(t()().mark(function j(){var N,V,U;return t()().wrap(function(w){for(;;)switch(w.prev=w.next){case 0:return w.next=2,z(F);case 2:N=w.sent,N&&(J([]),(V=r.current)===null||V===void 0||(U=V.reloadAndRest)===null||U===void 0||U.call(V));case 4:case"end":return w.stop()}},j)}));function q(){return M.apply(this,arguments)}return q}()});case 1:case"end":return L.stop()}},$)})),children:(0,f.jsx)(C.FormattedMessage,{id:"pages.searchTable.batchDeletion",defaultMessage:"\u6279\u91CF\u5220\u9664"})},"remove")}),(0,f.jsx)(I.default,{onSubmit:function(){var $=c()(t()().mark(function Z(L){var M;return t()().wrap(function(j){for(;;)switch(j.prev=j.next){case 0:if(M=!1,!L.menuId){j.next=7;break}return j.next=4,R(T()({},L));case 4:M=j.sent,j.next=10;break;case 7:return j.next=9,b(T()({},L));case 9:M=j.sent;case 10:M&&(s(!1),G(void 0),r.current&&r.current.reload());case 11:case"end":return j.stop()}},Z)}));return function(Z){return $.apply(this,arguments)}}(),onCancel:function(){s(!1),G(void 0)},open:m,values:ee||{},visibleOptions:pe,statusOptions:H,menuTree:Y})]})};B.default=k},92982:function(ne,B,n){n.d(B,{Hr:function(){return A},QK:function(){return oe},Vd:function(){return D},a7:function(){return h},jK:function(){return C},n2:function(){return le},oH:function(){return u},pX:function(){return x},sF:function(){return I}});var E=n(15009),i=n.n(E),K=n(97857),t=n.n(K),S=n(99289),T=n.n(S),g=n(76772),c=n(33867),P=n(30964);function C(b){return l.apply(this,arguments)}function l(){return l=T()(i()().mark(function b(R){return i()().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:return p.abrupt("return",(0,g.request)("/api/system/dict/type/list",{params:t()({},R),method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return p.stop()}},b)})),l.apply(this,arguments)}function D(b){return(0,g.request)("/api/system/dict/type/".concat(b),{method:"GET"})}function x(b,R){return d.apply(this,arguments)}function d(){return d=T()(i()().mark(function b(R,z){var p,k;return i()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,g.request)("/api/system/dict/data/type/".concat(R),{method:"GET"});case 2:if(p=e.sent,p.code!==c.iK.SUCCESS){e.next=9;break}return k={},p.data.forEach(function(a){k[a.dictValue]={text:a.dictLabel,label:a.dictLabel,value:z?Number(a.dictValue):a.dictValue,key:a.dictCode,listClass:a.listClass,status:a.listClass}}),e.abrupt("return",k);case 9:return e.abrupt("return",{});case 10:case"end":return e.stop()}},b)})),d.apply(this,arguments)}function A(b,R){return o.apply(this,arguments)}function o(){return o=T()(i()().mark(function b(R,z){var p,k;return i()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,g.request)("/api/system/dict/data/type/".concat(R),{method:"GET"});case 2:if(p=e.sent,p.code!==200){e.next=6;break}return k=p.data.map(function(a){return{text:a.dictLabel,label:a.dictLabel,value:z?Number(a.dictValue):a.dictValue,key:a.dictCode,listClass:a.listClass,status:a.listClass}}),e.abrupt("return",k);case 6:return e.abrupt("return",[]);case 7:case"end":return e.stop()}},b)})),o.apply(this,arguments)}function u(b){return _.apply(this,arguments)}function _(){return _=T()(i()().mark(function b(R){return i()().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:return p.abrupt("return",(0,g.request)("/api/system/dict/type",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},data:R}));case 1:case"end":return p.stop()}},b)})),_.apply(this,arguments)}function h(b){return O.apply(this,arguments)}function O(){return O=T()(i()().mark(function b(R){return i()().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:return p.abrupt("return",(0,g.request)("/api/system/dict/type",{method:"PUT",headers:{"Content-Type":"application/json;charset=UTF-8"},data:R}));case 1:case"end":return p.stop()}},b)})),O.apply(this,arguments)}function I(b){return v.apply(this,arguments)}function v(){return v=T()(i()().mark(function b(R){return i()().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:return p.abrupt("return",(0,g.request)("/api/system/dict/type/".concat(R),{method:"DELETE"}));case 1:case"end":return p.stop()}},b)})),v.apply(this,arguments)}function le(b){return(0,P.su)("/api/system/dict/type/export",{params:b},"dict_type_".concat(new Date().getTime(),".xlsx"))}function oe(b){return f.apply(this,arguments)}function f(){return f=T()(i()().mark(function b(R){return i()().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:return p.abrupt("return",(0,g.request)("/api/system/dict/type/optionselect",{params:t()({},R),method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return p.stop()}},b)})),f.apply(this,arguments)}},52728:function(ne,B,n){n.d(B,{Af:function(){return c},Th:function(){return u},_8:function(){return x},bL:function(){return l},n_:function(){return A}});var E=n(15009),i=n.n(E),K=n(97857),t=n.n(K),S=n(99289),T=n.n(S),g=n(76772);function c(_,h){return P.apply(this,arguments)}function P(){return P=T()(i()().mark(function _(h,O){return i()().wrap(function(v){for(;;)switch(v.prev=v.next){case 0:return v.abrupt("return",(0,g.request)("/api/system/menu/list",t()({method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"},params:h},O||{})));case 1:case"end":return v.stop()}},_)})),P.apply(this,arguments)}function C(_,h){return request("/api/system/menu/".concat(_),_objectSpread({method:"GET"},h||{}))}function l(_,h){return D.apply(this,arguments)}function D(){return D=T()(i()().mark(function _(h,O){return i()().wrap(function(v){for(;;)switch(v.prev=v.next){case 0:return v.abrupt("return",(0,g.request)("/api/system/menu",t()({method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},data:h},O||{})));case 1:case"end":return v.stop()}},_)})),D.apply(this,arguments)}function x(_,h){return d.apply(this,arguments)}function d(){return d=T()(i()().mark(function _(h,O){return i()().wrap(function(v){for(;;)switch(v.prev=v.next){case 0:return v.abrupt("return",(0,g.request)("/api/system/menu",t()({method:"PUT",headers:{"Content-Type":"application/json;charset=UTF-8"},data:h},O||{})));case 1:case"end":return v.stop()}},_)})),d.apply(this,arguments)}function A(_,h){return o.apply(this,arguments)}function o(){return o=T()(i()().mark(function _(h,O){return i()().wrap(function(v){for(;;)switch(v.prev=v.next){case 0:return v.abrupt("return",(0,g.request)("/api/system/menu/".concat(h),t()({method:"DELETE"},O||{})));case 1:case"end":return v.stop()}},_)})),o.apply(this,arguments)}function u(){return(0,g.request)("/api/system/menu/treeselect",{method:"GET"})}},30964:function(ne,B,n){n.d(B,{p6:function(){return C},su:function(){return l}});var E=n(15009),i=n.n(E),K=n(97857),t=n.n(K),S=n(99289),T=n.n(S),g=n(76772),c={xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",zip:"application/zip"};function P(d,A){var o=document.createElement("a"),u=new Blob([d.data],{type:A}),_=new RegExp("filename=([^;]+\\.[^\\.;]+);*"),h=decodeURI(d.headers["content-disposition"]),O=_.exec(h),I=O?O[1]:"file";I=I.replace(/"/g,""),o.style.display="none",o.href=URL.createObjectURL(u),o.setAttribute("download",I),document.body.appendChild(o),o.click(),URL.revokeObjectURL(o.href),document.body.removeChild(o)}function C(d){(0,g.request)(d,{method:"GET",responseType:"blob",getResponse:!0}).then(function(A){P(A,c.zip)})}function l(d,A,o){return D.apply(this,arguments)}function D(){return D=T()(i()().mark(function d(A,o,u){return i()().wrap(function(h){for(;;)switch(h.prev=h.next){case 0:return h.abrupt("return",(0,g.request)(A,t()(t()({},o),{},{method:"POST",responseType:"blob"})).then(function(O){var I=document.createElement("a"),v=O;I.style.display="none",I.href=URL.createObjectURL(v),I.setAttribute("download",u),document.body.appendChild(I),I.click(),URL.revokeObjectURL(I.href),document.body.removeChild(I)}));case 1:case"end":return h.stop()}},d)})),D.apply(this,arguments)}function x(d){window.location.href="/api/common/download?fileName=".concat(encodeURI(d),"&delete=",!0)}},31981:function(ne,B,n){n.d(B,{C2:function(){return i},lt:function(){return t}});var E=n(87735);function i(S,T,g,c,P,C){var l={id:T||"id",name:g||"name",parentId:c||"parentId",parentName:P||"parentName",childrenList:C||"children"},D=[],x=[],d=[];S.forEach(function(o){var u=o,_=u[l.parentId];D[_]||(D[_]=[]),u.key=u[l.id],u.title=u[l.name],u.value=u[l.id],u[l.childrenList]=null,x[u[l.id]]=u,D[_].push(u)}),S.forEach(function(o){var u=o,_=u[l.parentId];x[_]||(u[l.parentName]="",d.push(u))});function A(o){var u=o;D[u[l.id]]&&(u[l.childrenList]||(u[l.childrenList]=[]),u[l.childrenList]=D[u[l.id]]),u[l.childrenList]&&u[l.childrenList].forEach(function(_){var h=_;h[l.parentName]=u[l.name],A(h)})}return d.forEach(function(o){A(o)}),d}var K=function(){return parse(window.location.href.split("?")[1])};function t(S){var T=S.map(function(g){var c={id:g.id,title:g.label,key:"".concat(g.id),value:g.id};return g.children&&(c.children=t(g.children)),c});return T}},66309:function(ne,B,n){n.d(B,{Z:function(){return X}});var E=n(67294),i=n(93967),K=n.n(i),t=n(98423),S=n(98787),T=n(69760),g=n(96159),c=n(45353),P=n(53124),C=n(11568),l=n(15063),D=n(14747),x=n(83262),d=n(83559);const A=e=>{const{paddingXXS:a,lineWidth:m,tagPaddingHorizontal:s,componentCls:r,calc:y}=e,W=y(s).sub(m).equal(),ee=y(a).sub(m).equal();return{[r]:Object.assign(Object.assign({},(0,D.Wf)(e)),{display:"inline-block",height:"auto",marginInlineEnd:e.marginXS,paddingInline:W,fontSize:e.tagFontSize,lineHeight:e.tagLineHeight,whiteSpace:"nowrap",background:e.defaultBg,border:`${(0,C.bf)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusSM,opacity:1,transition:`all ${e.motionDurationMid}`,textAlign:"start",position:"relative",[`&${r}-rtl`]:{direction:"rtl"},"&, a, a:hover":{color:e.defaultColor},[`${r}-close-icon`]:{marginInlineStart:ee,fontSize:e.tagIconSize,color:e.colorTextDescription,cursor:"pointer",transition:`all ${e.motionDurationMid}`,"&:hover":{color:e.colorTextHeading}},[`&${r}-has-color`]:{borderColor:"transparent",[`&, a, a:hover, ${e.iconCls}-close, ${e.iconCls}-close:hover`]:{color:e.colorTextLightSolid}},"&-checkable":{backgroundColor:"transparent",borderColor:"transparent",cursor:"pointer",[`&:not(${r}-checkable-checked):hover`]:{color:e.colorPrimary,backgroundColor:e.colorFillSecondary},"&:active, &-checked":{color:e.colorTextLightSolid},"&-checked":{backgroundColor:e.colorPrimary,"&:hover":{backgroundColor:e.colorPrimaryHover}},"&:active":{backgroundColor:e.colorPrimaryActive}},"&-hidden":{display:"none"},[`> ${e.iconCls} + span, > span + ${e.iconCls}`]:{marginInlineStart:W}}),[`${r}-borderless`]:{borderColor:"transparent",background:e.tagBorderlessBg}}},o=e=>{const{lineWidth:a,fontSizeIcon:m,calc:s}=e,r=e.fontSizeSM;return(0,x.IX)(e,{tagFontSize:r,tagLineHeight:(0,C.bf)(s(e.lineHeightSM).mul(r).equal()),tagIconSize:s(m).sub(s(a).mul(2)).equal(),tagPaddingHorizontal:8,tagBorderlessBg:e.defaultBg})},u=e=>({defaultBg:new l.t(e.colorFillQuaternary).onBackground(e.colorBgContainer).toHexString(),defaultColor:e.colorText});var _=(0,d.I$)("Tag",e=>{const a=o(e);return A(a)},u),h=function(e,a){var m={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&a.indexOf(s)<0&&(m[s]=e[s]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,s=Object.getOwnPropertySymbols(e);r<s.length;r++)a.indexOf(s[r])<0&&Object.prototype.propertyIsEnumerable.call(e,s[r])&&(m[s[r]]=e[s[r]]);return m},I=E.forwardRef((e,a)=>{const{prefixCls:m,style:s,className:r,checked:y,onChange:W,onClick:ee}=e,G=h(e,["prefixCls","style","className","checked","onChange","onClick"]),{getPrefixCls:re,tag:Q}=E.useContext(P.E_),F=ue=>{W==null||W(!y),ee==null||ee(ue)},J=re("tag",m),[ie,se,Y]=_(J),ce=K()(J,`${J}-checkable`,{[`${J}-checkable-checked`]:y},Q==null?void 0:Q.className,r,se,Y);return ie(E.createElement("span",Object.assign({},G,{ref:a,style:Object.assign(Object.assign({},s),Q==null?void 0:Q.style),className:ce,onClick:F})))}),v=n(98719);const le=e=>(0,v.Z)(e,(a,m)=>{let{textColor:s,lightBorderColor:r,lightColor:y,darkColor:W}=m;return{[`${e.componentCls}${e.componentCls}-${a}`]:{color:s,background:y,borderColor:r,"&-inverse":{color:e.colorTextLightSolid,background:W,borderColor:W},[`&${e.componentCls}-borderless`]:{borderColor:"transparent"}}}});var oe=(0,d.bk)(["Tag","preset"],e=>{const a=o(e);return le(a)},u);function f(e){return typeof e!="string"?e:e.charAt(0).toUpperCase()+e.slice(1)}const b=(e,a,m)=>{const s=f(m);return{[`${e.componentCls}${e.componentCls}-${a}`]:{color:e[`color${m}`],background:e[`color${s}Bg`],borderColor:e[`color${s}Border`],[`&${e.componentCls}-borderless`]:{borderColor:"transparent"}}}};var R=(0,d.bk)(["Tag","status"],e=>{const a=o(e);return[b(a,"success","Success"),b(a,"processing","Info"),b(a,"error","Error"),b(a,"warning","Warning")]},u),z=function(e,a){var m={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&a.indexOf(s)<0&&(m[s]=e[s]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,s=Object.getOwnPropertySymbols(e);r<s.length;r++)a.indexOf(s[r])<0&&Object.prototype.propertyIsEnumerable.call(e,s[r])&&(m[s[r]]=e[s[r]]);return m};const k=E.forwardRef((e,a)=>{const{prefixCls:m,className:s,rootClassName:r,style:y,children:W,icon:ee,color:G,onClose:re,bordered:Q=!0,visible:F}=e,J=z(e,["prefixCls","className","rootClassName","style","children","icon","color","onClose","bordered","visible"]),{getPrefixCls:ie,direction:se,tag:Y}=E.useContext(P.E_),[ce,ue]=E.useState(!0),me=(0,t.Z)(J,["closeIcon","closable"]);E.useEffect(()=>{F!==void 0&&ue(F)},[F]);const pe=(0,S.o2)(G),fe=(0,S.yT)(G),de=pe||fe,he=Object.assign(Object.assign({backgroundColor:G&&!de?G:void 0},Y==null?void 0:Y.style),y),H=ie("tag",m),[ge,te,be]=_(H),ve=K()(H,Y==null?void 0:Y.className,{[`${H}-${G}`]:de,[`${H}-has-color`]:G&&!de,[`${H}-hidden`]:!ce,[`${H}-rtl`]:se==="rtl",[`${H}-borderless`]:!Q},s,r,te,be),$=N=>{N.stopPropagation(),re==null||re(N),!N.defaultPrevented&&ue(!1)},[,Z]=(0,T.Z)((0,T.w)(e),(0,T.w)(Y),{closable:!1,closeIconRender:N=>{const V=E.createElement("span",{className:`${H}-close-icon`,onClick:$},N);return(0,g.wm)(N,V,U=>({onClick:ae=>{var w;(w=U==null?void 0:U.onClick)===null||w===void 0||w.call(U,ae),$(ae)},className:K()(U==null?void 0:U.className,`${H}-close-icon`)}))}}),L=typeof J.onClick=="function"||W&&W.type==="a",M=ee||null,q=M?E.createElement(E.Fragment,null,M,W&&E.createElement("span",null,W)):W,j=E.createElement("span",Object.assign({},me,{ref:a,className:ve,style:he}),q,Z,pe&&E.createElement(oe,{key:"preset",prefixCls:H}),fe&&E.createElement(R,{key:"status",prefixCls:H}));return ge(L?E.createElement(c.Z,{component:"Tag"},j):j)});k.CheckableTag=I;var X=k}}]);
