"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[1994],{98097:function(we,U,r){r.d(U,{vY:function(){return Ne}});var R=r(74902),M=r(55850),Y=r(15861),q=r(45987),s=r(1413),Se=r(97937),pe=r(63606),de=r(86548),O=r(952),_=r(43495),P=r(67294),f=r(48054),$=r(4393),ee=r(25378),be=r(96074),z=r(78957),e=r(85893),te=function(t){var a=t.padding;return(0,e.jsx)("div",{style:{padding:a||"0 24px"},children:(0,e.jsx)(be.Z,{style:{margin:0}})})},Q={xs:2,sm:2,md:4,lg:4,xl:6,xxl:6},C=function(t){var a=t.size,n=t.active,i=(0,P.useMemo)(function(){return{lg:!0,md:!0,sm:!1,xl:!1,xs:!1,xxl:!1}},[]),g=(0,ee.Z)()||i,o=Object.keys(g).filter(function(Z){return g[Z]===!0})[0]||"md",x=a===void 0?Q[o]||6:a,p=function(d){return d===0?0:x>2?42:16};return(0,e.jsx)($.Z,{bordered:!1,style:{marginBlockEnd:16},children:(0,e.jsx)("div",{style:{width:"100%",justifyContent:"space-between",display:"flex"},children:new Array(x).fill(null).map(function(Z,d){return(0,e.jsxs)("div",{style:{borderInlineStart:x>2&&d===1?"1px solid rgba(0,0,0,0.06)":void 0,paddingInlineStart:p(d),flex:1,marginInlineEnd:d===0?16:0},children:[(0,e.jsx)(f.Z,{active:n,paragraph:!1,title:{width:100,style:{marginBlockStart:0}}}),(0,e.jsx)(f.Z.Button,{active:n,style:{height:48}})]},d)})})})},H=function(t){var a=t.active;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)($.Z,{bordered:!1,style:{borderRadius:0},styles:{body:{padding:24}},children:(0,e.jsxs)("div",{style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,e.jsx)("div",{style:{maxWidth:"100%",flex:1},children:(0,e.jsx)(f.Z,{active:a,title:{width:100,style:{marginBlockStart:0}},paragraph:{rows:1,style:{margin:0}}})}),(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:165,marginBlockStart:12}})]})}),(0,e.jsx)(te,{})]})},ae=function(t){var a=t.size,n=t.active,i=n===void 0?!0:n,g=t.actionButton;return(0,e.jsxs)($.Z,{bordered:!1,styles:{body:{padding:0}},children:[new Array(a).fill(null).map(function(o,x){return(0,e.jsx)(H,{active:!!i},x)}),g!==!1&&(0,e.jsx)($.Z,{bordered:!1,style:{borderStartEndRadius:0,borderTopLeftRadius:0},styles:{body:{display:"flex",alignItems:"center",justifyContent:"center"}},children:(0,e.jsx)(f.Z.Button,{style:{width:102},active:i,size:"small"})})]})},G=function(t){var a=t.active;return(0,e.jsxs)("div",{style:{marginBlockEnd:16},children:[(0,e.jsx)(f.Z,{paragraph:!1,title:{width:185}}),(0,e.jsx)(f.Z.Button,{active:a,size:"small"})]})},ue=function(t){var a=t.active;return(0,e.jsx)($.Z,{bordered:!1,style:{borderBottomRightRadius:0,borderBottomLeftRadius:0},styles:{body:{paddingBlockEnd:8}},children:(0,e.jsxs)(z.Z,{style:{width:"100%",justifyContent:"space-between"},children:[(0,e.jsx)(f.Z.Button,{active:a,style:{width:200},size:"small"}),(0,e.jsxs)(z.Z,{children:[(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:120}}),(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:80}})]})]})})},Ce=function(t){var a=t.active,n=a===void 0?!0:a,i=t.statistic,g=t.actionButton,o=t.toolbar,x=t.pageHeader,p=t.list,Z=p===void 0?5:p;return(0,e.jsxs)("div",{style:{width:"100%"},children:[x!==!1&&(0,e.jsx)(G,{active:n}),i!==!1&&(0,e.jsx)(C,{size:i,active:n}),(o!==!1||Z!==!1)&&(0,e.jsxs)($.Z,{bordered:!1,styles:{body:{padding:0}},children:[o!==!1&&(0,e.jsx)(ue,{active:n}),Z!==!1&&(0,e.jsx)(ae,{size:Z,active:n,actionButton:g})]})]})},Te=Ce,ne={xs:1,sm:2,md:3,lg:3,xl:3,xxl:4},Ee=function(t){var a=t.active;return(0,e.jsxs)("div",{style:{marginBlockStart:32},children:[(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:100,marginBlockEnd:16}}),(0,e.jsxs)("div",{style:{width:"100%",justifyContent:"space-between",display:"flex"},children:[(0,e.jsxs)("div",{style:{flex:1,marginInlineEnd:24,maxWidth:300},children:[(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:0}}}),(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:8}}}),(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:8}}})]}),(0,e.jsx)("div",{style:{flex:1,alignItems:"center",justifyContent:"center"},children:(0,e.jsxs)("div",{style:{maxWidth:300,margin:"auto"},children:[(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:0}}}),(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:8}}})]})})]})]})},ce=function(t){var a=t.size,n=t.active,i=(0,P.useMemo)(function(){return{lg:!0,md:!0,sm:!1,xl:!1,xs:!1,xxl:!1}},[]),g=(0,ee.Z)()||i,o=Object.keys(g).filter(function(p){return g[p]===!0})[0]||"md",x=a===void 0?ne[o]||3:a;return(0,e.jsx)("div",{style:{width:"100%",justifyContent:"space-between",display:"flex"},children:new Array(x).fill(null).map(function(p,Z){return(0,e.jsxs)("div",{style:{flex:1,paddingInlineStart:Z===0?0:24,paddingInlineEnd:Z===x-1?0:24},children:[(0,e.jsx)(f.Z,{active:n,paragraph:!1,title:{style:{marginBlockStart:0}}}),(0,e.jsx)(f.Z,{active:n,paragraph:!1,title:{style:{marginBlockStart:8}}}),(0,e.jsx)(f.Z,{active:n,paragraph:!1,title:{style:{marginBlockStart:8}}})]},Z)})})},ve=function(t){var a=t.active,n=t.header,i=n===void 0?!1:n,g=(0,P.useMemo)(function(){return{lg:!0,md:!0,sm:!1,xl:!1,xs:!1,xxl:!1}},[]),o=(0,ee.Z)()||g,x=Object.keys(o).filter(function(Z){return o[Z]===!0})[0]||"md",p=ne[x]||3;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{style:{display:"flex",background:i?"rgba(0,0,0,0.02)":"none",padding:"24px 8px"},children:[new Array(p).fill(null).map(function(Z,d){return(0,e.jsx)("div",{style:{flex:1,paddingInlineStart:i&&d===0?0:20,paddingInlineEnd:32},children:(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{margin:0,height:24,width:i?"75px":"100%"}}})},d)}),(0,e.jsx)("div",{style:{flex:3,paddingInlineStart:32},children:(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{margin:0,height:24,width:i?"75px":"100%"}}})})]}),(0,e.jsx)(te,{padding:"0px 0px"})]})},re=function(t){var a=t.active,n=t.size,i=n===void 0?4:n;return(0,e.jsxs)($.Z,{bordered:!1,children:[(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:100,marginBlockEnd:16}}),(0,e.jsx)(ve,{header:!0,active:a}),new Array(i).fill(null).map(function(g,o){return(0,e.jsx)(ve,{active:a},o)}),(0,e.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",paddingBlockStart:16},children:(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{margin:0,height:32,float:"right",maxWidth:"630px"}}})})]})},Ie=function(t){var a=t.active;return(0,e.jsxs)($.Z,{bordered:!1,style:{borderStartEndRadius:0,borderTopLeftRadius:0},children:[(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:100,marginBlockEnd:16}}),(0,e.jsx)(ce,{active:a}),(0,e.jsx)(Ee,{active:a})]})},A=function(t){var a=t.active,n=a===void 0?!0:a,i=t.pageHeader,g=t.list;return(0,e.jsxs)("div",{style:{width:"100%"},children:[i!==!1&&(0,e.jsx)(G,{active:n}),(0,e.jsx)(Ie,{active:n}),g!==!1&&(0,e.jsx)(te,{}),g!==!1&&(0,e.jsx)(re,{active:n,size:g})]})},fe=A,De=function(t){var a=t.active,n=a===void 0?!0:a,i=t.pageHeader;return(0,e.jsxs)("div",{style:{width:"100%"},children:[i!==!1&&(0,e.jsx)(G,{active:n}),(0,e.jsx)($.Z,{children:(0,e.jsxs)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",flexDirection:"column",padding:128},children:[(0,e.jsx)(f.Z.Avatar,{size:64,style:{marginBlockEnd:32}}),(0,e.jsx)(f.Z.Button,{active:n,style:{width:214,marginBlockEnd:8}}),(0,e.jsx)(f.Z.Button,{active:n,style:{width:328},size:"small"}),(0,e.jsxs)(z.Z,{style:{marginBlockStart:24},children:[(0,e.jsx)(f.Z.Button,{active:n,style:{width:116}}),(0,e.jsx)(f.Z.Button,{active:n,style:{width:116}})]})]})})]})},le=De,I=["type"],me=function(t){var a=t.type,n=a===void 0?"list":a,i=(0,q.Z)(t,I);return n==="result"?(0,e.jsx)(le,(0,s.Z)({},i)):n==="descriptions"?(0,e.jsx)(fe,(0,s.Z)({},i)):(0,e.jsx)(Te,(0,s.Z)({},i))},ge=me,ie=r(2026),xe=r(90081),se=r(1977),Be=r(77398),X=r(12795),Pe=r(53914),J=r(97685),He=r(10915),Le=r(2453),We=r(56790),ke=r(21770),ye=r(86671),Ke=function(t){return(Le.ZP.warn||Le.ZP.warning)(t)};function Oe(l){var t=l.data,a=l.row;return(0,s.Z)((0,s.Z)({},t),a)}function Xe(l){var t=(0,P.useRef)(null),a=l.type||"single",n=(0,He.YB)(),i=(0,ke.Z)([],{value:l.editableKeys,onChange:l.onChange?function(m){var y;l==null||(y=l.onChange)===null||y===void 0||y.call(l,m,l.dataSource)}:void 0}),g=(0,J.Z)(i,2),o=g[0],x=g[1],p=(0,P.useMemo)(function(){var m=a==="single"?o==null?void 0:o.slice(0,1):o;return new Set(m)},[(o||[]).join(","),a]),Z=(0,P.useCallback)(function(m){return!!(o!=null&&o.includes((0,ye.sN)(m)))},[(o||[]).join(",")]),d=function(y,b){var v;return p.size>0&&a==="single"?(Ke(l.onlyOneLineEditorAlertMessage||n.getMessage("editableTable.onlyOneLineEditor","\u53EA\u80FD\u540C\u65F6\u7F16\u8F91\u4E00\u884C")),!1):(t.current=(v=b!=null?b:(0,We.U2)(l.dataSource,Array.isArray(y)?y:[y]))!==null&&v!==void 0?v:null,p.add((0,ye.sN)(y)),x(Array.from(p)),!0)},T=function(y){return p.delete((0,ye.sN)(y)),x(Array.from(p)),!0},F=function(){var m=(0,Y.Z)((0,M.Z)().mark(function y(b,v,w,L){var B,c;return(0,M.Z)().wrap(function(h){for(;;)switch(h.prev=h.next){case 0:return h.next=2,l==null||(B=l.onCancel)===null||B===void 0?void 0:B.call(l,b,v,w,L);case 2:if(c=h.sent,c!==!1){h.next=5;break}return h.abrupt("return",!1);case 5:return h.abrupt("return",!0);case 6:case"end":return h.stop()}},y)}));return function(b,v,w,L){return m.apply(this,arguments)}}(),D=function(){var m=(0,Y.Z)((0,M.Z)().mark(function y(b,v,w){var L,B,c;return(0,M.Z)().wrap(function(h){for(;;)switch(h.prev=h.next){case 0:return h.next=2,l==null||(L=l.onSave)===null||L===void 0?void 0:L.call(l,b,v,w);case 2:if(B=h.sent,B!==!1){h.next=5;break}return h.abrupt("return",!1);case 5:return h.next=7,T(b);case 7:return c={data:l.dataSource,row:v,key:b,childrenColumnName:l.childrenColumnName||"children"},l.setDataSource(Oe(c)),h.abrupt("return",!0);case 10:case"end":return h.stop()}},y)}));return function(b,v,w){return m.apply(this,arguments)}}(),W=n.getMessage("editableTable.action.save","\u4FDD\u5B58"),E=n.getMessage("editableTable.action.delete","\u5220\u9664"),k=n.getMessage("editableTable.action.cancel","\u53D6\u6D88"),N=(0,P.useCallback)(function(m,y){var b=(0,s.Z)({recordKey:m,cancelEditable:T,onCancel:F,onSave:D,editableKeys:o,setEditableRowKeys:x,saveText:W,cancelText:k,preEditRowRef:t,deleteText:E,deletePopconfirmMessage:"".concat(n.getMessage("deleteThisLine","\u5220\u9664\u6B64\u9879"),"?"),editorType:"Map"},y),v=(0,ye.aX)(l.dataSource,b);return l.actionRender?l.actionRender(l.dataSource,b,{save:v.save,delete:v.delete,cancel:v.cancel}):[v.save,v.delete,v.cancel]},[o&&o.join(","),l.dataSource]);return{editableKeys:o,setEditableRowKeys:x,isEditable:Z,actionRender:N,startEditable:d,cancelEditable:T}}var Ge=r(78164),Me=r(67159),Re=r(26412),Ve=r(21532),Qe=r(50344),Ye=r(88306),Je=function(t,a){var n=a||{},i=n.onRequestError,g=n.effects,o=n.manual,x=n.dataSource,p=n.defaultDataSource,Z=n.onDataSourceChange,d=(0,ke.Z)(p,{value:x,onChange:Z}),T=(0,J.Z)(d,2),F=T[0],D=T[1],W=(0,ke.Z)(a==null?void 0:a.loading,{value:a==null?void 0:a.loading,onChange:a==null?void 0:a.onLoadingChange}),E=(0,J.Z)(W,2),k=E[0],N=E[1],m=function(v){D(v),N(!1)},y=function(){var b=(0,Y.Z)((0,M.Z)().mark(function v(){var w,L,B;return(0,M.Z)().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:if(!k){u.next=2;break}return u.abrupt("return");case 2:return N(!0),u.prev=3,u.next=6,t();case 6:if(u.t0=u.sent,u.t0){u.next=9;break}u.t0={};case 9:w=u.t0,L=w.data,B=w.success,B!==!1&&m(L),u.next=23;break;case 15:if(u.prev=15,u.t1=u.catch(3),i!==void 0){u.next=21;break}throw new Error(u.t1);case 21:i(u.t1);case 22:N(!1);case 23:return u.prev=23,N(!1),u.finish(23);case 26:case"end":return u.stop()}},v,null,[[3,15,23,26]])}));return function(){return b.apply(this,arguments)}}();return(0,P.useEffect)(function(){o||y()},[].concat((0,R.Z)(g||[]),[o])),{dataSource:F,setDataSource:D,loading:k,reload:function(){return y()}}},Ue=Je,ze=r(64847),qe=["valueEnum","render","renderText","mode","plain","dataIndex","request","params","editable"],_e=["request","columns","params","dataSource","onDataSourceChange","formProps","editable","loading","onLoadingChange","actionRef","onRequestError","emptyText","contentStyle"],et=function(t,a){var n=t.dataIndex;if(n){var i=Array.isArray(n)?(0,Ye.Z)(a,n):a[n];if(i!==void 0||i!==null)return i}return t.children},$e=function(t){var a,n=t.valueEnum,i=t.action,g=t.index,o=t.text,x=t.entity,p=t.mode,Z=t.render,d=t.editableUtils,T=t.valueType,F=t.plain,D=t.dataIndex,W=t.request,E=t.renderFormItem,k=t.params,N=t.emptyText,m=O.ZP.useFormInstance(),y=(a=ze.Ow.useToken)===null||a===void 0?void 0:a.call(ze.Ow),b=y.token,v={text:o,valueEnum:n,mode:p||"read",proFieldProps:{emptyText:N,render:Z?function(B){return Z==null?void 0:Z(B,x,g,i,(0,s.Z)((0,s.Z)({},t),{},{type:"descriptions"}))}:void 0},ignoreFormItem:!0,valueType:T,request:W,params:k,plain:F};if(p==="read"||!p||T==="option"){var w=(0,ie.w)(t.fieldProps,void 0,(0,s.Z)((0,s.Z)({},t),{},{rowKey:D,isEditable:!1}));return(0,e.jsx)(_.Z,(0,s.Z)((0,s.Z)({name:D},v),{},{fieldProps:w}))}var L=function(){var c,u=(0,ie.w)(t.formItemProps,m,(0,s.Z)((0,s.Z)({},t),{},{rowKey:D,isEditable:!0})),h=(0,ie.w)(t.fieldProps,m,(0,s.Z)((0,s.Z)({},t),{},{rowKey:D,isEditable:!0}));return(0,e.jsxs)("div",{style:{display:"flex",gap:b.marginXS,alignItems:"baseline"},children:[(0,e.jsx)(xe.U,(0,s.Z)((0,s.Z)({name:D},u),{},{style:(0,s.Z)({margin:0},(u==null?void 0:u.style)||{}),initialValue:o||(u==null?void 0:u.initialValue),children:(0,e.jsx)(_.Z,(0,s.Z)((0,s.Z)({},v),{},{proFieldProps:(0,s.Z)({},v.proFieldProps),renderFormItem:E?function(){return E==null?void 0:E((0,s.Z)((0,s.Z)({},t),{},{type:"descriptions"}),{isEditable:!0,recordKey:D,record:m.getFieldValue([D].flat(1)),defaultRender:function(){return(0,e.jsx)(_.Z,(0,s.Z)((0,s.Z)({},v),{},{fieldProps:h}))},type:"descriptions"},m)}:void 0,fieldProps:h}))})),(0,e.jsx)("div",{style:{display:"flex",maxHeight:b.controlHeight,alignItems:"center",gap:b.marginXS},children:d==null||(c=d.actionRender)===null||c===void 0?void 0:c.call(d,D||g,{cancelText:(0,e.jsx)(Se.Z,{}),saveText:(0,e.jsx)(pe.Z,{}),deleteText:!1})})]})};return(0,e.jsx)("div",{style:{marginTop:-5,marginBottom:-5,marginLeft:0,marginRight:0},children:L()})},tt=function(t,a,n,i,g){var o,x=[],p=(0,se.n)(Me.Z,"5.8.0")>=0,Z=t==null||(o=t.map)===null||o===void 0?void 0:o.call(t,function(d,T){var F,D,W;if(P.isValidElement(d))return p?{children:d}:d;var E=d,k=E.valueEnum,N=E.render,m=E.renderText,y=E.mode,b=E.plain,v=E.dataIndex,w=E.request,L=E.params,B=E.editable,c=(0,q.Z)(E,qe),u=(F=et(d,a))!==null&&F!==void 0?F:c.children,h=m?m(u,a,T,n):u,V=typeof c.title=="function"?c.title(d,"descriptions",null):c.title,K=typeof c.valueType=="function"?c.valueType(a||{},"descriptions"):c.valueType,j=i==null?void 0:i.isEditable(v||T),S=y||j?"edit":"read",oe=i&&S==="read"&&B!==!1&&(B==null?void 0:B(h,a,T))!==!1,he=oe?z.Z:P.Fragment,Ze=S==="edit"?h:(0,Be.X)(h,d,h),je=p&&K!=="option"?(0,s.Z)((0,s.Z)({},c),{},{key:c.key||((D=c.label)===null||D===void 0?void 0:D.toString())||T,label:(V||c.label||c.tooltip)&&(0,e.jsx)(X.G,{label:V||c.label,tooltip:c.tooltip,ellipsis:d.ellipsis}),children:(0,e.jsxs)(he,{children:[(0,P.createElement)($e,(0,s.Z)((0,s.Z)({},d),{},{key:d==null?void 0:d.key,dataIndex:d.dataIndex||T,mode:S,text:Ze,valueType:K,entity:a,index:T,emptyText:g,action:n,editableUtils:i})),oe&&(0,e.jsx)(de.Z,{onClick:function(){i==null||i.startEditable(v||T)}})]})}):(0,P.createElement)(Re.Z.Item,(0,s.Z)((0,s.Z)({},c),{},{key:c.key||((W=c.label)===null||W===void 0?void 0:W.toString())||T,label:(V||c.label||c.tooltip)&&(0,e.jsx)(X.G,{label:V||c.label,tooltip:c.tooltip,ellipsis:d.ellipsis})}),(0,e.jsxs)(he,{children:[(0,e.jsx)($e,(0,s.Z)((0,s.Z)({},d),{},{dataIndex:d.dataIndex||T,mode:S,text:Ze,valueType:K,entity:a,index:T,action:n,editableUtils:i})),oe&&K!=="option"&&(0,e.jsx)(de.Z,{onClick:function(){i==null||i.startEditable(v||T)}})]}));return K==="option"?(x.push(je),null):je}).filter(function(d){return d});return{options:x!=null&&x.length?x:null,children:Z}},Ae=function(t){return(0,e.jsx)(Re.Z.Item,(0,s.Z)((0,s.Z)({},t),{},{children:t.children}))};Ae.displayName="ProDescriptionsItem";var at=function(t){return t.children},Ne=function(t){var a,n=t.request,i=t.columns,g=t.params,o=t.dataSource,x=t.onDataSourceChange,p=t.formProps,Z=t.editable,d=t.loading,T=t.onLoadingChange,F=t.actionRef,D=t.onRequestError,W=t.emptyText,E=t.contentStyle,k=(0,q.Z)(t,_e),N=(0,P.useContext)(Ve.ZP.ConfigContext),m=Ue((0,Y.Z)((0,M.Z)().mark(function V(){var K;return(0,M.Z)().wrap(function(S){for(;;)switch(S.prev=S.next){case 0:if(!n){S.next=6;break}return S.next=3,n(g||{});case 3:S.t0=S.sent,S.next=7;break;case 6:S.t0={data:{}};case 7:return K=S.t0,S.abrupt("return",K);case 9:case"end":return S.stop()}},V)})),{onRequestError:D,effects:[(0,Pe.ZP)(g)],manual:!n,dataSource:o,loading:d,onLoadingChange:T,onDataSourceChange:x}),y=Xe((0,s.Z)((0,s.Z)({},t.editable),{},{childrenColumnName:void 0,dataSource:m.dataSource,setDataSource:m.setDataSource}));if((0,P.useEffect)(function(){F&&(F.current=(0,s.Z)({reload:m.reload},y))},[m,F,y]),m.loading||m.loading===void 0&&n)return(0,e.jsx)(ge,{type:"descriptions",list:!1,pageHeader:!1});var b=function(){var K=(0,Qe.Z)(t.children).filter(Boolean).map(function(j){if(!P.isValidElement(j))return j;var S=j==null?void 0:j.props,oe=S.valueEnum,he=S.valueType,Ze=S.dataIndex,je=S.ellipsis,Fe=S.copyable,nt=S.request;return!he&&!oe&&!Ze&&!nt&&!je&&!Fe&&j.type.displayName!=="ProDescriptionsItem"?j:(0,s.Z)((0,s.Z)({},j==null?void 0:j.props),{},{entity:o})});return[].concat((0,R.Z)(i||[]),(0,R.Z)(K)).filter(function(j){return!j||j!=null&&j.valueType&&["index","indexBorder"].includes(j==null?void 0:j.valueType)?!1:!(j!=null&&j.hideInDescriptions)}).sort(function(j,S){return S.order||j.order?(S.order||0)-(j.order||0):(S.index||0)-(j.index||0)})},v=tt(b(),m.dataSource||{},(F==null?void 0:F.current)||m,Z?y:void 0,t.emptyText),w=v.options,L=v.children,B=Z?O.ZP:at,c=null;(k.title||k.tooltip||k.tip)&&(c=(0,e.jsx)(X.G,{label:k.title,tooltip:k.tooltip||k.tip}));var u=N.getPrefixCls("pro-descriptions"),h=(0,se.n)(Me.Z,"5.8.0")>=0;return(0,e.jsx)(Ge.S,{children:(0,e.jsx)(B,(0,s.Z)((0,s.Z)({form:(a=t.editable)===null||a===void 0?void 0:a.form,component:!1,submitter:!1},p),{},{onFinish:void 0,children:(0,e.jsx)(Re.Z,(0,s.Z)((0,s.Z)({className:u},k),{},{contentStyle:(0,s.Z)({minWidth:0},E||{}),extra:k.extra?(0,e.jsxs)(z.Z,{children:[w,k.extra]}):w,title:c,items:h?L:void 0,children:h?null:L}))}),"form")})};Ne.Item=Ae;var rt=null},2236:function(we,U,r){r.d(U,{S:function(){return te}});var R=r(1413),M=r(4942),Y=r(45987),q=r(12044),s=r(21532),Se=r(93967),pe=r.n(Se),de=r(98423),O=r(67294),_=r(73935),P=r(76509),f=r(64847),$=function(C){return(0,M.Z)({},C.componentCls,{position:"fixed",insetInlineEnd:0,bottom:0,zIndex:99,display:"flex",alignItems:"center",width:"100%",paddingInline:24,paddingBlock:0,boxSizing:"border-box",lineHeight:"64px",backgroundColor:(0,f.uK)(C.colorBgElevated,.6),borderBlockStart:"1px solid ".concat(C.colorSplit),"-webkit-backdrop-filter":"blur(8px)",backdropFilter:"blur(8px)",color:C.colorText,transition:"all 0.2s ease 0s","&-left":{flex:1,color:C.colorText},"&-right":{color:C.colorText,"> *":{marginInlineEnd:8,"&:last-child":{marginBlock:0,marginInline:0}}}})};function ee(Q){return(0,f.Xj)("ProLayoutFooterToolbar",function(C){var H=(0,R.Z)((0,R.Z)({},C),{},{componentCls:".".concat(Q)});return[$(H)]})}function be(Q,C){var H=C.stylish;return(0,f.Xj)("ProLayoutFooterToolbarStylish",function(ae){var G=(0,R.Z)((0,R.Z)({},ae),{},{componentCls:".".concat(Q)});return H?[(0,M.Z)({},"".concat(G.componentCls),H==null?void 0:H(G))]:[]})}var z=r(85893),e=["children","className","extra","portalDom","style","renderContent"],te=function(C){var H=C.children,ae=C.className,G=C.extra,ue=C.portalDom,Ce=ue===void 0?!0:ue,Te=C.style,ne=C.renderContent,Ee=(0,Y.Z)(C,e),ce=(0,O.useContext)(s.ZP.ConfigContext),ve=ce.getPrefixCls,re=ce.getTargetContainer,Ie=C.prefixCls||ve("pro"),A="".concat(Ie,"-footer-bar"),fe=ee(A),De=fe.wrapSSR,le=fe.hashId,I=(0,O.useContext)(P.X),me=(0,O.useMemo)(function(){var X=I.hasSiderMenu,Pe=I.isMobile,J=I.siderWidth;if(X)return J?Pe?"100%":"calc(100% - ".concat(J,"px)"):"100%"},[I.collapsed,I.hasSiderMenu,I.isMobile,I.siderWidth]),ge=(0,O.useMemo)(function(){return typeof window=="undefined"||typeof document=="undefined"?null:(re==null?void 0:re())||document.body},[]),ie=be("".concat(A,".").concat(A,"-stylish"),{stylish:C.stylish}),xe=(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)("div",{className:"".concat(A,"-left ").concat(le).trim(),children:G}),(0,z.jsx)("div",{className:"".concat(A,"-right ").concat(le).trim(),children:H})]});(0,O.useEffect)(function(){return!I||!(I!=null&&I.setHasFooterToolbar)?function(){}:(I==null||I.setHasFooterToolbar(!0),function(){var X;I==null||(X=I.setHasFooterToolbar)===null||X===void 0||X.call(I,!1)})},[]);var se=(0,z.jsx)("div",(0,R.Z)((0,R.Z)({className:pe()(ae,le,A,(0,M.Z)({},"".concat(A,"-stylish"),!!C.stylish)),style:(0,R.Z)({width:me},Te)},(0,de.Z)(Ee,["prefixCls"])),{},{children:ne?ne((0,R.Z)((0,R.Z)((0,R.Z)({},C),I),{},{leftWidth:me}),xe):xe})),Be=!(0,q.j)()||!Ce||!ge?se:(0,_.createPortal)(se,ge,A);return ie.wrapSSR(De((0,z.jsx)(O.Fragment,{children:Be},A)))}},76509:function(we,U,r){r.d(U,{X:function(){return M}});var R=r(67294),M=(0,R.createContext)({})}}]);
