(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[960],{60960:function(ce,M,i){"use strict";i.d(M,{Z:function(){return $t}});var o=i(67294),X=i(86548),te=i(93967),_=i.n(te),ye=i(48555),B=i(50344),v=i(8410),Z=i(21770),ne=i(98423),oe=i(42550),Y=i(79370),U=i(53124),x=i(10110),q=i(83062),ve=i(9957),D=i(15105),se=i(96159),Ue=i(2961),Pe=i(14747),ze=i(83559),Fe=i(84898),Ke=i(11568);const Ve=(e,n,s,t)=>{const{titleMarginBottom:l,fontWeightStrong:a}=t;return{marginBottom:l,color:s,fontWeight:a,fontSize:e,lineHeight:n}},Xe=e=>{const n=[1,2,3,4,5],s={};return n.forEach(t=>{s[`
      h${t}&,
      div&-h${t},
      div&-h${t} > textarea,
      h${t}
    `]=Ve(e[`fontSizeHeading${t}`],e[`lineHeightHeading${t}`],e.colorTextHeading,e)}),s},Je=e=>{const{componentCls:n}=e;return{"a&, a":Object.assign(Object.assign({},(0,Pe.Nd)(e)),{userSelect:"text",[`&[disabled], &${n}-disabled`]:{color:e.colorTextDisabled,cursor:"not-allowed","&:active, &:hover":{color:e.colorTextDisabled},"&:active":{pointerEvents:"none"}}})}},Ge=e=>({code:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.2em 0.1em",fontSize:"85%",fontFamily:e.fontFamilyCode,background:"rgba(150, 150, 150, 0.1)",border:"1px solid rgba(100, 100, 100, 0.2)",borderRadius:3},kbd:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.15em 0.1em",fontSize:"90%",fontFamily:e.fontFamilyCode,background:"rgba(150, 150, 150, 0.06)",border:"1px solid rgba(100, 100, 100, 0.2)",borderBottomWidth:2,borderRadius:3},mark:{padding:0,backgroundColor:Fe.gold[2]},"u, ins":{textDecoration:"underline",textDecorationSkipInk:"auto"},"s, del":{textDecoration:"line-through"},strong:{fontWeight:600},"ul, ol":{marginInline:0,marginBlock:"0 1em",padding:0,li:{marginInline:"20px 0",marginBlock:0,paddingInline:"4px 0",paddingBlock:0}},ul:{listStyleType:"circle",ul:{listStyleType:"disc"}},ol:{listStyleType:"decimal"},"pre, blockquote":{margin:"1em 0"},pre:{padding:"0.4em 0.6em",whiteSpace:"pre-wrap",wordWrap:"break-word",background:"rgba(150, 150, 150, 0.1)",border:"1px solid rgba(100, 100, 100, 0.2)",borderRadius:3,fontFamily:e.fontFamilyCode,code:{display:"inline",margin:0,padding:0,fontSize:"inherit",fontFamily:"inherit",background:"transparent",border:0}},blockquote:{paddingInline:"0.6em 0",paddingBlock:0,borderInlineStart:"4px solid rgba(100, 100, 100, 0.2)",opacity:.85}}),Qe=e=>{const{componentCls:n,paddingSM:s}=e,t=s;return{"&-edit-content":{position:"relative","div&":{insetInlineStart:e.calc(e.paddingSM).mul(-1).equal(),marginTop:e.calc(t).mul(-1).equal(),marginBottom:`calc(1em - ${(0,Ke.bf)(t)})`},[`${n}-edit-content-confirm`]:{position:"absolute",insetInlineEnd:e.calc(e.marginXS).add(2).equal(),insetBlockEnd:e.marginXS,color:e.colorTextDescription,fontWeight:"normal",fontSize:e.fontSize,fontStyle:"normal",pointerEvents:"none"},textarea:{margin:"0!important",MozTransition:"none",height:"1em"}}}},Ye=e=>({[`${e.componentCls}-copy-success`]:{"\n    &,\n    &:hover,\n    &:focus":{color:e.colorSuccess}},[`${e.componentCls}-copy-icon-only`]:{marginInlineStart:0}}),qe=()=>({"\n  a&-ellipsis,\n  span&-ellipsis\n  ":{display:"inline-block",maxWidth:"100%"},"&-ellipsis-single-line":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis","a&, span&":{verticalAlign:"bottom"},"> code":{paddingBlock:0,maxWidth:"calc(100% - 1.2em)",display:"inline-block",overflow:"hidden",textOverflow:"ellipsis",verticalAlign:"bottom",boxSizing:"content-box"}},"&-ellipsis-multiple-line":{display:"-webkit-box",overflow:"hidden",WebkitLineClamp:3,WebkitBoxOrient:"vertical"}}),_e=e=>{const{componentCls:n,titleMarginTop:s}=e;return{[n]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.colorText,wordBreak:"break-word",lineHeight:e.lineHeight,[`&${n}-secondary`]:{color:e.colorTextDescription},[`&${n}-success`]:{color:e.colorSuccess},[`&${n}-warning`]:{color:e.colorWarning},[`&${n}-danger`]:{color:e.colorError,"a&:active, a&:focus":{color:e.colorErrorActive},"a&:hover":{color:e.colorErrorHover}},[`&${n}-disabled`]:{color:e.colorTextDisabled,cursor:"not-allowed",userSelect:"none"},"\n        div&,\n        p\n      ":{marginBottom:"1em"}},Xe(e)),{[`
      & + h1${n},
      & + h2${n},
      & + h3${n},
      & + h4${n},
      & + h5${n}
      `]:{marginTop:s},"\n      div,\n      ul,\n      li,\n      p,\n      h1,\n      h2,\n      h3,\n      h4,\n      h5":{"\n        + h1,\n        + h2,\n        + h3,\n        + h4,\n        + h5\n        ":{marginTop:s}}}),Ge(e)),Je(e)),{[`
        ${n}-expand,
        ${n}-collapse,
        ${n}-edit,
        ${n}-copy
      `]:Object.assign(Object.assign({},(0,Pe.Nd)(e)),{marginInlineStart:e.marginXXS})}),Qe(e)),Ye(e)),qe()),{"&-rtl":{direction:"rtl"}})}},et=()=>({titleMarginTop:"1.2em",titleMarginBottom:"0.5em"});var Le=(0,ze.I$)("Typography",e=>[_e(e)],et),tt=e=>{const{prefixCls:n,"aria-label":s,className:t,style:l,direction:a,maxLength:y,autoSize:C=!0,value:d,onSave:u,onCancel:f,onEnd:g,component:p,enterIcon:O=o.createElement(ve.Z,null)}=e,P=o.useRef(null),T=o.useRef(!1),L=o.useRef(null),[m,A]=o.useState(d);o.useEffect(()=>{A(d)},[d]),o.useEffect(()=>{var b;if(!((b=P.current)===null||b===void 0)&&b.resizableTextArea){const{textArea:h}=P.current.resizableTextArea;h.focus();const{length:S}=h.value;h.setSelectionRange(S,S)}},[]);const J=b=>{let{target:h}=b;A(h.value.replace(/[\n\r]/g,""))},w=()=>{T.current=!0},j=()=>{T.current=!1},$=b=>{let{keyCode:h}=b;T.current||(L.current=h)},E=()=>{u(m.trim())},G=b=>{let{keyCode:h,ctrlKey:S,altKey:K,metaKey:I,shiftKey:k}=b;L.current!==h||T.current||S||K||I||k||(h===D.Z.ENTER?(E(),g==null||g()):h===D.Z.ESC&&f())},re=()=>{E()},[ee,z,ie]=Le(n),F=_()(n,`${n}-edit-content`,{[`${n}-rtl`]:a==="rtl",[`${n}-${p}`]:!!p},t,z,ie);return ee(o.createElement("div",{className:F,style:l},o.createElement(Ue.Z,{ref:P,maxLength:y,value:m,onChange:J,onKeyDown:$,onKeyUp:G,onCompositionStart:w,onCompositionEnd:j,onBlur:re,"aria-label":s,rows:1,autoSize:C}),O!==null?(0,se.Tm)(O,{className:`${n}-edit-content-confirm`}):null))},nt=i(20640),ot=i.n(nt),st=i(66680);function lt(e){return(arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1)&&e==null?[]:Array.isArray(e)?e:[e]}var rt=function(e,n,s,t){function l(a){return a instanceof s?a:new s(function(y){y(a)})}return new(s||(s=Promise))(function(a,y){function C(f){try{u(t.next(f))}catch(g){y(g)}}function d(f){try{u(t.throw(f))}catch(g){y(g)}}function u(f){f.done?a(f.value):l(f.value).then(C,d)}u((t=t.apply(e,n||[])).next())})},it=e=>{let{copyConfig:n,children:s}=e;const[t,l]=o.useState(!1),[a,y]=o.useState(!1),C=o.useRef(null),d=()=>{C.current&&clearTimeout(C.current)},u={};n.format&&(u.format=n.format),o.useEffect(()=>d,[]);const f=(0,st.Z)(g=>rt(void 0,void 0,void 0,function*(){var p;g==null||g.preventDefault(),g==null||g.stopPropagation(),y(!0);try{const O=typeof n.text=="function"?yield n.text():n.text;ot()(O||lt(s,!0).join("")||"",u),y(!1),l(!0),d(),C.current=setTimeout(()=>{l(!1)},3e3),(p=n.onCopy)===null||p===void 0||p.call(n,g)}catch(O){throw y(!1),O}}));return{copied:t,copyLoading:a,onClick:f}};function be(e,n){return o.useMemo(()=>{const s=!!e;return[s,Object.assign(Object.assign({},n),s&&typeof e=="object"?e:null)]},[e])}var at=e=>{const n=(0,o.useRef)(void 0);return(0,o.useEffect)(()=>{n.current=e}),n.current},ct=(e,n,s)=>(0,o.useMemo)(()=>e===!0?{title:n!=null?n:s}:(0,o.isValidElement)(e)?{title:e}:typeof e=="object"?Object.assign({title:n!=null?n:s},e):{title:e},[e,n,s]),dt=function(e,n){var s={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(s[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,t=Object.getOwnPropertySymbols(e);l<t.length;l++)n.indexOf(t[l])<0&&Object.prototype.propertyIsEnumerable.call(e,t[l])&&(s[t[l]]=e[t[l]]);return s},$e=o.forwardRef((e,n)=>{const{prefixCls:s,component:t="article",className:l,rootClassName:a,setContentRef:y,children:C,direction:d,style:u}=e,f=dt(e,["prefixCls","component","className","rootClassName","setContentRef","children","direction","style"]),{getPrefixCls:g,direction:p,className:O,style:P}=(0,U.dj)("typography"),T=d!=null?d:p,L=y?(0,oe.sQ)(n,y):n,m=g("typography",s),[A,J,w]=Le(m),j=_()(m,O,{[`${m}-rtl`]:T==="rtl"},l,a,J,w),$=Object.assign(Object.assign({},P),u);return A(o.createElement(t,Object.assign({className:j,style:$,ref:L},f),C))}),ut=i(63606),pt=i(57132),ft=i(50888);function Ne(e){return e===!1?[!1,!1]:Array.isArray(e)?e:[e]}function he(e,n,s){return e===!0||e===void 0?n:e||s&&n}function gt(e){const n=document.createElement("em");e.appendChild(n);const s=e.getBoundingClientRect(),t=n.getBoundingClientRect();return e.removeChild(n),s.left>t.left||t.right>s.right||s.top>t.top||t.bottom>s.bottom}const Ee=e=>["string","number"].includes(typeof e);var mt=e=>{let{prefixCls:n,copied:s,locale:t,iconOnly:l,tooltips:a,icon:y,tabIndex:C,onCopy:d,loading:u}=e;const f=Ne(a),g=Ne(y),{copied:p,copy:O}=t!=null?t:{},P=s?p:O,T=he(f[s?1:0],P),L=typeof T=="string"?T:P;return o.createElement(q.Z,{title:T},o.createElement("button",{type:"button",className:_()(`${n}-copy`,{[`${n}-copy-success`]:s,[`${n}-copy-icon-only`]:l}),onClick:d,"aria-label":L,tabIndex:C},s?he(g[1],o.createElement(ut.Z,null),!0):he(g[0],u?o.createElement(ft.Z,null):o.createElement(pt.Z,null),!0)))},yt=i(74902);const de=o.forwardRef((e,n)=>{let{style:s,children:t}=e;const l=o.useRef(null);return o.useImperativeHandle(n,()=>({isExceed:()=>{const a=l.current;return a.scrollHeight>a.clientHeight},getHeight:()=>l.current.clientHeight})),o.createElement("span",{"aria-hidden":!0,ref:l,style:Object.assign({position:"fixed",display:"block",left:0,top:0,pointerEvents:"none",backgroundColor:"rgba(255, 0, 0, 0.65)"},s)},t)}),vt=e=>e.reduce((n,s)=>n+(Ee(s)?String(s).length:1),0);function De(e,n){let s=0;const t=[];for(let l=0;l<e.length;l+=1){if(s===n)return t;const a=e[l],C=Ee(a)?String(a).length:1,d=s+C;if(d>n){const u=n-s;return t.push(String(a).slice(0,u)),t}t.push(a),s=d}return e}const xe=0,Ce=1,Se=2,Oe=3,Me=4,ue={display:"-webkit-box",overflow:"hidden",WebkitBoxOrient:"vertical"};function bt(e){const{enableMeasure:n,width:s,text:t,children:l,rows:a,expanded:y,miscDeps:C,onEllipsis:d}=e,u=o.useMemo(()=>(0,B.Z)(t),[t]),f=o.useMemo(()=>vt(u),[t]),g=o.useMemo(()=>l(u,!1),[t]),[p,O]=o.useState(null),P=o.useRef(null),T=o.useRef(null),L=o.useRef(null),m=o.useRef(null),A=o.useRef(null),[J,w]=o.useState(!1),[j,$]=o.useState(xe),[E,G]=o.useState(0),[re,ee]=o.useState(null);(0,v.Z)(()=>{$(n&&s&&f?Ce:xe)},[s,t,a,n,u]),(0,v.Z)(()=>{var b,h,S,K;if(j===Ce){$(Se);const I=T.current&&getComputedStyle(T.current).whiteSpace;ee(I)}else if(j===Se){const I=!!(!((b=L.current)===null||b===void 0)&&b.isExceed());$(I?Oe:Me),O(I?[0,f]:null),w(I);const k=((h=L.current)===null||h===void 0?void 0:h.getHeight())||0,Te=a===1?0:((S=m.current)===null||S===void 0?void 0:S.getHeight())||0,fe=((K=A.current)===null||K===void 0?void 0:K.getHeight())||0,we=Math.max(k,Te+fe);G(we+1),d(I)}},[j]);const z=p?Math.ceil((p[0]+p[1])/2):0;(0,v.Z)(()=>{var b;const[h,S]=p||[0,0];if(h!==S){const I=(((b=P.current)===null||b===void 0?void 0:b.getHeight())||0)>E;let k=z;S-h===1&&(k=I?h:S),O(I?[h,k]:[k,S])}},[p,z]);const ie=o.useMemo(()=>{if(!n)return l(u,!1);if(j!==Oe||!p||p[0]!==p[1]){const b=l(u,!1);return[Me,xe].includes(j)?b:o.createElement("span",{style:Object.assign(Object.assign({},ue),{WebkitLineClamp:a})},b)}return l(y?u:De(u,p[0]),J)},[y,j,p,u].concat((0,yt.Z)(C))),F={width:s,margin:0,padding:0,whiteSpace:re==="nowrap"?"normal":"inherit"};return o.createElement(o.Fragment,null,ie,j===Se&&o.createElement(o.Fragment,null,o.createElement(de,{style:Object.assign(Object.assign(Object.assign({},F),ue),{WebkitLineClamp:a}),ref:L},g),o.createElement(de,{style:Object.assign(Object.assign(Object.assign({},F),ue),{WebkitLineClamp:a-1}),ref:m},g),o.createElement(de,{style:Object.assign(Object.assign(Object.assign({},F),ue),{WebkitLineClamp:1}),ref:A},l([],!0))),j===Oe&&p&&p[0]!==p[1]&&o.createElement(de,{style:Object.assign(Object.assign({},F),{top:400}),ref:P},l(De(u,z),!0)),j===Ce&&o.createElement("span",{style:{whiteSpace:"inherit"},ref:T}))}var ht=e=>{let{enableEllipsis:n,isEllipsis:s,children:t,tooltipProps:l}=e;return!(l!=null&&l.title)||!n?t:o.createElement(q.Z,Object.assign({open:s?void 0:!1},l),t)},Et=function(e,n){var s={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(s[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,t=Object.getOwnPropertySymbols(e);l<t.length;l++)n.indexOf(t[l])<0&&Object.prototype.propertyIsEnumerable.call(e,t[l])&&(s[t[l]]=e[t[l]]);return s};function xt(e,n){let{mark:s,code:t,underline:l,delete:a,strong:y,keyboard:C,italic:d}=e,u=n;function f(g,p){p&&(u=o.createElement(g,{},u))}return f("strong",y),f("u",l),f("del",a),f("code",t),f("mark",s),f("kbd",C),f("i",d),u}const Ct="...";var pe=o.forwardRef((e,n)=>{var s;const{prefixCls:t,className:l,style:a,type:y,disabled:C,children:d,ellipsis:u,editable:f,copyable:g,component:p,title:O}=e,P=Et(e,["prefixCls","className","style","type","disabled","children","ellipsis","editable","copyable","component","title"]),{getPrefixCls:T,direction:L}=o.useContext(U.E_),[m]=(0,x.Z)("Text"),A=o.useRef(null),J=o.useRef(null),w=T("typography",t),j=(0,ne.Z)(P,["mark","code","delete","underline","strong","keyboard","italic"]),[$,E]=be(f),[G,re]=(0,Z.Z)(!1,{value:E.editing}),{triggerType:ee=["icon"]}=E,z=r=>{var c;r&&((c=E.onStart)===null||c===void 0||c.call(E)),re(r)},ie=at(G);(0,v.Z)(()=>{var r;!G&&ie&&((r=J.current)===null||r===void 0||r.focus())},[G]);const F=r=>{r==null||r.preventDefault(),z(!0)},b=r=>{var c;(c=E.onChange)===null||c===void 0||c.call(E,r),z(!1)},h=()=>{var r;(r=E.onCancel)===null||r===void 0||r.call(E),z(!1)},[S,K]=be(g),{copied:I,copyLoading:k,onClick:Te}=it({copyConfig:K,children:d}),[fe,we]=o.useState(!1),[Ae,Nt]=o.useState(!1),[Be,Dt]=o.useState(!1),[Ze,Mt]=o.useState(!1),[At,Bt]=o.useState(!0),[Q,R]=be(u,{expandable:!1,symbol:r=>r?m==null?void 0:m.collapse:m==null?void 0:m.expand}),[V,Zt]=(0,Z.Z)(R.defaultExpanded||!1,{value:R.expanded}),N=Q&&(!V||R.expandable==="collapsible"),{rows:ae=1}=R,ge=o.useMemo(()=>N&&(R.suffix!==void 0||R.onEllipsis||R.expandable||$||S),[N,R,$,S]);(0,v.Z)(()=>{Q&&!ge&&(we((0,Y.G)("webkitLineClamp")),Nt((0,Y.G)("textOverflow")))},[ge,Q]);const[H,kt]=o.useState(N),ke=o.useMemo(()=>ge?!1:ae===1?Ae:fe,[ge,Ae,fe]);(0,v.Z)(()=>{kt(ke&&N)},[ke,N]);const He=N&&(H?Ze:Be),Ht=N&&ae===1&&H,je=N&&ae>1&&H,Wt=(r,c)=>{var W;Zt(c.expanded),(W=R.onExpand)===null||W===void 0||W.call(R,r,c)},[We,Ut]=o.useState(0),zt=r=>{let{offsetWidth:c}=r;Ut(c)},Ft=r=>{var c;Dt(r),Be!==r&&((c=R.onEllipsis)===null||c===void 0||c.call(R,r))};o.useEffect(()=>{const r=A.current;if(Q&&H&&r){const c=gt(r);Ze!==c&&Mt(c)}},[Q,H,d,je,At,We]),o.useEffect(()=>{const r=A.current;if(typeof IntersectionObserver=="undefined"||!r||!H||!N)return;const c=new IntersectionObserver(()=>{Bt(!!r.offsetParent)});return c.observe(r),()=>{c.disconnect()}},[H,N]);const Re=ct(R.tooltip,E.text,d),me=o.useMemo(()=>{if(!(!Q||H))return[E.text,d,O,Re.title].find(Ee)},[Q,H,O,Re.title,He]);if(G)return o.createElement(tt,{value:(s=E.text)!==null&&s!==void 0?s:typeof d=="string"?d:"",onSave:b,onCancel:h,onEnd:E.onEnd,prefixCls:w,className:l,style:a,direction:L,component:p,maxLength:E.maxLength,autoSize:E.autoSize,enterIcon:E.enterIcon});const Kt=()=>{const{expandable:r,symbol:c}=R;return r?o.createElement("button",{type:"button",key:"expand",className:`${w}-${V?"collapse":"expand"}`,onClick:W=>Wt(W,{expanded:!V}),"aria-label":V?m.collapse:m==null?void 0:m.expand},typeof c=="function"?c(V):c):null},Vt=()=>{if(!$)return;const{icon:r,tooltip:c,tabIndex:W}=E,Ie=(0,B.Z)(c)[0]||(m==null?void 0:m.edit),Qt=typeof Ie=="string"?Ie:"";return ee.includes("icon")?o.createElement(q.Z,{key:"edit",title:c===!1?"":Ie},o.createElement("button",{type:"button",ref:J,className:`${w}-edit`,onClick:F,"aria-label":Qt,tabIndex:W},r||o.createElement(X.Z,{role:"button"}))):null},Xt=()=>S?o.createElement(mt,Object.assign({key:"copy"},K,{prefixCls:w,copied:I,locale:m,onCopy:Te,loading:k,iconOnly:d==null})):null,Jt=r=>[r&&Kt(),Vt(),Xt()],Gt=r=>[r&&!V&&o.createElement("span",{"aria-hidden":!0,key:"ellipsis"},Ct),R.suffix,Jt(r)];return o.createElement(ye.Z,{onResize:zt,disabled:!N},r=>o.createElement(ht,{tooltipProps:Re,enableEllipsis:N,isEllipsis:He},o.createElement($e,Object.assign({className:_()({[`${w}-${y}`]:y,[`${w}-disabled`]:C,[`${w}-ellipsis`]:Q,[`${w}-ellipsis-single-line`]:Ht,[`${w}-ellipsis-multiple-line`]:je},l),prefixCls:t,style:Object.assign(Object.assign({},a),{WebkitLineClamp:je?ae:void 0}),component:p,ref:(0,oe.sQ)(r,A,n),direction:L,onClick:ee.includes("text")?F:void 0,"aria-label":me==null?void 0:me.toString(),title:O},j),o.createElement(bt,{enableMeasure:N&&!H,text:d,rows:ae,width:We,onEllipsis:Ft,expanded:V,miscDeps:[I,V,k,$,S,m]},(c,W)=>xt(e,o.createElement(o.Fragment,null,c.length>0&&W&&!V&&me?o.createElement("span",{key:"show-content","aria-hidden":!0},c):c,Gt(W)))))))}),St=function(e,n){var s={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(s[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,t=Object.getOwnPropertySymbols(e);l<t.length;l++)n.indexOf(t[l])<0&&Object.prototype.propertyIsEnumerable.call(e,t[l])&&(s[t[l]]=e[t[l]]);return s},Ot=o.forwardRef((e,n)=>{var{ellipsis:s,rel:t}=e,l=St(e,["ellipsis","rel"]);const a=Object.assign(Object.assign({},l),{rel:t===void 0&&l.target==="_blank"?"noopener noreferrer":t});return delete a.navigate,o.createElement(pe,Object.assign({},a,{ref:n,ellipsis:!!s,component:"a"}))}),Tt=o.forwardRef((e,n)=>o.createElement(pe,Object.assign({ref:n},e,{component:"div"}))),wt=function(e,n){var s={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(s[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,t=Object.getOwnPropertySymbols(e);l<t.length;l++)n.indexOf(t[l])<0&&Object.prototype.propertyIsEnumerable.call(e,t[l])&&(s[t[l]]=e[t[l]]);return s};const jt=(e,n)=>{var{ellipsis:s}=e,t=wt(e,["ellipsis"]);const l=o.useMemo(()=>s&&typeof s=="object"?(0,ne.Z)(s,["expandable","rows"]):s,[s]);return o.createElement(pe,Object.assign({ref:n},t,{ellipsis:l,component:"span"}))};var Rt=o.forwardRef(jt),It=function(e,n){var s={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(s[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,t=Object.getOwnPropertySymbols(e);l<t.length;l++)n.indexOf(t[l])<0&&Object.prototype.propertyIsEnumerable.call(e,t[l])&&(s[t[l]]=e[t[l]]);return s};const Pt=[1,2,3,4,5];var Lt=o.forwardRef((e,n)=>{const{level:s=1}=e,t=It(e,["level"]),l=Pt.includes(s)?`h${s}`:"h1";return o.createElement(pe,Object.assign({ref:n},t,{component:l}))});const le=$e;le.Text=Rt,le.Link=Ot,le.Title=Lt,le.Paragraph=Tt;var $t=le},20640:function(ce,M,i){"use strict";var o=i(11742),X={"text/plain":"Text","text/html":"Url",default:"Text"},te="Copy to clipboard: #{key}, Enter";function _(B){var v=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return B.replace(/#{\s*key\s*}/g,v)}function ye(B,v){var Z,ne,oe,Y,U,x,q=!1;v||(v={}),Z=v.debug||!1;try{oe=o(),Y=document.createRange(),U=document.getSelection(),x=document.createElement("span"),x.textContent=B,x.ariaHidden="true",x.style.all="unset",x.style.position="fixed",x.style.top=0,x.style.clip="rect(0, 0, 0, 0)",x.style.whiteSpace="pre",x.style.webkitUserSelect="text",x.style.MozUserSelect="text",x.style.msUserSelect="text",x.style.userSelect="text",x.addEventListener("copy",function(D){if(D.stopPropagation(),v.format)if(D.preventDefault(),typeof D.clipboardData=="undefined"){Z&&console.warn("unable to use e.clipboardData"),Z&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var se=X[v.format]||X.default;window.clipboardData.setData(se,B)}else D.clipboardData.clearData(),D.clipboardData.setData(v.format,B);v.onCopy&&(D.preventDefault(),v.onCopy(D.clipboardData))}),document.body.appendChild(x),Y.selectNodeContents(x),U.addRange(Y);var ve=document.execCommand("copy");if(!ve)throw new Error("copy command was unsuccessful");q=!0}catch(D){Z&&console.error("unable to copy using execCommand: ",D),Z&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(v.format||"text",B),v.onCopy&&v.onCopy(window.clipboardData),q=!0}catch(se){Z&&console.error("unable to copy using clipboardData: ",se),Z&&console.error("falling back to prompt"),ne=_("message"in v?v.message:te),window.prompt(ne,B)}}finally{U&&(typeof U.removeRange=="function"?U.removeRange(Y):U.removeAllRanges()),x&&document.body.removeChild(x),oe()}return q}ce.exports=ye},11742:function(ce){ce.exports=function(){var M=document.getSelection();if(!M.rangeCount)return function(){};for(var i=document.activeElement,o=[],X=0;X<M.rangeCount;X++)o.push(M.getRangeAt(X));switch(i.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":i.blur();break;default:i=null;break}return M.removeAllRanges(),function(){M.type==="Caret"&&M.removeAllRanges(),M.rangeCount||o.forEach(function(te){M.addRange(te)}),i&&i.focus()}}}}]);
