diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..a32132d --- /dev/null +++ b/404.html @@ -0,0 +1,19 @@ + + + + + + 404 | Satori + + + + + + + + +
Skip to content
On this page
404 Page Not Found
+ + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..1ee87ba --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +satori.js.org diff --git a/assets/app.7448df4f.js b/assets/app.7448df4f.js new file mode 100644 index 0000000..b1e992d --- /dev/null +++ b/assets/app.7448df4f.js @@ -0,0 +1 @@ +import{r as _,d as ie,R as W,c as E,q as A,a0 as ue,a1 as ae,v as f,C as O,K as m,a2 as we,a3 as $e,A as w,z,u as y,S as F,T as Ce,x as $,G as T,F as ee,w as Y,W as q,a4 as pe,e as te,n as J,p as Ee,J as L,L as ve,D as se,N as G,B as M,_ as U,$ as Pe,y as de,m as ke,t as ze,Z as Ne,O as Le,f as fe,a5 as Ae,a6 as me,k as Z,a7 as Te,a8 as xe,a9 as Be,aa as Ve,ab as Re,ac as He,ad as Oe,ae as Me,af as De,ag as We,b as Fe,ah as Ie,ai as Ke,aj as je,ak as Xe}from"./chunks/framework.187e34d2.js";import{u as Q,i as Ye,a as Ge,b as Ue,c as _e,V as qe,d as Je,e as Ze,f as Qe,g as et,h as tt,j as st,t as oe,k as at,l as ot,m as nt}from"./chunks/theme.51df62a6.js";const he=Symbol("scrollbarContextKey"),R=4,rt={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},lt=({move:t,size:e,bar:s})=>({[s.size]:e,transform:`translate${s.axis}(${t}%)`});function ne(t,e="px"){if(!t)return"";if(typeof t=="number"||ct(t))return`${t}${e}`;if(typeof t=="string")return t}const ct=t=>typeof t!="string"?!1:!Number.isNaN(Number(t));class it extends Error{constructor(e){super(e),this.name="ElementPlusError"}}function ut(t,e){throw new it(`[${t}] ${e}`)}const pt=Symbol(""),re=_();function vt(t,e=void 0){const s=ie()?W(pt,re):re;return t?E(()=>{var a;return((a=s.value)==null?void 0:a[t])??e}):s}const dt="el",ft="is-",V=(t,e,s,a,l)=>{let i=`${t}-${e}`;return s&&(i+=`-${s}`),a&&(i+=`__${a}`),l&&(i+=`--${l}`),i},ye=t=>{const e=vt("namespace",dt);return{namespace:e,b:(o="")=>V(e.value,t,o,"",""),e:o=>o?V(e.value,t,"",o,""):"",m:o=>o?V(e.value,t,"","",o):"",be:(o,p)=>o&&p?V(e.value,t,o,p,""):"",em:(o,p)=>o&&p?V(e.value,t,"",o,p):"",bm:(o,p)=>o&&p?V(e.value,t,o,"",p):"",bem:(o,p,h)=>o&&p&&h?V(e.value,t,o,p,h):"",is:(o,...p)=>{const h=p.length>=1?p[0]:!0;return o&&h?`${ft}${o}`:""},cssVar:o=>{const p={};for(const h in o)o[h]&&(p[`--${e.value}-${h}`]=o[h]);return p},cssVarName:o=>`--${e.value}-${o}`,cssVarBlock:o=>{const p={};for(const h in o)o[h]&&(p[`--${e.value}-${t}-${h}`]=o[h]);return p},cssVarBlockName:o=>`--${e.value}-${t}-${o}`}},mt={vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean},_t="Thumb",le=A({__name:"thumb",props:mt,setup(t){const e=t,s=W(he),a=ye("scrollbar");s||ut(_t,"can not inject scrollbar context");const l=_(),i=_(),r=_({}),d=_(!1);let c=!1,N=!1,P=Ye?document.onselectstart:null;const u=E(()=>rt[e.vertical?"vertical":"horizontal"]),g=E(()=>lt({size:e.size,move:e.move,bar:u.value})),k=E(()=>l.value[u.value.offset]**2/s.wrapElement[u.value.scrollSize]/e.ratio/i.value[u.value.offset]),o=v=>{var S;if(v.stopPropagation(),v.ctrlKey||[1,2].includes(v.button))return;(S=window.getSelection())==null||S.removeAllRanges(),h(v);const n=v.currentTarget;n&&(r.value[u.value.axis]=n[u.value.offset]-(v[u.value.client]-n.getBoundingClientRect()[u.value.direction]))},p=v=>{if(!i.value||!l.value||!s.wrapElement)return;const n=Math.abs(v.target.getBoundingClientRect()[u.value.direction]-v[u.value.client]),S=i.value[u.value.offset]/2,B=(n-S)*100*k.value/l.value[u.value.offset];s.wrapElement[u.value.scroll]=B*s.wrapElement[u.value.scrollSize]/100},h=v=>{v.stopImmediatePropagation(),c=!0,document.addEventListener("mousemove",b),document.addEventListener("mouseup",C),P=document.onselectstart,document.onselectstart=()=>!1},b=v=>{if(!l.value||!i.value||c===!1)return;const n=r.value[u.value.axis];if(!n)return;const S=(l.value.getBoundingClientRect()[u.value.direction]-v[u.value.client])*-1,B=i.value[u.value.offset]-n,D=(S-B)*100*k.value/l.value[u.value.offset];s.wrapElement[u.value.scroll]=D*s.wrapElement[u.value.scrollSize]/100},C=()=>{c=!1,r.value[u.value.axis]=0,document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",C),K(),N&&(d.value=!1)},I=()=>{N=!1,d.value=!!e.size},x=()=>{N=!0,d.value=c};ue(()=>{K(),document.removeEventListener("mouseup",C)});const K=()=>{document.onselectstart!==P&&(document.onselectstart=P)};return Q(ae(s,"scrollbarElement"),"mousemove",I),Q(ae(s,"scrollbarElement"),"mouseleave",x),(v,n)=>(f(),O(Ce,{name:y(a).b("fade")},{default:m(()=>[we(w("div",{ref_key:"instance",ref:l,class:z([y(a).e("bar"),y(a).is(u.value.key)]),onMousedown:p},[w("div",{ref_key:"thumb",ref:i,class:z(y(a).e("thumb")),style:F(g.value),onMousedown:o},null,38)],34),[[$e,v.always||d.value]])]),_:1},8,["name"]))}}),ht={always:{type:Boolean,default:!0},width:String,height:String,ratioX:{type:Number,default:1},ratioY:{type:Number,default:1}},yt=A({__name:"bar",props:ht,setup(t,{expose:e}){const s=t,a=_(0),l=_(0);return e({handleScroll:r=>{if(r){const d=r.offsetHeight-R,c=r.offsetWidth-R;l.value=r.scrollTop*100/d*s.ratioY,a.value=r.scrollLeft*100/c*s.ratioX}}}),(r,d)=>(f(),$(ee,null,[T(le,{move:a.value,ratio:r.ratioX,size:r.width,always:r.always},null,8,["move","ratio","size","always"]),T(le,{move:l.value,ratio:r.ratioY,size:r.height,vertical:"",always:r.always},null,8,["move","ratio","size","always"])],64))}}),bt={height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:{type:Boolean,default:!1},wrapStyle:{type:[String,Object,Array],default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20}},gt={scroll:({scrollTop:t,scrollLeft:e})=>[t,e].every(s=>typeof s=="number")},St={name:"ElScrollbar"},wt=A({...St,props:bt,emits:gt,setup(t,{expose:e,emit:s}){const a=t,l=ye("scrollbar");let i,r;const d=_(),c=_(),N=_(),P=_("0"),u=_("0"),g=_(),k=_(1),o=_(1),p=E(()=>{const n={};return a.height&&(n.height=ne(a.height)),a.maxHeight&&(n.maxHeight=ne(a.maxHeight)),[a.wrapStyle,n]}),h=E(()=>[a.wrapClass,l.e("wrap"),{[l.em("wrap","hidden-default")]:!a.native}]),b=E(()=>[l.e("view"),a.viewClass]),C=()=>{var n;c.value&&((n=g.value)==null||n.handleScroll(c.value),s("scroll",{scrollTop:c.value.scrollTop,scrollLeft:c.value.scrollLeft}))};function I(n,S){Ge(n)?c.value.scrollTo(n):typeof n=="number"&&typeof S=="number"&&c.value.scrollTo(n,S)}const x=n=>{typeof n=="number"&&(c.value.scrollTop=n)},K=n=>{typeof n=="number"&&(c.value.scrollLeft=n)},v=()=>{if(!c.value)return;const n=c.value.offsetHeight-R,S=c.value.offsetWidth-R,B=n**2/c.value.scrollHeight,D=S**2/c.value.scrollWidth,j=Math.max(B,a.minSize),X=Math.max(D,a.minSize);k.value=B/(n-B)/(j/(n-j)),o.value=D/(S-D)/(X/(S-X)),u.value=j+Ra.noresize,n=>{n?(i==null||i(),r==null||r()):({stop:i}=Ue(N,v),r=Q("resize",v))},{immediate:!0}),Y(()=>[a.maxHeight,a.height],()=>{a.native||J(()=>{var n;v(),c.value&&((n=g.value)==null||n.handleScroll(c.value))})}),q(he,pe({scrollbarElement:d,wrapElement:c})),te(()=>{a.native||J(()=>{v()})}),Ee(()=>v()),e({wrapRef:c,update:v,scrollTo:I,setScrollTop:x,setScrollLeft:K,handleScroll:C}),(n,S)=>(f(),$("div",{ref_key:"scrollbarRef",ref:d,class:z(y(l).b())},[w("div",{ref_key:"wrapRef",ref:c,class:z(h.value),style:F(p.value),onScroll:C},[(f(),O(ve(n.tag),{ref_key:"resizeRef",ref:N,class:z(b.value),style:F(n.viewStyle)},{default:m(()=>[L(n.$slots,"default")]),_:3},8,["class","style"]))],38),n.native?se("",!0):(f(),O(yt,{key:0,ref_key:"barRef",ref:g,height:u.value,width:P.value,always:n.always,"ratio-x":o.value,"ratio-y":k.value},null,8,["height","width","always","ratio-x","ratio-y"]))],2))}});const $t=A({__name:"badge",props:{type:{type:String,default:"tip"},text:{type:String},vertical:{type:String}},setup(t){return(e,s)=>(f(),$("span",{class:z(["badge",t.type]),style:F({verticalAlign:t.vertical})},[L(e.$slots,"default",{},()=>[G(M(t.text),1)],!0)],6))}});const Ct=U($t,[["__scopeId","data-v-247eb287"]]),Et={class:"spoiler"},Pt=A({__name:"spoiler",props:{text:{type:String}},setup(t){return(e,s)=>(f(),$("span",Et,[L(e.$slots,"default",{},()=>[G(M(t.text),1)],!0)]))}});const kt=U(Pt,[["__scopeId","data-v-a373c1e6"]]),zt=["src"],Nt={class:"nickname"},Lt={class:"message-box"},At=A({__name:"chat-message",props:{nickname:{},color:{},avatar:{}},setup(t,{expose:e}){const s=t,a={Alice:"#cc0066",Bob:"#00994d",Carol:"#1e90ff",Dave:"#f4a460"},l={Koishi:"https://koishi.chat/logo.png"},i=_(!1),r=_(!1),d=_(!1),c=_(),N=E(()=>s.color||a[s.nickname]),P=E(()=>s.avatar||l[s.nickname]);function u(){let b;for(const C of document.querySelectorAll(".chat-message")){if(C===c.value)return b;b=C}}Y(r,b=>{if(!b)return i.value=!1;const C=u();if(!C||C.getBoundingClientRect().bottom<0)return k();const x=C.__vue__.exposed;x.moving.value||!x.shown.value?x.onappear(k):k()});let g=()=>{};function k(){i.value=!0,d.value=!0,setTimeout(()=>{d.value=!1,g()},100)}function o(){c.value.getBoundingClientRect().top{c.value.__vue__=p,o(),addEventListener("scroll",o),addEventListener("resize",o)}),ue(()=>{removeEventListener("scroll",o),removeEventListener("resize",o)}),(b,C)=>(f(),$("div",{ref_key:"root",ref:c,class:z(["chat-message",{shown:i.value}])},[P.value?(f(),$("img",{key:0,class:"avatar",src:P.value},null,8,zt)):(f(),$("div",{key:1,class:"avatar",style:F({backgroundColor:N.value})},M(b.nickname[0]),5)),w("div",Nt,M(b.nickname),1),w("div",Lt,[L(b.$slots,"default",{},()=>[G(" ")])])],2))}});const Tt={props:{controls:Boolean,title:String},data:()=>({tab:"default"}),computed:{mini(){return!this.controls&&!this.title}}};const xt={class:"controls"},Bt=w("div",{class:"circle red"},null,-1),Vt=w("div",{class:"circle yellow"},null,-1),Rt=w("div",{class:"circle green"},null,-1),Ht={class:"title"},Ot={key:0,class:"title-text"},Mt={class:"content"};function Dt(t,e,s,a,l,i){return f(),$("div",{class:z(["panel-view",{mini:i.mini}])},[w("div",xt,[Bt,Vt,Rt,w("div",Ht,[s.title?(f(),$("span",Ot,M(s.title),1)):se("",!0)])]),w("div",Mt,[L(t.$slots,"default")])],2)}const Wt=U(Tt,[["render",Dt]]),Ft={class:"tab-select"},It={class:"header"},Kt=["onClick"],jt=A({__name:"tab-select",setup(t){const e=Pe(),s=E(()=>Object.keys(e).filter(l=>l.startsWith("tab-")).map(l=>l.slice(4))),a=Jt(s);return(l,i)=>(f(),$("div",Ft,[w("div",It,[(f(!0),$(ee,null,de(s.value,r=>(f(),$("span",{key:r,class:z({active:y(a)===r}),onClick:d=>a.value=r},[L(l.$slots,"title-"+r,{},()=>[G(M(r),1)])],10,Kt))),128))]),L(l.$slots,"tab-"+y(a))]))}});const Xt=w("div",{class:"curtain"},null,-1),Yt={class:"vp-sidebar-nav"},Gt=A({__name:"sidebar",props:{open:{type:Boolean}},setup(t){const e=t,{hasSidebar:s,sidebarGroups:a}=_e(),l=_(null);return ke(async()=>{var i;e.open&&(await J(),(i=l.value)==null||i.wrapRef.focus())}),(i,r)=>{const d=ze("ElScrollbar");return y(s)?(f(),O(d,{key:0,tag:"aside",class:z(["VPSidebar",{open:i.open}]),"view-class":"vp-sidebar-view",ref_key:"navEl",ref:l,onClick:r[0]||(r[0]=Ne(()=>{},["stop"]))},{default:m(()=>[Xt,w("nav",Yt,[L(i.$slots,"sidebar-nav-before"),(f(!0),$(ee,null,de(y(a),c=>(f(),$("div",{key:c.text,class:"group"},[T(qe,{item:c,depth:0},null,8,["item"])]))),128)),L(i.$slots,"sidebar-nav-after")])]),_:3},8,["class"])):se("",!0)}}});const Ut=A({__name:"Layout",setup(t){const{isOpen:e,open:s,close:a,hasSidebar:l}=_e(),i=Le();Y(()=>i.path,a),Je(e,a),q("close-sidebar",a),q("is-sidebar-open",e);const{frontmatter:r}=fe(),d=W(be),c=W("NotFound"),N=E(()=>{var g;return d.layouts[(g=r.value.layout)==null?void 0:g.toLowerCase()]||d.layouts.default}),P=E(()=>({"has-sidebar":l.value})),u=E(()=>({[`layout-${r.value.layout}`]:r.value.layout}));return(g,k)=>(f(),$("div",{class:z(["Layout",u.value])},[T(Ze),T(Qe,{class:"backdrop",show:y(e),onClick:y(a)},null,8,["show","onClick"]),T(et,null,{"nav-bar-title-before":m(()=>[]),"nav-bar-title-after":m(()=>[]),"nav-bar-content-before":m(()=>[]),"nav-bar-content-after":m(()=>[]),"nav-screen-content-before":m(()=>[]),"nav-screen-content-after":m(()=>[]),_:1}),T(tt,{open:y(e),onOpenMenu:y(s)},null,8,["open","onOpenMenu"]),T(Gt,{open:y(e)},{"sidebar-nav-before":m(()=>[L(g.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":m(()=>[L(g.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),w("div",{class:z(["VPContent",P.value]),id:"VPContent"},[y(i).component===y(c)?(f(),O(y(c),{key:0})):(f(),O(ve(N.value),{key:1},{"doc-footer-before":m(()=>[]),"doc-before":m(()=>[]),"doc-after":m(()=>[]),"aside-top":m(()=>[]),"aside-bottom":m(()=>[]),"aside-outline-before":m(()=>[]),"aside-outline-after":m(()=>[]),"aside-ads-before":m(()=>[]),"aside-ads-after":m(()=>[]),_:1}))],2),T(st)],2))}});const qt=U(Ut,[["__scopeId","data-v-7f463d15"]]);const be=Symbol.for("theme-config"),ge=Symbol.for("client-config");function Jt(t){const e=W(ge);return E({get:()=>{const s=nt(t);return e.tabs.find(a=>s.includes(a))||s[0]},set:s=>{const a=e.tabs.indexOf(s);a>=0&&e.tabs.splice(a,1),e.tabs.unshift(s)}})}const ce=1;function Zt(t){const e=at("koishi.docs.config",{});return e.value.version!==ce?e.value={...t,version:ce}:e.value={...t,...e.value},pe(e.value)}const Qt=(t={})=>({...oe,Layout:qt,...t,enhanceApp(e){var a;e.app.component("ElScrollbar",wt),e.app.component("Badge",Ct),e.app.component("Spoiler",kt),e.app.component("ChatMessage",At),e.app.component("ChatPanel",Wt),e.app.component("TabSelect",jt);const s={default:ot};for(const l in t.layouts)s[l.toLowerCase()]=t.layouts[l];e.app.provide("NotFound",oe.NotFound),e.app.provide(be,{layouts:s}),e.app.provide(ge,Zt({tabs:[]})),(a=t.enhanceApp)==null||a.call(t,e)}});const es=Qt({layouts:{home:Ae(()=>me(()=>import("./chunks/VPHome.2b62c96c.js"),["assets/chunks/VPHome.2b62c96c.js","assets/chunks/framework.187e34d2.js"]))}});function Se(t){if(t.extends){const e=Se(t.extends);return{...e,...t,async enhanceApp(s){e.enhanceApp&&await e.enhanceApp(s),t.enhanceApp&&await t.enhanceApp(s)}}}return t}const H=Se(es),ts=A({name:"VitePressApp",setup(){const{site:t}=fe();return te(()=>{Fe(()=>{document.documentElement.lang=t.value.lang,document.documentElement.dir=t.value.dir})}),Ie(),Ke(),je(),H.setup&&H.setup(),()=>Xe(H.Layout)}});async function ss(){const t=os(),e=as();e.provide(xe,t);const s=Be(t.route);return e.provide(Ve,s),e.component("Content",Re),e.component("ClientOnly",He),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get(){return s.frontmatter.value}},$params:{get(){return s.page.value.params}}}),H.enhanceApp&&await H.enhanceApp({app:e,router:t,siteData:Oe}),{app:e,router:t,data:s}}function as(){return Me(ts)}function os(){let t=Z,e;return De(s=>{let a=We(s);return a?(t&&(e=a),(t||e===a)&&(a=a.replace(/\.js$/,".lean.js")),Z&&(t=!1),me(()=>import(a),[])):null},H.NotFound)}Z&&ss().then(({app:t,router:e,data:s})=>{e.go().then(()=>{Te(e.route,s.site),t.mount("#app")})});export{ss as createApp}; diff --git a/assets/chunks/VPHome.2b62c96c.js b/assets/chunks/VPHome.2b62c96c.js new file mode 100644 index 0000000..9acaef2 --- /dev/null +++ b/assets/chunks/VPHome.2b62c96c.js @@ -0,0 +1 @@ +import{q as _,f as i,r as d,e as l,v as c,x as n,A as e,B as r,u as t,D as p,H as h,I as u,_ as f}from"./framework.187e34d2.js";const m=s=>(h("data-v-b7c0548e"),s=s(),u(),s),v={class:"home"},b={class:"screen"},y=m(()=>e("h1",null,"Satori",-1)),I={class:"desc"},k={class:"actions"},x=["href"],S={key:0,class:"footer",target:"_blank",rel:"noopener noreferrer",href:"https://beian.miit.gov.cn/"},V=_({__name:"VPHome",setup(s){const{frontmatter:o}=i(),a=d(!1);return l(()=>{window.location.href.includes("satori.chat")&&(a.value=!0)}),(g,B)=>(c(),n("div",v,[e("div",b,[y,e("p",I,r(t(o).home.description),1),e("div",k,[e("a",{class:"action-button secondary",href:t(o).links.starter},r(t(o).home.primary),9,x)])]),a.value?(c(),n("a",S,"苏ICP备2022025524号-2")):p("",!0)]))}});const P=f(V,[["__scopeId","data-v-b7c0548e"]]);export{P as default}; diff --git a/assets/chunks/framework.187e34d2.js b/assets/chunks/framework.187e34d2.js new file mode 100644 index 0000000..753d071 --- /dev/null +++ b/assets/chunks/framework.187e34d2.js @@ -0,0 +1,2 @@ +function Xn(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}const te={},ft=[],Pe=()=>{},Ai=()=>!1,Ri=/^on[^a-z]/,Ht=e=>Ri.test(e),Zn=e=>e.startsWith("onUpdate:"),oe=Object.assign,Qn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Pi=Object.prototype.hasOwnProperty,q=(e,t)=>Pi.call(e,t),N=Array.isArray,at=e=>un(e)==="[object Map]",pr=e=>un(e)==="[object Set]",j=e=>typeof e=="function",re=e=>typeof e=="string",Gn=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",gr=e=>ee(e)&&j(e.then)&&j(e.catch),mr=Object.prototype.toString,un=e=>mr.call(e),Ii=e=>un(e).slice(8,-1),_r=e=>un(e)==="[object Object]",es=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Rt=Xn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),dn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Oi=/-(\w)/g,Me=dn(e=>e.replace(Oi,(t,n)=>n?n.toUpperCase():"")),Fi=/\B([A-Z])/g,it=dn(e=>e.replace(Fi,"-$1").toLowerCase()),hn=dn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Zt=dn(e=>e?`on${hn(e)}`:""),St=(e,t)=>!Object.is(e,t),Rn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Si=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Mi=e=>{const t=re(e)?Number(e):NaN;return isNaN(t)?e:t};let Cs;const Hn=()=>Cs||(Cs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ts(e){if(N(e)){const t={};for(let n=0;n{if(n){const s=n.split(Ni);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ns(e){let t="";if(re(e))t=e;else if(N(e))for(let n=0;nre(e)?e:e==null?"":N(e)||ee(e)&&(e.toString===mr||!j(e.toString))?JSON.stringify(e,yr,2):String(e),yr=(e,t)=>t&&t.__v_isRef?yr(e,t.value):at(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:pr(t)?{[`Set(${t.size})`]:[...t.values()]}:ee(t)&&!N(t)&&!_r(t)?String(t):t;let _e;class Ui{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=_e;try{return _e=this,t()}finally{_e=n}}}on(){_e=this}off(){_e=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},vr=e=>(e.w&Ve)>0,wr=e=>(e.n&Ve)>0,ki=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(d==="length"||d>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":N(e)?es(n)&&l.push(o.get("length")):(l.push(o.get(st)),at(e)&&l.push(o.get(jn)));break;case"delete":N(e)||(l.push(o.get(st)),at(e)&&l.push(o.get(jn)));break;case"set":at(e)&&l.push(o.get(st));break}if(l.length===1)l[0]&&Un(l[0]);else{const c=[];for(const a of l)a&&c.push(...a);Un(ss(c))}}function Un(e,t){const n=N(e)?e:[...e];for(const s of n)s.computed&&Es(s);for(const s of n)s.computed||Es(s)}function Es(e,t){(e!==Ae||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function Vi(e,t){var n;return(n=nn.get(e))==null?void 0:n.get(t)}const qi=Xn("__proto__,__v_isRef,__isVue"),Er=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Gn)),zi=is(),Yi=is(!1,!0),Ji=is(!0),Ts=Xi();function Xi(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=z(this);for(let i=0,o=this.length;i{e[t]=function(...n){vt();const s=z(this)[t].apply(this,n);return wt(),s}}),e}function Zi(e){const t=z(this);return pe(t,"has",e),t.hasOwnProperty(e)}function is(e=!1,t=!1){return function(s,r,i){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_isShallow")return t;if(r==="__v_raw"&&i===(e?t?po:Ir:t?Pr:Rr).get(s))return s;const o=N(s);if(!e){if(o&&q(Ts,r))return Reflect.get(Ts,r,i);if(r==="hasOwnProperty")return Zi}const l=Reflect.get(s,r,i);return(Gn(r)?Er.has(r):qi(r))||(e||pe(s,"get",r),t)?l:ce(l)?o&&es(r)?l:l.value:ee(l)?e?Or(l):gn(l):l}}const Qi=Tr(),Gi=Tr(!0);function Tr(e=!1){return function(n,s,r,i){let o=n[s];if(mt(o)&&ce(o)&&!ce(r))return!1;if(!e&&(!sn(r)&&!mt(r)&&(o=z(o),r=z(r)),!N(n)&&ce(o)&&!ce(r)))return o.value=r,!0;const l=N(n)&&es(s)?Number(s)e,pn=e=>Reflect.getPrototypeOf(e);function Kt(e,t,n=!1,s=!1){e=e.__v_raw;const r=z(e),i=z(t);n||(t!==i&&pe(r,"get",t),pe(r,"get",i));const{has:o}=pn(r),l=s?os:n?fs:Mt;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function kt(e,t=!1){const n=this.__v_raw,s=z(n),r=z(e);return t||(e!==r&&pe(s,"has",e),pe(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function Wt(e,t=!1){return e=e.__v_raw,!t&&pe(z(e),"iterate",st),Reflect.get(e,"size",e)}function As(e){e=z(e);const t=z(this);return pn(t).has.call(t,e)||(t.add(e),$e(t,"add",e,e)),this}function Rs(e,t){t=z(t);const n=z(this),{has:s,get:r}=pn(n);let i=s.call(n,e);i||(e=z(e),i=s.call(n,e));const o=r.call(n,e);return n.set(e,t),i?St(t,o)&&$e(n,"set",e,t):$e(n,"add",e,t),this}function Ps(e){const t=z(this),{has:n,get:s}=pn(t);let r=n.call(t,e);r||(e=z(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&$e(t,"delete",e,void 0),i}function Is(){const e=z(this),t=e.size!==0,n=e.clear();return t&&$e(e,"clear",void 0,void 0),n}function Vt(e,t){return function(s,r){const i=this,o=i.__v_raw,l=z(o),c=t?os:e?fs:Mt;return!e&&pe(l,"iterate",st),o.forEach((a,d)=>s.call(r,c(a),c(d),i))}}function qt(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=at(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,a=r[e](...s),d=n?os:t?fs:Mt;return!t&&pe(i,"iterate",c?jn:st),{next(){const{value:p,done:v}=a.next();return v?{value:p,done:v}:{value:l?[d(p[0]),d(p[1])]:d(p),done:v}},[Symbol.iterator](){return this}}}}function Be(e){return function(...t){return e==="delete"?!1:this}}function io(){const e={get(i){return Kt(this,i)},get size(){return Wt(this)},has:kt,add:As,set:Rs,delete:Ps,clear:Is,forEach:Vt(!1,!1)},t={get(i){return Kt(this,i,!1,!0)},get size(){return Wt(this)},has:kt,add:As,set:Rs,delete:Ps,clear:Is,forEach:Vt(!1,!0)},n={get(i){return Kt(this,i,!0)},get size(){return Wt(this,!0)},has(i){return kt.call(this,i,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Vt(!0,!1)},s={get(i){return Kt(this,i,!0,!0)},get size(){return Wt(this,!0)},has(i){return kt.call(this,i,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Vt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=qt(i,!1,!1),n[i]=qt(i,!0,!1),t[i]=qt(i,!1,!0),s[i]=qt(i,!0,!0)}),[e,n,t,s]}const[oo,lo,co,fo]=io();function ls(e,t){const n=t?e?fo:co:e?lo:oo;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(q(n,r)&&r in s?n:s,r,i)}const ao={get:ls(!1,!1)},uo={get:ls(!1,!0)},ho={get:ls(!0,!1)},Rr=new WeakMap,Pr=new WeakMap,Ir=new WeakMap,po=new WeakMap;function go(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function mo(e){return e.__v_skip||!Object.isExtensible(e)?0:go(Ii(e))}function gn(e){return mt(e)?e:cs(e,!1,Ar,ao,Rr)}function _o(e){return cs(e,!1,ro,uo,Pr)}function Or(e){return cs(e,!0,so,ho,Ir)}function cs(e,t,n,s,r){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=mo(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function ut(e){return mt(e)?ut(e.__v_raw):!!(e&&e.__v_isReactive)}function mt(e){return!!(e&&e.__v_isReadonly)}function sn(e){return!!(e&&e.__v_isShallow)}function Fr(e){return ut(e)||mt(e)}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function Pt(e){return tn(e,"__v_skip",!0),e}const Mt=e=>ee(e)?gn(e):e,fs=e=>ee(e)?Or(e):e;function Sr(e){ke&&Ae&&(e=z(e),xr(e.dep||(e.dep=ss())))}function Mr(e,t){e=z(e);const n=e.dep;n&&Un(n)}function ce(e){return!!(e&&e.__v_isRef===!0)}function dt(e){return Lr(e,!1)}function bo(e){return Lr(e,!0)}function Lr(e,t){return ce(e)?e:new yo(e,t)}class yo{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:z(t),this._value=n?t:Mt(t)}get value(){return Sr(this),this._value}set value(t){const n=this.__v_isShallow||sn(t)||mt(t);t=n?t:z(t),St(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Mt(t),Mr(this))}}function vo(e){return ce(e)?e.value:e}const wo={get:(e,t,n)=>vo(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ce(r)&&!ce(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Nr(e){return ut(e)?e:new Proxy(e,wo)}class Co{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Vi(z(this._object),this._key)}}class xo{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Nc(e,t,n){return ce(e)?e:j(e)?new xo(e):ee(e)&&arguments.length>1?Eo(e,t,n):dt(e)}function Eo(e,t,n){const s=e[t];return ce(s)?s:new Co(e,t,n)}class To{constructor(t,n,s,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new rs(t,()=>{this._dirty||(this._dirty=!0,Mr(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=z(this);return Sr(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function Ao(e,t,n=!1){let s,r;const i=j(e);return i?(s=e,r=Pe):(s=e.get,r=e.set),new To(s,r,i||!r,n)}function We(e,t,n,s){let r;try{r=s?e(...s):e()}catch(i){Bt(i,t,n)}return r}function Ce(e,t,n,s){if(j(e)){const i=We(e,t,n,s);return i&&gr(i)&&i.catch(o=>{Bt(o,t,n)}),i}const r=[];for(let i=0;i>>1;Nt(ae[s])Se&&ae.splice(t,1)}function Oo(e){N(e)?ht.push(...e):(!Ne||!Ne.includes(e,e.allowRecurse?Qe+1:Qe))&&ht.push(e),Br()}function Os(e,t=Lt?Se+1:0){for(;tNt(n)-Nt(s)),Qe=0;Qee.id==null?1/0:e.id,Fo=(e,t)=>{const n=Nt(e)-Nt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function jr(e){Dn=!1,Lt=!0,ae.sort(Fo);const t=Pe;try{for(Se=0;Sere(E)?E.trim():E)),p&&(r=n.map(Si))}let l,c=s[l=Zt(t)]||s[l=Zt(Me(t))];!c&&i&&(c=s[l=Zt(it(t))]),c&&Ce(c,e,6,r);const a=s[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ce(a,e,6,r)}}function Ur(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!j(e)){const c=a=>{const d=Ur(a,t,!0);d&&(l=!0,oe(o,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ee(e)&&s.set(e,null),null):(N(i)?i.forEach(c=>o[c]=null):oe(o,i),ee(e)&&s.set(e,o),o)}function _n(e,t){return!e||!Ht(t)?!1:(t=t.slice(2).replace(/Once$/,""),q(e,t[0].toLowerCase()+t.slice(1))||q(e,it(t))||q(e,t))}let fe=null,bn=null;function on(e){const t=fe;return fe=e,bn=e&&e.type.__scopeId||null,t}function $c(e){bn=e}function Hc(){bn=null}function Mo(e,t=fe,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&Ks(-1);const i=on(t);let o;try{o=e(...r)}finally{on(i),s._d&&Ks(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Pn(e){const{type:t,vnode:n,proxy:s,withProxy:r,props:i,propsOptions:[o],slots:l,attrs:c,emit:a,render:d,renderCache:p,data:v,setupState:E,ctx:R,inheritAttrs:I}=e;let $,_;const b=on(e);try{if(n.shapeFlag&4){const P=r||s;$=Te(d.call(P,P,p,i,E,v,R)),_=c}else{const P=t;$=Te(P.length>1?P(i,{attrs:c,slots:l,emit:a}):P(i,null)),_=t.props?c:Lo(c)}}catch(P){Ft.length=0,Bt(P,e,1),$=se(be)}let H=$;if(_&&I!==!1){const P=Object.keys(_),{shapeFlag:K}=H;P.length&&K&7&&(o&&P.some(Zn)&&(_=No(_,o)),H=qe(H,_))}return n.dirs&&(H=qe(H),H.dirs=H.dirs?H.dirs.concat(n.dirs):n.dirs),n.transition&&(H.transition=n.transition),$=H,on(b),$}const Lo=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ht(n))&&((t||(t={}))[n]=e[n]);return t},No=(e,t)=>{const n={};for(const s in e)(!Zn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function $o(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,a=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Fs(s,o,a):!!o;if(c&8){const d=t.dynamicProps;for(let p=0;pe.__isSuspense;function Dr(e,t){t&&t.pendingBranch?N(e)?t.effects.push(...e):t.effects.push(e):Oo(e)}function jo(e,t){return yn(e,null,t)}function Bc(e,t){return yn(e,null,{flush:"post"})}const zt={};function Qt(e,t,n){return yn(e,t,n)}function yn(e,t,{immediate:n,deep:s,flush:r,onTrack:i,onTrigger:o}=te){var l;const c=Ki()===((l=le)==null?void 0:l.scope)?le:null;let a,d=!1,p=!1;if(ce(e)?(a=()=>e.value,d=sn(e)):ut(e)?(a=()=>e,s=!0):N(e)?(p=!0,d=e.some(P=>ut(P)||sn(P)),a=()=>e.map(P=>{if(ce(P))return P.value;if(ut(P))return tt(P);if(j(P))return We(P,c,2)})):j(e)?t?a=()=>We(e,c,2):a=()=>{if(!(c&&c.isUnmounted))return v&&v(),Ce(e,c,3,[E])}:a=Pe,t&&s){const P=a;a=()=>tt(P())}let v,E=P=>{v=b.onStop=()=>{We(P,c,4)}},R;if(yt)if(E=Pe,t?n&&Ce(t,c,3,[a(),p?[]:void 0,E]):a(),r==="sync"){const P=Ml();R=P.__watcherHandles||(P.__watcherHandles=[])}else return Pe;let I=p?new Array(e.length).fill(zt):zt;const $=()=>{if(b.active)if(t){const P=b.run();(s||d||(p?P.some((K,J)=>St(K,I[J])):St(P,I)))&&(v&&v(),Ce(t,c,3,[P,I===zt?void 0:p&&I[0]===zt?[]:I,E]),I=P)}else b.run()};$.allowRecurse=!!t;let _;r==="sync"?_=$:r==="post"?_=()=>de($,c&&c.suspense):($.pre=!0,c&&($.id=c.uid),_=()=>mn($));const b=new rs(a,_);t?n?$():I=b.run():r==="post"?de(b.run.bind(b),c&&c.suspense):b.run();const H=()=>{b.stop(),c&&c.scope&&Qn(c.scope.effects,b)};return R&&R.push(H),H}function Uo(e,t,n){const s=this.proxy,r=re(e)?e.includes(".")?Kr(s,e):()=>s[e]:e.bind(s,s);let i;j(t)?i=t:(i=t.handler,n=t);const o=le;bt(this);const l=yn(r,i.bind(s),n);return o?bt(o):rt(),l}function Kr(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r{tt(n,t)});else if(_r(e))for(const n in e)tt(e[n],t);return e}function jc(e,t){const n=fe;if(n===null)return e;const s=En(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let i=0;i{e.isMounted=!0}),zr(()=>{e.isUnmounting=!0}),e}const ye=[Function,Array],kr={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ye,onEnter:ye,onAfterEnter:ye,onEnterCancelled:ye,onBeforeLeave:ye,onLeave:ye,onAfterLeave:ye,onLeaveCancelled:ye,onBeforeAppear:ye,onAppear:ye,onAfterAppear:ye,onAppearCancelled:ye},Ko={name:"BaseTransition",props:kr,setup(e,{slots:t}){const n=ui(),s=Do();let r;return()=>{const i=t.default&&Vr(t.default(),!0);if(!i||!i.length)return;let o=i[0];if(i.length>1){for(const I of i)if(I.type!==be){o=I;break}}const l=z(e),{mode:c}=l;if(s.isLeaving)return In(o);const a=Ss(o);if(!a)return In(o);const d=Kn(a,l,s,n);kn(a,d);const p=n.subTree,v=p&&Ss(p);let E=!1;const{getTransitionKey:R}=a.type;if(R){const I=R();r===void 0?r=I:I!==r&&(r=I,E=!0)}if(v&&v.type!==be&&(!Ge(a,v)||E)){const I=Kn(v,l,s,n);if(kn(v,I),c==="out-in")return s.isLeaving=!0,I.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},In(o);c==="in-out"&&a.type!==be&&(I.delayLeave=($,_,b)=>{const H=Wr(s,v);H[String(v.key)]=v,$._leaveCb=()=>{_(),$._leaveCb=void 0,delete d.delayedLeave},d.delayedLeave=b})}return o}}},ko=Ko;function Wr(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Kn(e,t,n,s){const{appear:r,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:d,onBeforeLeave:p,onLeave:v,onAfterLeave:E,onLeaveCancelled:R,onBeforeAppear:I,onAppear:$,onAfterAppear:_,onAppearCancelled:b}=t,H=String(e.key),P=Wr(n,e),K=(A,D)=>{A&&Ce(A,s,9,D)},J=(A,D)=>{const U=D[1];K(A,D),N(A)?A.every(Y=>Y.length<=1)&&U():A.length<=1&&U()},V={mode:i,persisted:o,beforeEnter(A){let D=l;if(!n.isMounted)if(r)D=I||l;else return;A._leaveCb&&A._leaveCb(!0);const U=P[H];U&&Ge(e,U)&&U.el._leaveCb&&U.el._leaveCb(),K(D,[A])},enter(A){let D=c,U=a,Y=d;if(!n.isMounted)if(r)D=$||c,U=_||a,Y=b||d;else return;let O=!1;const k=A._enterCb=S=>{O||(O=!0,S?K(Y,[A]):K(U,[A]),V.delayedLeave&&V.delayedLeave(),A._enterCb=void 0)};D?J(D,[A,k]):k()},leave(A,D){const U=String(e.key);if(A._enterCb&&A._enterCb(!0),n.isUnmounting)return D();K(p,[A]);let Y=!1;const O=A._leaveCb=k=>{Y||(Y=!0,D(),k?K(R,[A]):K(E,[A]),A._leaveCb=void 0,P[U]===e&&delete P[U])};P[U]=e,v?J(v,[A,O]):O()},clone(A){return Kn(A,t,n,s)}};return V}function In(e){if(jt(e))return e=qe(e),e.children=null,e}function Ss(e){return jt(e)?e.children?e.children[0]:void 0:e}function kn(e,t){e.shapeFlag&6&&e.component?kn(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Vr(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;ioe({name:e.name},t,{setup:e}))():e}const pt=e=>!!e.type.__asyncLoader;function Uc(e){j(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,timeout:i,suspensible:o=!0,onError:l}=e;let c=null,a,d=0;const p=()=>(d++,c=null,v()),v=()=>{let E;return c||(E=c=t().catch(R=>{if(R=R instanceof Error?R:new Error(String(R)),l)return new Promise((I,$)=>{l(R,()=>I(p()),()=>$(R),d+1)});throw R}).then(R=>E!==c&&c?c:(R&&(R.__esModule||R[Symbol.toStringTag]==="Module")&&(R=R.default),a=R,R)))};return us({name:"AsyncComponentWrapper",__asyncLoader:v,get __asyncResolved(){return a},setup(){const E=le;if(a)return()=>On(a,E);const R=b=>{c=null,Bt(b,E,13,!s)};if(o&&E.suspense||yt)return v().then(b=>()=>On(b,E)).catch(b=>(R(b),()=>s?se(s,{error:b}):null));const I=dt(!1),$=dt(),_=dt(!!r);return r&&setTimeout(()=>{_.value=!1},r),i!=null&&setTimeout(()=>{if(!I.value&&!$.value){const b=new Error(`Async component timed out after ${i}ms.`);R(b),$.value=b}},i),v().then(()=>{I.value=!0,E.parent&&jt(E.parent.vnode)&&mn(E.parent.update)}).catch(b=>{R(b),$.value=b}),()=>{if(I.value&&a)return On(a,E);if($.value&&s)return se(s,{error:$.value});if(n&&!_.value)return se(n)}}})}function On(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=se(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const jt=e=>e.type.__isKeepAlive;function Wo(e,t){qr(e,"a",t)}function Vo(e,t){qr(e,"da",t)}function qr(e,t,n=le){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(vn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)jt(r.parent.vnode)&&qo(s,t,n,r),r=r.parent}}function qo(e,t,n,s){const r=vn(t,e,s,!0);Cn(()=>{Qn(s[t],r)},n)}function vn(e,t,n=le,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;vt(),bt(n);const l=Ce(t,n,e,o);return rt(),wt(),l});return s?r.unshift(i):r.push(i),i}}const He=e=>(t,n=le)=>(!yt||e==="sp")&&vn(e,(...s)=>t(...s),n),zo=He("bm"),wn=He("m"),Yo=He("bu"),Jo=He("u"),zr=He("bum"),Cn=He("um"),Xo=He("sp"),Zo=He("rtg"),Qo=He("rtc");function Go(e,t=le){vn("ec",e,t)}const ds="components";function Dc(e,t){return Jr(ds,e,!0,t)||e}const Yr=Symbol.for("v-ndc");function Kc(e){return re(e)?Jr(ds,e,!1)||e:e||Yr}function Jr(e,t,n=!0,s=!1){const r=fe||le;if(r){const i=r.type;if(e===ds){const l=Ol(i,!1);if(l&&(l===t||l===Me(t)||l===hn(Me(t))))return i}const o=Ms(r[e]||i[e],t)||Ms(r.appContext[e],t);return!o&&s?i:o}}function Ms(e,t){return e&&(e[t]||e[Me(t)]||e[hn(Me(t))])}function kc(e,t,n,s){let r;const i=n&&n[s];if(N(e)||re(e)){r=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i&&i[l]));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,c=o.length;lan(t)?!(t.type===be||t.type===he&&!Xr(t.children)):!0)?e:null}function Vc(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:Zt(s)]=e[s];return n}const Wn=e=>e?di(e)?En(e)||e.proxy:Wn(e.parent):null,It=oe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Wn(e.parent),$root:e=>Wn(e.root),$emit:e=>e.emit,$options:e=>hs(e),$forceUpdate:e=>e.f||(e.f=()=>mn(e.update)),$nextTick:e=>e.n||(e.n=Hr.bind(e.proxy)),$watch:e=>Uo.bind(e)}),Fn=(e,t)=>e!==te&&!e.__isScriptSetup&&q(e,t),el={get({_:e},t){const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const E=o[t];if(E!==void 0)switch(E){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Fn(s,t))return o[t]=1,s[t];if(r!==te&&q(r,t))return o[t]=2,r[t];if((a=e.propsOptions[0])&&q(a,t))return o[t]=3,i[t];if(n!==te&&q(n,t))return o[t]=4,n[t];Vn&&(o[t]=0)}}const d=It[t];let p,v;if(d)return t==="$attrs"&&pe(e,"get",t),d(e);if((p=l.__cssModules)&&(p=p[t]))return p;if(n!==te&&q(n,t))return o[t]=4,n[t];if(v=c.config.globalProperties,q(v,t))return v[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Fn(r,t)?(r[t]=n,!0):s!==te&&q(s,t)?(s[t]=n,!0):q(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==te&&q(e,o)||Fn(t,o)||(l=i[0])&&q(l,o)||q(s,o)||q(It,o)||q(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function qc(){return tl().slots}function tl(){const e=ui();return e.setupContext||(e.setupContext=pi(e))}function Ls(e){return N(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Vn=!0;function nl(e){const t=hs(e),n=e.proxy,s=e.ctx;Vn=!1,t.beforeCreate&&Ns(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:a,created:d,beforeMount:p,mounted:v,beforeUpdate:E,updated:R,activated:I,deactivated:$,beforeDestroy:_,beforeUnmount:b,destroyed:H,unmounted:P,render:K,renderTracked:J,renderTriggered:V,errorCaptured:A,serverPrefetch:D,expose:U,inheritAttrs:Y,components:O,directives:k,filters:S}=t;if(a&&sl(a,s,null),o)for(const ne in o){const Q=o[ne];j(Q)&&(s[ne]=Q.bind(n))}if(r){const ne=r.call(n,n);ee(ne)&&(e.data=gn(ne))}if(Vn=!0,i)for(const ne in i){const Q=i[ne],ze=j(Q)?Q.bind(n,n):j(Q.get)?Q.get.bind(n,n):Pe,Ut=!j(Q)&&j(Q.set)?Q.set.bind(n):Pe,Ye=Ee({get:ze,set:Ut});Object.defineProperty(s,ne,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Ie=>Ye.value=Ie})}if(l)for(const ne in l)Zr(l[ne],s,n,ne);if(c){const ne=j(c)?c.call(n):c;Reflect.ownKeys(ne).forEach(Q=>{fl(Q,ne[Q])})}d&&Ns(d,e,"c");function X(ne,Q){N(Q)?Q.forEach(ze=>ne(ze.bind(n))):Q&&ne(Q.bind(n))}if(X(zo,p),X(wn,v),X(Yo,E),X(Jo,R),X(Wo,I),X(Vo,$),X(Go,A),X(Qo,J),X(Zo,V),X(zr,b),X(Cn,P),X(Xo,D),N(U))if(U.length){const ne=e.exposed||(e.exposed={});U.forEach(Q=>{Object.defineProperty(ne,Q,{get:()=>n[Q],set:ze=>n[Q]=ze})})}else e.exposed||(e.exposed={});K&&e.render===Pe&&(e.render=K),Y!=null&&(e.inheritAttrs=Y),O&&(e.components=O),k&&(e.directives=k)}function sl(e,t,n=Pe){N(e)&&(e=qn(e));for(const s in e){const r=e[s];let i;ee(r)?"default"in r?i=gt(r.from||s,r.default,!0):i=gt(r.from||s):i=gt(r),ce(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ns(e,t,n){Ce(N(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Zr(e,t,n,s){const r=s.includes(".")?Kr(n,s):()=>n[s];if(re(e)){const i=t[e];j(i)&&Qt(r,i)}else if(j(e))Qt(r,e.bind(n));else if(ee(e))if(N(e))e.forEach(i=>Zr(i,t,n,s));else{const i=j(e.handler)?e.handler.bind(n):t[e.handler];j(i)&&Qt(r,i,e)}}function hs(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(a=>ln(c,a,o,!0)),ln(c,t,o)),ee(t)&&i.set(t,c),c}function ln(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&ln(e,i,n,!0),r&&r.forEach(o=>ln(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=rl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const rl={data:$s,props:Hs,emits:Hs,methods:At,computed:At,beforeCreate:ue,created:ue,beforeMount:ue,mounted:ue,beforeUpdate:ue,updated:ue,beforeDestroy:ue,beforeUnmount:ue,destroyed:ue,unmounted:ue,activated:ue,deactivated:ue,errorCaptured:ue,serverPrefetch:ue,components:At,directives:At,watch:ol,provide:$s,inject:il};function $s(e,t){return t?e?function(){return oe(j(e)?e.call(this,this):e,j(t)?t.call(this,this):t)}:t:e}function il(e,t){return At(qn(e),qn(t))}function qn(e){if(N(e)){const t={};for(let n=0;n1)return n&&j(t)?t.call(s&&s.proxy):t}}function al(e,t,n,s=!1){const r={},i={};tn(i,xn,1),e.propsDefaults=Object.create(null),Gr(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:_o(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function ul(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let a=!1;if((s||o>0)&&!(o&16)){if(o&8){const d=e.vnode.dynamicProps;for(let p=0;p{c=!0;const[v,E]=ei(p,t,!0);oe(o,v),E&&l.push(...E)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!c)return ee(e)&&s.set(e,ft),ft;if(N(i))for(let d=0;d-1,E[1]=I<0||R-1||q(E,"default"))&&l.push(p)}}}const a=[o,l];return ee(e)&&s.set(e,a),a}function Bs(e){return e[0]!=="$"}function js(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Us(e,t){return js(e)===js(t)}function Ds(e,t){return N(t)?t.findIndex(n=>Us(n,e)):j(t)&&Us(t,e)?0:-1}const ti=e=>e[0]==="_"||e==="$stable",ps=e=>N(e)?e.map(Te):[Te(e)],dl=(e,t,n)=>{if(t._n)return t;const s=Mo((...r)=>ps(t(...r)),n);return s._c=!1,s},ni=(e,t,n)=>{const s=e._ctx;for(const r in e){if(ti(r))continue;const i=e[r];if(j(i))t[r]=dl(r,i,s);else if(i!=null){const o=ps(i);t[r]=()=>o}}},si=(e,t)=>{const n=ps(t);e.slots.default=()=>n},hl=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=z(t),tn(t,"_",n)):ni(t,e.slots={})}else e.slots={},t&&si(e,t);tn(e.slots,xn,1)},pl=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(oe(r,t),!n&&l===1&&delete r._):(i=!t.$stable,ni(t,r)),o=t}else t&&(si(e,t),o={default:1});if(i)for(const l in r)!ti(l)&&!(l in o)&&delete r[l]};function fn(e,t,n,s,r=!1){if(N(e)){e.forEach((v,E)=>fn(v,t&&(N(t)?t[E]:t),n,s,r));return}if(pt(s)&&!r)return;const i=s.shapeFlag&4?En(s.component)||s.component.proxy:s.el,o=r?null:i,{i:l,r:c}=e,a=t&&t.r,d=l.refs===te?l.refs={}:l.refs,p=l.setupState;if(a!=null&&a!==c&&(re(a)?(d[a]=null,q(p,a)&&(p[a]=null)):ce(a)&&(a.value=null)),j(c))We(c,l,12,[o,d]);else{const v=re(c),E=ce(c);if(v||E){const R=()=>{if(e.f){const I=v?q(p,c)?p[c]:d[c]:c.value;r?N(I)&&Qn(I,i):N(I)?I.includes(i)||I.push(i):v?(d[c]=[i],q(p,c)&&(p[c]=d[c])):(c.value=[i],e.k&&(d[e.k]=c.value))}else v?(d[c]=o,q(p,c)&&(p[c]=o)):E&&(c.value=o,e.k&&(d[e.k]=o))};o?(R.id=-1,de(R,n)):R()}}}let je=!1;const Yt=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Jt=e=>e.nodeType===8;function gl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:a}}=e,d=(_,b)=>{if(!b.hasChildNodes()){n(null,_,b),rn(),b._vnode=_;return}je=!1,p(b.firstChild,_,null,null,null),rn(),b._vnode=_,je&&console.error("Hydration completed but contains mismatches.")},p=(_,b,H,P,K,J=!1)=>{const V=Jt(_)&&_.data==="[",A=()=>I(_,b,H,P,K,V),{type:D,ref:U,shapeFlag:Y,patchFlag:O}=b;let k=_.nodeType;b.el=_,O===-2&&(J=!1,b.dynamicChildren=null);let S=null;switch(D){case _t:k!==3?b.children===""?(c(b.el=r(""),o(_),_),S=_):S=A():(_.data!==b.children&&(je=!0,_.data=b.children),S=i(_));break;case be:k!==8||V?S=A():S=i(_);break;case Ot:if(V&&(_=i(_),k=_.nodeType),k===1||k===3){S=_;const ge=!b.children.length;for(let X=0;X{J=J||!!b.dynamicChildren;const{type:V,props:A,patchFlag:D,shapeFlag:U,dirs:Y}=b,O=V==="input"&&Y||V==="option";if(O||D!==-1){if(Y&&Fe(b,null,H,"created"),A)if(O||!J||D&48)for(const S in A)(O&&S.endsWith("value")||Ht(S)&&!Rt(S))&&s(_,S,null,A[S],!1,void 0,H);else A.onClick&&s(_,"onClick",null,A.onClick,!1,void 0,H);let k;if((k=A&&A.onVnodeBeforeMount)&&ve(k,H,b),Y&&Fe(b,null,H,"beforeMount"),((k=A&&A.onVnodeMounted)||Y)&&Dr(()=>{k&&ve(k,H,b),Y&&Fe(b,null,H,"mounted")},P),U&16&&!(A&&(A.innerHTML||A.textContent))){let S=E(_.firstChild,b,_,H,P,K,J);for(;S;){je=!0;const ge=S;S=S.nextSibling,l(ge)}}else U&8&&_.textContent!==b.children&&(je=!0,_.textContent=b.children)}return _.nextSibling},E=(_,b,H,P,K,J,V)=>{V=V||!!b.dynamicChildren;const A=b.children,D=A.length;for(let U=0;U{const{slotScopeIds:V}=b;V&&(K=K?K.concat(V):V);const A=o(_),D=E(i(_),b,A,H,P,K,J);return D&&Jt(D)&&D.data==="]"?i(b.anchor=D):(je=!0,c(b.anchor=a("]"),A,D),D)},I=(_,b,H,P,K,J)=>{if(je=!0,b.el=null,J){const D=$(_);for(;;){const U=i(_);if(U&&U!==D)l(U);else break}}const V=i(_),A=o(_);return l(_),n(null,b,A,V,H,P,Yt(A),K),V},$=_=>{let b=0;for(;_;)if(_=i(_),_&&Jt(_)&&(_.data==="["&&b++,_.data==="]")){if(b===0)return i(_);b--}return _};return[d,p]}const de=Dr;function ml(e){return _l(e,gl)}function _l(e,t){const n=Hn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:a,setElementText:d,parentNode:p,nextSibling:v,setScopeId:E=Pe,insertStaticContent:R}=e,I=(f,u,h,m=null,g=null,C=null,T=!1,w=null,x=!!u.dynamicChildren)=>{if(f===u)return;f&&!Ge(f,u)&&(m=Dt(f),Ie(f,g,C,!0),f=null),u.patchFlag===-2&&(x=!1,u.dynamicChildren=null);const{type:y,ref:M,shapeFlag:F}=u;switch(y){case _t:$(f,u,h,m);break;case be:_(f,u,h,m);break;case Ot:f==null&&b(u,h,m,T);break;case he:O(f,u,h,m,g,C,T,w,x);break;default:F&1?K(f,u,h,m,g,C,T,w,x):F&6?k(f,u,h,m,g,C,T,w,x):(F&64||F&128)&&y.process(f,u,h,m,g,C,T,w,x,ot)}M!=null&&g&&fn(M,f&&f.ref,C,u||f,!u)},$=(f,u,h,m)=>{if(f==null)s(u.el=l(u.children),h,m);else{const g=u.el=f.el;u.children!==f.children&&a(g,u.children)}},_=(f,u,h,m)=>{f==null?s(u.el=c(u.children||""),h,m):u.el=f.el},b=(f,u,h,m)=>{[f.el,f.anchor]=R(f.children,u,h,m,f.el,f.anchor)},H=({el:f,anchor:u},h,m)=>{let g;for(;f&&f!==u;)g=v(f),s(f,h,m),f=g;s(u,h,m)},P=({el:f,anchor:u})=>{let h;for(;f&&f!==u;)h=v(f),r(f),f=h;r(u)},K=(f,u,h,m,g,C,T,w,x)=>{T=T||u.type==="svg",f==null?J(u,h,m,g,C,T,w,x):D(f,u,g,C,T,w,x)},J=(f,u,h,m,g,C,T,w)=>{let x,y;const{type:M,props:F,shapeFlag:L,transition:B,dirs:W}=f;if(x=f.el=o(f.type,C,F&&F.is,F),L&8?d(x,f.children):L&16&&A(f.children,x,null,m,g,C&&M!=="foreignObject",T,w),W&&Fe(f,null,m,"created"),V(x,f,f.scopeId,T,m),F){for(const Z in F)Z!=="value"&&!Rt(Z)&&i(x,Z,null,F[Z],C,f.children,m,g,Le);"value"in F&&i(x,"value",null,F.value),(y=F.onVnodeBeforeMount)&&ve(y,m,f)}W&&Fe(f,null,m,"beforeMount");const G=(!g||g&&!g.pendingBranch)&&B&&!B.persisted;G&&B.beforeEnter(x),s(x,u,h),((y=F&&F.onVnodeMounted)||G||W)&&de(()=>{y&&ve(y,m,f),G&&B.enter(x),W&&Fe(f,null,m,"mounted")},g)},V=(f,u,h,m,g)=>{if(h&&E(f,h),m)for(let C=0;C{for(let y=x;y{const w=u.el=f.el;let{patchFlag:x,dynamicChildren:y,dirs:M}=u;x|=f.patchFlag&16;const F=f.props||te,L=u.props||te;let B;h&&Je(h,!1),(B=L.onVnodeBeforeUpdate)&&ve(B,h,u,f),M&&Fe(u,f,h,"beforeUpdate"),h&&Je(h,!0);const W=g&&u.type!=="foreignObject";if(y?U(f.dynamicChildren,y,w,h,m,W,C):T||Q(f,u,w,null,h,m,W,C,!1),x>0){if(x&16)Y(w,u,F,L,h,m,g);else if(x&2&&F.class!==L.class&&i(w,"class",null,L.class,g),x&4&&i(w,"style",F.style,L.style,g),x&8){const G=u.dynamicProps;for(let Z=0;Z{B&&ve(B,h,u,f),M&&Fe(u,f,h,"updated")},m)},U=(f,u,h,m,g,C,T)=>{for(let w=0;w{if(h!==m){if(h!==te)for(const w in h)!Rt(w)&&!(w in m)&&i(f,w,h[w],null,T,u.children,g,C,Le);for(const w in m){if(Rt(w))continue;const x=m[w],y=h[w];x!==y&&w!=="value"&&i(f,w,y,x,T,u.children,g,C,Le)}"value"in m&&i(f,"value",h.value,m.value)}},O=(f,u,h,m,g,C,T,w,x)=>{const y=u.el=f?f.el:l(""),M=u.anchor=f?f.anchor:l("");let{patchFlag:F,dynamicChildren:L,slotScopeIds:B}=u;B&&(w=w?w.concat(B):B),f==null?(s(y,h,m),s(M,h,m),A(u.children,h,M,g,C,T,w,x)):F>0&&F&64&&L&&f.dynamicChildren?(U(f.dynamicChildren,L,h,g,C,T,w),(u.key!=null||g&&u===g.subTree)&&ri(f,u,!0)):Q(f,u,h,M,g,C,T,w,x)},k=(f,u,h,m,g,C,T,w,x)=>{u.slotScopeIds=w,f==null?u.shapeFlag&512?g.ctx.activate(u,h,m,T,x):S(u,h,m,g,C,T,x):ge(f,u,x)},S=(f,u,h,m,g,C,T)=>{const w=f.component=Al(f,m,g);if(jt(f)&&(w.ctx.renderer=ot),Rl(w),w.asyncDep){if(g&&g.registerDep(w,X),!f.el){const x=w.subTree=se(be);_(null,x,u,h)}return}X(w,f,u,h,g,C,T)},ge=(f,u,h)=>{const m=u.component=f.component;if($o(f,u,h))if(m.asyncDep&&!m.asyncResolved){ne(m,u,h);return}else m.next=u,Io(m.update),m.update();else u.el=f.el,m.vnode=u},X=(f,u,h,m,g,C,T)=>{const w=()=>{if(f.isMounted){let{next:M,bu:F,u:L,parent:B,vnode:W}=f,G=M,Z;Je(f,!1),M?(M.el=W.el,ne(f,M,T)):M=W,F&&Rn(F),(Z=M.props&&M.props.onVnodeBeforeUpdate)&&ve(Z,B,M,W),Je(f,!0);const ie=Pn(f),xe=f.subTree;f.subTree=ie,I(xe,ie,p(xe.el),Dt(xe),f,g,C),M.el=ie.el,G===null&&Ho(f,ie.el),L&&de(L,g),(Z=M.props&&M.props.onVnodeUpdated)&&de(()=>ve(Z,B,M,W),g)}else{let M;const{el:F,props:L}=u,{bm:B,m:W,parent:G}=f,Z=pt(u);if(Je(f,!1),B&&Rn(B),!Z&&(M=L&&L.onVnodeBeforeMount)&&ve(M,G,u),Je(f,!0),F&&An){const ie=()=>{f.subTree=Pn(f),An(F,f.subTree,f,g,null)};Z?u.type.__asyncLoader().then(()=>!f.isUnmounted&&ie()):ie()}else{const ie=f.subTree=Pn(f);I(null,ie,h,m,f,g,C),u.el=ie.el}if(W&&de(W,g),!Z&&(M=L&&L.onVnodeMounted)){const ie=u;de(()=>ve(M,G,ie),g)}(u.shapeFlag&256||G&&pt(G.vnode)&&G.vnode.shapeFlag&256)&&f.a&&de(f.a,g),f.isMounted=!0,u=h=m=null}},x=f.effect=new rs(w,()=>mn(y),f.scope),y=f.update=()=>x.run();y.id=f.uid,Je(f,!0),y()},ne=(f,u,h)=>{u.component=f;const m=f.vnode.props;f.vnode=u,f.next=null,ul(f,u.props,m,h),pl(f,u.children,h),vt(),Os(),wt()},Q=(f,u,h,m,g,C,T,w,x=!1)=>{const y=f&&f.children,M=f?f.shapeFlag:0,F=u.children,{patchFlag:L,shapeFlag:B}=u;if(L>0){if(L&128){Ut(y,F,h,m,g,C,T,w,x);return}else if(L&256){ze(y,F,h,m,g,C,T,w,x);return}}B&8?(M&16&&Le(y,g,C),F!==y&&d(h,F)):M&16?B&16?Ut(y,F,h,m,g,C,T,w,x):Le(y,g,C,!0):(M&8&&d(h,""),B&16&&A(F,h,m,g,C,T,w,x))},ze=(f,u,h,m,g,C,T,w,x)=>{f=f||ft,u=u||ft;const y=f.length,M=u.length,F=Math.min(y,M);let L;for(L=0;LM?Le(f,g,C,!0,!1,F):A(u,h,m,g,C,T,w,x,F)},Ut=(f,u,h,m,g,C,T,w,x)=>{let y=0;const M=u.length;let F=f.length-1,L=M-1;for(;y<=F&&y<=L;){const B=f[y],W=u[y]=x?Ke(u[y]):Te(u[y]);if(Ge(B,W))I(B,W,h,null,g,C,T,w,x);else break;y++}for(;y<=F&&y<=L;){const B=f[F],W=u[L]=x?Ke(u[L]):Te(u[L]);if(Ge(B,W))I(B,W,h,null,g,C,T,w,x);else break;F--,L--}if(y>F){if(y<=L){const B=L+1,W=BL)for(;y<=F;)Ie(f[y],g,C,!0),y++;else{const B=y,W=y,G=new Map;for(y=W;y<=L;y++){const me=u[y]=x?Ke(u[y]):Te(u[y]);me.key!=null&&G.set(me.key,y)}let Z,ie=0;const xe=L-W+1;let lt=!1,ys=0;const Ct=new Array(xe);for(y=0;y=xe){Ie(me,g,C,!0);continue}let Oe;if(me.key!=null)Oe=G.get(me.key);else for(Z=W;Z<=L;Z++)if(Ct[Z-W]===0&&Ge(me,u[Z])){Oe=Z;break}Oe===void 0?Ie(me,g,C,!0):(Ct[Oe-W]=y+1,Oe>=ys?ys=Oe:lt=!0,I(me,u[Oe],h,null,g,C,T,w,x),ie++)}const vs=lt?bl(Ct):ft;for(Z=vs.length-1,y=xe-1;y>=0;y--){const me=W+y,Oe=u[me],ws=me+1{const{el:C,type:T,transition:w,children:x,shapeFlag:y}=f;if(y&6){Ye(f.component.subTree,u,h,m);return}if(y&128){f.suspense.move(u,h,m);return}if(y&64){T.move(f,u,h,ot);return}if(T===he){s(C,u,h);for(let F=0;Fw.enter(C),g);else{const{leave:F,delayLeave:L,afterLeave:B}=w,W=()=>s(C,u,h),G=()=>{F(C,()=>{W(),B&&B()})};L?L(C,W,G):G()}else s(C,u,h)},Ie=(f,u,h,m=!1,g=!1)=>{const{type:C,props:T,ref:w,children:x,dynamicChildren:y,shapeFlag:M,patchFlag:F,dirs:L}=f;if(w!=null&&fn(w,null,h,f,!0),M&256){u.ctx.deactivate(f);return}const B=M&1&&L,W=!pt(f);let G;if(W&&(G=T&&T.onVnodeBeforeUnmount)&&ve(G,u,f),M&6)Ti(f.component,h,m);else{if(M&128){f.suspense.unmount(h,m);return}B&&Fe(f,null,u,"beforeUnmount"),M&64?f.type.remove(f,u,h,g,ot,m):y&&(C!==he||F>0&&F&64)?Le(y,u,h,!1,!0):(C===he&&F&384||!g&&M&16)&&Le(x,u,h),m&&_s(f)}(W&&(G=T&&T.onVnodeUnmounted)||B)&&de(()=>{G&&ve(G,u,f),B&&Fe(f,null,u,"unmounted")},h)},_s=f=>{const{type:u,el:h,anchor:m,transition:g}=f;if(u===he){Ei(h,m);return}if(u===Ot){P(f);return}const C=()=>{r(h),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(f.shapeFlag&1&&g&&!g.persisted){const{leave:T,delayLeave:w}=g,x=()=>T(h,C);w?w(f.el,C,x):x()}else C()},Ei=(f,u)=>{let h;for(;f!==u;)h=v(f),r(f),f=h;r(u)},Ti=(f,u,h)=>{const{bum:m,scope:g,update:C,subTree:T,um:w}=f;m&&Rn(m),g.stop(),C&&(C.active=!1,Ie(T,f,u,h)),w&&de(w,u),de(()=>{f.isUnmounted=!0},u),u&&u.pendingBranch&&!u.isUnmounted&&f.asyncDep&&!f.asyncResolved&&f.suspenseId===u.pendingId&&(u.deps--,u.deps===0&&u.resolve())},Le=(f,u,h,m=!1,g=!1,C=0)=>{for(let T=C;Tf.shapeFlag&6?Dt(f.component.subTree):f.shapeFlag&128?f.suspense.next():v(f.anchor||f.el),bs=(f,u,h)=>{f==null?u._vnode&&Ie(u._vnode,null,null,!0):I(u._vnode||null,f,u,null,null,null,h),Os(),rn(),u._vnode=f},ot={p:I,um:Ie,m:Ye,r:_s,mt:S,mc:A,pc:Q,pbc:U,n:Dt,o:e};let Tn,An;return t&&([Tn,An]=t(ot)),{render:bs,hydrate:Tn,createApp:cl(bs,Tn)}}function Je({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ri(e,t,n=!1){const s=e.children,r=t.children;if(N(s)&&N(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}const yl=e=>e.__isTeleport,he=Symbol.for("v-fgt"),_t=Symbol.for("v-txt"),be=Symbol.for("v-cmt"),Ot=Symbol.for("v-stc"),Ft=[];let Re=null;function ii(e=!1){Ft.push(Re=e?null:[])}function vl(){Ft.pop(),Re=Ft[Ft.length-1]||null}let $t=1;function Ks(e){$t+=e}function oi(e){return e.dynamicChildren=$t>0?Re||ft:null,vl(),$t>0&&Re&&Re.push(e),e}function zc(e,t,n,s,r,i){return oi(fi(e,t,n,s,r,i,!0))}function li(e,t,n,s,r){return oi(se(e,t,n,s,r,!0))}function an(e){return e?e.__v_isVNode===!0:!1}function Ge(e,t){return e.type===t.type&&e.key===t.key}const xn="__vInternal",ci=({key:e})=>e??null,Gt=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||ce(e)||j(e)?{i:fe,r:e,k:t,f:!!n}:e:null);function fi(e,t=null,n=null,s=0,r=null,i=e===he?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ci(t),ref:t&&Gt(t),scopeId:bn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:fe};return l?(gs(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=re(n)?8:16),$t>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const se=wl;function wl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Yr)&&(e=be),an(e)){const l=qe(e,t,!0);return n&&gs(l,n),$t>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag|=-2,l}if(Fl(e)&&(e=e.__vccOpts),t){t=Cl(t);let{class:l,style:c}=t;l&&!re(l)&&(t.class=ns(l)),ee(c)&&(Fr(c)&&!N(c)&&(c=oe({},c)),t.style=ts(c))}const o=re(e)?1:Bo(e)?128:yl(e)?64:ee(e)?4:j(e)?2:0;return fi(e,t,n,s,r,o,i,!0)}function Cl(e){return e?Fr(e)||xn in e?oe({},e):e:null}function qe(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:o}=e,l=t?xl(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&ci(l),ref:t&&t.ref?n&&r?N(r)?r.concat(Gt(t)):[r,Gt(t)]:Gt(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==he?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&qe(e.ssContent),ssFallback:e.ssFallback&&qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function ai(e=" ",t=0){return se(_t,null,e,t)}function Yc(e,t){const n=se(Ot,null,e);return n.staticCount=t,n}function Jc(e="",t=!1){return t?(ii(),li(be,null,e)):se(be,null,e)}function Te(e){return e==null||typeof e=="boolean"?se(be):N(e)?se(he,null,e.slice()):typeof e=="object"?Ke(e):se(_t,null,String(e))}function Ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:qe(e)}function gs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(N(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),gs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(xn in t)?t._ctx=fe:r===3&&fe&&(fe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else j(t)?(t={default:t,_ctx:fe},n=32):(t=String(t),s&64?(n=16,t=[ai(t)]):n=8);e.children=t,e.shapeFlag|=n}function xl(...e){const t={};for(let n=0;nle||fe;let ms,ct,ks="__VUE_INSTANCE_SETTERS__";(ct=Hn()[ks])||(ct=Hn()[ks]=[]),ct.push(e=>le=e),ms=e=>{ct.length>1?ct.forEach(t=>t(e)):ct[0](e)};const bt=e=>{ms(e),e.scope.on()},rt=()=>{le&&le.scope.off(),ms(null)};function di(e){return e.vnode.shapeFlag&4}let yt=!1;function Rl(e,t=!1){yt=t;const{props:n,children:s}=e.vnode,r=di(e);al(e,n,r,t),hl(e,s);const i=r?Pl(e,t):void 0;return yt=!1,i}function Pl(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Pt(new Proxy(e.ctx,el));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?pi(e):null;bt(e),vt();const i=We(s,e,0,[e.props,r]);if(wt(),rt(),gr(i)){if(i.then(rt,rt),t)return i.then(o=>{Ws(e,o,t)}).catch(o=>{Bt(o,e,0)});e.asyncDep=i}else Ws(e,i,t)}else hi(e,t)}function Ws(e,t,n){j(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=Nr(t)),hi(e,n)}let Vs;function hi(e,t,n){const s=e.type;if(!e.render){if(!t&&Vs&&!s.render){const r=s.template||hs(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,a=oe(oe({isCustomElement:i,delimiters:l},o),c);s.render=Vs(r,a)}}e.render=s.render||Pe}bt(e),vt(),nl(e),wt(),rt()}function Il(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return pe(e,"get","$attrs"),t[n]}}))}function pi(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Il(e)},slots:e.slots,emit:e.emit,expose:t}}function En(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Nr(Pt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in It)return It[n](e)},has(t,n){return n in t||n in It}}))}function Ol(e,t=!0){return j(e)?e.displayName||e.name:e.name||t&&e.__name}function Fl(e){return j(e)&&"__vccOpts"in e}const Ee=(e,t)=>Ao(e,t,yt);function Yn(e,t,n){const s=arguments.length;return s===2?ee(t)&&!N(t)?an(t)?se(e,null,[t]):se(e,t):se(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&an(n)&&(n=[n]),se(e,t,n))}const Sl=Symbol.for("v-scx"),Ml=()=>gt(Sl),Ll="3.3.4",Nl="http://www.w3.org/2000/svg",et=typeof document<"u"?document:null,qs=et&&et.createElement("template"),$l={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t?et.createElementNS(Nl,e):et.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>et.createTextNode(e),createComment:e=>et.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>et.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{qs.innerHTML=s?`${e}`:e;const l=qs.content;if(s){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Hl(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Bl(e,t,n){const s=e.style,r=re(n);if(n&&!r){if(t&&!re(t))for(const i in t)n[i]==null&&Jn(s,i,"");for(const i in n)Jn(s,i,n[i])}else{const i=s.display;r?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const zs=/\s*!important$/;function Jn(e,t,n){if(N(n))n.forEach(s=>Jn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=jl(e,t);zs.test(n)?e.setProperty(it(s),n.replace(zs,""),"important"):e[s]=n}}const Ys=["Webkit","Moz","ms"],Sn={};function jl(e,t){const n=Sn[t];if(n)return n;let s=Me(t);if(s!=="filter"&&s in e)return Sn[t]=s;s=hn(s);for(let r=0;rMn||(ql.then(()=>Mn=0),Mn=Date.now());function Yl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Ce(Jl(s,n.value),t,5,[s])};return n.value=e,n.attached=zl(),n}function Jl(e,t){if(N(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Zs=/^on[a-z]/,Xl=(e,t,n,s,r=!1,i,o,l,c)=>{t==="class"?Hl(e,s,r):t==="style"?Bl(e,n,s):Ht(t)?Zn(t)||Wl(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Zl(e,t,s,r))?Dl(e,t,s,i,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Ul(e,t,s,r))};function Zl(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&Zs.test(t)&&j(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Zs.test(t)&&re(n)?!1:t in e}const Ue="transition",xt="animation",gi=(e,{slots:t})=>Yn(ko,Ql(e),t);gi.displayName="Transition";const mi={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};gi.props=oe({},kr,mi);const Xe=(e,t=[])=>{N(e)?e.forEach(n=>n(...t)):e&&e(...t)},Qs=e=>e?N(e)?e.some(t=>t.length>1):e.length>1:!1;function Ql(e){const t={};for(const O in e)O in mi||(t[O]=e[O]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:a=o,appearToClass:d=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:v=`${n}-leave-active`,leaveToClass:E=`${n}-leave-to`}=e,R=Gl(r),I=R&&R[0],$=R&&R[1],{onBeforeEnter:_,onEnter:b,onEnterCancelled:H,onLeave:P,onLeaveCancelled:K,onBeforeAppear:J=_,onAppear:V=b,onAppearCancelled:A=H}=t,D=(O,k,S)=>{Ze(O,k?d:l),Ze(O,k?a:o),S&&S()},U=(O,k)=>{O._isLeaving=!1,Ze(O,p),Ze(O,E),Ze(O,v),k&&k()},Y=O=>(k,S)=>{const ge=O?V:b,X=()=>D(k,O,S);Xe(ge,[k,X]),Gs(()=>{Ze(k,O?c:i),De(k,O?d:l),Qs(ge)||er(k,s,I,X)})};return oe(t,{onBeforeEnter(O){Xe(_,[O]),De(O,i),De(O,o)},onBeforeAppear(O){Xe(J,[O]),De(O,c),De(O,a)},onEnter:Y(!1),onAppear:Y(!0),onLeave(O,k){O._isLeaving=!0;const S=()=>U(O,k);De(O,p),nc(),De(O,v),Gs(()=>{O._isLeaving&&(Ze(O,p),De(O,E),Qs(P)||er(O,s,$,S))}),Xe(P,[O,S])},onEnterCancelled(O){D(O,!1),Xe(H,[O])},onAppearCancelled(O){D(O,!0),Xe(A,[O])},onLeaveCancelled(O){U(O),Xe(K,[O])}})}function Gl(e){if(e==null)return null;if(ee(e))return[Ln(e.enter),Ln(e.leave)];{const t=Ln(e);return[t,t]}}function Ln(e){return Mi(e)}function De(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Ze(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Gs(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ec=0;function er(e,t,n,s){const r=e._endId=++ec,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=tc(e,t);if(!o)return s();const a=o+"end";let d=0;const p=()=>{e.removeEventListener(a,v),i()},v=E=>{E.target===e&&++d>=c&&p()};setTimeout(()=>{d(n[R]||"").split(", "),r=s(`${Ue}Delay`),i=s(`${Ue}Duration`),o=tr(r,i),l=s(`${xt}Delay`),c=s(`${xt}Duration`),a=tr(l,c);let d=null,p=0,v=0;t===Ue?o>0&&(d=Ue,p=o,v=i.length):t===xt?a>0&&(d=xt,p=a,v=c.length):(p=Math.max(o,a),d=p>0?o>a?Ue:xt:null,v=d?d===Ue?i.length:c.length:0);const E=d===Ue&&/\b(transform|all)(,|$)/.test(s(`${Ue}Property`).toString());return{type:d,timeout:p,propCount:v,hasTransform:E}}function tr(e,t){for(;e.lengthnr(n)+nr(e[s])))}function nr(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function nc(){return document.body.offsetHeight}const sc=["ctrl","shift","alt","meta"],rc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>sc.some(n=>e[`${n}Key`]&&!t.includes(n))},Xc=(e,t)=>(n,...s)=>{for(let r=0;rn=>{if(!("key"in n))return;const s=it(n.key);if(t.some(r=>r===s||ic[r]===s))return e(n)},Qc={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Et(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),Et(e,!0),s.enter(e)):s.leave(e,()=>{Et(e,!1)}):Et(e,t))},beforeUnmount(e,{value:t}){Et(e,t)}};function Et(e,t){e.style.display=t?e._vod:"none"}const oc=oe({patchProp:Xl},$l);let Nn,sr=!1;function lc(){return Nn=sr?Nn:ml(oc),sr=!0,Nn}const Gc=(...e)=>{const t=lc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=cc(s);if(r)return n(r,!0,r instanceof SVGElement)},t};function cc(e){return re(e)?document.querySelector(e):e}const ef=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},fc="modulepreload",ac=function(e){return"/"+e},rr={},tf=function(t,n,s){if(!n||n.length===0)return t();const r=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=ac(i),i in rr)return;rr[i]=!0;const o=i.endsWith(".css"),l=o?'[rel="stylesheet"]':"";if(!!s)for(let d=r.length-1;d>=0;d--){const p=r[d];if(p.href===i&&(!o||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${l}`))return;const a=document.createElement("link");if(a.rel=o?"stylesheet":fc,o||(a.as="script",a.crossOrigin=""),a.href=i,document.head.appendChild(a),o)return new Promise((d,p)=>{a.addEventListener("load",d),a.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t()).catch(i=>{const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i})},uc=window.__VP_SITE_DATA__,_i=/^[a-z]+:/i,nf=/^pathname:\/\//,sf="vitepress-theme-appearance",bi=/#.*$/,dc=/(index)?\.(md|html)$/,we=typeof document<"u",yi={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function hc(e,t,n=!1){if(t===void 0)return!1;if(e=ir(`/${e}`),n)return new RegExp(t).test(e);if(ir(t)!==e)return!1;const s=t.match(bi);return s?(we?location.hash:"")===s[0]:!0}function ir(e){return decodeURI(e).replace(bi,"").replace(dc,"")}function pc(e){return _i.test(e)}function gc(e,t){var s,r,i,o,l,c,a;const n=Object.keys(e.locales).find(d=>d!=="root"&&!pc(d)&&hc(t,`/${d}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:wi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function vi(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=mc(e.title,s);return`${n}${r}`}function mc(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function _c(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function wi(e,t){return[...e.filter(n=>!_c(t,n)),...t]}const bc=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,yc=/^[a-z]:/i;function or(e){const t=yc.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(bc,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const vc=Symbol(),nt=bo(uc);function rf(e){const t=Ee(()=>gc(nt.value,e.data.relativePath));return{site:t,theme:Ee(()=>t.value.themeConfig),page:Ee(()=>e.data),frontmatter:Ee(()=>e.data.frontmatter),params:Ee(()=>e.data.params),lang:Ee(()=>t.value.lang),dir:Ee(()=>t.value.dir),localeIndex:Ee(()=>t.value.localeIndex||"root"),title:Ee(()=>vi(t.value,e.data)),description:Ee(()=>e.data.description||t.value.description),isDark:dt(!1)}}function wc(){const e=gt(vc);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Cc(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function lr(e){return _i.test(e)||e.startsWith(".")?e:Cc(nt.value.base,e)}function xc(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),we){const n="/";t=or(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${or(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let en=[];function of(e){en.push(e),Cn(()=>{en=en.filter(t=>t!==e)})}const Ec=Symbol(),cr="http://a.com",Tc=()=>({path:"/",component:null,data:yi});function lf(e,t){const n=gn(Tc()),s={route:n,go:r};async function r(l=we?location.href:"/"){var a,d;if(await((a=s.onBeforeRouteChange)==null?void 0:a.call(s,l))===!1)return;const c=new URL(l,cr);nt.value.cleanUrls||!c.pathname.endsWith("/")&&!c.pathname.endsWith(".html")&&(c.pathname+=".html",l=c.pathname+c.search+c.hash),ur(l),await o(l),await((d=s.onAfterRouteChanged)==null?void 0:d.call(s,l))}let i=null;async function o(l,c=0,a=!1){var v;if(await((v=s.onBeforePageLoad)==null?void 0:v.call(s,l))===!1)return;const d=new URL(l,cr),p=i=d.pathname;try{let E=await e(p);if(!E)throw new Error(`Page not found: ${p}`);if(i===p){i=null;const{default:R,__pageData:I}=E;if(!R)throw new Error(`Invalid route component: ${R}`);n.path=we?p:lr(p),n.component=Pt(R),n.data=Pt(I),we&&Hr(()=>{let $=nt.value.base+I.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!nt.value.cleanUrls&&!$.endsWith("/")&&($+=".html"),$!==d.pathname&&(d.pathname=$,l=$+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!c){let _=null;try{_=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(b){console.warn(b)}if(_){fr(_,d.hash);return}}window.scrollTo(0,c)})}}catch(E){if(!/fetch|Page not found/.test(E.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(E),!a)try{const R=await fetch(nt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await R.json(),await o(l,c,!0);return}catch{}i===p&&(i=null,n.path=we?p:lr(p),n.component=t?Pt(t):null,n.data=yi)}}return we&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const a=l.target.closest("a");if(a&&!a.closest(".vp-raw")&&(a instanceof SVGElement||!a.download)){const{target:d}=a,{href:p,origin:v,pathname:E,hash:R,search:I}=new URL(a.href instanceof SVGAnimatedString?a.href.animVal:a.href,a.baseURI),$=window.location,_=E.match(/\.\w+$/);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!d&&v===$.origin&&!(_&&_[0]!==".html")&&(l.preventDefault(),E===$.pathname&&I===$.search?(R!==$.hash&&(history.pushState(null,"",R),window.dispatchEvent(new Event("hashchange"))),R?fr(a,R,a.classList.contains("header-anchor")):(ur(p),window.scrollTo(0,0))):r(p))}},{capture:!0}),window.addEventListener("popstate",l=>{o(location.href,l.state&&l.state.scrollPosition||0)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Ac(){const e=gt(Ec);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ci(){return Ac().route}function fr(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let a=function(){!n||Math.abs(c-window.scrollY)>window.innerHeight?window.scrollTo(0,c):window.scrollTo({left:0,top:c,behavior:"smooth"})},r=nt.value.scrollOffset,i=0,o=24;if(typeof r=="object"&&"padding"in r&&(o=r.padding,r=r.selector),typeof r=="number")i=r;else if(typeof r=="string")i=ar(r,o);else if(Array.isArray(r))for(const d of r){const p=ar(d,o);if(p){i=p;break}}const l=parseInt(window.getComputedStyle(s).paddingTop,10),c=window.scrollY+s.getBoundingClientRect().top-i+l;requestAnimationFrame(a)}}function ar(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}function ur(e){we&&e!==location.href&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",e))}const dr=()=>en.forEach(e=>e()),cf=us({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ci(),{site:n}=wc();return()=>Yn(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?Yn(t.component,{onVnodeMounted:dr,onVnodeUpdated:dr}):"404 Page Not Found"])}}),ff=us({setup(e,{slots:t}){const n=dt(!1);return wn(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function af(){we&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(a=>a.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function uf(){if(we){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className);let l="";i.querySelectorAll("span.line:not(.diff.remove)").forEach(c=>l+=(c.textContent||"")+` +`),l=l.slice(0,-1),o&&(l=l.replace(/^ *(\$|>) /gm,"").trim()),Rc(l).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const c=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,c)})}})}}async function Rc(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function df(e,t){let n=[],s=!0;const r=i=>{if(s){s=!1;return}n.forEach(o=>document.head.removeChild(o)),n=[],i.forEach(o=>{const l=hr(o);document.head.appendChild(l),n.push(l)})};jo(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[];document.title=vi(o,i);const a=l||o.description;let d=document.querySelector("meta[name=description]");d?d.setAttribute("content",a):hr(["meta",{name:"description",content:a}]),r(wi(o.head,Ic(c)))})}function hr([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),s}function Pc(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Ic(e){return e.filter(t=>!Pc(t))}const $n=new Set,xi=()=>document.createElement("link"),Oc=e=>{const t=xi();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Fc=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let Xt;const Sc=we&&(Xt=xi())&&Xt.relList&&Xt.relList.supports&&Xt.relList.supports("prefetch")?Oc:Fc;function hf(){if(!we||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!$n.has(c)){$n.add(c);const a=xc(c);a&&Sc(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):$n.add(l))})})};wn(s);const r=Ci();Qt(()=>r.path,s),Cn(()=>{n&&n.disconnect()})}export{qc as $,fi as A,Mc as B,li as C,Jc as D,of as E,he as F,se as G,$c as H,Hc as I,Wc as J,Mo as K,Kc as L,_i as M,ai as N,Ci as O,nf as P,xl as Q,gt as R,ts as S,gi as T,Yc as U,sf as V,fl as W,Vc as X,Zc as Y,Xc as Z,ef as _,Or as a,zr as a0,Nc as a1,jc as a2,Qc as a3,gn as a4,Uc as a5,tf as a6,df as a7,Ec as a8,rf as a9,vc as aa,cf as ab,ff as ac,nt as ad,Gc as ae,lf as af,xc as ag,hf as ah,uf as ai,af as aj,Yn as ak,jo as b,Ee as c,ui as d,wn as e,wc as f,Ki as g,lr as h,pc as i,hc as j,we as k,Cn as l,Bc as m,Hr as n,Lc as o,Jo as p,us as q,dt as r,bo as s,Dc as t,vo as u,ii as v,Qt as w,zc as x,kc as y,ns as z}; diff --git a/assets/chunks/theme.51df62a6.js b/assets/chunks/theme.51df62a6.js new file mode 100644 index 0000000..d4b24a8 --- /dev/null +++ b/assets/chunks/theme.51df62a6.js @@ -0,0 +1,7 @@ +import{u as i,r as V,a as Ye,w as G,g as ft,o as ht,b as pe,s as fe,n as Je,c as k,d as mt,e as D,f as gt,i as yt,P as bt,h as Le,j as Z,k as he,l as Me,m as Te,p as $t,q as y,t as J,v as r,x as l,F as B,y as x,z as I,A as _,B as T,C as b,D as h,_ as g,E as ne,G as f,H as F,I as O,J as v,K as p,L as K,M as Xe,N as E,O as me,T as Ce,Q as le,R as Ne,S as Qe,U as kt,V as je,W as ce,X as wt,Y as Pt,Z as Vt,$ as St}from"./framework.187e34d2.js";function Ae(n){return ft()?(ht(n),!0):!1}function ge(n){return typeof n=="function"?n():i(n)}const Lt=typeof window<"u"&&typeof document<"u",Mt=Object.prototype.toString,Tt=n=>Mt.call(n)==="[object Object]",Ct=()=>{};function Nt(n,e){function t(...s){return new Promise((o,a)=>{Promise.resolve(n(()=>e.apply(this,s),{fn:e,thisArg:this,args:s})).then(o).catch(a)})}return t}const Ze=n=>n();function At(n=Ze){const e=V(!0);function t(){e.value=!1}function s(){e.value=!0}const o=(...a)=>{e.value&&n(...a)};return{isActive:Ye(e),pause:t,resume:s,eventFilter:o}}function It(n,e,t={}){const{eventFilter:s=Ze,...o}=t;return G(n,Nt(s,e),o)}function Bt(n,e,t={}){const{eventFilter:s,...o}=t,{eventFilter:a,pause:c,resume:u,isActive:d}=At(s);return{stop:It(n,e,{...o,eventFilter:a}),pause:c,resume:u,isActive:d}}function ke(n){var e;const t=ge(n);return(e=t==null?void 0:t.$el)!=null?e:t}const Y=Lt?window:void 0;function we(...n){let e,t,s,o;if(typeof n[0]=="string"||Array.isArray(n[0])?([t,s,o]=n,e=Y):[e,t,s,o]=n,!e)return Ct;Array.isArray(t)||(t=[t]),Array.isArray(s)||(s=[s]);const a=[],c=()=>{a.forEach(P=>P()),a.length=0},u=(P,w,C,$)=>(P.addEventListener(w,C,$),()=>P.removeEventListener(w,C,$)),d=G(()=>[ke(e),ge(o)],([P,w])=>{if(c(),!P)return;const C=Tt(w)?{...w}:w;a.push(...t.flatMap($=>s.map(S=>u(P,$,S,C))))},{immediate:!0,flush:"post"}),m=()=>{d(),c()};return Ae(m),m}function xt(){const n=V(!1);return mt()&&D(()=>{n.value=!0}),n}function et(n){const e=xt();return k(()=>(e.value,!!n()))}function Pe(n,e={}){const{window:t=Y}=e,s=et(()=>t&&"matchMedia"in t&&typeof t.matchMedia=="function");let o;const a=V(!1),c=m=>{a.value=m.matches},u=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",c):o.removeListener(c))},d=pe(()=>{s.value&&(u(),o=t.matchMedia(ge(n)),"addEventListener"in o?o.addEventListener("change",c):o.addListener(c),a.value=o.matches)});return Ae(()=>{d(),u(),o=void 0}),a}const re=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},ie="__vueuse_ssr_handlers__",Ht=Et();function Et(){return ie in re||(re[ie]=re[ie]||{}),re[ie]}function zt(n,e){return Ht[n]||e}function Dt(n){return n==null?"any":n instanceof Set?"set":n instanceof Map?"map":n instanceof Date?"date":typeof n=="boolean"?"boolean":typeof n=="string"?"string":typeof n=="object"?"object":Number.isNaN(n)?"any":"number"}const Ft={boolean:{read:n=>n==="true",write:n=>String(n)},object:{read:n=>JSON.parse(n),write:n=>JSON.stringify(n)},number:{read:n=>Number.parseFloat(n),write:n=>String(n)},any:{read:n=>n,write:n=>String(n)},string:{read:n=>n,write:n=>String(n)},map:{read:n=>new Map(JSON.parse(n)),write:n=>JSON.stringify(Array.from(n.entries()))},set:{read:n=>new Set(JSON.parse(n)),write:n=>JSON.stringify(Array.from(n))},date:{read:n=>new Date(n),write:n=>n.toISOString()}},Ue="vueuse-storage";function Ot(n,e,t,s={}){var o;const{flush:a="pre",deep:c=!0,listenToStorageChanges:u=!0,writeDefaults:d=!0,mergeDefaults:m=!1,shallow:P,window:w=Y,eventFilter:C,onError:$=A=>{console.error(A)}}=s,S=(P?fe:V)(e);if(!t)try{t=zt("getDefaultStorage",()=>{var A;return(A=Y)==null?void 0:A.localStorage})()}catch(A){$(A)}if(!t)return S;const N=ge(e),M=Dt(N),z=(o=s.serializer)!=null?o:Ft[M],{pause:X,resume:j}=Bt(S,()=>ae(S.value),{flush:a,deep:c,eventFilter:C});return w&&u&&(we(w,"storage",be),we(w,Ue,pt)),be(),S;function ae(A){try{if(A==null)t.removeItem(n);else{const H=z.write(A),W=t.getItem(n);W!==H&&(t.setItem(n,H),w&&w.dispatchEvent(new CustomEvent(Ue,{detail:{key:n,oldValue:W,newValue:H,storageArea:t}})))}}catch(H){$(H)}}function vt(A){const H=A?A.newValue:t.getItem(n);if(H==null)return d&&N!==null&&t.setItem(n,z.write(N)),N;if(!A&&m){const W=z.read(H);return typeof m=="function"?m(W,N):M==="object"&&!Array.isArray(W)?{...N,...W}:W}else return typeof H!="string"?H:z.read(H)}function pt(A){be(A.detail)}function be(A){if(!(A&&A.storageArea!==t)){if(A&&A.key==null){S.value=N;return}if(!(A&&A.key!==n)){X();try{(A==null?void 0:A.newValue)!==z.write(S.value)&&(S.value=vt(A))}catch(H){$(H)}finally{A?Je(j):j()}}}}}function Zi(n,e,t={}){const{window:s=Y,...o}=t;let a;const c=et(()=>s&&"ResizeObserver"in s),u=()=>{a&&(a.disconnect(),a=void 0)},d=k(()=>Array.isArray(n)?n.map(w=>ke(w)):[ke(n)]),m=G(d,w=>{if(u(),c.value&&s){a=new ResizeObserver(e);for(const C of w)C&&a.observe(C,o)}},{immediate:!0,flush:"post",deep:!0}),P=()=>{u(),m()};return Ae(P),{isSupported:c,stop:P}}function el(n,e,t={}){const{window:s=Y}=t;return Ot(n,e,s==null?void 0:s.localStorage,t)}function tt(n={}){const{window:e=Y}=n;if(!e)return{x:V(0),y:V(0)};const t=V(e.scrollX),s=V(e.scrollY);return we(e,"scroll",()=>{t.value=e.scrollX,s.value=e.scrollY},{capture:!1,passive:!0}),{x:t,y:s}}const L=gt;function Gt(n,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(n,e):(n(),s=!0,setTimeout(()=>{s=!1},e))}}function Ve(n){return/^\//.test(n)?n:`/${n}`}function se(n){if(yt(n))return n.replace(bt,"");const{site:e}=L(),{pathname:t,search:s,hash:o}=new URL(n,"http://a.com"),a=t.endsWith("/")||t.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,e.value.cleanUrls?"":".html")}${s}${o}`);return Le(a)}function nt(n,e){if(Array.isArray(n))return ue(n);if(n==null)return[];e=Ve(e);const t=Object.keys(n).sort((o,a)=>a.split("/").length-o.split("/").length).find(o=>e.startsWith(Ve(o))),s=t?n[t]:[];return Array.isArray(s)?ue(s):ue(s.items,s.base)}function Rt(n){const e=[];let t=0;for(const s in n){const o=n[s];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function jt(n){const e=[];function t(s){for(const o of s)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(n),e}function Se(n,e){return Array.isArray(e)?e.some(t=>Se(n,t)):Z(n,e.link)?!0:e.items?Se(n,e.items):!1}function ue(n,e){return[...n].map(t=>{const s={...t},o=s.base||e;return o&&s.link&&(s.link=o+s.link),s.items&&(s.items=ue(s.items,o)),s})}function R(){const{frontmatter:n,page:e,theme:t}=L(),s=Pe("(min-width: 960px)"),o=V(!1),a=k(()=>{const S=t.value.sidebar,N=e.value.relativePath;return S?nt(S,N):[]}),c=k(()=>n.value.sidebar!==!1&&a.value.length>0&&n.value.layout!=="home"),u=k(()=>d?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),d=k(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),m=k(()=>c.value&&s.value),P=k(()=>c.value?Rt(a.value):[]);function w(){o.value=!0}function C(){o.value=!1}function $(){o.value?C():w()}return{isOpen:o,sidebar:a,sidebarGroups:P,hasSidebar:c,hasAside:d,leftAside:u,isSidebarEnabled:m,open:w,close:C,toggle:$}}function Ut(n,e){let t;pe(()=>{t=n.value?document.activeElement:void 0}),D(()=>{window.addEventListener("keyup",s)}),Me(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}const st=V(he?location.hash:"");he&&window.addEventListener("hashchange",()=>{st.value=location.hash});function Wt(n){const{page:e}=L(),t=V(!1),s=k(()=>n.value.collapsed!=null),o=k(()=>!!n.value.link),a=V(!1),c=()=>{a.value=Z(e.value.relativePath,n.value.link)};G([e,n,st],c),D(c);const u=k(()=>a.value?!0:n.value.items?Se(e.value.relativePath,n.value.items):!1),d=k(()=>!!(n.value.items&&n.value.items.length));pe(()=>{t.value=!!(s.value&&n.value.collapsed)}),Te(()=>{(a.value||u.value)&&(t.value=!1)});function m(){s.value&&(t.value=!t.value)}return{collapsed:t,collapsible:s,isLink:o,isActiveLink:a,hasActiveLink:u,hasChildren:d,toggle:m}}function qt(){const{hasSidebar:n}=R(),e=Pe("(min-width: 960px)"),t=Pe("(min-width: 1280px)");return{isAsideEnabled:k(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const Kt=71;function Ie(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function Yt(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;n=n.filter(c=>c.level>=s&&c.level<=o);const a=[];e:for(let c=0;c=0;d--){const m=n[d];if(m.level{requestAnimationFrame(a),window.addEventListener("scroll",s)}),$t(()=>{c(location.hash)}),Me(()=>{window.removeEventListener("scroll",s)});function a(){if(!t.value)return;const u=[].slice.call(n.value.querySelectorAll(".outline-link")),d=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter($=>u.some(S=>S.hash===$.hash&&$.offsetParent!==null)),m=window.scrollY,P=window.innerHeight,w=document.body.offsetHeight,C=Math.abs(m+P-w)<1;if(d.length&&C){c(d[d.length-1].hash);return}for(let $=0;${if(!t.textContent||!t.id)return;let s="";function o(a){if(!a.classList.contains("badge"))for(let c=0;c{const o=J("VPDocOutlineItem",!0);return r(),l("ul",{class:I(t.root?"root":"nested")},[(r(!0),l(B,null,x(t.headers,({children:a,link:c,title:u})=>(r(),l("li",null,[_("a",{class:"outline-link",href:c,onClick:e,title:u},T(u),9,Qt),a!=null&&a.length?(r(),b(o,{key:0,headers:a},null,8,["headers"])):h("",!0)]))),256))],2)}}});const xe=g(Zt,[["__scopeId","data-v-463da30f"]]),en=n=>(F("data-v-c834746b"),n=n(),O(),n),tn={class:"content"},nn={class:"outline-title"},sn={"aria-labelledby":"doc-outline-aria-label"},on=en(()=>_("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),an=y({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=L(),s=fe([]);ne(()=>{s.value=Be(e.value.outline??t.value.outline)});const o=V(),a=V();return Jt(o,a),(c,u)=>(r(),l("div",{class:I(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:o},[_("div",tn,[_("div",{class:"outline-marker",ref_key:"marker",ref:a},null,512),_("div",nn,T(i(Ie)(i(t))),1),_("nav",sn,[on,f(xe,{headers:s.value,root:!0},null,8,["headers"])])])],2))}});const rn=g(an,[["__scopeId","data-v-c834746b"]]),ln={class:"VPDocAsideCarbonAds"},cn=y({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,s)=>(r(),l("div",ln,[f(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),un=n=>(F("data-v-cb998dce"),n=n(),O(),n),dn={class:"VPDocAside"},_n=un(()=>_("div",{class:"spacer"},null,-1)),vn=y({__name:"VPDocAside",setup(n){const{theme:e}=L();return(t,s)=>(r(),l("div",dn,[v(t.$slots,"aside-top",{},void 0,!0),v(t.$slots,"aside-outline-before",{},void 0,!0),f(rn),v(t.$slots,"aside-outline-after",{},void 0,!0),_n,v(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(r(),b(cn,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):h("",!0),v(t.$slots,"aside-ads-after",{},void 0,!0),v(t.$slots,"aside-bottom",{},void 0,!0)]))}});const pn=g(vn,[["__scopeId","data-v-cb998dce"]]);function fn(){const{theme:n,page:e}=L();return k(()=>{const{text:t="Edit this page",pattern:s=""}=n.value.editLink||{},{relativePath:o}=e.value;let a=s.replace(/:path/g,o);return n.value.crowdin&&(a=a.replace(/:id/g,n.value.crowdin[o.split("/").slice(1).join("/")])),{url:a,text:t}})}function hn(){const{page:n,theme:e,frontmatter:t}=L();return k(()=>{var d,m,P,w,C,$,S,N;const s=nt(e.value.sidebar,n.value.relativePath),o=jt(s),a=o.findIndex(M=>Z(n.value.relativePath,M.link)),c=((d=e.value.docFooter)==null?void 0:d.prev)===!1&&!t.value.prev||t.value.prev===!1,u=((m=e.value.docFooter)==null?void 0:m.next)===!1&&!t.value.next||t.value.next===!1;return{prev:c?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((P=o[a-1])==null?void 0:P.docFooterText)??((w=o[a-1])==null?void 0:w.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((C=o[a-1])==null?void 0:C.link)},next:u?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??(($=o[a+1])==null?void 0:$.docFooterText)??((S=o[a+1])==null?void 0:S.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=o[a+1])==null?void 0:N.link)}}})}const mn={},gn={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},yn=_("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),bn=_("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),$n=[yn,bn];function kn(n,e){return r(),l("svg",gn,$n)}const wn=g(mn,[["render",kn]]),U=y({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=k(()=>e.tag??(e.href?"a":"span")),s=k(()=>e.href&&Xe.test(e.href));return(o,a)=>(r(),b(K(t.value),{class:I(["VPLink",{link:o.href,"vp-external-link-icon":s.value,"no-icon":o.noIcon}]),href:o.href?i(se)(o.href):void 0,target:o.target??(s.value?"_blank":void 0),rel:o.rel??(s.value?"noreferrer":void 0)},{default:p(()=>[v(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Pn={class:"VPLastUpdated"},Vn=["datetime"],Sn=y({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t}=L(),s=k(()=>new Date(t.value.lastUpdated)),o=k(()=>s.value.toISOString()),a=V("");return D(()=>{pe(()=>{var c;a.value=new Intl.DateTimeFormat(void 0,((c=e.value.lastUpdated)==null?void 0:c.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(s.value)})}),(c,u)=>{var d;return r(),l("p",Pn,[E(T(((d=i(e).lastUpdated)==null?void 0:d.text)||i(e).lastUpdatedText||"Last updated")+": ",1),_("time",{datetime:o.value},T(a.value),9,Vn)])}}});const Ln=g(Sn,[["__scopeId","data-v-b89b6307"]]),Mn={key:0,class:"VPDocFooter"},Tn={key:0,class:"edit-info"},Cn={key:0,class:"edit-link"},Nn={key:1,class:"last-updated"},An={key:1,class:"prev-next"},In={class:"pager"},Bn=["href"],xn=["innerHTML"],Hn=["innerHTML"],En={class:"pager"},zn=["href"],Dn=["innerHTML"],Fn=["innerHTML"],On=y({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:s}=L(),o=fn(),a=hn(),c=k(()=>e.value.editLink&&s.value.editLink!==!1),u=k(()=>t.value.lastUpdated&&s.value.lastUpdated!==!1),d=k(()=>c.value||u.value||a.value.prev||a.value.next);return(m,P)=>{var w,C,$,S,N,M;return d.value?(r(),l("footer",Mn,[v(m.$slots,"doc-footer-before",{},void 0,!0),c.value||u.value?(r(),l("div",Tn,[c.value?(r(),l("div",Cn,[f(U,{class:"edit-link-button",href:i(o).url,"no-icon":!0},{default:p(()=>[f(wn,{class:"edit-link-icon","aria-label":"edit icon"}),E(" "+T(i(o).text),1)]),_:1},8,["href"])])):h("",!0),u.value?(r(),l("div",Nn,[f(Ln)])):h("",!0)])):h("",!0),(w=i(a).prev)!=null&&w.link||(C=i(a).next)!=null&&C.link?(r(),l("nav",An,[_("div",In,[($=i(a).prev)!=null&&$.link?(r(),l("a",{key:0,class:"pager-link prev",href:i(se)(i(a).prev.link)},[_("span",{class:"desc",innerHTML:((S=i(e).docFooter)==null?void 0:S.prev)||"Previous page"},null,8,xn),_("span",{class:"title",innerHTML:i(a).prev.text},null,8,Hn)],8,Bn)):h("",!0)]),_("div",En,[(N=i(a).next)!=null&&N.link?(r(),l("a",{key:0,class:"pager-link next",href:i(se)(i(a).next.link)},[_("span",{class:"desc",innerHTML:((M=i(e).docFooter)==null?void 0:M.next)||"Next page"},null,8,Dn),_("span",{class:"title",innerHTML:i(a).next.text},null,8,Fn)],8,zn)):h("",!0)])])):h("",!0)])):h("",!0)}}});const Gn=g(On,[["__scopeId","data-v-5774f702"]]),Rn={},jn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Un=_("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),Wn=[Un];function qn(n,e){return r(),l("svg",jn,Wn)}const He=g(Rn,[["render",qn]]),Kn={key:0,class:"VPDocOutlineDropdown"},Yn={key:0,class:"items"},Jn=y({__name:"VPDocOutlineDropdown",setup(n){const{frontmatter:e,theme:t}=L(),s=V(!1);ne(()=>{s.value=!1});const o=fe([]);return ne(()=>{o.value=Be(e.value.outline??t.value.outline)}),(a,c)=>o.value.length>0?(r(),l("div",Kn,[_("button",{onClick:c[0]||(c[0]=u=>s.value=!s.value),class:I({open:s.value})},[E(T(i(Ie)(i(t)))+" ",1),f(He,{class:"icon"})],2),s.value?(r(),l("div",Yn,[f(xe,{headers:o.value},null,8,["headers"])])):h("",!0)])):h("",!0)}});const Xn=g(Jn,[["__scopeId","data-v-0bc40447"]]),Qn=n=>(F("data-v-a3c25e27"),n=n(),O(),n),Zn={class:"container"},es=Qn(()=>_("div",{class:"aside-curtain"},null,-1)),ts={class:"aside-container"},ns={class:"aside-content"},ss={class:"content"},os={class:"content-container"},as={class:"main"},rs=y({__name:"VPDoc",setup(n){const{theme:e}=L(),t=me(),{hasSidebar:s,hasAside:o,leftAside:a}=R(),c=k(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(u,d)=>{const m=J("Content");return r(),l("div",{class:I(["VPDoc",{"has-sidebar":i(s),"has-aside":i(o)}])},[v(u.$slots,"doc-top",{},void 0,!0),_("div",Zn,[i(o)?(r(),l("div",{key:0,class:I(["aside",{"left-aside":i(a)}])},[es,_("div",ts,[_("div",ns,[f(pn,null,{"aside-top":p(()=>[v(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[v(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[v(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[v(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[v(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[v(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),_("div",ss,[_("div",os,[v(u.$slots,"doc-before",{},void 0,!0),f(Xn),_("main",as,[f(m,{class:I(["vp-doc",[c.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),f(Gn,null,{"doc-footer-before":p(()=>[v(u.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),v(u.$slots,"doc-after",{},void 0,!0)])])]),v(u.$slots,"doc-bottom",{},void 0,!0)],2)}}});const is=g(rs,[["__scopeId","data-v-a3c25e27"]]);const ls=y({__name:"VPBadge",props:{text:{},type:{}},setup(n){return(e,t)=>(r(),l("span",{class:I(["VPBadge",e.type??"tip"])},[v(e.$slots,"default",{},()=>[E(T(e.text),1)],!0)],2))}});const cs=g(ls,[["__scopeId","data-v-7a7936a3"]]),us={key:0,class:"VPBackdrop"},ds=y({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(r(),b(Ce,{name:"fade"},{default:p(()=>[e.show?(r(),l("div",us)):h("",!0)]),_:1}))}});const _s=g(ds,[["__scopeId","data-v-54a304ca"]]);function oe({removeCurrent:n=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:s,page:o,theme:a}=L(),c=k(()=>{var d,m;return{label:(d=t.value.locales[s.value])==null?void 0:d.label,link:((m=t.value.locales[s.value])==null?void 0:m.link)||(s.value==="root"?"/":`/${s.value}/`)}});return{localeLinks:k(()=>Object.entries(t.value.locales).flatMap(([d,m])=>n&&c.value.label===m.label?[]:{text:m.label,link:vs(m.link||(d==="root"?"/":`/${d}/`),a.value.i18nRouting!==!1&&e,o.value.relativePath.slice(c.value.link.length-1),!t.value.cleanUrls)})),currentLang:c}}function vs(n,e,t,s){return e?n.replace(/\/$/,"")+Ve(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):n}const ps=n=>(F("data-v-1bc323a9"),n=n(),O(),n),fs={class:"NotFound"},hs={class:"code"},ms={class:"title"},gs=ps(()=>_("div",{class:"divider"},null,-1)),ys={class:"quote"},bs={class:"action"},$s=["href","aria-label"],ks=y({__name:"NotFound",setup(n){const{site:e,theme:t}=L(),{localeLinks:s}=oe({removeCurrent:!1}),o=V("/");return D(()=>{var c;const a=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");s.value.length&&(o.value=((c=s.value.find(({link:u})=>u.startsWith(a)))==null?void 0:c.link)||s.value[0].link)}),(a,c)=>{var u,d,m,P,w;return r(),l("div",fs,[_("p",hs,T(((u=i(t).notFound)==null?void 0:u.code)??"404"),1),_("h1",ms,T(((d=i(t).notFound)==null?void 0:d.title)??"PAGE NOT FOUND"),1),gs,_("blockquote",ys,T(((m=i(t).notFound)==null?void 0:m.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),_("div",bs,[_("a",{class:"link",href:i(Le)(o.value),"aria-label":((P=i(t).notFound)==null?void 0:P.linkLabel)??"go to home"},T(((w=i(t).notFound)==null?void 0:w.linkText)??"Take me home"),9,$s)])])}}});const ws=g(ks,[["__scopeId","data-v-1bc323a9"]]),Ps=y({__name:"VPButton",props:{tag:{},size:{},theme:{},text:{},href:{}},setup(n){const e=n,t=k(()=>[e.size??"medium",e.theme??"brand"]),s=k(()=>e.href&&Xe.test(e.href)),o=k(()=>e.tag?e.tag:e.href?"a":"button");return(a,c)=>(r(),b(K(o.value),{class:I(["VPButton",t.value]),href:a.href?i(se)(a.href):void 0,target:s.value?"_blank":void 0,rel:s.value?"noreferrer":void 0},{default:p(()=>[E(T(a.text),1)]),_:1},8,["class","href","target","rel"]))}});const Vs=g(Ps,[["__scopeId","data-v-fa1633a1"]]),Ss=["src","alt"],Ls=y({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const s=J("VPImage",!0);return e.image?(r(),l(B,{key:0},[typeof e.image=="string"||"src"in e.image?(r(),l("img",le({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(Le)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Ss)):(r(),l(B,{key:1},[f(s,le({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),f(s,le({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}});const Ee=g(Ls,[["__scopeId","data-v-ab19afbb"]]),Ms=n=>(F("data-v-5a3e9999"),n=n(),O(),n),Ts={class:"container"},Cs={class:"main"},Ns={key:0,class:"name"},As=["innerHTML"],Is=["innerHTML"],Bs=["innerHTML"],xs={key:0,class:"actions"},Hs={key:0,class:"image"},Es={class:"image-container"},zs=Ms(()=>_("div",{class:"image-bg"},null,-1)),Ds=y({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=Ne("hero-image-slot-exists");return(t,s)=>(r(),l("div",{class:I(["VPHero",{"has-image":t.image||i(e)}])},[_("div",Ts,[_("div",Cs,[v(t.$slots,"home-hero-info",{},()=>[t.name?(r(),l("h1",Ns,[_("span",{innerHTML:t.name,class:"clip"},null,8,As)])):h("",!0),t.text?(r(),l("p",{key:1,innerHTML:t.text,class:"text"},null,8,Is)):h("",!0),t.tagline?(r(),l("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Bs)):h("",!0)],!0),t.actions?(r(),l("div",xs,[(r(!0),l(B,null,x(t.actions,o=>(r(),l("div",{key:o.link,class:"action"},[f(Vs,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link},null,8,["theme","text","href"])]))),128))])):h("",!0)]),t.image||i(e)?(r(),l("div",Hs,[_("div",Es,[zs,v(t.$slots,"home-hero-image",{},()=>[t.image?(r(),b(Ee,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}});const Fs=g(Ds,[["__scopeId","data-v-5a3e9999"]]),Os=y({__name:"VPHomeHero",setup(n){const{frontmatter:e}=L();return(t,s)=>i(e).hero?(r(),b(Fs,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info":p(()=>[v(t.$slots,"home-hero-info")]),"home-hero-image":p(()=>[v(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Gs={},Rs={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},js=_("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),Us=[js];function Ws(n,e){return r(),l("svg",Rs,Us)}const qs=g(Gs,[["render",Ws]]),Ks={class:"box"},Ys=["innerHTML"],Js=["innerHTML"],Xs=["innerHTML"],Qs={key:3,class:"link-text"},Zs={class:"link-text-value"},eo=y({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{}},setup(n){return(e,t)=>(r(),b(U,{class:"VPFeature",href:e.link,rel:e.rel,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[_("article",Ks,[typeof e.icon=="object"?(r(),b(Ee,{key:0,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(r(),l("div",{key:1,class:"icon",innerHTML:e.icon},null,8,Ys)):h("",!0),_("h2",{class:"title",innerHTML:e.title},null,8,Js),e.details?(r(),l("p",{key:2,class:"details",innerHTML:e.details},null,8,Xs)):h("",!0),e.linkText?(r(),l("div",Qs,[_("p",Zs,[E(T(e.linkText)+" ",1),f(qs,{class:"link-text-icon"})])])):h("",!0)])]),_:1},8,["href","rel","tag"]))}});const to=g(eo,[["__scopeId","data-v-aeb6d69c"]]),no={key:0,class:"VPFeatures"},so={class:"container"},oo={class:"items"},ao=y({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=k(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,o)=>s.features?(r(),l("div",no,[_("div",so,[_("div",oo,[(r(!0),l(B,null,x(s.features,a=>(r(),l("div",{key:a.title,class:I(["item",[t.value]])},[f(to,{icon:a.icon,title:a.title,details:a.details,link:a.link,"link-text":a.linkText,rel:a.rel},null,8,["icon","title","details","link","link-text","rel"])],2))),128))])])])):h("",!0)}});const ro=g(ao,[["__scopeId","data-v-7e232fde"]]),io=y({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=L();return(t,s)=>i(e).features?(r(),b(ro,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):h("",!0)}}),lo={class:"VPHome"},co=y({__name:"VPHome",setup(n){return(e,t)=>{const s=J("Content");return r(),l("div",lo,[v(e.$slots,"home-hero-before",{},void 0,!0),f(Os,null,{"home-hero-info":p(()=>[v(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[v(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),v(e.$slots,"home-hero-after",{},void 0,!0),v(e.$slots,"home-features-before",{},void 0,!0),f(io),v(e.$slots,"home-features-after",{},void 0,!0),f(s)])}}});const uo=g(co,[["__scopeId","data-v-20eabd3a"]]),_o={},vo={class:"VPPage"};function po(n,e){const t=J("Content");return r(),l("div",vo,[v(n.$slots,"page-top"),f(t),v(n.$slots,"page-bottom")])}const fo=g(_o,[["render",po]]),ho=y({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=L(),{hasSidebar:s}=R();return(o,a)=>(r(),l("div",{class:I(["VPContent",{"has-sidebar":i(s),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?v(o.$slots,"not-found",{key:0},()=>[f(ws)],!0):i(t).layout==="page"?(r(),b(fo,{key:1},{"page-top":p(()=>[v(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[v(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(r(),b(uo,{key:2},{"home-hero-before":p(()=>[v(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[v(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[v(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[v(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[v(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[v(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(r(),b(K(i(t).layout),{key:3})):(r(),b(is,{key:4},{"doc-top":p(()=>[v(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[v(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[v(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[v(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[v(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[v(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[v(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[v(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[v(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[v(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[v(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});const mo=g(ho,[["__scopeId","data-v-3cf691b6"]]),go={class:"container"},yo=["innerHTML"],bo=["innerHTML"],$o=y({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=R();return(o,a)=>i(e).footer&&i(t).footer!==!1?(r(),l("footer",{key:0,class:I(["VPFooter",{"has-sidebar":i(s)}])},[_("div",go,[i(e).footer.message?(r(),l("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,yo)):h("",!0),i(e).footer.copyright?(r(),l("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,bo)):h("",!0)])],2)):h("",!0)}});const ko=g($o,[["__scopeId","data-v-e4279f1c"]]),wo={class:"header"},Po={class:"outline"},Vo=y({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=L(),s=V(!1),o=V(0),a=V();ne(()=>{s.value=!1});function c(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function u(m){m.target.classList.contains("outline-link")&&(a.value&&(a.value.style.transition="none"),Je(()=>{s.value=!1}))}function d(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(m,P)=>(r(),l("div",{class:"VPLocalNavOutlineDropdown",style:Qe({"--vp-vh":o.value+"px"})},[m.headers.length>0?(r(),l("button",{key:0,onClick:c,class:I({open:s.value})},[E(T(i(Ie)(i(t)))+" ",1),f(He,{class:"icon"})],2)):(r(),l("button",{key:1,onClick:d},T(i(t).returnToTopLabel||"Return to top"),1)),f(Ce,{name:"flyout"},{default:p(()=>[s.value?(r(),l("div",{key:0,ref_key:"items",ref:a,class:"items",onClick:u},[_("div",wo,[_("a",{class:"top-link",href:"#",onClick:d},T(i(t).returnToTopLabel||"Return to top"),1)]),_("div",Po,[f(xe,{headers:m.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}});const So=g(Vo,[["__scopeId","data-v-e8ae7d87"]]),Lo={},Mo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},To=_("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),Co=_("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),No=_("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),Ao=_("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),Io=[To,Co,No,Ao];function Bo(n,e){return r(),l("svg",Mo,Io)}const xo=g(Lo,[["render",Bo]]),Ho=["aria-expanded"],Eo={class:"menu-text"},zo=y({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=R(),{y:o}=tt(),a=fe([]),c=V(0);D(()=>{c.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ne(()=>{a.value=Be(t.value.outline??e.value.outline)});const u=k(()=>a.value.length===0&&!s.value),d=k(()=>({VPLocalNav:!0,fixed:u.value,"reached-top":o.value>=c.value}));return(m,P)=>i(t).layout!=="home"&&(!u.value||i(o)>=c.value)?(r(),l("div",{key:0,class:I(d.value)},[i(s)?(r(),l("button",{key:0,class:"menu","aria-expanded":m.open,"aria-controls":"VPSidebarNav",onClick:P[0]||(P[0]=w=>m.$emit("open-menu"))},[f(xo,{class:"menu-icon"}),_("span",Eo,T(i(e).sidebarMenuLabel||"Menu"),1)],8,Ho)):h("",!0),f(So,{headers:a.value,navHeight:c.value},null,8,["headers","navHeight"])],2)):h("",!0)}});const Do=g(zo,[["__scopeId","data-v-693d654a"]]);function Fo(){const n=V(!1);function e(){n.value=!0,window.addEventListener("resize",o)}function t(){n.value=!1,window.removeEventListener("resize",o)}function s(){n.value?t():e()}function o(){window.outerWidth>=768&&t()}const a=me();return G(()=>a.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:s}}const Oo={},Go={class:"VPSwitch",type:"button",role:"switch"},Ro={class:"check"},jo={key:0,class:"icon"};function Uo(n,e){return r(),l("button",Go,[_("span",Ro,[n.$slots.default?(r(),l("span",jo,[v(n.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Wo=g(Oo,[["render",Uo],["__scopeId","data-v-92d8f6fb"]]),qo={},Ko={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Yo=kt('',9),Jo=[Yo];function Xo(n,e){return r(),l("svg",Ko,Jo)}const Qo=g(qo,[["render",Xo]]),Zo={},ea={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ta=_("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),na=[ta];function sa(n,e){return r(),l("svg",ea,na)}const oa=g(Zo,[["render",sa]]),aa=y({__name:"VPSwitchAppearance",setup(n){const{site:e,isDark:t}=L(),s=V(!1),o=he?a():()=>{};D(()=>{s.value=document.documentElement.classList.contains("dark")});function a(){const c=window.matchMedia("(prefers-color-scheme: dark)"),u=document.documentElement.classList;let d=localStorage.getItem(je),m=e.value.appearance==="dark"&&d==null||(d==="auto"||d==null?c.matches:d==="dark");c.onchange=C=>{d==="auto"&&w(m=C.matches)};function P(){w(m=!m),d=m?c.matches?"auto":"dark":c.matches?"light":"auto",localStorage.setItem(je,d)}function w(C){const $=document.createElement("style");$.type="text/css",$.appendChild(document.createTextNode(`:not(.VPSwitchAppearance):not(.VPSwitchAppearance *) { + -webkit-transition: none !important; + -moz-transition: none !important; + -o-transition: none !important; + -ms-transition: none !important; + transition: none !important; +}`)),document.head.appendChild($),s.value=C,u[C?"add":"remove"]("dark"),window.getComputedStyle($).opacity,document.head.removeChild($)}return P}return G(s,c=>{t.value=c}),(c,u)=>(r(),b(Wo,{title:"toggle dark mode",class:"VPSwitchAppearance","aria-checked":s.value,onClick:i(o)},{default:p(()=>[f(Qo,{class:"sun"}),f(oa,{class:"moon"})]),_:1},8,["aria-checked","onClick"]))}});const ze=g(aa,[["__scopeId","data-v-a99ed743"]]),ra={key:0,class:"VPNavBarAppearance"},ia=y({__name:"VPNavBarAppearance",setup(n){const{site:e}=L();return(t,s)=>i(e).appearance?(r(),l("div",ra,[f(ze)])):h("",!0)}});const la=g(ia,[["__scopeId","data-v-5e9f0637"]]),De=V();let ot=!1,$e=0;function ca(n){const e=V(!1);if(he){!ot&&ua(),$e++;const t=G(De,s=>{var o,a,c;s===n.el.value||(o=n.el.value)!=null&&o.contains(s)?(e.value=!0,(a=n.onFocus)==null||a.call(n)):(e.value=!1,(c=n.onBlur)==null||c.call(n))});Me(()=>{t(),$e--,$e||da()})}return Ye(e)}function ua(){document.addEventListener("focusin",at),ot=!0,De.value=document.activeElement}function da(){document.removeEventListener("focusin",at)}function at(){De.value=document.activeElement}const _a={},va={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},pa=_("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),fa=[pa];function ha(n,e){return r(),l("svg",va,fa)}const rt=g(_a,[["render",ha]]),ma={},ga={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ya=_("circle",{cx:"12",cy:"12",r:"2"},null,-1),ba=_("circle",{cx:"19",cy:"12",r:"2"},null,-1),$a=_("circle",{cx:"5",cy:"12",r:"2"},null,-1),ka=[ya,ba,$a];function wa(n,e){return r(),l("svg",ga,ka)}const Pa=g(ma,[["render",wa]]),Va={class:"VPMenuLink"},Sa=y({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=L();return(t,s)=>(r(),l("div",Va,[f(U,{class:I({active:i(Z)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:p(()=>[E(T(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const ye=g(Sa,[["__scopeId","data-v-2a4d50e5"]]),La={class:"VPMenuGroup"},Ma={key:0,class:"title"},Ta=y({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(r(),l("div",La,[e.text?(r(),l("p",Ma,T(e.text),1)):h("",!0),(r(!0),l(B,null,x(e.items,s=>(r(),l(B,null,["link"in s?(r(),b(ye,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}});const Ca=g(Ta,[["__scopeId","data-v-a6b0397c"]]),Na={class:"VPMenu"},Aa={key:0,class:"items"},Ia=y({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(r(),l("div",Na,[e.items?(r(),l("div",Aa,[(r(!0),l(B,null,x(e.items,s=>(r(),l(B,{key:s.text},["link"in s?(r(),b(ye,{key:0,item:s},null,8,["item"])):(r(),b(Ca,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),v(e.$slots,"default",{},void 0,!0)]))}});const Ba=g(Ia,[["__scopeId","data-v-e42ed9b3"]]),xa=["aria-expanded","aria-label"],Ha={key:0,class:"text"},Ea=["innerHTML"],za={class:"menu"},Da=y({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=V(!1),t=V();ca({el:t,onBlur:s});function s(){e.value=!1}return(o,a)=>(r(),l("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:a[1]||(a[1]=c=>e.value=!0),onMouseleave:a[2]||(a[2]=c=>e.value=!1)},[_("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:a[0]||(a[0]=c=>e.value=!e.value)},[o.button||o.icon?(r(),l("span",Ha,[o.icon?(r(),b(K(o.icon),{key:0,class:"option-icon"})):h("",!0),o.button?(r(),l("span",{key:1,innerHTML:o.button},null,8,Ea)):h("",!0),f(rt,{class:"text-icon"})])):(r(),b(Pa,{key:1,class:"icon"}))],8,xa),_("div",za,[f(Ba,{items:o.items},{default:p(()=>[v(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const Fe=g(Da,[["__scopeId","data-v-6b19ffdd"]]),Fa={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',slack:'Slack',twitter:'Twitter',youtube:'YouTube'},Oa=["href","aria-label","innerHTML"],Ga=y({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=k(()=>typeof e.icon=="object"?e.icon.svg:Fa[e.icon]);return(s,o)=>(r(),l("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Oa))}});const Ra=g(Ga,[["__scopeId","data-v-16cf740a"]]),ja={class:"VPSocialLinks"},Ua=y({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(r(),l("div",ja,[(r(!0),l(B,null,x(e.links,({link:s,icon:o,ariaLabel:a})=>(r(),b(Ra,{key:s,icon:o,link:s,ariaLabel:a},null,8,["icon","link","ariaLabel"]))),128))]))}});const Oe=g(Ua,[["__scopeId","data-v-e71e869c"]]),Wa={key:0,class:"group translations"},qa={class:"trans-title"},Ka={key:1,class:"group"},Ya={class:"item appearance"},Ja={class:"label"},Xa={class:"appearance-action"},Qa={key:2,class:"group"},Za={class:"item social-links"},er=y({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=L(),{localeLinks:s,currentLang:o}=oe({correspondingLink:!0}),a=k(()=>s.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(c,u)=>a.value?(r(),b(Fe,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[i(s).length&&i(o).label?(r(),l("div",Wa,[_("p",qa,T(i(o).label),1),(r(!0),l(B,null,x(i(s),d=>(r(),b(ye,{key:d.link,item:d},null,8,["item"]))),128))])):h("",!0),i(e).appearance?(r(),l("div",Ka,[_("div",Ya,[_("p",Ja,T(i(t).darkModeSwitchLabel||"Appearance"),1),_("div",Xa,[f(ze)])])])):h("",!0),i(t).socialLinks?(r(),l("div",Qa,[_("div",Za,[f(Oe,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}});const tr=g(er,[["__scopeId","data-v-c8c2ae4b"]]),nr=n=>(F("data-v-6bee1efd"),n=n(),O(),n),sr=["aria-expanded"],or=nr(()=>_("span",{class:"container"},[_("span",{class:"top"}),_("span",{class:"middle"}),_("span",{class:"bottom"})],-1)),ar=[or],rr=y({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(r(),l("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},ar,10,sr))}});const ir=g(rr,[["__scopeId","data-v-6bee1efd"]]),lr=["innerHTML"],cr=y({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=L();return(t,s)=>(r(),b(U,{class:I({VPNavBarMenuLink:!0,active:i(Z)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:p(()=>[_("span",{innerHTML:t.item.text},null,8,lr)]),_:1},8,["class","href","target","rel"]))}});const ur=g(cr,[["__scopeId","data-v-e5ab8091"]]),dr=y({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const{page:e}=L();return(t,s)=>(r(),b(Fe,{class:I({VPNavBarMenuGroup:!0,active:i(Z)(i(e).relativePath,t.item.activeMatch,!!t.item.activeMatch)}),button:t.item.text,items:t.item.items},null,8,["class","button","items"]))}}),_r=n=>(F("data-v-f732b5d0"),n=n(),O(),n),vr={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},pr=_r(()=>_("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),fr=y({__name:"VPNavBarMenu",setup(n){const{theme:e}=L();return(t,s)=>i(e).nav?(r(),l("nav",vr,[pr,(r(!0),l(B,null,x(i(e).nav,o=>(r(),l(B,{key:o.text},["link"in o?(r(),b(ur,{key:0,item:o},null,8,["item"])):(r(),b(dr,{key:1,item:o},null,8,["item"]))],64))),128))])):h("",!0)}});const hr=g(fr,[["__scopeId","data-v-f732b5d0"]]);const mr={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},gr={class:"DocSearch-Button-Container"},yr=_("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[_("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),br={class:"DocSearch-Button-Placeholder"},$r=_("span",{class:"DocSearch-Button-Keys"},[_("kbd",{class:"DocSearch-Button-Key"}),_("kbd",{class:"DocSearch-Button-Key"},"K")],-1),qe=y({__name:"VPNavBarSearchButton",props:{placeholder:{}},setup(n){return(e,t)=>(r(),l("button",mr,[_("span",gr,[yr,_("span",br,T(e.placeholder),1)]),$r]))}});const kr={id:"local-search"},wr={key:1,id:"docsearch"},Pr=y({__name:"VPNavBarSearch",setup(n){const e=()=>null,t=()=>null,{theme:s,localeIndex:o}=L(),a=V(!1),c=V(!1),u=k(()=>{var S,N,M,z,X,j,ae;const $=((S=s.value.search)==null?void 0:S.options)??s.value.algolia;return((X=(z=(M=(N=$==null?void 0:$.locales)==null?void 0:N[o.value])==null?void 0:M.translations)==null?void 0:z.button)==null?void 0:X.buttonText)||((ae=(j=$==null?void 0:$.translations)==null?void 0:j.button)==null?void 0:ae.buttonText)||"Search"});D(()=>{});function d(){a.value||(a.value=!0,setTimeout(m,16))}function m(){const $=new Event("keydown");$.key="k",$.metaKey=!0,window.dispatchEvent($),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||m()},16)}const P=V(!1),w=V("'Meta'");D(()=>{w.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'"});const C="";return($,S)=>{var N;return r(),l("div",{class:"VPNavBarSearch",style:Qe({"--vp-meta-key":w.value})},[i(C)==="local"?(r(),l(B,{key:0},[P.value?(r(),b(i(e),{key:0,placeholder:u.value,onClose:S[0]||(S[0]=M=>P.value=!1)},null,8,["placeholder"])):h("",!0),_("div",kr,[f(qe,{placeholder:u.value,onClick:S[1]||(S[1]=M=>P.value=!0)},null,8,["placeholder"])])],64)):i(C)==="algolia"?(r(),l(B,{key:1},[a.value?(r(),b(i(t),{key:0,algolia:((N=i(s).search)==null?void 0:N.options)??i(s).algolia,onVnodeBeforeMount:S[2]||(S[2]=M=>c.value=!0)},null,8,["algolia"])):h("",!0),c.value?h("",!0):(r(),l("div",wr,[f(qe,{placeholder:u.value,onClick:d},null,8,["placeholder"])]))],64)):h("",!0)],4)}}});const Vr=y({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=L();return(t,s)=>i(e).socialLinks?(r(),b(Oe,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}});const Sr=g(Vr,[["__scopeId","data-v-ef6192dc"]]),Lr=["href"],Mr=y({__name:"navbar-title",setup(n){const{site:e,theme:t,localeIndex:s,page:o}=L(),{hasSidebar:a}=R(),{currentLang:c}=oe(),u=k(()=>{const P=o.value.filePath.slice(s.value.length);for(const w in t.value.mixins||{})if(P.startsWith(w))return w}),d=k(()=>u.value?`/${s.value}${u.value}/`:t.value.logoLink??se(c.value.link)),m=k(()=>u.value?t.value.mixins[u.value].title:t.value.siteTitle||e.value.title);return(P,w)=>(r(),l("div",{class:I(["VPNavBarTitle",{"has-sidebar":i(a)}])},[_("a",{class:"title",href:d.value},[v(P.$slots,"nav-bar-title-before",{},void 0,!0),!u.value&&i(t).logo?(r(),b(Ee,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):h("",!0),E(" "+T(m.value)+" ",1),v(P.$slots,"nav-bar-title-after",{},void 0,!0)],8,Lr)],2))}});const Tr=g(Mr,[["__scopeId","data-v-f9bd3b79"]]),Cr={},Nr={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ar=_("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),Ir=_("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),Br=[Ar,Ir];function xr(n,e){return r(),l("svg",Nr,Br)}const it=g(Cr,[["render",xr]]),Hr={class:"items"},Er={class:"title"},zr=y({__name:"VPNavBarTranslations",setup(n){const{theme:e}=L(),{localeLinks:t,currentLang:s}=oe({correspondingLink:!0});return(o,a)=>i(t).length&&i(s).label?(r(),b(Fe,{key:0,class:"VPNavBarTranslations",icon:it,label:i(e).langMenuLabel||"Change language"},{default:p(()=>[_("div",Hr,[_("p",Er,T(i(s).label),1),(r(!0),l(B,null,x(i(t),c=>(r(),b(ye,{key:c.link,item:c},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}});const Dr=g(zr,[["__scopeId","data-v-ff4524ae"]]),Fr=n=>(F("data-v-c8ceaf10"),n=n(),O(),n),Or={class:"container"},Gr={class:"title"},Rr={class:"content"},jr=Fr(()=>_("div",{class:"curtain"},null,-1)),Ur={class:"content-body"},Wr=y({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const{y:e}=tt(),{hasSidebar:t}=R(),{frontmatter:s}=L(),o=V({});return Te(()=>{var a;o.value={"has-sidebar":t.value,top:((a=s.value)==null?void 0:a.layout)==="home"&&e.value===0}}),(a,c)=>(r(),l("div",{class:I(["VPNavBar",o.value])},[_("div",Or,[_("div",Gr,[f(Tr,null,{"nav-bar-title-before":p(()=>[v(a.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[v(a.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),_("div",Rr,[jr,_("div",Ur,[v(a.$slots,"nav-bar-content-before",{},void 0,!0),f(Pr,{class:"search"}),f(hr,{class:"menu"}),f(Dr,{class:"translations"}),f(la,{class:"appearance"}),f(Sr,{class:"social-links"}),f(tr,{class:"extra"}),v(a.$slots,"nav-bar-content-after",{},void 0,!0),f(ir,{class:"hamburger",active:a.isScreenOpen,onClick:c[0]||(c[0]=u=>a.$emit("toggle-screen"))},null,8,["active"])])])])],2))}});const qr=g(Wr,[["__scopeId","data-v-c8ceaf10"]]);function Kr(n){if(Array.isArray(n)){for(var e=0,t=Array(n.length);e1),Q=[],_e=!1,Re=-1,ee=void 0,q=void 0,te=void 0,lt=function(e){return Q.some(function(t){return!!(t.options.allowTouchMove&&t.options.allowTouchMove(e))})},ve=function(e){var t=e||window.event;return lt(t.target)||t.touches.length>1?!0:(t.preventDefault&&t.preventDefault(),!1)},Yr=function(e){if(te===void 0){var t=!!e&&e.reserveScrollBarGap===!0,s=window.innerWidth-document.documentElement.clientWidth;if(t&&s>0){var o=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"),10);te=document.body.style.paddingRight,document.body.style.paddingRight=o+s+"px"}}ee===void 0&&(ee=document.body.style.overflow,document.body.style.overflow="hidden")},Jr=function(){te!==void 0&&(document.body.style.paddingRight=te,te=void 0),ee!==void 0&&(document.body.style.overflow=ee,ee=void 0)},Xr=function(){return window.requestAnimationFrame(function(){if(q===void 0){q={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left};var e=window,t=e.scrollY,s=e.scrollX,o=e.innerHeight;document.body.style.position="fixed",document.body.style.top=-t,document.body.style.left=-s,setTimeout(function(){return window.requestAnimationFrame(function(){var a=o-window.innerHeight;a&&t>=o&&(document.body.style.top=-(t+a))})},300)}})},Qr=function(){if(q!==void 0){var e=-parseInt(document.body.style.top,10),t=-parseInt(document.body.style.left,10);document.body.style.position=q.position,document.body.style.top=q.top,document.body.style.left=q.left,window.scrollTo(t,e),q=void 0}},Zr=function(e){return e?e.scrollHeight-e.scrollTop<=e.clientHeight:!1},ei=function(e,t){var s=e.targetTouches[0].clientY-Re;return lt(e.target)?!1:t&&t.scrollTop===0&&s>0||Zr(t)&&s<0?ve(e):(e.stopPropagation(),!0)},ct=function(e,t){if(!e){console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");return}if(!Q.some(function(o){return o.targetElement===e})){var s={targetElement:e,options:t||{}};Q=[].concat(Kr(Q),[s]),de?Xr():Yr(t),de&&(e.ontouchstart=function(o){o.targetTouches.length===1&&(Re=o.targetTouches[0].clientY)},e.ontouchmove=function(o){o.targetTouches.length===1&&ei(o,e)},_e||(document.addEventListener("touchmove",ve,Ge?{passive:!1}:void 0),_e=!0))}},ut=function(){de&&(Q.forEach(function(e){e.targetElement.ontouchstart=null,e.targetElement.ontouchmove=null}),_e&&(document.removeEventListener("touchmove",ve,Ge?{passive:!1}:void 0),_e=!1),Re=-1),de?Qr():Jr(),Q=[]};const ti=y({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=Ne("close-screen");return(t,s)=>(r(),b(U,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:p(()=>[E(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const ni=g(ti,[["__scopeId","data-v-08b49756"]]),si={},oi={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ai=_("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),ri=[ai];function ii(n,e){return r(),l("svg",oi,ri)}const li=g(si,[["render",ii]]),ci=y({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=Ne("close-screen");return(t,s)=>(r(),b(U,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:p(()=>[E(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const dt=g(ci,[["__scopeId","data-v-97083fb3"]]),ui={class:"VPNavScreenMenuGroupSection"},di={key:0,class:"title"},_i=y({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(r(),l("div",ui,[e.text?(r(),l("p",di,T(e.text),1)):h("",!0),(r(!0),l(B,null,x(e.items,s=>(r(),b(dt,{key:s.text,item:s},null,8,["item"]))),128))]))}});const vi=g(_i,[["__scopeId","data-v-f60dbfa7"]]),pi=["aria-controls","aria-expanded"],fi={class:"button-text"},hi=["id"],mi={key:1,class:"group"},gi=y({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=V(!1),s=k(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(a,c)=>(r(),l("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[_("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:o},[_("span",fi,T(a.text),1),f(li,{class:"button-icon"})],8,pi),_("div",{id:s.value,class:"items"},[(r(!0),l(B,null,x(a.items,u=>(r(),l(B,{key:u.text},["link"in u?(r(),l("div",{key:u.text,class:"item"},[f(dt,{item:u},null,8,["item"])])):(r(),l("div",mi,[f(vi,{text:u.text,items:u.items},null,8,["text","items"])]))],64))),128))],8,hi)],2))}});const yi=g(gi,[["__scopeId","data-v-10e00a88"]]),bi={key:0,class:"VPNavScreenMenu"},$i=y({__name:"VPNavScreenMenu",setup(n){const{theme:e}=L();return(t,s)=>i(e).nav?(r(),l("nav",bi,[(r(!0),l(B,null,x(i(e).nav,o=>(r(),l(B,{key:o.text},["link"in o?(r(),b(ni,{key:0,item:o},null,8,["item"])):(r(),b(yi,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),ki={key:0,class:"VPNavScreenAppearance"},wi={class:"text"},Pi=y({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=L();return(s,o)=>i(e).appearance?(r(),l("div",ki,[_("p",wi,T(i(t).darkModeSwitchLabel||"Appearance"),1),f(ze)])):h("",!0)}});const Vi=g(Pi,[["__scopeId","data-v-0dc5cf49"]]),Si={class:"list"},Li=y({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=oe({correspondingLink:!0}),s=V(!1);function o(){s.value=!s.value}return(a,c)=>i(e).length&&i(t).label?(r(),l("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[_("button",{class:"title",onClick:o},[f(it,{class:"icon lang"}),E(" "+T(i(t).label)+" ",1),f(rt,{class:"icon chevron"})]),_("ul",Si,[(r(!0),l(B,null,x(i(e),u=>(r(),l("li",{key:u.link,class:"item"},[f(U,{class:"link",href:u.link},{default:p(()=>[E(T(u.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}});const Mi=g(Li,[["__scopeId","data-v-41505286"]]),Ti=y({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=L();return(t,s)=>i(e).socialLinks?(r(),b(Oe,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),Ci={class:"container"},Ni=y({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=V(null);function t(){ct(e.value,{reserveScrollBarGap:!0})}function s(){ut()}return(o,a)=>(r(),b(Ce,{name:"fade",onEnter:t,onAfterLeave:s},{default:p(()=>[o.open?(r(),l("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[_("div",Ci,[v(o.$slots,"nav-screen-content-before",{},void 0,!0),f($i,{class:"menu"}),f(Mi,{class:"translations"}),f(Vi,{class:"appearance"}),f(Ti,{class:"social-links"}),v(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}});const Ai=g(Ni,[["__scopeId","data-v-dc785598"]]),Ii={class:"VPNav"},Bi=y({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=Fo();return ce("close-screen",t),(o,a)=>(r(),l("header",Ii,[f(qr,{"is-screen-open":i(e),onToggleScreen:i(s)},{"nav-bar-title-before":p(()=>[v(o.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[v(o.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[v(o.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[v(o.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),f(Ai,{open:i(e)},{"nav-screen-content-before":p(()=>[v(o.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[v(o.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])]))}});const xi=g(Bi,[["__scopeId","data-v-5bdc5df3"]]),Hi=n=>(F("data-v-c356ab37"),n=n(),O(),n),Ei=["role","tabindex"],zi=Hi(()=>_("div",{class:"indicator"},null,-1)),Di=["onKeydown"],Fi={key:1,class:"items"},Oi=y({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:s,isLink:o,isActiveLink:a,hasActiveLink:c,hasChildren:u,toggle:d}=Wt(k(()=>e.item)),m=k(()=>u.value?"section":"div"),P=k(()=>o.value?"a":"div"),w=k(()=>u.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),C=k(()=>o.value?void 0:"button"),$=k(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":o.value},{"is-active":a.value},{"has-active":c.value}]);function S(M){"key"in M&&M.key!=="Enter"||!e.item.link&&d()}function N(){e.item.link&&d()}return(M,z)=>{const X=J("VPSidebarItem",!0);return r(),b(K(m.value),{class:I(["VPSidebarItem",$.value])},{default:p(()=>[M.item.text?(r(),l("div",le({key:0,class:"item",role:C.value},wt(M.item.items?{click:S,keydown:S}:{},!0),{tabindex:M.item.items&&0}),[zi,M.item.link?(r(),b(U,{key:0,tag:P.value,class:"link",href:M.item.link},{default:p(()=>[(r(),b(K(w.value),{class:"text",innerHTML:M.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href"])):(r(),b(K(w.value),{key:1,class:"text",innerHTML:M.item.text},null,8,["innerHTML"])),M.item.collapsed!=null?(r(),l("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:N,onKeydown:Pt(N,["enter"]),tabindex:"0"},[f(He,{class:"caret-icon"})],40,Di)):h("",!0)],16,Ei)):h("",!0),M.item.items&&M.item.items.length?(r(),l("div",Fi,[M.depth<5?(r(!0),l(B,{key:0},x(M.item.items,j=>(r(),b(X,{key:j.text,item:j,depth:M.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}});const Gi=g(Oi,[["__scopeId","data-v-c356ab37"]]),_t=n=>(F("data-v-b04a928c"),n=n(),O(),n),Ri=_t(()=>_("div",{class:"curtain"},null,-1)),ji={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Ui=_t(()=>_("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Wi=y({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const e=n,{sidebarGroups:t,hasSidebar:s}=R();let o=V(null);function a(){ct(o.value,{reserveScrollBarGap:!0})}function c(){ut()}return Te(async()=>{var u;e.open?(a(),(u=o.value)==null||u.focus()):c()}),(u,d)=>i(s)?(r(),l("aside",{key:0,class:I(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:o,onClick:d[0]||(d[0]=Vt(()=>{},["stop"]))},[Ri,_("nav",ji,[Ui,v(u.$slots,"sidebar-nav-before",{},void 0,!0),(r(!0),l(B,null,x(i(t),m=>(r(),l("div",{key:m.text,class:"group"},[f(Gi,{item:m,depth:0},null,8,["item"])]))),128)),v(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}});const qi=g(Wi,[["__scopeId","data-v-b04a928c"]]),Ki=y({__name:"VPSkipLink",setup(n){const e=me(),t=V();G(()=>e.path,()=>t.value.focus());function s({target:o}){const a=document.getElementById(decodeURIComponent(o.hash).slice(1));if(a){const c=()=>{a.removeAttribute("tabindex"),a.removeEventListener("blur",c)};a.setAttribute("tabindex","-1"),a.addEventListener("blur",c),a.focus(),window.scrollTo(0,0)}}return(o,a)=>(r(),l(B,null,[_("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),_("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}});const Yi=g(Ki,[["__scopeId","data-v-9c8615dd"]]),Ji=y({__name:"Layout",setup(n){const{isOpen:e,open:t,close:s}=R(),o=me();G(()=>o.path,s),Ut(e,s),ce("close-sidebar",s),ce("is-sidebar-open",e);const{frontmatter:a}=L(),c=St(),u=k(()=>!!c["home-hero-image"]);return ce("hero-image-slot-exists",u),(d,m)=>{const P=J("Content");return i(a).layout!==!1?(r(),l("div",{key:0,class:I(["Layout",i(a).pageClass])},[v(d.$slots,"layout-top",{},void 0,!0),f(Yi),f(_s,{class:"backdrop",show:i(e),onClick:i(s)},null,8,["show","onClick"]),i(a).navbar!==!1?(r(),b(xi,{key:0},{"nav-bar-title-before":p(()=>[v(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[v(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[v(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[v(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[v(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[v(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3})):h("",!0),f(Do,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),f(qi,{open:i(e)},{"sidebar-nav-before":p(()=>[v(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[v(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),f(mo,null,{"page-top":p(()=>[v(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[v(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[v(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[v(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[v(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[v(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[v(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[v(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[v(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[v(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[v(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[v(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[v(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[v(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[v(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[v(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[v(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[v(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[v(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[v(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),f(ko),v(d.$slots,"layout-bottom",{},void 0,!0)],2)):(r(),b(P,{key:1}))}}});const Xi=g(Ji,[["__scopeId","data-v-324e8308"]]);const tl={Layout:Xi,enhanceApp:({app:n})=>{n.component("Badge",cs)}};export{Gi as V,Tt as a,Zi as b,R as c,Ut as d,Yi as e,_s as f,xi as g,Do as h,Lt as i,ko as j,el as k,is as l,ge as m,tl as t,we as u}; diff --git a/assets/en-US_index.md.9a435836.js b/assets/en-US_index.md.9a435836.js new file mode 100644 index 0000000..875aba2 --- /dev/null +++ b/assets/en-US_index.md.9a435836.js @@ -0,0 +1 @@ +import{_ as e,v as t,x as n}from"./chunks/framework.187e34d2.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","links":{"starter":"/en-US/protocol/"},"home":{"primary":"Get Started","description":"THE UNIVERSAL MESSENGER PROTOCOL"}},"headers":[],"relativePath":"en-US/index.md","filePath":"en-US/index.md"}'),r={name:"en-US/index.md"};function a(o,s,i,c,d,p){return t(),n("div")}const l=e(r,[["render",a]]);export{_ as __pageData,l as default}; diff --git a/assets/en-US_index.md.9a435836.lean.js b/assets/en-US_index.md.9a435836.lean.js new file mode 100644 index 0000000..875aba2 --- /dev/null +++ b/assets/en-US_index.md.9a435836.lean.js @@ -0,0 +1 @@ +import{_ as e,v as t,x as n}from"./chunks/framework.187e34d2.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","links":{"starter":"/en-US/protocol/"},"home":{"primary":"Get Started","description":"THE UNIVERSAL MESSENGER PROTOCOL"}},"headers":[],"relativePath":"en-US/index.md","filePath":"en-US/index.md"}'),r={name:"en-US/index.md"};function a(o,s,i,c,d,p){return t(),n("div")}const l=e(r,[["render",a]]);export{_ as __pageData,l as default}; diff --git a/assets/en-US_introduction.md.30807083.js b/assets/en-US_introduction.md.30807083.js new file mode 100644 index 0000000..7470646 --- /dev/null +++ b/assets/en-US_introduction.md.30807083.js @@ -0,0 +1 @@ +import{_ as e,v as n,x as o,A as t,N as a}from"./chunks/framework.187e34d2.js";const f=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/introduction.md","filePath":"en-US/introduction.md"}'),r={name:"en-US/introduction.md"},i=t("h1",{id:"introduction",tabindex:"-1"},[a("Introduction "),t("a",{class:"header-anchor",href:"#introduction","aria-label":'Permalink to "Introduction"'},"​")],-1),c=[i];function d(s,_,u,l,p,h){return n(),o("div",null,c)}const x=e(r,[["render",d]]);export{f as __pageData,x as default}; diff --git a/assets/en-US_introduction.md.30807083.lean.js b/assets/en-US_introduction.md.30807083.lean.js new file mode 100644 index 0000000..7470646 --- /dev/null +++ b/assets/en-US_introduction.md.30807083.lean.js @@ -0,0 +1 @@ +import{_ as e,v as n,x as o,A as t,N as a}from"./chunks/framework.187e34d2.js";const f=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/introduction.md","filePath":"en-US/introduction.md"}'),r={name:"en-US/introduction.md"},i=t("h1",{id:"introduction",tabindex:"-1"},[a("Introduction "),t("a",{class:"header-anchor",href:"#introduction","aria-label":'Permalink to "Introduction"'},"​")],-1),c=[i];function d(s,_,u,l,p,h){return n(),o("div",null,c)}const x=e(r,[["render",d]]);export{f as __pageData,x as default}; diff --git a/assets/en-US_protocol_api.md.a49f8e14.js b/assets/en-US_protocol_api.md.a49f8e14.js new file mode 100644 index 0000000..1d98325 --- /dev/null +++ b/assets/en-US_protocol_api.md.a49f8e14.js @@ -0,0 +1 @@ +import{_ as t,v as e,x as a,U as o}from"./chunks/framework.187e34d2.js";const P=JSON.parse('{"title":"HTTP API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/api.md","filePath":"en-US/protocol/api.md"}'),n={name:"en-US/protocol/api.md"},r=o('

HTTP API

Pagination

Some API may return a list of items. In this case, the response will be a List object:

FIELDTYPEDESCRIPTION
dataarraylist of items
nextstringtoken for the next page

You can use the next token to get the next page of items. If next is nullable, it means that there are no more items.

',5),i=[r];function d(s,c,h,p,l,_){return e(),a("div",null,i)}const f=t(n,[["render",d]]);export{P as __pageData,f as default}; diff --git a/assets/en-US_protocol_api.md.a49f8e14.lean.js b/assets/en-US_protocol_api.md.a49f8e14.lean.js new file mode 100644 index 0000000..c53df29 --- /dev/null +++ b/assets/en-US_protocol_api.md.a49f8e14.lean.js @@ -0,0 +1 @@ +import{_ as t,v as e,x as a,U as o}from"./chunks/framework.187e34d2.js";const P=JSON.parse('{"title":"HTTP API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/api.md","filePath":"en-US/protocol/api.md"}'),n={name:"en-US/protocol/api.md"},r=o("",5),i=[r];function d(s,c,h,p,l,_){return e(),a("div",null,i)}const f=t(n,[["render",d]]);export{P as __pageData,f as default}; diff --git a/assets/en-US_protocol_index.md.b1eb1d7e.js b/assets/en-US_protocol_index.md.b1eb1d7e.js new file mode 100644 index 0000000..e910adf --- /dev/null +++ b/assets/en-US_protocol_index.md.b1eb1d7e.js @@ -0,0 +1 @@ +import{_ as o,v as t,x as r,A as e,N as s}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"Overview","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/index.md","filePath":"en-US/protocol/index.md"}'),a={name:"en-US/protocol/index.md"},n=e("h1",{id:"overview",tabindex:"-1"},[s("Overview "),e("a",{class:"header-anchor",href:"#overview","aria-label":'Permalink to "Overview"'},"​")],-1),i=e("p",null,"The Satori protocol is designed to be simple and easy to use. It is based around three layers of communication:",-1),l=e("ul",null,[e("li",null,"an HTTP API for bots to communicate with the server"),e("li",null,"a WebSocket API for bots to receive events from the server"),e("li",null,"a WebHook API for the server to send events to bots")],-1),c=[n,i,l];function d(v,_,h,p,m,u){return t(),r("div",null,c)}const b=o(a,[["render",d]]);export{x as __pageData,b as default}; diff --git a/assets/en-US_protocol_index.md.b1eb1d7e.lean.js b/assets/en-US_protocol_index.md.b1eb1d7e.lean.js new file mode 100644 index 0000000..e910adf --- /dev/null +++ b/assets/en-US_protocol_index.md.b1eb1d7e.lean.js @@ -0,0 +1 @@ +import{_ as o,v as t,x as r,A as e,N as s}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"Overview","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/index.md","filePath":"en-US/protocol/index.md"}'),a={name:"en-US/protocol/index.md"},n=e("h1",{id:"overview",tabindex:"-1"},[s("Overview "),e("a",{class:"header-anchor",href:"#overview","aria-label":'Permalink to "Overview"'},"​")],-1),i=e("p",null,"The Satori protocol is designed to be simple and easy to use. It is based around three layers of communication:",-1),l=e("ul",null,[e("li",null,"an HTTP API for bots to communicate with the server"),e("li",null,"a WebSocket API for bots to receive events from the server"),e("li",null,"a WebHook API for the server to send events to bots")],-1),c=[n,i,l];function d(v,_,h,p,m,u){return t(),r("div",null,c)}const b=o(a,[["render",d]]);export{x as __pageData,b as default}; diff --git a/assets/en-US_protocol_message.md.f6ef4e77.js b/assets/en-US_protocol_message.md.f6ef4e77.js new file mode 100644 index 0000000..ac34111 --- /dev/null +++ b/assets/en-US_protocol_message.md.f6ef4e77.js @@ -0,0 +1 @@ +import{_ as a,v as s,x as t,A as e,N as o}from"./chunks/framework.187e34d2.js";const f=JSON.parse('{"title":"Message","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/message.md","filePath":"en-US/protocol/message.md"}'),r={name:"en-US/protocol/message.md"},n=e("h1",{id:"message",tabindex:"-1"},[o("Message "),e("a",{class:"header-anchor",href:"#message","aria-label":'Permalink to "Message"'},"​")],-1),c=[n];function d(i,l,m,_,p,g){return s(),t("div",null,c)}const x=a(r,[["render",d]]);export{f as __pageData,x as default}; diff --git a/assets/en-US_protocol_message.md.f6ef4e77.lean.js b/assets/en-US_protocol_message.md.f6ef4e77.lean.js new file mode 100644 index 0000000..ac34111 --- /dev/null +++ b/assets/en-US_protocol_message.md.f6ef4e77.lean.js @@ -0,0 +1 @@ +import{_ as a,v as s,x as t,A as e,N as o}from"./chunks/framework.187e34d2.js";const f=JSON.parse('{"title":"Message","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/message.md","filePath":"en-US/protocol/message.md"}'),r={name:"en-US/protocol/message.md"},n=e("h1",{id:"message",tabindex:"-1"},[o("Message "),e("a",{class:"header-anchor",href:"#message","aria-label":'Permalink to "Message"'},"​")],-1),c=[n];function d(i,l,m,_,p,g){return s(),t("div",null,c)}const x=a(r,[["render",d]]);export{f as __pageData,x as default}; diff --git a/assets/en-US_protocol_webhook.md.32f23f95.js b/assets/en-US_protocol_webhook.md.32f23f95.js new file mode 100644 index 0000000..e79f1c8 --- /dev/null +++ b/assets/en-US_protocol_webhook.md.32f23f95.js @@ -0,0 +1 @@ +import{_ as o,v as t,x as a,A as e,N as r}from"./chunks/framework.187e34d2.js";const m=JSON.parse('{"title":"Webhook","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/webhook.md","filePath":"en-US/protocol/webhook.md"}'),s={name:"en-US/protocol/webhook.md"},n=e("h1",{id:"webhook",tabindex:"-1"},[r("Webhook "),e("a",{class:"header-anchor",href:"#webhook","aria-label":'Permalink to "Webhook"'},"​")],-1),c=[n];function h(d,i,l,_,p,k){return t(),a("div",null,c)}const f=o(s,[["render",h]]);export{m as __pageData,f as default}; diff --git a/assets/en-US_protocol_webhook.md.32f23f95.lean.js b/assets/en-US_protocol_webhook.md.32f23f95.lean.js new file mode 100644 index 0000000..e79f1c8 --- /dev/null +++ b/assets/en-US_protocol_webhook.md.32f23f95.lean.js @@ -0,0 +1 @@ +import{_ as o,v as t,x as a,A as e,N as r}from"./chunks/framework.187e34d2.js";const m=JSON.parse('{"title":"Webhook","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/webhook.md","filePath":"en-US/protocol/webhook.md"}'),s={name:"en-US/protocol/webhook.md"},n=e("h1",{id:"webhook",tabindex:"-1"},[r("Webhook "),e("a",{class:"header-anchor",href:"#webhook","aria-label":'Permalink to "Webhook"'},"​")],-1),c=[n];function h(d,i,l,_,p,k){return t(),a("div",null,c)}const f=o(s,[["render",h]]);export{m as __pageData,f as default}; diff --git a/assets/en-US_protocol_websocket.md.0fa7b63b.js b/assets/en-US_protocol_websocket.md.0fa7b63b.js new file mode 100644 index 0000000..db2aab6 --- /dev/null +++ b/assets/en-US_protocol_websocket.md.0fa7b63b.js @@ -0,0 +1 @@ +import{_ as t,v as o,x as a,A as e,N as c}from"./chunks/framework.187e34d2.js";const m=JSON.parse('{"title":"WebSocket","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/websocket.md","filePath":"en-US/protocol/websocket.md"}'),s={name:"en-US/protocol/websocket.md"},r=e("h1",{id:"websocket",tabindex:"-1"},[c("WebSocket "),e("a",{class:"header-anchor",href:"#websocket","aria-label":'Permalink to "WebSocket"'},"​")],-1),n=[r];function d(i,l,_,p,k,b){return o(),a("div",null,n)}const f=t(s,[["render",d]]);export{m as __pageData,f as default}; diff --git a/assets/en-US_protocol_websocket.md.0fa7b63b.lean.js b/assets/en-US_protocol_websocket.md.0fa7b63b.lean.js new file mode 100644 index 0000000..db2aab6 --- /dev/null +++ b/assets/en-US_protocol_websocket.md.0fa7b63b.lean.js @@ -0,0 +1 @@ +import{_ as t,v as o,x as a,A as e,N as c}from"./chunks/framework.187e34d2.js";const m=JSON.parse('{"title":"WebSocket","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/websocket.md","filePath":"en-US/protocol/websocket.md"}'),s={name:"en-US/protocol/websocket.md"},r=e("h1",{id:"websocket",tabindex:"-1"},[c("WebSocket "),e("a",{class:"header-anchor",href:"#websocket","aria-label":'Permalink to "WebSocket"'},"​")],-1),n=[r];function d(i,l,_,p,k,b){return o(),a("div",null,n)}const f=t(s,[["render",d]]);export{m as __pageData,f as default}; diff --git a/assets/en-US_resources_channel.md.72cdadc5.js b/assets/en-US_resources_channel.md.72cdadc5.js new file mode 100644 index 0000000..3fef8dd --- /dev/null +++ b/assets/en-US_resources_channel.md.72cdadc5.js @@ -0,0 +1 @@ +import{_ as d,t as o,v as r,x as i,A as t,G as l,K as h,N as e,U as a}from"./chunks/framework.187e34d2.js";const D=JSON.parse('{"title":"Channel","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/channel.md","filePath":"en-US/resources/channel.md"}'),c={name:"en-US/resources/channel.md"},s=a('

Channel

Definition

Channel

FIELDTYPEDESCRIPTION
idstringchannel ID
namestringchannel name

API

Get Channel

',6),_=t("code",null,"/v1/channel.get",-1),u=a('
FIELDTYPEDESCRIPTION
channel_idstringchannel ID

Get a channel by ID. Returns a channel object.

bot.getChannelList(guildId, next?)

',3),b=t("code",null,"/v1/channel.list",-1),T=a('
FIELDTYPEDESCRIPTION
guild_idstringguild ID
nextstringpagination token

Get channels in a guild. Returns a list of channel objects.

',2);function f(P,p,I,g,m,C){const n=o("badge");return r(),i("div",null,[s,t("ul",null,[t("li",null,[l(n,null,{default:h(()=>[e("POST")]),_:1}),e(),_])]),u,t("ul",null,[t("li",null,[l(n,null,{default:h(()=>[e("POST")]),_:1}),e(),b])]),T])}const x=d(c,[["render",f]]);export{D as __pageData,x as default}; diff --git a/assets/en-US_resources_channel.md.72cdadc5.lean.js b/assets/en-US_resources_channel.md.72cdadc5.lean.js new file mode 100644 index 0000000..ddafbb8 --- /dev/null +++ b/assets/en-US_resources_channel.md.72cdadc5.lean.js @@ -0,0 +1 @@ +import{_ as d,t as o,v as r,x as i,A as t,G as l,K as h,N as e,U as a}from"./chunks/framework.187e34d2.js";const D=JSON.parse('{"title":"Channel","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/channel.md","filePath":"en-US/resources/channel.md"}'),c={name:"en-US/resources/channel.md"},s=a("",6),_=t("code",null,"/v1/channel.get",-1),u=a("",3),b=t("code",null,"/v1/channel.list",-1),T=a("",2);function f(P,p,I,g,m,C){const n=o("badge");return r(),i("div",null,[s,t("ul",null,[t("li",null,[l(n,null,{default:h(()=>[e("POST")]),_:1}),e(),_])]),u,t("ul",null,[t("li",null,[l(n,null,{default:h(()=>[e("POST")]),_:1}),e(),b])]),T])}const x=d(c,[["render",f]]);export{D as __pageData,x as default}; diff --git a/assets/en-US_resources_guild.md.c46197de.js b/assets/en-US_resources_guild.md.c46197de.js new file mode 100644 index 0000000..9497c86 --- /dev/null +++ b/assets/en-US_resources_guild.md.c46197de.js @@ -0,0 +1 @@ +import{_ as o,t as r,v as n,x as s,A as t,G as i,K as l,N as e,U as a}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"Guild","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/guild.md","filePath":"en-US/resources/guild.md"}'),u={name:"en-US/resources/guild.md"},h=a('

Guild

Definition

Guild

FIELDTYPEDESCRIPTION
idstringguild ID
namestringguild name

API

bot.getGuild(guildId)

',6),_=t("code",null,"/v1/guild.get",-1),c=a('
FIELDTYPEDESCRIPTION
guild_idstringguild ID

Get a guild by ID. Returns a guild object.

bot.getGuildList(next?)

',3),g=t("code",null,"/v1/guild.list",-1),b=a('
FIELDTYPEDESCRIPTION
nextstringpagination token

Get guilds where the current user is a member. Returns a list of partial guild objects.

bot.handleGuildRequest(messageId, approve, comment?)

  • messageId: string 请求 ID
  • approve: boolean 是否通过请求
  • comment: string 备注信息
  • 返回值: Promise<void>

处理来自群组的邀请。

',5);function m(p,T,I,P,f,S){const d=r("badge");return n(),s("div",null,[h,t("ul",null,[t("li",null,[i(d,null,{default:l(()=>[e("POST")]),_:1}),e(),_])]),c,t("ul",null,[t("li",null,[i(d,null,{default:l(()=>[e("POST")]),_:1}),e(),g])]),b])}const D=o(u,[["render",m]]);export{x as __pageData,D as default}; diff --git a/assets/en-US_resources_guild.md.c46197de.lean.js b/assets/en-US_resources_guild.md.c46197de.lean.js new file mode 100644 index 0000000..c362891 --- /dev/null +++ b/assets/en-US_resources_guild.md.c46197de.lean.js @@ -0,0 +1 @@ +import{_ as o,t as r,v as n,x as s,A as t,G as i,K as l,N as e,U as a}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"Guild","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/guild.md","filePath":"en-US/resources/guild.md"}'),u={name:"en-US/resources/guild.md"},h=a("",6),_=t("code",null,"/v1/guild.get",-1),c=a("",3),g=t("code",null,"/v1/guild.list",-1),b=a("",5);function m(p,T,I,P,f,S){const d=r("badge");return n(),s("div",null,[h,t("ul",null,[t("li",null,[i(d,null,{default:l(()=>[e("POST")]),_:1}),e(),_])]),c,t("ul",null,[t("li",null,[i(d,null,{default:l(()=>[e("POST")]),_:1}),e(),g])]),b])}const D=o(u,[["render",m]]);export{x as __pageData,D as default}; diff --git a/assets/en-US_resources_member.md.8bb1da4c.js b/assets/en-US_resources_member.md.8bb1da4c.js new file mode 100644 index 0000000..2cabb29 --- /dev/null +++ b/assets/en-US_resources_member.md.8bb1da4c.js @@ -0,0 +1,5 @@ +import{_ as e,v as t,x as o,U as s}from"./chunks/framework.187e34d2.js";const b=JSON.parse('{"title":"群组成员 (GuildMember)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/member.md","filePath":"en-US/resources/member.md"}'),a={name:"en-US/resources/member.md"},r=s(`

群组成员 (GuildMember)

类型定义

ts
interface GuildMember {
+  user: User
+  nick?: string
+  avatar?: string
+}

API

bot.getGuildMember(guildId, userId)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • 返回值: Promise<GuildMember> 群成员信息

获取群成员信息。

bot.getGuildMemberList(guildId, next?)

  • guildId: string 群组 ID
  • next: string 分页令牌
  • 返回值: Promise<List<GuildMember>> 群成员列表

获取群成员列表。

bot.kickGuildMember(guildId, userId, permanent?)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • permanent: boolean 是否永久踢出 (用户无法再次加入群组)
  • 返回值: Promise<void>

将某个用户踢出群组。

bot.muteGuildMember(guildId, userId, duration?, reason?)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • duration: number 禁言时长 (毫秒)
  • reason: string 禁言说明
  • 返回值: Promise<void>

将某个用户禁言。如果传入的禁言时长为 0 则表示解除禁言。

bot.handleGuildMemberRequest(messageId, approve, comment?)

  • messageId: string 请求 ID
  • approve: boolean 是否通过请求
  • comment: string 备注信息
  • 返回值: Promise<void>

处理加群请求。

`,19),i=[r];function n(l,d,c,u,p,m){return t(),o("div",null,i)}const h=e(a,[["render",n]]);export{b as __pageData,h as default}; diff --git a/assets/en-US_resources_member.md.8bb1da4c.lean.js b/assets/en-US_resources_member.md.8bb1da4c.lean.js new file mode 100644 index 0000000..89feec5 --- /dev/null +++ b/assets/en-US_resources_member.md.8bb1da4c.lean.js @@ -0,0 +1 @@ +import{_ as e,v as t,x as o,U as s}from"./chunks/framework.187e34d2.js";const b=JSON.parse('{"title":"群组成员 (GuildMember)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/member.md","filePath":"en-US/resources/member.md"}'),a={name:"en-US/resources/member.md"},r=s("",19),i=[r];function n(l,d,c,u,p,m){return t(),o("div",null,i)}const h=e(a,[["render",n]]);export{b as __pageData,h as default}; diff --git a/assets/en-US_resources_message.md.f008c101.js b/assets/en-US_resources_message.md.f008c101.js new file mode 100644 index 0000000..d0d69eb --- /dev/null +++ b/assets/en-US_resources_message.md.f008c101.js @@ -0,0 +1,8 @@ +import{_ as e,v as s,x as t,U as a}from"./chunks/framework.187e34d2.js";const m=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/message.md","filePath":"en-US/resources/message.md"}'),n={name:"en-US/resources/message.md"},o=a(`

消息 (Message)

类型定义

ts
interface Message {
+  isDirect: boolean
+  channelId: string
+  messageId: string
+  userId: string
+  content: string
+  timestamp?: number
+}

API

bot.sendMessage(channelId, content, guildId?)

  • channelId: string 频道 ID
  • content: Fragment 要发送的内容
  • guildId: string 群组 ID
  • 返回值: Promise<string[]> 发送的消息 ID

向特定频道发送消息。

WARNING

只要你能够获取到会话对象,你就不应使用此 API,而应该使用 session.send()。一些平台会将主动发送的消息同被动接收后回复的消息区分开来,甚至可能限制主动消息的发送,因此使用 session.send() 总是有更好的可靠性。

TIP

bot.sendMessage() 既可以发送群聊消息,也可以发送私聊消息。当发送私聊消息时,其与 bot.sendPrivateMessage() 的区别在于前者传入的是频道 ID,而后者传入的是用户 ID。

bot.sendPrivateMessage(userId, content)

  • userId: string 对方 ID
  • content: Fragment 要发送的内容
  • 返回值: Promise<string[]> 发送的消息 ID

向特定用户发送私聊消息。

bot.getMessage(channelId, messageId)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • 返回值: Promise<Message>

获取特定消息。

bot.deleteMessage(channelId, messageId)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • 返回值: Promise<void>

撤回特定消息。

bot.editMessage(channelId, messageId, content)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • content: Fragment 要发送的内容
  • 返回值: Promise<void>

修改特定消息。

bot.getMessageList(channelId, next?)

  • channelId: string 频道 ID
  • next: string 分页令牌
  • 返回值: Promise<List<Message>> 消息列表

获取频道消息列表。

`,24),l=[o];function i(r,c,d,p,g,h){return s(),t("div",null,l)}const I=e(n,[["render",i]]);export{m as __pageData,I as default}; diff --git a/assets/en-US_resources_message.md.f008c101.lean.js b/assets/en-US_resources_message.md.f008c101.lean.js new file mode 100644 index 0000000..c7ff00d --- /dev/null +++ b/assets/en-US_resources_message.md.f008c101.lean.js @@ -0,0 +1 @@ +import{_ as e,v as s,x as t,U as a}from"./chunks/framework.187e34d2.js";const m=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/message.md","filePath":"en-US/resources/message.md"}'),n={name:"en-US/resources/message.md"},o=a("",24),l=[o];function i(r,c,d,p,g,h){return s(),t("div",null,l)}const I=e(n,[["render",i]]);export{m as __pageData,I as default}; diff --git a/assets/en-US_resources_reaction.md.2b20af79.js b/assets/en-US_resources_reaction.md.2b20af79.js new file mode 100644 index 0000000..4d11b39 --- /dev/null +++ b/assets/en-US_resources_reaction.md.2b20af79.js @@ -0,0 +1 @@ +import{_ as a,t as n,v as i,x as r,A as t,N as e,G as s,K as c,U as d}from"./chunks/framework.187e34d2.js";const j=JSON.parse('{"title":"表态 (Reaction) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/reaction.md","filePath":"en-US/resources/reaction.md"}'),l={name:"en-US/resources/reaction.md"},g={id:"表态-实验性",tabindex:"-1"},h=t("a",{class:"header-anchor",href:"#表态-实验性","aria-label":'Permalink to "表态 (Reaction) 实验性"'},"​",-1),m=d('

API

bot.createReaction(channelId, messageId, emoji)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • emoji: string 表态名称
  • 返回值: Promise<void>

向特定消息添加表态。

bot.deleteReaction(channelId, messageId, emoji, userId?)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • emoji: string 表态名称
  • userId: string 用户 ID
  • 返回值: Promise<void>

从特定消息删除某个用户添加的特定表态。如果没有传入用户 ID 则表示删除自己的表态。

bot.clearReaction(channelId, messageId, emoji?)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • emoji: string 表态名称
  • 返回值: Promise<void>

从特定消息清除某个特定表态。如果没有传入表态名称则表示清除所有表态。

bot.getReactionList(channelId, messageId, emoji, next?)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • emoji: string 表态名称
  • next: string 分页令牌
  • 返回值: Promise<List<User>>

获取添加特定消息的特定表态的用户列表。

',13);function I(b,_,u,p,P,f){const o=n("badge");return i(),r("div",null,[t("h1",g,[e("表态 (Reaction) "),s(o,{type:"warning"},{default:c(()=>[e("实验性")]),_:1}),e(),h]),m])}const D=a(l,[["render",I]]);export{j as __pageData,D as default}; diff --git a/assets/en-US_resources_reaction.md.2b20af79.lean.js b/assets/en-US_resources_reaction.md.2b20af79.lean.js new file mode 100644 index 0000000..0e70a9e --- /dev/null +++ b/assets/en-US_resources_reaction.md.2b20af79.lean.js @@ -0,0 +1 @@ +import{_ as a,t as n,v as i,x as r,A as t,N as e,G as s,K as c,U as d}from"./chunks/framework.187e34d2.js";const j=JSON.parse('{"title":"表态 (Reaction) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/reaction.md","filePath":"en-US/resources/reaction.md"}'),l={name:"en-US/resources/reaction.md"},g={id:"表态-实验性",tabindex:"-1"},h=t("a",{class:"header-anchor",href:"#表态-实验性","aria-label":'Permalink to "表态 (Reaction) 实验性"'},"​",-1),m=d("",13);function I(b,_,u,p,P,f){const o=n("badge");return i(),r("div",null,[t("h1",g,[e("表态 (Reaction) "),s(o,{type:"warning"},{default:c(()=>[e("实验性")]),_:1}),e(),h]),m])}const D=a(l,[["render",I]]);export{j as __pageData,D as default}; diff --git a/assets/en-US_resources_role.md.42105578.js b/assets/en-US_resources_role.md.42105578.js new file mode 100644 index 0000000..3e35ff8 --- /dev/null +++ b/assets/en-US_resources_role.md.42105578.js @@ -0,0 +1,6 @@ +import{_ as l,t as a,v as s,x as i,A as o,N as e,G as r,K as n,U as d}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"群组角色 (GuildRole) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/role.md","filePath":"en-US/resources/role.md"}'),c={name:"en-US/resources/role.md"},u={id:"群组角色-实验性",tabindex:"-1"},g=o("a",{class:"header-anchor",href:"#群组角色-实验性","aria-label":'Permalink to "群组角色 (GuildRole) 实验性"'},"​",-1),p=d(`

类型定义

ts
export interface GuildRole {
+  id: string
+  name: string
+  color: number
+  position: number
+}

API

bot.setGuildMemberRole(guildId, userId, roleId)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • roleId: string 角色 ID
  • 返回值: Promise<void>

设置群组内用户的角色。

bot.unsetGuildMemberRole(guildId, userId, roleId)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • roleId: string 角色 ID
  • 返回值: Promise<void>

取消群组内用户的角色。

bot.getGuildRoleList(guildId, next?)

  • guildId: string 群组 ID
  • next: string 分页令牌
  • 返回值: Promise<List<GuildRole>> 角色列表

获取群组角色列表。

bot.createGuildRole(guildId, data)

  • guildId: string 群组 ID
  • data: Partial<GuildRole> 角色信息
  • 返回值: Promise<string> 角色 ID

创建群组角色。

bot.modifyGuildRole(guildId, roleId, data)

  • guildId: string 群组 ID
  • roleId: string 角色 ID
  • data: Partial<GuildRole> 角色信息
  • 返回值: Promise<void>

修改群组角色。

bot.deleteGuildRole(guildId, roleId)

  • guildId: string 群组 ID
  • roleId: string 角色 ID
  • 返回值: Promise<void>

删除群组角色。

`,21);function h(k,b,I,m,v,y){const t=a("badge");return s(),i("div",null,[o("h1",u,[e("群组角色 (GuildRole) "),r(t,{type:"warning"},{default:n(()=>[e("实验性")]),_:1}),e(),g]),p])}const f=l(c,[["render",h]]);export{x as __pageData,f as default}; diff --git a/assets/en-US_resources_role.md.42105578.lean.js b/assets/en-US_resources_role.md.42105578.lean.js new file mode 100644 index 0000000..5b11f6f --- /dev/null +++ b/assets/en-US_resources_role.md.42105578.lean.js @@ -0,0 +1 @@ +import{_ as l,t as a,v as s,x as i,A as o,N as e,G as r,K as n,U as d}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"群组角色 (GuildRole) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/role.md","filePath":"en-US/resources/role.md"}'),c={name:"en-US/resources/role.md"},u={id:"群组角色-实验性",tabindex:"-1"},g=o("a",{class:"header-anchor",href:"#群组角色-实验性","aria-label":'Permalink to "群组角色 (GuildRole) 实验性"'},"​",-1),p=d("",21);function h(k,b,I,m,v,y){const t=a("badge");return s(),i("div",null,[o("h1",u,[e("群组角色 (GuildRole) "),r(t,{type:"warning"},{default:n(()=>[e("实验性")]),_:1}),e(),g]),p])}const f=l(c,[["render",h]]);export{x as __pageData,f as default}; diff --git a/assets/en-US_resources_user.md.0eb0bfd1.js b/assets/en-US_resources_user.md.0eb0bfd1.js new file mode 100644 index 0000000..499e9e9 --- /dev/null +++ b/assets/en-US_resources_user.md.0eb0bfd1.js @@ -0,0 +1,5 @@ +import{_ as e,v as t,x as s,U as a}from"./chunks/framework.187e34d2.js";const g=JSON.parse('{"title":"用户 (User)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/user.md","filePath":"en-US/resources/user.md"}'),o={name:"en-US/resources/user.md"},n=a(`

用户 (User)

类型定义

ts
export interface User {
+  id: string
+  name: string
+  avatar?: string
+}

API

bot.getSelf()

  • 返回值: Promise<User> 用户信息

获取机器人自己的信息。

bot.getUser(userId)

  • userId: string 用户 ID
  • 返回值: Promise<User> 用户信息

获取用户信息。

bot.getFriendList(next?)

  • next: string 分页令牌
  • 返回值: Promise<List<User>> 好友列表

获取机器人的好友列表。

bot.handleFriendRequest(messageId, approve, comment?)

  • messageId: string 请求 ID
  • approve: boolean 是否通过请求
  • comment: string 备注信息
  • 返回值: Promise<void>

处理好友请求。

`,16),r=[n];function i(l,c,p,d,h,k){return t(),s("div",null,r)}const b=e(o,[["render",i]]);export{g as __pageData,b as default}; diff --git a/assets/en-US_resources_user.md.0eb0bfd1.lean.js b/assets/en-US_resources_user.md.0eb0bfd1.lean.js new file mode 100644 index 0000000..6b0b271 --- /dev/null +++ b/assets/en-US_resources_user.md.0eb0bfd1.lean.js @@ -0,0 +1 @@ +import{_ as e,v as t,x as s,U as a}from"./chunks/framework.187e34d2.js";const g=JSON.parse('{"title":"用户 (User)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/user.md","filePath":"en-US/resources/user.md"}'),o={name:"en-US/resources/user.md"},n=a("",16),r=[n];function i(l,c,p,d,h,k){return t(),s("div",null,r)}const b=e(o,[["render",i]]);export{g as __pageData,b as default}; diff --git a/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 b/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 new file mode 100644 index 0000000..2a68729 Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 differ diff --git a/assets/inter-italic-cyrillic.ea42a392.woff2 b/assets/inter-italic-cyrillic.ea42a392.woff2 new file mode 100644 index 0000000..f640351 Binary files /dev/null and b/assets/inter-italic-cyrillic.ea42a392.woff2 differ diff --git a/assets/inter-italic-greek-ext.4fbe9427.woff2 b/assets/inter-italic-greek-ext.4fbe9427.woff2 new file mode 100644 index 0000000..0021896 Binary files /dev/null and b/assets/inter-italic-greek-ext.4fbe9427.woff2 differ diff --git a/assets/inter-italic-greek.8f4463c4.woff2 b/assets/inter-italic-greek.8f4463c4.woff2 new file mode 100644 index 0000000..71c265f Binary files /dev/null and b/assets/inter-italic-greek.8f4463c4.woff2 differ diff --git a/assets/inter-italic-latin-ext.bd8920cc.woff2 b/assets/inter-italic-latin-ext.bd8920cc.woff2 new file mode 100644 index 0000000..9c1b944 Binary files /dev/null and b/assets/inter-italic-latin-ext.bd8920cc.woff2 differ diff --git a/assets/inter-italic-latin.bd3b6f56.woff2 b/assets/inter-italic-latin.bd3b6f56.woff2 new file mode 100644 index 0000000..01fcf20 Binary files /dev/null and b/assets/inter-italic-latin.bd3b6f56.woff2 differ diff --git a/assets/inter-italic-vietnamese.6ce511fb.woff2 b/assets/inter-italic-vietnamese.6ce511fb.woff2 new file mode 100644 index 0000000..e4f788e Binary files /dev/null and b/assets/inter-italic-vietnamese.6ce511fb.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.e75737ce.woff2 b/assets/inter-roman-cyrillic-ext.e75737ce.woff2 new file mode 100644 index 0000000..28593cc Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.e75737ce.woff2 differ diff --git a/assets/inter-roman-cyrillic.5f2c6c8c.woff2 b/assets/inter-roman-cyrillic.5f2c6c8c.woff2 new file mode 100644 index 0000000..a20adc1 Binary files /dev/null and b/assets/inter-roman-cyrillic.5f2c6c8c.woff2 differ diff --git a/assets/inter-roman-greek-ext.ab0619bc.woff2 b/assets/inter-roman-greek-ext.ab0619bc.woff2 new file mode 100644 index 0000000..e3b0be7 Binary files /dev/null and b/assets/inter-roman-greek-ext.ab0619bc.woff2 differ diff --git a/assets/inter-roman-greek.d5a6d92a.woff2 b/assets/inter-roman-greek.d5a6d92a.woff2 new file mode 100644 index 0000000..f790e04 Binary files /dev/null and b/assets/inter-roman-greek.d5a6d92a.woff2 differ diff --git a/assets/inter-roman-latin-ext.0030eebd.woff2 b/assets/inter-roman-latin-ext.0030eebd.woff2 new file mode 100644 index 0000000..715bd90 Binary files /dev/null and b/assets/inter-roman-latin-ext.0030eebd.woff2 differ diff --git a/assets/inter-roman-latin.2ed14f66.woff2 b/assets/inter-roman-latin.2ed14f66.woff2 new file mode 100644 index 0000000..a540b7a Binary files /dev/null and b/assets/inter-roman-latin.2ed14f66.woff2 differ diff --git a/assets/inter-roman-vietnamese.14ce25a6.woff2 b/assets/inter-roman-vietnamese.14ce25a6.woff2 new file mode 100644 index 0000000..5a9f9cb Binary files /dev/null and b/assets/inter-roman-vietnamese.14ce25a6.woff2 differ diff --git a/assets/style.0add57fd.css b/assets/style.0add57fd.css new file mode 100644 index 0000000..1462afb --- /dev/null +++ b/assets/style.0add57fd.css @@ -0,0 +1 @@ +.root[data-v-463da30f]{position:relative;z-index:1}.nested[data-v-463da30f]{padding-left:16px}.outline-link[data-v-463da30f]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:400}.outline-link[data-v-463da30f]:hover,.outline-link.active[data-v-463da30f]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-463da30f]{padding-left:13px}.VPDocAsideOutline[data-v-c834746b]{display:none}.VPDocAsideOutline.has-outline[data-v-c834746b]{display:block}.content[data-v-c834746b]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-c834746b]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:1px;height:18px;background-color:var(--vp-c-brand);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-c834746b]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-cb998dce]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-cb998dce]{flex-grow:1}.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-cb998dce] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-b89b6307]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-b89b6307]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-5774f702]{margin-top:64px}.edit-info[data-v-5774f702]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-5774f702]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-5774f702]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.edit-link-button[data-v-5774f702]:hover{color:var(--vp-c-brand-dark)}.edit-link-icon[data-v-5774f702]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-5774f702]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-5774f702]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-5774f702]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-5774f702]:hover{border-color:var(--vp-c-brand)}.pager-link.next[data-v-5774f702]{margin-left:auto;text-align:right}.desc[data-v-5774f702]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-5774f702]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.VPDocOutlineDropdown[data-v-0bc40447]{margin-bottom:48px}.VPDocOutlineDropdown button[data-v-0bc40447]{display:block;font-size:14px;font-weight:500;line-height:24px;border:1px solid var(--vp-c-border);padding:4px 12px;color:var(--vp-c-text-2);background-color:var(--vp-c-mute);border-radius:8px;transition:color .5s}.VPDocOutlineDropdown button[data-v-0bc40447]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-0bc40447]{color:var(--vp-c-text-1)}.icon[data-v-0bc40447]{display:inline-block;vertical-align:middle;width:16px;height:16px;fill:currentColor}[data-v-0bc40447] .outline-link{font-size:14px;font-weight:400}.open>.icon[data-v-0bc40447]{transform:rotate(90deg)}.items[data-v-0bc40447]{margin-top:12px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-a3c25e27]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-a3c25e27]{display:none}@media (min-width: 960px) and (max-width: 1279px){.VPDoc .VPDocOutlineDropdown[data-v-a3c25e27]{display:block}}@media (min-width: 768px){.VPDoc[data-v-a3c25e27]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-a3c25e27]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-a3c25e27]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-a3c25e27]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-a3c25e27]{display:flex;justify-content:center}.VPDoc .aside[data-v-a3c25e27]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-a3c25e27]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-a3c25e27]{max-width:1104px}}.container[data-v-a3c25e27]{margin:0 auto;width:100%}.aside[data-v-a3c25e27]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-a3c25e27]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-a3c25e27]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 32px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-a3c25e27]::-webkit-scrollbar{display:none}.aside-curtain[data-v-a3c25e27]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-a3c25e27]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-a3c25e27]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-a3c25e27]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-a3c25e27]{order:1;margin:0;min-width:640px}}.content-container[data-v-a3c25e27]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-a3c25e27]{max-width:688px}.external-link-icon-enabled[data-v-a3c25e27] :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.5f2c6c8c.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.e75737ce.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.d5a6d92a.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.ab0619bc.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.2ed14f66.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.0030eebd.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.14ce25a6.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.ea42a392.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.8f4463c4.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.4fbe9427.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.bd3b6f56.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.bd8920cc.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.6ce511fb.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-gray: #8e8e93;--vp-c-text-light-1: rgba(60, 60, 67);--vp-c-text-light-2: rgba(60, 60, 67, .75);--vp-c-text-light-3: rgba(60, 60, 67, .33);--vp-c-text-dark-1: rgba(255, 255, 245, .86);--vp-c-text-dark-2: rgba(235, 235, 245, .6);--vp-c-text-dark-3: rgba(235, 235, 245, .38);--vp-c-sponsor: #db2777}:root{--vp-c-bg: #ffffff;--vp-c-bg-elv: #ffffff;--vp-c-bg-elv-up: #ffffff;--vp-c-bg-elv-down: #f6f6f7;--vp-c-bg-elv-mute: #f6f6f7;--vp-c-bg-soft: #f6f6f7;--vp-c-bg-soft-up: #f9f9fa;--vp-c-bg-soft-down: #e3e3e5;--vp-c-bg-soft-mute: #e3e3e5;--vp-c-bg-alt: #f6f6f7;--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white);--vp-c-text-1: var(--vp-c-text-light-1);--vp-c-text-2: var(--vp-c-text-light-2);--vp-c-text-3: var(--vp-c-text-light-3);--vp-c-text-inverse-1: var(--vp-c-text-dark-1);--vp-c-text-inverse-2: var(--vp-c-text-dark-2);--vp-c-text-inverse-3: var(--vp-c-text-dark-3);--vp-c-text-code: #476582;--vp-c-mute: #eeeef0;--vp-c-mute-light: #f3f3f9;--vp-c-mute-lighter: #f9f9fa;--vp-c-mute-dark: #e3e3e5;--vp-c-mute-darker: #d7d7d9;--vp-c-brand: #4565d8;--vp-c-brand-light: #708fff;--vp-c-brand-lighter: #a4b2ff;--vp-c-brand-lightest: #ecefff;--vp-c-brand-dark: #4565d8;--vp-c-brand-darker: #23459f;--vp-c-brand-darkest: #132f59;--vp-c-brand-dimm-1: rgba(112, 143, 255, .05);--vp-c-brand-dimm-2: rgba(112, 143, 255, .2);--vp-c-brand-dimm-3: rgba(112, 143, 255, .5);--vp-c-green: #10b981;--vp-c-green-light: #34d399;--vp-c-green-lighter: #6ee7b7;--vp-c-green-dark: #059669;--vp-c-green-darker: #047857;--vp-c-green-dimm-1: rgba(16, 185, 129, .05);--vp-c-green-dimm-2: rgba(16, 185, 129, .2);--vp-c-green-dimm-3: rgba(16, 185, 129, .5);--vp-c-yellow: #d97706;--vp-c-yellow-light: #f59e0b;--vp-c-yellow-lighter: #fbbf24;--vp-c-yellow-lightest: #fcd34d;--vp-c-yellow-dark: #b45309;--vp-c-yellow-darker: #92400e;--vp-c-yellow-darkest: #6c3d08;--vp-c-yellow-dimm-1: rgba(234, 179, 8, .05);--vp-c-yellow-dimm-2: rgba(234, 179, 8, .2);--vp-c-yellow-dimm-3: rgba(234, 179, 8, .5);--vp-c-red: #f43f5e;--vp-c-red-light: #fb7185;--vp-c-red-lighter: #fda4af;--vp-c-red-lightest: #fdd6e0;--vp-c-red-dark: #e11d48;--vp-c-red-darker: #be123c;--vp-c-red-darkest: #9f1239;--vp-c-red-dimm-1: rgba(244, 63, 94, .05);--vp-c-red-dimm-2: rgba(244, 63, 94, .2);--vp-c-red-dimm-3: rgba(244, 63, 94, .5)}.dark{--vp-c-bg: #1e1e20;--vp-c-bg-elv: #252529;--vp-c-bg-elv-up: #323238;--vp-c-bg-elv-down: #1e1e20;--vp-c-bg-elv-mute: #323238;--vp-c-bg-soft: #252529;--vp-c-bg-soft-up: #323238;--vp-c-bg-soft-down: #1e1e20;--vp-c-bg-soft-mute: #323238;--vp-c-bg-alt: #161618;--vp-c-border: rgba(82, 82, 89, .68);--vp-c-divider: rgba(82, 82, 89, .32);--vp-c-gutter: #000000;--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black);--vp-c-text-1: var(--vp-c-text-dark-1);--vp-c-text-2: var(--vp-c-text-dark-2);--vp-c-text-3: var(--vp-c-text-dark-3);--vp-c-text-inverse-1: var(--vp-c-text-light-1);--vp-c-text-inverse-2: var(--vp-c-text-light-2);--vp-c-text-inverse-3: var(--vp-c-text-light-3);--vp-c-text-code: #c9def1;--vp-c-mute: #323238;--vp-c-mute-light: #3a3a3c;--vp-c-mute-lighter: #505053;--vp-c-mute-dark: #222226;--vp-c-mute-darker: #505053;--vp-c-brand: #708fff;--vp-c-brand-light: #a4b2ff;--vp-c-brand-lighter: #a4c8ff;--vp-c-brand-lightest: #ecefff;--vp-c-brand-dark: #4565d8;--vp-c-brand-darker: #23459f;--vp-c-brand-darkest: #132f59;--vp-c-brand-dimm-1: rgba(112, 143, 255, .05);--vp-c-brand-dimm-2: rgba(112, 143, 255, .2);--vp-c-brand-dimm-3: rgba(112, 143, 255, .5);--vp-c-green: #10b981;--vp-c-green-light: #34d399;--vp-c-green-lighter: #6ee7b7;--vp-c-green-lightest: #a7f3d0;--vp-c-green-dark: #059669;--vp-c-green-darker: #047857;--vp-c-green-darkest: #065f46;--vp-c-green-dimm-1: rgba(16, 185, 129, .05);--vp-c-green-dimm-2: rgba(16, 185, 129, .2);--vp-c-green-dimm-3: rgba(16, 185, 129, .5);--vp-c-yellow: #d1a336;--vp-c-yellow-light: #f8e3a1;--vp-c-yellow-lighter: #fff0c0;--vp-c-yellow-lightest: #fff7dc;--vp-c-yellow-dark: #b45309;--vp-c-yellow-darker: #92400e;--vp-c-yellow-darkest: #6c3d08;--vp-c-yellow-dimm-1: rgba(234, 179, 8, .05);--vp-c-yellow-dimm-2: rgba(234, 179, 8, .2);--vp-c-yellow-dimm-3: rgba(234, 179, 8, .5);--vp-c-red: #f43f5e;--vp-c-red-light: #fb7185;--vp-c-red-lighter: #fda4af;--vp-c-red-lightest: #fdd6e0;--vp-c-red-dark: #e11d48;--vp-c-red-darker: #be123c;--vp-c-red-darkest: #9f1239;--vp-c-red-dimm-1: rgba(244, 63, 94, .05);--vp-c-red-dimm-2: rgba(244, 63, 94, .2);--vp-c-red-dimm-3: rgba(244, 63, 94, .5)}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-local-nav: 10;--vp-z-index-nav: 20;--vp-z-index-layout-top: 30;--vp-z-index-backdrop: 40;--vp-z-index-sidebar: 50;--vp-z-index-footer: 60}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-c-code-dimm: var(--vp-c-text-dark-3);--vp-code-block-color: var(--vp-c-text-dark-1);--vp-code-block-bg: #161618;--vp-code-block-bg-light: #1e1e20;--vp-code-block-divider-color: #000000;--vp-code-line-highlight-color: rgba(0, 0, 0, .5);--vp-code-line-number-color: var(--vp-c-code-dimm);--vp-code-line-diff-add-color: var(--vp-c-green-dimm-2);--vp-code-line-diff-add-symbol-color: var(--vp-c-green);--vp-code-line-diff-remove-color: var(--vp-c-red-dimm-2);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red);--vp-code-line-warning-color: var(--vp-c-yellow-dimm-2);--vp-code-line-error-color: var(--vp-c-red-dimm-2);--vp-code-copy-code-border-color: transparent;--vp-code-copy-code-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-active-text: var(--vp-c-text-dark-2);--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-dark-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-bar-color: var(--vp-c-brand)}.dark{--vp-code-block-bg: #161618}:root:not(.dark) .vp-adaptive-theme{--vp-c-code-dimm: var(--vp-c-text-2);--vp-code-block-color: var(--vp-c-text-1);--vp-code-block-bg: #f8f8f8;--vp-code-block-divider-color: var(--vp-c-divider);--vp-code-line-highlight-color: #ececec;--vp-code-line-number-color: var(--vp-c-code-dimm);--vp-code-copy-code-bg: #e2e2e2;--vp-code-copy-code-hover-bg: #dcdcdc;--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-tab-divider: var(--vp-c-divider);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1)}:root{--vp-button-brand-border: var(--vp-c-brand);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-dark);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-darker);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-darkest);--vp-button-alt-border: var(--vp-c-border);--vp-button-alt-text: var(--vp-c-neutral);--vp-button-alt-bg: var(--vp-c-mute);--vp-button-alt-hover-border: var(--vp-c-border);--vp-button-alt-hover-text: var(--vp-c-neutral);--vp-button-alt-hover-bg: var(--vp-c-mute-dark);--vp-button-alt-active-border: var(--vp-c-border);--vp-button-alt-active-text: var(--vp-c-neutral);--vp-button-alt-active-bg: var(--vp-c-mute-darker);--vp-button-sponsor-border: var(--vp-c-gray-light-3);--vp-button-sponsor-text: var(--vp-c-text-light-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}.dark{--vp-button-sponsor-border: var(--vp-c-gray-dark-1);--vp-button-sponsor-text: var(--vp-c-text-dark-2)}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: var(--vp-c-border);--vp-custom-block-info-text: var(--vp-c-text-2);--vp-custom-block-info-bg: var(--vp-c-bg-soft);--vp-custom-block-info-code-bg: var(--vp-c-mute);--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand);--vp-custom-block-tip-bg: var(--vp-c-bg-soft);--vp-custom-block-tip-code-bg: var(--vp-c-mute);--vp-custom-block-warning-border: var(--vp-c-yellow);--vp-custom-block-warning-text: var(--vp-c-yellow);--vp-custom-block-warning-bg: var(--vp-c-bg-soft);--vp-custom-block-warning-code-bg: var(--vp-c-mute);--vp-custom-block-danger-border: var(--vp-c-red);--vp-custom-block-danger-text: var(--vp-c-red);--vp-custom-block-danger-bg: var(--vp-c-bg-soft);--vp-custom-block-danger-code-bg: var(--vp-c-mute);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-details-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-hover-border-color: var(--vp-c-gray);--vp-input-switch-bg-color: var(--vp-c-mute)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: var(--vp-c-border);--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-mute);--vp-badge-tip-border: var(--vp-c-brand);--vp-badge-tip-text: var(--vp-c-brand);--vp-badge-tip-bg: var(--vp-c-brand-dimm-1);--vp-badge-warning-border: var(--vp-c-yellow);--vp-badge-warning-text: var(--vp-c-yellow);--vp-badge-warning-bg: var(--vp-c-yellow-dimm-1);--vp-badge-danger-border: var(--vp-c-red);--vp-badge-danger-text: var(--vp-c-red);--vp-badge-danger-bg: var(--vp-c-red-dimm-1)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand);--vp-local-search-highlight-bg: var(--vp-c-green-lighter);--vp-local-search-highlight-text: var(--vp-c-black)}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);direction:ltr;font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline dotted;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.dark .vp-code-light{display:none}html:not(.dark) .vp-code-dark{display:none}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:1px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand)}.vp-doc a:hover{text-decoration:underline dotted;text-underline-offset:2px}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block a{color:inherit;font-weight:600}.vp-doc .custom-block code{font-size:var(--vp-custom-block-code-font-size);font-weight:700;color:inherit}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;color:var(--vp-c-text-code);background-color:var(--vp-c-mute);transition:color .5s,background-color .5s}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc a>code{color:var(--vp-c-brand)}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;left:-65px;display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;width:64px;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:"Copied"}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-c-code-dimm);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin-bottom:4px;text-align:center;letter-spacing:1px;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-bg-soft-down)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge[data-v-7a7936a3]{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:600;transform:translateY(-2px)}.vp-doc h1>.VPBadge[data-v-7a7936a3]{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge[data-v-7a7936a3]{margin-top:3px;line-height:20px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge[data-v-7a7936a3]{line-height:20px;vertical-align:middle}.vp-doc h4>.VPBadge[data-v-7a7936a3],.vp-doc h5>.VPBadge[data-v-7a7936a3],.vp-doc h6>.VPBadge[data-v-7a7936a3]{vertical-align:middle;line-height:18px}.VPBadge.info[data-v-7a7936a3]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-7a7936a3]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-7a7936a3]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-7a7936a3]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-54a304ca]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-54a304ca],.VPBackdrop.fade-leave-to[data-v-54a304ca]{opacity:0}.VPBackdrop.fade-leave-active[data-v-54a304ca]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-54a304ca]{display:none}}.NotFound[data-v-1bc323a9]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-1bc323a9]{padding:96px 32px 168px}}.code[data-v-1bc323a9]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-1bc323a9]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-1bc323a9]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-1bc323a9]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-1bc323a9]{padding-top:20px}.link[data-v-1bc323a9]{display:inline-block;border:1px solid var(--vp-c-brand);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:border-color .25s,color .25s}.link[data-v-1bc323a9]:hover{border-color:var(--vp-c-brand-dark);color:var(--vp-c-brand-dark)}.VPButton[data-v-fa1633a1]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-fa1633a1]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa1633a1]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-fa1633a1]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-fa1633a1]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-fa1633a1]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-fa1633a1]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-fa1633a1]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-fa1633a1]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-fa1633a1]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-fa1633a1]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-fa1633a1]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-fa1633a1]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-ab19afbb]{display:none}.dark .VPImage.light[data-v-ab19afbb]{display:none}.VPHero[data-v-5a3e9999]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-5a3e9999]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-5a3e9999]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-5a3e9999]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-5a3e9999]{flex-direction:row}}.main[data-v-5a3e9999]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-5a3e9999]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-5a3e9999]{text-align:left}}@media (min-width: 960px){.main[data-v-5a3e9999]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-5a3e9999]{max-width:592px}}.name[data-v-5a3e9999],.text[data-v-5a3e9999]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-5a3e9999],.VPHero.has-image .text[data-v-5a3e9999]{margin:0 auto}.name[data-v-5a3e9999]{color:var(--vp-home-hero-name-color)}.clip[data-v-5a3e9999]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-5a3e9999],.text[data-v-5a3e9999]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-5a3e9999],.text[data-v-5a3e9999]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-5a3e9999],.VPHero.has-image .text[data-v-5a3e9999]{margin:0}}.tagline[data-v-5a3e9999]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-5a3e9999]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-5a3e9999]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-5a3e9999]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-5a3e9999]{margin:0}}.actions[data-v-5a3e9999]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-5a3e9999]{justify-content:center}@media (min-width: 640px){.actions[data-v-5a3e9999]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-5a3e9999]{justify-content:flex-start}}.action[data-v-5a3e9999]{flex-shrink:0;padding:6px}.image[data-v-5a3e9999]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-5a3e9999]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-5a3e9999]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-5a3e9999]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-5a3e9999]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-5a3e9999]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-5a3e9999]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-5a3e9999]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-5a3e9999]{width:320px;height:320px}}[data-v-5a3e9999] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-5a3e9999] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-5a3e9999] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-aeb6d69c]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-aeb6d69c]:hover{border-color:var(--vp-c-brand);background-color:var(--vp-c-bg-soft-up)}.box[data-v-aeb6d69c]{display:flex;flex-direction:column;padding:24px;height:100%}.VPFeature[data-v-aeb6d69c] .VPImage{margin-bottom:20px}.icon[data-v-aeb6d69c]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-bg-soft-down);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-aeb6d69c]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-aeb6d69c]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-aeb6d69c]{padding-top:8px}.link-text-value[data-v-aeb6d69c]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand)}.link-text-icon[data-v-aeb6d69c]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-7e232fde]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-7e232fde]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-7e232fde]{padding:0 64px}}.container[data-v-7e232fde]{margin:0 auto;max-width:1152px}.items[data-v-7e232fde]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-7e232fde]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-7e232fde],.item.grid-4[data-v-7e232fde],.item.grid-6[data-v-7e232fde]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-7e232fde],.item.grid-4[data-v-7e232fde]{width:50%}.item.grid-3[data-v-7e232fde],.item.grid-6[data-v-7e232fde]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-7e232fde]{width:25%}}.VPHome[data-v-20eabd3a]{padding-bottom:96px}.VPHome[data-v-20eabd3a] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-20eabd3a]{padding-bottom:128px}}.VPContent[data-v-3cf691b6]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-3cf691b6]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-3cf691b6]{margin:0}@media (min-width: 960px){.VPContent[data-v-3cf691b6]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-3cf691b6]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-3cf691b6]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e4279f1c]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e4279f1c]{display:none}@media (min-width: 768px){.VPFooter[data-v-e4279f1c]{padding:32px}}.container[data-v-e4279f1c]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e4279f1c],.copyright[data-v-e4279f1c]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-e8ae7d87]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-e8ae7d87]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-e8ae7d87]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-e8ae7d87]{color:var(--vp-c-text-1)}.icon[data-v-e8ae7d87]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-e8ae7d87] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-e8ae7d87]{transform:rotate(90deg)}.items[data-v-e8ae7d87]{position:absolute;top:64px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}.header[data-v-e8ae7d87]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-e8ae7d87]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand)}.outline[data-v-e8ae7d87]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-e8ae7d87]{transition:all .2s ease-out}.flyout-leave-active[data-v-e8ae7d87]{transition:all .15s ease-in}.flyout-enter-from[data-v-e8ae7d87],.flyout-leave-to[data-v-e8ae7d87]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-693d654a]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--vp-c-gutter);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-693d654a]{position:fixed}.VPLocalNav.reached-top[data-v-693d654a]{border-top-color:transparent}@media (min-width: 960px){.VPLocalNav[data-v-693d654a]{display:none}}.menu[data-v-693d654a]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-693d654a]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-693d654a]{padding:0 32px}}.menu-icon[data-v-693d654a]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-693d654a]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-693d654a]{padding:12px 32px 11px}}.VPSwitch[data-v-92d8f6fb]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s}.VPSwitch[data-v-92d8f6fb]:hover{border-color:var(--vp-input-hover-border-color)}.check[data-v-92d8f6fb]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s}.icon[data-v-92d8f6fb]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-92d8f6fb] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-92d8f6fb] svg{fill:var(--vp-c-text-1);transition:opacity .25s}.sun[data-v-a99ed743]{opacity:1}.moon[data-v-a99ed743],.dark .sun[data-v-a99ed743]{opacity:0}.dark .moon[data-v-a99ed743]{opacity:1}.dark .VPSwitchAppearance[data-v-a99ed743] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-5e9f0637]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-5e9f0637]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-2a4d50e5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-2a4d50e5]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-2a4d50e5]:hover{color:var(--vp-c-brand);background-color:var(--vp-c-bg-elv-mute)}.link.active[data-v-2a4d50e5]{color:var(--vp-c-brand)}.VPMenuGroup[data-v-a6b0397c]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-a6b0397c]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-a6b0397c]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-a6b0397c]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-e42ed9b3]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-e42ed9b3] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e42ed9b3] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e42ed9b3] .group:last-child{padding-bottom:0}.VPMenu[data-v-e42ed9b3] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e42ed9b3] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e42ed9b3] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-e42ed9b3] .action{padding-left:24px}.VPFlyout[data-v-6b19ffdd]{position:relative}.VPFlyout[data-v-6b19ffdd]:hover{color:var(--vp-c-brand);transition:color .25s}.VPFlyout:hover .text[data-v-6b19ffdd]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-6b19ffdd]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-6b19ffdd]{color:var(--vp-c-brand)}.VPFlyout.active:hover .text[data-v-6b19ffdd]{color:var(--vp-c-brand-dark)}.VPFlyout:hover .menu[data-v-6b19ffdd],.button[aria-expanded=true]+.menu[data-v-6b19ffdd]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-6b19ffdd]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-6b19ffdd]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-6b19ffdd]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-6b19ffdd]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-6b19ffdd]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-6b19ffdd]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-6b19ffdd]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-16cf740a]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-16cf740a]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-16cf740a]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-e71e869c]{display:flex;justify-content:center}.VPNavBarExtra[data-v-c8c2ae4b]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-c8c2ae4b]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-c8c2ae4b]{display:none}}.trans-title[data-v-c8c2ae4b]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-c8c2ae4b],.item.social-links[data-v-c8c2ae4b]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-c8c2ae4b]{min-width:176px}.appearance-action[data-v-c8c2ae4b]{margin-right:-2px}.social-links-list[data-v-c8c2ae4b]{margin:-4px -8px}.VPNavBarHamburger[data-v-6bee1efd]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-6bee1efd]{display:none}}.container[data-v-6bee1efd]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-6bee1efd]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-6bee1efd]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-6bee1efd],.VPNavBarHamburger.active:hover .middle[data-v-6bee1efd],.VPNavBarHamburger.active:hover .bottom[data-v-6bee1efd]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-6bee1efd],.middle[data-v-6bee1efd],.bottom[data-v-6bee1efd]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-6bee1efd]{top:0;left:0;transform:translate(0)}.middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-e5ab8091]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-e5ab8091],.VPNavBarMenuLink[data-v-e5ab8091]:hover{color:var(--vp-c-brand)}.VPNavBarMenu[data-v-f732b5d0]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-f732b5d0]{display:flex}}/*! @docsearch/css 3.5.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.DocSearch{--docsearch-primary-color: var(--vp-c-brand);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark .DocSearch{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-bg-soft-mute);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:1px;letter-spacing:-12px;color:transparent}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:var(--vp-meta-key);font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-bg-soft-mute)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-ef6192dc]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-ef6192dc]{display:flex;align-items:center}}.title[data-v-f9bd3b79]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-f9bd3b79]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-f9bd3b79]{border-bottom-color:var(--vp-c-divider)}}[data-v-f9bd3b79] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-ff4524ae]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-ff4524ae]{display:flex;align-items:center}}.title[data-v-ff4524ae]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-c8ceaf10]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap}@media (min-width: 768px){.VPNavBar[data-v-c8ceaf10]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-c8ceaf10]{padding:0}.VPNavBar[data-v-c8ceaf10]:not(.has-sidebar):not(.top){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-c8ceaf10]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-c8ceaf10],.container>.content[data-v-c8ceaf10]{pointer-events:none}.container[data-v-c8ceaf10] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-c8ceaf10]{max-width:100%}}.title[data-v-c8ceaf10]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-c8ceaf10]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-c8ceaf10]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-c8ceaf10]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-c8ceaf10]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-c8ceaf10]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-c8ceaf10]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.top) .content-body[data-v-c8ceaf10]{position:relative;background-color:var(--vp-nav-bg-color)}}@media (max-width: 767px){.content-body[data-v-c8ceaf10]{column-gap:.5rem}}.menu+.translations[data-v-c8ceaf10]:before,.menu+.appearance[data-v-c8ceaf10]:before,.menu+.social-links[data-v-c8ceaf10]:before,.translations+.appearance[data-v-c8ceaf10]:before,.appearance+.social-links[data-v-c8ceaf10]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-c8ceaf10]:before,.translations+.appearance[data-v-c8ceaf10]:before{margin-right:16px}.appearance+.social-links[data-v-c8ceaf10]:before{margin-left:16px}.social-links[data-v-c8ceaf10]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-c8ceaf10]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-c8ceaf10]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-c8ceaf10]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenMenuLink[data-v-08b49756]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-08b49756]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupLink[data-v-97083fb3]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-97083fb3]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupSection[data-v-f60dbfa7]{display:block}.title[data-v-f60dbfa7]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-10e00a88]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-10e00a88]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-10e00a88]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-10e00a88]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-10e00a88]{padding-bottom:6px;color:var(--vp-c-brand)}.VPNavScreenMenuGroup.open .button-icon[data-v-10e00a88]{transform:rotate(45deg)}.button[data-v-10e00a88]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-10e00a88]:hover{color:var(--vp-c-brand)}.button-icon[data-v-10e00a88]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-10e00a88]:first-child{padding-top:0}.group+.group[data-v-10e00a88],.group+.item[data-v-10e00a88]{padding-top:4px}.VPNavScreenAppearance[data-v-0dc5cf49]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-0dc5cf49]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenTranslations[data-v-41505286]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-41505286]{height:auto}.title[data-v-41505286]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-41505286]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-41505286]{margin-right:8px}.icon.chevron[data-v-41505286]{margin-left:4px}.list[data-v-41505286]{padding:4px 0 0 24px}.link[data-v-41505286]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-dc785598]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-dc785598],.VPNavScreen.fade-leave-active[data-v-dc785598]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-dc785598],.VPNavScreen.fade-leave-active .container[data-v-dc785598]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-dc785598],.VPNavScreen.fade-leave-to[data-v-dc785598]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-dc785598],.VPNavScreen.fade-leave-to .container[data-v-dc785598]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-dc785598]{display:none}}.container[data-v-dc785598]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-dc785598],.menu+.appearance[data-v-dc785598],.translations+.appearance[data-v-dc785598]{margin-top:24px}.menu+.social-links[data-v-dc785598]{margin-top:16px}.appearance+.social-links[data-v-dc785598]{margin-top:16px}.VPNav[data-v-5bdc5df3]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-5bdc5df3]{position:fixed}}.VPSidebarItem.level-0[data-v-c356ab37]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-c356ab37]{padding-bottom:10px}.item[data-v-c356ab37]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-c356ab37]{cursor:pointer}.indicator[data-v-c356ab37]{position:absolute;top:6px;bottom:6px;left:-17px;width:1px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-c356ab37],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-c356ab37],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-c356ab37],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-c356ab37]{background-color:var(--vp-c-brand)}.link[data-v-c356ab37]{display:flex;align-items:center;flex-grow:1}.text[data-v-c356ab37]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-c356ab37]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-c356ab37],.VPSidebarItem.level-2 .text[data-v-c356ab37],.VPSidebarItem.level-3 .text[data-v-c356ab37],.VPSidebarItem.level-4 .text[data-v-c356ab37],.VPSidebarItem.level-5 .text[data-v-c356ab37]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-c356ab37]{color:var(--vp-c-brand)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-1.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-2.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-3.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-4.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-5.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-c356ab37]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-c356ab37]{color:var(--vp-c-brand)}.caret[data-v-c356ab37]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-c356ab37]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-c356ab37]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-c356ab37]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-c356ab37]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-c356ab37],.VPSidebarItem.level-2 .items[data-v-c356ab37],.VPSidebarItem.level-3 .items[data-v-c356ab37],.VPSidebarItem.level-4 .items[data-v-c356ab37],.VPSidebarItem.level-5 .items[data-v-c356ab37]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-c356ab37]{display:none}.VPSidebar[data-v-b04a928c]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-b04a928c]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-b04a928c]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-b04a928c]{z-index:1;padding-top:var(--vp-nav-height);padding-bottom:128px;width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-b04a928c]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-b04a928c]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-b04a928c]{outline:0}.group+.group[data-v-b04a928c]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-b04a928c]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-9c8615dd]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-9c8615dd]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-9c8615dd]{top:14px;left:16px}}.Layout[data-v-324e8308]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-978bd032]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-978bd032]{margin:0 auto;max-width:1152px}.love[data-v-978bd032]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-978bd032]{width:28px;height:28px;fill:currentColor}.message[data-v-978bd032]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-978bd032]{padding-top:32px}.action[data-v-978bd032]{padding-top:40px;text-align:center}.VPTeamPage[data-v-b1cfd8dc]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-b1cfd8dc]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-b1cfd8dc-s],.VPTeamMembers+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-b1cfd8dc-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-b1cfd8dc-s],.VPTeamMembers+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:96px}}.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 64px}}.VPTeamPageTitle[data-v-46c5e327]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-46c5e327]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-46c5e327]{padding:80px 64px 48px}}.title[data-v-46c5e327]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-46c5e327]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-46c5e327]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-46c5e327]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-3bf2e850]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 64px}}.title[data-v-3bf2e850]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-3bf2e850]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-3bf2e850]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-3bf2e850]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-3bf2e850]{padding-top:40px}.VPTeamMembersItem[data-v-b0e83e62]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-b0e83e62]{padding:32px}.VPTeamMembersItem.small .data[data-v-b0e83e62]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-b0e83e62]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-b0e83e62]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-b0e83e62]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-b0e83e62]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-b0e83e62]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-b0e83e62]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-b0e83e62]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-b0e83e62]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-b0e83e62]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-b0e83e62]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-b0e83e62]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-b0e83e62]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-b0e83e62]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-b0e83e62]{text-align:center}.avatar[data-v-b0e83e62]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-b0e83e62]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-b0e83e62]{margin:0;font-weight:600}.affiliation[data-v-b0e83e62]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-b0e83e62]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-b0e83e62]:hover{color:var(--vp-c-brand)}.desc[data-v-b0e83e62]{margin:0 auto}.desc[data-v-b0e83e62] a{font-weight:500;color:var(--vp-c-brand);text-decoration-style:dotted;transition:color .25s}.links[data-v-b0e83e62]{display:flex;justify-content:center;height:56px}.sp-link[data-v-b0e83e62]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-b0e83e62]:hover,.sp .sp-link.link[data-v-b0e83e62]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-b0e83e62]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-6927e48e]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6927e48e]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6927e48e]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6927e48e]{max-width:876px}.VPTeamMembers.medium .container[data-v-6927e48e]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6927e48e]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6927e48e]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6927e48e]{max-width:760px}.container[data-v-6927e48e]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.adapter-table{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:1rem 1rem}.adapter-table a.adapter{display:flex;align-items:center;justify-content:center;width:100%;height:4rem;border-radius:12px;background-color:var(--vp-c-bg-soft);transition:all .3s ease;text-decoration:none;color:var(--vp-c-text);cursor:pointer;-webkit-user-select:none;user-select:none}.adapter-table .adapter:hover{background-color:var(--vp-c-bg-alt)}.el-scrollbar{--el-text-color-secondary: #909399;--el-scrollbar-opacity: .3;--el-scrollbar-bg-color: var(--el-text-color-secondary);--el-scrollbar-hover-opacity: .5;--el-scrollbar-hover-bg-color: var(--el-text-color-secondary);--el-transition-duration: .3s}.el-scrollbar{overflow:hidden;position:relative;height:100%}.el-scrollbar__wrap{overflow:auto;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color, var(--el-text-color-secondary));transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity, .3)}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color, var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity, .5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.badge[data-v-247eb287]{display:inline-block;font-size:14px;height:20px;line-height:16px;border-radius:3px;padding:2px 6px;color:var(--vp-badge-text);vertical-align:baseline}.badge.tip[data-v-247eb287]{background-color:var(--vp-badge-tip-bg)}.badge.warning[data-v-247eb287]{background-color:var(--vp-badge-warning-bg)}.badge.danger[data-v-247eb287]{background-color:var(--vp-badge-danger-bg)}h1 .badge[data-v-247eb287],h2 .badge[data-v-247eb287],h3 .badge[data-v-247eb287],h4 .badge[data-v-247eb287],h5 .badge[data-v-247eb287],h6 .badge[data-v-247eb287]{vertical-align:top}.badge+.badge[data-v-247eb287]{margin-left:5px}.spoiler[data-v-a373c1e6]{border-radius:4px;padding:1px 3px;margin:0 3px;text-shadow:none;transition:color .2s linear;background-color:var(--vp-custom-block-tip-text)}.spoiler[data-v-a373c1e6]:hover{color:var(--vp-c-bg)}.chat-message{position:relative;margin:1rem 0;opacity:0;transform:translate(-20%);transition:transform .3s ease-out,opacity .3s ease}.chat-message.shown{opacity:1;transform:translate(0)}.chat-message .avatar{width:2.8rem;height:2.8rem;position:absolute;border-radius:100%;transform:translateY(-1px);-webkit-user-select:none;user-select:none;pointer-events:none;text-align:center;line-height:2.8rem;font-size:1.6rem;color:#fff;font-family:Comic Sans MS}.chat-message .nickname{-webkit-user-select:none;user-select:none;position:relative;margin:0 0 .4rem 4.2rem;font-weight:700;font-size:.9rem}.chat-message:not(.no-padding) .message-box{padding:.5rem .7rem}.chat-message .message-box{position:relative;margin-left:4.2rem;width:fit-content;border-radius:.5rem;background-color:var(--vp-c-bg);word-break:break-all;line-height:26px!important}.chat-message .message-box>img{border-radius:.5rem}.chat-message .message-box img{vertical-align:middle}.chat-message .message-box p>img{margin:.2rem 0}.chat-message .message-box:before{content:"";position:absolute;right:100%;top:0;width:12px;height:12px;border:0 solid transparent;border-bottom-width:8px;border-bottom-color:currentColor;border-radius:0 0 0 32px;color:var(--vp-c-bg)}.chat-message .message-box p{margin:0!important;line-height:26px!important}.chat-message .message-box p.indent-1{padding-left:1rem}.chat-message .message-box p.indent-2{padding-left:2rem}.chat-message .message-box blockquote{font-size:.9rem;margin:0 0 .2rem;background-color:#f3f6f9;border:none;border-radius:.5rem;padding:.2rem .6rem;background-color:var(--vp-c-bg-alt);color:var(--vp-c-text-2)}.panel-view{position:relative;border-radius:6px;margin:1rem 0;overflow:auto hidden;background-color:var(--vp-c-bg-alt)}.panel-view.manager,.panel-view.container{background-color:#032f62}.panel-view .controls{display:initial;position:absolute;top:.8rem;width:100%}.panel-view .circle{position:absolute;top:2px;width:12px;height:12px;border-radius:6px}.panel-view .circle.red{left:17px;background-color:#ff5f56}.panel-view .circle.yellow{left:36px;background-color:#ffbd2e}.panel-view .circle.green{left:55px;background-color:#27c93f}.panel-view .title{text-align:center;width:100%;font-size:.9rem;line-height:1rem}.panel-view .title .tab{color:gray;cursor:pointer;transition:.3s ease}.panel-view .title .tab.active{color:#fff;cursor:default}.panel-view .title .title-text:not(:last-child):after{color:gray;content:" - "}.panel-view .title .tab+.tab:before{cursor:default;content:" | ";color:gray}.panel-view .content{padding:.2rem 1.2rem}.panel-view .content>p{font-size:.8rem;color:#909399;text-align:center}.panel-view.mini .controls{display:none}.panel-view:not(.mini) .content{padding-top:2rem}.tab-select{margin-top:16px}.tab-select .header span{display:inline-block;padding:4px 16px;font-size:12px;font-weight:500;cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--vp-c-text-2);background-color:var(--vp-code-block-bg);border-bottom:1px solid var(--vp-c-bg)}.tab-select .header span.active{color:var(--vp-c-text-1)}.tab-select .header span:first-child{border-top-left-radius:8px;border-bottom-left-radius:8px}.tab-select .header span:last-child{border-top-right-radius:8px;border-bottom-right-radius:8px}.tab-select .header span+span{border-left:1px solid var(--vp-c-bg)}@media (max-width: 639px){.tab-select.code .header{margin:0 -24px}}.tab-select.code .header span:first-child{border-bottom-left-radius:0}.tab-select.code .header span:last-child{border-bottom-right-radius:0}.tab-select.code .header+div{margin-top:0!important;border-top-left-radius:0!important}.tab-select.code .header+div span.lang{display:none}.VPSidebar{position:fixed!important;padding:0 32px;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-c-bg);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease}.vp-sidebar-view{padding:32px 0 64px;overflow-x:hidden}.VPSidebar.open{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar{z-index:1;width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-c-bg-alt);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}.vp-sidebar-view{padding-top:var(--vp-nav-height);padding-bottom:32px}}@media (min-width: 1440px){.VPSidebar{padding-left:max(32px,(100% - (var(--vp-layout-max-width) - 64px)) / 2);width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain{margin-top:calc(var(--vp-nav-height) * -1);height:var(--vp-nav-height)}.el-scrollbar .VPSidebar{height:calc(100% - 64px);top:64px}}.vp-sidebar-nav{outline:0}.vp-sidebar-nav>.group+.group{margin-top:16px}.group+.group{border-top:1px solid var(--vp-c-divider);padding-top:16px}@media (min-width: 960px){.group{padding-top:16px;width:calc(var(--vp-sidebar-width) - 64px)}}.group .VPSidebarItem.level-0{padding-bottom:0}.group .VPSidebarItem.level-0>.item>.text{padding:0;margin:4px 0}.Layout[data-v-7f463d15]{display:flex;flex-direction:column;min-height:100vh}.VPContent[data-v-7f463d15]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.has-sidebar[data-v-7f463d15]{margin:0}@media (min-width: 960px){.VPContent[data-v-7f463d15]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-7f463d15]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-7f463d15]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPSidebarItem.is-link{margin:4px 0}.VPSidebarItem .items{overflow:hidden}.VPSidebarItem .items:first-child .VPSidebarItem.is-link:first-child{padding-top:4px;padding-bottom:4px;line-height:24px;font-size:14px;margin:0}.VPSidebarItem .items:first-child .VPSidebarItem.is-link:first-child p.text{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem .items:first-child .VPSidebarItem.is-link:first-child.is-active p.text{color:var(--vp-c-brand)}.VPSidebarItem .item p.text{padding:0}@media (min-width: 1440px){.VPNavBar.has-sidebar .container .content{padding-right:0}.VPNavBar.has-sidebar .container .content .content-body{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px)}}@media (min-width: 960px){.VPNavBar.has-sidebar .title{background-color:var(--vp-sidebar-bg-color)}}:root{--shiki-token-text: #000000;--shiki-token-constant: #005CC5;--shiki-token-number: #005CC5;--shiki-token-string: #22863A;--shiki-token-comment: #6A737D;--shiki-token-keyword: #D73A49;--shiki-token-parameter: #E36209;--shiki-token-function: #6F42C1;--shiki-token-operator: #D73A49;--shiki-token-punctuation: #032F62;--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-lang: var(--vp-c-text-light-3);--vp-code-line-highlight-color: #0000000A}html.dark{--shiki-token-text: #ABB2BF;--shiki-token-constant: #E5C07B;--shiki-token-number: #D19A66;--shiki-token-string: #98C379;--shiki-token-comment: #7F848E;--shiki-token-keyword: #C678DD;--shiki-token-parameter: #E06C75;--shiki-token-function: #61AFEF;--shiki-token-operator: #56B6C2;--shiki-token-punctuation: #ABB2BF;--vp-code-line-highlight-color: #000000A0}html.dark{--vp-code-lang: var(--vp-c-text-dark-3)}.vp-doc [class*=language-]>span.lang{color:var(--vp-code-lang)}.vp-doc ol,.vp-doc ul{line-height:1.75;padding-left:1.5rem}.vp-doc li+li{margin-top:0}.vp-doc th,.vp-doc td{padding:.6em 1em}.vp-doc li>ol,.vp-doc li>ul{margin-top:0}.vp-doc h3+h3{margin-top:1rem}.vp-doc div[class*=language-]+div[class*=language-]{margin-top:0}.vp-doc blockquote>p{font-size:15px;line-height:1.7}.vp-doc .custom-block{font-size:15px;padding:1px 1.5rem;border-width:0;border-radius:0;border-left-width:4px;border-left-style:solid;position:relative}.vp-doc .custom-block .custom-block-title{display:none}.vp-doc .custom-block p{margin:1rem 0;line-height:1.7}.vp-doc .custom-block div[class*=language-]{margin:1rem 0}.vp-doc .custom-block:before{content:"!";position:absolute;top:20px;left:-12px;color:#fff;width:20px;height:20px;border-radius:100%;text-align:center;line-height:21px;font-weight:700;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px}.vp-doc .custom-block.info:before{background-color:var(--vp-custom-block-info-border)}.vp-doc .custom-block.tip:before{background-color:var(--vp-custom-block-tip-border)}.vp-doc .custom-block.warning:before{background-color:var(--vp-custom-block-warning-border)}.vp-doc .custom-block.danger:before{background-color:var(--vp-custom-block-danger-border)}html:not(.dark) .dark-only{display:none}html.dark .light-only{display:none}:root{--vp-c-brand-light: #6553C5;--vp-c-brand-lighter: #7666CC;--vp-c-brand-dark: #5545A1;--vp-c-brand-darker: #524785;--vp-c-brand-dimm: #4A3D8F10;--vp-c-brand: #5440BF;--vp-c-brand-alt: #8F17E6;--vp-nav-height: 64px}html.dark{--vp-c-brand: #8F7DE8;--vp-c-brand-light: #705CD6;--vp-c-brand-lighter: #5440BF;--vp-c-brand-dark: #A293EC;--vp-c-brand-darker: #B4A8F0;--vp-c-brand-dimm: #B4A8F010;--vp-c-brand-alt: #C079F2}:root{--vp-c-red-dimm-1: var(--vp-c-red-dark);--vp-c-red-dimm-2: var(--vp-c-red-darker);--vp-c-yellow-dimm-1: var(--vp-c-yellow-dark);--vp-c-yellow-dimm-2: var(--vp-c-yellow-darker);--vp-custom-block-tip-border: var(--vp-c-brand-light);--vp-custom-block-tip-text: var(--vp-c-brand-darker);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);--vp-badge-text: var(--vp-c-text-dark-1);--vp-badge-tip-bg: var(--vp-c-brand);--vp-badge-warning-bg: var(--vp-c-yellow-darker);--vp-badge-danger-bg: var(--vp-c-red-darker)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand) !important}.el-scrollbar__bar{z-index:50}blockquote.route .badge{border-top-right-radius:0;border-bottom-right-radius:0}blockquote.route code{display:inline-flex;align-items:center;vertical-align:middle;height:20px;border-top-left-radius:0;border-bottom-left-radius:0}.home[data-v-b7c0548e]{position:absolute;width:100%;top:0;left:0;height:100vh;overflow-y:auto;display:grid;grid-template-rows:repeat(1,100vh)}.footer[data-v-b7c0548e]{position:absolute;bottom:0;left:0;width:100%;text-align:center;padding:1rem 0;font-size:.8rem;color:var(--vp-text-light);text-decoration:none;transition:color .3s ease}.footer[data-v-b7c0548e]:hover{color:var(--vp-text)}.screen[data-v-b7c0548e]{padding:6rem;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center}h1[data-v-b7c0548e]{font-size:3rem;line-height:1.5}.desc[data-v-b7c0548e]{color:var(--vp-text-light);text-transform:uppercase;text-align:center;line-height:2;margin:1rem 0}.actions[data-v-b7c0548e]{margin:1.5rem 0;display:flex;flex-wrap:wrap;gap:2.2rem;justify-content:center}@media (max-width: 600px){.actions[data-v-b7c0548e]{margin:4rem 0 0;flex-direction:column}}.actions .action-button[data-v-b7c0548e]{flex:1 0 auto;-webkit-user-select:none;user-select:none;display:inline-block;font-size:1.05rem;line-height:1.4;padding:.5rem 2.2rem;border-width:2px;border-style:solid;border-radius:2rem;transition:color .3s ease,background-color .3s ease,border-color .3s ease;box-sizing:border-box;cursor:pointer}@media (max-width: 600px){.actions .action-button[data-v-b7c0548e]{padding:.5rem 4rem}}.actions .action-button.secondary[data-v-b7c0548e]{color:var(--vp-button-brand-hover-bg);border-color:var(--vp-button-brand-bg)}.actions .action-button.secondary[data-v-b7c0548e]:hover{color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)} diff --git a/assets/zh-CN_advanced_admin.md.846d77e2.js b/assets/zh-CN_advanced_admin.md.846d77e2.js new file mode 100644 index 0000000..0573e34 --- /dev/null +++ b/assets/zh-CN_advanced_admin.md.846d77e2.js @@ -0,0 +1 @@ +import{_ as s,t as c,v as n,x as l,A as e,N as a,G as t,K as d,U as i}from"./chunks/framework.187e34d2.js";const C=JSON.parse('{"title":"管理接口 可选 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/admin.md","filePath":"zh-CN/advanced/admin.md"}'),r={name:"zh-CN/advanced/admin.md"},_={id:"管理接口-可选-实验性",tabindex:"-1"},h=e("a",{class:"header-anchor",href:"#管理接口-可选-实验性","aria-label":'Permalink to "管理接口 可选 实验性"'},"​",-1),b=i('

TIP

这是一个可选功能。

WARNING

这是一个实验性功能。

管理 API 包含了与 SDK 状态相关、与具体的平台无关的操作,例如创建和移除 WebHook 等。

管理 API 通过 /{path}/{version}/admin/{method} 路由提供。通信方式与 HTTP API 类似,但不需要 X-PlatformX-Self-ID 请求头。

API

获取登录信息列表

',6),p={class:"route"},m=e("code",null,"/admin/login.list",-1),u=e("h3",{id:"创建-webhook",tabindex:"-1"},[a("创建 WebHook "),e("a",{class:"header-anchor",href:"#创建-webhook","aria-label":'Permalink to "创建 WebHook"'},"​")],-1),k={class:"route"},f=e("code",null,"/admin/webhook.create",-1),P=e("h3",{id:"移除-webhook",tabindex:"-1"},[a("移除 WebHook "),e("a",{class:"header-anchor",href:"#移除-webhook","aria-label":'Permalink to "移除 WebHook"'},"​")],-1),T={class:"route"},v=e("code",null,"/admin/webhook.delete",-1);function N(g,x,w,A,I,S){const o=c("badge");return n(),l("div",null,[e("h1",_,[a("管理接口 "),t(o,null,{default:d(()=>[a("可选")]),_:1}),a(),t(o,{type:"warning"},{default:d(()=>[a("实验性")]),_:1}),a(),h]),b,e("blockquote",p,[t(o,null,{default:d(()=>[a("POST")]),_:1}),m]),u,e("blockquote",k,[t(o,null,{default:d(()=>[a("POST")]),_:1}),f]),P,e("blockquote",T,[t(o,null,{default:d(()=>[a("POST")]),_:1}),v])])}const H=s(r,[["render",N]]);export{C as __pageData,H as default}; diff --git a/assets/zh-CN_advanced_admin.md.846d77e2.lean.js b/assets/zh-CN_advanced_admin.md.846d77e2.lean.js new file mode 100644 index 0000000..5f13f25 --- /dev/null +++ b/assets/zh-CN_advanced_admin.md.846d77e2.lean.js @@ -0,0 +1 @@ +import{_ as s,t as c,v as n,x as l,A as e,N as a,G as t,K as d,U as i}from"./chunks/framework.187e34d2.js";const C=JSON.parse('{"title":"管理接口 可选 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/admin.md","filePath":"zh-CN/advanced/admin.md"}'),r={name:"zh-CN/advanced/admin.md"},_={id:"管理接口-可选-实验性",tabindex:"-1"},h=e("a",{class:"header-anchor",href:"#管理接口-可选-实验性","aria-label":'Permalink to "管理接口 可选 实验性"'},"​",-1),b=i("",6),p={class:"route"},m=e("code",null,"/admin/login.list",-1),u=e("h3",{id:"创建-webhook",tabindex:"-1"},[a("创建 WebHook "),e("a",{class:"header-anchor",href:"#创建-webhook","aria-label":'Permalink to "创建 WebHook"'},"​")],-1),k={class:"route"},f=e("code",null,"/admin/webhook.create",-1),P=e("h3",{id:"移除-webhook",tabindex:"-1"},[a("移除 WebHook "),e("a",{class:"header-anchor",href:"#移除-webhook","aria-label":'Permalink to "移除 WebHook"'},"​")],-1),T={class:"route"},v=e("code",null,"/admin/webhook.delete",-1);function N(g,x,w,A,I,S){const o=c("badge");return n(),l("div",null,[e("h1",_,[a("管理接口 "),t(o,null,{default:d(()=>[a("可选")]),_:1}),a(),t(o,{type:"warning"},{default:d(()=>[a("实验性")]),_:1}),a(),h]),b,e("blockquote",p,[t(o,null,{default:d(()=>[a("POST")]),_:1}),m]),u,e("blockquote",k,[t(o,null,{default:d(()=>[a("POST")]),_:1}),f]),P,e("blockquote",T,[t(o,null,{default:d(()=>[a("POST")]),_:1}),v])])}const H=s(r,[["render",N]]);export{C as __pageData,H as default}; diff --git a/assets/zh-CN_advanced_internal.md.3fc95037.js b/assets/zh-CN_advanced_internal.md.3fc95037.js new file mode 100644 index 0000000..68959c0 --- /dev/null +++ b/assets/zh-CN_advanced_internal.md.3fc95037.js @@ -0,0 +1,7 @@ +import{_ as n,t as s,v as d,x as o,A as e,N as t,G as r,K as c,U as l}from"./chunks/framework.187e34d2.js";const y=JSON.parse('{"title":"内部接口 可选","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/internal.md","filePath":"zh-CN/advanced/internal.md"}'),i={name:"zh-CN/advanced/internal.md"},p={id:"内部接口-可选",tabindex:"-1"},h=e("a",{class:"header-anchor",href:"#内部接口-可选","aria-label":'Permalink to "内部接口 可选"'},"​",-1),_=l(`

TIP

这是一个可选功能。

Satori 提供了访问任意平台内部接口的能力。这意味着,你可以大多数情况下编写通用代码,并在需要的时候使用内部接口来实现平台特定功能。

内部 API

内部 API 通过 /{path}/{version}/internal/{method} 路由提供。通信方式与 HTTP API 类似。

一个合法的请求示例形如:

text
POST /v1/internal/get_channel
+Content-Type: application/json
+Authorization: Bearer 1234567890
+X-Platform: discord
+X-Self-ID: 1234567890
+
+["1234567890"]

内部事件

内部事件是一类特殊的事件对象。它的结构如下:

字段类型说明
idnumber事件 ID
typestring事件类型,固定为 internal
platformstring接收者的平台名称
self_idstring接收者的平台账号
timestampnumber事件的时间戳
_typestring内部事件类型
_dataobject内部事件数据
`,9);function m(b,k,u,v,x,f){const a=s("badge");return d(),o("div",null,[e("h1",p,[t("内部接口 "),r(a,null,{default:c(()=>[t("可选")]),_:1}),t(),h]),_])}const g=n(i,[["render",m]]);export{y as __pageData,g as default}; diff --git a/assets/zh-CN_advanced_internal.md.3fc95037.lean.js b/assets/zh-CN_advanced_internal.md.3fc95037.lean.js new file mode 100644 index 0000000..d5d882d --- /dev/null +++ b/assets/zh-CN_advanced_internal.md.3fc95037.lean.js @@ -0,0 +1 @@ +import{_ as n,t as s,v as d,x as o,A as e,N as t,G as r,K as c,U as l}from"./chunks/framework.187e34d2.js";const y=JSON.parse('{"title":"内部接口 可选","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/internal.md","filePath":"zh-CN/advanced/internal.md"}'),i={name:"zh-CN/advanced/internal.md"},p={id:"内部接口-可选",tabindex:"-1"},h=e("a",{class:"header-anchor",href:"#内部接口-可选","aria-label":'Permalink to "内部接口 可选"'},"​",-1),_=l("",9);function m(b,k,u,v,x,f){const a=s("badge");return d(),o("div",null,[e("h1",p,[t("内部接口 "),r(a,null,{default:c(()=>[t("可选")]),_:1}),t(),h]),_])}const g=n(i,[["render",m]]);export{y as __pageData,g as default}; diff --git a/assets/zh-CN_index.md.d22ed2fa.js b/assets/zh-CN_index.md.d22ed2fa.js new file mode 100644 index 0000000..5141024 --- /dev/null +++ b/assets/zh-CN_index.md.d22ed2fa.js @@ -0,0 +1 @@ +import{_ as e,v as t,x as r}from"./chunks/framework.187e34d2.js";const h=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","links":{"starter":"/zh-CN/introduction.html"},"home":{"primary":"即刻起步","description":"THE UNIVERSAL MESSENGER PROTOCOL"}},"headers":[],"relativePath":"zh-CN/index.md","filePath":"zh-CN/index.md"}'),a={name:"zh-CN/index.md"};function n(o,i,s,c,d,m){return t(),r("div")}const _=e(a,[["render",n]]);export{h as __pageData,_ as default}; diff --git a/assets/zh-CN_index.md.d22ed2fa.lean.js b/assets/zh-CN_index.md.d22ed2fa.lean.js new file mode 100644 index 0000000..5141024 --- /dev/null +++ b/assets/zh-CN_index.md.d22ed2fa.lean.js @@ -0,0 +1 @@ +import{_ as e,v as t,x as r}from"./chunks/framework.187e34d2.js";const h=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","links":{"starter":"/zh-CN/introduction.html"},"home":{"primary":"即刻起步","description":"THE UNIVERSAL MESSENGER PROTOCOL"}},"headers":[],"relativePath":"zh-CN/index.md","filePath":"zh-CN/index.md"}'),a={name:"zh-CN/index.md"};function n(o,i,s,c,d,m){return t(),r("div")}const _=e(a,[["render",n]]);export{h as __pageData,_ as default}; diff --git a/assets/zh-CN_introduction.md.935b9161.js b/assets/zh-CN_introduction.md.935b9161.js new file mode 100644 index 0000000..893ed78 --- /dev/null +++ b/assets/zh-CN_introduction.md.935b9161.js @@ -0,0 +1 @@ +import{_ as a,v as t,x as e,U as r}from"./chunks/framework.187e34d2.js";const u=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/introduction.md","filePath":"zh-CN/introduction.md"}'),s={name:"zh-CN/introduction.md"},o=r('

介绍

Satori 是一个通用的聊天协议。我们希望 Satori 能够抹平不同聊天平台之间的差异,让开发者以更低的成本开发出跨平台、可扩展、高性能的聊天应用。

Satori 的名称来源于游戏东方 Project 中的角色 古明地觉 (Komeiji Satori)。古明地觉能够以心灵感应的方式与各种动物交流,取这个名字是希望 Satori 能够成为各个聊天平台之间的桥梁。

Satori 的开发团队长期从事聊天机器人开发,熟悉各种聊天平台的通信方式。经过长达 4 年的发展,Satori 有了健全的设计和完善的实现。目前,Satori 官方提供了超过 15 个聊天平台的适配器,完全覆盖了世界上主流的聊天平台:

这些适配器不仅为你带来了开箱即用的体验,也从实际上证明了 Satori 协议的通用性和扩展性。

不必担心使用 Satori 后会失去对聊天平台的控制。得益于 Satori 的内部接口机制,你完全可以大多数情况下编写通用代码,并在需要的时候使用内部接口来实现平台特定功能。

此外,Satori 还为规模化的场景提供了全套的解决方案。小到个人电脑上的聊天机器人,大到分布式集群上的聊天平台后端,Satori 都能满足你的需求。

',8),i=[o];function c(p,d,l,n,_,h){return t(),e("div",null,i)}const m=a(s,[["render",c]]);export{u as __pageData,m as default}; diff --git a/assets/zh-CN_introduction.md.935b9161.lean.js b/assets/zh-CN_introduction.md.935b9161.lean.js new file mode 100644 index 0000000..f8515b1 --- /dev/null +++ b/assets/zh-CN_introduction.md.935b9161.lean.js @@ -0,0 +1 @@ +import{_ as a,v as t,x as e,U as r}from"./chunks/framework.187e34d2.js";const u=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/introduction.md","filePath":"zh-CN/introduction.md"}'),s={name:"zh-CN/introduction.md"},o=r("",8),i=[o];function c(p,d,l,n,_,h){return t(),e("div",null,i)}const m=a(s,[["render",c]]);export{u as __pageData,m as default}; diff --git a/assets/zh-CN_protocol_api.md.88942d02.js b/assets/zh-CN_protocol_api.md.88942d02.js new file mode 100644 index 0000000..1a0e6c9 --- /dev/null +++ b/assets/zh-CN_protocol_api.md.88942d02.js @@ -0,0 +1,7 @@ +import{_ as t,v as a,x as e,U as o}from"./chunks/framework.187e34d2.js";const _=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/api.md","filePath":"zh-CN/protocol/api.md"}'),d={name:"zh-CN/protocol/api.md"},n=o(`

API

Satori 协议规定了一套基于 HTTP 的 API 服务,用于发送消息和调用其他功能。

HTTP API

这是一套 HTTP RPC 风格的 API,所有 URL 的形式均为 /{path}/{version}/{resource}.{method}。其中,path 为部署路径 (可以为空),version 为 API 的版本号,resource 是资源类型,method 为方法名。

目前 Satori 仅有 v1 一个版本。

所有 API 的请求都使用 POST,参数以 application/json 的形式编码在请求体中。返回值也是 JSON 格式。

请求头中需要包含 X-PlatformX-Self-ID 字段,分别表示平台名称和平台账号。

一个合法的请求示例形如:

text
POST /v1/channel.get
+Content-Type: application/json
+Authorization: Bearer 1234567890
+X-Platform: discord
+X-Self-ID: 1234567890
+
+{"channel_id": "1234567890"}

状态码

状态码描述
200 (OK)请求成功
400 (BAD REQUEST)请求格式错误
401 (UNAUTHORIZED)缺失鉴权
403 (FORBIDDEN)权限不足
404 (NOT FOUND)资源不存在
405 (METHOD NOT ALLOWED)请求方法不支持
5XX (SERVER ERROR)服务器错误

鉴权

鉴权通过 HTTP API 中的 Authorization 请求头来实现。其中涉及的鉴权令牌由 SDK 分发,本协议不做任何限制。

如果 SDK 没有配置鉴权,则应用无需提供上述请求头。

分页

部分 API 可能会返回一组数据。这种情况下,响应会是一个 List 对象:

字段类型描述
dataarray数据
nextstring?下一页的令牌

你可以使用 next 令牌来获取下一页的数据。如果 next 为空,则表示没有更多数据了。

扩展 API

除了标准的资源 API 外,Satori 还提供了一些扩展 API,用于获取特定的数据。

  • /{path}/{version}/admin 的子路由用于访问 SDK 相关接口,请参见 管理 API
  • /{path}/{version}/internal 的子路由用于访问平台内部接口,请参见 内部 API
`,21),r=[n];function s(i,c,l,p,h,P){return a(),e("div",null,r)}const A=t(d,[["render",s]]);export{_ as __pageData,A as default}; diff --git a/assets/zh-CN_protocol_api.md.88942d02.lean.js b/assets/zh-CN_protocol_api.md.88942d02.lean.js new file mode 100644 index 0000000..7d9d14d --- /dev/null +++ b/assets/zh-CN_protocol_api.md.88942d02.lean.js @@ -0,0 +1 @@ +import{_ as t,v as a,x as e,U as o}from"./chunks/framework.187e34d2.js";const _=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/api.md","filePath":"zh-CN/protocol/api.md"}'),d={name:"zh-CN/protocol/api.md"},n=o("",21),r=[n];function s(i,c,l,p,h,P){return a(),e("div",null,r)}const A=t(d,[["render",s]]);export{_ as __pageData,A as default}; diff --git a/assets/zh-CN_protocol_elements.md.83ace3fa.js b/assets/zh-CN_protocol_elements.md.83ace3fa.js new file mode 100644 index 0000000..09a07a3 --- /dev/null +++ b/assets/zh-CN_protocol_elements.md.83ace3fa.js @@ -0,0 +1,17 @@ +import{_ as t,v as a,x as e,U as s}from"./chunks/framework.187e34d2.js";const y=JSON.parse('{"title":"标准元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/elements.md","filePath":"zh-CN/protocol/elements.md"}'),o={name:"zh-CN/protocol/elements.md"},n=s(`

标准元素

基础元素

基本元素是最常见的消息元素,它们能够在大多数平台上正常显示,是组成消息的基本单位。

纯文本

一段纯文本。

提及用户 (at)

属性类型范围描述
idstring?收发目标用户的 ID
namestring?收发目标用户的名称
rolestring?收发目标角色
typestring?收发特殊操作,例如 all 表示 @全体成员,here 表示 @在线成员

<at> 元素用于提及某个或某些用户。

提及频道 (sharp)

属性类型范围描述
idstring收发目标频道的 ID
namestring?收发目标频道的名称

<sharp> 元素用于提及某个频道。

链接 (a)

属性类型范围描述
hrefstring收发链接的 URL

<a> 元素用于显示一个链接。当平台不支持链接时,建议显示为 content (href) 的形式。

资源元素

资源消息元素表示文本中存在的资源文件。不同的平台对资源文件的支持存在较大的差异。发送时只需提供 src。如果某个平台不支持特定的资源类型,适配器应该用 src 代替。如果某个平台不支持将资源消息元素和其他消息元素同时发送,适配器应该分多条发送,并返回最后一条消息的 ID。

属性类型范围描述
srcstring收发资源的 URL
cacheboolean?是否使用已缓存的文件
timeoutstring?下载文件的最长时间 (毫秒)

图片 (img)

除了上述通用属性外,还支持下面的属性:

属性类型范围描述
widthnumber?图片的宽度
heightnumber?图片的高度

<img> 元素用于表示图片。

语音 (audio)

参见上述通用属性。

<audio> 元素用于表示语音。

视频 (video)

参见上述通用属性。

<video> 元素用于表示视频。

文件 (file)

参见上述通用属性。

<file> 元素用于表示文件。

修饰元素

修饰元素用于修饰其中的内容。如果对应的平台不支持对应的元素,可以忽略这个元素本身,正常渲染其中的子元素。

粗体 (b, strong)

<b><strong> 元素用于将其中的内容以粗体显示。

斜体 (i, em)

<i><em> 元素用于将其中的内容以斜体显示。

下划线 (u, ins)

<u><ins> 元素用于为其中的内容附加下划线。

删除线 (s, del)

<s><del> 元素用于为其中的内容附加删除线。

剧透 (spl)

<spl> 元素用于将其中的内容标记为剧透 (默认会被隐藏,点击后才显示)。

代码 (code)

<code> 元素用于将其中的内容以等宽字体显示 (通常还会有特定的背景色)。

上标 (sup)

<sup> 元素用于将其中的内容以上标显示。

下标 (sub)

<sub> 元素用于将其中的内容以下标显示。

排版元素

换行 (br)

<br> 元素表示一个独立的换行。

段落 (p)

<p> 元素表示一个段落。在渲染时,它与相邻的元素之间会确保有一个换行。

消息 (message)

属性类型范围描述
idstring?消息的 ID
forwardboolean?是否为转发消息

<message> 元素的基本用法是表示一条消息。子元素对应于消息的内容。如果其没有子元素,则消息不会被发送。

当出现 <message> 元素时,之前的元素会被立即视为一条消息被发送。因此下面的两种写法是等价的:

html
<!-- 第一种写法:发送两条消息 -->
+<message>hello</message>
+<message>world</message>
+
+<!-- 第二种写法:用一条空消息隔开两段文本,实际上仍然会发送两条消息 -->
+hello<message/>world

部分平台允许你模拟其他用户发送消息:

html
<message>
+  <author user-id="123123123" nickname="Alice" avatar="url"/>
+  hello world
+</message>

在支持转发的平台上,你可以使用 forward 配合 id 属性来转发一条消息:

html
<message id="123456789" forward/>

在支持合并转发的平台上,你可以使用带有 forward 属性的 <message> 元素嵌套其他 <message> 元素来实现合并转发:

html
<message forward>
+  <message id="123456789"/>
+  <message id="987654321"/>
+  <!-- 合并转发里也可以嵌套模拟其他用户发送的消息 -->
+  <message>
+    <author user-id="123123123" nickname="Alice" avatar="url"/>
+    hello world
+  </message>
+</message>

元信息元素

元信息元素通常不会被渲染,但会影响到消息的发送行为。

引用 (quote)

<quote> 元素用于表示对消息引用。它的子元素会被渲染为引用的内容。理论上所有 <message> 元素的特性也可以用于 <quote> 元素,包括子元素 (构造引用消息) 和 forward 属性 (引用合并转发)。然而目前似乎并没有平台提供了这样的支持。

作者 (author)

属性类型范围描述
user-idstring?用户 ID
nicknamestring?昵称
avatarstring?头像 URL

<author> 元素用于表示消息的作者。它的子元素会被渲染为作者的名字。

`,71),r=[n];function l(i,d,p,h,c,k){return a(),e("div",null,r)}const b=t(o,[["render",l]]);export{y as __pageData,b as default}; diff --git a/assets/zh-CN_protocol_elements.md.83ace3fa.lean.js b/assets/zh-CN_protocol_elements.md.83ace3fa.lean.js new file mode 100644 index 0000000..0f4fa4e --- /dev/null +++ b/assets/zh-CN_protocol_elements.md.83ace3fa.lean.js @@ -0,0 +1 @@ +import{_ as t,v as a,x as e,U as s}from"./chunks/framework.187e34d2.js";const y=JSON.parse('{"title":"标准元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/elements.md","filePath":"zh-CN/protocol/elements.md"}'),o={name:"zh-CN/protocol/elements.md"},n=s("",71),r=[n];function l(i,d,p,h,c,k){return a(),e("div",null,r)}const b=t(o,[["render",l]]);export{y as __pageData,b as default}; diff --git a/assets/zh-CN_protocol_events.md.10578a93.js b/assets/zh-CN_protocol_events.md.10578a93.js new file mode 100644 index 0000000..ca61df4 --- /dev/null +++ b/assets/zh-CN_protocol_events.md.10578a93.js @@ -0,0 +1 @@ +import{_ as a,t as r,v as c,x as h,A as e,N as t,G as s,K as l,U as d}from"./chunks/framework.187e34d2.js";const P=JSON.parse('{"title":"事件","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/events.md","filePath":"zh-CN/protocol/events.md"}'),i={name:"zh-CN/protocol/events.md"},n=d('

事件

Satori 协议规定了两套事件服务,分别基于 WebSocket 和 WebHook。你可以根据自己的需要进行选择。

类型定义

Event

字段类型描述
idnumber事件 ID
typestring事件类型
platformstring接收者的平台名称
self_idstring接收者的平台账号
timestampnumber事件的时间戳
channelChannel?事件所属的频道
guildGuild?事件所属的群组
loginLogin?事件的登录信息
memberGuildMember?事件的目标成员
messageMessage?事件的消息
operatorUser?事件的操作者
roleGuildRole?事件的目标角色
userUser?事件的目标用户

事件中的各属性遵循 资源提升 规则。

WebSocket

WebSocket 服务用于在 Satori SDK 与应用之间维护一个持久的、有状态的链接。通过这个链接,Satori 应用可以实时接收 SDK 推送的事件。

WebSocket 服务的地址为 /{path}/{version}/events。其中,path 为部署路径 (可以为空),version 为 API 的版本号。

目前 Satori 仅有 v1 一个版本。

连接流程

总的来说,Satori 应用需要在连接后遵循以下步骤:

  1. 连接建立后,在 10s 内发送一个 IDENTIFY 信令,用于鉴权和恢复会话;
    SDK 收到后会回复一个 READY 信令,并开启事件推送;
  2. 连接建立后,每隔 10s 向 SDK 发送一次 PING 信令;
    SDK 收到后会回复一个 PONG 信令;
  3. 应用持续接收来自 SDK 的 EVENT 信令,用于接收事件。

信令的数据结构如下:

字段类型描述
opnumber信令类型
bodyobject?信令数据

信令类型如下:

名称方向描述
EVENT0接收事件
PING1发送心跳
PONG2接收心跳回复
IDENTIFY3发送鉴权
READY4接收鉴权回复

IDENTIFY 信令的 body 数据结构如下:

字段类型描述
tokenstring?鉴权令牌
sequencenumber?序列号

READY 信令的 body 数据结构如下:

字段类型描述
loginsLogin[]登录信息

EVENT 信令的 body 数据结构参见 Event

鉴权

WebSocket 鉴权通过 IDENTIFY 信令的 token 字段来实现。其中涉及的鉴权令牌由 SDK 分发,本协议不做任何限制。

如果 SDK 没有配置鉴权,则应用无需提供上述字段。

会话恢复

当连接短暂中断时,Satori 应用可以通过 IDENTIFY 信令的 sequence 字段来恢复会话。sequence 字段的值为上一次连接中最后一个接收到的 EVENT 信令的 id 字段。会话恢复后,SDK 会向应用推送所有在断开连接期间发生的事件。

',27),b={id:"webhook-可选",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#webhook-可选","aria-label":'Permalink to "WebHook 可选"'},"​",-1),u=d('

TIP

这是一个可选功能。

WebHook 服务是指,Satori SDK 在接收到平台事件时,向应用提供的 HTTP 地址推送事件。一个 SDK 应当可以配置多个 WebHook,并允许应用对发送者进行鉴权。这些 WebHook 的配置方式由 SDK 自身决定,本协议规范化了一组 管理接口,但不做强制要求。

事件推送以 POST 的形式进行,参数以 application/json 的形式编码在请求体中。数据结构参见 Event

应用收到 WebHook 请求时,如果能够顺利鉴权并处理请求,应当返回 2XX 的状态码。如果鉴权失败,应当返回 4XX 的状态码。如果处理失败,应当返回 5XX 的状态码。

反向鉴权

TIP

这里的鉴权与 API 与 WebSocket 中的鉴权逻辑类似,但方向相反。

Satori 应用可以要求 SDK 在发送 WebHook 请求时附带一个 Authorization 请求头,格式为 Bearer {token}。其中,token 由应用进行分发。

',7);function m(_,k,S,f,T,v){const o=r("badge");return c(),h("div",null,[n,e("h2",b,[t("WebHook "),s(o,null,{default:l(()=>[t("可选")]),_:1}),t(),p]),u])}const N=a(i,[["render",m]]);export{P as __pageData,N as default}; diff --git a/assets/zh-CN_protocol_events.md.10578a93.lean.js b/assets/zh-CN_protocol_events.md.10578a93.lean.js new file mode 100644 index 0000000..8e8b128 --- /dev/null +++ b/assets/zh-CN_protocol_events.md.10578a93.lean.js @@ -0,0 +1 @@ +import{_ as a,t as r,v as c,x as h,A as e,N as t,G as s,K as l,U as d}from"./chunks/framework.187e34d2.js";const P=JSON.parse('{"title":"事件","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/events.md","filePath":"zh-CN/protocol/events.md"}'),i={name:"zh-CN/protocol/events.md"},n=d("",27),b={id:"webhook-可选",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#webhook-可选","aria-label":'Permalink to "WebHook 可选"'},"​",-1),u=d("",7);function m(_,k,S,f,T,v){const o=r("badge");return c(),h("div",null,[n,e("h2",b,[t("WebHook "),s(o,null,{default:l(()=>[t("可选")]),_:1}),t(),p]),u])}const N=a(i,[["render",m]]);export{P as __pageData,N as default}; diff --git a/assets/zh-CN_protocol_index.md.7daa6424.js b/assets/zh-CN_protocol_index.md.7daa6424.js new file mode 100644 index 0000000..8ac48f6 --- /dev/null +++ b/assets/zh-CN_protocol_index.md.7daa6424.js @@ -0,0 +1 @@ +import{_ as e,v as o,x as a,U as r}from"./chunks/framework.187e34d2.js";const u=JSON.parse('{"title":"总览","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/index.md","filePath":"zh-CN/protocol/index.md"}'),t={name:"zh-CN/protocol/index.md"},s=r('

总览

Satori 协议的通信方式分为两块:

  • 一套基于 HTTP 的 API 服务,用于发送消息和调用其他功能
  • 一套基于 WebSocket 或者 WebHook 的事件服务,用于接收消息和其他事件

核心概念

在我们开始之前,先来了解一些与 Satori 相关的核心概念。

SDK 是指实现了 Satori 协议的软件。应用 (Application) 是指接入了 Satori 协议的软件。应用通过与 SDK 通信,以实现聊天平台的功能。

平台 (Platform) 是指聊天平台,比如 Discord、Telegram 等。同一平台内的用户间具有相互发送消息的能力,而不同平台的用户间则没有。对于 Rocket Chat 这一类可自建的聊天平台而言,每个独立的自建服务器都视为不同的平台。

消息 (Message) 是字面意义上的消息。通常是文本或富文本格式的,有时也会包含图片、语音等媒体资源。在 Koishi 中,消息通过消息元素进行统一编码。

频道 (Channel) 是消息的集合。一个频道包含了具备时间、逻辑顺序的一系列消息。频道又分为私聊频道和群聊频道,其中私聊频道有且仅有两人参与,而群聊频道可以有任意多人参与。

群组 (Guild) 是平台用户的集合。一个群组通常会同时包含一组用户和频道,并通过权限机制让其中的部分用户进行管理。在部分平台中,群组和群聊频道的概念恰好是重合的 (例如 QQ):一个群组内有且仅有一个群聊频道。私聊频道不属于任何群组。

可选字段

由于不同平台实现的差异,Satori 协议中的大部分字段都是可选的。可选字段的类型后面会有一个 ? 标记。

对于任意可选字段,相关 API 调用的结果中可能不含该字段,也可能该字段的值为 null。其中,前者表示该 API 并未提供这一字段,但可能由其他 API 提供;后者表示该 API 提供了这一字段,但其值为 null

资源

Satori 协议中的资源是指一类具有确定结构的对象。例如,用户频道消息 等都是资源。部分事件和 API 的返回值中会包含这些资源对象。

资源对象的某个字段可以是另一个资源对象,例如消息对象中的 user 字段就是一个用户对象。当资源对象出现多级嵌套时,内层的资源将会被统一提升到最外层。例如,当接收到消息事件时,事件体中可以访问到 message, member, user, channel 等资源,但 message 中就不再存在 memberuser 字段了。

',16),c=[s];function n(d,i,l,h,p,_){return o(),a("div",null,c)}const g=e(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/zh-CN_protocol_index.md.7daa6424.lean.js b/assets/zh-CN_protocol_index.md.7daa6424.lean.js new file mode 100644 index 0000000..d83bbff --- /dev/null +++ b/assets/zh-CN_protocol_index.md.7daa6424.lean.js @@ -0,0 +1 @@ +import{_ as e,v as o,x as a,U as r}from"./chunks/framework.187e34d2.js";const u=JSON.parse('{"title":"总览","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/index.md","filePath":"zh-CN/protocol/index.md"}'),t={name:"zh-CN/protocol/index.md"},s=r("",16),c=[s];function n(d,i,l,h,p,_){return o(),a("div",null,c)}const g=e(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/zh-CN_protocol_message.md.de31f79b.js b/assets/zh-CN_protocol_message.md.de31f79b.js new file mode 100644 index 0000000..1ae557e --- /dev/null +++ b/assets/zh-CN_protocol_message.md.de31f79b.js @@ -0,0 +1,7 @@ +import{_ as t,v as e,x as a,U as s}from"./chunks/framework.187e34d2.js";const y=JSON.parse('{"title":"消息编码","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/message.md","filePath":"zh-CN/protocol/message.md"}'),o={name:"zh-CN/protocol/message.md"},l=s(`

消息编码

Satori 中的消息使用消息元素 (Message Element) 进行编码。消息元素的语法与 XHTML 类似。

语法

消息元素的语法与 HTML 类似,但是不完全相同。

字符

你可以在消息元素内使用任何字符。不过部分特殊字符需要转义:

原始字符转义写法
"&quot;
&&amp;
<&lt;
>&gt;

根据上下文的不同,有些字符可能不需要被转义或使用其他的转义方式。

除此以外,你可以使用十进制或十六进制转义任何字符。例如 ' 也可以被书写成 &#39;&#x27;

标签

使用一对尖括号包裹元素名,加上可选的属性、闭合指示符,就构成了一个标签。

元素名由小写字母、数字和连字符组成,且必须以字母开头。在元素名前后添加 / 表示这是一个结束标签或自闭合标签,没有 / 符号时则表示这是一个起始标签:

  • <tag> 一个起始标签
  • </tag> 一个结束标签
  • <tag/> 一个自闭合标签

属性

起始或自闭合标签的元素名后接受可选的属性列表。每个属性必须形如以下形式:

  • key
  • key="value" (此时 value 中的 " 需要被转义)
  • key='value' (此时 value 中的 ' 需要被转义)

下面是一段示例:

html
<tag foo="1" bar/>

元素

一个元素要么是自闭合标签,要么由一对同名的起始标签和结束标签构成。元素的内容指起始标签和结束标签中间的部分,可以包含文本内容或其他元素。对于自闭合标签,元素的内容为空。下面是一段示例:

html
<parent>
+  text content
+  <child/>
+</parent>

当存在未配对的元素时,将自动视为文本内容的一部分。文本内容前后如果存在包含换行符的连续空白字符,则会被忽略。这意味着下面两段代码是等价的:

html
<tag>
+  <foo> bar
+  <!-- comment -->
+</tag>
html
<tag>&lt;foo&gt; bar</tag>

注释

使用成对的 <!----> 插入一段注释。注释中的部分不会被渲染。

资源反向代理

一些平台会使用 ID 标识资源文件 (例如 Lark)。当你接收到来自平台的消息时,拿到的是资源 ID 而非资源链接。此时你需要将资源 ID 转换为资源链接,才能构造合法的资源元素。

TIP

Telegram 是另一种特殊情况。尽管其提供的资源链接是可用的,但这个链接中会明文包含机器人令牌,并非可以公开使用的链接。因此 Telegram 和其他类似平台也适用于这一节的内容。

TIP

一种不推荐的做法是直接下载资源,并转存为 data: 链接放入消息中。之所以不推荐,是因为这种做法有两大致命缺点:

  1. 这些图片本来可以按需加载,但现在却被强制下载到本地,造成额外的带宽消耗。
  2. 编码为 data: 会导致消息体积大幅增加,极大影响消息处理的性能。

对于这种情况,我们建议使用实现资源反向代理。SDK 额外提供一个用于访问资源的路由 (类似 /v1/assets/xxx),将资源 ID 映射到资源链接,并编码到消息元素中。这样一来,上面提到的两个问题也就都解决了。

标准元素

关于 Satori 内置的消息元素,请参考 标准元素

`,33),n=[l];function r(p,c,i,d,h,k){return e(),a("div",null,n)}const g=t(o,[["render",r]]);export{y as __pageData,g as default}; diff --git a/assets/zh-CN_protocol_message.md.de31f79b.lean.js b/assets/zh-CN_protocol_message.md.de31f79b.lean.js new file mode 100644 index 0000000..4adc9a9 --- /dev/null +++ b/assets/zh-CN_protocol_message.md.de31f79b.lean.js @@ -0,0 +1 @@ +import{_ as t,v as e,x as a,U as s}from"./chunks/framework.187e34d2.js";const y=JSON.parse('{"title":"消息编码","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/message.md","filePath":"zh-CN/protocol/message.md"}'),o={name:"zh-CN/protocol/message.md"},l=s("",33),n=[l];function r(p,c,i,d,h,k){return e(),a("div",null,n)}const g=t(o,[["render",r]]);export{y as __pageData,g as default}; diff --git a/assets/zh-CN_resources_channel.md.08cf6283.js b/assets/zh-CN_resources_channel.md.08cf6283.js new file mode 100644 index 0000000..21d6e0c --- /dev/null +++ b/assets/zh-CN_resources_channel.md.08cf6283.js @@ -0,0 +1 @@ +import{_ as r,t as l,v as o,x as _,A as t,G as d,K as h,U as e,N as n}from"./chunks/framework.187e34d2.js";const B=JSON.parse('{"title":"频道 (Channel)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/channel.md","filePath":"zh-CN/resources/channel.md"}'),s={name:"zh-CN/resources/channel.md"},c=e('

频道 (Channel)

类型定义

Channel

字段类型描述
idstring频道 ID
typeChannel.Type频道类型
namestring?频道名称
parent_idstring?父频道 ID

Channel.Type

名称描述
TEXT0文本频道
VOICE1语音频道
CATEGORY2分类频道
DIRECT3私聊频道

API

获取群组频道

',8),i={class:"route"},u=t("code",null,"/channel.get",-1),b=e('
字段类型描述
channel_idstring频道 ID

根据 ID 获取频道。返回一个 Channel 对象。

获取群组频道列表

',3),T={class:"route"},p=t("code",null,"/channel.list",-1),C=e('
字段类型描述
guild_idstring群组 ID
nextstring分页令牌

获取群组中的全部频道。返回一个 Channel分页列表

创建群组频道

',3),P={class:"route"},f=t("code",null,"/channel.create",-1),S=e('
字段类型描述
guild_idstring群组 ID
dataChannel频道数据

创建群组频道。返回一个 Channel 对象。

修改群组频道

',3),q={class:"route"},I=t("code",null,"/channel.update",-1),A=e('
字段类型描述
channel_idstring频道 ID
dataChannel频道数据

修改群组频道。

删除群组频道

',3),m={class:"route"},y=t("code",null,"/channel.delete",-1),k=e('
字段类型描述
channel_idstring频道 ID

删除群组频道。

创建私聊频道

',3),D={class:"route"},V=t("code",null,"/user.channel.create",-1),g=e('
字段类型描述
user_idstring用户 ID
guild_idstring?群组 ID

创建一个私聊频道。返回一个 Channel 对象。

',2);function x(N,E,O,R,v,$){const a=l("badge");return o(),_("div",null,[c,t("blockquote",i,[d(a,null,{default:h(()=>[n("POST")]),_:1}),u]),b,t("blockquote",T,[d(a,null,{default:h(()=>[n("POST")]),_:1}),p]),C,t("blockquote",P,[d(a,null,{default:h(()=>[n("POST")]),_:1}),f]),S,t("blockquote",q,[d(a,null,{default:h(()=>[n("POST")]),_:1}),I]),A,t("blockquote",m,[d(a,null,{default:h(()=>[n("POST")]),_:1}),y]),k,t("blockquote",D,[d(a,null,{default:h(()=>[n("POST")]),_:1}),V]),g])}const G=r(s,[["render",x]]);export{B as __pageData,G as default}; diff --git a/assets/zh-CN_resources_channel.md.08cf6283.lean.js b/assets/zh-CN_resources_channel.md.08cf6283.lean.js new file mode 100644 index 0000000..4f3b14c --- /dev/null +++ b/assets/zh-CN_resources_channel.md.08cf6283.lean.js @@ -0,0 +1 @@ +import{_ as r,t as l,v as o,x as _,A as t,G as d,K as h,U as e,N as n}from"./chunks/framework.187e34d2.js";const B=JSON.parse('{"title":"频道 (Channel)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/channel.md","filePath":"zh-CN/resources/channel.md"}'),s={name:"zh-CN/resources/channel.md"},c=e("",8),i={class:"route"},u=t("code",null,"/channel.get",-1),b=e("",3),T={class:"route"},p=t("code",null,"/channel.list",-1),C=e("",3),P={class:"route"},f=t("code",null,"/channel.create",-1),S=e("",3),q={class:"route"},I=t("code",null,"/channel.update",-1),A=e("",3),m={class:"route"},y=t("code",null,"/channel.delete",-1),k=e("",3),D={class:"route"},V=t("code",null,"/user.channel.create",-1),g=e("",2);function x(N,E,O,R,v,$){const a=l("badge");return o(),_("div",null,[c,t("blockquote",i,[d(a,null,{default:h(()=>[n("POST")]),_:1}),u]),b,t("blockquote",T,[d(a,null,{default:h(()=>[n("POST")]),_:1}),p]),C,t("blockquote",P,[d(a,null,{default:h(()=>[n("POST")]),_:1}),f]),S,t("blockquote",q,[d(a,null,{default:h(()=>[n("POST")]),_:1}),I]),A,t("blockquote",m,[d(a,null,{default:h(()=>[n("POST")]),_:1}),y]),k,t("blockquote",D,[d(a,null,{default:h(()=>[n("POST")]),_:1}),V]),g])}const G=r(s,[["render",x]]);export{B as __pageData,G as default}; diff --git a/assets/zh-CN_resources_guild.md.2ea04972.js b/assets/zh-CN_resources_guild.md.2ea04972.js new file mode 100644 index 0000000..b8f0309 --- /dev/null +++ b/assets/zh-CN_resources_guild.md.2ea04972.js @@ -0,0 +1 @@ +import{_ as l,t as i,v as h,x as s,A as t,G as a,K as r,U as d,N as o}from"./chunks/framework.187e34d2.js";const V=JSON.parse('{"title":"群组 (Guild)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/guild.md","filePath":"zh-CN/resources/guild.md"}'),u={name:"zh-CN/resources/guild.md"},_=d('

群组 (Guild)

类型定义

Guild

字段类型描述
idstring群组 ID
namestring?群组名称
avatarstring?群组头像

API

获取群组

',6),n={class:"route"},c=t("code",null,"/guild.get",-1),b=d('
字段类型描述
guild_idstring群组 ID

根据 ID 获取。返回一个 Guild 对象。

获取群组列表

',3),g={class:"route"},p=t("code",null,"/guild.list",-1),m=d('
字段类型描述
nextstring分页令牌

获取当前用户加入的全部群组。返回一个 Guild分页列表

处理群组邀请

',3),q={class:"route"},T=t("code",null,"/guild.approve",-1),P=d('
字段类型描述
message_idstring请求 ID
approveboolean是否通过请求
commentstring备注信息

处理来自群组的邀请。

事件

guild-added

加入群组时触发。必需资源:guild

guild-updated

群组被修改时触发。必需资源:guild

guild-removed

退出群组时触发。必需资源:guild

guild-request

接收到新的入群邀请时触发。必需资源:guild

',11);function f(x,k,S,A,I,C){const e=i("badge");return h(),s("div",null,[_,t("blockquote",n,[a(e,null,{default:r(()=>[o("POST")]),_:1}),c]),b,t("blockquote",g,[a(e,null,{default:r(()=>[o("POST")]),_:1}),p]),m,t("blockquote",q,[a(e,null,{default:r(()=>[o("POST")]),_:1}),T]),P])}const v=l(u,[["render",f]]);export{V as __pageData,v as default}; diff --git a/assets/zh-CN_resources_guild.md.2ea04972.lean.js b/assets/zh-CN_resources_guild.md.2ea04972.lean.js new file mode 100644 index 0000000..e084a7c --- /dev/null +++ b/assets/zh-CN_resources_guild.md.2ea04972.lean.js @@ -0,0 +1 @@ +import{_ as l,t as i,v as h,x as s,A as t,G as a,K as r,U as d,N as o}from"./chunks/framework.187e34d2.js";const V=JSON.parse('{"title":"群组 (Guild)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/guild.md","filePath":"zh-CN/resources/guild.md"}'),u={name:"zh-CN/resources/guild.md"},_=d("",6),n={class:"route"},c=t("code",null,"/guild.get",-1),b=d("",3),g={class:"route"},p=t("code",null,"/guild.list",-1),m=d("",3),q={class:"route"},T=t("code",null,"/guild.approve",-1),P=d("",11);function f(x,k,S,A,I,C){const e=i("badge");return h(),s("div",null,[_,t("blockquote",n,[a(e,null,{default:r(()=>[o("POST")]),_:1}),c]),b,t("blockquote",g,[a(e,null,{default:r(()=>[o("POST")]),_:1}),p]),m,t("blockquote",q,[a(e,null,{default:r(()=>[o("POST")]),_:1}),T]),P])}const v=l(u,[["render",f]]);export{V as __pageData,v as default}; diff --git a/assets/zh-CN_resources_login.md.d53fd823.js b/assets/zh-CN_resources_login.md.d53fd823.js new file mode 100644 index 0000000..2e0c1ce --- /dev/null +++ b/assets/zh-CN_resources_login.md.d53fd823.js @@ -0,0 +1 @@ +import{_ as d,t as o,v as r,x as i,A as t,G as n,K as l,U as a,N as h}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"登录信息 (Login)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/login.md","filePath":"zh-CN/resources/login.md"}'),s={name:"zh-CN/resources/login.md"},c=a('

登录信息 (Login)

类型定义

Login

字段类型描述
userUser?用户对象
self_idstring?平台账号
platformstring?平台名称
statusStatus登录状态

Status

名称描述
OFFLINE0离线
ONLINE1在线
CONNECT2连接中
DISCONNECT3断开连接
RECONNECT4重新连接

API

获取登录信息

',8),_={class:"route"},u=t("code",null,"/login.get",-1),g=a('

获取登录信息。返回一个 Login 对象。

事件

login-added

登录被创建时触发。必需资源:login

login-removed

登录被删除时触发。必需资源:login

login-updated

登录信息更新时触发。必需资源:login

',8);function b(p,m,f,q,N,P){const e=o("badge");return r(),i("div",null,[c,t("blockquote",_,[n(e,null,{default:l(()=>[h("POST")]),_:1}),u]),g])}const C=d(s,[["render",b]]);export{x as __pageData,C as default}; diff --git a/assets/zh-CN_resources_login.md.d53fd823.lean.js b/assets/zh-CN_resources_login.md.d53fd823.lean.js new file mode 100644 index 0000000..41dbd77 --- /dev/null +++ b/assets/zh-CN_resources_login.md.d53fd823.lean.js @@ -0,0 +1 @@ +import{_ as d,t as o,v as r,x as i,A as t,G as n,K as l,U as a,N as h}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"登录信息 (Login)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/login.md","filePath":"zh-CN/resources/login.md"}'),s={name:"zh-CN/resources/login.md"},c=a("",8),_={class:"route"},u=t("code",null,"/login.get",-1),g=a("",8);function b(p,m,f,q,N,P){const e=o("badge");return r(),i("div",null,[c,t("blockquote",_,[n(e,null,{default:l(()=>[h("POST")]),_:1}),u]),g])}const C=d(s,[["render",b]]);export{x as __pageData,C as default}; diff --git a/assets/zh-CN_resources_member.md.863aba26.js b/assets/zh-CN_resources_member.md.863aba26.js new file mode 100644 index 0000000..de69a7d --- /dev/null +++ b/assets/zh-CN_resources_member.md.863aba26.js @@ -0,0 +1 @@ +import{_ as l,t as i,v as h,x as s,A as t,G as a,K as r,U as e,N as o}from"./chunks/framework.187e34d2.js";const y=JSON.parse('{"title":"群组成员 (GuildMember)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/member.md","filePath":"zh-CN/resources/member.md"}'),u={name:"zh-CN/resources/member.md"},_=e('

群组成员 (GuildMember)

类型定义

GuildMember

字段类型描述
userUser?用户对象
nickstring?用户在群组中的名称
avatarstring?用户在群组中的头像
joined_atnumber?加入时间

API

获取群组成员

',6),m={class:"route"},c=t("code",null,"/guild.member.get",-1),n=e('
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID

获取群成员信息。返回一个 GuildMember 对象。

获取群组成员列表

',3),b={class:"route"},g=t("code",null,"/guild.member.list",-1),p=e('
字段类型描述
guild_idstring群组 ID
nextstring分页令牌

获取群成员列表。返回一个 GuildMember分页列表

踢出群组成员

',3),T={class:"route"},q=t("code",null,"/guild.member.kick",-1),P=e('
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID
permanentboolean?是否永久踢出 (无法再次加入群组)

将某个用户踢出群组。

通过群组成员申请

',3),f={class:"route"},k=t("code",null,"/guild.member.approve",-1),S=e('
字段类型描述
message_idstring请求 ID
approveboolean是否通过请求
commentstring?备注信息

处理加群请求。

事件

guild-member-added

群组成员增加时触发。必需资源:guildmemberuser

guild-member-updated

群组成员信息更新时触发。必需资源:guildmemberuser

guild-member-removed

群组成员移除时触发。必需资源:guildmemberuser

guild-member-request

接收到新的加群请求时触发。必需资源:guildmemberuser

',11);function x(A,I,C,N,V,D){const d=i("badge");return h(),s("div",null,[_,t("blockquote",m,[a(d,null,{default:r(()=>[o("POST")]),_:1}),c]),n,t("blockquote",b,[a(d,null,{default:r(()=>[o("POST")]),_:1}),g]),p,t("blockquote",T,[a(d,null,{default:r(()=>[o("POST")]),_:1}),q]),P,t("blockquote",f,[a(d,null,{default:r(()=>[o("POST")]),_:1}),k]),S])}const G=l(u,[["render",x]]);export{y as __pageData,G as default}; diff --git a/assets/zh-CN_resources_member.md.863aba26.lean.js b/assets/zh-CN_resources_member.md.863aba26.lean.js new file mode 100644 index 0000000..3d46e45 --- /dev/null +++ b/assets/zh-CN_resources_member.md.863aba26.lean.js @@ -0,0 +1 @@ +import{_ as l,t as i,v as h,x as s,A as t,G as a,K as r,U as e,N as o}from"./chunks/framework.187e34d2.js";const y=JSON.parse('{"title":"群组成员 (GuildMember)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/member.md","filePath":"zh-CN/resources/member.md"}'),u={name:"zh-CN/resources/member.md"},_=e("",6),m={class:"route"},c=t("code",null,"/guild.member.get",-1),n=e("",3),b={class:"route"},g=t("code",null,"/guild.member.list",-1),p=e("",3),T={class:"route"},q=t("code",null,"/guild.member.kick",-1),P=e("",3),f={class:"route"},k=t("code",null,"/guild.member.approve",-1),S=e("",11);function x(A,I,C,N,V,D){const d=i("badge");return h(),s("div",null,[_,t("blockquote",m,[a(d,null,{default:r(()=>[o("POST")]),_:1}),c]),n,t("blockquote",b,[a(d,null,{default:r(()=>[o("POST")]),_:1}),g]),p,t("blockquote",T,[a(d,null,{default:r(()=>[o("POST")]),_:1}),q]),P,t("blockquote",f,[a(d,null,{default:r(()=>[o("POST")]),_:1}),k]),S])}const G=l(u,[["render",x]]);export{y as __pageData,G as default}; diff --git a/assets/zh-CN_resources_message.md.9767acba.js b/assets/zh-CN_resources_message.md.9767acba.js new file mode 100644 index 0000000..1d8c90b --- /dev/null +++ b/assets/zh-CN_resources_message.md.9767acba.js @@ -0,0 +1 @@ +import{_ as o,t as h,v as l,x as c,A as t,G as a,K as s,U as e,N as r}from"./chunks/framework.187e34d2.js";const R=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/message.md","filePath":"zh-CN/resources/message.md"}'),n={name:"zh-CN/resources/message.md"},_=e('

消息 (Message)

类型定义

Message

字段类型描述
idstring消息 ID
contentstring消息内容
channelChannel?频道对象
guildGuild?群组对象
memberMember?成员对象
userUser?用户对象
created_atnumber?消息发送的时间戳
updated_atnumber?消息修改的时间戳

API

发送消息

',6),i={class:"route"},u=t("code",null,"/message.create",-1),m=e('
字段类型描述
channel_idstring频道 ID
contentstring消息内容

发送消息。返回一个 Message 对象构成的数组。

获取消息

',3),b={class:"route"},g=t("code",null,"/message.get",-1),T=e('
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID

获取特定消息。返回一个 Message 对象。必需资源:channeluser

撤回消息

',3),p={class:"route"},f=t("code",null,"/message.delete",-1),P=e('
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID

撤回特定消息。

编辑消息

',3),q={class:"route"},S=t("code",null,"/message.update",-1),I=e('
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
contentstring消息内容

编辑特定消息。

获取消息列表

',3),A={class:"route"},k=t("code",null,"/message.list",-1),x=e('
字段类型描述
channel_idstring频道 ID
nextstring分页令牌

获取频道消息列表。返回一个 Message分页列表。必需资源:channeluser

事件

message-created

当消息被创建时触发。必需资源:channelmessageuser

message-updated

当消息被编辑时触发。必需资源:channelmessageuser

message-deleted

当消息被删除时触发。必需资源:channelmessageuser

',9);function C(D,V,N,y,M,E){const d=h("badge");return l(),c("div",null,[_,t("blockquote",i,[a(d,null,{default:s(()=>[r("POST")]),_:1}),u]),m,t("blockquote",b,[a(d,null,{default:s(()=>[r("POST")]),_:1}),g]),T,t("blockquote",p,[a(d,null,{default:s(()=>[r("POST")]),_:1}),f]),P,t("blockquote",q,[a(d,null,{default:s(()=>[r("POST")]),_:1}),S]),I,t("blockquote",A,[a(d,null,{default:s(()=>[r("POST")]),_:1}),k]),x])}const v=o(n,[["render",C]]);export{R as __pageData,v as default}; diff --git a/assets/zh-CN_resources_message.md.9767acba.lean.js b/assets/zh-CN_resources_message.md.9767acba.lean.js new file mode 100644 index 0000000..1cb4a72 --- /dev/null +++ b/assets/zh-CN_resources_message.md.9767acba.lean.js @@ -0,0 +1 @@ +import{_ as o,t as h,v as l,x as c,A as t,G as a,K as s,U as e,N as r}from"./chunks/framework.187e34d2.js";const R=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/message.md","filePath":"zh-CN/resources/message.md"}'),n={name:"zh-CN/resources/message.md"},_=e("",6),i={class:"route"},u=t("code",null,"/message.create",-1),m=e("",3),b={class:"route"},g=t("code",null,"/message.get",-1),T=e("",3),p={class:"route"},f=t("code",null,"/message.delete",-1),P=e("",3),q={class:"route"},S=t("code",null,"/message.update",-1),I=e("",3),A={class:"route"},k=t("code",null,"/message.list",-1),x=e("",9);function C(D,V,N,y,M,E){const d=h("badge");return l(),c("div",null,[_,t("blockquote",i,[a(d,null,{default:s(()=>[r("POST")]),_:1}),u]),m,t("blockquote",b,[a(d,null,{default:s(()=>[r("POST")]),_:1}),g]),T,t("blockquote",p,[a(d,null,{default:s(()=>[r("POST")]),_:1}),f]),P,t("blockquote",q,[a(d,null,{default:s(()=>[r("POST")]),_:1}),S]),I,t("blockquote",A,[a(d,null,{default:s(()=>[r("POST")]),_:1}),k]),x])}const v=o(n,[["render",C]]);export{R as __pageData,v as default}; diff --git a/assets/zh-CN_resources_reaction.md.beaf7bc2.js b/assets/zh-CN_resources_reaction.md.beaf7bc2.js new file mode 100644 index 0000000..a960c83 --- /dev/null +++ b/assets/zh-CN_resources_reaction.md.beaf7bc2.js @@ -0,0 +1 @@ +import{_ as i,t as n,v as s,x as _,A as t,N as e,G as a,K as r,U as o}from"./chunks/framework.187e34d2.js";const E=JSON.parse('{"title":"表态 (Reaction) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/reaction.md","filePath":"zh-CN/resources/reaction.md"}'),h={name:"zh-CN/resources/reaction.md"},c={id:"表态-实验性",tabindex:"-1"},l=t("a",{class:"header-anchor",href:"#表态-实验性","aria-label":'Permalink to "表态 (Reaction) 实验性"'},"​",-1),u=o('

WARNING

这是一个实验性功能。

API

添加表态

',3),b={class:"route"},m=t("code",null,"/reaction.create",-1),p=o('
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
emojistring表态名称

向特定消息添加表态。

删除表态

',3),T={class:"route"},P=t("code",null,"/reaction.delete",-1),g=o('
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
emojistring表态名称
user_idstring?用户 ID

从特定消息删除某个用户添加的特定表态。如果没有传入用户 ID 则表示删除自己的表态。

清除表态

',3),f={class:"route"},I=t("code",null,"/reaction.clear",-1),S=o('
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
emojistring?表态名称

从特定消息清除某个特定表态。如果没有传入表态名称则表示清除所有表态。

获取表态列表

',3),q={class:"route"},A=t("code",null,"/reaction.list",-1),k=o('
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
emojistring表态名称
nextstring?分页令牌

获取添加特定消息的特定表态的用户列表。返回一个 User分页列表

事件

reaction-added

当表态被添加时触发。

reaction-removed

当表态被移除时触发。

',7);function x(D,N,C,V,v,y){const d=n("badge");return s(),_("div",null,[t("h1",c,[e("表态 (Reaction) "),a(d,{type:"warning"},{default:r(()=>[e("实验性")]),_:1}),e(),l]),u,t("blockquote",b,[a(d,null,{default:r(()=>[e("POST")]),_:1}),m]),p,t("blockquote",T,[a(d,null,{default:r(()=>[e("POST")]),_:1}),P]),g,t("blockquote",f,[a(d,null,{default:r(()=>[e("POST")]),_:1}),I]),S,t("blockquote",q,[a(d,null,{default:r(()=>[e("POST")]),_:1}),A]),k])}const O=i(h,[["render",x]]);export{E as __pageData,O as default}; diff --git a/assets/zh-CN_resources_reaction.md.beaf7bc2.lean.js b/assets/zh-CN_resources_reaction.md.beaf7bc2.lean.js new file mode 100644 index 0000000..822eac6 --- /dev/null +++ b/assets/zh-CN_resources_reaction.md.beaf7bc2.lean.js @@ -0,0 +1 @@ +import{_ as i,t as n,v as s,x as _,A as t,N as e,G as a,K as r,U as o}from"./chunks/framework.187e34d2.js";const E=JSON.parse('{"title":"表态 (Reaction) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/reaction.md","filePath":"zh-CN/resources/reaction.md"}'),h={name:"zh-CN/resources/reaction.md"},c={id:"表态-实验性",tabindex:"-1"},l=t("a",{class:"header-anchor",href:"#表态-实验性","aria-label":'Permalink to "表态 (Reaction) 实验性"'},"​",-1),u=o("",3),b={class:"route"},m=t("code",null,"/reaction.create",-1),p=o("",3),T={class:"route"},P=t("code",null,"/reaction.delete",-1),g=o("",3),f={class:"route"},I=t("code",null,"/reaction.clear",-1),S=o("",3),q={class:"route"},A=t("code",null,"/reaction.list",-1),k=o("",7);function x(D,N,C,V,v,y){const d=n("badge");return s(),_("div",null,[t("h1",c,[e("表态 (Reaction) "),a(d,{type:"warning"},{default:r(()=>[e("实验性")]),_:1}),e(),l]),u,t("blockquote",b,[a(d,null,{default:r(()=>[e("POST")]),_:1}),m]),p,t("blockquote",T,[a(d,null,{default:r(()=>[e("POST")]),_:1}),P]),g,t("blockquote",f,[a(d,null,{default:r(()=>[e("POST")]),_:1}),I]),S,t("blockquote",q,[a(d,null,{default:r(()=>[e("POST")]),_:1}),A]),k])}const O=i(h,[["render",x]]);export{E as __pageData,O as default}; diff --git a/assets/zh-CN_resources_role.md.46729e3a.js b/assets/zh-CN_resources_role.md.46729e3a.js new file mode 100644 index 0000000..58edb15 --- /dev/null +++ b/assets/zh-CN_resources_role.md.46729e3a.js @@ -0,0 +1 @@ +import{_ as l,t as i,v as h,x as _,A as t,G as a,K as o,U as e,N as r}from"./chunks/framework.187e34d2.js";const z=JSON.parse('{"title":"群组角色 (GuildRole)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/role.md","filePath":"zh-CN/resources/role.md"}'),s={name:"zh-CN/resources/role.md"},u=e('

群组角色 (GuildRole)

类型定义

GuildRole

字段类型描述
idstring角色 ID
namestring?角色名称

API

设置群组成员角色

',6),n={class:"route"},c=t("code",null,"/guild.member.role.set",-1),b=e('
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID
role_idstring角色 ID

设置群组内用户的角色。

取消群组成员角色

',3),g={class:"route"},T=t("code",null,"/guild.member.role.unset",-1),p=e('
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID
role_idstring角色 ID

取消群组内用户的角色。

获取群组角色列表

',3),P={class:"route"},q=t("code",null,"/guild.role.list",-1),f=e('
字段类型描述
guild_idstring群组 ID
nextstring?分页令牌

获取群组角色列表。返回一个 GuildRole分页列表

创建群组角色

',3),m={class:"route"},I=t("code",null,"/guild.role.create",-1),S=e('
字段类型描述
guild_idstring群组 ID
roleGuildRole角色数据

创建群组角色。返回一个 GuildRole 对象。

修改群组角色

',3),A={class:"route"},k=t("code",null,"/guild.role.update",-1),x=e('
字段类型描述
guild_idstring群组 ID
role_idstring角色 ID
roleGuildRole角色数据

修改群组角色。

删除群组角色

',3),D={class:"route"},C=t("code",null,"/guild.role.delete",-1),V=e('
字段类型描述
guild_idstring群组 ID
role_idstring角色 ID

删除群组角色。

事件

guild-role-created

群组角色被创建时触发。必需资源:guildrole

guild-role-updated

群组角色被修改时触发。必需资源:guildrole

guild-role-deleted

群组角色被删除时触发。必需资源:guildrole

',9);function N(R,y,G,E,O,v){const d=i("badge");return h(),_("div",null,[u,t("blockquote",n,[a(d,null,{default:o(()=>[r("POST")]),_:1}),c]),b,t("blockquote",g,[a(d,null,{default:o(()=>[r("POST")]),_:1}),T]),p,t("blockquote",P,[a(d,null,{default:o(()=>[r("POST")]),_:1}),q]),f,t("blockquote",m,[a(d,null,{default:o(()=>[r("POST")]),_:1}),I]),S,t("blockquote",A,[a(d,null,{default:o(()=>[r("POST")]),_:1}),k]),x,t("blockquote",D,[a(d,null,{default:o(()=>[r("POST")]),_:1}),C]),V])}const B=l(s,[["render",N]]);export{z as __pageData,B as default}; diff --git a/assets/zh-CN_resources_role.md.46729e3a.lean.js b/assets/zh-CN_resources_role.md.46729e3a.lean.js new file mode 100644 index 0000000..52198f2 --- /dev/null +++ b/assets/zh-CN_resources_role.md.46729e3a.lean.js @@ -0,0 +1 @@ +import{_ as l,t as i,v as h,x as _,A as t,G as a,K as o,U as e,N as r}from"./chunks/framework.187e34d2.js";const z=JSON.parse('{"title":"群组角色 (GuildRole)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/role.md","filePath":"zh-CN/resources/role.md"}'),s={name:"zh-CN/resources/role.md"},u=e("",6),n={class:"route"},c=t("code",null,"/guild.member.role.set",-1),b=e("",3),g={class:"route"},T=t("code",null,"/guild.member.role.unset",-1),p=e("",3),P={class:"route"},q=t("code",null,"/guild.role.list",-1),f=e("",3),m={class:"route"},I=t("code",null,"/guild.role.create",-1),S=e("",3),A={class:"route"},k=t("code",null,"/guild.role.update",-1),x=e("",3),D={class:"route"},C=t("code",null,"/guild.role.delete",-1),V=e("",9);function N(R,y,G,E,O,v){const d=i("badge");return h(),_("div",null,[u,t("blockquote",n,[a(d,null,{default:o(()=>[r("POST")]),_:1}),c]),b,t("blockquote",g,[a(d,null,{default:o(()=>[r("POST")]),_:1}),T]),p,t("blockquote",P,[a(d,null,{default:o(()=>[r("POST")]),_:1}),q]),f,t("blockquote",m,[a(d,null,{default:o(()=>[r("POST")]),_:1}),I]),S,t("blockquote",A,[a(d,null,{default:o(()=>[r("POST")]),_:1}),k]),x,t("blockquote",D,[a(d,null,{default:o(()=>[r("POST")]),_:1}),C]),V])}const B=l(s,[["render",N]]);export{z as __pageData,B as default}; diff --git a/assets/zh-CN_resources_user.md.dbf33248.js b/assets/zh-CN_resources_user.md.dbf33248.js new file mode 100644 index 0000000..0a8c699 --- /dev/null +++ b/assets/zh-CN_resources_user.md.dbf33248.js @@ -0,0 +1 @@ +import{_ as s,t as h,v as _,x as n,A as t,G as d,K as r,U as e,N as o}from"./chunks/framework.187e34d2.js";const V=JSON.parse('{"title":"用户 (User)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/user.md","filePath":"zh-CN/resources/user.md"}'),i={name:"zh-CN/resources/user.md"},l=e('

用户 (User)

类型定义

User

字段类型描述
idstring用户 ID
namestring?用户名称
nickstring?用户昵称
avatarstring?用户头像
is_botboolean?是否为机器人

API

获取用户信息

',6),c={class:"route"},u=t("code",null,"/user.get",-1),b=e('
字段类型描述
user_idstring用户 ID

获取用户信息。返回一个 User 对象。

获取好友列表

',3),f={class:"route"},p=t("code",null,"/friend.list",-1),T=e('
字段类型描述
nextstring?分页令牌

获取好友列表。返回一个 User分页列表

处理好友申请

',3),m={class:"route"},q=t("code",null,"/friend.approve",-1),P=e('
字段类型描述
message_idstring请求 ID
approveboolean是否通过请求
commentstring?备注信息

处理好友申请。

事件

friend-request

接收到新的好友申请时触发。必需资源:user

',5);function S(x,k,A,g,C,I){const a=h("badge");return _(),n("div",null,[l,t("blockquote",c,[d(a,null,{default:r(()=>[o("POST")]),_:1}),u]),b,t("blockquote",f,[d(a,null,{default:r(()=>[o("POST")]),_:1}),p]),T,t("blockquote",m,[d(a,null,{default:r(()=>[o("POST")]),_:1}),q]),P])}const y=s(i,[["render",S]]);export{V as __pageData,y as default}; diff --git a/assets/zh-CN_resources_user.md.dbf33248.lean.js b/assets/zh-CN_resources_user.md.dbf33248.lean.js new file mode 100644 index 0000000..d49eeec --- /dev/null +++ b/assets/zh-CN_resources_user.md.dbf33248.lean.js @@ -0,0 +1 @@ +import{_ as s,t as h,v as _,x as n,A as t,G as d,K as r,U as e,N as o}from"./chunks/framework.187e34d2.js";const V=JSON.parse('{"title":"用户 (User)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/user.md","filePath":"zh-CN/resources/user.md"}'),i={name:"zh-CN/resources/user.md"},l=e("",6),c={class:"route"},u=t("code",null,"/user.get",-1),b=e("",3),f={class:"route"},p=t("code",null,"/friend.list",-1),T=e("",3),m={class:"route"},q=t("code",null,"/friend.approve",-1),P=e("",5);function S(x,k,A,g,C,I){const a=h("badge");return _(),n("div",null,[l,t("blockquote",c,[d(a,null,{default:r(()=>[o("POST")]),_:1}),u]),b,t("blockquote",f,[d(a,null,{default:r(()=>[o("POST")]),_:1}),p]),T,t("blockquote",m,[d(a,null,{default:r(()=>[o("POST")]),_:1}),q]),P])}const y=s(i,[["render",S]]);export{V as __pageData,y as default}; diff --git a/en-US/index.html b/en-US/index.html new file mode 100644 index 0000000..0727217 --- /dev/null +++ b/en-US/index.html @@ -0,0 +1,23 @@ + + + + + + Satori | Satori + + + + + + + + + + + + +
Skip to content

Satori

THE UNIVERSAL MESSENGER PROTOCOL

+ + + + \ No newline at end of file diff --git a/en-US/introduction.html b/en-US/introduction.html new file mode 100644 index 0000000..615a7d6 --- /dev/null +++ b/en-US/introduction.html @@ -0,0 +1,23 @@ + + + + + + Introduction | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

Introduction

+ + + + \ No newline at end of file diff --git a/en-US/protocol/api.html b/en-US/protocol/api.html new file mode 100644 index 0000000..b6add94 --- /dev/null +++ b/en-US/protocol/api.html @@ -0,0 +1,23 @@ + + + + + + HTTP API | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

HTTP API

Pagination

Some API may return a list of items. In this case, the response will be a List object:

FIELDTYPEDESCRIPTION
dataarraylist of items
nextstringtoken for the next page

You can use the next token to get the next page of items. If next is nullable, it means that there are no more items.

+ + + + \ No newline at end of file diff --git a/en-US/protocol/index.html b/en-US/protocol/index.html new file mode 100644 index 0000000..63ff45b --- /dev/null +++ b/en-US/protocol/index.html @@ -0,0 +1,23 @@ + + + + + + Overview | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

Overview

The Satori protocol is designed to be simple and easy to use. It is based around three layers of communication:

  • an HTTP API for bots to communicate with the server
  • a WebSocket API for bots to receive events from the server
  • a WebHook API for the server to send events to bots
+ + + + \ No newline at end of file diff --git a/en-US/protocol/message.html b/en-US/protocol/message.html new file mode 100644 index 0000000..616e194 --- /dev/null +++ b/en-US/protocol/message.html @@ -0,0 +1,23 @@ + + + + + + Message | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

Message

+ + + + \ No newline at end of file diff --git a/en-US/protocol/webhook.html b/en-US/protocol/webhook.html new file mode 100644 index 0000000..728d0d5 --- /dev/null +++ b/en-US/protocol/webhook.html @@ -0,0 +1,23 @@ + + + + + + Webhook | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

Webhook

+ + + + \ No newline at end of file diff --git a/en-US/protocol/websocket.html b/en-US/protocol/websocket.html new file mode 100644 index 0000000..2137039 --- /dev/null +++ b/en-US/protocol/websocket.html @@ -0,0 +1,23 @@ + + + + + + WebSocket | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

WebSocket

+ + + + \ No newline at end of file diff --git a/en-US/resources/channel.html b/en-US/resources/channel.html new file mode 100644 index 0000000..defa8a7 --- /dev/null +++ b/en-US/resources/channel.html @@ -0,0 +1,23 @@ + + + + + + Channel | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

Channel

Definition

Channel

FIELDTYPEDESCRIPTION
idstringchannel ID
namestringchannel name

API

Get Channel

  • POST /v1/channel.get
FIELDTYPEDESCRIPTION
channel_idstringchannel ID

Get a channel by ID. Returns a channel object.

bot.getChannelList(guildId, next?)

  • POST /v1/channel.list
FIELDTYPEDESCRIPTION
guild_idstringguild ID
nextstringpagination token

Get channels in a guild. Returns a list of channel objects.

+ + + + \ No newline at end of file diff --git a/en-US/resources/guild.html b/en-US/resources/guild.html new file mode 100644 index 0000000..0caf849 --- /dev/null +++ b/en-US/resources/guild.html @@ -0,0 +1,23 @@ + + + + + + Guild | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

Guild

Definition

Guild

FIELDTYPEDESCRIPTION
idstringguild ID
namestringguild name

API

bot.getGuild(guildId)

  • POST /v1/guild.get
FIELDTYPEDESCRIPTION
guild_idstringguild ID

Get a guild by ID. Returns a guild object.

bot.getGuildList(next?)

  • POST /v1/guild.list
FIELDTYPEDESCRIPTION
nextstringpagination token

Get guilds where the current user is a member. Returns a list of partial guild objects.

bot.handleGuildRequest(messageId, approve, comment?)

  • messageId: string 请求 ID
  • approve: boolean 是否通过请求
  • comment: string 备注信息
  • 返回值: Promise<void>

处理来自群组的邀请。

+ + + + \ No newline at end of file diff --git a/en-US/resources/member.html b/en-US/resources/member.html new file mode 100644 index 0000000..1897441 --- /dev/null +++ b/en-US/resources/member.html @@ -0,0 +1,27 @@ + + + + + + 群组成员 (GuildMember) | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

群组成员 (GuildMember)

类型定义

ts
interface GuildMember {
+  user: User
+  nick?: string
+  avatar?: string
+}

API

bot.getGuildMember(guildId, userId)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • 返回值: Promise<GuildMember> 群成员信息

获取群成员信息。

bot.getGuildMemberList(guildId, next?)

  • guildId: string 群组 ID
  • next: string 分页令牌
  • 返回值: Promise<List<GuildMember>> 群成员列表

获取群成员列表。

bot.kickGuildMember(guildId, userId, permanent?)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • permanent: boolean 是否永久踢出 (用户无法再次加入群组)
  • 返回值: Promise<void>

将某个用户踢出群组。

bot.muteGuildMember(guildId, userId, duration?, reason?)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • duration: number 禁言时长 (毫秒)
  • reason: string 禁言说明
  • 返回值: Promise<void>

将某个用户禁言。如果传入的禁言时长为 0 则表示解除禁言。

bot.handleGuildMemberRequest(messageId, approve, comment?)

  • messageId: string 请求 ID
  • approve: boolean 是否通过请求
  • comment: string 备注信息
  • 返回值: Promise<void>

处理加群请求。

+ + + + \ No newline at end of file diff --git a/en-US/resources/message.html b/en-US/resources/message.html new file mode 100644 index 0000000..ecdf768 --- /dev/null +++ b/en-US/resources/message.html @@ -0,0 +1,30 @@ + + + + + + 消息 (Message) | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

消息 (Message)

类型定义

ts
interface Message {
+  isDirect: boolean
+  channelId: string
+  messageId: string
+  userId: string
+  content: string
+  timestamp?: number
+}

API

bot.sendMessage(channelId, content, guildId?)

  • channelId: string 频道 ID
  • content: Fragment 要发送的内容
  • guildId: string 群组 ID
  • 返回值: Promise<string[]> 发送的消息 ID

向特定频道发送消息。

WARNING

只要你能够获取到会话对象,你就不应使用此 API,而应该使用 session.send()。一些平台会将主动发送的消息同被动接收后回复的消息区分开来,甚至可能限制主动消息的发送,因此使用 session.send() 总是有更好的可靠性。

TIP

bot.sendMessage() 既可以发送群聊消息,也可以发送私聊消息。当发送私聊消息时,其与 bot.sendPrivateMessage() 的区别在于前者传入的是频道 ID,而后者传入的是用户 ID。

bot.sendPrivateMessage(userId, content)

  • userId: string 对方 ID
  • content: Fragment 要发送的内容
  • 返回值: Promise<string[]> 发送的消息 ID

向特定用户发送私聊消息。

bot.getMessage(channelId, messageId)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • 返回值: Promise<Message>

获取特定消息。

bot.deleteMessage(channelId, messageId)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • 返回值: Promise<void>

撤回特定消息。

bot.editMessage(channelId, messageId, content)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • content: Fragment 要发送的内容
  • 返回值: Promise<void>

修改特定消息。

bot.getMessageList(channelId, next?)

  • channelId: string 频道 ID
  • next: string 分页令牌
  • 返回值: Promise<List<Message>> 消息列表

获取频道消息列表。

+ + + + \ No newline at end of file diff --git a/en-US/resources/reaction.html b/en-US/resources/reaction.html new file mode 100644 index 0000000..8215f36 --- /dev/null +++ b/en-US/resources/reaction.html @@ -0,0 +1,23 @@ + + + + + + 表态 (Reaction) 实验性 | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

表态 (Reaction) 实验性

API

bot.createReaction(channelId, messageId, emoji)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • emoji: string 表态名称
  • 返回值: Promise<void>

向特定消息添加表态。

bot.deleteReaction(channelId, messageId, emoji, userId?)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • emoji: string 表态名称
  • userId: string 用户 ID
  • 返回值: Promise<void>

从特定消息删除某个用户添加的特定表态。如果没有传入用户 ID 则表示删除自己的表态。

bot.clearReaction(channelId, messageId, emoji?)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • emoji: string 表态名称
  • 返回值: Promise<void>

从特定消息清除某个特定表态。如果没有传入表态名称则表示清除所有表态。

bot.getReactionList(channelId, messageId, emoji, next?)

  • channelId: string 频道 ID
  • messageId: string 消息 ID
  • emoji: string 表态名称
  • next: string 分页令牌
  • 返回值: Promise<List<User>>

获取添加特定消息的特定表态的用户列表。

+ + + + \ No newline at end of file diff --git a/en-US/resources/role.html b/en-US/resources/role.html new file mode 100644 index 0000000..07d68f5 --- /dev/null +++ b/en-US/resources/role.html @@ -0,0 +1,28 @@ + + + + + + 群组角色 (GuildRole) 实验性 | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

群组角色 (GuildRole) 实验性

类型定义

ts
export interface GuildRole {
+  id: string
+  name: string
+  color: number
+  position: number
+}

API

bot.setGuildMemberRole(guildId, userId, roleId)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • roleId: string 角色 ID
  • 返回值: Promise<void>

设置群组内用户的角色。

bot.unsetGuildMemberRole(guildId, userId, roleId)

  • guildId: string 群组 ID
  • userId: string 用户 ID
  • roleId: string 角色 ID
  • 返回值: Promise<void>

取消群组内用户的角色。

bot.getGuildRoleList(guildId, next?)

  • guildId: string 群组 ID
  • next: string 分页令牌
  • 返回值: Promise<List<GuildRole>> 角色列表

获取群组角色列表。

bot.createGuildRole(guildId, data)

  • guildId: string 群组 ID
  • data: Partial<GuildRole> 角色信息
  • 返回值: Promise<string> 角色 ID

创建群组角色。

bot.modifyGuildRole(guildId, roleId, data)

  • guildId: string 群组 ID
  • roleId: string 角色 ID
  • data: Partial<GuildRole> 角色信息
  • 返回值: Promise<void>

修改群组角色。

bot.deleteGuildRole(guildId, roleId)

  • guildId: string 群组 ID
  • roleId: string 角色 ID
  • 返回值: Promise<void>

删除群组角色。

+ + + + \ No newline at end of file diff --git a/en-US/resources/user.html b/en-US/resources/user.html new file mode 100644 index 0000000..dc09fde --- /dev/null +++ b/en-US/resources/user.html @@ -0,0 +1,27 @@ + + + + + + 用户 (User) | Satori + + + + + + + + + + + + +
Skip to content
ON THIS PAGE

用户 (User)

类型定义

ts
export interface User {
+  id: string
+  name: string
+  avatar?: string
+}

API

bot.getSelf()

  • 返回值: Promise<User> 用户信息

获取机器人自己的信息。

bot.getUser(userId)

  • userId: string 用户 ID
  • 返回值: Promise<User> 用户信息

获取用户信息。

bot.getFriendList(next?)

  • next: string 分页令牌
  • 返回值: Promise<List<User>> 好友列表

获取机器人的好友列表。

bot.handleFriendRequest(messageId, approve, comment?)

  • messageId: string 请求 ID
  • approve: boolean 是否通过请求
  • comment: string 备注信息
  • 返回值: Promise<void>

处理好友请求。

+ + + + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json new file mode 100644 index 0000000..f7ee7b5 --- /dev/null +++ b/hashmap.json @@ -0,0 +1 @@ +{"en-us_resources_message.md":"f008c101","en-us_resources_role.md":"42105578","en-us_resources_user.md":"0eb0bfd1","zh-cn_advanced_admin.md":"846d77e2","zh-cn_advanced_internal.md":"3fc95037","zh-cn_introduction.md":"935b9161","zh-cn_protocol_api.md":"88942d02","zh-cn_resources_login.md":"d53fd823","zh-cn_index.md":"d22ed2fa","en-us_protocol_webhook.md":"32f23f95","en-us_index.md":"9a435836","en-us_introduction.md":"30807083","en-us_protocol_index.md":"b1eb1d7e","en-us_protocol_message.md":"f6ef4e77","en-us_protocol_websocket.md":"0fa7b63b","zh-cn_protocol_index.md":"7daa6424","zh-cn_protocol_message.md":"de31f79b","zh-cn_resources_channel.md":"08cf6283","en-us_resources_guild.md":"c46197de","en-us_resources_member.md":"8bb1da4c","en-us_resources_reaction.md":"2b20af79","zh-cn_protocol_elements.md":"83ace3fa","zh-cn_protocol_events.md":"10578a93","zh-cn_resources_guild.md":"2ea04972","zh-cn_resources_member.md":"863aba26","zh-cn_resources_message.md":"9767acba","zh-cn_resources_reaction.md":"beaf7bc2","zh-cn_resources_role.md":"46729e3a","zh-cn_resources_user.md":"dbf33248","en-us_protocol_api.md":"a49f8e14","en-us_resources_channel.md":"72cdadc5"} diff --git a/zh-CN/advanced/admin.html b/zh-CN/advanced/admin.html new file mode 100644 index 0000000..085bae1 --- /dev/null +++ b/zh-CN/advanced/admin.html @@ -0,0 +1,23 @@ + + + + + + 管理接口 可选 实验性 | Satori + + + + + + + + + + + + +
Skip to content
目录

管理接口 可选 实验性

TIP

这是一个可选功能。

WARNING

这是一个实验性功能。

管理 API 包含了与 SDK 状态相关、与具体的平台无关的操作,例如创建和移除 WebHook 等。

管理 API 通过 /{path}/{version}/admin/{method} 路由提供。通信方式与 HTTP API 类似,但不需要 X-PlatformX-Self-ID 请求头。

API

获取登录信息列表

POST/admin/login.list

创建 WebHook

POST/admin/webhook.create

移除 WebHook

POST/admin/webhook.delete
+ + + + \ No newline at end of file diff --git a/zh-CN/advanced/internal.html b/zh-CN/advanced/internal.html new file mode 100644 index 0000000..7f8405e --- /dev/null +++ b/zh-CN/advanced/internal.html @@ -0,0 +1,29 @@ + + + + + + 内部接口 可选 | Satori + + + + + + + + + + + + +
Skip to content
目录

内部接口 可选

TIP

这是一个可选功能。

Satori 提供了访问任意平台内部接口的能力。这意味着,你可以大多数情况下编写通用代码,并在需要的时候使用内部接口来实现平台特定功能。

内部 API

内部 API 通过 /{path}/{version}/internal/{method} 路由提供。通信方式与 HTTP API 类似。

一个合法的请求示例形如:

text
POST /v1/internal/get_channel
+Content-Type: application/json
+Authorization: Bearer 1234567890
+X-Platform: discord
+X-Self-ID: 1234567890
+
+["1234567890"]

内部事件

内部事件是一类特殊的事件对象。它的结构如下:

字段类型说明
idnumber事件 ID
typestring事件类型,固定为 internal
platformstring接收者的平台名称
self_idstring接收者的平台账号
timestampnumber事件的时间戳
_typestring内部事件类型
_dataobject内部事件数据
+ + + + \ No newline at end of file diff --git a/zh-CN/index.html b/zh-CN/index.html new file mode 100644 index 0000000..249df91 --- /dev/null +++ b/zh-CN/index.html @@ -0,0 +1,23 @@ + + + + + + Satori | Satori + + + + + + + + + + + + +
Skip to content

Satori

THE UNIVERSAL MESSENGER PROTOCOL

+ + + + \ No newline at end of file diff --git a/zh-CN/introduction.html b/zh-CN/introduction.html new file mode 100644 index 0000000..5e84303 --- /dev/null +++ b/zh-CN/introduction.html @@ -0,0 +1,23 @@ + + + + + + 介绍 | Satori + + + + + + + + + + + + +
Skip to content
目录

介绍

Satori 是一个通用的聊天协议。我们希望 Satori 能够抹平不同聊天平台之间的差异,让开发者以更低的成本开发出跨平台、可扩展、高性能的聊天应用。

Satori 的名称来源于游戏东方 Project 中的角色 古明地觉 (Komeiji Satori)。古明地觉能够以心灵感应的方式与各种动物交流,取这个名字是希望 Satori 能够成为各个聊天平台之间的桥梁。

Satori 的开发团队长期从事聊天机器人开发,熟悉各种聊天平台的通信方式。经过长达 4 年的发展,Satori 有了健全的设计和完善的实现。目前,Satori 官方提供了超过 15 个聊天平台的适配器,完全覆盖了世界上主流的聊天平台:

这些适配器不仅为你带来了开箱即用的体验,也从实际上证明了 Satori 协议的通用性和扩展性。

不必担心使用 Satori 后会失去对聊天平台的控制。得益于 Satori 的内部接口机制,你完全可以大多数情况下编写通用代码,并在需要的时候使用内部接口来实现平台特定功能。

此外,Satori 还为规模化的场景提供了全套的解决方案。小到个人电脑上的聊天机器人,大到分布式集群上的聊天平台后端,Satori 都能满足你的需求。

+ + + + \ No newline at end of file diff --git a/zh-CN/protocol/api.html b/zh-CN/protocol/api.html new file mode 100644 index 0000000..e2d3abf --- /dev/null +++ b/zh-CN/protocol/api.html @@ -0,0 +1,29 @@ + + + + + + API | Satori + + + + + + + + + + + + +
Skip to content
目录

API

Satori 协议规定了一套基于 HTTP 的 API 服务,用于发送消息和调用其他功能。

HTTP API

这是一套 HTTP RPC 风格的 API,所有 URL 的形式均为 /{path}/{version}/{resource}.{method}。其中,path 为部署路径 (可以为空),version 为 API 的版本号,resource 是资源类型,method 为方法名。

目前 Satori 仅有 v1 一个版本。

所有 API 的请求都使用 POST,参数以 application/json 的形式编码在请求体中。返回值也是 JSON 格式。

请求头中需要包含 X-PlatformX-Self-ID 字段,分别表示平台名称和平台账号。

一个合法的请求示例形如:

text
POST /v1/channel.get
+Content-Type: application/json
+Authorization: Bearer 1234567890
+X-Platform: discord
+X-Self-ID: 1234567890
+
+{"channel_id": "1234567890"}

状态码

状态码描述
200 (OK)请求成功
400 (BAD REQUEST)请求格式错误
401 (UNAUTHORIZED)缺失鉴权
403 (FORBIDDEN)权限不足
404 (NOT FOUND)资源不存在
405 (METHOD NOT ALLOWED)请求方法不支持
5XX (SERVER ERROR)服务器错误

鉴权

鉴权通过 HTTP API 中的 Authorization 请求头来实现。其中涉及的鉴权令牌由 SDK 分发,本协议不做任何限制。

如果 SDK 没有配置鉴权,则应用无需提供上述请求头。

分页

部分 API 可能会返回一组数据。这种情况下,响应会是一个 List 对象:

字段类型描述
dataarray数据
nextstring?下一页的令牌

你可以使用 next 令牌来获取下一页的数据。如果 next 为空,则表示没有更多数据了。

扩展 API

除了标准的资源 API 外,Satori 还提供了一些扩展 API,用于获取特定的数据。

  • /{path}/{version}/admin 的子路由用于访问 SDK 相关接口,请参见 管理 API
  • /{path}/{version}/internal 的子路由用于访问平台内部接口,请参见 内部 API
+ + + + \ No newline at end of file diff --git a/zh-CN/protocol/elements.html b/zh-CN/protocol/elements.html new file mode 100644 index 0000000..4a09280 --- /dev/null +++ b/zh-CN/protocol/elements.html @@ -0,0 +1,39 @@ + + + + + + 标准元素 | Satori + + + + + + + + + + + + +
Skip to content
目录

标准元素

基础元素

基本元素是最常见的消息元素,它们能够在大多数平台上正常显示,是组成消息的基本单位。

纯文本

一段纯文本。

提及用户 (at)

属性类型范围描述
idstring?收发目标用户的 ID
namestring?收发目标用户的名称
rolestring?收发目标角色
typestring?收发特殊操作,例如 all 表示 @全体成员,here 表示 @在线成员

<at> 元素用于提及某个或某些用户。

提及频道 (sharp)

属性类型范围描述
idstring收发目标频道的 ID
namestring?收发目标频道的名称

<sharp> 元素用于提及某个频道。

链接 (a)

属性类型范围描述
hrefstring收发链接的 URL

<a> 元素用于显示一个链接。当平台不支持链接时,建议显示为 content (href) 的形式。

资源元素

资源消息元素表示文本中存在的资源文件。不同的平台对资源文件的支持存在较大的差异。发送时只需提供 src。如果某个平台不支持特定的资源类型,适配器应该用 src 代替。如果某个平台不支持将资源消息元素和其他消息元素同时发送,适配器应该分多条发送,并返回最后一条消息的 ID。

属性类型范围描述
srcstring收发资源的 URL
cacheboolean?是否使用已缓存的文件
timeoutstring?下载文件的最长时间 (毫秒)

图片 (img)

除了上述通用属性外,还支持下面的属性:

属性类型范围描述
widthnumber?图片的宽度
heightnumber?图片的高度

<img> 元素用于表示图片。

语音 (audio)

参见上述通用属性。

<audio> 元素用于表示语音。

视频 (video)

参见上述通用属性。

<video> 元素用于表示视频。

文件 (file)

参见上述通用属性。

<file> 元素用于表示文件。

修饰元素

修饰元素用于修饰其中的内容。如果对应的平台不支持对应的元素,可以忽略这个元素本身,正常渲染其中的子元素。

粗体 (b, strong)

<b><strong> 元素用于将其中的内容以粗体显示。

斜体 (i, em)

<i><em> 元素用于将其中的内容以斜体显示。

下划线 (u, ins)

<u><ins> 元素用于为其中的内容附加下划线。

删除线 (s, del)

<s><del> 元素用于为其中的内容附加删除线。

剧透 (spl)

<spl> 元素用于将其中的内容标记为剧透 (默认会被隐藏,点击后才显示)。

代码 (code)

<code> 元素用于将其中的内容以等宽字体显示 (通常还会有特定的背景色)。

上标 (sup)

<sup> 元素用于将其中的内容以上标显示。

下标 (sub)

<sub> 元素用于将其中的内容以下标显示。

排版元素

换行 (br)

<br> 元素表示一个独立的换行。

段落 (p)

<p> 元素表示一个段落。在渲染时,它与相邻的元素之间会确保有一个换行。

消息 (message)

属性类型范围描述
idstring?消息的 ID
forwardboolean?是否为转发消息

<message> 元素的基本用法是表示一条消息。子元素对应于消息的内容。如果其没有子元素,则消息不会被发送。

当出现 <message> 元素时,之前的元素会被立即视为一条消息被发送。因此下面的两种写法是等价的:

html
<!-- 第一种写法:发送两条消息 -->
+<message>hello</message>
+<message>world</message>
+
+<!-- 第二种写法:用一条空消息隔开两段文本,实际上仍然会发送两条消息 -->
+hello<message/>world

部分平台允许你模拟其他用户发送消息:

html
<message>
+  <author user-id="123123123" nickname="Alice" avatar="url"/>
+  hello world
+</message>

在支持转发的平台上,你可以使用 forward 配合 id 属性来转发一条消息:

html
<message id="123456789" forward/>

在支持合并转发的平台上,你可以使用带有 forward 属性的 <message> 元素嵌套其他 <message> 元素来实现合并转发:

html
<message forward>
+  <message id="123456789"/>
+  <message id="987654321"/>
+  <!-- 合并转发里也可以嵌套模拟其他用户发送的消息 -->
+  <message>
+    <author user-id="123123123" nickname="Alice" avatar="url"/>
+    hello world
+  </message>
+</message>

元信息元素

元信息元素通常不会被渲染,但会影响到消息的发送行为。

引用 (quote)

<quote> 元素用于表示对消息引用。它的子元素会被渲染为引用的内容。理论上所有 <message> 元素的特性也可以用于 <quote> 元素,包括子元素 (构造引用消息) 和 forward 属性 (引用合并转发)。然而目前似乎并没有平台提供了这样的支持。

作者 (author)

属性类型范围描述
user-idstring?用户 ID
nicknamestring?昵称
avatarstring?头像 URL

<author> 元素用于表示消息的作者。它的子元素会被渲染为作者的名字。

+ + + + \ No newline at end of file diff --git a/zh-CN/protocol/events.html b/zh-CN/protocol/events.html new file mode 100644 index 0000000..50fd5eb --- /dev/null +++ b/zh-CN/protocol/events.html @@ -0,0 +1,23 @@ + + + + + + 事件 | Satori + + + + + + + + + + + + +
Skip to content
目录

事件

Satori 协议规定了两套事件服务,分别基于 WebSocket 和 WebHook。你可以根据自己的需要进行选择。

类型定义

Event

字段类型描述
idnumber事件 ID
typestring事件类型
platformstring接收者的平台名称
self_idstring接收者的平台账号
timestampnumber事件的时间戳
channelChannel?事件所属的频道
guildGuild?事件所属的群组
loginLogin?事件的登录信息
memberGuildMember?事件的目标成员
messageMessage?事件的消息
operatorUser?事件的操作者
roleGuildRole?事件的目标角色
userUser?事件的目标用户

事件中的各属性遵循 资源提升 规则。

WebSocket

WebSocket 服务用于在 Satori SDK 与应用之间维护一个持久的、有状态的链接。通过这个链接,Satori 应用可以实时接收 SDK 推送的事件。

WebSocket 服务的地址为 /{path}/{version}/events。其中,path 为部署路径 (可以为空),version 为 API 的版本号。

目前 Satori 仅有 v1 一个版本。

连接流程

总的来说,Satori 应用需要在连接后遵循以下步骤:

  1. 连接建立后,在 10s 内发送一个 IDENTIFY 信令,用于鉴权和恢复会话;
    SDK 收到后会回复一个 READY 信令,并开启事件推送;
  2. 连接建立后,每隔 10s 向 SDK 发送一次 PING 信令;
    SDK 收到后会回复一个 PONG 信令;
  3. 应用持续接收来自 SDK 的 EVENT 信令,用于接收事件。

信令的数据结构如下:

字段类型描述
opnumber信令类型
bodyobject?信令数据

信令类型如下:

名称方向描述
EVENT0接收事件
PING1发送心跳
PONG2接收心跳回复
IDENTIFY3发送鉴权
READY4接收鉴权回复

IDENTIFY 信令的 body 数据结构如下:

字段类型描述
tokenstring?鉴权令牌
sequencenumber?序列号

READY 信令的 body 数据结构如下:

字段类型描述
loginsLogin[]登录信息

EVENT 信令的 body 数据结构参见 Event

鉴权

WebSocket 鉴权通过 IDENTIFY 信令的 token 字段来实现。其中涉及的鉴权令牌由 SDK 分发,本协议不做任何限制。

如果 SDK 没有配置鉴权,则应用无需提供上述字段。

会话恢复

当连接短暂中断时,Satori 应用可以通过 IDENTIFY 信令的 sequence 字段来恢复会话。sequence 字段的值为上一次连接中最后一个接收到的 EVENT 信令的 id 字段。会话恢复后,SDK 会向应用推送所有在断开连接期间发生的事件。

WebHook 可选

TIP

这是一个可选功能。

WebHook 服务是指,Satori SDK 在接收到平台事件时,向应用提供的 HTTP 地址推送事件。一个 SDK 应当可以配置多个 WebHook,并允许应用对发送者进行鉴权。这些 WebHook 的配置方式由 SDK 自身决定,本协议规范化了一组 管理接口,但不做强制要求。

事件推送以 POST 的形式进行,参数以 application/json 的形式编码在请求体中。数据结构参见 Event

应用收到 WebHook 请求时,如果能够顺利鉴权并处理请求,应当返回 2XX 的状态码。如果鉴权失败,应当返回 4XX 的状态码。如果处理失败,应当返回 5XX 的状态码。

反向鉴权

TIP

这里的鉴权与 API 与 WebSocket 中的鉴权逻辑类似,但方向相反。

Satori 应用可以要求 SDK 在发送 WebHook 请求时附带一个 Authorization 请求头,格式为 Bearer {token}。其中,token 由应用进行分发。

+ + + + \ No newline at end of file diff --git a/zh-CN/protocol/index.html b/zh-CN/protocol/index.html new file mode 100644 index 0000000..210a522 --- /dev/null +++ b/zh-CN/protocol/index.html @@ -0,0 +1,23 @@ + + + + + + 总览 | Satori + + + + + + + + + + + + +
Skip to content
目录

总览

Satori 协议的通信方式分为两块:

  • 一套基于 HTTP 的 API 服务,用于发送消息和调用其他功能
  • 一套基于 WebSocket 或者 WebHook 的事件服务,用于接收消息和其他事件

核心概念

在我们开始之前,先来了解一些与 Satori 相关的核心概念。

SDK 是指实现了 Satori 协议的软件。应用 (Application) 是指接入了 Satori 协议的软件。应用通过与 SDK 通信,以实现聊天平台的功能。

平台 (Platform) 是指聊天平台,比如 Discord、Telegram 等。同一平台内的用户间具有相互发送消息的能力,而不同平台的用户间则没有。对于 Rocket Chat 这一类可自建的聊天平台而言,每个独立的自建服务器都视为不同的平台。

消息 (Message) 是字面意义上的消息。通常是文本或富文本格式的,有时也会包含图片、语音等媒体资源。在 Koishi 中,消息通过消息元素进行统一编码。

频道 (Channel) 是消息的集合。一个频道包含了具备时间、逻辑顺序的一系列消息。频道又分为私聊频道和群聊频道,其中私聊频道有且仅有两人参与,而群聊频道可以有任意多人参与。

群组 (Guild) 是平台用户的集合。一个群组通常会同时包含一组用户和频道,并通过权限机制让其中的部分用户进行管理。在部分平台中,群组和群聊频道的概念恰好是重合的 (例如 QQ):一个群组内有且仅有一个群聊频道。私聊频道不属于任何群组。

可选字段

由于不同平台实现的差异,Satori 协议中的大部分字段都是可选的。可选字段的类型后面会有一个 ? 标记。

对于任意可选字段,相关 API 调用的结果中可能不含该字段,也可能该字段的值为 null。其中,前者表示该 API 并未提供这一字段,但可能由其他 API 提供;后者表示该 API 提供了这一字段,但其值为 null

资源

Satori 协议中的资源是指一类具有确定结构的对象。例如,用户频道消息 等都是资源。部分事件和 API 的返回值中会包含这些资源对象。

资源对象的某个字段可以是另一个资源对象,例如消息对象中的 user 字段就是一个用户对象。当资源对象出现多级嵌套时,内层的资源将会被统一提升到最外层。例如,当接收到消息事件时,事件体中可以访问到 message, member, user, channel 等资源,但 message 中就不再存在 memberuser 字段了。

+ + + + \ No newline at end of file diff --git a/zh-CN/protocol/message.html b/zh-CN/protocol/message.html new file mode 100644 index 0000000..0a8800b --- /dev/null +++ b/zh-CN/protocol/message.html @@ -0,0 +1,29 @@ + + + + + + 消息编码 | Satori + + + + + + + + + + + + +
Skip to content
目录

消息编码

Satori 中的消息使用消息元素 (Message Element) 进行编码。消息元素的语法与 XHTML 类似。

语法

消息元素的语法与 HTML 类似,但是不完全相同。

字符

你可以在消息元素内使用任何字符。不过部分特殊字符需要转义:

原始字符转义写法
"&quot;
&&amp;
<&lt;
>&gt;

根据上下文的不同,有些字符可能不需要被转义或使用其他的转义方式。

除此以外,你可以使用十进制或十六进制转义任何字符。例如 ' 也可以被书写成 &#39;&#x27;

标签

使用一对尖括号包裹元素名,加上可选的属性、闭合指示符,就构成了一个标签。

元素名由小写字母、数字和连字符组成,且必须以字母开头。在元素名前后添加 / 表示这是一个结束标签或自闭合标签,没有 / 符号时则表示这是一个起始标签:

  • <tag> 一个起始标签
  • </tag> 一个结束标签
  • <tag/> 一个自闭合标签

属性

起始或自闭合标签的元素名后接受可选的属性列表。每个属性必须形如以下形式:

  • key
  • key="value" (此时 value 中的 " 需要被转义)
  • key='value' (此时 value 中的 ' 需要被转义)

下面是一段示例:

html
<tag foo="1" bar/>

元素

一个元素要么是自闭合标签,要么由一对同名的起始标签和结束标签构成。元素的内容指起始标签和结束标签中间的部分,可以包含文本内容或其他元素。对于自闭合标签,元素的内容为空。下面是一段示例:

html
<parent>
+  text content
+  <child/>
+</parent>

当存在未配对的元素时,将自动视为文本内容的一部分。文本内容前后如果存在包含换行符的连续空白字符,则会被忽略。这意味着下面两段代码是等价的:

html
<tag>
+  <foo> bar
+  <!-- comment -->
+</tag>
html
<tag>&lt;foo&gt; bar</tag>

注释

使用成对的 <!----> 插入一段注释。注释中的部分不会被渲染。

资源反向代理

一些平台会使用 ID 标识资源文件 (例如 Lark)。当你接收到来自平台的消息时,拿到的是资源 ID 而非资源链接。此时你需要将资源 ID 转换为资源链接,才能构造合法的资源元素。

TIP

Telegram 是另一种特殊情况。尽管其提供的资源链接是可用的,但这个链接中会明文包含机器人令牌,并非可以公开使用的链接。因此 Telegram 和其他类似平台也适用于这一节的内容。

TIP

一种不推荐的做法是直接下载资源,并转存为 data: 链接放入消息中。之所以不推荐,是因为这种做法有两大致命缺点:

  1. 这些图片本来可以按需加载,但现在却被强制下载到本地,造成额外的带宽消耗。
  2. 编码为 data: 会导致消息体积大幅增加,极大影响消息处理的性能。

对于这种情况,我们建议使用实现资源反向代理。SDK 额外提供一个用于访问资源的路由 (类似 /v1/assets/xxx),将资源 ID 映射到资源链接,并编码到消息元素中。这样一来,上面提到的两个问题也就都解决了。

标准元素

关于 Satori 内置的消息元素,请参考 标准元素

+ + + + \ No newline at end of file diff --git a/zh-CN/resources/channel.html b/zh-CN/resources/channel.html new file mode 100644 index 0000000..91c6296 --- /dev/null +++ b/zh-CN/resources/channel.html @@ -0,0 +1,23 @@ + + + + + + 频道 (Channel) | Satori + + + + + + + + + + + + +
Skip to content
目录

频道 (Channel)

类型定义

Channel

字段类型描述
idstring频道 ID
typeChannel.Type频道类型
namestring?频道名称
parent_idstring?父频道 ID

Channel.Type

名称描述
TEXT0文本频道
VOICE1语音频道
CATEGORY2分类频道
DIRECT3私聊频道

API

获取群组频道

POST/channel.get
字段类型描述
channel_idstring频道 ID

根据 ID 获取频道。返回一个 Channel 对象。

获取群组频道列表

POST/channel.list
字段类型描述
guild_idstring群组 ID
nextstring分页令牌

获取群组中的全部频道。返回一个 Channel分页列表

创建群组频道

POST/channel.create
字段类型描述
guild_idstring群组 ID
dataChannel频道数据

创建群组频道。返回一个 Channel 对象。

修改群组频道

POST/channel.update
字段类型描述
channel_idstring频道 ID
dataChannel频道数据

修改群组频道。

删除群组频道

POST/channel.delete
字段类型描述
channel_idstring频道 ID

删除群组频道。

创建私聊频道

POST/user.channel.create
字段类型描述
user_idstring用户 ID
guild_idstring?群组 ID

创建一个私聊频道。返回一个 Channel 对象。

+ + + + \ No newline at end of file diff --git a/zh-CN/resources/guild.html b/zh-CN/resources/guild.html new file mode 100644 index 0000000..73f91f4 --- /dev/null +++ b/zh-CN/resources/guild.html @@ -0,0 +1,23 @@ + + + + + + 群组 (Guild) | Satori + + + + + + + + + + + + +
Skip to content
目录

群组 (Guild)

类型定义

Guild

字段类型描述
idstring群组 ID
namestring?群组名称
avatarstring?群组头像

API

获取群组

POST/guild.get
字段类型描述
guild_idstring群组 ID

根据 ID 获取。返回一个 Guild 对象。

获取群组列表

POST/guild.list
字段类型描述
nextstring分页令牌

获取当前用户加入的全部群组。返回一个 Guild分页列表

处理群组邀请

POST/guild.approve
字段类型描述
message_idstring请求 ID
approveboolean是否通过请求
commentstring备注信息

处理来自群组的邀请。

事件

guild-added

加入群组时触发。必需资源:guild

guild-updated

群组被修改时触发。必需资源:guild

guild-removed

退出群组时触发。必需资源:guild

guild-request

接收到新的入群邀请时触发。必需资源:guild

+ + + + \ No newline at end of file diff --git a/zh-CN/resources/login.html b/zh-CN/resources/login.html new file mode 100644 index 0000000..0eefef5 --- /dev/null +++ b/zh-CN/resources/login.html @@ -0,0 +1,23 @@ + + + + + + 登录信息 (Login) | Satori + + + + + + + + + + + + +
Skip to content
目录
+ + + + \ No newline at end of file diff --git a/zh-CN/resources/member.html b/zh-CN/resources/member.html new file mode 100644 index 0000000..0b654d5 --- /dev/null +++ b/zh-CN/resources/member.html @@ -0,0 +1,23 @@ + + + + + + 群组成员 (GuildMember) | Satori + + + + + + + + + + + + +
Skip to content
目录

群组成员 (GuildMember)

类型定义

GuildMember

字段类型描述
userUser?用户对象
nickstring?用户在群组中的名称
avatarstring?用户在群组中的头像
joined_atnumber?加入时间

API

获取群组成员

POST/guild.member.get
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID

获取群成员信息。返回一个 GuildMember 对象。

获取群组成员列表

POST/guild.member.list
字段类型描述
guild_idstring群组 ID
nextstring分页令牌

获取群成员列表。返回一个 GuildMember分页列表

踢出群组成员

POST/guild.member.kick
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID
permanentboolean?是否永久踢出 (无法再次加入群组)

将某个用户踢出群组。

通过群组成员申请

POST/guild.member.approve
字段类型描述
message_idstring请求 ID
approveboolean是否通过请求
commentstring?备注信息

处理加群请求。

事件

guild-member-added

群组成员增加时触发。必需资源:guildmemberuser

guild-member-updated

群组成员信息更新时触发。必需资源:guildmemberuser

guild-member-removed

群组成员移除时触发。必需资源:guildmemberuser

guild-member-request

接收到新的加群请求时触发。必需资源:guildmemberuser

+ + + + \ No newline at end of file diff --git a/zh-CN/resources/message.html b/zh-CN/resources/message.html new file mode 100644 index 0000000..8226e3b --- /dev/null +++ b/zh-CN/resources/message.html @@ -0,0 +1,23 @@ + + + + + + 消息 (Message) | Satori + + + + + + + + + + + + +
Skip to content
目录

消息 (Message)

类型定义

Message

字段类型描述
idstring消息 ID
contentstring消息内容
channelChannel?频道对象
guildGuild?群组对象
memberMember?成员对象
userUser?用户对象
created_atnumber?消息发送的时间戳
updated_atnumber?消息修改的时间戳

API

发送消息

POST/message.create
字段类型描述
channel_idstring频道 ID
contentstring消息内容

发送消息。返回一个 Message 对象构成的数组。

获取消息

POST/message.get
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID

获取特定消息。返回一个 Message 对象。必需资源:channeluser

撤回消息

POST/message.delete
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID

撤回特定消息。

编辑消息

POST/message.update
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
contentstring消息内容

编辑特定消息。

获取消息列表

POST/message.list
字段类型描述
channel_idstring频道 ID
nextstring分页令牌

获取频道消息列表。返回一个 Message分页列表。必需资源:channeluser

事件

message-created

当消息被创建时触发。必需资源:channelmessageuser

message-updated

当消息被编辑时触发。必需资源:channelmessageuser

message-deleted

当消息被删除时触发。必需资源:channelmessageuser

+ + + + \ No newline at end of file diff --git a/zh-CN/resources/reaction.html b/zh-CN/resources/reaction.html new file mode 100644 index 0000000..91aa29c --- /dev/null +++ b/zh-CN/resources/reaction.html @@ -0,0 +1,23 @@ + + + + + + 表态 (Reaction) 实验性 | Satori + + + + + + + + + + + + +
Skip to content
目录

表态 (Reaction) 实验性

WARNING

这是一个实验性功能。

API

添加表态

POST/reaction.create
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
emojistring表态名称

向特定消息添加表态。

删除表态

POST/reaction.delete
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
emojistring表态名称
user_idstring?用户 ID

从特定消息删除某个用户添加的特定表态。如果没有传入用户 ID 则表示删除自己的表态。

清除表态

POST/reaction.clear
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
emojistring?表态名称

从特定消息清除某个特定表态。如果没有传入表态名称则表示清除所有表态。

获取表态列表

POST/reaction.list
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
emojistring表态名称
nextstring?分页令牌

获取添加特定消息的特定表态的用户列表。返回一个 User分页列表

事件

reaction-added

当表态被添加时触发。

reaction-removed

当表态被移除时触发。

+ + + + \ No newline at end of file diff --git a/zh-CN/resources/role.html b/zh-CN/resources/role.html new file mode 100644 index 0000000..3f0faa9 --- /dev/null +++ b/zh-CN/resources/role.html @@ -0,0 +1,23 @@ + + + + + + 群组角色 (GuildRole) | Satori + + + + + + + + + + + + +
Skip to content
目录

群组角色 (GuildRole)

类型定义

GuildRole

字段类型描述
idstring角色 ID
namestring?角色名称

API

设置群组成员角色

POST/guild.member.role.set
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID
role_idstring角色 ID

设置群组内用户的角色。

取消群组成员角色

POST/guild.member.role.unset
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID
role_idstring角色 ID

取消群组内用户的角色。

获取群组角色列表

POST/guild.role.list
字段类型描述
guild_idstring群组 ID
nextstring?分页令牌

获取群组角色列表。返回一个 GuildRole分页列表

创建群组角色

POST/guild.role.create
字段类型描述
guild_idstring群组 ID
roleGuildRole角色数据

创建群组角色。返回一个 GuildRole 对象。

修改群组角色

POST/guild.role.update
字段类型描述
guild_idstring群组 ID
role_idstring角色 ID
roleGuildRole角色数据

修改群组角色。

删除群组角色

POST/guild.role.delete
字段类型描述
guild_idstring群组 ID
role_idstring角色 ID

删除群组角色。

事件

guild-role-created

群组角色被创建时触发。必需资源:guildrole

guild-role-updated

群组角色被修改时触发。必需资源:guildrole

guild-role-deleted

群组角色被删除时触发。必需资源:guildrole

+ + + + \ No newline at end of file diff --git a/zh-CN/resources/user.html b/zh-CN/resources/user.html new file mode 100644 index 0000000..7a9a329 --- /dev/null +++ b/zh-CN/resources/user.html @@ -0,0 +1,23 @@ + + + + + + 用户 (User) | Satori + + + + + + + + + + + + +
Skip to content
目录

用户 (User)

类型定义

User

字段类型描述
idstring用户 ID
namestring?用户名称
nickstring?用户昵称
avatarstring?用户头像
is_botboolean?是否为机器人

API

获取用户信息

POST/user.get
字段类型描述
user_idstring用户 ID

获取用户信息。返回一个 User 对象。

获取好友列表

POST/friend.list
字段类型描述
nextstring?分页令牌

获取好友列表。返回一个 User分页列表

处理好友申请

POST/friend.approve
字段类型描述
message_idstring请求 ID
approveboolean是否通过请求
commentstring?备注信息

处理好友申请。

事件

friend-request

接收到新的好友申请时触发。必需资源:user

+ + + + \ No newline at end of file