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..4ed9b87 --- /dev/null +++ b/404.html @@ -0,0 +1,21 @@ + + + + + + 404 | Satori + + + + + + + + + + +
Skip to content
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.BEy8OkCg.js b/assets/app.BEy8OkCg.js new file mode 100644 index 0000000..4004ce6 --- /dev/null +++ b/assets/app.BEy8OkCg.js @@ -0,0 +1 @@ +import{R as i}from"./chunks/theme.B9SrN7Nq.js";import{L as o,ae as u,af as c,ag as l,ah as f,ai as d,aj as m,ak as h,al as g,am as A,an as v,d as w,G as y,x as C,N as P,ao as R,ap as b,aq as j,ar as x}from"./chunks/framework.CtqZpALn.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),D=w({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),j(),s.setup&&s.setup(),()=>x(s.Layout)}});async function E(){const e=S(),a=L();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function L(){return g(D)}function S(){let e=o,a;return A(t=>{let n=v(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&E().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{E as createApp}; diff --git a/assets/chunks/framework.CtqZpALn.js b/assets/chunks/framework.CtqZpALn.js new file mode 100644 index 0000000..f45c8c8 --- /dev/null +++ b/assets/chunks/framework.CtqZpALn.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function ys(e,t){const n=new Set(e.split(","));return s=>n.has(s)}const ee={},yt=[],xe=()=>{},di=()=>!1,Bt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),_s=e=>e.startsWith("onUpdate:"),re=Object.assign,bs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},hi=Object.prototype.hasOwnProperty,Y=(e,t)=>hi.call(e,t),U=Array.isArray,_t=e=>vn(e)==="[object Map]",Pr=e=>vn(e)==="[object Set]",K=e=>typeof e=="function",se=e=>typeof e=="string",ht=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Nr=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),Fr=Object.prototype.toString,vn=e=>Fr.call(e),pi=e=>vn(e).slice(8,-1),Hr=e=>vn(e)==="[object Object]",vs=e=>se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bt=ys(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),wn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},gi=/-(\w)/g,Ne=wn(e=>e.replace(gi,(t,n)=>n?n.toUpperCase():"")),mi=/\B([A-Z])/g,pt=wn(e=>e.replace(mi,"-$1").toLowerCase()),En=wn(e=>e.charAt(0).toUpperCase()+e.slice(1)),rn=wn(e=>e?`on${En(e)}`:""),Ze=(e,t)=>!Object.is(e,t),Un=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},yi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},_i=e=>{const t=se(e)?Number(e):NaN;return isNaN(t)?e:t};let Bs;const jr=()=>Bs||(Bs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ws(e){if(U(e)){const t={};for(let n=0;n{if(n){const s=n.split(vi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Es(e){let t="";if(se(e))t=e;else if(U(e))for(let n=0;nse(e)?e:e==null?"":U(e)||Z(e)&&(e.toString===Fr||!K(e.toString))?JSON.stringify(e,Vr,2):String(e),Vr=(e,t)=>t&&t.__v_isRef?Vr(e,t.value):_t(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[Bn(s,o)+" =>"]=r,n),{})}:Pr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Bn(n))}:ht(t)?Bn(t):Z(t)&&!U(t)&&!Hr(t)?String(t):t,Bn=(e,t="")=>{var n;return ht(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ve;class Si{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=ve,!t&&ve&&(this.index=(ve.scopes||(ve.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=ve;try{return ve=this,t()}finally{ve=n}}}on(){ve=this}off(){ve=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),nt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Xe,n=ut;try{return Xe=!0,ut=this,this._runnings++,ks(this),this.fn()}finally{Ks(this),this._runnings--,ut=n,Xe=t}}stop(){this.active&&(ks(this),Ks(this),this.onStop&&this.onStop(),this.active=!1)}}function Oi(e){return e.value}function ks(e){e._trackId++,e._depsLength=0}function Ks(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},un=new WeakMap,ft=Symbol(""),is=Symbol("");function _e(e,t,n){if(Xe&&ut){let s=un.get(e);s||un.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=qr(()=>s.delete(n))),Kr(ut,r)}}function $e(e,t,n,s,r,o){const i=un.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&U(e)){const c=Number(s);i.forEach((u,d)=>{(d==="length"||!ht(d)&&d>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":U(e)?vs(n)&&l.push(i.get("length")):(l.push(i.get(ft)),_t(e)&&l.push(i.get(is)));break;case"delete":U(e)||(l.push(i.get(ft)),_t(e)&&l.push(i.get(is)));break;case"set":_t(e)&&l.push(i.get(ft));break}xs();for(const c of l)c&&Wr(c,4);Ss()}function Ri(e,t){const n=un.get(e);return n&&n.get(t)}const Li=ys("__proto__,__v_isRef,__isVue"),Gr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ht)),Ws=Ii();function Ii(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=J(this);for(let o=0,i=this.length;o{e[t]=function(...n){tt(),xs();const s=J(this)[t].apply(this,n);return Ss(),nt(),s}}),e}function Mi(e){ht(e)||(e=String(e));const t=J(this);return _e(t,"has",e),t.hasOwnProperty(e)}class zr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?Wi:Qr:o?Jr:Yr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=U(t);if(!r){if(i&&Y(Ws,n))return Reflect.get(Ws,n,s);if(n==="hasOwnProperty")return Mi}const l=Reflect.get(t,n,s);return(ht(n)?Gr.has(n):Li(n))||(r||_e(t,"get",n),o)?l:de(l)?i&&vs(n)?l:l.value:Z(l)?r?Sn(l):xn(l):l}}class Xr extends zr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];if(!this._isShallow){const c=Ht(o);if(!fn(s)&&!Ht(s)&&(o=J(o),s=J(s)),!U(t)&&de(o)&&!de(s))return c?!1:(o.value=s,!0)}const i=U(t)&&vs(n)?Number(n)e,Cn=e=>Reflect.getPrototypeOf(e);function qt(e,t,n=!1,s=!1){e=e.__v_raw;const r=J(e),o=J(t);n||(Ze(t,o)&&_e(r,"get",t),_e(r,"get",o));const{has:i}=Cn(r),l=s?Ts:n?Rs:$t;if(i.call(r,t))return l(e.get(t));if(i.call(r,o))return l(e.get(o));e!==r&&e.get(t)}function Gt(e,t=!1){const n=this.__v_raw,s=J(n),r=J(e);return t||(Ze(e,r)&&_e(s,"has",e),_e(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function zt(e,t=!1){return e=e.__v_raw,!t&&_e(J(e),"iterate",ft),Reflect.get(e,"size",e)}function qs(e){e=J(e);const t=J(this);return Cn(t).has.call(t,e)||(t.add(e),$e(t,"add",e,e)),this}function Gs(e,t){t=J(t);const n=J(this),{has:s,get:r}=Cn(n);let o=s.call(n,e);o||(e=J(e),o=s.call(n,e));const i=r.call(n,e);return n.set(e,t),o?Ze(t,i)&&$e(n,"set",e,t):$e(n,"add",e,t),this}function zs(e){const t=J(this),{has:n,get:s}=Cn(t);let r=n.call(t,e);r||(e=J(e),r=n.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return r&&$e(t,"delete",e,void 0),o}function Xs(){const e=J(this),t=e.size!==0,n=e.clear();return t&&$e(e,"clear",void 0,void 0),n}function Xt(e,t){return function(s,r){const o=this,i=o.__v_raw,l=J(i),c=t?Ts:e?Rs:$t;return!e&&_e(l,"iterate",ft),i.forEach((u,d)=>s.call(r,c(u),c(d),o))}}function Yt(e,t,n){return function(...s){const r=this.__v_raw,o=J(r),i=_t(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,u=r[e](...s),d=n?Ts:t?Rs:$t;return!t&&_e(o,"iterate",c?is:ft),{next(){const{value:h,done:m}=u.next();return m?{value:h,done:m}:{value:l?[d(h[0]),d(h[1])]:d(h),done:m}},[Symbol.iterator](){return this}}}}function Ve(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function $i(){const e={get(o){return qt(this,o)},get size(){return zt(this)},has:Gt,add:qs,set:Gs,delete:zs,clear:Xs,forEach:Xt(!1,!1)},t={get(o){return qt(this,o,!1,!0)},get size(){return zt(this)},has:Gt,add:qs,set:Gs,delete:zs,clear:Xs,forEach:Xt(!1,!0)},n={get(o){return qt(this,o,!0)},get size(){return zt(this,!0)},has(o){return Gt.call(this,o,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:Xt(!0,!1)},s={get(o){return qt(this,o,!0,!0)},get size(){return zt(this,!0)},has(o){return Gt.call(this,o,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:Xt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Yt(o,!1,!1),n[o]=Yt(o,!0,!1),t[o]=Yt(o,!1,!0),s[o]=Yt(o,!0,!0)}),[e,n,t,s]}const[ji,Di,Vi,Ui]=$i();function As(e,t){const n=t?e?Ui:Vi:e?Di:ji;return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Y(n,r)&&r in s?n:s,r,o)}const Bi={get:As(!1,!1)},ki={get:As(!1,!0)},Ki={get:As(!0,!1)};const Yr=new WeakMap,Jr=new WeakMap,Qr=new WeakMap,Wi=new WeakMap;function qi(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Gi(e){return e.__v_skip||!Object.isExtensible(e)?0:qi(pi(e))}function xn(e){return Ht(e)?e:Os(e,!1,Ni,Bi,Yr)}function zi(e){return Os(e,!1,Hi,ki,Jr)}function Sn(e){return Os(e,!0,Fi,Ki,Qr)}function Os(e,t,n,s,r){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=r.get(e);if(o)return o;const i=Gi(e);if(i===0)return e;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function Rt(e){return Ht(e)?Rt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ht(e){return!!(e&&e.__v_isReadonly)}function fn(e){return!!(e&&e.__v_isShallow)}function Zr(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function on(e){return Object.isExtensible(e)&&$r(e,"__v_skip",!0),e}const $t=e=>Z(e)?xn(e):e,Rs=e=>Z(e)?Sn(e):e;class eo{constructor(t,n,s,r){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Cs(()=>t(this._value),()=>Lt(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Ze(t._value,t._value=t.effect.run())&&Lt(t,4),Ls(t),t.effect._dirtyLevel>=2&&Lt(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function Xi(e,t,n=!1){let s,r;const o=K(e);return o?(s=e,r=xe):(s=e.get,r=e.set),new eo(s,r,o||!r,n)}function Ls(e){var t;Xe&&ut&&(e=J(e),Kr(ut,(t=e.dep)!=null?t:e.dep=qr(()=>e.dep=void 0,e instanceof eo?e:void 0)))}function Lt(e,t=4,n){e=J(e);const s=e.dep;s&&Wr(s,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function me(e){return no(e,!1)}function to(e){return no(e,!0)}function no(e,t){return de(e)?e:new Yi(e,t)}class Yi{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:$t(t)}get value(){return Ls(this),this._value}set value(t){const n=this.__v_isShallow||fn(t)||Ht(t);t=n?t:J(t),Ze(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:$t(t),Lt(this,4))}}function so(e){return de(e)?e.value:e}const Ji={get:(e,t,n)=>so(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return de(r)&&!de(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ro(e){return Rt(e)?e:new Proxy(e,Ji)}class Qi{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>Ls(this),()=>Lt(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Zi(e){return new Qi(e)}class el{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 Ri(J(this._object),this._key)}}class tl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function nl(e,t,n){return de(e)?e:K(e)?new tl(e):Z(e)&&arguments.length>1?sl(e,t,n):me(e)}function sl(e,t,n){const s=e[t];return de(s)?s:new el(e,t,n)}/** +* @vue/runtime-core v3.4.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ye(e,t,n,s){try{return s?e(...s):e()}catch(r){Tn(r,t,n)}}function Se(e,t,n,s){if(K(e)){const r=Ye(e,t,n,s);return r&&Nr(r)&&r.catch(o=>{Tn(o,t,n)}),r}if(U(e)){const r=[];for(let o=0;o>>1,r=fe[s],o=Dt(r);oPe&&fe.splice(t,1)}function ll(e){U(e)?vt.push(...e):(!Ke||!Ke.includes(e,e.allowRecurse?lt+1:lt))&&vt.push(e),io()}function Ys(e,t,n=jt?Pe+1:0){for(;nDt(n)-Dt(s));if(vt.length=0,Ke){Ke.push(...t);return}for(Ke=t,lt=0;lte.id==null?1/0:e.id,cl=(e,t)=>{const n=Dt(e)-Dt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function lo(e){ls=!1,jt=!0,fe.sort(cl);try{for(Pe=0;Pese(w)?w.trim():w)),h&&(r=n.map(yi))}let l,c=s[l=rn(t)]||s[l=rn(Ne(t))];!c&&o&&(c=s[l=rn(pt(t))]),c&&Se(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Se(u,e,6,r)}}function co(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!K(e)){const c=u=>{const d=co(u,t,!0);d&&(l=!0,re(i,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(Z(e)&&s.set(e,null),null):(U(o)?o.forEach(c=>i[c]=null):re(i,o),Z(e)&&s.set(e,i),i)}function On(e,t){return!e||!Bt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,pt(t))||Y(e,t))}let ie=null,Rn=null;function hn(e){const t=ie;return ie=e,Rn=e&&e.type.__scopeId||null,t}function $a(e){Rn=e}function ja(){Rn=null}function ul(e,t=ie,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&cr(-1);const o=hn(t);let i;try{i=e(...r)}finally{hn(o),s._d&&cr(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function kn(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:c,render:u,renderCache:d,props:h,data:m,setupState:w,ctx:R,inheritAttrs:P}=e,B=hn(e);let q,G;try{if(n.shapeFlag&4){const y=r||s,M=y;q=Ae(u.call(M,y,d,h,w,m,R)),G=l}else{const y=t;q=Ae(y.length>1?y(h,{attrs:l,slots:i,emit:c}):y(h,null)),G=t.props?l:fl(l)}}catch(y){Nt.length=0,Tn(y,e,1),q=ue(ye)}let g=q;if(G&&P!==!1){const y=Object.keys(G),{shapeFlag:M}=g;y.length&&M&7&&(o&&y.some(_s)&&(G=dl(G,o)),g=et(g,G,!1,!0))}return n.dirs&&(g=et(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),q=g,hn(B),q}const fl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Bt(n))&&((t||(t={}))[n]=e[n]);return t},dl=(e,t)=>{const n={};for(const s in e)(!_s(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function hl(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:c}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Js(s,i,u):!!i;if(c&8){const d=t.dynamicProps;for(let h=0;he.__isSuspense;function fo(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):ll(e)}const ml=Symbol.for("v-scx"),yl=()=>Et(ml);function ho(e,t){return Ln(e,null,t)}function Ua(e,t){return Ln(e,null,{flush:"post"})}const Jt={};function je(e,t,n){return Ln(e,t,n)}function Ln(e,t,{immediate:n,deep:s,flush:r,once:o,onTrack:i,onTrigger:l}=ee){if(t&&o){const L=t;t=(...D)=>{L(...D),M()}}const c=ae,u=L=>s===!0?L:at(L,s===!1?1:void 0);let d,h=!1,m=!1;if(de(e)?(d=()=>e.value,h=fn(e)):Rt(e)?(d=()=>u(e),h=!0):U(e)?(m=!0,h=e.some(L=>Rt(L)||fn(L)),d=()=>e.map(L=>{if(de(L))return L.value;if(Rt(L))return u(L);if(K(L))return Ye(L,c,2)})):K(e)?t?d=()=>Ye(e,c,2):d=()=>(w&&w(),Se(e,c,3,[R])):d=xe,t&&s){const L=d;d=()=>at(L())}let w,R=L=>{w=g.onStop=()=>{Ye(L,c,4),w=g.onStop=void 0}},P;if(Fn)if(R=xe,t?n&&Se(t,c,3,[d(),m?[]:void 0,R]):d(),r==="sync"){const L=yl();P=L.__watcherHandles||(L.__watcherHandles=[])}else return xe;let B=m?new Array(e.length).fill(Jt):Jt;const q=()=>{if(!(!g.active||!g.dirty))if(t){const L=g.run();(s||h||(m?L.some((D,A)=>Ze(D,B[A])):Ze(L,B)))&&(w&&w(),Se(t,c,3,[L,B===Jt?void 0:m&&B[0]===Jt?[]:B,R]),B=L)}else g.run()};q.allowRecurse=!!t;let G;r==="sync"?G=q:r==="post"?G=()=>pe(q,c&&c.suspense):(q.pre=!0,c&&(q.id=c.uid),G=()=>Ms(q));const g=new Cs(d,xe,G),y=Ur(),M=()=>{g.stop(),y&&bs(y.effects,g)};return t?n?q():B=g.run():r==="post"?pe(g.run.bind(g),c&&c.suspense):g.run(),P&&P.push(M),M}function _l(e,t,n){const s=this.proxy,r=se(e)?e.includes(".")?po(s,e):()=>s[e]:e.bind(s,s);let o;K(t)?o=t:(o=t.handler,n=t);const i=kt(this),l=Ln(r,o.bind(s),n);return i(),l}function po(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r{at(s,t,n)});else if(Hr(e))for(const s in e)at(e[s],t,n);return e}function Ba(e,t){if(ie===null)return e;const n=Hn(ie)||ie.proxy,s=e.dirs||(e.dirs=[]);for(let r=0;r{e.isMounted=!0}),vo(()=>{e.isUnmounting=!0}),e}const we=[Function,Array],go={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:we,onEnter:we,onAfterEnter:we,onEnterCancelled:we,onBeforeLeave:we,onLeave:we,onAfterLeave:we,onLeaveCancelled:we,onBeforeAppear:we,onAppear:we,onAfterAppear:we,onAppearCancelled:we},vl={name:"BaseTransition",props:go,setup(e,{slots:t}){const n=Nn(),s=bl();return()=>{const r=t.default&&yo(t.default(),!0);if(!r||!r.length)return;let o=r[0];if(r.length>1){for(const m of r)if(m.type!==ye){o=m;break}}const i=J(e),{mode:l}=i;if(s.isLeaving)return Kn(o);const c=Zs(o);if(!c)return Kn(o);const u=cs(c,i,s,n);as(c,u);const d=n.subTree,h=d&&Zs(d);if(h&&h.type!==ye&&!ct(c,h)){const m=cs(h,i,s,n);if(as(h,m),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,m.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Kn(o);l==="in-out"&&c.type!==ye&&(m.delayLeave=(w,R,P)=>{const B=mo(s,h);B[String(h.key)]=h,w[We]=()=>{R(),w[We]=void 0,delete u.delayedLeave},u.delayedLeave=P})}return o}}},wl=vl;function mo(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 cs(e,t,n,s){const{appear:r,mode:o,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:h,onLeave:m,onAfterLeave:w,onLeaveCancelled:R,onBeforeAppear:P,onAppear:B,onAfterAppear:q,onAppearCancelled:G}=t,g=String(e.key),y=mo(n,e),M=(A,j)=>{A&&Se(A,s,9,j)},L=(A,j)=>{const E=j[1];M(A,j),U(A)?A.every(V=>V.length<=1)&&E():A.length<=1&&E()},D={mode:o,persisted:i,beforeEnter(A){let j=l;if(!n.isMounted)if(r)j=P||l;else return;A[We]&&A[We](!0);const E=y[g];E&&ct(e,E)&&E.el[We]&&E.el[We](),M(j,[A])},enter(A){let j=c,E=u,V=d;if(!n.isMounted)if(r)j=B||c,E=q||u,V=G||d;else return;let S=!1;const W=A[Qt]=oe=>{S||(S=!0,oe?M(V,[A]):M(E,[A]),D.delayedLeave&&D.delayedLeave(),A[Qt]=void 0)};j?L(j,[A,W]):W()},leave(A,j){const E=String(e.key);if(A[Qt]&&A[Qt](!0),n.isUnmounting)return j();M(h,[A]);let V=!1;const S=A[We]=W=>{V||(V=!0,j(),W?M(R,[A]):M(w,[A]),A[We]=void 0,y[E]===e&&delete y[E])};y[E]=e,m?L(m,[A,S]):S()},clone(A){return cs(A,t,n,s)}};return D}function Kn(e){if(In(e))return e=et(e),e.children=null,e}function Zs(e){if(!In(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&K(n.default))return n.default()}}function as(e,t){e.shapeFlag&6&&e.component?as(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 yo(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader,In=e=>e.type.__isKeepAlive;function El(e,t){bo(e,"a",t)}function Cl(e,t){bo(e,"da",t)}function bo(e,t,n=ae){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Mn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)In(r.parent.vnode)&&xl(s,t,n,r),r=r.parent}}function xl(e,t,n,s){const r=Mn(t,e,s,!0);Pn(()=>{bs(s[t],r)},n)}function Mn(e,t,n=ae,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;tt();const l=kt(n),c=Se(t,n,e,i);return l(),nt(),c});return s?r.unshift(o):r.push(o),o}}const De=e=>(t,n=ae)=>(!Fn||e==="sp")&&Mn(e,(...s)=>t(...s),n),Sl=De("bm"),xt=De("m"),Tl=De("bu"),Al=De("u"),vo=De("bum"),Pn=De("um"),Ol=De("sp"),Rl=De("rtg"),Ll=De("rtc");function Il(e,t=ae){Mn("ec",e,t)}function ka(e,t,n,s){let r;const o=n;if(U(e)||se(e)){r=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,o));else{const i=Object.keys(e);r=new Array(i.length);for(let l=0,c=i.length;lmn(t)?!(t.type===ye||t.type===ge&&!wo(t.children)):!0)?e:null}function Wa(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:rn(s)]=e[s];return n}const us=e=>e?Uo(e)?Hn(e)||e.proxy:us(e.parent):null,It=re(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=>us(e.parent),$root:e=>us(e.root),$emit:e=>e.emit,$options:e=>Ns(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Ms(e.update)}),$nextTick:e=>e.n||(e.n=An.bind(e.proxy)),$watch:e=>_l.bind(e)}),Wn=(e,t)=>e!==ee&&!e.__isScriptSetup&&Y(e,t),Ml={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const w=i[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(Wn(s,t))return i[t]=1,s[t];if(r!==ee&&Y(r,t))return i[t]=2,r[t];if((u=e.propsOptions[0])&&Y(u,t))return i[t]=3,o[t];if(n!==ee&&Y(n,t))return i[t]=4,n[t];fs&&(i[t]=0)}}const d=It[t];let h,m;if(d)return t==="$attrs"&&_e(e.attrs,"get",""),d(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ee&&Y(n,t))return i[t]=4,n[t];if(m=c.config.globalProperties,Y(m,t))return m[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return Wn(r,t)?(r[t]=n,!0):s!==ee&&Y(s,t)?(s[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:o}},i){let l;return!!n[i]||e!==ee&&Y(e,i)||Wn(t,i)||(l=o[0])&&Y(l,i)||Y(s,i)||Y(It,i)||Y(r.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function qa(){return Pl().slots}function Pl(){const e=Nn();return e.setupContext||(e.setupContext=ko(e))}function er(e){return U(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let fs=!0;function Nl(e){const t=Ns(e),n=e.proxy,s=e.ctx;fs=!1,t.beforeCreate&&tr(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:c,inject:u,created:d,beforeMount:h,mounted:m,beforeUpdate:w,updated:R,activated:P,deactivated:B,beforeDestroy:q,beforeUnmount:G,destroyed:g,unmounted:y,render:M,renderTracked:L,renderTriggered:D,errorCaptured:A,serverPrefetch:j,expose:E,inheritAttrs:V,components:S,directives:W,filters:oe}=t;if(u&&Fl(u,s,null),i)for(const X in i){const F=i[X];K(F)&&(s[X]=F.bind(n))}if(r){const X=r.call(n,n);Z(X)&&(e.data=xn(X))}if(fs=!0,o)for(const X in o){const F=o[X],Fe=K(F)?F.bind(n,n):K(F.get)?F.get.bind(n,n):xe,Kt=!K(F)&&K(F.set)?F.set.bind(n):xe,st=ne({get:Fe,set:Kt});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>st.value,set:Le=>st.value=Le})}if(l)for(const X in l)Eo(l[X],s,n,X);if(c){const X=K(c)?c.call(n):c;Reflect.ownKeys(X).forEach(F=>{Ul(F,X[F])})}d&&tr(d,e,"c");function H(X,F){U(F)?F.forEach(Fe=>X(Fe.bind(n))):F&&X(F.bind(n))}if(H(Sl,h),H(xt,m),H(Tl,w),H(Al,R),H(El,P),H(Cl,B),H(Il,A),H(Ll,L),H(Rl,D),H(vo,G),H(Pn,y),H(Ol,j),U(E))if(E.length){const X=e.exposed||(e.exposed={});E.forEach(F=>{Object.defineProperty(X,F,{get:()=>n[F],set:Fe=>n[F]=Fe})})}else e.exposed||(e.exposed={});M&&e.render===xe&&(e.render=M),V!=null&&(e.inheritAttrs=V),S&&(e.components=S),W&&(e.directives=W)}function Fl(e,t,n=xe){U(e)&&(e=ds(e));for(const s in e){const r=e[s];let o;Z(r)?"default"in r?o=Et(r.from||s,r.default,!0):o=Et(r.from||s):o=Et(r),de(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function tr(e,t,n){Se(U(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Eo(e,t,n,s){const r=s.includes(".")?po(n,s):()=>n[s];if(se(e)){const o=t[e];K(o)&&je(r,o)}else if(K(e))je(r,e.bind(n));else if(Z(e))if(U(e))e.forEach(o=>Eo(o,t,n,s));else{const o=K(e.handler)?e.handler.bind(n):t[e.handler];K(o)&&je(r,o,e)}}function Ns(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>pn(c,u,i,!0)),pn(c,t,i)),Z(t)&&o.set(t,c),c}function pn(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&pn(e,o,n,!0),r&&r.forEach(i=>pn(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=Hl[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const Hl={data:nr,props:sr,emits:sr,methods:Ot,computed:Ot,beforeCreate:he,created:he,beforeMount:he,mounted:he,beforeUpdate:he,updated:he,beforeDestroy:he,beforeUnmount:he,destroyed:he,unmounted:he,activated:he,deactivated:he,errorCaptured:he,serverPrefetch:he,components:Ot,directives:Ot,watch:jl,provide:nr,inject:$l};function nr(e,t){return t?e?function(){return re(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function $l(e,t){return Ot(ds(e),ds(t))}function ds(e){if(U(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(s&&s.proxy):t}}const xo={},So=()=>Object.create(xo),To=e=>Object.getPrototypeOf(e)===xo;function Bl(e,t,n,s=!1){const r={},o=So();e.propsDefaults=Object.create(null),Ao(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:zi(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function kl(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=J(r),[c]=e.propsOptions;let u=!1;if((s||i>0)&&!(i&16)){if(i&8){const d=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[m,w]=Oo(h,t,!0);re(i,m),w&&l.push(...w)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!o&&!c)return Z(e)&&s.set(e,yt),yt;if(U(o))for(let d=0;d-1,w[1]=P<0||R-1||Y(w,"default"))&&l.push(h)}}}const u=[i,l];return Z(e)&&s.set(e,u),u}function rr(e){return e[0]!=="$"&&!bt(e)}function or(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function ir(e,t){return or(e)===or(t)}function lr(e,t){return U(t)?t.findIndex(n=>ir(n,e)):K(t)&&ir(t,e)?0:-1}const Ro=e=>e[0]==="_"||e==="$stable",Fs=e=>U(e)?e.map(Ae):[Ae(e)],Kl=(e,t,n)=>{if(t._n)return t;const s=ul((...r)=>Fs(t(...r)),n);return s._c=!1,s},Lo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Ro(r))continue;const o=e[r];if(K(o))t[r]=Kl(r,o,s);else if(o!=null){const i=Fs(o);t[r]=()=>i}}},Io=(e,t)=>{const n=Fs(t);e.slots.default=()=>n},Wl=(e,t)=>{const n=e.slots=So();if(e.vnode.shapeFlag&32){const s=t._;s?(re(n,t),$r(n,"_",s,!0)):Lo(t,n)}else t&&Io(e,t)},ql=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=ee;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:(re(r,t),!n&&l===1&&delete r._):(o=!t.$stable,Lo(t,r)),i=t}else t&&(Io(e,t),i={default:1});if(o)for(const l in r)!Ro(l)&&i[l]==null&&delete r[l]};function gn(e,t,n,s,r=!1){if(U(e)){e.forEach((m,w)=>gn(m,t&&(U(t)?t[w]:t),n,s,r));return}if(wt(s)&&!r)return;const o=s.shapeFlag&4?Hn(s.component)||s.component.proxy:s.el,i=r?null:o,{i:l,r:c}=e,u=t&&t.r,d=l.refs===ee?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==c&&(se(u)?(d[u]=null,Y(h,u)&&(h[u]=null)):de(u)&&(u.value=null)),K(c))Ye(c,l,12,[i,d]);else{const m=se(c),w=de(c);if(m||w){const R=()=>{if(e.f){const P=m?Y(h,c)?h[c]:d[c]:c.value;r?U(P)&&bs(P,o):U(P)?P.includes(o)||P.push(o):m?(d[c]=[o],Y(h,c)&&(h[c]=d[c])):(c.value=[o],e.k&&(d[e.k]=c.value))}else m?(d[c]=i,Y(h,c)&&(h[c]=i)):w&&(c.value=i,e.k&&(d[e.k]=i))};i?(R.id=-1,pe(R,n)):R()}}}let Ue=!1;const Gl=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",zl=e=>e.namespaceURI.includes("MathML"),Zt=e=>{if(Gl(e))return"svg";if(zl(e))return"mathml"},en=e=>e.nodeType===8;function Xl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:u}}=e,d=(g,y)=>{if(!y.hasChildNodes()){n(null,g,y),dn(),y._vnode=g;return}Ue=!1,h(y.firstChild,g,null,null,null),dn(),y._vnode=g,Ue&&console.error("Hydration completed but contains mismatches.")},h=(g,y,M,L,D,A=!1)=>{A=A||!!y.dynamicChildren;const j=en(g)&&g.data==="[",E=()=>P(g,y,M,L,D,j),{type:V,ref:S,shapeFlag:W,patchFlag:oe}=y;let ce=g.nodeType;y.el=g,oe===-2&&(A=!1,y.dynamicChildren=null);let H=null;switch(V){case Ct:ce!==3?y.children===""?(c(y.el=r(""),i(g),g),H=g):H=E():(g.data!==y.children&&(Ue=!0,g.data=y.children),H=o(g));break;case ye:G(g)?(H=o(g),q(y.el=g.content.firstChild,g,M)):ce!==8||j?H=E():H=o(g);break;case Pt:if(j&&(g=o(g),ce=g.nodeType),ce===1||ce===3){H=g;const X=!y.children.length;for(let F=0;F{A=A||!!y.dynamicChildren;const{type:j,props:E,patchFlag:V,shapeFlag:S,dirs:W,transition:oe}=y,ce=j==="input"||j==="option";if(ce||V!==-1){W&&Me(y,null,M,"created");let H=!1;if(G(g)){H=Mo(L,oe)&&M&&M.vnode.props&&M.vnode.props.appear;const F=g.content.firstChild;H&&oe.beforeEnter(F),q(F,g,M),y.el=g=F}if(S&16&&!(E&&(E.innerHTML||E.textContent))){let F=w(g.firstChild,y,g,M,L,D,A);for(;F;){Ue=!0;const Fe=F;F=F.nextSibling,l(Fe)}}else S&8&&g.textContent!==y.children&&(Ue=!0,g.textContent=y.children);if(E)if(ce||!A||V&48)for(const F in E)(ce&&(F.endsWith("value")||F==="indeterminate")||Bt(F)&&!bt(F)||F[0]===".")&&s(g,F,null,E[F],void 0,void 0,M);else E.onClick&&s(g,"onClick",null,E.onClick,void 0,void 0,M);let X;(X=E&&E.onVnodeBeforeMount)&&Ee(X,M,y),W&&Me(y,null,M,"beforeMount"),((X=E&&E.onVnodeMounted)||W||H)&&fo(()=>{X&&Ee(X,M,y),H&&oe.enter(g),W&&Me(y,null,M,"mounted")},L)}return g.nextSibling},w=(g,y,M,L,D,A,j)=>{j=j||!!y.dynamicChildren;const E=y.children,V=E.length;for(let S=0;S{const{slotScopeIds:j}=y;j&&(D=D?D.concat(j):j);const E=i(g),V=w(o(g),y,E,M,L,D,A);return V&&en(V)&&V.data==="]"?o(y.anchor=V):(Ue=!0,c(y.anchor=u("]"),E,V),V)},P=(g,y,M,L,D,A)=>{if(Ue=!0,y.el=null,A){const V=B(g);for(;;){const S=o(g);if(S&&S!==V)l(S);else break}}const j=o(g),E=i(g);return l(g),n(null,y,E,j,M,L,Zt(E),D),j},B=(g,y="[",M="]")=>{let L=0;for(;g;)if(g=o(g),g&&en(g)&&(g.data===y&&L++,g.data===M)){if(L===0)return o(g);L--}return g},q=(g,y,M)=>{const L=y.parentNode;L&&L.replaceChild(g,y);let D=M;for(;D;)D.vnode.el===y&&(D.vnode.el=D.subTree.el=g),D=D.parent},G=g=>g.nodeType===1&&g.tagName.toLowerCase()==="template";return[d,h]}const pe=fo;function Yl(e){return Jl(e,Xl)}function Jl(e,t){const n=jr();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:c,setText:u,setElementText:d,parentNode:h,nextSibling:m,setScopeId:w=xe,insertStaticContent:R}=e,P=(a,f,p,_=null,b=null,x=null,O=void 0,C=null,T=!!f.dynamicChildren)=>{if(a===f)return;a&&!ct(a,f)&&(_=Wt(a),Le(a,b,x,!0),a=null),f.patchFlag===-2&&(T=!1,f.dynamicChildren=null);const{type:v,ref:I,shapeFlag:$}=f;switch(v){case Ct:B(a,f,p,_);break;case ye:q(a,f,p,_);break;case Pt:a==null&&G(f,p,_,O);break;case ge:S(a,f,p,_,b,x,O,C,T);break;default:$&1?M(a,f,p,_,b,x,O,C,T):$&6?W(a,f,p,_,b,x,O,C,T):($&64||$&128)&&v.process(a,f,p,_,b,x,O,C,T,gt)}I!=null&&b&&gn(I,a&&a.ref,x,f||a,!f)},B=(a,f,p,_)=>{if(a==null)s(f.el=l(f.children),p,_);else{const b=f.el=a.el;f.children!==a.children&&u(b,f.children)}},q=(a,f,p,_)=>{a==null?s(f.el=c(f.children||""),p,_):f.el=a.el},G=(a,f,p,_)=>{[a.el,a.anchor]=R(a.children,f,p,_,a.el,a.anchor)},g=({el:a,anchor:f},p,_)=>{let b;for(;a&&a!==f;)b=m(a),s(a,p,_),a=b;s(f,p,_)},y=({el:a,anchor:f})=>{let p;for(;a&&a!==f;)p=m(a),r(a),a=p;r(f)},M=(a,f,p,_,b,x,O,C,T)=>{f.type==="svg"?O="svg":f.type==="math"&&(O="mathml"),a==null?L(f,p,_,b,x,O,C,T):j(a,f,b,x,O,C,T)},L=(a,f,p,_,b,x,O,C)=>{let T,v;const{props:I,shapeFlag:$,transition:N,dirs:k}=a;if(T=a.el=i(a.type,x,I&&I.is,I),$&8?d(T,a.children):$&16&&A(a.children,T,null,_,b,qn(a,x),O,C),k&&Me(a,null,_,"created"),D(T,a,a.scopeId,O,_),I){for(const Q in I)Q!=="value"&&!bt(Q)&&o(T,Q,null,I[Q],x,a.children,_,b,He);"value"in I&&o(T,"value",null,I.value,x),(v=I.onVnodeBeforeMount)&&Ee(v,_,a)}k&&Me(a,null,_,"beforeMount");const z=Mo(b,N);z&&N.beforeEnter(T),s(T,f,p),((v=I&&I.onVnodeMounted)||z||k)&&pe(()=>{v&&Ee(v,_,a),z&&N.enter(T),k&&Me(a,null,_,"mounted")},b)},D=(a,f,p,_,b)=>{if(p&&w(a,p),_)for(let x=0;x<_.length;x++)w(a,_[x]);if(b){let x=b.subTree;if(f===x){const O=b.vnode;D(a,O,O.scopeId,O.slotScopeIds,b.parent)}}},A=(a,f,p,_,b,x,O,C,T=0)=>{for(let v=T;v{const C=f.el=a.el;let{patchFlag:T,dynamicChildren:v,dirs:I}=f;T|=a.patchFlag&16;const $=a.props||ee,N=f.props||ee;let k;if(p&&rt(p,!1),(k=N.onVnodeBeforeUpdate)&&Ee(k,p,f,a),I&&Me(f,a,p,"beforeUpdate"),p&&rt(p,!0),v?E(a.dynamicChildren,v,C,p,_,qn(f,b),x):O||F(a,f,C,null,p,_,qn(f,b),x,!1),T>0){if(T&16)V(C,f,$,N,p,_,b);else if(T&2&&$.class!==N.class&&o(C,"class",null,N.class,b),T&4&&o(C,"style",$.style,N.style,b),T&8){const z=f.dynamicProps;for(let Q=0;Q{k&&Ee(k,p,f,a),I&&Me(f,a,p,"updated")},_)},E=(a,f,p,_,b,x,O)=>{for(let C=0;C{if(p!==_){if(p!==ee)for(const C in p)!bt(C)&&!(C in _)&&o(a,C,p[C],null,O,f.children,b,x,He);for(const C in _){if(bt(C))continue;const T=_[C],v=p[C];T!==v&&C!=="value"&&o(a,C,v,T,O,f.children,b,x,He)}"value"in _&&o(a,"value",p.value,_.value,O)}},S=(a,f,p,_,b,x,O,C,T)=>{const v=f.el=a?a.el:l(""),I=f.anchor=a?a.anchor:l("");let{patchFlag:$,dynamicChildren:N,slotScopeIds:k}=f;k&&(C=C?C.concat(k):k),a==null?(s(v,p,_),s(I,p,_),A(f.children||[],p,I,b,x,O,C,T)):$>0&&$&64&&N&&a.dynamicChildren?(E(a.dynamicChildren,N,p,b,x,O,C),(f.key!=null||b&&f===b.subTree)&&Po(a,f,!0)):F(a,f,p,I,b,x,O,C,T)},W=(a,f,p,_,b,x,O,C,T)=>{f.slotScopeIds=C,a==null?f.shapeFlag&512?b.ctx.activate(f,p,_,O,T):oe(f,p,_,b,x,O,T):ce(a,f,T)},oe=(a,f,p,_,b,x,O)=>{const C=a.component=ic(a,_,b);if(In(a)&&(C.ctx.renderer=gt),lc(C),C.asyncDep){if(b&&b.registerDep(C,H),!a.el){const T=C.subTree=ue(ye);q(null,T,f,p)}}else H(C,a,f,p,b,x,O)},ce=(a,f,p)=>{const _=f.component=a.component;if(hl(a,f,p))if(_.asyncDep&&!_.asyncResolved){X(_,f,p);return}else _.next=f,il(_.update),_.effect.dirty=!0,_.update();else f.el=a.el,_.vnode=f},H=(a,f,p,_,b,x,O)=>{const C=()=>{if(a.isMounted){let{next:I,bu:$,u:N,parent:k,vnode:z}=a;{const mt=No(a);if(mt){I&&(I.el=z.el,X(a,I,O)),mt.asyncDep.then(()=>{a.isUnmounted||C()});return}}let Q=I,te;rt(a,!1),I?(I.el=z.el,X(a,I,O)):I=z,$&&Un($),(te=I.props&&I.props.onVnodeBeforeUpdate)&&Ee(te,k,I,z),rt(a,!0);const le=kn(a),Te=a.subTree;a.subTree=le,P(Te,le,h(Te.el),Wt(Te),a,b,x),I.el=le.el,Q===null&&pl(a,le.el),N&&pe(N,b),(te=I.props&&I.props.onVnodeUpdated)&&pe(()=>Ee(te,k,I,z),b)}else{let I;const{el:$,props:N}=f,{bm:k,m:z,parent:Q}=a,te=wt(f);if(rt(a,!1),k&&Un(k),!te&&(I=N&&N.onVnodeBeforeMount)&&Ee(I,Q,f),rt(a,!0),$&&Vn){const le=()=>{a.subTree=kn(a),Vn($,a.subTree,a,b,null)};te?f.type.__asyncLoader().then(()=>!a.isUnmounted&&le()):le()}else{const le=a.subTree=kn(a);P(null,le,p,_,a,b,x),f.el=le.el}if(z&&pe(z,b),!te&&(I=N&&N.onVnodeMounted)){const le=f;pe(()=>Ee(I,Q,le),b)}(f.shapeFlag&256||Q&&wt(Q.vnode)&&Q.vnode.shapeFlag&256)&&a.a&&pe(a.a,b),a.isMounted=!0,f=p=_=null}},T=a.effect=new Cs(C,xe,()=>Ms(v),a.scope),v=a.update=()=>{T.dirty&&T.run()};v.id=a.uid,rt(a,!0),v()},X=(a,f,p)=>{f.component=a;const _=a.vnode.props;a.vnode=f,a.next=null,kl(a,f.props,_,p),ql(a,f.children,p),tt(),Ys(a),nt()},F=(a,f,p,_,b,x,O,C,T=!1)=>{const v=a&&a.children,I=a?a.shapeFlag:0,$=f.children,{patchFlag:N,shapeFlag:k}=f;if(N>0){if(N&128){Kt(v,$,p,_,b,x,O,C,T);return}else if(N&256){Fe(v,$,p,_,b,x,O,C,T);return}}k&8?(I&16&&He(v,b,x),$!==v&&d(p,$)):I&16?k&16?Kt(v,$,p,_,b,x,O,C,T):He(v,b,x,!0):(I&8&&d(p,""),k&16&&A($,p,_,b,x,O,C,T))},Fe=(a,f,p,_,b,x,O,C,T)=>{a=a||yt,f=f||yt;const v=a.length,I=f.length,$=Math.min(v,I);let N;for(N=0;N<$;N++){const k=f[N]=T?qe(f[N]):Ae(f[N]);P(a[N],k,p,null,b,x,O,C,T)}v>I?He(a,b,x,!0,!1,$):A(f,p,_,b,x,O,C,T,$)},Kt=(a,f,p,_,b,x,O,C,T)=>{let v=0;const I=f.length;let $=a.length-1,N=I-1;for(;v<=$&&v<=N;){const k=a[v],z=f[v]=T?qe(f[v]):Ae(f[v]);if(ct(k,z))P(k,z,p,null,b,x,O,C,T);else break;v++}for(;v<=$&&v<=N;){const k=a[$],z=f[N]=T?qe(f[N]):Ae(f[N]);if(ct(k,z))P(k,z,p,null,b,x,O,C,T);else break;$--,N--}if(v>$){if(v<=N){const k=N+1,z=kN)for(;v<=$;)Le(a[v],b,x,!0),v++;else{const k=v,z=v,Q=new Map;for(v=z;v<=N;v++){const be=f[v]=T?qe(f[v]):Ae(f[v]);be.key!=null&&Q.set(be.key,v)}let te,le=0;const Te=N-z+1;let mt=!1,Ds=0;const St=new Array(Te);for(v=0;v=Te){Le(be,b,x,!0);continue}let Ie;if(be.key!=null)Ie=Q.get(be.key);else for(te=z;te<=N;te++)if(St[te-z]===0&&ct(be,f[te])){Ie=te;break}Ie===void 0?Le(be,b,x,!0):(St[Ie-z]=v+1,Ie>=Ds?Ds=Ie:mt=!0,P(be,f[Ie],p,null,b,x,O,C,T),le++)}const Vs=mt?Ql(St):yt;for(te=Vs.length-1,v=Te-1;v>=0;v--){const be=z+v,Ie=f[be],Us=be+1{const{el:x,type:O,transition:C,children:T,shapeFlag:v}=a;if(v&6){st(a.component.subTree,f,p,_);return}if(v&128){a.suspense.move(f,p,_);return}if(v&64){O.move(a,f,p,gt);return}if(O===ge){s(x,f,p);for(let $=0;$C.enter(x),b);else{const{leave:$,delayLeave:N,afterLeave:k}=C,z=()=>s(x,f,p),Q=()=>{$(x,()=>{z(),k&&k()})};N?N(x,z,Q):Q()}else s(x,f,p)},Le=(a,f,p,_=!1,b=!1)=>{const{type:x,props:O,ref:C,children:T,dynamicChildren:v,shapeFlag:I,patchFlag:$,dirs:N}=a;if(C!=null&&gn(C,null,p,a,!0),I&256){f.ctx.deactivate(a);return}const k=I&1&&N,z=!wt(a);let Q;if(z&&(Q=O&&O.onVnodeBeforeUnmount)&&Ee(Q,f,a),I&6)fi(a.component,p,_);else{if(I&128){a.suspense.unmount(p,_);return}k&&Me(a,null,f,"beforeUnmount"),I&64?a.type.remove(a,f,p,b,gt,_):v&&(x!==ge||$>0&&$&64)?He(v,f,p,!1,!0):(x===ge&&$&384||!b&&I&16)&&He(T,f,p),_&&$s(a)}(z&&(Q=O&&O.onVnodeUnmounted)||k)&&pe(()=>{Q&&Ee(Q,f,a),k&&Me(a,null,f,"unmounted")},p)},$s=a=>{const{type:f,el:p,anchor:_,transition:b}=a;if(f===ge){ui(p,_);return}if(f===Pt){y(a);return}const x=()=>{r(p),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:O,delayLeave:C}=b,T=()=>O(p,x);C?C(a.el,x,T):T()}else x()},ui=(a,f)=>{let p;for(;a!==f;)p=m(a),r(a),a=p;r(f)},fi=(a,f,p)=>{const{bum:_,scope:b,update:x,subTree:O,um:C}=a;_&&Un(_),b.stop(),x&&(x.active=!1,Le(O,a,f,p)),C&&pe(C,f),pe(()=>{a.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},He=(a,f,p,_=!1,b=!1,x=0)=>{for(let O=x;Oa.shapeFlag&6?Wt(a.component.subTree):a.shapeFlag&128?a.suspense.next():m(a.anchor||a.el);let jn=!1;const js=(a,f,p)=>{a==null?f._vnode&&Le(f._vnode,null,null,!0):P(f._vnode||null,a,f,null,null,null,p),jn||(jn=!0,Ys(),dn(),jn=!1),f._vnode=a},gt={p:P,um:Le,m:st,r:$s,mt:oe,mc:A,pc:F,pbc:E,n:Wt,o:e};let Dn,Vn;return t&&([Dn,Vn]=t(gt)),{render:js,hydrate:Dn,createApp:Vl(js,Dn)}}function qn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function rt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Mo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Po(e,t,n=!1){const s=e.children,r=t.children;if(U(s)&&U(r))for(let o=0;o>1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function No(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:No(t)}const Zl=e=>e.__isTeleport,ge=Symbol.for("v-fgt"),Ct=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Pt=Symbol.for("v-stc"),Nt=[];let Oe=null;function Fo(e=!1){Nt.push(Oe=e?null:[])}function ec(){Nt.pop(),Oe=Nt[Nt.length-1]||null}let Vt=1;function cr(e){Vt+=e}function Ho(e){return e.dynamicChildren=Vt>0?Oe||yt:null,ec(),Vt>0&&Oe&&Oe.push(e),e}function Ga(e,t,n,s,r,o){return Ho(Do(e,t,n,s,r,o,!0))}function $o(e,t,n,s,r){return Ho(ue(e,t,n,s,r,!0))}function mn(e){return e?e.__v_isVNode===!0:!1}function ct(e,t){return e.type===t.type&&e.key===t.key}const jo=({key:e})=>e??null,ln=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||de(e)||K(e)?{i:ie,r:e,k:t,f:!!n}:e:null);function Do(e,t=null,n=null,s=0,r=null,o=e===ge?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&jo(t),ref:t&&ln(t),scopeId:Rn,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:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:ie};return l?(Hs(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),Vt>0&&!i&&Oe&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Oe.push(c),c}const ue=tc;function tc(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===ao)&&(e=ye),mn(e)){const l=et(e,t,!0);return n&&Hs(l,n),Vt>0&&!o&&Oe&&(l.shapeFlag&6?Oe[Oe.indexOf(e)]=l:Oe.push(l)),l.patchFlag|=-2,l}if(fc(e)&&(e=e.__vccOpts),t){t=nc(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=Es(l)),Z(c)&&(Zr(c)&&!U(c)&&(c=re({},c)),t.style=ws(c))}const i=se(e)?1:gl(e)?128:Zl(e)?64:Z(e)?4:K(e)?2:0;return Do(e,t,n,s,r,i,o,!0)}function nc(e){return e?Zr(e)||To(e)?re({},e):e:null}function et(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:c}=e,u=t?sc(r||{},t):r,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&jo(u),ref:t&&t.ref?n&&o?U(o)?o.concat(ln(t)):[o,ln(t)]:ln(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ge?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&et(e.ssContent),ssFallback:e.ssFallback&&et(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&(d.transition=c.clone(d)),d}function Vo(e=" ",t=0){return ue(Ct,null,e,t)}function za(e,t){const n=ue(Pt,null,e);return n.staticCount=t,n}function Xa(e="",t=!1){return t?(Fo(),$o(ye,null,e)):ue(ye,null,e)}function Ae(e){return e==null||typeof e=="boolean"?ue(ye):U(e)?ue(ge,null,e.slice()):typeof e=="object"?qe(e):ue(Ct,null,String(e))}function qe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:et(e)}function Hs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(U(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Hs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!To(t)?t._ctx=ie:r===3&&ie&&(ie.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:ie},n=32):(t=String(t),s&64?(n=16,t=[Vo(t)]):n=8);e.children=t,e.shapeFlag|=n}function sc(...e){const t={};for(let n=0;nae||ie;let yn,ps;{const e=jr(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};yn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),ps=t("__VUE_SSR_SETTERS__",n=>Fn=n)}const kt=e=>{const t=ae;return yn(e),e.scope.on(),()=>{e.scope.off(),yn(t)}},ar=()=>{ae&&ae.scope.off(),yn(null)};function Uo(e){return e.vnode.shapeFlag&4}let Fn=!1;function lc(e,t=!1){t&&ps(t);const{props:n,children:s}=e.vnode,r=Uo(e);Bl(e,n,r,t),Wl(e,s);const o=r?cc(e,t):void 0;return t&&ps(!1),o}function cc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ml);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?ko(e):null,o=kt(e);tt();const i=Ye(s,e,0,[e.props,r]);if(nt(),o(),Nr(i)){if(i.then(ar,ar),t)return i.then(l=>{ur(e,l,t)}).catch(l=>{Tn(l,e,0)});e.asyncDep=i}else ur(e,i,t)}else Bo(e,t)}function ur(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=ro(t)),Bo(e,n)}let fr;function Bo(e,t,n){const s=e.type;if(!e.render){if(!t&&fr&&!s.render){const r=s.template||Ns(e).template;if(r){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,u=re(re({isCustomElement:o,delimiters:l},i),c);s.render=fr(r,u)}}e.render=s.render||xe}{const r=kt(e);tt();try{Nl(e)}finally{nt(),r()}}}const ac={get(e,t){return _e(e,"get",""),e[t]}};function ko(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,ac),slots:e.slots,emit:e.emit,expose:t}}function Hn(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(ro(on(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 uc(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function fc(e){return K(e)&&"__vccOpts"in e}const ne=(e,t)=>Xi(e,t,Fn);function gs(e,t,n){const s=arguments.length;return s===2?Z(t)&&!U(t)?mn(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&mn(n)&&(n=[n]),ue(e,t,n))}const dc="3.4.27";/** +* @vue/runtime-dom v3.4.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const hc="http://www.w3.org/2000/svg",pc="http://www.w3.org/1998/Math/MathML",Ge=typeof document<"u"?document:null,dr=Ge&&Ge.createElement("template"),gc={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==="svg"?Ge.createElementNS(hc,e):t==="mathml"?Ge.createElementNS(pc,e):Ge.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ge.createTextNode(e),createComment:e=>Ge.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ge.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{dr.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=dr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Be="transition",Tt="animation",Ut=Symbol("_vtc"),Ko=(e,{slots:t})=>gs(wl,mc(e),t);Ko.displayName="Transition";const Wo={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};Ko.props=re({},go,Wo);const ot=(e,t=[])=>{U(e)?e.forEach(n=>n(...t)):e&&e(...t)},hr=e=>e?U(e)?e.some(t=>t.length>1):e.length>1:!1;function mc(e){const t={};for(const S in e)S in Wo||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:u=i,appearToClass:d=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,R=yc(r),P=R&&R[0],B=R&&R[1],{onBeforeEnter:q,onEnter:G,onEnterCancelled:g,onLeave:y,onLeaveCancelled:M,onBeforeAppear:L=q,onAppear:D=G,onAppearCancelled:A=g}=t,j=(S,W,oe)=>{it(S,W?d:l),it(S,W?u:i),oe&&oe()},E=(S,W)=>{S._isLeaving=!1,it(S,h),it(S,w),it(S,m),W&&W()},V=S=>(W,oe)=>{const ce=S?D:G,H=()=>j(W,S,oe);ot(ce,[W,H]),pr(()=>{it(W,S?c:o),ke(W,S?d:l),hr(ce)||gr(W,s,P,H)})};return re(t,{onBeforeEnter(S){ot(q,[S]),ke(S,o),ke(S,i)},onBeforeAppear(S){ot(L,[S]),ke(S,c),ke(S,u)},onEnter:V(!1),onAppear:V(!0),onLeave(S,W){S._isLeaving=!0;const oe=()=>E(S,W);ke(S,h),ke(S,m),vc(),pr(()=>{S._isLeaving&&(it(S,h),ke(S,w),hr(y)||gr(S,s,B,oe))}),ot(y,[S,oe])},onEnterCancelled(S){j(S,!1),ot(g,[S])},onAppearCancelled(S){j(S,!0),ot(A,[S])},onLeaveCancelled(S){E(S),ot(M,[S])}})}function yc(e){if(e==null)return null;if(Z(e))return[Gn(e.enter),Gn(e.leave)];{const t=Gn(e);return[t,t]}}function Gn(e){return _i(e)}function ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Ut]||(e[Ut]=new Set)).add(t)}function it(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Ut];n&&(n.delete(t),n.size||(e[Ut]=void 0))}function pr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let _c=0;function gr(e,t,n,s){const r=e._endId=++_c,o=()=>{r===e._endId&&s()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=bc(e,t);if(!i)return s();const u=i+"end";let d=0;const h=()=>{e.removeEventListener(u,m),o()},m=w=>{w.target===e&&++d>=c&&h()};setTimeout(()=>{d(n[R]||"").split(", "),r=s(`${Be}Delay`),o=s(`${Be}Duration`),i=mr(r,o),l=s(`${Tt}Delay`),c=s(`${Tt}Duration`),u=mr(l,c);let d=null,h=0,m=0;t===Be?i>0&&(d=Be,h=i,m=o.length):t===Tt?u>0&&(d=Tt,h=u,m=c.length):(h=Math.max(i,u),d=h>0?i>u?Be:Tt:null,m=d?d===Be?o.length:c.length:0);const w=d===Be&&/\b(transform|all)(,|$)/.test(s(`${Be}Property`).toString());return{type:d,timeout:h,propCount:m,hasTransform:w}}function mr(e,t){for(;e.lengthyr(n)+yr(e[s])))}function yr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function vc(){return document.body.offsetHeight}function wc(e,t,n){const s=e[Ut];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const _n=Symbol("_vod"),qo=Symbol("_vsh"),Ya={beforeMount(e,{value:t},{transition:n}){e[_n]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):At(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),At(e,!0),s.enter(e)):s.leave(e,()=>{At(e,!1)}):At(e,t))},beforeUnmount(e,{value:t}){At(e,t)}};function At(e,t){e.style.display=t?e[_n]:"none",e[qo]=!t}const Ec=Symbol(""),Cc=/(^|;)\s*display\s*:/;function xc(e,t,n){const s=e.style,r=se(n);let o=!1;if(n&&!r){if(t)if(se(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&cn(s,l,"")}else for(const i in t)n[i]==null&&cn(s,i,"");for(const i in n)i==="display"&&(o=!0),cn(s,i,n[i])}else if(r){if(t!==n){const i=s[Ec];i&&(n+=";"+i),s.cssText=n,o=Cc.test(n)}}else t&&e.removeAttribute("style");_n in e&&(e[_n]=o?s.display:"",e[qo]&&(s.display="none"))}const _r=/\s*!important$/;function cn(e,t,n){if(U(n))n.forEach(s=>cn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Sc(e,t);_r.test(n)?e.setProperty(pt(s),n.replace(_r,""),"important"):e[s]=n}}const br=["Webkit","Moz","ms"],zn={};function Sc(e,t){const n=zn[t];if(n)return n;let s=Ne(t);if(s!=="filter"&&s in e)return zn[t]=s;s=En(s);for(let r=0;rXn||(Mc.then(()=>Xn=0),Xn=Date.now());function Nc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Se(Fc(s,n.value),t,5,[s])};return n.value=e,n.attached=Pc(),n}function Fc(e,t){if(U(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 Cr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Hc=(e,t,n,s,r,o,i,l,c)=>{const u=r==="svg";t==="class"?wc(e,s,u):t==="style"?xc(e,n,s):Bt(t)?_s(t)||Lc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):$c(e,t,s,u))?Ac(e,t,s,o,i,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Tc(e,t,s,u))};function $c(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Cr(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Cr(t)&&se(n)?!1:t in e}const jc=["ctrl","shift","alt","meta"],Dc={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)=>jc.some(n=>e[`${n}Key`]&&!t.includes(n))},Ja=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const o=pt(r.key);if(t.some(i=>i===o||Vc[i]===o))return e(r)})},Uc=re({patchProp:Hc},gc);let Yn,xr=!1;function Bc(){return Yn=xr?Yn:Yl(Uc),xr=!0,Yn}const Za=(...e)=>{const t=Bc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Kc(s);if(r)return n(r,!0,kc(r))},t};function kc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Kc(e){return se(e)?document.querySelector(e):e}const eu=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n};function $n(e){return Ur()?(Ai(e),!0):!1}function Je(e){return typeof e=="function"?e():so(e)}const Go=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Wc=Object.prototype.toString,qc=e=>Wc.call(e)==="[object Object]",Ft=()=>{},ms=Gc();function Gc(){var e,t;return Go&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function zc(e,t){function n(...s){return new Promise((r,o)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(o)})}return n}const zo=e=>e();function Xc(e=zo){const t=me(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...o)=>{t.value&&e(...o)};return{isActive:Sn(t),pause:n,resume:s,eventFilter:r}}function Yc(e){return Nn()}function Xo(...e){if(e.length!==1)return nl(...e);const t=e[0];return typeof t=="function"?Sn(Zi(()=>({get:t,set:Ft}))):me(t)}function Jc(e,t,n={}){const{eventFilter:s=zo,...r}=n;return je(e,zc(s,t),r)}function Qc(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=Xc(s);return{stop:Jc(e,t,{...r,eventFilter:o}),pause:i,resume:l,isActive:c}}function Yo(e,t=!0,n){Yc()?xt(e,n):t?e():An(e)}function ze(e){var t;const n=Je(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Re=Go?window:void 0;function Qe(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=Re):[t,n,s,r]=e,!t)return Ft;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const o=[],i=()=>{o.forEach(d=>d()),o.length=0},l=(d,h,m,w)=>(d.addEventListener(h,m,w),()=>d.removeEventListener(h,m,w)),c=je(()=>[ze(t),Je(r)],([d,h])=>{if(i(),!d)return;const m=qc(h)?{...h}:h;o.push(...n.flatMap(w=>s.map(R=>l(d,w,R,m))))},{immediate:!0,flush:"post"}),u=()=>{c(),i()};return $n(u),u}let Sr=!1;function tu(e,t,n={}){const{window:s=Re,ignore:r=[],capture:o=!0,detectIframe:i=!1}=n;if(!s)return Ft;ms&&!Sr&&(Sr=!0,Array.from(s.document.body.children).forEach(m=>m.addEventListener("click",Ft)),s.document.documentElement.addEventListener("click",Ft));let l=!0;const c=m=>r.some(w=>{if(typeof w=="string")return Array.from(s.document.querySelectorAll(w)).some(R=>R===m.target||m.composedPath().includes(R));{const R=ze(w);return R&&(m.target===R||m.composedPath().includes(R))}}),d=[Qe(s,"click",m=>{const w=ze(e);if(!(!w||w===m.target||m.composedPath().includes(w))){if(m.detail===0&&(l=!c(m)),!l){l=!0;return}t(m)}},{passive:!0,capture:o}),Qe(s,"pointerdown",m=>{const w=ze(e);l=!c(m)&&!!(w&&!m.composedPath().includes(w))},{passive:!0}),i&&Qe(s,"blur",m=>{setTimeout(()=>{var w;const R=ze(e);((w=s.document.activeElement)==null?void 0:w.tagName)==="IFRAME"&&!(R!=null&&R.contains(s.document.activeElement))&&t(m)},0)})].filter(Boolean);return()=>d.forEach(m=>m())}function Zc(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function nu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Re,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=s,c=Zc(t);return Qe(r,o,d=>{d.repeat&&Je(l)||c(d)&&n(d)},i)}function ea(){const e=me(!1),t=Nn();return t&&xt(()=>{e.value=!0},t),e}function Jo(e){const t=ea();return ne(()=>(t.value,!!e()))}function ta(e,t={}){const{window:n=Re}=t,s=Jo(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const o=me(!1),i=u=>{o.value=u.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",i):r.removeListener(i))},c=ho(()=>{s.value&&(l(),r=n.matchMedia(Je(e)),"addEventListener"in r?r.addEventListener("change",i):r.addListener(i),o.value=r.matches)});return $n(()=>{c(),l(),r=void 0}),o}const tn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},nn="__vueuse_ssr_handlers__",na=sa();function sa(){return nn in tn||(tn[nn]=tn[nn]||{}),tn[nn]}function Qo(e,t){return na[e]||t}function ra(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const oa={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Tr="vueuse-storage";function Zo(e,t,n,s={}){var r;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:d,window:h=Re,eventFilter:m,onError:w=E=>{console.error(E)},initOnMounted:R}=s,P=(d?to:me)(typeof t=="function"?t():t);if(!n)try{n=Qo("getDefaultStorage",()=>{var E;return(E=Re)==null?void 0:E.localStorage})()}catch(E){w(E)}if(!n)return P;const B=Je(t),q=ra(B),G=(r=s.serializer)!=null?r:oa[q],{pause:g,resume:y}=Qc(P,()=>L(P.value),{flush:o,deep:i,eventFilter:m});h&&l&&Yo(()=>{Qe(h,"storage",A),Qe(h,Tr,j),R&&A()}),R||A();function M(E,V){h&&h.dispatchEvent(new CustomEvent(Tr,{detail:{key:e,oldValue:E,newValue:V,storageArea:n}}))}function L(E){try{const V=n.getItem(e);if(E==null)M(V,null),n.removeItem(e);else{const S=G.write(E);V!==S&&(n.setItem(e,S),M(V,S))}}catch(V){w(V)}}function D(E){const V=E?E.newValue:n.getItem(e);if(V==null)return c&&B!=null&&n.setItem(e,G.write(B)),B;if(!E&&u){const S=G.read(V);return typeof u=="function"?u(S,B):q==="object"&&!Array.isArray(S)?{...B,...S}:S}else return typeof V!="string"?V:G.read(V)}function A(E){if(!(E&&E.storageArea!==n)){if(E&&E.key==null){P.value=B;return}if(!(E&&E.key!==e)){g();try{(E==null?void 0:E.newValue)!==G.write(P.value)&&(P.value=D(E))}catch(V){w(V)}finally{E?An(y):y()}}}}function j(E){A(E.detail)}return P}function ei(e){return ta("(prefers-color-scheme: dark)",e)}function ia(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=Re,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:d=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=ei({window:r}),w=ne(()=>m.value?"dark":"light"),R=c||(i==null?Xo(s):Zo(i,s,o,{window:r,listenToStorageChanges:l})),P=ne(()=>R.value==="auto"?w.value:R.value),B=Qo("updateHTMLAttrs",(y,M,L)=>{const D=typeof y=="string"?r==null?void 0:r.document.querySelector(y):ze(y);if(!D)return;let A;if(d&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),r.document.head.appendChild(A)),M==="class"){const j=L.split(/\s/g);Object.values(h).flatMap(E=>(E||"").split(/\s/g)).filter(Boolean).forEach(E=>{j.includes(E)?D.classList.add(E):D.classList.remove(E)})}else D.setAttribute(M,L);d&&(r.getComputedStyle(A).opacity,document.head.removeChild(A))});function q(y){var M;B(t,n,(M=h[y])!=null?M:y)}function G(y){e.onChanged?e.onChanged(y,q):q(y)}je(P,G,{flush:"post",immediate:!0}),Yo(()=>G(P.value));const g=ne({get(){return u?R.value:P.value},set(y){R.value=y}});try{return Object.assign(g,{store:R,system:w,state:P})}catch{return g}}function la(e={}){const{valueDark:t="dark",valueLight:n="",window:s=Re}=e,r=ia({...e,onChanged:(l,c)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),o=ne(()=>r.system?r.system.value:ei({window:s}).value?"dark":"light");return ne({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?r.value="auto":r.value=c}})}function su(e,t,n={}){const{window:s=Re,...r}=n;let o;const i=Jo(()=>s&&"ResizeObserver"in s),l=()=>{o&&(o.disconnect(),o=void 0)},c=ne(()=>Array.isArray(e)?e.map(h=>ze(h)):[ze(e)]),u=je(c,h=>{if(l(),i.value&&s){o=new ResizeObserver(t);for(const m of h)m&&o.observe(m,r)}},{immediate:!0,flush:"post"}),d=()=>{l(),u()};return $n(d),{isSupported:i,stop:d}}function Jn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function ru(e,t,n={}){const{window:s=Re}=n;return Zo(e,t,s==null?void 0:s.localStorage,n)}function ti(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const Qn=new WeakMap;function ou(e,t=!1){const n=me(t);let s=null,r="";je(Xo(e),l=>{const c=Jn(Je(l));if(c){const u=c;if(Qn.get(u)||Qn.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(r=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const o=()=>{const l=Jn(Je(e));!l||n.value||(ms&&(s=Qe(l,"touchmove",c=>{ca(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=Jn(Je(e));!l||!n.value||(ms&&(s==null||s()),l.style.overflow=r,Qn.delete(l),n.value=!1)};return $n(i),ne({get(){return n.value},set(l){l?o():i()}})}function iu(e={}){const{window:t=Re,behavior:n="auto"}=e;if(!t)return{x:me(0),y:me(0)};const s=me(t.scrollX),r=me(t.scrollY),o=ne({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),i=ne({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Qe(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}const aa=window.__VP_SITE_DATA__;var Zn={BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},ua={};const ni=/^(?:[a-z]+:|\/\/)/i,fa="vitepress-theme-appearance",si=/#.*$/,da=/(index)?\.(md|html)$/,Ce=typeof document<"u",ri={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function ha(e,t,n=!1){if(t===void 0)return!1;if(e=Ar(`/${e}`),n)return new RegExp(t).test(e);if(Ar(t)!==e)return!1;const s=t.match(si);return s?(Ce?location.hash:"")===s[0]:!0}function Ar(e){return decodeURI(e).replace(si,"").replace(da,"")}function pa(e){return ni.test(e)}function ga(e,t){var s,r,o,i,l,c,u;const n=Object.keys(e.locales).find(d=>d!=="root"&&!pa(d)&&ha(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:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:ii(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function oi(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=ma(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function ma(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ya(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([o,i])=>o===n&&i[r[0]]===r[1])}function ii(e,t){return[...e.filter(n=>!ya(t,n)),...t]}const _a=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,ba=/^[a-z]:/i;function Or(e){const t=ba.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(_a,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const es=typeof process=="object"&&ua.VITE_EXTRA_EXTENSIONS||(Zn==null?void 0:Zn.VITE_EXTRA_EXTENSIONS)||"",va=new Set(("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(es&&typeof es=="string"?","+es:"")).split(","));function wa(e){const t=e.split(".").pop();return t==null||!va.has(t.toLowerCase())}const Ea=Symbol(),dt=to(aa);function lu(e){const t=ne(()=>ga(dt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?me(!0):n?la({storageKey:fa,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):me(!1);return{site:t,theme:ne(()=>t.value.themeConfig),page:ne(()=>e.data),frontmatter:ne(()=>e.data.frontmatter),params:ne(()=>e.data.params),lang:ne(()=>t.value.lang),dir:ne(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ne(()=>t.value.localeIndex||"root"),title:ne(()=>oi(t.value,e.data)),description:ne(()=>e.data.description||t.value.description),isDark:s}}function Ca(){const e=Et(Ea);if(!e)throw new Error("vitepress data not properly injected in app");return e}function xa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Rr(e){return ni.test(e)||!e.startsWith("/")?e:xa(dt.value.base,e)}function Sa(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ce){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 an=[];function cu(e){an.push(e),Pn(()=>{an=an.filter(t=>t!==e)})}function Ta(){let e=dt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Lr(e,n);else if(Array.isArray(e))for(const s of e){const r=Lr(s,n);if(r){t=r;break}}return t}function Lr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Aa=Symbol(),li="http://a.com",Oa=()=>({path:"/",component:null,data:ri});function au(e,t){const n=xn(Oa()),s={route:n,go:r};async function r(l=Ce?location.href:"/"){var c,u;l=bn(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(Mr(l),await i(l),await((u=s.onAfterRouteChanged)==null?void 0:u.call(s,l)))}let o=null;async function i(l,c=0,u=!1){var m;if(await((m=s.onBeforePageLoad)==null?void 0:m.call(s,l))===!1)return;const d=new URL(l,li),h=o=d.pathname;try{let w=await e(h);if(!w)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:R,__pageData:P}=w;if(!R)throw new Error(`Invalid route component: ${R}`);n.path=Ce?h:Rr(h),n.component=on(R),n.data=on(P),Ce&&An(()=>{let B=dt.value.base+P.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!dt.value.cleanUrls&&!B.endsWith("/")&&(B+=".html"),B!==d.pathname&&(d.pathname=B,l=B+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!c){let q=null;try{q=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(G){console.warn(G)}if(q){Ir(q,d.hash);return}}window.scrollTo(0,c)})}}catch(w){if(!/fetch|Page not found/.test(w.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(w),!u)try{const R=await fetch(dt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await R.json(),await i(l,c,!0);return}catch{}o===h&&(o=null,n.path=Ce?h:Rr(h),n.component=t?on(t):null,n.data=ri)}}return Ce&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const u=l.target.closest("a");if(u&&!u.closest(".vp-raw")&&(u instanceof SVGElement||!u.download)){const{target:d}=u,{href:h,origin:m,pathname:w,hash:R,search:P}=new URL(u.href instanceof SVGAnimatedString?u.href.animVal:u.href,u.baseURI),B=window.location;!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!d&&m===B.origin&&wa(w)&&(l.preventDefault(),w===B.pathname&&P===B.search?(R!==B.hash&&(history.pushState(null,"",R),window.dispatchEvent(new Event("hashchange"))),R?Ir(u,R,u.classList.contains("header-anchor")):(Mr(h),window.scrollTo(0,0))):r(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;await i(bn(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Ra(){const e=Et(Aa);if(!e)throw new Error("useRouter() is called without provider.");return e}function ci(){return Ra().route}function Ir(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 r=function(){!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})};const o=parseInt(window.getComputedStyle(s).paddingTop,10),i=window.scrollY+s.getBoundingClientRect().top-Ta()+o;requestAnimationFrame(r)}}function Mr(e){Ce&&bn(e)!==bn(location.href)&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",e))}function bn(e){const t=new URL(e,li);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),dt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const ts=()=>an.forEach(e=>e()),uu=_o({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=ci(),{site:n}=Ca();return()=>gs(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?gs(t.component,{onVnodeMounted:ts,onVnodeUpdated:ts,onVnodeUnmounted:ts}):"404 Page Not Found"])}}),fu=_o({setup(e,{slots:t}){const n=me(!1);return xt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function du(){Ce&&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 o=s.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(u=>u.classList.contains("active"));if(!i)return;const l=o.children[r];if(!l||i===l)return;i.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 hu(){if(Ce){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,o=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(d=>d.remove());let u=c.textContent||"";i&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),La(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const d=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,d)})}})}}async function La(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 pu(e,t){let n=!0,s=[];const r=o=>{if(n){n=!1,o.forEach(l=>{const c=ns(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const i=o.map(ns);s.forEach((l,c)=>{const u=i.findIndex(d=>d==null?void 0:d.isEqualNode(l??null));u!==-1?delete i[u]:(l==null||l.remove(),delete s[c])}),i.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...i].filter(Boolean)};ho(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],u=oi(i,o);u!==document.title&&(document.title=u);const d=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==d&&h.setAttribute("content",d):ns(["meta",{name:"description",content:d}]),r(ii(i.head,Ma(c)))})}function ns([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Ia(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Ma(e){return e.filter(t=>!Ia(t))}const ss=new Set,ai=()=>document.createElement("link"),Pa=e=>{const t=ai();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Na=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let sn;const Fa=Ce&&(sn=ai())&&sn.relList&&sn.relList.supports&&sn.relList.supports("prefetch")?Pa:Na;function gu(){if(!Ce||!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(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!ss.has(c)){ss.add(c);const u=Sa(c);u&&Fa(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):ss.add(l))})})};xt(s);const r=ci();je(()=>r.path,s),Pn(()=>{n&&n.disconnect()})}export{Vo as $,Ka as A,Va as B,Xa as C,qc as D,su as E,ge as F,Ca as G,pa as H,wa as I,Rr as J,ha as K,Ce as L,ta as M,ho as N,Pn as O,Ua as P,Ta as Q,Da as R,ka as S,Ko as T,Ha as U,to as V,cu as W,$a as X,ja as Y,ni as Z,eu as _,Fo as a,ci as a0,qa as a1,sc as a2,tu as a3,nu as a4,iu as a5,za as a6,Sn as a7,ou as a8,Wa as a9,Qa as aa,Ja as ab,ru as ac,Je as ad,pu as ae,Aa as af,lu as ag,Ea as ah,uu as ai,fu as aj,dt as ak,Za as al,au as am,Sa as an,gu as ao,hu as ap,du as aq,gs as ar,$o as b,ne as c,_o as d,Ba as e,Do as f,Nn as g,so as h,Et as i,ws as j,Go as k,Ga as l,ue as m,Es as n,vo as o,je as p,Ul as q,me as r,xn as s,nl as t,Qe as u,Ya as v,ul as w,xt as x,An as y,Al as z}; diff --git a/assets/chunks/theme.B9SrN7Nq.js b/assets/chunks/theme.B9SrN7Nq.js new file mode 100644 index 0000000..a9415ae --- /dev/null +++ b/assets/chunks/theme.B9SrN7Nq.js @@ -0,0 +1 @@ +import{r as S,g as Ge,i as Z,c as w,d as $,o as je,u as ke,t as Ee,a,b as P,w as h,e as wt,v as Pt,f as u,n as B,h as l,j as ae,T as fe,k as St,l as c,m,F as H,p as G,q as re,s as We,x as X,y as pe,z as Ke,A as v,B as Y,C as b,D as Vt,E as Lt,G as Ve,H as Mt,I as Ct,J as Le,K as te,L as ne,M as ye,N as _e,O as Me,P as Ce,Q as Tt,R as Q,S as D,U as I,_ as k,V as qe,W as me,X as j,Y as W,Z as Xe,$ as x,a0 as le,a1 as Ye,a2 as de,a3 as Nt,a4 as It,a5 as Je,a6 as Bt,a7 as Ht,a8 as Ze,a9 as At,aa as zt,ab as Qe,ac as Et,ad as Dt}from"./framework.CtqZpALn.js";const et=Symbol("scrollbarContextKey"),se=4,Ot={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"}},xt=({move:s,size:e,bar:t})=>({[t.size]:e,transform:`translate${t.axis}(${s}%)`});function De(s,e="px"){if(!s)return"";if(typeof s=="number"||Ft(s))return`${s}${e}`;if(typeof s=="string")return s}const Ft=s=>typeof s!="string"?!1:!Number.isNaN(Number(s));class Rt extends Error{constructor(e){super(e),this.name="ElementPlusError"}}function Ut(s,e){throw new Rt(`[${s}] ${e}`)}const Gt=Symbol(""),Oe=S();function jt(s,e=void 0){const t=Ge()?Z(Gt,Oe):Oe;return w(()=>{var n;return((n=t.value)==null?void 0:n[s])??e})}const Wt="el",Kt="is-",ee=(s,e,t,n,o)=>{let r=`${s}-${e}`;return t&&(r+=`-${t}`),n&&(r+=`__${n}`),o&&(r+=`--${o}`),r},tt=s=>{const e=jt("namespace",Wt);return{namespace:e,b:(g="")=>ee(e.value,s,g,"",""),e:g=>g?ee(e.value,s,"",g,""):"",m:g=>g?ee(e.value,s,"","",g):"",be:(g,V)=>g&&V?ee(e.value,s,g,V,""):"",em:(g,V)=>g&&V?ee(e.value,s,"",g,V):"",bm:(g,V)=>g&&V?ee(e.value,s,g,"",V):"",bem:(g,V,L)=>g&&V&&L?ee(e.value,s,g,V,L):"",is:(g,...V)=>{const L=V.length>=1?V[0]:!0;return g&&L?`${Kt}${g}`:""},cssVar:g=>{const V={};for(const L in g)g[L]&&(V[`--${e.value}-${L}`]=g[L]);return V},cssVarName:g=>`--${e.value}-${g}`,cssVarBlock:g=>{const V={};for(const L in g)g[L]&&(V[`--${e.value}-${s}-${L}`]=g[L]);return V},cssVarBlockName:g=>`--${e.value}-${s}-${g}`}},qt={vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean},Xt="Thumb",xe=$({__name:"thumb",props:qt,setup(s){const e=s,t=Z(et),n=tt("scrollbar");t||Ut(Xt,"can not inject scrollbar context");const o=S(),r=S(),i=S({}),d=S(!1);let p=!1,_=!1,y=St?document.onselectstart:null;const f=w(()=>Ot[e.vertical?"vertical":"horizontal"]),N=w(()=>xt({size:e.size,move:e.move,bar:f.value})),C=w(()=>o.value[f.value.offset]**2/t.wrapElement[f.value.scrollSize]/e.ratio/r.value[f.value.offset]),g=E=>{var M;if(E.stopPropagation(),E.ctrlKey||[1,2].includes(E.button))return;(M=window.getSelection())==null||M.removeAllRanges(),L(E);const O=E.currentTarget;O&&(i.value[f.value.axis]=O[f.value.offset]-(E[f.value.client]-O.getBoundingClientRect()[f.value.direction]))},V=E=>{if(!r.value||!o.value||!t.wrapElement)return;const O=Math.abs(E.target.getBoundingClientRect()[f.value.direction]-E[f.value.client]),M=r.value[f.value.offset]/2,R=(O-M)*100*C.value/o.value[f.value.offset];t.wrapElement[f.value.scroll]=R*t.wrapElement[f.value.scrollSize]/100},L=E=>{E.stopImmediatePropagation(),p=!0,document.addEventListener("mousemove",z),document.addEventListener("mouseup",A),y=document.onselectstart,document.onselectstart=()=>!1},z=E=>{if(!o.value||!r.value||p===!1)return;const O=i.value[f.value.axis];if(!O)return;const M=(o.value.getBoundingClientRect()[f.value.direction]-E[f.value.client])*-1,R=r.value[f.value.offset]-O,oe=(M-R)*100*C.value/o.value[f.value.offset];t.wrapElement[f.value.scroll]=oe*t.wrapElement[f.value.scrollSize]/100},A=()=>{p=!1,i.value[f.value.axis]=0,document.removeEventListener("mousemove",z),document.removeEventListener("mouseup",A),J(),_&&(d.value=!1)},F=()=>{_=!1,d.value=!!e.size},U=()=>{_=!0,d.value=p};je(()=>{J(),document.removeEventListener("mouseup",A)});const J=()=>{document.onselectstart!==y&&(document.onselectstart=y)};return ke(Ee(t,"scrollbarElement"),"mousemove",F),ke(Ee(t,"scrollbarElement"),"mouseleave",U),(E,O)=>(a(),P(fe,{name:l(n).b("fade")},{default:h(()=>[wt(u("div",{ref_key:"instance",ref:o,class:B([l(n).e("bar"),l(n).is(f.value.key)]),onMousedown:V},[u("div",{ref_key:"thumb",ref:r,class:B(l(n).e("thumb")),style:ae(N.value),onMousedown:g},null,38)],34),[[Pt,E.always||d.value]])]),_:1},8,["name"]))}}),Yt={always:{type:Boolean,default:!0},width:String,height:String,ratioX:{type:Number,default:1},ratioY:{type:Number,default:1}},Jt=$({__name:"bar",props:Yt,setup(s,{expose:e}){const t=s,n=S(0),o=S(0);return e({handleScroll:i=>{if(i){const d=i.offsetHeight-se,p=i.offsetWidth-se;o.value=i.scrollTop*100/d*t.ratioY,n.value=i.scrollLeft*100/p*t.ratioX}}}),(i,d)=>(a(),c(H,null,[m(xe,{move:n.value,ratio:i.ratioX,size:i.width,always:i.always},null,8,["move","ratio","size","always"]),m(xe,{move:o.value,ratio:i.ratioY,size:i.height,vertical:"",always:i.always},null,8,["move","ratio","size","always"])],64))}}),Zt={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}},Qt={scroll:({scrollTop:s,scrollLeft:e})=>[s,e].every(t=>typeof t=="number")},es={name:"ElScrollbar"},ts=$({...es,props:Zt,emits:Qt,setup(s,{expose:e,emit:t}){const n=s,o=t,r=tt("scrollbar");let i,d;const p=S(),_=S(),y=S(),f=S("0"),N=S("0"),C=S(),g=S(1),V=S(1),L=w(()=>{const M={};return n.height&&(M.height=De(n.height)),n.maxHeight&&(M.maxHeight=De(n.maxHeight)),[n.wrapStyle,M]}),z=w(()=>[n.wrapClass,r.e("wrap"),{[r.em("wrap","hidden-default")]:!n.native}]),A=w(()=>[r.e("view"),n.viewClass]),F=()=>{var M;_.value&&((M=C.value)==null||M.handleScroll(_.value),o("scroll",{scrollTop:_.value.scrollTop,scrollLeft:_.value.scrollLeft}))};function U(M,R){Vt(M)?_.value.scrollTo(M):typeof M=="number"&&typeof R=="number"&&_.value.scrollTo(M,R)}const J=M=>{typeof M=="number"&&(_.value.scrollTop=M)},E=M=>{typeof M=="number"&&(_.value.scrollLeft=M)},O=()=>{if(!_.value)return;const M=_.value.offsetHeight-se,R=_.value.offsetWidth-se,oe=M**2/_.value.scrollHeight,be=R**2/_.value.scrollWidth,ce=Math.max(oe,n.minSize),ue=Math.max(be,n.minSize);g.value=oe/(M-oe)/(ce/(M-ce)),V.value=be/(R-be)/(ue/(R-ue)),N.value=ce+sen.noresize,M=>{M?(i==null||i(),d==null||d()):({stop:i}=Lt(y,O),d=ke("resize",O))},{immediate:!0}),G(()=>[n.maxHeight,n.height],()=>{n.native||pe(()=>{var M;O(),_.value&&((M=C.value)==null||M.handleScroll(_.value))})}),re(et,We({scrollbarElement:p,wrapElement:_})),X(()=>{n.native||pe(()=>{O()})}),Ke(()=>O()),e({wrapRef:_,update:O,scrollTo:U,setScrollTop:J,setScrollLeft:E,handleScroll:F}),(M,R)=>(a(),c("div",{ref_key:"scrollbarRef",ref:p,class:B(l(r).b())},[u("div",{ref_key:"wrapRef",ref:_,class:B(z.value),style:ae(L.value),onScroll:F},[(a(),P(Y(M.tag),{ref_key:"resizeRef",ref:y,class:B(A.value),style:ae(M.viewStyle)},{default:h(()=>[v(M.$slots,"default")]),_:3},8,["class","style"]))],38),M.native?b("",!0):(a(),P(Jt,{key:0,ref_key:"barRef",ref:C,height:N.value,width:f.value,always:M.always,"ratio-x":V.value,"ratio-y":g.value},null,8,["height","width","always","ratio-x","ratio-y"]))],2))}}),T=Ve;function ss(s,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(s,e):(s(),(n=!0)&&setTimeout(()=>n=!1,e))}}function we(s){return/^\//.test(s)?s:`/${s}`}function Te(s){const{pathname:e,search:t,hash:n,protocol:o}=new URL(s,"http://a.com");if(Mt(s)||s.startsWith("#")||!o.startsWith("http")||!Ct(e))return s;const{site:r}=T(),i=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${n}`);return Le(i)}function st(s,e){if(Array.isArray(s))return ve(s);if(s==null)return[];e=we(e);const t=Object.keys(s).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>e.startsWith(we(o))),n=t?s[t]:[];return Array.isArray(n)?ve(n):ve(n.items,n.base)}function ns(s){const e=[];let t=0;for(const n in s){const o=s[n];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function os(s){const e=[];function t(n){for(const o of n)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(s),e}function Pe(s,e){return Array.isArray(e)?e.some(t=>Pe(s,t)):te(s,e.link)?!0:e.items?Pe(s,e.items):!1}function ve(s,e){return[...s].map(t=>{const n={...t},o=n.base||e;return o&&n.link&&(n.link=o+n.link),n.items&&(n.items=ve(n.items,o)),n})}const Ne=S(ne?location.hash:"");ne&&window.addEventListener("hashchange",()=>{Ne.value=location.hash});function K(){const{frontmatter:s,page:e,theme:t}=T(),n=ye("(min-width: 960px)"),o=S(!1),r=w(()=>{const V=t.value.sidebar,L=e.value.relativePath;return V?st(V,L):[]}),i=S(r.value);G(r,(V,L)=>{JSON.stringify(V)!==JSON.stringify(L)&&(i.value=r.value)});const d=w(()=>s.value.sidebar!==!1&&i.value.length>0&&s.value.layout!=="home"),p=w(()=>_?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),_=w(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),y=w(()=>d.value&&n.value),f=w(()=>d.value?ns(i.value):[]);function N(){o.value=!0}function C(){o.value=!1}function g(){o.value?C():N()}return{isOpen:o,sidebar:i,sidebarGroups:f,hasSidebar:d,hasAside:_,leftAside:p,isSidebarEnabled:y,open:N,close:C,toggle:g}}function nt(s,e){let t;_e(()=>{t=s.value?document.activeElement:void 0}),X(()=>{window.addEventListener("keyup",n)}),Me(()=>{window.removeEventListener("keyup",n)});function n(o){o.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function as(s){const{page:e}=T(),t=S(!1),n=w(()=>s.value.collapsed!=null),o=w(()=>!!s.value.link),r=S(!1),i=()=>{r.value=te(e.value.relativePath,s.value.link)};G([e,s,Ne],i),X(i);const d=w(()=>r.value?!0:s.value.items?Pe(e.value.relativePath,s.value.items):!1),p=w(()=>!!(s.value.items&&s.value.items.length));_e(()=>{t.value=!!(n.value&&s.value.collapsed)}),Ce(()=>{(r.value||d.value)&&(t.value=!1)});function _(){n.value&&(t.value=!t.value)}return{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:d,hasChildren:p,toggle:_}}function rs(){const{hasSidebar:s}=K(),e=ye("(min-width: 960px)"),t=ye("(min-width: 1280px)");return{isAsideEnabled:w(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const Se=[];function ot(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function ls(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(i=>i.level>=n&&i.level<=o),Se.length=0;for(const{element:i,link:d}of s)Se.push({element:i,link:d});const r=[];e:for(let i=0;i=0;p--){const _=s[p];if(_.level{requestAnimationFrame(r),window.addEventListener("scroll",n)}),Ke(()=>{i(location.hash)}),Me(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const d=window.scrollY,p=window.innerHeight,_=document.body.offsetHeight,y=Math.abs(d+p-_)<1,f=Se.map(({element:C,link:g})=>({link:g,top:cs(C)})).filter(({top:C})=>!Number.isNaN(C)).sort((C,g)=>C.top-g.top);if(!f.length){i(null);return}if(d<1){i(null);return}if(y){i(f[f.length-1].link);return}let N=null;for(const{link:C,top:g}of f){if(g>d+Tt()+4)break;N=C}i(N)}function i(d){o&&o.classList.remove("active"),d==null?o=null:o=s.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const p=o;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function cs(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}function Ie(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:ds(t),link:"#"+t.id,level:n}});return ls(e,s)}const us=["badge","VPBadge","header-anchor","ignore-header"];function ds(s){let e="";for(const t of s.childNodes)if(t.nodeType===Node.ELEMENT_NODE){if(us.some(n=>t.classList.contains(n)))continue;e+=t.textContent}else t.nodeType===Node.TEXT_NODE&&(e+=t.textContent.replace(/(\w+)\(.+?\)(\s|$).*/,"$1()"));return e.trim()}const vs=["href","title"],ps=$({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(s){function e({target:t}){const n=t.href.split("#")[1],o=document.getElementById(decodeURIComponent(n));o==null||o.focus({preventScroll:!0})}return(t,n)=>{const o=Q("VPDocOutlineItem",!0);return a(),c("ul",{class:B(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(H,null,D(t.headers,({children:r,link:i,title:d})=>(a(),c("li",null,[u("a",{class:"outline-link",href:i,onClick:e,title:d},I(d),9,vs),r!=null&&r.length?(a(),P(o,{key:0,headers:r},null,8,["headers"])):b("",!0)]))),256))],2)}}}),at=k(ps,[["__scopeId","data-v-53c99d69"]]),hs=s=>(j("data-v-6b52fe58"),s=s(),W(),s),fs={class:"content"},_s={class:"outline-title",role:"heading","aria-level":"2"},ms={"aria-labelledby":"doc-outline-aria-label"},gs=hs(()=>u("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),bs=$({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=T(),n=qe([]);me(()=>{n.value=Ie(e.value.outline??t.value.outline)});const o=S(),r=S();return is(o,r),(i,d)=>(a(),c("div",{class:B(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:o,role:"navigation"},[u("div",fs,[u("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),u("div",_s,I(l(ot)(l(t))),1),u("nav",ms,[gs,m(at,{headers:n.value,root:!0},null,8,["headers"])])])],2))}}),$s=k(bs,[["__scopeId","data-v-6b52fe58"]]),ks={class:"VPDocAsideCarbonAds"},ys=$({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,n)=>(a(),c("div",ks,[m(l(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),ws=s=>(j("data-v-cb998dce"),s=s(),W(),s),Ps={class:"VPDocAside"},Ss=ws(()=>u("div",{class:"spacer"},null,-1)),Vs=$({__name:"VPDocAside",setup(s){const{theme:e}=T();return(t,n)=>(a(),c("div",Ps,[v(t.$slots,"aside-top",{},void 0,!0),v(t.$slots,"aside-outline-before",{},void 0,!0),m($s),v(t.$slots,"aside-outline-after",{},void 0,!0),Ss,v(t.$slots,"aside-ads-before",{},void 0,!0),l(e).carbonAds?(a(),P(ys,{key:0,"carbon-ads":l(e).carbonAds},null,8,["carbon-ads"])):b("",!0),v(t.$slots,"aside-ads-after",{},void 0,!0),v(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ls=k(Vs,[["__scopeId","data-v-cb998dce"]]);function Ms(){const{theme:s,page:e}=T();return w(()=>{const{text:t="Edit this page",pattern:n=""}=s.value.editLink||{},{relativePath:o}=e.value;let r=n.replace(/:path/g,o);return s.value.crowdin&&(r=r.replace(/:id/g,s.value.crowdin[o.split("/").slice(1).join("/")])),{url:r,text:t}})}function Cs(){const{page:s,theme:e,frontmatter:t}=T();return w(()=>{var p,_,y,f,N,C,g,V;const n=st(e.value.sidebar,s.value.relativePath),o=os(n),r=o.findIndex(L=>te(s.value.relativePath,L.link)),i=((p=e.value.docFooter)==null?void 0:p.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((_=e.value.docFooter)==null?void 0:_.next)===!1&&!t.value.next||t.value.next===!1;return{prev:i?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=o[r-1])==null?void 0:y.docFooterText)??((f=o[r-1])==null?void 0:f.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((N=o[r-1])==null?void 0:N.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((C=o[r+1])==null?void 0:C.docFooterText)??((g=o[r+1])==null?void 0:g.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((V=o[r+1])==null?void 0:V.link)}}})}const Ts={},Ns={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Is=u("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),Bs=u("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),Hs=[Is,Bs];function As(s,e){return a(),c("svg",Ns,Hs)}const zs=k(Ts,[["render",As]]),q=$({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=w(()=>e.tag??(e.href?"a":"span")),n=w(()=>e.href&&Xe.test(e.href));return(o,r)=>(a(),P(Y(t.value),{class:B(["VPLink",{link:o.href,"vp-external-link-icon":n.value,"no-icon":o.noIcon}]),href:o.href?l(Te)(o.href):void 0,target:o.target??(n.value?"_blank":void 0),rel:o.rel??(n.value?"noreferrer":void 0)},{default:h(()=>[v(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Es={class:"VPLastUpdated"},Ds=["datetime"],Os=$({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:n,lang:o}=T(),r=w(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),i=w(()=>r.value.toISOString()),d=S("");return X(()=>{_e(()=>{var p,_,y;d.value=new Intl.DateTimeFormat((_=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&_.forceLocale?o.value:void 0,((y=e.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(p,_)=>{var y;return a(),c("p",Es,[x(I(((y=l(e).lastUpdated)==null?void 0:y.text)||l(e).lastUpdatedText||"Last updated")+": ",1),u("time",{datetime:i.value},I(d.value),9,Ds)])}}}),xs=k(Os,[["__scopeId","data-v-19a7ae4e"]]),Fs={key:0,class:"VPDocFooter"},Rs={key:0,class:"edit-info"},Us={key:0,class:"edit-link"},Gs={key:1,class:"last-updated"},js={key:1,class:"prev-next"},Ws={class:"pager"},Ks=["innerHTML"],qs=["innerHTML"],Xs={class:"pager"},Ys=["innerHTML"],Js=["innerHTML"],Zs=$({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:n}=T(),o=Ms(),r=Cs(),i=w(()=>e.value.editLink&&n.value.editLink!==!1),d=w(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),p=w(()=>i.value||d.value||r.value.prev||r.value.next);return(_,y)=>{var f,N,C,g;return p.value?(a(),c("footer",Fs,[v(_.$slots,"doc-footer-before",{},void 0,!0),i.value||d.value?(a(),c("div",Rs,[i.value?(a(),c("div",Us,[m(q,{class:"edit-link-button",href:l(o).url,"no-icon":!0},{default:h(()=>[m(zs,{class:"edit-link-icon","aria-label":"edit icon"}),x(" "+I(l(o).text),1)]),_:1},8,["href"])])):b("",!0),d.value?(a(),c("div",Gs,[m(xs)])):b("",!0)])):b("",!0),(f=l(r).prev)!=null&&f.link||(N=l(r).next)!=null&&N.link?(a(),c("nav",js,[u("div",Ws,[(C=l(r).prev)!=null&&C.link?(a(),P(q,{key:0,class:"pager-link prev",href:l(r).prev.link},{default:h(()=>{var V;return[u("span",{class:"desc",innerHTML:((V=l(e).docFooter)==null?void 0:V.prev)||"Previous page"},null,8,Ks),u("span",{class:"title",innerHTML:l(r).prev.text},null,8,qs)]}),_:1},8,["href"])):b("",!0)]),u("div",Xs,[(g=l(r).next)!=null&&g.link?(a(),P(q,{key:0,class:"pager-link next",href:l(r).next.link},{default:h(()=>{var V;return[u("span",{class:"desc",innerHTML:((V=l(e).docFooter)==null?void 0:V.next)||"Next page"},null,8,Ys),u("span",{class:"title",innerHTML:l(r).next.text},null,8,Js)]}),_:1},8,["href"])):b("",!0)])])):b("",!0)])):b("",!0)}}}),Qs=k(Zs,[["__scopeId","data-v-b4b63abf"]]),en=s=>(j("data-v-e6f2a212"),s=s(),W(),s),tn={class:"container"},sn=en(()=>u("div",{class:"aside-curtain"},null,-1)),nn={class:"aside-container"},on={class:"aside-content"},an={class:"content"},rn={class:"content-container"},ln={class:"main"},cn=$({__name:"VPDoc",setup(s){const{theme:e}=T(),t=le(),{hasSidebar:n,hasAside:o,leftAside:r}=K(),i=w(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,p)=>{const _=Q("Content");return a(),c("div",{class:B(["VPDoc",{"has-sidebar":l(n),"has-aside":l(o)}])},[v(d.$slots,"doc-top",{},void 0,!0),u("div",tn,[l(o)?(a(),c("div",{key:0,class:B(["aside",{"left-aside":l(r)}])},[sn,u("div",nn,[u("div",on,[m(Ls,null,{"aside-top":h(()=>[v(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[v(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[v(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[v(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[v(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[v(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):b("",!0),u("div",an,[u("div",rn,[v(d.$slots,"doc-before",{},void 0,!0),u("main",ln,[m(_,{class:B(["vp-doc",[i.value,l(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(Qs,null,{"doc-footer-before":h(()=>[v(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),v(d.$slots,"doc-after",{},void 0,!0)])])]),v(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),rt=k(cn,[["__scopeId","data-v-e6f2a212"]]),un={class:"spoiler"},dn=$({__name:"spoiler",props:{text:{type:String}},setup(s){return(e,t)=>(a(),c("span",un,[v(e.$slots,"default",{},()=>[x(I(s.text),1)],!0)]))}}),vn=k(dn,[["__scopeId","data-v-4b7f368a"]]),pn=["src"],hn={class:"nickname"},fn={class:"message-box"},_n=$({__name:"chat-message",props:{nickname:{},color:{},avatar:{}},setup(s,{expose:e}){const t={Alice:"#cc0066",Bob:"#00994d",Carol:"#1e90ff",Dave:"#f4a460"},n={Koishi:"https://koishi.chat/logo.png"},o=s,r=S(!1),i=S(!1),d=S(!1),p=S(),_=w(()=>o.color||t[o.nickname]),y=w(()=>o.avatar||n[o.nickname]);function f(){let z;for(const A of document.querySelectorAll(".chat-message")){if(A===p.value)return z;z=A}}G(i,z=>{if(!z)return r.value=!1;const A=f();if(!A||A.getBoundingClientRect().bottom<0)return C();const U=A.__vue__.exposed;U.moving.value||!U.shown.value?U.onappear(C):C()});let N=()=>{};function C(){r.value=!0,d.value=!0,setTimeout(()=>{d.value=!1,N()},100)}function g(){p.value.getBoundingClientRect().top{p.value.__vue__=V,g(),addEventListener("scroll",g),addEventListener("resize",g)}),je(()=>{removeEventListener("scroll",g),removeEventListener("resize",g)}),(z,A)=>(a(),c("div",{ref_key:"root",ref:p,class:B(["chat-message",{shown:r.value}])},[y.value?(a(),c("img",{key:0,class:"avatar",src:y.value},null,8,pn)):(a(),c("div",{key:1,class:"avatar",style:ae({backgroundColor:_.value})},I(z.nickname[0]),5)),u("div",hn,I(z.nickname),1),u("div",fn,[v(z.$slots,"default",{},()=>[x(" ")])])],2))}}),mn={props:{controls:Boolean,title:String},data:()=>({tab:"default"}),computed:{mini(){return!this.controls&&!this.title}}},gn={class:"controls"},bn=u("div",{class:"circle red"},null,-1),$n=u("div",{class:"circle yellow"},null,-1),kn=u("div",{class:"circle green"},null,-1),yn={class:"title"},wn={key:0,class:"title-text"},Pn={class:"content"};function Sn(s,e,t,n,o,r){return a(),c("div",{class:B(["panel-view",{mini:r.mini}])},[u("div",gn,[bn,$n,kn,u("div",yn,[t.title?(a(),c("span",wn,I(t.title),1)):b("",!0)])]),u("div",Pn,[v(s.$slots,"default")])],2)}const Vn=k(mn,[["render",Sn]]),Ln={class:"tab-select"},Mn={class:"header"},Cn=["onClick"],Tn=$({__name:"tab-select",setup(s){const e=Ye(),t=w(()=>Object.keys(e).filter(o=>o.startsWith("tab-")).map(o=>o.slice(4))),n=yi(t);return(o,r)=>(a(),c("div",Ln,[u("div",Mn,[(a(!0),c(H,null,D(t.value,i=>(a(),c("span",{key:i,class:B({active:l(n)===i}),onClick:d=>n.value=i},[v(o.$slots,"title-"+i,{},()=>[x(I(i),1)])],10,Cn))),128))]),v(o.$slots,"tab-"+l(n))]))}}),Nn=$({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),c("span",{class:B(["VPBadge",e.type])},[v(e.$slots,"default",{},()=>[x(I(e.text),1)])],2))}}),In={key:0,class:"VPBackdrop"},Bn=$({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),P(fe,{name:"fade"},{default:h(()=>[e.show?(a(),c("div",In)):b("",!0)]),_:1}))}}),lt=k(Bn,[["__scopeId","data-v-54a304ca"]]);function ie({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:o,theme:r}=T(),i=w(()=>{var p,_;return{label:(p=t.value.locales[n.value])==null?void 0:p.label,link:((_=t.value.locales[n.value])==null?void 0:_.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:w(()=>Object.entries(t.value.locales).flatMap(([p,_])=>s&&i.value.label===_.label?[]:{text:_.label,link:Hn(_.link||(p==="root"?"/":`/${p}/`),r.value.i18nRouting!==!1&&e,o.value.relativePath.slice(i.value.link.length-1),!t.value.cleanUrls)+Ne.value})),currentLang:i}}function Hn(s,e,t,n){return e?s.replace(/\/$/,"")+we(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):s}const An=s=>(j("data-v-b9c0c15a"),s=s(),W(),s),zn={class:"NotFound"},En={class:"code"},Dn={class:"title"},On=An(()=>u("div",{class:"divider"},null,-1)),xn={class:"quote"},Fn={class:"action"},Rn=["href","aria-label"],Un=$({__name:"NotFound",setup(s){const{site:e,theme:t}=T(),{localeLinks:n}=ie({removeCurrent:!1}),o=S("/");return X(()=>{var i;const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(o.value=((i=n.value.find(({link:d})=>d.startsWith(r)))==null?void 0:i.link)||n.value[0].link)}),(r,i)=>{var d,p,_,y,f;return a(),c("div",zn,[u("p",En,I(((d=l(t).notFound)==null?void 0:d.code)??"404"),1),u("h1",Dn,I(((p=l(t).notFound)==null?void 0:p.title)??"PAGE NOT FOUND"),1),On,u("blockquote",xn,I(((_=l(t).notFound)==null?void 0:_.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),u("div",Fn,[u("a",{class:"link",href:l(Le)(o.value),"aria-label":((y=l(t).notFound)==null?void 0:y.linkLabel)??"go to home"},I(((f=l(t).notFound)==null?void 0:f.linkText)??"Take me home"),9,Rn)])])}}}),Gn=k(Un,[["__scopeId","data-v-b9c0c15a"]]),jn=$({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{}},setup(s){const e=s,t=w(()=>e.href&&Xe.test(e.href)),n=w(()=>e.tag||e.href?"a":"button");return(o,r)=>(a(),P(Y(n.value),{class:B(["VPButton",[o.size,o.theme]]),href:o.href?l(Te)(o.href):void 0,target:t.value?"_blank":void 0,rel:t.value?"noreferrer":void 0},{default:h(()=>[x(I(o.text),1)]),_:1},8,["class","href","target","rel"]))}}),Wn=k(jn,[["__scopeId","data-v-1e76fe75"]]),Kn=["src","alt"],qn=$({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const n=Q("VPImage",!0);return e.image?(a(),c(H,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",de({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:l(Le)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Kn)):(a(),c(H,{key:1},[m(n,de({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(n,de({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):b("",!0)}}}),he=k(qn,[["__scopeId","data-v-ab19afbb"]]),Xn=s=>(j("data-v-5a3e9999"),s=s(),W(),s),Yn={class:"container"},Jn={class:"main"},Zn={key:0,class:"name"},Qn=["innerHTML"],eo=["innerHTML"],to=["innerHTML"],so={key:0,class:"actions"},no={key:0,class:"image"},oo={class:"image-container"},ao=Xn(()=>u("div",{class:"image-bg"},null,-1)),ro=$({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=Z("hero-image-slot-exists");return(t,n)=>(a(),c("div",{class:B(["VPHero",{"has-image":t.image||l(e)}])},[u("div",Yn,[u("div",Jn,[v(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",Zn,[u("span",{innerHTML:t.name,class:"clip"},null,8,Qn)])):b("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,eo)):b("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,to)):b("",!0)],!0),t.actions?(a(),c("div",so,[(a(!0),c(H,null,D(t.actions,o=>(a(),c("div",{key:o.link,class:"action"},[m(Wn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link},null,8,["theme","text","href"])]))),128))])):b("",!0)]),t.image||l(e)?(a(),c("div",no,[u("div",oo,[ao,v(t.$slots,"home-hero-image",{},()=>[t.image?(a(),P(he,{key:0,class:"image-src",image:t.image},null,8,["image"])):b("",!0)],!0)])])):b("",!0)])],2))}}),lo=k(ro,[["__scopeId","data-v-5a3e9999"]]),io=$({__name:"VPHomeHero",setup(s){const{frontmatter:e}=T();return(t,n)=>l(e).hero?(a(),P(lo,{key:0,class:"VPHomeHero",name:l(e).hero.name,text:l(e).hero.text,tagline:l(e).hero.tagline,image:l(e).hero.image,actions:l(e).hero.actions},{"home-hero-info":h(()=>[v(t.$slots,"home-hero-info")]),"home-hero-image":h(()=>[v(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):b("",!0)}}),co={},uo={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},vo=u("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),po=[vo];function ho(s,e){return a(),c("svg",uo,po)}const fo=k(co,[["render",ho]]),_o={class:"box"},mo={key:0,class:"icon"},go=["innerHTML"],bo=["innerHTML"],$o=["innerHTML"],ko={key:4,class:"link-text"},yo={class:"link-text-value"},wo=$({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),P(q,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:h(()=>[u("article",_o,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",mo,[m(he,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),P(he,{key:1,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?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,go)):b("",!0),u("h2",{class:"title",innerHTML:e.title},null,8,bo),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,$o)):b("",!0),e.linkText?(a(),c("div",ko,[u("p",yo,[x(I(e.linkText)+" ",1),m(fo,{class:"link-text-icon"})])])):b("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Po=k(wo,[["__scopeId","data-v-ee984185"]]),So={key:0,class:"VPFeatures"},Vo={class:"container"},Lo={class:"items"},Mo=$({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=w(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,o)=>n.features?(a(),c("div",So,[u("div",Vo,[u("div",Lo,[(a(!0),c(H,null,D(n.features,r=>(a(),c("div",{key:r.title,class:B(["item",[t.value]])},[m(Po,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):b("",!0)}}),Co=k(Mo,[["__scopeId","data-v-b1eea84a"]]),To=$({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=T();return(t,n)=>l(e).features?(a(),P(Co,{key:0,class:"VPHomeFeatures",features:l(e).features},null,8,["features"])):b("",!0)}}),No={class:"VPHome"},Io=$({__name:"VPHome",setup(s){return(e,t)=>{const n=Q("Content");return a(),c("div",No,[v(e.$slots,"home-hero-before",{},void 0,!0),m(io,null,{"home-hero-info":h(()=>[v(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":h(()=>[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),m(To),v(e.$slots,"home-features-after",{},void 0,!0),m(n)])}}}),Bo=k(Io,[["__scopeId","data-v-20eabd3a"]]),Ho={},Ao={class:"VPPage"};function zo(s,e){const t=Q("Content");return a(),c("div",Ao,[v(s.$slots,"page-top"),m(t),v(s.$slots,"page-bottom")])}const Eo=k(Ho,[["render",zo]]),Do=$({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=T(),{hasSidebar:n}=K();return(o,r)=>(a(),c("div",{class:B(["VPContent",{"has-sidebar":l(n),"is-home":l(t).layout==="home"}]),id:"VPContent"},[l(e).isNotFound?v(o.$slots,"not-found",{key:0},()=>[m(Gn)],!0):l(t).layout==="page"?(a(),P(Eo,{key:1},{"page-top":h(()=>[v(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[v(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(t).layout==="home"?(a(),P(Bo,{key:2},{"home-hero-before":h(()=>[v(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":h(()=>[v(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":h(()=>[v(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[v(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[v(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[v(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):l(t).layout&&l(t).layout!=="doc"?(a(),P(Y(l(t).layout),{key:3})):(a(),P(rt,{key:4},{"doc-top":h(()=>[v(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[v(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":h(()=>[v(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[v(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[v(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":h(()=>[v(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":h(()=>[v(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[v(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[v(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[v(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":h(()=>[v(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Oo=k(Do,[["__scopeId","data-v-3cf691b6"]]),xo={class:"container"},Fo=["innerHTML"],Ro=["innerHTML"],Uo=$({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=T(),{hasSidebar:n}=K();return(o,r)=>l(e).footer&&l(t).footer!==!1?(a(),c("footer",{key:0,class:B(["VPFooter",{"has-sidebar":l(n)}])},[u("div",xo,[l(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:l(e).footer.message},null,8,Fo)):b("",!0),l(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:l(e).footer.copyright},null,8,Ro)):b("",!0)])],2)):b("",!0)}}),it=k(Uo,[["__scopeId","data-v-566314d4"]]);function ct(){const{theme:s,frontmatter:e}=T(),t=qe([]),n=w(()=>t.value.length>0);return me(()=>{t.value=Ie(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:n}}const Go={},jo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Wo=u("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),Ko=[Wo];function qo(s,e){return a(),c("svg",jo,Ko)}const ut=k(Go,[["render",qo]]),Xo={class:"header"},Yo={class:"outline"},Jo=$({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=T(),n=S(!1),o=S(0),r=S(),i=S();Nt(r,()=>{n.value=!1}),It("Escape",()=>{n.value=!1}),me(()=>{n.value=!1});function d(){n.value=!n.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function p(y){y.target.classList.contains("outline-link")&&(i.value&&(i.value.style.transition="none"),pe(()=>{n.value=!1}))}function _(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,f)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:ae({"--vp-vh":o.value+"px"}),ref_key:"main",ref:r},[y.headers.length>0?(a(),c("button",{key:0,onClick:d,class:B({open:n.value})},[x(I(l(ot)(l(t)))+" ",1),m(ut,{class:"icon"})],2)):(a(),c("button",{key:1,onClick:_},I(l(t).returnToTopLabel||"Return to top"),1)),m(fe,{name:"flyout"},{default:h(()=>[n.value?(a(),c("div",{key:0,ref_key:"items",ref:i,class:"items",onClick:p},[u("div",Xo,[u("a",{class:"top-link",href:"#",onClick:_},I(l(t).returnToTopLabel||"Return to top"),1)]),u("div",Yo,[m(at,{headers:y.headers},null,8,["headers"])])],512)):b("",!0)]),_:1})],4))}}),Zo=k(Jo,[["__scopeId","data-v-2744f6e0"]]),Qo={},ea={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ta=u("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),sa=u("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),na=u("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),oa=u("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),aa=[ta,sa,na,oa];function ra(s,e){return a(),c("svg",ea,aa)}const la=k(Qo,[["render",ra]]),ia={class:"container"},ca=["aria-expanded"],ua={class:"menu-text"},da=$({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=T(),{hasSidebar:n}=K(),{headers:o}=ct(),{y:r}=Je(),i=S(0);X(()=>{i.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),me(()=>{o.value=Ie(t.value.outline??e.value.outline)});const d=w(()=>o.value.length===0),p=w(()=>d.value&&!n.value),_=w(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:d.value,fixed:p.value}));return(y,f)=>l(t).layout!=="home"&&(!p.value||l(r)>=i.value)?(a(),c("div",{key:0,class:B(_.value)},[u("div",ia,[l(n)?(a(),c("button",{key:0,class:"menu","aria-expanded":y.open,"aria-controls":"VPSidebarNav",onClick:f[0]||(f[0]=N=>y.$emit("open-menu"))},[m(la,{class:"menu-icon"}),u("span",ua,I(l(e).sidebarMenuLabel||"Menu"),1)],8,ca)):b("",!0),m(Zo,{headers:l(o),navHeight:i.value},null,8,["headers","navHeight"])])],2)):b("",!0)}}),dt=k(da,[["__scopeId","data-v-b979e4d9"]]);function va(){const s=S(!1);function e(){s.value=!0,window.addEventListener("resize",o)}function t(){s.value=!1,window.removeEventListener("resize",o)}function n(){s.value?t():e()}function o(){window.outerWidth>=768&&t()}const r=le();return G(()=>r.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:n}}const pa={},ha={class:"VPSwitch",type:"button",role:"switch"},fa={class:"check"},_a={key:0,class:"icon"};function ma(s,e){return a(),c("button",ha,[u("span",fa,[s.$slots.default?(a(),c("span",_a,[v(s.$slots,"default",{},void 0,!0)])):b("",!0)])])}const ga=k(pa,[["render",ma],["__scopeId","data-v-1c29e291"]]),ba={},$a={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ka=u("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),ya=[ka];function wa(s,e){return a(),c("svg",$a,ya)}const Pa=k(ba,[["render",wa]]),Sa={},Va={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},La=Bt('',9),Ma=[La];function Ca(s,e){return a(),c("svg",Va,Ma)}const Ta=k(Sa,[["render",Ca]]),Na=$({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=T(),n=Z("toggle-appearance",()=>{e.value=!e.value}),o=w(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,i)=>(a(),P(ga,{title:o.value,class:"VPSwitchAppearance","aria-checked":l(e),onClick:l(n)},{default:h(()=>[m(Ta,{class:"sun"}),m(Pa,{class:"moon"})]),_:1},8,["title","aria-checked","onClick"]))}}),Be=k(Na,[["__scopeId","data-v-d80abb8e"]]),Ia={key:0,class:"VPNavBarAppearance"},Ba=$({__name:"VPNavBarAppearance",setup(s){const{site:e}=T();return(t,n)=>l(e).appearance&&l(e).appearance!=="force-dark"?(a(),c("div",Ia,[m(Be)])):b("",!0)}}),Ha=k(Ba,[["__scopeId","data-v-283b26e9"]]),He=S();let vt=!1,$e=0;function Aa(s){const e=S(!1);if(ne){!vt&&za(),$e++;const t=G(He,n=>{var o,r,i;n===s.el.value||(o=s.el.value)!=null&&o.contains(n)?(e.value=!0,(r=s.onFocus)==null||r.call(s)):(e.value=!1,(i=s.onBlur)==null||i.call(s))});Me(()=>{t(),$e--,$e||Ea()})}return Ht(e)}function za(){document.addEventListener("focusin",pt),vt=!0,He.value=document.activeElement}function Ea(){document.removeEventListener("focusin",pt)}function pt(){He.value=document.activeElement}const Da={},Oa={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},xa=u("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=[xa];function Ra(s,e){return a(),c("svg",Oa,Fa)}const ht=k(Da,[["render",Ra]]),Ua={},Ga={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ja=u("circle",{cx:"12",cy:"12",r:"2"},null,-1),Wa=u("circle",{cx:"19",cy:"12",r:"2"},null,-1),Ka=u("circle",{cx:"5",cy:"12",r:"2"},null,-1),qa=[ja,Wa,Ka];function Xa(s,e){return a(),c("svg",Ga,qa)}const Ya=k(Ua,[["render",Xa]]),Ja={class:"VPMenuLink"},Za=$({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=T();return(t,n)=>(a(),c("div",Ja,[m(q,{class:B({active:l(te)(l(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:h(()=>[x(I(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ge=k(Za,[["__scopeId","data-v-f51f088d"]]),Qa={class:"VPMenuGroup"},er={key:0,class:"title"},tr=$({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),c("div",Qa,[e.text?(a(),c("p",er,I(e.text),1)):b("",!0),(a(!0),c(H,null,D(e.items,n=>(a(),c(H,null,["link"in n?(a(),P(ge,{key:0,item:n},null,8,["item"])):b("",!0)],64))),256))]))}}),sr=k(tr,[["__scopeId","data-v-a6b0397c"]]),nr={class:"VPMenu"},or={key:0,class:"items"},ar=$({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),c("div",nr,[e.items?(a(),c("div",or,[(a(!0),c(H,null,D(e.items,n=>(a(),c(H,{key:n.text},["link"in n?(a(),P(ge,{key:0,item:n},null,8,["item"])):(a(),P(sr,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):b("",!0),v(e.$slots,"default",{},void 0,!0)]))}}),rr=k(ar,[["__scopeId","data-v-e42ed9b3"]]),lr=["aria-expanded","aria-label"],ir={key:0,class:"text"},cr=["innerHTML"],ur={class:"menu"},dr=$({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=S(!1),t=S();Aa({el:t,onBlur:n});function n(){e.value=!1}return(o,r)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=i=>e.value=!0),onMouseleave:r[2]||(r[2]=i=>e.value=!1)},[u("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:r[0]||(r[0]=i=>e.value=!e.value)},[o.button||o.icon?(a(),c("span",ir,[o.icon?(a(),P(Y(o.icon),{key:0,class:"option-icon"})):b("",!0),o.button?(a(),c("span",{key:1,innerHTML:o.button},null,8,cr)):b("",!0),m(ht,{class:"text-icon"})])):(a(),P(Ya,{key:1,class:"icon"}))],8,lr),u("div",ur,[m(rr,{items:o.items},{default:h(()=>[v(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ae=k(dr,[["__scopeId","data-v-aa8de344"]]),vr={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',npm:'npm',slack:'Slack',twitter:'Twitter',x:'X',youtube:'YouTube'},pr=["href","aria-label","innerHTML"],hr=$({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=w(()=>typeof e.icon=="object"?e.icon.svg:vr[e.icon]);return(n,o)=>(a(),c("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,pr))}}),fr=k(hr,[["__scopeId","data-v-16cf740a"]]),_r={class:"VPSocialLinks"},mr=$({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),c("div",_r,[(a(!0),c(H,null,D(e.links,({link:n,icon:o,ariaLabel:r})=>(a(),P(fr,{key:n,icon:o,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),ze=k(mr,[["__scopeId","data-v-e71e869c"]]),gr={key:0,class:"group translations"},br={class:"trans-title"},$r={key:1,class:"group"},kr={class:"item appearance"},yr={class:"label"},wr={class:"appearance-action"},Pr={key:2,class:"group"},Sr={class:"item social-links"},Vr=$({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=T(),{localeLinks:n,currentLang:o}=ie({correspondingLink:!0}),r=w(()=>n.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(i,d)=>r.value?(a(),P(Ae,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:h(()=>[l(n).length&&l(o).label?(a(),c("div",gr,[u("p",br,I(l(o).label),1),(a(!0),c(H,null,D(l(n),p=>(a(),P(ge,{key:p.link,item:p},null,8,["item"]))),128))])):b("",!0),l(e).appearance&&l(e).appearance!=="force-dark"?(a(),c("div",$r,[u("div",kr,[u("p",yr,I(l(t).darkModeSwitchLabel||"Appearance"),1),u("div",wr,[m(Be)])])])):b("",!0),l(t).socialLinks?(a(),c("div",Pr,[u("div",Sr,[m(ze,{class:"social-links-list",links:l(t).socialLinks},null,8,["links"])])])):b("",!0)]),_:1})):b("",!0)}}),Lr=k(Vr,[["__scopeId","data-v-8e87c032"]]),Mr=s=>(j("data-v-6bee1efd"),s=s(),W(),s),Cr=["aria-expanded"],Tr=Mr(()=>u("span",{class:"container"},[u("span",{class:"top"}),u("span",{class:"middle"}),u("span",{class:"bottom"})],-1)),Nr=[Tr],Ir=$({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),c("button",{type:"button",class:B(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},Nr,10,Cr))}}),Br=k(Ir,[["__scopeId","data-v-6bee1efd"]]),Hr=["innerHTML"],Ar=$({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=T();return(t,n)=>(a(),P(q,{class:B({VPNavBarMenuLink:!0,active:l(te)(l(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:h(()=>[u("span",{innerHTML:t.item.text},null,8,Hr)]),_:1},8,["class","href","target","rel"]))}}),zr=k(Ar,[["__scopeId","data-v-cb318fec"]]),Er=$({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=T(),n=r=>"link"in r?te(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),o=w(()=>n(e.item));return(r,i)=>(a(),P(Ae,{class:B({VPNavBarMenuGroup:!0,active:l(te)(l(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||o.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),Dr=s=>(j("data-v-f732b5d0"),s=s(),W(),s),Or={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},xr=Dr(()=>u("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Fr=$({__name:"VPNavBarMenu",setup(s){const{theme:e}=T();return(t,n)=>l(e).nav?(a(),c("nav",Or,[xr,(a(!0),c(H,null,D(l(e).nav,o=>(a(),c(H,{key:o.text},["link"in o?(a(),P(zr,{key:0,item:o},null,8,["item"])):(a(),P(Er,{key:1,item:o},null,8,["item"]))],64))),128))])):b("",!0)}}),Rr=k(Fr,[["__scopeId","data-v-f732b5d0"]]);function Ur(s){const{localeIndex:e,theme:t}=T();function n(o){var g,V,L;const r=o.split("."),i=(g=t.value.search)==null?void 0:g.options,d=i&&typeof i=="object",p=d&&((L=(V=i.locales)==null?void 0:V[e.value])==null?void 0:L.translations)||null,_=d&&i.translations||null;let y=p,f=_,N=s;const C=r.pop();for(const z of r){let A=null;const F=N==null?void 0:N[z];F&&(A=N=F);const U=f==null?void 0:f[z];U&&(A=f=U);const J=y==null?void 0:y[z];J&&(A=y=J),F||(N=A),U||(f=A),J||(y=A)}return(y==null?void 0:y[C])??(f==null?void 0:f[C])??(N==null?void 0:N[C])??""}return n}const Gr=["aria-label"],jr={class:"DocSearch-Button-Container"},Wr=u("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[u("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),Kr={class:"DocSearch-Button-Placeholder"},qr=u("span",{class:"DocSearch-Button-Keys"},[u("kbd",{class:"DocSearch-Button-Key"}),u("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Fe=$({__name:"VPNavBarSearchButton",setup(s){const t=Ur({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,o)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":l(t)("button.buttonAriaLabel")},[u("span",jr,[Wr,u("span",Kr,I(l(t)("button.buttonText")),1)]),qr],8,Gr))}}),Xr={class:"VPNavBarSearch"},Yr={id:"local-search"},Jr={key:1,id:"docsearch"},Zr=$({__name:"VPNavBarSearch",setup(s){const e=()=>null,t=()=>null,{theme:n}=T(),o=S(!1),r=S(!1);X(()=>{});function i(){o.value||(o.value=!0,setTimeout(d,16))}function d(){const y=new Event("keydown");y.key="k",y.metaKey=!0,window.dispatchEvent(y),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}const p=S(!1),_="";return(y,f)=>{var N;return a(),c("div",Xr,[l(_)==="local"?(a(),c(H,{key:0},[p.value?(a(),P(l(e),{key:0,onClose:f[0]||(f[0]=C=>p.value=!1)})):b("",!0),u("div",Yr,[m(Fe,{onClick:f[1]||(f[1]=C=>p.value=!0)})])],64)):l(_)==="algolia"?(a(),c(H,{key:1},[o.value?(a(),P(l(t),{key:0,algolia:((N=l(n).search)==null?void 0:N.options)??l(n).algolia,onVnodeBeforeMount:f[2]||(f[2]=C=>r.value=!0)},null,8,["algolia"])):b("",!0),r.value?b("",!0):(a(),c("div",Jr,[m(Fe,{onClick:i})]))],64)):b("",!0)])}}}),Qr=$({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=T();return(t,n)=>l(e).socialLinks?(a(),P(ze,{key:0,class:"VPNavBarSocialLinks",links:l(e).socialLinks},null,8,["links"])):b("",!0)}}),el=k(Qr,[["__scopeId","data-v-ef6192dc"]]),tl=["href"],sl=$({__name:"navbar-title",setup(s){const{site:e,theme:t,localeIndex:n,page:o}=T(),{hasSidebar:r}=K(),{currentLang:i}=ie(),d=w(()=>{const y=o.value.filePath.slice(n.value.length);for(const f in t.value.mixins||{})if(y.startsWith(f))return f}),p=w(()=>d.value?`/${n.value}${d.value}/`:t.value.logoLink??Te(i.value.link)),_=w(()=>d.value?t.value.mixins[d.value].title:t.value.siteTitle||e.value.title);return(y,f)=>(a(),c("div",{class:B(["VPNavBarTitle",{"has-sidebar":l(r)}])},[u("a",{class:"title",href:p.value},[v(y.$slots,"nav-bar-title-before",{},void 0,!0),!d.value&&l(t).logo?(a(),P(he,{key:0,class:"logo",image:l(t).logo},null,8,["image"])):b("",!0),x(" "+I(_.value)+" ",1),v(y.$slots,"nav-bar-title-after",{},void 0,!0)],8,tl)],2))}}),nl=k(sl,[["__scopeId","data-v-da535f8d"]]),ol={},al={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},rl=u("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),ll=u("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),il=[rl,ll];function cl(s,e){return a(),c("svg",al,il)}const ft=k(ol,[["render",cl]]),ul={class:"items"},dl={class:"title"},vl=$({__name:"VPNavBarTranslations",setup(s){const{theme:e}=T(),{localeLinks:t,currentLang:n}=ie({correspondingLink:!0});return(o,r)=>l(t).length&&l(n).label?(a(),P(Ae,{key:0,class:"VPNavBarTranslations",icon:ft,label:l(e).langMenuLabel||"Change language"},{default:h(()=>[u("div",ul,[u("p",dl,I(l(n).label),1),(a(!0),c(H,null,D(l(t),i=>(a(),P(ge,{key:i.link,item:i},null,8,["item"]))),128))])]),_:1},8,["label"])):b("",!0)}}),pl=k(vl,[["__scopeId","data-v-ff4524ae"]]),hl=s=>(j("data-v-3efcd581"),s=s(),W(),s),fl={class:"wrapper"},_l={class:"container"},ml={class:"title"},gl={class:"content"},bl={class:"content-body"},$l=hl(()=>u("div",{class:"divider"},[u("div",{class:"divider-line"})],-1)),kl=$({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=Je(),{hasSidebar:t}=K(),{hasLocalNav:n}=ct(),{frontmatter:o}=T(),r=S({});return Ce(()=>{r.value={"has-sidebar":t.value,"has-local-nav":n.value,top:o.value.layout==="home"&&e.value===0}}),(i,d)=>(a(),c("div",{class:B(["VPNavBar",r.value])},[u("div",fl,[u("div",_l,[u("div",ml,[m(nl,null,{"nav-bar-title-before":h(()=>[v(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[v(i.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),u("div",gl,[u("div",bl,[v(i.$slots,"nav-bar-content-before",{},void 0,!0),m(Zr,{class:"search"}),m(Rr,{class:"menu"}),m(pl,{class:"translations"}),m(Ha,{class:"appearance"}),m(el,{class:"social-links"}),m(Lr,{class:"extra"}),v(i.$slots,"nav-bar-content-after",{},void 0,!0),m(Br,{class:"hamburger",active:i.isScreenOpen,onClick:d[0]||(d[0]=p=>i.$emit("toggle-screen"))},null,8,["active"])])])])]),$l],2))}}),yl=k(kl,[["__scopeId","data-v-3efcd581"]]),wl={key:0,class:"VPNavScreenAppearance"},Pl={class:"text"},Sl=$({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=T();return(n,o)=>l(e).appearance&&l(e).appearance!=="force-dark"?(a(),c("div",wl,[u("p",Pl,I(l(t).darkModeSwitchLabel||"Appearance"),1),m(Be)])):b("",!0)}}),Vl=k(Sl,[["__scopeId","data-v-338d9b48"]]),Ll=$({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=Z("close-screen");return(t,n)=>(a(),P(q,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:l(e)},{default:h(()=>[x(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ml=k(Ll,[["__scopeId","data-v-fe523e3d"]]),Cl={},Tl={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Nl=u("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),Il=[Nl];function Bl(s,e){return a(),c("svg",Tl,Il)}const Hl=k(Cl,[["render",Bl]]),Al=$({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=Z("close-screen");return(t,n)=>(a(),P(q,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:l(e)},{default:h(()=>[x(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),_t=k(Al,[["__scopeId","data-v-aea78dd1"]]),zl={class:"VPNavScreenMenuGroupSection"},El={key:0,class:"title"},Dl=$({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),c("div",zl,[e.text?(a(),c("p",El,I(e.text),1)):b("",!0),(a(!0),c(H,null,D(e.items,n=>(a(),P(_t,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Ol=k(Dl,[["__scopeId","data-v-f60dbfa7"]]),xl=["aria-controls","aria-expanded"],Fl=["innerHTML"],Rl=["id"],Ul={key:1,class:"group"},Gl=$({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=S(!1),n=w(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(r,i)=>(a(),c("div",{class:B(["VPNavScreenMenuGroup",{open:t.value}])},[u("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:o},[u("span",{class:"button-text",innerHTML:r.text},null,8,Fl),m(Hl,{class:"button-icon"})],8,xl),u("div",{id:n.value,class:"items"},[(a(!0),c(H,null,D(r.items,d=>(a(),c(H,{key:d.text},["link"in d?(a(),c("div",{key:d.text,class:"item"},[m(_t,{item:d},null,8,["item"])])):(a(),c("div",Ul,[m(Ol,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,Rl)],2))}}),jl=k(Gl,[["__scopeId","data-v-32e4a89c"]]),Wl={key:0,class:"VPNavScreenMenu"},Kl=$({__name:"VPNavScreenMenu",setup(s){const{theme:e}=T();return(t,n)=>l(e).nav?(a(),c("nav",Wl,[(a(!0),c(H,null,D(l(e).nav,o=>(a(),c(H,{key:o.text},["link"in o?(a(),P(Ml,{key:0,item:o},null,8,["item"])):(a(),P(jl,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):b("",!0)}}),ql=$({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=T();return(t,n)=>l(e).socialLinks?(a(),P(ze,{key:0,class:"VPNavScreenSocialLinks",links:l(e).socialLinks},null,8,["links"])):b("",!0)}}),Xl={class:"list"},Yl=$({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=ie({correspondingLink:!0}),n=S(!1);function o(){n.value=!n.value}return(r,i)=>l(e).length&&l(t).label?(a(),c("div",{key:0,class:B(["VPNavScreenTranslations",{open:n.value}])},[u("button",{class:"title",onClick:o},[m(ft,{class:"icon lang"}),x(" "+I(l(t).label)+" ",1),m(ht,{class:"icon chevron"})]),u("ul",Xl,[(a(!0),c(H,null,D(l(e),d=>(a(),c("li",{key:d.link,class:"item"},[m(q,{class:"link",href:d.link},{default:h(()=>[x(I(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):b("",!0)}}),Jl=k(Yl,[["__scopeId","data-v-41505286"]]),Zl={class:"container"},Ql=$({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=S(null),t=Ze(ne?document.body:null);return(n,o)=>(a(),P(fe,{name:"fade",onEnter:o[0]||(o[0]=r=>t.value=!0),onAfterLeave:o[1]||(o[1]=r=>t.value=!1)},{default:h(()=>[n.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[u("div",Zl,[v(n.$slots,"nav-screen-content-before",{},void 0,!0),m(Kl,{class:"menu"}),m(Jl,{class:"translations"}),m(Vl,{class:"appearance"}),m(ql,{class:"social-links"}),v(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):b("",!0)]),_:3}))}}),ei=k(Ql,[["__scopeId","data-v-57cce842"]]),ti={key:0,class:"VPNav"},si=$({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=va(),{frontmatter:o}=T(),r=w(()=>o.value.navbar!==!1);return re("close-screen",t),_e(()=>{ne&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(i,d)=>r.value?(a(),c("header",ti,[m(yl,{"is-screen-open":l(e),onToggleScreen:l(n)},{"nav-bar-title-before":h(()=>[v(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[v(i.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[v(i.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[v(i.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(ei,{open:l(e)},{"nav-screen-content-before":h(()=>[v(i.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[v(i.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):b("",!0)}}),mt=k(si,[["__scopeId","data-v-7ad780c2"]]),ni=s=>(j("data-v-bd01e0d5"),s=s(),W(),s),oi=["role","tabindex"],ai=ni(()=>u("div",{class:"indicator"},null,-1)),ri={key:1,class:"items"},li=$({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:i,hasChildren:d,toggle:p}=as(w(()=>e.item)),_=w(()=>d.value?"section":"div"),y=w(()=>o.value?"a":"div"),f=w(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),N=w(()=>o.value?void 0:"button"),C=w(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":o.value},{"is-active":r.value},{"has-active":i.value}]);function g(L){"key"in L&&L.key!=="Enter"||!e.item.link&&p()}function V(){e.item.link&&p()}return(L,z)=>{const A=Q("VPSidebarItem",!0);return a(),P(Y(_.value),{class:B(["VPSidebarItem",C.value])},{default:h(()=>[L.item.text?(a(),c("div",de({key:0,class:"item",role:N.value},At(L.item.items?{click:g,keydown:g}:{},!0),{tabindex:L.item.items&&0}),[ai,L.item.link?(a(),P(q,{key:0,tag:y.value,class:"link",href:L.item.link,rel:L.item.rel,target:L.item.target},{default:h(()=>[(a(),P(Y(f.value),{class:"text",innerHTML:L.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),P(Y(f.value),{key:1,class:"text",innerHTML:L.item.text},null,8,["innerHTML"])),L.item.collapsed!=null?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:V,onKeydown:zt(V,["enter"]),tabindex:"0"},[m(ut,{class:"caret-icon"})],32)):b("",!0)],16,oi)):b("",!0),L.item.items&&L.item.items.length?(a(),c("div",ri,[L.depth<5?(a(!0),c(H,{key:0},D(L.item.items,F=>(a(),P(A,{key:F.text,item:F,depth:L.depth+1},null,8,["item","depth"]))),128)):b("",!0)])):b("",!0)]),_:1},8,["class"])}}}),gt=k(li,[["__scopeId","data-v-bd01e0d5"]]),bt=s=>(j("data-v-4871f9f5"),s=s(),W(),s),ii=bt(()=>u("div",{class:"curtain"},null,-1)),ci={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},ui=bt(()=>u("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),di=$({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=K(),n=s,o=S(null),r=Ze(ne?document.body:null);return G([n,o],()=>{var i;n.open?(r.value=!0,(i=o.value)==null||i.focus()):r.value=!1},{immediate:!0,flush:"post"}),(i,d)=>l(t)?(a(),c("aside",{key:0,class:B(["VPSidebar",{open:i.open}]),ref_key:"navEl",ref:o,onClick:d[0]||(d[0]=Qe(()=>{},["stop"]))},[ii,u("nav",ci,[ui,v(i.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),c(H,null,D(l(e),p=>(a(),c("div",{key:p.text,class:"group"},[m(gt,{item:p,depth:0},null,8,["item"])]))),128)),v(i.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):b("",!0)}}),vi=k(di,[["__scopeId","data-v-4871f9f5"]]),pi=$({__name:"VPSkipLink",setup(s){const e=le(),t=S();G(()=>e.path,()=>t.value.focus());function n({target:o}){const r=document.getElementById(decodeURIComponent(o.hash).slice(1));if(r){const i=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",i)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",i),r.focus(),window.scrollTo(0,0)}}return(o,r)=>(a(),c(H,null,[u("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),u("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),$t=k(pi,[["__scopeId","data-v-c8291ffa"]]),hi=$({__name:"Layout",setup(s){const{isOpen:e,open:t,close:n}=K(),o=le();G(()=>o.path,n),nt(e,n);const{frontmatter:r}=T(),i=Ye(),d=w(()=>!!i["home-hero-image"]);return re("hero-image-slot-exists",d),(p,_)=>{const y=Q("Content");return l(r).layout!==!1?(a(),c("div",{key:0,class:B(["Layout",l(r).pageClass])},[v(p.$slots,"layout-top",{},void 0,!0),m($t),m(lt,{class:"backdrop",show:l(e),onClick:l(n)},null,8,["show","onClick"]),m(mt,null,{"nav-bar-title-before":h(()=>[v(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[v(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[v(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[v(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":h(()=>[v(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[v(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(dt,{open:l(e),onOpenMenu:l(t)},null,8,["open","onOpenMenu"]),m(vi,{open:l(e)},{"sidebar-nav-before":h(()=>[v(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":h(()=>[v(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(Oo,null,{"page-top":h(()=>[v(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[v(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":h(()=>[v(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":h(()=>[v(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":h(()=>[v(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":h(()=>[v(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[v(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[v(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[v(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":h(()=>[v(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[v(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[v(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":h(()=>[v(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[v(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":h(()=>[v(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[v(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[v(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[v(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[v(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[v(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(it),v(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),P(y,{key:1}))}}}),fi=k(hi,[["__scopeId","data-v-9d8abc1e"]]),Re={Layout:fi,enhanceApp:({app:s})=>{s.component("Badge",Nn)}},_i=u("div",{class:"curtain"},null,-1),mi={class:"vp-sidebar-nav"},gi={class:"group"},bi=$({__name:"sidebar",props:{open:{type:Boolean}},setup(s){const{hasSidebar:e,sidebarGroups:t}=K(),n=s,o=S(null);return Ce(async()=>{var r;n.open&&(await pe(),(r=o.value)==null||r.wrapRef.focus())}),(r,i)=>{const d=Q("ElScrollbar");return l(e)?(a(),P(d,{key:0,tag:"aside",class:B(["VPSidebar",{open:r.open}]),"view-class":"vp-sidebar-view",ref_key:"navEl",ref:o,onClick:i[0]||(i[0]=Qe(()=>{},["stop"]))},{default:h(()=>[_i,u("nav",mi,[v(r.$slots,"sidebar-nav-before"),(a(!0),c(H,null,D(l(t),p=>(a(),c("div",gi,[m(gt,{item:p,depth:0},null,8,["item"])]))),256)),v(r.$slots,"sidebar-nav-after")])]),_:3},8,["class"])):b("",!0)}}}),$i=$({__name:"Layout",setup(s){const{isOpen:e,open:t,close:n,hasSidebar:o}=K(),r=le();G(()=>r.path,n),nt(e,n),re("close-sidebar",n),re("is-sidebar-open",e);const{frontmatter:i}=Ve(),d=Z(kt),p=w(()=>{var f;return d.layouts[(f=i.value.layout)==null?void 0:f.toLowerCase()]||d.layouts.default}),_=w(()=>({"has-sidebar":o.value})),y=w(()=>({[`layout-${i.value.layout}`]:i.value.layout}));return(f,N)=>(a(),c("div",{class:B(["Layout",y.value])},[m($t),m(lt,{class:"backdrop",show:l(e),onClick:l(n)},null,8,["show","onClick"]),m(mt,null,{"nav-bar-title-before":h(()=>[]),"nav-bar-title-after":h(()=>[]),"nav-bar-content-before":h(()=>[]),"nav-bar-content-after":h(()=>[]),"nav-screen-content-before":h(()=>[]),"nav-screen-content-after":h(()=>[]),_:1}),m(dt,{open:l(e),onOpenMenu:l(t)},null,8,["open","onOpenMenu"]),m(bi,{open:l(e)},{"sidebar-nav-before":h(()=>[v(f.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":h(()=>[v(f.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),u("div",{class:B(["VPContent",_.value]),id:"VPContent"},[(a(),P(Y(p.value),null,{"doc-footer-before":h(()=>[]),"doc-before":h(()=>[]),"doc-after":h(()=>[]),"aside-top":h(()=>[]),"aside-bottom":h(()=>[]),"aside-outline-before":h(()=>[]),"aside-outline-after":h(()=>[]),"aside-ads-before":h(()=>[]),"aside-ads-after":h(()=>[]),_:1}))],2),m(it)],2))}}),ki=k($i,[["__scopeId","data-v-c1849dc6"]]),kt=Symbol.for("theme-config"),yt=Symbol.for("client-config");function yi(s){const e=Z(yt);return w({get:()=>{const t=Dt(s);return e.tabs.find(n=>t.includes(n))||t[0]},set:t=>{const n=e.tabs.indexOf(t);n>=0&&e.tabs.splice(n,1),e.tabs.unshift(t)}})}const Ue=1;function wi(s){const e=Et("koishi.docs.config",{});return e.value.version!==Ue?e.value={...s,version:Ue}:e.value={...s,...e.value},We(e.value)}const Pi=(s={})=>({...Re,Layout:ki,...s,enhanceApp(e){var n;Re.enhanceApp(e),e.app.component("ElScrollbar",ts),e.app.component("Spoiler",vn),e.app.component("ChatMessage",_n),e.app.component("ChatPanel",Vn),e.app.component("TabSelect",Tn);const t={default:rt};for(const o in s.layouts)t[o.toLowerCase()]=s.layouts[o];e.app.provide(kt,{layouts:t}),e.app.provide(yt,wi({tabs:[]})),(n=s.enhanceApp)==null||n.call(s,e)}}),Si=s=>(j("data-v-b7c0548e"),s=s(),W(),s),Vi={class:"home"},Li={class:"screen"},Mi=Si(()=>u("h1",null,"Satori",-1)),Ci={class:"desc"},Ti={class:"actions"},Ni=["href"],Ii={key:0,class:"footer",target:"_blank",rel:"noopener noreferrer",href:"https://beian.miit.gov.cn/"},Bi=$({__name:"VPHome",setup(s){const{frontmatter:e}=Ve(),t=S(!1);return X(()=>{window.location.href.includes("satori.chat")&&(t.value=!0)}),(n,o)=>(a(),c("div",Vi,[u("div",Li,[Mi,u("p",Ci,I(l(e).home.description),1),u("div",Ti,[u("a",{class:"action-button secondary",href:l(e).links.starter},I(l(e).home.primary),9,Ni)])]),t.value?(a(),c("a",Ii,"苏ICP备2022025524号-2")):b("",!0)]))}}),Hi=k(Bi,[["__scopeId","data-v-b7c0548e"]]),zi=Pi({layouts:{home:Hi}});export{zi as R}; diff --git a/assets/en-US_index.md.Bsz4tPbi.js b/assets/en-US_index.md.Bsz4tPbi.js new file mode 100644 index 0000000..b4c6aec --- /dev/null +++ b/assets/en-US_index.md.Bsz4tPbi.js @@ -0,0 +1 @@ +import{_ as e,l as t,a}from"./chunks/framework.CtqZpALn.js";const l=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"}'),n={name:"en-US/index.md"};function r(o,s,i,c,d,p){return a(),t("div")}const _=e(n,[["render",r]]);export{l as __pageData,_ as default}; diff --git a/assets/en-US_index.md.Bsz4tPbi.lean.js b/assets/en-US_index.md.Bsz4tPbi.lean.js new file mode 100644 index 0000000..b4c6aec --- /dev/null +++ b/assets/en-US_index.md.Bsz4tPbi.lean.js @@ -0,0 +1 @@ +import{_ as e,l as t,a}from"./chunks/framework.CtqZpALn.js";const l=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"}'),n={name:"en-US/index.md"};function r(o,s,i,c,d,p){return a(),t("div")}const _=e(n,[["render",r]]);export{l as __pageData,_ as default}; diff --git a/assets/en-US_introduction.md.COyc3duQ.js b/assets/en-US_introduction.md.COyc3duQ.js new file mode 100644 index 0000000..21d2a8a --- /dev/null +++ b/assets/en-US_introduction.md.COyc3duQ.js @@ -0,0 +1 @@ +import{_ as e,l as n,a as o,f as t,$ as a}from"./chunks/framework.CtqZpALn.js";const m=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,_,l,u,p,f){return o(),n("div",null,c)}const x=e(r,[["render",d]]);export{m as __pageData,x as default}; diff --git a/assets/en-US_introduction.md.COyc3duQ.lean.js b/assets/en-US_introduction.md.COyc3duQ.lean.js new file mode 100644 index 0000000..21d2a8a --- /dev/null +++ b/assets/en-US_introduction.md.COyc3duQ.lean.js @@ -0,0 +1 @@ +import{_ as e,l as n,a as o,f as t,$ as a}from"./chunks/framework.CtqZpALn.js";const m=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,_,l,u,p,f){return o(),n("div",null,c)}const x=e(r,[["render",d]]);export{m as __pageData,x as default}; diff --git a/assets/en-US_protocol_api.md.tjEvRPe9.js b/assets/en-US_protocol_api.md.tjEvRPe9.js new file mode 100644 index 0000000..09d6ca6 --- /dev/null +++ b/assets/en-US_protocol_api.md.tjEvRPe9.js @@ -0,0 +1 @@ +import{_ as t,l as e,a,a6 as o}from"./chunks/framework.CtqZpALn.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 a(),e("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.tjEvRPe9.lean.js b/assets/en-US_protocol_api.md.tjEvRPe9.lean.js new file mode 100644 index 0000000..827ad71 --- /dev/null +++ b/assets/en-US_protocol_api.md.tjEvRPe9.lean.js @@ -0,0 +1 @@ +import{_ as t,l as e,a,a6 as o}from"./chunks/framework.CtqZpALn.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 a(),e("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.D7Gi7Bkr.js b/assets/en-US_protocol_index.md.D7Gi7Bkr.js new file mode 100644 index 0000000..a5a3e1a --- /dev/null +++ b/assets/en-US_protocol_index.md.D7Gi7Bkr.js @@ -0,0 +1 @@ +import{_ as o,l as t,a as r,f as e,$ as a}from"./chunks/framework.CtqZpALn.js";const b=JSON.parse('{"title":"Overview","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/index.md","filePath":"en-US/protocol/index.md"}'),s={name:"en-US/protocol/index.md"},n=e("h1",{id:"overview",tabindex:"-1"},[a("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(_,h,v,p,m,f){return r(),t("div",null,c)}const x=o(s,[["render",d]]);export{b as __pageData,x as default}; diff --git a/assets/en-US_protocol_index.md.D7Gi7Bkr.lean.js b/assets/en-US_protocol_index.md.D7Gi7Bkr.lean.js new file mode 100644 index 0000000..a5a3e1a --- /dev/null +++ b/assets/en-US_protocol_index.md.D7Gi7Bkr.lean.js @@ -0,0 +1 @@ +import{_ as o,l as t,a as r,f as e,$ as a}from"./chunks/framework.CtqZpALn.js";const b=JSON.parse('{"title":"Overview","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/protocol/index.md","filePath":"en-US/protocol/index.md"}'),s={name:"en-US/protocol/index.md"},n=e("h1",{id:"overview",tabindex:"-1"},[a("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(_,h,v,p,m,f){return r(),t("div",null,c)}const x=o(s,[["render",d]]);export{b as __pageData,x as default}; diff --git a/assets/en-US_protocol_message.md.C8I9M0t3.js b/assets/en-US_protocol_message.md.C8I9M0t3.js new file mode 100644 index 0000000..4790d36 --- /dev/null +++ b/assets/en-US_protocol_message.md.C8I9M0t3.js @@ -0,0 +1 @@ +import{_ as a,l as s,a as t,f as e,$ as o}from"./chunks/framework.CtqZpALn.js";const h=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(l,i,m,_,p,f){return t(),s("div",null,c)}const u=a(r,[["render",d]]);export{h as __pageData,u as default}; diff --git a/assets/en-US_protocol_message.md.C8I9M0t3.lean.js b/assets/en-US_protocol_message.md.C8I9M0t3.lean.js new file mode 100644 index 0000000..4790d36 --- /dev/null +++ b/assets/en-US_protocol_message.md.C8I9M0t3.lean.js @@ -0,0 +1 @@ +import{_ as a,l as s,a as t,f as e,$ as o}from"./chunks/framework.CtqZpALn.js";const h=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(l,i,m,_,p,f){return t(),s("div",null,c)}const u=a(r,[["render",d]]);export{h as __pageData,u as default}; diff --git a/assets/en-US_protocol_webhook.md.Dv45azH5.js b/assets/en-US_protocol_webhook.md.Dv45azH5.js new file mode 100644 index 0000000..6a24579 --- /dev/null +++ b/assets/en-US_protocol_webhook.md.Dv45azH5.js @@ -0,0 +1 @@ +import{_ as o,l as t,a,f as e,$ as r}from"./chunks/framework.CtqZpALn.js";const f=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,l,i,_,p,k){return a(),t("div",null,c)}const m=o(s,[["render",h]]);export{f as __pageData,m as default}; diff --git a/assets/en-US_protocol_webhook.md.Dv45azH5.lean.js b/assets/en-US_protocol_webhook.md.Dv45azH5.lean.js new file mode 100644 index 0000000..6a24579 --- /dev/null +++ b/assets/en-US_protocol_webhook.md.Dv45azH5.lean.js @@ -0,0 +1 @@ +import{_ as o,l as t,a,f as e,$ as r}from"./chunks/framework.CtqZpALn.js";const f=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,l,i,_,p,k){return a(),t("div",null,c)}const m=o(s,[["render",h]]);export{f as __pageData,m as default}; diff --git a/assets/en-US_protocol_websocket.md.BKw3x1oT.js b/assets/en-US_protocol_websocket.md.BKw3x1oT.js new file mode 100644 index 0000000..ec5f6b5 --- /dev/null +++ b/assets/en-US_protocol_websocket.md.BKw3x1oT.js @@ -0,0 +1 @@ +import{_ as t,l as o,a,f as e,$ as c}from"./chunks/framework.CtqZpALn.js";const h=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(l,i,_,p,k,b){return a(),o("div",null,n)}const m=t(s,[["render",d]]);export{h as __pageData,m as default}; diff --git a/assets/en-US_protocol_websocket.md.BKw3x1oT.lean.js b/assets/en-US_protocol_websocket.md.BKw3x1oT.lean.js new file mode 100644 index 0000000..ec5f6b5 --- /dev/null +++ b/assets/en-US_protocol_websocket.md.BKw3x1oT.lean.js @@ -0,0 +1 @@ +import{_ as t,l as o,a,f as e,$ as c}from"./chunks/framework.CtqZpALn.js";const h=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(l,i,_,p,k,b){return a(),o("div",null,n)}const m=t(s,[["render",d]]);export{h as __pageData,m as default}; diff --git a/assets/en-US_resources_channel.md.B49Loav5.js b/assets/en-US_resources_channel.md.B49Loav5.js new file mode 100644 index 0000000..9b1cc6a --- /dev/null +++ b/assets/en-US_resources_channel.md.B49Loav5.js @@ -0,0 +1 @@ +import{_ as d,R as o,l as r,f as t,m as l,w as h,$ as e,a6 as a,a as i}from"./chunks/framework.CtqZpALn.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 i(),r("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.B49Loav5.lean.js b/assets/en-US_resources_channel.md.B49Loav5.lean.js new file mode 100644 index 0000000..9650786 --- /dev/null +++ b/assets/en-US_resources_channel.md.B49Loav5.lean.js @@ -0,0 +1 @@ +import{_ as d,R as o,l as r,f as t,m as l,w as h,$ as e,a6 as a,a as i}from"./chunks/framework.CtqZpALn.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 i(),r("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.B-DL93Yw.js b/assets/en-US_resources_guild.md.B-DL93Yw.js new file mode 100644 index 0000000..2386094 --- /dev/null +++ b/assets/en-US_resources_guild.md.B-DL93Yw.js @@ -0,0 +1 @@ +import{_ as o,R as r,l as n,f as t,m as i,w as l,$ as e,a6 as a,a as s}from"./chunks/framework.CtqZpALn.js";const D=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,f,I,P,S){const d=r("badge");return s(),n("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 x=o(u,[["render",m]]);export{D as __pageData,x as default}; diff --git a/assets/en-US_resources_guild.md.B-DL93Yw.lean.js b/assets/en-US_resources_guild.md.B-DL93Yw.lean.js new file mode 100644 index 0000000..496c17f --- /dev/null +++ b/assets/en-US_resources_guild.md.B-DL93Yw.lean.js @@ -0,0 +1 @@ +import{_ as o,R as r,l as n,f as t,m as i,w as l,$ as e,a6 as a,a as s}from"./chunks/framework.CtqZpALn.js";const D=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,f,I,P,S){const d=r("badge");return s(),n("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 x=o(u,[["render",m]]);export{D as __pageData,x as default}; diff --git a/assets/en-US_resources_member.md.BJP15InX.js b/assets/en-US_resources_member.md.BJP15InX.js new file mode 100644 index 0000000..306144e --- /dev/null +++ b/assets/en-US_resources_member.md.BJP15InX.js @@ -0,0 +1,5 @@ +import{_ as e,l as i,a as s,a6 as t}from"./chunks/framework.CtqZpALn.js";const p=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"},l=t(`

群组成员 (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),r=[l];function o(d,n,g,h,c,u){return s(),i("div",null,r)}const b=e(a,[["render",o]]);export{p as __pageData,b as default}; diff --git a/assets/en-US_resources_member.md.BJP15InX.lean.js b/assets/en-US_resources_member.md.BJP15InX.lean.js new file mode 100644 index 0000000..22acff4 --- /dev/null +++ b/assets/en-US_resources_member.md.BJP15InX.lean.js @@ -0,0 +1 @@ +import{_ as e,l as i,a as s,a6 as t}from"./chunks/framework.CtqZpALn.js";const p=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"},l=t("",19),r=[l];function o(d,n,g,h,c,u){return s(),i("div",null,r)}const b=e(a,[["render",o]]);export{p as __pageData,b as default}; diff --git a/assets/en-US_resources_message.md.BaNUWu1G.js b/assets/en-US_resources_message.md.BaNUWu1G.js new file mode 100644 index 0000000..a684c6f --- /dev/null +++ b/assets/en-US_resources_message.md.BaNUWu1G.js @@ -0,0 +1,8 @@ +import{_ as s,l as e,a,a6 as i}from"./chunks/framework.CtqZpALn.js";const m=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/message.md","filePath":"en-US/resources/message.md"}'),t={name:"en-US/resources/message.md"},n=i(`

消息 (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=[n];function o(d,r,c,g,h,p){return a(),e("div",null,l)}const u=s(t,[["render",o]]);export{m as __pageData,u as default}; diff --git a/assets/en-US_resources_message.md.BaNUWu1G.lean.js b/assets/en-US_resources_message.md.BaNUWu1G.lean.js new file mode 100644 index 0000000..83e875d --- /dev/null +++ b/assets/en-US_resources_message.md.BaNUWu1G.lean.js @@ -0,0 +1 @@ +import{_ as s,l as e,a,a6 as i}from"./chunks/framework.CtqZpALn.js";const m=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/message.md","filePath":"en-US/resources/message.md"}'),t={name:"en-US/resources/message.md"},n=i("",24),l=[n];function o(d,r,c,g,h,p){return a(),e("div",null,l)}const u=s(t,[["render",o]]);export{m as __pageData,u as default}; diff --git a/assets/en-US_resources_reaction.md.DViq2951.js b/assets/en-US_resources_reaction.md.DViq2951.js new file mode 100644 index 0000000..d6d3b5b --- /dev/null +++ b/assets/en-US_resources_reaction.md.DViq2951.js @@ -0,0 +1 @@ +import{_ as a,R as n,l as i,f as o,$ as e,m as r,w as s,a6 as c,a as d}from"./chunks/framework.CtqZpALn.js";const R=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=o("a",{class:"header-anchor",href:"#表态","aria-label":'Permalink to "表态 (Reaction) 实验性"'},"​",-1),m=c('

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,f,P){const t=n("badge");return d(),i("div",null,[o("h1",g,[e("表态 (Reaction) "),r(t,{type:"warning"},{default:s(()=>[e("实验性")]),_:1}),e(),h]),m])}const j=a(l,[["render",I]]);export{R as __pageData,j as default}; diff --git a/assets/en-US_resources_reaction.md.DViq2951.lean.js b/assets/en-US_resources_reaction.md.DViq2951.lean.js new file mode 100644 index 0000000..0a13965 --- /dev/null +++ b/assets/en-US_resources_reaction.md.DViq2951.lean.js @@ -0,0 +1 @@ +import{_ as a,R as n,l as i,f as o,$ as e,m as r,w as s,a6 as c,a as d}from"./chunks/framework.CtqZpALn.js";const R=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=o("a",{class:"header-anchor",href:"#表态","aria-label":'Permalink to "表态 (Reaction) 实验性"'},"​",-1),m=c("",13);function I(b,_,u,p,f,P){const t=n("badge");return d(),i("div",null,[o("h1",g,[e("表态 (Reaction) "),r(t,{type:"warning"},{default:s(()=>[e("实验性")]),_:1}),e(),h]),m])}const j=a(l,[["render",I]]);export{R as __pageData,j as default}; diff --git a/assets/en-US_resources_role.md.BlA2gUbW.js b/assets/en-US_resources_role.md.BlA2gUbW.js new file mode 100644 index 0000000..ec96cd5 --- /dev/null +++ b/assets/en-US_resources_role.md.BlA2gUbW.js @@ -0,0 +1,6 @@ +import{_ as t,R as s,l as o,f as i,$ as e,m as a,w as d,a6 as r,a as n}from"./chunks/framework.CtqZpALn.js";const y=JSON.parse('{"title":"群组角色 (GuildRole) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/role.md","filePath":"en-US/resources/role.md"}'),g={name:"en-US/resources/role.md"},h={id:"群组角色",tabindex:"-1"},c=i("a",{class:"header-anchor",href:"#群组角色","aria-label":'Permalink to "群组角色 (GuildRole) 实验性"'},"​",-1),u=r(`

类型定义

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 p(k,b,I,m,_,B){const l=s("badge");return n(),o("div",null,[i("h1",h,[e("群组角色 (GuildRole) "),a(l,{type:"warning"},{default:d(()=>[e("实验性")]),_:1}),e(),c]),u])}const D=t(g,[["render",p]]);export{y as __pageData,D as default}; diff --git a/assets/en-US_resources_role.md.BlA2gUbW.lean.js b/assets/en-US_resources_role.md.BlA2gUbW.lean.js new file mode 100644 index 0000000..965d53e --- /dev/null +++ b/assets/en-US_resources_role.md.BlA2gUbW.lean.js @@ -0,0 +1 @@ +import{_ as t,R as s,l as o,f as i,$ as e,m as a,w as d,a6 as r,a as n}from"./chunks/framework.CtqZpALn.js";const y=JSON.parse('{"title":"群组角色 (GuildRole) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/role.md","filePath":"en-US/resources/role.md"}'),g={name:"en-US/resources/role.md"},h={id:"群组角色",tabindex:"-1"},c=i("a",{class:"header-anchor",href:"#群组角色","aria-label":'Permalink to "群组角色 (GuildRole) 实验性"'},"​",-1),u=r("",21);function p(k,b,I,m,_,B){const l=s("badge");return n(),o("div",null,[i("h1",h,[e("群组角色 (GuildRole) "),a(l,{type:"warning"},{default:d(()=>[e("实验性")]),_:1}),e(),c]),u])}const D=t(g,[["render",p]]);export{y as __pageData,D as default}; diff --git a/assets/en-US_resources_user.md.d8k6TvvM.js b/assets/en-US_resources_user.md.d8k6TvvM.js new file mode 100644 index 0000000..8f8a5e6 --- /dev/null +++ b/assets/en-US_resources_user.md.d8k6TvvM.js @@ -0,0 +1,5 @@ +import{_ as e,l as s,a,a6 as i}from"./chunks/framework.CtqZpALn.js";const u=JSON.parse('{"title":"用户 (User)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/user.md","filePath":"en-US/resources/user.md"}'),t={name:"en-US/resources/user.md"},n=i(`

用户 (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 l(o,h,d,p,c,g){return a(),s("div",null,r)}const b=e(t,[["render",l]]);export{u as __pageData,b as default}; diff --git a/assets/en-US_resources_user.md.d8k6TvvM.lean.js b/assets/en-US_resources_user.md.d8k6TvvM.lean.js new file mode 100644 index 0000000..38535c2 --- /dev/null +++ b/assets/en-US_resources_user.md.d8k6TvvM.lean.js @@ -0,0 +1 @@ +import{_ as e,l as s,a,a6 as i}from"./chunks/framework.CtqZpALn.js";const u=JSON.parse('{"title":"用户 (User)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/user.md","filePath":"en-US/resources/user.md"}'),t={name:"en-US/resources/user.md"},n=i("",16),r=[n];function l(o,h,d,p,c,g){return a(),s("div",null,r)}const b=e(t,[["render",l]]);export{u as __pageData,b as default}; diff --git a/assets/inter-italic-cyrillic-ext.5XJwZIOp.woff2 b/assets/inter-italic-cyrillic-ext.5XJwZIOp.woff2 new file mode 100644 index 0000000..2a68729 Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.5XJwZIOp.woff2 differ diff --git a/assets/inter-italic-cyrillic.D6csxwjC.woff2 b/assets/inter-italic-cyrillic.D6csxwjC.woff2 new file mode 100644 index 0000000..f640351 Binary files /dev/null and b/assets/inter-italic-cyrillic.D6csxwjC.woff2 differ diff --git a/assets/inter-italic-greek-ext.CHOfFY1k.woff2 b/assets/inter-italic-greek-ext.CHOfFY1k.woff2 new file mode 100644 index 0000000..0021896 Binary files /dev/null and b/assets/inter-italic-greek-ext.CHOfFY1k.woff2 differ diff --git a/assets/inter-italic-greek.9J96vYpw.woff2 b/assets/inter-italic-greek.9J96vYpw.woff2 new file mode 100644 index 0000000..71c265f Binary files /dev/null and b/assets/inter-italic-greek.9J96vYpw.woff2 differ diff --git a/assets/inter-italic-latin-ext.BGcWXLrn.woff2 b/assets/inter-italic-latin-ext.BGcWXLrn.woff2 new file mode 100644 index 0000000..9c1b944 Binary files /dev/null and b/assets/inter-italic-latin-ext.BGcWXLrn.woff2 differ diff --git a/assets/inter-italic-latin.DbsTr1gm.woff2 b/assets/inter-italic-latin.DbsTr1gm.woff2 new file mode 100644 index 0000000..01fcf20 Binary files /dev/null and b/assets/inter-italic-latin.DbsTr1gm.woff2 differ diff --git a/assets/inter-italic-vietnamese.DHNAd7Wr.woff2 b/assets/inter-italic-vietnamese.DHNAd7Wr.woff2 new file mode 100644 index 0000000..e4f788e Binary files /dev/null and b/assets/inter-italic-vietnamese.DHNAd7Wr.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.DxP3Awbn.woff2 b/assets/inter-roman-cyrillic-ext.DxP3Awbn.woff2 new file mode 100644 index 0000000..28593cc Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.DxP3Awbn.woff2 differ diff --git a/assets/inter-roman-cyrillic.CMhn1ESj.woff2 b/assets/inter-roman-cyrillic.CMhn1ESj.woff2 new file mode 100644 index 0000000..a20adc1 Binary files /dev/null and b/assets/inter-roman-cyrillic.CMhn1ESj.woff2 differ diff --git a/assets/inter-roman-greek-ext.D0mI3NpI.woff2 b/assets/inter-roman-greek-ext.D0mI3NpI.woff2 new file mode 100644 index 0000000..e3b0be7 Binary files /dev/null and b/assets/inter-roman-greek-ext.D0mI3NpI.woff2 differ diff --git a/assets/inter-roman-greek.JvnBZ4YD.woff2 b/assets/inter-roman-greek.JvnBZ4YD.woff2 new file mode 100644 index 0000000..f790e04 Binary files /dev/null and b/assets/inter-roman-greek.JvnBZ4YD.woff2 differ diff --git a/assets/inter-roman-latin-ext.ZlYT4o7i.woff2 b/assets/inter-roman-latin-ext.ZlYT4o7i.woff2 new file mode 100644 index 0000000..715bd90 Binary files /dev/null and b/assets/inter-roman-latin-ext.ZlYT4o7i.woff2 differ diff --git a/assets/inter-roman-latin.Bu8hRsVA.woff2 b/assets/inter-roman-latin.Bu8hRsVA.woff2 new file mode 100644 index 0000000..a540b7a Binary files /dev/null and b/assets/inter-roman-latin.Bu8hRsVA.woff2 differ diff --git a/assets/inter-roman-vietnamese.ClpjcLMQ.woff2 b/assets/inter-roman-vietnamese.ClpjcLMQ.woff2 new file mode 100644 index 0000000..5a9f9cb Binary files /dev/null and b/assets/inter-roman-vietnamese.ClpjcLMQ.woff2 differ diff --git a/assets/style.BYMbA2WS.css b/assets/style.BYMbA2WS.css new file mode 100644 index 0000000..fab4312 --- /dev/null +++ b/assets/style.BYMbA2WS.css @@ -0,0 +1 @@ +.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}.root[data-v-53c99d69]{position:relative;z-index:1}.nested[data-v-53c99d69]{padding-right:16px;padding-left:16px}.outline-link[data-v-53c99d69]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-53c99d69]:hover,.outline-link.active[data-v-53c99d69]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-53c99d69]{padding-left:13px}.VPDocAsideOutline[data-v-6b52fe58]{display:none}.VPDocAsideOutline.has-outline[data-v-6b52fe58]{display:block}.content[data-v-6b52fe58]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-6b52fe58]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-6b52fe58]{line-height:32px;font-size:14px;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-19a7ae4e]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-19a7ae4e]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-b4b63abf]{margin-top:64px}.edit-info[data-v-b4b63abf]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-b4b63abf]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-b4b63abf]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-b4b63abf]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-b4b63abf]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-b4b63abf]{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-b4b63abf]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-b4b63abf]{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-b4b63abf]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-b4b63abf]{margin-left:auto;text-align:right}.desc[data-v-b4b63abf]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-b4b63abf]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-e6f2a212]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-e6f2a212]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-e6f2a212]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-e6f2a212]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-e6f2a212]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-e6f2a212]{display:flex;justify-content:center}.VPDoc .aside[data-v-e6f2a212]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-e6f2a212]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-e6f2a212]{max-width:1104px}}.container[data-v-e6f2a212]{margin:0 auto;width:100%}.aside[data-v-e6f2a212]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-e6f2a212]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-e6f2a212]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-e6f2a212]::-webkit-scrollbar{display:none}.aside-curtain[data-v-e6f2a212]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-e6f2a212]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-e6f2a212]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-e6f2a212]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-e6f2a212]{order:1;margin:0;min-width:640px}}.content-container[data-v-e6f2a212]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-e6f2a212]{max-width:688px}.spoiler[data-v-4b7f368a]{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-4b7f368a]: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}@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.CMhn1ESj.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.DxP3Awbn.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.JvnBZ4YD.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.D0mI3NpI.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.Bu8hRsVA.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.ZlYT4o7i.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.ClpjcLMQ.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.D6csxwjC.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.5XJwZIOp.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.9J96vYpw.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.CHOfFY1k.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.DbsTr1gm.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.BGcWXLrn.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.DHNAd7Wr.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-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}: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-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}: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-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--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);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-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}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--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-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}: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}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}: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-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}: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-1);--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-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,: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);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}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto}.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.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-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 a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-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 a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.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 a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-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 a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.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;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;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)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.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:2px;border-radius:2px;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;text-decoration:none;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-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.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{background-color:var(--vp-c-bg);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 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);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.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;transform:translate(calc(-100% - 1px));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;padding:0 10px;width:fit-content;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:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);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:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.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-default-soft)}.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{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{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-b9c0c15a]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-b9c0c15a]{padding:96px 32px 168px}}.code[data-v-b9c0c15a]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-b9c0c15a]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-b9c0c15a]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-b9c0c15a]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-b9c0c15a]{padding-top:20px}.link[data-v-b9c0c15a]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-b9c0c15a]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.VPButton[data-v-1e76fe75]{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-1e76fe75]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-1e76fe75]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-1e76fe75]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-1e76fe75]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-1e76fe75]: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-1e76fe75]: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-1e76fe75]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-1e76fe75]: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-1e76fe75]: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-1e76fe75]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-1e76fe75]: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-1e76fe75]: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-ee984185]{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-ee984185]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-ee984185]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-ee984185]>.VPImage{margin-bottom:20px}.icon[data-v-ee984185]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-ee984185]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-ee984185]{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-ee984185]{padding-top:8px}.link-text-value[data-v-ee984185]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-ee984185]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-b1eea84a]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-b1eea84a]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-b1eea84a]{padding:0 64px}}.container[data-v-b1eea84a]{margin:0 auto;max-width:1152px}.items[data-v-b1eea84a]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-b1eea84a]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a]{width:50%}.item.grid-3[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-b1eea84a]{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-566314d4]{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-566314d4]{display:none}.VPFooter[data-v-566314d4] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-566314d4] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-566314d4]{padding:32px}}.container[data-v-566314d4]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-566314d4],.copyright[data-v-566314d4]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-2744f6e0]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-2744f6e0]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-2744f6e0]{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-2744f6e0]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-2744f6e0]{color:var(--vp-c-text-1)}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-2744f6e0]{font-size:14px}}.icon[data-v-2744f6e0]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}.open>.icon[data-v-2744f6e0]{transform:rotate(90deg)}.items[data-v-2744f6e0]{position:absolute;top:40px;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)}@media (min-width: 960px){.items[data-v-2744f6e0]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-2744f6e0]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-2744f6e0]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-2744f6e0]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-2744f6e0]{transition:all .2s ease-out}.flyout-leave-active[data-v-2744f6e0]{transition:all .15s ease-in}.flyout-enter-from[data-v-2744f6e0],.flyout-leave-to[data-v-2744f6e0]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-b979e4d9]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);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-b979e4d9]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-b979e4d9]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-b979e4d9]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-b979e4d9]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-b979e4d9]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-b979e4d9]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-b979e4d9]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-b979e4d9]{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-b979e4d9]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-b979e4d9]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-b979e4d9]{display:none}}.menu-icon[data-v-b979e4d9]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-b979e4d9]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-b979e4d9]{padding:12px 32px 11px}}.VPSwitch[data-v-1c29e291]{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!important}.VPSwitch[data-v-1c29e291]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1c29e291]{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!important}.icon[data-v-1c29e291]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1c29e291] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-1c29e291] svg{fill:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-d80abb8e]{opacity:1}.moon[data-v-d80abb8e],.dark .sun[data-v-d80abb8e]{opacity:0}.dark .moon[data-v-d80abb8e]{opacity:1}.dark .VPSwitchAppearance[data-v-d80abb8e] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-283b26e9]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-283b26e9]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-f51f088d]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-f51f088d]{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-f51f088d]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-f51f088d]{color:var(--vp-c-brand-1)}.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-aa8de344]{position:relative}.VPFlyout[data-v-aa8de344]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-aa8de344]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-aa8de344]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-aa8de344]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-aa8de344]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-aa8de344],.button[aria-expanded=true]+.menu[data-v-aa8de344]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-aa8de344]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-aa8de344]{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-aa8de344]{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-aa8de344]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-aa8de344]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-aa8de344]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-aa8de344]{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-8e87c032]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-8e87c032]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-8e87c032]{display:none}}.trans-title[data-v-8e87c032]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-8e87c032],.item.social-links[data-v-8e87c032]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-8e87c032]{min-width:176px}.appearance-action[data-v-8e87c032]{margin-right:-2px}.social-links-list[data-v-8e87c032]{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-cb318fec]{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-cb318fec],.VPNavBarMenuLink[data-v-cb318fec]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-f732b5d0]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-f732b5d0]{display:flex}}/*! @docsearch/css 3.6.0 | 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-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 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-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--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}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@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:#0003;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:#0003;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}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@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}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--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 [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--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-1);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:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.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-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.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-da535f8d]{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-da535f8d]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-da535f8d]{border-bottom-color:var(--vp-c-divider)}}[data-v-da535f8d] .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-3efcd581]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar.has-local-nav[data-v-3efcd581]{background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar.has-local-nav[data-v-3efcd581]{background-color:transparent}.VPNavBar[data-v-3efcd581]:not(.has-sidebar):not(.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-3efcd581]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-3efcd581]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-3efcd581]{padding:0}}.container[data-v-3efcd581]{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-3efcd581],.container>.content[data-v-3efcd581]{pointer-events:none}.container[data-v-3efcd581] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-3efcd581]{max-width:100%}}.title[data-v-3efcd581]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-3efcd581]{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-3efcd581]{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-3efcd581]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-3efcd581]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-3efcd581]{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-3efcd581]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.top) .content-body[data-v-3efcd581]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.top) .content-body[data-v-3efcd581]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-3efcd581]{column-gap:.5rem}}.menu+.translations[data-v-3efcd581]:before,.menu+.appearance[data-v-3efcd581]:before,.menu+.social-links[data-v-3efcd581]:before,.translations+.appearance[data-v-3efcd581]:before,.appearance+.social-links[data-v-3efcd581]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-3efcd581]:before,.translations+.appearance[data-v-3efcd581]:before{margin-right:16px}.appearance+.social-links[data-v-3efcd581]:before{margin-left:16px}.social-links[data-v-3efcd581]{margin-right:-8px}.divider[data-v-3efcd581]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-3efcd581]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-3efcd581]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-3efcd581]{width:100%;height:1px;transition:background-color .5s}.VPNavBar.has-local-nav .divider-line[data-v-3efcd581]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.top) .divider-line[data-v-3efcd581]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.top) .divider[data-v-3efcd581]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-338d9b48]{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-338d9b48]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-fe523e3d]{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-fe523e3d]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-aea78dd1]{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-aea78dd1]:hover{color:var(--vp-c-brand-1)}.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-32e4a89c]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-32e4a89c]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-32e4a89c]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-32e4a89c]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-32e4a89c]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-32e4a89c]{transform:rotate(45deg)}.button[data-v-32e4a89c]{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-32e4a89c]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-32e4a89c]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-32e4a89c]:first-child{padding-top:0}.group+.group[data-v-32e4a89c],.group+.item[data-v-32e4a89c]{padding-top:4px}.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-57cce842]{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-57cce842],.VPNavScreen.fade-leave-active[data-v-57cce842]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-57cce842],.VPNavScreen.fade-leave-active .container[data-v-57cce842]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-57cce842],.VPNavScreen.fade-leave-to[data-v-57cce842]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-57cce842],.VPNavScreen.fade-leave-to .container[data-v-57cce842]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-57cce842]{display:none}}.container[data-v-57cce842]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-57cce842],.menu+.appearance[data-v-57cce842],.translations+.appearance[data-v-57cce842]{margin-top:24px}.menu+.social-links[data-v-57cce842]{margin-top:16px}.appearance+.social-links[data-v-57cce842]{margin-top:16px}.VPNav[data-v-7ad780c2]{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-7ad780c2]{position:fixed}}.VPSidebarItem.level-0[data-v-bd01e0d5]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-bd01e0d5]{padding-bottom:10px}.item[data-v-bd01e0d5]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-bd01e0d5]{cursor:pointer}.indicator[data-v-bd01e0d5]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-bd01e0d5],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-bd01e0d5],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-bd01e0d5],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-bd01e0d5]{background-color:var(--vp-c-brand-1)}.link[data-v-bd01e0d5]{display:flex;align-items:center;flex-grow:1}.text[data-v-bd01e0d5]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-bd01e0d5]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-bd01e0d5],.VPSidebarItem.level-2 .text[data-v-bd01e0d5],.VPSidebarItem.level-3 .text[data-v-bd01e0d5],.VPSidebarItem.level-4 .text[data-v-bd01e0d5],.VPSidebarItem.level-5 .text[data-v-bd01e0d5]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-bd01e0d5]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-1.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-2.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-3.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-4.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-5.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-bd01e0d5]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-bd01e0d5]{color:var(--vp-c-brand-1)}.caret[data-v-bd01e0d5]{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-bd01e0d5]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-bd01e0d5]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-bd01e0d5]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-bd01e0d5]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-bd01e0d5],.VPSidebarItem.level-2 .items[data-v-bd01e0d5],.VPSidebarItem.level-3 .items[data-v-bd01e0d5],.VPSidebarItem.level-4 .items[data-v-bd01e0d5],.VPSidebarItem.level-5 .items[data-v-bd01e0d5]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-bd01e0d5]{display:none}.VPSidebar[data-v-4871f9f5]{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-4871f9f5]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-4871f9f5]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-4871f9f5]{padding-top:var(--vp-nav-height);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-4871f9f5]{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-4871f9f5]{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-4871f9f5]{outline:0}.group+.group[data-v-4871f9f5]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-4871f9f5]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-c8291ffa]{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-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c8291ffa]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c8291ffa]{top:14px;left:16px}}.Layout[data-v-9d8abc1e]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-843cc1b2]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-843cc1b2]{margin:0 auto;max-width:1152px}.love[data-v-843cc1b2]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-843cc1b2]{width:28px;height:28px;fill:currentColor}.message[data-v-843cc1b2]{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-843cc1b2]{padding-top:32px}.action[data-v-843cc1b2]{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-9d746f28]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-9d746f28]{padding:32px}.VPTeamMembersItem.small .data[data-v-9d746f28]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-9d746f28]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-9d746f28]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-9d746f28]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-9d746f28]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-9d746f28]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-9d746f28]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-9d746f28]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-9d746f28]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-9d746f28]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-9d746f28]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-9d746f28]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-9d746f28]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-9d746f28]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-9d746f28]{text-align:center}.avatar[data-v-9d746f28]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-9d746f28]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-9d746f28]{margin:0;font-weight:600}.affiliation[data-v-9d746f28]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-9d746f28]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-9d746f28]:hover{color:var(--vp-c-brand-1)}.desc[data-v-9d746f28]{margin:0 auto}.desc[data-v-9d746f28] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-9d746f28]{display:flex;justify-content:center;height:56px}.sp-link[data-v-9d746f28]{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-9d746f28]:hover,.sp .sp-link.link[data-v-9d746f28]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-9d746f28]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-bf782009]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-bf782009]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-bf782009]{max-width:876px}.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-bf782009]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-bf782009]{max-width:760px}.container[data-v-bf782009]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.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;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{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-c1849dc6]{display:flex;flex-direction:column;min-height:100vh}.VPContent[data-v-c1849dc6]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.has-sidebar[data-v-c1849dc6]{margin:0}@media (min-width: 960px){.VPContent[data-v-c1849dc6]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-c1849dc6]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-c1849dc6]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.px{padding-left:1rem;padding-right:1rem}.me{margin-inline-end:1rem}.block{display:block}.inline-block{display:inline-block}.hidden{display:none}.border{border-width:1px}.tab{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.underline{text-decoration-line:underline}.text-shadow{--un-text-shadow:0 0 1px var(--un-text-shadow-color, rgb(0 0 0 / .2)),0 0 1px var(--un-text-shadow-color, rgb(1 0 5 / .1));text-shadow:var(--un-text-shadow)}.flex{display:flex}.flex-shrink{flex-shrink:1}.flex-grow{flex-grow:1}.flex-wrap{flex-wrap:wrap}.grid{display:grid}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.h1{height:.25rem}.h2{height:.5rem}.h3{height:.75rem}.h4{height:1rem}.h5{height:1.25rem}.h6{height:1.5rem}.visible{visibility:visible}.resize{resize:both}.break-all{word-break:break-all}.outline{outline-style:solid}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.transform{transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.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)}}.VPDocAsideOutline .outline-link{line-height:28px;font-size:13px}.VPLocalNav.has-sidebar{--vp-c-gutter: var(--vp-c-border)}@media (min-width: 960px) and (max-width: 1280px){.VPLocalNav.has-sidebar{border-bottom:none;background:transparent;--vp-z-index-local-nav: 35}.VPLocalNav.has-sidebar .container{top:0;position:fixed;height:var(--vp-nav-height);z-index:var(--vp-z-index-local-nav)}.VPLocalNav.has-sidebar .VPLocalNavOutlineDropdown button{font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPLocalNav.has-sidebar .VPLocalNavOutlineDropdown .items{top:60px;left:20px}}@media (max-width: 960px){.VPNav .VPNavBar .divider-line{background-color:var(--vp-c-border)}}@media (min-width: 960px){.VPNavBar .divider-line{background-color:transparent!important}.VPNavBar .divider-line:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}.layout-home .divider-line{display:none}: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}mjx-container{font-size:.95em}p mjx-container,li mjx-container{display:inline-flex;vertical-align:middle}p mjx-container>svg,li mjx-container>svg{margin-top:-4px}:root{--vp-nav-height: 64px;--vp-custom-block-tip-text: var(--vp-c-brand-1);--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-success-text: var(--vp-c-green-1);--vp-custom-block-warning-text: var(--vp-c-yellow-1);--vp-custom-block-danger-text: var(--vp-c-red-1);--vp-custom-block-tip-border: var(--vp-c-brand-1);--vp-custom-block-info-border: var(--vp-c-gray-1);--vp-custom-block-success-border: var(--vp-c-green-1);--vp-custom-block-warning-border: var(--vp-c-yellow-1);--vp-custom-block-danger-border: var(--vp-c-red-1)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand) !important}.el-scrollbar__bar{z-index:50}.outline{outline-style:none}.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)}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} diff --git a/assets/zh-CN_advanced_admin.md.C9G_6R-7.js b/assets/zh-CN_advanced_admin.md.C9G_6R-7.js new file mode 100644 index 0000000..e747a7f --- /dev/null +++ b/assets/zh-CN_advanced_admin.md.C9G_6R-7.js @@ -0,0 +1 @@ +import{_ as n,R as s,l as c,f as t,$ as e,m as a,w as l,a6 as d,a as r}from"./chunks/framework.CtqZpALn.js";const V=JSON.parse('{"title":"管理接口 可选 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/admin.md","filePath":"zh-CN/advanced/admin.md"}'),i={name:"zh-CN/advanced/admin.md"},h={id:"管理接口",tabindex:"-1"},_=t("a",{class:"header-anchor",href:"#管理接口","aria-label":'Permalink to "管理接口 可选 实验性"'},"​",-1),u=d('

TIP

这是一个可选功能。

WARNING

这是一个实验性功能。

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

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

API

获取登录信息列表

',6),b={class:"route"},p=t("code",null,"/admin/login.list",-1),m=t("p",null,[e("返回 "),t("a",{href:"./../resources/login.html"},"Login"),e(" 对象构成的数组。")],-1),k=t("h3",{id:"创建-webhook",tabindex:"-1"},[e("创建 WebHook "),t("a",{class:"header-anchor",href:"#创建-webhook","aria-label":'Permalink to "创建 WebHook"'},"​")],-1),f={class:"route"},P=t("code",null,"/admin/webhook.create",-1),T=d('
字段类型描述
urlstringWebHook 地址
tokenstring?鉴权令牌

移除 WebHook

',2),g={class:"route"},S=t("code",null,"/admin/webhook.delete",-1),A=t("table",null,[t("thead",null,[t("tr",null,[t("th",null,"字段"),t("th",null,"类型"),t("th",null,"描述")])]),t("tbody",null,[t("tr",null,[t("td",null,"url"),t("td",null,"string"),t("td",null,"WebHook 地址")])])],-1);function I(N,v,w,x,q,C){const o=s("badge");return r(),c("div",null,[t("h1",h,[e("管理接口 "),a(o,null,{default:l(()=>[e("可选")]),_:1}),e(),a(o,{type:"warning"},{default:l(()=>[e("实验性")]),_:1}),e(),_]),u,t("blockquote",b,[a(o,null,{default:l(()=>[e("POST")]),_:1}),p]),m,k,t("blockquote",f,[a(o,null,{default:l(()=>[e("POST")]),_:1}),P]),T,t("blockquote",g,[a(o,null,{default:l(()=>[e("POST")]),_:1}),S]),A])}const W=n(i,[["render",I]]);export{V as __pageData,W as default}; diff --git a/assets/zh-CN_advanced_admin.md.C9G_6R-7.lean.js b/assets/zh-CN_advanced_admin.md.C9G_6R-7.lean.js new file mode 100644 index 0000000..c972c02 --- /dev/null +++ b/assets/zh-CN_advanced_admin.md.C9G_6R-7.lean.js @@ -0,0 +1 @@ +import{_ as n,R as s,l as c,f as t,$ as e,m as a,w as l,a6 as d,a as r}from"./chunks/framework.CtqZpALn.js";const V=JSON.parse('{"title":"管理接口 可选 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/admin.md","filePath":"zh-CN/advanced/admin.md"}'),i={name:"zh-CN/advanced/admin.md"},h={id:"管理接口",tabindex:"-1"},_=t("a",{class:"header-anchor",href:"#管理接口","aria-label":'Permalink to "管理接口 可选 实验性"'},"​",-1),u=d("",6),b={class:"route"},p=t("code",null,"/admin/login.list",-1),m=t("p",null,[e("返回 "),t("a",{href:"./../resources/login.html"},"Login"),e(" 对象构成的数组。")],-1),k=t("h3",{id:"创建-webhook",tabindex:"-1"},[e("创建 WebHook "),t("a",{class:"header-anchor",href:"#创建-webhook","aria-label":'Permalink to "创建 WebHook"'},"​")],-1),f={class:"route"},P=t("code",null,"/admin/webhook.create",-1),T=d("",2),g={class:"route"},S=t("code",null,"/admin/webhook.delete",-1),A=t("table",null,[t("thead",null,[t("tr",null,[t("th",null,"字段"),t("th",null,"类型"),t("th",null,"描述")])]),t("tbody",null,[t("tr",null,[t("td",null,"url"),t("td",null,"string"),t("td",null,"WebHook 地址")])])],-1);function I(N,v,w,x,q,C){const o=s("badge");return r(),c("div",null,[t("h1",h,[e("管理接口 "),a(o,null,{default:l(()=>[e("可选")]),_:1}),e(),a(o,{type:"warning"},{default:l(()=>[e("实验性")]),_:1}),e(),_]),u,t("blockquote",b,[a(o,null,{default:l(()=>[e("POST")]),_:1}),p]),m,k,t("blockquote",f,[a(o,null,{default:l(()=>[e("POST")]),_:1}),P]),T,t("blockquote",g,[a(o,null,{default:l(()=>[e("POST")]),_:1}),S]),A])}const W=n(i,[["render",I]]);export{V as __pageData,W as default}; diff --git a/assets/zh-CN_advanced_internal.md.6ADIgZra.js b/assets/zh-CN_advanced_internal.md.6ADIgZra.js new file mode 100644 index 0000000..f0de6c0 --- /dev/null +++ b/assets/zh-CN_advanced_internal.md.6ADIgZra.js @@ -0,0 +1,11 @@ +import{_ as i,R as e,l as d,f as a,$ as t,m as n,w as l,a6 as o,a as h}from"./chunks/framework.CtqZpALn.js";const v=JSON.parse('{"title":"内部接口 可选","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/internal.md","filePath":"zh-CN/advanced/internal.md"}'),p={name:"zh-CN/advanced/internal.md"},r={id:"内部接口",tabindex:"-1"},c=a("a",{class:"header-anchor",href:"#内部接口","aria-label":'Permalink to "内部接口 可选"'},"​",-1),k=o(`

TIP

这是一个可选功能。

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

这些原生 API 和事件被统称为内部接口。你可以名为 internal 的路由或事件来访问它们。

API 扩展

SDK 可以通过 /{path}/{version}/internal/{method} 路由代理平台原生 API。通信方式与 HTTP API 类似。返回值与平台返回值一致。

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

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

事件扩展

平台原生事件

SDK 可以通过 internal 事件的 _type_data 属性代理平台原生事件。它的结构如下:

字段类型说明
idnumber事件 ID
typestring事件类型 (固定为 internal)
platformstring接收者的平台名称
self_idstring接收者的平台账号
timestampnumber事件的时间戳
_typestring原生事件类型
_dataobject原生事件数据

标准事件的扩展字段

标准事件的平台原生字段也可以通过上述 _type_data 访问。它的结构如下:

字段类型说明
typestring事件类型 (不应该是 internal)
_typestring平台通用名称
_dataobject原生事件数据
其他字段其他标准事件字段

TIP

有些平台原生事件可以直接对应到标准事件。当这些事件触发时,SDK 可以同时触发标准事件和平台原生事件。这两个事件都带有 _type_data 字段,但这两个字段的值可能是不同的。

消息元素扩展

平台原生消息元素

平台可以提供原生消息元素,但需要加上平台通用名称作为前缀。下面是一个例子:

html
<kook:card size="lg">
+  <kook:countdown end-time="1608819168000"/>
+</kook:card>

标准元素的扩展属性

标准元素的平台原生属性也可以通过加上平台通用名称作为前缀的方式声明。下面是一个例子:

html
<!-- src 是 audio 元素的标准属性。 -->
+<!-- 但 cover 并未标准化,所以需要加前缀。 -->
+<audio src="url1" kook:cover="url2"/>

TIP

平台原生消息元素的属性是否需要前缀由 SDK 实现自行决定。如果某个消息元素希望在未来标准化,那么加上前缀可以降低迁移成本。如果没有标准化需要,那么去掉前缀在书写上更方便。

`,23);function g(u,y,b,m,B,_){const s=e("badge");return h(),d("div",null,[a("h1",r,[t("内部接口 "),n(s,null,{default:l(()=>[t("可选")]),_:1}),t(),c]),k])}const A=i(p,[["render",g]]);export{v as __pageData,A as default}; diff --git a/assets/zh-CN_advanced_internal.md.6ADIgZra.lean.js b/assets/zh-CN_advanced_internal.md.6ADIgZra.lean.js new file mode 100644 index 0000000..98b826a --- /dev/null +++ b/assets/zh-CN_advanced_internal.md.6ADIgZra.lean.js @@ -0,0 +1 @@ +import{_ as i,R as e,l as d,f as a,$ as t,m as n,w as l,a6 as o,a as h}from"./chunks/framework.CtqZpALn.js";const v=JSON.parse('{"title":"内部接口 可选","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/internal.md","filePath":"zh-CN/advanced/internal.md"}'),p={name:"zh-CN/advanced/internal.md"},r={id:"内部接口",tabindex:"-1"},c=a("a",{class:"header-anchor",href:"#内部接口","aria-label":'Permalink to "内部接口 可选"'},"​",-1),k=o("",23);function g(u,y,b,m,B,_){const s=e("badge");return h(),d("div",null,[a("h1",r,[t("内部接口 "),n(s,null,{default:l(()=>[t("可选")]),_:1}),t(),c]),k])}const A=i(p,[["render",g]]);export{v as __pageData,A as default}; diff --git a/assets/zh-CN_advanced_resource.md.R7MZX5XF.js b/assets/zh-CN_advanced_resource.md.R7MZX5XF.js new file mode 100644 index 0000000..12e432c --- /dev/null +++ b/assets/zh-CN_advanced_resource.md.R7MZX5XF.js @@ -0,0 +1,20 @@ +import{_ as t,R as i,l as p,f as a,$ as e,m as o,w as n,a6 as l,a as c}from"./chunks/framework.CtqZpALn.js";const I=JSON.parse('{"title":"资源链接 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/resource.md","filePath":"zh-CN/advanced/resource.md"}'),d={name:"zh-CN/advanced/resource.md"},r={id:"资源链接",tabindex:"-1"},u=a("a",{class:"header-anchor",href:"#资源链接","aria-label":'Permalink to "资源链接 实验性"'},"​",-1),h=a("div",{class:"warning custom-block"},[a("p",{class:"custom-block-title"},"WARNING"),a("p",null,"这是一个实验性功能。")],-1),m=a("h2",{id:"api-upload-create",tabindex:"-1"},[e("文件上传 "),a("a",{class:"header-anchor",href:"#api-upload-create","aria-label":'Permalink to "文件上传 {#api-upload-create}"'},"​")],-1),g={class:"route"},_=a("code",null,"/upload.create",-1),k=l(`

如果要发送的消息中含有图片或其他媒体资源,可以使用此 API 将文件上传至 Satori 服务器并转换为 URL,以便在消息编码中使用。

与其他 API 不同,上传文件的请求体遵循 multipart/form-data 格式。下面是一个示例:

text
POST /v1/upload.create
+Content-Type: multipart/form-data
+Authorization: Bearer 1234567890
+X-Platform: discord
+X-Self-ID: 1234567890
+
+--boundary
+Content-Disposition: form-data; name="foo"; filename="image1.png"
+Content-Type: image/png
+
+binary-data
+--boundary
+Content-Disposition: form-data; name="bar"; filename="image2.gif"
+Content-Type: image/gif
+
+binary-data
+--boundary--

其中,Content-Disposition 中的 name 字段表示文件标识符 (必需且不能重复),filename 字段表示文件名 (可选);Content-Type 表示文件类型 (必需)。

返回值是一个字典类型,其中的每个键分别对应于请求体中的文件标识符,值是一个 URL 字符串,可以在消息编码中使用。下面是一个示例的返回值:

json
{
+  "foo": "upload://temp/z0q9lgqb/3j6emd92-image1.png",
+  "bar": "upload://temp/z0q9lgqb/reacpmeq-image2.gif"
+}

在实现此 API 时,如果平台已经支持了文件上传功能,可以直接使用平台提供的上传 API,返回平台的 URL 即可。如果平台不支持文件上传功能,应当回退到 SDK 提供的默认实现。

SDK 可以基于本地文件系统实现上传功能。上传到本地文件系统中的文件 URL 通过 upload:// 协议进一步代理,且有一定的有效期。各实现可以根据自身情况调整有效期,推荐值为 5 分钟。

内部链接

upload:// 称为内部链接协议,用于代理一些无法直接通过公网访问的资源。

适用场景

上一节中已经提到,在不支持文件上传的平台上调用 upload.create,你将获得内部链接。除此以外,还有一些内部链接的适用场景。

TIP

场景:通过平台 API 请求资源

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

为了避免在不必要的场合损失性能,更推荐的方式是直接将资源 ID 封装进内部链接,并立即构造消息元素。等到真正需要请求资源时再调用平台的 API。

TIP

场景:资源链接不宜直接公开

对于另一些平台,尽管其提供的资源链接是可用的,但这个链接中会明文包含机器人令牌,并非可以公开使用的链接 (例如 Telegram)。因此,对于这些平台中的资源,我们也不能直接使用其链接,同样需要将其封装进内部链接。此时内部链接就是单纯的代理。

不同方案对比

与内部链接相比,另一些实践则是不推荐的。

WARNING

不推荐:data: URL

一种不推荐的方案是直接下载资源,并转换为 data: 链接放入消息元素中。之所以不推荐使用,是因为这种方案有两大致命缺点:

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

WARNING

不推荐:本地代理

另一种方案是由 SDK 额外提供一个用于访问资源的路由 (比如下文介绍的代理路由),并将资源链接转换为能访问到该路由的 URL。这种方案在 Satori 引入内部链接之前是最佳实践,但现在已经不推荐使用了。相比内部链接,这种方案有两个缺点:

  • 这样生成的链接与 Satori 服务器自身的地址耦合,一旦 Satori 服务器更换域名或者端口,过去的链接将全部失效,不利于迁移和跨接等复杂场景;
  • 如果需要扩展其他需要用到资源的逻辑 (比如下载图片到本地),就会导致通过网络自己请求自己,而这些数据原本可以在内存或硬盘中传输,这显然引入了额外的性能损耗。

路由唯一性

SDK 本身和不同的平台适配器都可能实现内部链接,因此我们需要保证内部链接的唯一性。

通常,由适配器实现的内部链接需要以 upload://{platform}/{self_id}/ 开头,确保各个登录号所使用的资源不会冲突。由 SDK 自身实现的内部链接相对没有那么严格,但通常还需要在链接中加入每个实例的唯一标识,以避免跨接过程中的混淆。

无论是适配器还是 SDK 实现的内部链接,都应当将所占用的路由写入 login.proxy_urls

`,22),b={id:"proxy-route",tabindex:"-1"},f=a("a",{class:"header-anchor",href:"#proxy-route","aria-label":'Permalink to "代理路由 可选 {#proxy-route}"'},"​",-1),q=l('

TIP

这是一个可选功能。

假设你在开发基于 Satori 的聊天平台客户端,你希望可以直接将 Satori 协议中给出的资源链接用于 HTML,但很多情况下你都难以如愿:

  1. 该资源链接由平台生成,且含有防盗链机制,无法在跨域请求中访问;
  2. 该资源链接是一个内部链接,无法在 HTML 中直接访问。

为此,SDK 需要额外提供一个代理路由 /{path}/{version}/proxy/{url},用于访问这些资源链接。这个路由下只接受 GET 请求,且不需要 X-PlatformX-Self-ID 请求头。

下面是一个典型的代理路由请求示例:

text
GET /v1/proxy/upload://temp/z0q9lgqb/3j6emd92-image1.png

在具体的应用场景中,代理路由可根据需要添加 Access-Control-Allow-Origin 等响应头,以限制或允许跨域请求。

为了辨别需要代理的路径以防滥用,Satori 还引入了 login.proxy_urls 属性。这个属性标注了一个登录号所可能需要代理的资源链接前缀,应用侧可以根据这个属性来判断是否需要代理。

根据 url 的不同形式,SDK 提供的代理路由会有不同的行为:

  • 如果 url 不是合法的 URL,会直接返回 400;
  • 如果 url 不以任何一个 login.proxy_urls 中的前缀开头,会直接返回 403;
  • 如果 url 是一个内部链接,会由该内部链接的实现决定如何提供此资源 (可能的方式包括返回数据、重定向以及资源无法访问的报错);
  • 如果 url 是一个外部链接 (即不以 upload:// 开头的链接),会在 SDK 侧下载该资源并返回 (通常使用流式传输)。

最佳实践

综上所述,我们总结出了一套关于资源链接的最佳实践:

对于 SDK 开发者,你需要:

  1. 提供 REGISTER_UPLOAD_ROUTE 方法用于注册内部链接路由,以便适配器实现;
  2. 提供 DOWNLOAD_URL 方法用于将一个链接下载为数据,无论其是否为内部链接;
  3. 基于本地文件系统实现内置的 upload.create API;
  4. 基于上述 DOWNLOAD_URL 方法实现代理路由。

对于适配器开发者,你需要:

  1. 如果需要使用内部链接 (参见下一条):调用 REGISTER_UPLOAD_ROUTE 方法注册相应的路由;
  2. 接收事件推送时:如果收到的资源链接符合内部链接的适用场景,将它们转化为内部链接;
  3. 发送消息时:根据平台行为和资源链接的形式,合理选择下载和发送资源的方式;
  4. 如果平台支持文件上传:实现 upload.create API,覆盖 SDK 的默认实现。
',16);function v(y,P,S,C,T,A){const s=i("badge");return c(),p("div",null,[a("h1",r,[e("资源链接 "),o(s,{type:"warning"},{default:n(()=>[e("实验性")]),_:1}),e(),u]),h,m,a("blockquote",g,[o(s,null,{default:n(()=>[e("POST")]),_:1}),_]),k,a("h2",b,[e("代理路由 "),o(s,null,{default:n(()=>[e("可选")]),_:1}),e(),f]),q])}const x=t(d,[["render",v]]);export{I as __pageData,x as default}; diff --git a/assets/zh-CN_advanced_resource.md.R7MZX5XF.lean.js b/assets/zh-CN_advanced_resource.md.R7MZX5XF.lean.js new file mode 100644 index 0000000..32f10d1 --- /dev/null +++ b/assets/zh-CN_advanced_resource.md.R7MZX5XF.lean.js @@ -0,0 +1 @@ +import{_ as t,R as i,l as p,f as a,$ as e,m as o,w as n,a6 as l,a as c}from"./chunks/framework.CtqZpALn.js";const I=JSON.parse('{"title":"资源链接 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/resource.md","filePath":"zh-CN/advanced/resource.md"}'),d={name:"zh-CN/advanced/resource.md"},r={id:"资源链接",tabindex:"-1"},u=a("a",{class:"header-anchor",href:"#资源链接","aria-label":'Permalink to "资源链接 实验性"'},"​",-1),h=a("div",{class:"warning custom-block"},[a("p",{class:"custom-block-title"},"WARNING"),a("p",null,"这是一个实验性功能。")],-1),m=a("h2",{id:"api-upload-create",tabindex:"-1"},[e("文件上传 "),a("a",{class:"header-anchor",href:"#api-upload-create","aria-label":'Permalink to "文件上传 {#api-upload-create}"'},"​")],-1),g={class:"route"},_=a("code",null,"/upload.create",-1),k=l("",22),b={id:"proxy-route",tabindex:"-1"},f=a("a",{class:"header-anchor",href:"#proxy-route","aria-label":'Permalink to "代理路由 可选 {#proxy-route}"'},"​",-1),q=l("",16);function v(y,P,S,C,T,A){const s=i("badge");return c(),p("div",null,[a("h1",r,[e("资源链接 "),o(s,{type:"warning"},{default:n(()=>[e("实验性")]),_:1}),e(),u]),h,m,a("blockquote",g,[o(s,null,{default:n(()=>[e("POST")]),_:1}),_]),k,a("h2",b,[e("代理路由 "),o(s,null,{default:n(()=>[e("可选")]),_:1}),e(),f]),q])}const x=t(d,[["render",v]]);export{I as __pageData,x as default}; diff --git a/assets/zh-CN_index.md.CdCe0MIX.js b/assets/zh-CN_index.md.CdCe0MIX.js new file mode 100644 index 0000000..af78ccd --- /dev/null +++ b/assets/zh-CN_index.md.CdCe0MIX.js @@ -0,0 +1 @@ +import{_ as e,l as t,a}from"./chunks/framework.CtqZpALn.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"}'),r={name:"zh-CN/index.md"};function n(o,i,s,c,d,m){return a(),t("div")}const l=e(r,[["render",n]]);export{h as __pageData,l as default}; diff --git a/assets/zh-CN_index.md.CdCe0MIX.lean.js b/assets/zh-CN_index.md.CdCe0MIX.lean.js new file mode 100644 index 0000000..af78ccd --- /dev/null +++ b/assets/zh-CN_index.md.CdCe0MIX.lean.js @@ -0,0 +1 @@ +import{_ as e,l as t,a}from"./chunks/framework.CtqZpALn.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"}'),r={name:"zh-CN/index.md"};function n(o,i,s,c,d,m){return a(),t("div")}const l=e(r,[["render",n]]);export{h as __pageData,l as default}; diff --git a/assets/zh-CN_introduction.md.k_naDUjk.js b/assets/zh-CN_introduction.md.k_naDUjk.js new file mode 100644 index 0000000..1ece4a4 --- /dev/null +++ b/assets/zh-CN_introduction.md.k_naDUjk.js @@ -0,0 +1 @@ +import{_ as a,l as t,a as r,a6 as e}from"./chunks/framework.CtqZpALn.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=e('

介绍

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 r(),t("div",null,i)}const m=a(s,[["render",c]]);export{u as __pageData,m as default}; diff --git a/assets/zh-CN_introduction.md.k_naDUjk.lean.js b/assets/zh-CN_introduction.md.k_naDUjk.lean.js new file mode 100644 index 0000000..c1e92ea --- /dev/null +++ b/assets/zh-CN_introduction.md.k_naDUjk.lean.js @@ -0,0 +1 @@ +import{_ as a,l as t,a as r,a6 as e}from"./chunks/framework.CtqZpALn.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=e("",8),i=[o];function c(p,d,l,n,_,h){return r(),t("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.B6RT9T-b.js b/assets/zh-CN_protocol_api.md.B6RT9T-b.js new file mode 100644 index 0000000..992d162 --- /dev/null +++ b/assets/zh-CN_protocol_api.md.B6RT9T-b.js @@ -0,0 +1,7 @@ +import{_ as o,R as c,l as r,f as t,$ as e,m as s,w as i,a6 as a,a as n}from"./chunks/framework.CtqZpALn.js";const v=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/api.md","filePath":"zh-CN/protocol/api.md"}'),l={name:"zh-CN/protocol/api.md"},p=a(`

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 格式。作为特例,具有 文件上传 功能的 API 使用 multipart/form-data 编码。

请求头中需要包含 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"}

鉴权

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

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

状态码

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

TIP

如果某个标准 API 没有被某个平台支持,则应该返回 404 而非 501 (NOT IMPLEMENTED)。

`,15),h={id:"平台特性",tabindex:"-1"},u=t("a",{class:"header-anchor",href:"#平台特性","aria-label":'Permalink to "平台特性 实验性"'},"​",-1),P=a('

Login 对象中的 features 字段是一个字符串数组,用于表示平台的特性。这些特性可以用于判断平台是否支持某些 API。合法的平台特性包括:

  • API 可用性,如特性 message.delete 表示支持使用 message.delete 撤回消息。
  • API 额外特性,如特性 message.list.from 表示使用 message.list 查询消息列表时支持将消息 ID 作为分页令牌。
  • 平台额外特性,如特性 guild.plain 表示该平台的群组内只能存在一个消息频道。

目前仅有 API 名称本身是规范的用法。我们将在后续版本中提供更全面的标准特性列表。

分页列表

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

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

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

双向分页列表

极少数 API 返回可双向延伸的分页数据。这种情况下,响应会是一个 BidiList 对象:

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

在对应的 API 中,你可以通过 directionorder 参数来指定方向和排序。

direction 参数有三种不同的取值:

  • before:向前获取数据,此时 prevnext 相同,均表示上一页的令牌。
  • after:向后获取数据,此时 prevnext 相同,均表示下一页的令牌。
  • around:向两侧获取数据,此时 prev 表示上一页的令牌,next 表示下一页的令牌。

如果 prevnext 缺失,则表示在该方向上没有更多数据了。

order 参数有两种不同的取值:

  • asc:升序排列。
  • desc:降序排列。

进阶 API

除了标准 API 外,Satori 还提供了一些进阶功能。

  • /{path}/{version}/proxy 的子路由用于代理平台资源,请参见 资源文件
  • /{path}/{version}/admin 的子路由用于访问 SDK 相关接口,请参见 管理 API
  • /{path}/{version}/internal 的子路由用于访问平台内部接口,请参见 内部 API
',19);function m(_,b,A,I,f,T){const d=c("badge");return n(),r("div",null,[p,t("h3",h,[e("平台特性 "),s(d,{type:"warning"},{default:i(()=>[e("实验性")]),_:1}),e(),u]),P])}const x=o(l,[["render",m]]);export{v as __pageData,x as default}; diff --git a/assets/zh-CN_protocol_api.md.B6RT9T-b.lean.js b/assets/zh-CN_protocol_api.md.B6RT9T-b.lean.js new file mode 100644 index 0000000..54c3e33 --- /dev/null +++ b/assets/zh-CN_protocol_api.md.B6RT9T-b.lean.js @@ -0,0 +1 @@ +import{_ as o,R as c,l as r,f as t,$ as e,m as s,w as i,a6 as a,a as n}from"./chunks/framework.CtqZpALn.js";const v=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/api.md","filePath":"zh-CN/protocol/api.md"}'),l={name:"zh-CN/protocol/api.md"},p=a("",15),h={id:"平台特性",tabindex:"-1"},u=t("a",{class:"header-anchor",href:"#平台特性","aria-label":'Permalink to "平台特性 实验性"'},"​",-1),P=a("",19);function m(_,b,A,I,f,T){const d=c("badge");return n(),r("div",null,[p,t("h3",h,[e("平台特性 "),s(d,{type:"warning"},{default:i(()=>[e("实验性")]),_:1}),e(),u]),P])}const x=o(l,[["render",m]]);export{v as __pageData,x as default}; diff --git a/assets/zh-CN_protocol_elements.md.d9OkxSqX.js b/assets/zh-CN_protocol_elements.md.d9OkxSqX.js new file mode 100644 index 0000000..a1549a3 --- /dev/null +++ b/assets/zh-CN_protocol_elements.md.d9OkxSqX.js @@ -0,0 +1,17 @@ +import{_ as h,R as l,l as n,f as t,$ as i,m as s,w as e,a6 as d,a as r}from"./chunks/framework.CtqZpALn.js";const I=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"},p=d('

标准元素

基础元素

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

纯文本

一段纯文本。

提及用户 (at)

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

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

提及频道 (sharp)

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

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

链接 (a)

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

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

资源元素

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

',16),k=t("thead",null,[t("tr",null,[t("th",null,"属性"),t("th",null,"类型"),t("th",null,"范围"),t("th",null,"描述")])],-1),c=t("tr",null,[t("td",null,"src"),t("td",null,"string"),t("td",null,"收发"),t("td",null,"资源的 URL")],-1),g=t("tr",null,[t("td",null,"title"),t("td",null,"string?"),t("td",null,"收发"),t("td",null,"资源文件名称")],-1),u=t("td",null,"boolean?",-1),y=t("td",null,"发",-1),b=t("td",null,"是否使用已缓存的文件",-1),B=t("td",null,"string?",-1),m=t("td",null,"发",-1),f=t("td",null,"下载文件的最长时间 (毫秒)",-1),q=d(`

图片 (img)

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

属性类型范围描述
widthnumber?图片宽度 (像素)
heightnumber?图片高度 (像素)

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

音频 (audio)

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

属性类型范围描述
durationnumber?音频长度 (秒)
posterstring?收发音频封面 URL

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

视频 (video)

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

属性类型范围描述
widthnumber?视频宽度 (像素)
heightnumber?视频高度 (像素)
durationnumber?视频长度 (秒)
posterstring?收发视频封面 URL

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

文件 (file)

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

属性类型范围描述
posterstring?收发缩略图 URL

<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 id="123123123" name="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 id="123123123" name="Alice" avatar="url"/>
+    hello world
+  </message>
+</message>

元信息元素

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

引用 (quote)

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

作者 (author)

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

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

交互元素

交互元素用于显然消息中的可交互性内容。如果平台不支持此类元素且难以提供回退,可以直接忽略整个元素。实现侧应当根据平台特性,针对性地返回带有交互和不带有交互的消息。

`,59),_={id:"button",tabindex:"-1"},A=t("a",{class:"header-anchor",href:"#button","aria-label":'Permalink to "按钮 (button) 实验性 {#button}"'},"​",-1),E=d("
属性类型范围描述
idstring?按钮的 ID
typestring?按钮的类型
hrefstring?按钮的链接
textstring?待输入文本
themestring?按钮的样式

<button> 元素用于表示一个按钮。它的子元素会被渲染为按钮的文本。

按钮目前支持三种不同的类型:

  • 点击 action 类型的按钮时会触发一个 interaction/button 事件,该事件的 button 资源会包含上述 id
  • 点击 link 类型的按钮时会打开一个链接,该链接的地址为上述 href
  • 点击 input 类型的按钮时会在用户的输入框中填充上述 text

theme 仅建议使用下列值:

  • primary
  • secondary
  • success
  • warning
  • danger
  • info
",6);function F(C,D,x,P,v,w){const a=l("badge");return r(),n("div",null,[p,t("table",null,[k,t("tbody",null,[c,g,t("tr",null,[t("td",null,[i("cache "),s(a,{type:"warning"},{default:e(()=>[i("实验性")]),_:1})]),u,y,b]),t("tr",null,[t("td",null,[i("timeout "),s(a,{type:"warning"},{default:e(()=>[i("实验性")]),_:1})]),B,m,f])])]),q,t("h3",_,[i("按钮 (button) "),s(a,{type:"warning"},{default:e(()=>[i("实验性")]),_:1}),i(),A]),E])}const N=h(o,[["render",F]]);export{I as __pageData,N as default}; diff --git a/assets/zh-CN_protocol_elements.md.d9OkxSqX.lean.js b/assets/zh-CN_protocol_elements.md.d9OkxSqX.lean.js new file mode 100644 index 0000000..2c0954e --- /dev/null +++ b/assets/zh-CN_protocol_elements.md.d9OkxSqX.lean.js @@ -0,0 +1 @@ +import{_ as h,R as l,l as n,f as t,$ as i,m as s,w as e,a6 as d,a as r}from"./chunks/framework.CtqZpALn.js";const I=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"},p=d("",16),k=t("thead",null,[t("tr",null,[t("th",null,"属性"),t("th",null,"类型"),t("th",null,"范围"),t("th",null,"描述")])],-1),c=t("tr",null,[t("td",null,"src"),t("td",null,"string"),t("td",null,"收发"),t("td",null,"资源的 URL")],-1),g=t("tr",null,[t("td",null,"title"),t("td",null,"string?"),t("td",null,"收发"),t("td",null,"资源文件名称")],-1),u=t("td",null,"boolean?",-1),y=t("td",null,"发",-1),b=t("td",null,"是否使用已缓存的文件",-1),B=t("td",null,"string?",-1),m=t("td",null,"发",-1),f=t("td",null,"下载文件的最长时间 (毫秒)",-1),q=d("",59),_={id:"button",tabindex:"-1"},A=t("a",{class:"header-anchor",href:"#button","aria-label":'Permalink to "按钮 (button) 实验性 {#button}"'},"​",-1),E=d("",6);function F(C,D,x,P,v,w){const a=l("badge");return r(),n("div",null,[p,t("table",null,[k,t("tbody",null,[c,g,t("tr",null,[t("td",null,[i("cache "),s(a,{type:"warning"},{default:e(()=>[i("实验性")]),_:1})]),u,y,b]),t("tr",null,[t("td",null,[i("timeout "),s(a,{type:"warning"},{default:e(()=>[i("实验性")]),_:1})]),B,m,f])])]),q,t("h3",_,[i("按钮 (button) "),s(a,{type:"warning"},{default:e(()=>[i("实验性")]),_:1}),i(),A]),E])}const N=h(o,[["render",F]]);export{I as __pageData,N as default}; diff --git a/assets/zh-CN_protocol_events.md.DyRiGfhF.js b/assets/zh-CN_protocol_events.md.DyRiGfhF.js new file mode 100644 index 0000000..f576b52 --- /dev/null +++ b/assets/zh-CN_protocol_events.md.DyRiGfhF.js @@ -0,0 +1 @@ +import{_ as a,R as r,l as c,f as e,$ as t,m as h,w as s,a6 as d,a as l}from"./chunks/framework.CtqZpALn.js";const D=JSON.parse('{"title":"事件","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/events.md","filePath":"zh-CN/protocol/events.md"}'),n={name:"zh-CN/protocol/events.md"},i=d('

事件

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

类型定义

Event

字段类型描述
idnumber事件 ID
typestring事件类型
platformstring接收者的平台名称
self_idstring接收者的平台账号
timestampnumber事件的时间戳
argvArgv?交互指令
buttonButton?交互按钮
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,g,v){const o=r("badge");return l(),c("div",null,[i,e("h2",b,[t("WebHook "),h(o,null,{default:s(()=>[t("可选")]),_:1}),t(),p]),u])}const P=a(n,[["render",m]]);export{D as __pageData,P as default}; diff --git a/assets/zh-CN_protocol_events.md.DyRiGfhF.lean.js b/assets/zh-CN_protocol_events.md.DyRiGfhF.lean.js new file mode 100644 index 0000000..e01ef82 --- /dev/null +++ b/assets/zh-CN_protocol_events.md.DyRiGfhF.lean.js @@ -0,0 +1 @@ +import{_ as a,R as r,l as c,f as e,$ as t,m as h,w as s,a6 as d,a as l}from"./chunks/framework.CtqZpALn.js";const D=JSON.parse('{"title":"事件","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/events.md","filePath":"zh-CN/protocol/events.md"}'),n={name:"zh-CN/protocol/events.md"},i=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,g,v){const o=r("badge");return l(),c("div",null,[i,e("h2",b,[t("WebHook "),h(o,null,{default:s(()=>[t("可选")]),_:1}),t(),p]),u])}const P=a(n,[["render",m]]);export{D as __pageData,P as default}; diff --git a/assets/zh-CN_protocol_index.md.BCJ5lIZZ.js b/assets/zh-CN_protocol_index.md.BCJ5lIZZ.js new file mode 100644 index 0000000..b7719e0 --- /dev/null +++ b/assets/zh-CN_protocol_index.md.BCJ5lIZZ.js @@ -0,0 +1 @@ +import{_ as e,l as o,a,a6 as r}from"./chunks/framework.CtqZpALn.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 a(),o("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.BCJ5lIZZ.lean.js b/assets/zh-CN_protocol_index.md.BCJ5lIZZ.lean.js new file mode 100644 index 0000000..30c5395 --- /dev/null +++ b/assets/zh-CN_protocol_index.md.BCJ5lIZZ.lean.js @@ -0,0 +1 @@ +import{_ as e,l as o,a,a6 as r}from"./chunks/framework.CtqZpALn.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 a(),o("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.fglB_YNF.js b/assets/zh-CN_protocol_message.md.fglB_YNF.js new file mode 100644 index 0000000..ff71789 --- /dev/null +++ b/assets/zh-CN_protocol_message.md.fglB_YNF.js @@ -0,0 +1,7 @@ +import{_ as t,l as i,a as s,a6 as a}from"./chunks/framework.CtqZpALn.js";const y=JSON.parse('{"title":"消息编码","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/message.md","filePath":"zh-CN/protocol/message.md"}'),e={name:"zh-CN/protocol/message.md"},l=a(`

消息编码

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>

注释

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

标准元素

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

`,28),h=[l];function n(o,d,p,k,r,c){return s(),i("div",null,h)}const B=t(e,[["render",n]]);export{y as __pageData,B as default}; diff --git a/assets/zh-CN_protocol_message.md.fglB_YNF.lean.js b/assets/zh-CN_protocol_message.md.fglB_YNF.lean.js new file mode 100644 index 0000000..97b32d4 --- /dev/null +++ b/assets/zh-CN_protocol_message.md.fglB_YNF.lean.js @@ -0,0 +1 @@ +import{_ as t,l as i,a as s,a6 as a}from"./chunks/framework.CtqZpALn.js";const y=JSON.parse('{"title":"消息编码","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/message.md","filePath":"zh-CN/protocol/message.md"}'),e={name:"zh-CN/protocol/message.md"},l=a("",28),h=[l];function n(o,d,p,k,r,c){return s(),i("div",null,h)}const B=t(e,[["render",n]]);export{y as __pageData,B as default}; diff --git a/assets/zh-CN_resources_channel.md.BrK2DrWx.js b/assets/zh-CN_resources_channel.md.BrK2DrWx.js new file mode 100644 index 0000000..d7f1ad3 --- /dev/null +++ b/assets/zh-CN_resources_channel.md.BrK2DrWx.js @@ -0,0 +1 @@ +import{_ as l,R as r,l as o,f as t,m as d,w as h,$ as e,a6 as n,a as _}from"./chunks/framework.CtqZpALn.js";const j=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=n('

频道 (Channel)

类型定义

Channel

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

Channel.Type

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

API

获取群组频道

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

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

获取群组频道列表

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

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

创建群组频道

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

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

修改群组频道

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

修改群组频道。

删除群组频道

',3),y={class:"route"},A=t("code",null,"/channel.delete",-1),g=t("table",null,[t("thead",null,[t("tr",null,[t("th",null,"字段"),t("th",null,"类型"),t("th",null,"描述")])]),t("tbody",null,[t("tr",null,[t("td",null,"channel_id"),t("td",null,"string"),t("td",null,"频道 ID")])])],-1),k=t("p",null,"删除群组频道。",-1),D={id:"禁言群组频道",tabindex:"-1"},V=t("a",{class:"header-anchor",href:"#禁言群组频道","aria-label":'Permalink to "禁言群组频道 实验性"'},"​",-1),x={class:"route"},N=t("code",null,"/channel.mute",-1),E=n('
字段类型描述
channel_idstring频道 ID
durationnumber禁言时长 (毫秒)

禁言群组频道。如果传入的禁言时长为 0 则表示解除禁言。

创建私聊频道

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

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

',2);function w(v,z,B,G,J,X){const a=r("badge");return _(),o("div",null,[c,t("blockquote",i,[d(a,null,{default:h(()=>[e("POST")]),_:1}),u]),b,t("blockquote",T,[d(a,null,{default:h(()=>[e("POST")]),_:1}),p]),f,t("blockquote",P,[d(a,null,{default:h(()=>[e("POST")]),_:1}),C]),S,t("blockquote",q,[d(a,null,{default:h(()=>[e("POST")]),_:1}),I]),m,t("blockquote",y,[d(a,null,{default:h(()=>[e("POST")]),_:1}),A]),g,k,t("h3",D,[e("禁言群组频道 "),d(a,{type:"warning"},{default:h(()=>[e("实验性")]),_:1}),e(),V]),t("blockquote",x,[d(a,null,{default:h(()=>[e("POST")]),_:1}),N]),E,t("blockquote",O,[d(a,null,{default:h(()=>[e("POST")]),_:1}),R]),$])}const F=l(s,[["render",w]]);export{j as __pageData,F as default}; diff --git a/assets/zh-CN_resources_channel.md.BrK2DrWx.lean.js b/assets/zh-CN_resources_channel.md.BrK2DrWx.lean.js new file mode 100644 index 0000000..bfe82de --- /dev/null +++ b/assets/zh-CN_resources_channel.md.BrK2DrWx.lean.js @@ -0,0 +1 @@ +import{_ as l,R as r,l as o,f as t,m as d,w as h,$ as e,a6 as n,a as _}from"./chunks/framework.CtqZpALn.js";const j=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=n("",8),i={class:"route"},u=t("code",null,"/channel.get",-1),b=n("",3),T={class:"route"},p=t("code",null,"/channel.list",-1),f=n("",3),P={class:"route"},C=t("code",null,"/channel.create",-1),S=n("",3),q={class:"route"},I=t("code",null,"/channel.update",-1),m=n("",3),y={class:"route"},A=t("code",null,"/channel.delete",-1),g=t("table",null,[t("thead",null,[t("tr",null,[t("th",null,"字段"),t("th",null,"类型"),t("th",null,"描述")])]),t("tbody",null,[t("tr",null,[t("td",null,"channel_id"),t("td",null,"string"),t("td",null,"频道 ID")])])],-1),k=t("p",null,"删除群组频道。",-1),D={id:"禁言群组频道",tabindex:"-1"},V=t("a",{class:"header-anchor",href:"#禁言群组频道","aria-label":'Permalink to "禁言群组频道 实验性"'},"​",-1),x={class:"route"},N=t("code",null,"/channel.mute",-1),E=n("",3),O={class:"route"},R=t("code",null,"/user.channel.create",-1),$=n("",2);function w(v,z,B,G,J,X){const a=r("badge");return _(),o("div",null,[c,t("blockquote",i,[d(a,null,{default:h(()=>[e("POST")]),_:1}),u]),b,t("blockquote",T,[d(a,null,{default:h(()=>[e("POST")]),_:1}),p]),f,t("blockquote",P,[d(a,null,{default:h(()=>[e("POST")]),_:1}),C]),S,t("blockquote",q,[d(a,null,{default:h(()=>[e("POST")]),_:1}),I]),m,t("blockquote",y,[d(a,null,{default:h(()=>[e("POST")]),_:1}),A]),g,k,t("h3",D,[e("禁言群组频道 "),d(a,{type:"warning"},{default:h(()=>[e("实验性")]),_:1}),e(),V]),t("blockquote",x,[d(a,null,{default:h(()=>[e("POST")]),_:1}),N]),E,t("blockquote",O,[d(a,null,{default:h(()=>[e("POST")]),_:1}),R]),$])}const F=l(s,[["render",w]]);export{j as __pageData,F as default}; diff --git a/assets/zh-CN_resources_guild.md.D4GWzdfJ.js b/assets/zh-CN_resources_guild.md.D4GWzdfJ.js new file mode 100644 index 0000000..62711e5 --- /dev/null +++ b/assets/zh-CN_resources_guild.md.D4GWzdfJ.js @@ -0,0 +1 @@ +import{_ as l,R as i,l as h,f as t,m as a,w as r,a6 as d,a as s,$ as o}from"./chunks/framework.CtqZpALn.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),f=d('
字段类型描述
message_idstring请求 ID
approveboolean是否通过请求
commentstring备注信息

处理来自群组的邀请。

事件

guild-added

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

guild-updated

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

guild-removed

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

guild-request

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

',11);function P(x,k,S,A,I,C){const e=i("badge");return s(),h("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]),f])}const v=l(u,[["render",P]]);export{V as __pageData,v as default}; diff --git a/assets/zh-CN_resources_guild.md.D4GWzdfJ.lean.js b/assets/zh-CN_resources_guild.md.D4GWzdfJ.lean.js new file mode 100644 index 0000000..03cc9ba --- /dev/null +++ b/assets/zh-CN_resources_guild.md.D4GWzdfJ.lean.js @@ -0,0 +1 @@ +import{_ as l,R as i,l as h,f as t,m as a,w as r,a6 as d,a as s,$ as o}from"./chunks/framework.CtqZpALn.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),f=d("",11);function P(x,k,S,A,I,C){const e=i("badge");return s(),h("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]),f])}const v=l(u,[["render",P]]);export{V as __pageData,v as default}; diff --git a/assets/zh-CN_resources_interaction.md.B4bO94AM.js b/assets/zh-CN_resources_interaction.md.B4bO94AM.js new file mode 100644 index 0000000..08b263d --- /dev/null +++ b/assets/zh-CN_resources_interaction.md.B4bO94AM.js @@ -0,0 +1 @@ +import{_ as o,R as r,l as n,f as a,$ as t,m as d,w as i,a6 as c,a as s}from"./chunks/framework.CtqZpALn.js";const v=JSON.parse('{"title":"交互 (Interaction) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/interaction.md","filePath":"zh-CN/resources/interaction.md"}'),h={name:"zh-CN/resources/interaction.md"},l={id:"交互",tabindex:"-1"},b=a("a",{class:"header-anchor",href:"#交互","aria-label":'Permalink to "交互 (Interaction) 实验性"'},"​",-1),u=c('

TIP

交互功能主要通过机器人提供,并由用户在聊天应用中触发。如果你要实现或接入的聊天平台不支持机器人相关功能,那么可以直接忽略本节。

类型定义

Argv

字段类型描述
namestring指令名称
argumentsany[]参数
optionsobject选项

Button

字段类型描述
idstring按钮 ID

事件

interaction/button

类型为 action 的按钮被点击时触发。必需资源:button

interaction/command

调用斜线指令时触发。资源 argvmessage 中至少包含其一。

TIP

许多平台都支持斜线指令,但它们的实现方式各不相同。如果平台的斜线指令仅仅提供在前端,机器人无法直接判断一个事件是否为斜线指令调用,那么直接实现为普通消息事件即可。

',12);function m(_,p,f,g,k,P){const e=r("badge");return s(),n("div",null,[a("h1",l,[t("交互 (Interaction) "),d(e,{type:"warning"},{default:i(()=>[t("实验性")]),_:1}),t(),b]),u])}const x=o(h,[["render",m]]);export{v as __pageData,x as default}; diff --git a/assets/zh-CN_resources_interaction.md.B4bO94AM.lean.js b/assets/zh-CN_resources_interaction.md.B4bO94AM.lean.js new file mode 100644 index 0000000..0f0957c --- /dev/null +++ b/assets/zh-CN_resources_interaction.md.B4bO94AM.lean.js @@ -0,0 +1 @@ +import{_ as o,R as r,l as n,f as a,$ as t,m as d,w as i,a6 as c,a as s}from"./chunks/framework.CtqZpALn.js";const v=JSON.parse('{"title":"交互 (Interaction) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/interaction.md","filePath":"zh-CN/resources/interaction.md"}'),h={name:"zh-CN/resources/interaction.md"},l={id:"交互",tabindex:"-1"},b=a("a",{class:"header-anchor",href:"#交互","aria-label":'Permalink to "交互 (Interaction) 实验性"'},"​",-1),u=c("",12);function m(_,p,f,g,k,P){const e=r("badge");return s(),n("div",null,[a("h1",l,[t("交互 (Interaction) "),d(e,{type:"warning"},{default:i(()=>[t("实验性")]),_:1}),t(),b]),u])}const x=o(h,[["render",m]]);export{v as __pageData,x as default}; diff --git a/assets/zh-CN_resources_login.md.BtKO-X7t.js b/assets/zh-CN_resources_login.md.BtKO-X7t.js new file mode 100644 index 0000000..a940385 --- /dev/null +++ b/assets/zh-CN_resources_login.md.BtKO-X7t.js @@ -0,0 +1 @@ +import{_ as d,R as o,l as r,f as t,m as i,w as l,a6 as a,a as n,$ as h}from"./chunks/framework.CtqZpALn.js";const T=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登录状态
featuresstring[]平台特性 列表
proxy_urlsstring[]代理路由 列表

Status

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

API

获取登录信息

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

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

事件

login-added

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

login-removed

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

login-updated

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

',8);function p(b,m,f,q,N,P){const e=o("badge");return n(),r("div",null,[c,t("blockquote",u,[i(e,null,{default:l(()=>[h("POST")]),_:1}),_]),g])}const C=d(s,[["render",p]]);export{T as __pageData,C as default}; diff --git a/assets/zh-CN_resources_login.md.BtKO-X7t.lean.js b/assets/zh-CN_resources_login.md.BtKO-X7t.lean.js new file mode 100644 index 0000000..940a848 --- /dev/null +++ b/assets/zh-CN_resources_login.md.BtKO-X7t.lean.js @@ -0,0 +1 @@ +import{_ as d,R as o,l as r,f as t,m as i,w as l,a6 as a,a as n,$ as h}from"./chunks/framework.CtqZpALn.js";const T=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),u={class:"route"},_=t("code",null,"/login.get",-1),g=a("",8);function p(b,m,f,q,N,P){const e=o("badge");return n(),r("div",null,[c,t("blockquote",u,[i(e,null,{default:l(()=>[h("POST")]),_:1}),_]),g])}const C=d(s,[["render",p]]);export{T as __pageData,C as default}; diff --git a/assets/zh-CN_resources_member.md.CXr0_r_0.js b/assets/zh-CN_resources_member.md.CXr0_r_0.js new file mode 100644 index 0000000..aafa0d9 --- /dev/null +++ b/assets/zh-CN_resources_member.md.CXr0_r_0.js @@ -0,0 +1 @@ +import{_ as l,R as i,l as h,f as t,m as a,w as r,$ as e,a6 as o,a as s}from"./chunks/framework.CtqZpALn.js";const O=JSON.parse('{"title":"群组成员 (GuildMember)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/member.md","filePath":"zh-CN/resources/member.md"}'),_={name:"zh-CN/resources/member.md"},u=o('

群组成员 (GuildMember)

类型定义

GuildMember

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

API

获取群组成员

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

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

获取群组成员列表

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

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

踢出群组成员

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

将某个用户踢出群组。

",2),f={id:"禁言群组成员",tabindex:"-1"},S=t("a",{class:"header-anchor",href:"#禁言群组成员","aria-label":'Permalink to "禁言群组成员 实验性"'},"​",-1),k={class:"route"},I=t("code",null,"/guild.member.mute",-1),x=o('
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID
durationnumber禁言时长 (毫秒)

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

通过群组成员申请

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

处理加群请求。

事件

guild-member-added

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

guild-member-updated

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

guild-member-removed

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

guild-member-request

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

',11);function D(y,N,v,E,G,M){const d=i("badge");return s(),h("div",null,[u,t("blockquote",n,[a(d,null,{default:r(()=>[e("POST")]),_:1}),c]),m,t("blockquote",b,[a(d,null,{default:r(()=>[e("POST")]),_:1}),g]),p,t("blockquote",T,[a(d,null,{default:r(()=>[e("POST")]),_:1}),q]),P,t("h3",f,[e("禁言群组成员 "),a(d,{type:"warning"},{default:r(()=>[e("实验性")]),_:1}),e(),S]),t("blockquote",k,[a(d,null,{default:r(()=>[e("POST")]),_:1}),I]),x,t("blockquote",A,[a(d,null,{default:r(()=>[e("POST")]),_:1}),C]),V])}const $=l(_,[["render",D]]);export{O as __pageData,$ as default}; diff --git a/assets/zh-CN_resources_member.md.CXr0_r_0.lean.js b/assets/zh-CN_resources_member.md.CXr0_r_0.lean.js new file mode 100644 index 0000000..d91ff1e --- /dev/null +++ b/assets/zh-CN_resources_member.md.CXr0_r_0.lean.js @@ -0,0 +1 @@ +import{_ as l,R as i,l as h,f as t,m as a,w as r,$ as e,a6 as o,a as s}from"./chunks/framework.CtqZpALn.js";const O=JSON.parse('{"title":"群组成员 (GuildMember)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/member.md","filePath":"zh-CN/resources/member.md"}'),_={name:"zh-CN/resources/member.md"},u=o("",6),n={class:"route"},c=t("code",null,"/guild.member.get",-1),m=o("",3),b={class:"route"},g=t("code",null,"/guild.member.list",-1),p=o("",3),T={class:"route"},q=t("code",null,"/guild.member.kick",-1),P=o("",2),f={id:"禁言群组成员",tabindex:"-1"},S=t("a",{class:"header-anchor",href:"#禁言群组成员","aria-label":'Permalink to "禁言群组成员 实验性"'},"​",-1),k={class:"route"},I=t("code",null,"/guild.member.mute",-1),x=o("",3),A={class:"route"},C=t("code",null,"/guild.member.approve",-1),V=o("",11);function D(y,N,v,E,G,M){const d=i("badge");return s(),h("div",null,[u,t("blockquote",n,[a(d,null,{default:r(()=>[e("POST")]),_:1}),c]),m,t("blockquote",b,[a(d,null,{default:r(()=>[e("POST")]),_:1}),g]),p,t("blockquote",T,[a(d,null,{default:r(()=>[e("POST")]),_:1}),q]),P,t("h3",f,[e("禁言群组成员 "),a(d,{type:"warning"},{default:r(()=>[e("实验性")]),_:1}),e(),S]),t("blockquote",k,[a(d,null,{default:r(()=>[e("POST")]),_:1}),I]),x,t("blockquote",A,[a(d,null,{default:r(()=>[e("POST")]),_:1}),C]),V])}const $=l(_,[["render",D]]);export{O as __pageData,$ as default}; diff --git a/assets/zh-CN_resources_message.md.Cs5HE-st.js b/assets/zh-CN_resources_message.md.Cs5HE-st.js new file mode 100644 index 0000000..53e92fa --- /dev/null +++ b/assets/zh-CN_resources_message.md.Cs5HE-st.js @@ -0,0 +1 @@ +import{_ as o,R as h,l as c,f as t,m as a,w as s,a6 as e,a as l,$ as r}from"./chunks/framework.CtqZpALn.js";const R=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/message.md","filePath":"zh-CN/resources/message.md"}'),i={name:"zh-CN/resources/message.md"},n=e('

消息 (Message)

类型定义

Message

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

API

发送消息

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

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

获取消息

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

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

撤回消息

',3),T={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),x={class:"route"},A=t("code",null,"/message.list",-1),k=e('
字段类型描述
channel_idstring频道 ID
nextstring?分页令牌
directionDirection?查询方向
limitnumber?消息数量限制
orderOrder?对结果排序

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

  • next 参数默认值为空,表示从最新消息开始查询。此时 direction 参数只能为 before
  • direction 参数默认为 before
  • order 参数默认为 asc (无论查询方向)。
  • limit 参数的默认值与平台默认值保持一致。如果平台 API 没有设定默认值,则可以自行设定,推荐值为 50。如果用户传入值超出平台要求的上限,则应当改为使用平台的上限值,而不是返回错误。开发者应当使用返回值中 prevnext 的存在性判断是否有更多数据,而非依赖于返回值中 data 的长度。

事件

message-created

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

message-updated

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

message-deleted

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

',10);function C(D,V,N,y,M,E){const d=h("badge");return l(),c("div",null,[n,t("blockquote",_,[a(d,null,{default:s(()=>[r("POST")]),_:1}),m]),u,t("blockquote",g,[a(d,null,{default:s(()=>[r("POST")]),_:1}),b]),p,t("blockquote",T,[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",x,[a(d,null,{default:s(()=>[r("POST")]),_:1}),A]),k])}const $=o(i,[["render",C]]);export{R as __pageData,$ as default}; diff --git a/assets/zh-CN_resources_message.md.Cs5HE-st.lean.js b/assets/zh-CN_resources_message.md.Cs5HE-st.lean.js new file mode 100644 index 0000000..9c7c71f --- /dev/null +++ b/assets/zh-CN_resources_message.md.Cs5HE-st.lean.js @@ -0,0 +1 @@ +import{_ as o,R as h,l as c,f as t,m as a,w as s,a6 as e,a as l,$ as r}from"./chunks/framework.CtqZpALn.js";const R=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/message.md","filePath":"zh-CN/resources/message.md"}'),i={name:"zh-CN/resources/message.md"},n=e("",6),_={class:"route"},m=t("code",null,"/message.create",-1),u=e("",3),g={class:"route"},b=t("code",null,"/message.get",-1),p=e("",3),T={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),x={class:"route"},A=t("code",null,"/message.list",-1),k=e("",10);function C(D,V,N,y,M,E){const d=h("badge");return l(),c("div",null,[n,t("blockquote",_,[a(d,null,{default:s(()=>[r("POST")]),_:1}),m]),u,t("blockquote",g,[a(d,null,{default:s(()=>[r("POST")]),_:1}),b]),p,t("blockquote",T,[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",x,[a(d,null,{default:s(()=>[r("POST")]),_:1}),A]),k])}const $=o(i,[["render",C]]);export{R as __pageData,$ as default}; diff --git a/assets/zh-CN_resources_reaction.md.MEG_PZJL.js b/assets/zh-CN_resources_reaction.md.MEG_PZJL.js new file mode 100644 index 0000000..53718f1 --- /dev/null +++ b/assets/zh-CN_resources_reaction.md.MEG_PZJL.js @@ -0,0 +1 @@ +import{_ as n,R as i,l as s,f as t,$ as e,m as a,w as r,a6 as o,a as _}from"./chunks/framework.CtqZpALn.js";const O=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=t("h2",{id:"api",tabindex:"-1"},[e("API "),t("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),b=t("h3",{id:"添加表态",tabindex:"-1"},[e("添加表态 "),t("a",{class:"header-anchor",href:"#添加表态","aria-label":'Permalink to "添加表态"'},"​")],-1),m={class:"route"},p=t("code",null,"/reaction.create",-1),T=o('
字段类型描述
channel_idstring频道 ID
message_idstring消息 ID
emojistring表态名称

向特定消息添加表态。

删除表态

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

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

清除表态

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

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

获取表态列表

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

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

事件

reaction-added

当表态被添加时触发。

reaction-removed

当表态被移除时触发。

',7);function A(C,N,V,y,R,v){const d=i("badge");return _(),s("div",null,[t("h1",c,[e("表态 (Reaction) "),a(d,{type:"warning"},{default:r(()=>[e("实验性")]),_:1}),e(),l]),u,b,t("blockquote",m,[a(d,null,{default:r(()=>[e("POST")]),_:1}),p]),T,t("blockquote",f,[a(d,null,{default:r(()=>[e("POST")]),_:1}),g]),P,t("blockquote",I,[a(d,null,{default:r(()=>[e("POST")]),_:1}),S]),q,t("blockquote",k,[a(d,null,{default:r(()=>[e("POST")]),_:1}),x]),D])}const $=n(h,[["render",A]]);export{O as __pageData,$ as default}; diff --git a/assets/zh-CN_resources_reaction.md.MEG_PZJL.lean.js b/assets/zh-CN_resources_reaction.md.MEG_PZJL.lean.js new file mode 100644 index 0000000..4a9de89 --- /dev/null +++ b/assets/zh-CN_resources_reaction.md.MEG_PZJL.lean.js @@ -0,0 +1 @@ +import{_ as n,R as i,l as s,f as t,$ as e,m as a,w as r,a6 as o,a as _}from"./chunks/framework.CtqZpALn.js";const O=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=t("h2",{id:"api",tabindex:"-1"},[e("API "),t("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),b=t("h3",{id:"添加表态",tabindex:"-1"},[e("添加表态 "),t("a",{class:"header-anchor",href:"#添加表态","aria-label":'Permalink to "添加表态"'},"​")],-1),m={class:"route"},p=t("code",null,"/reaction.create",-1),T=o("",3),f={class:"route"},g=t("code",null,"/reaction.delete",-1),P=o("",3),I={class:"route"},S=t("code",null,"/reaction.clear",-1),q=o("",3),k={class:"route"},x=t("code",null,"/reaction.list",-1),D=o("",7);function A(C,N,V,y,R,v){const d=i("badge");return _(),s("div",null,[t("h1",c,[e("表态 (Reaction) "),a(d,{type:"warning"},{default:r(()=>[e("实验性")]),_:1}),e(),l]),u,b,t("blockquote",m,[a(d,null,{default:r(()=>[e("POST")]),_:1}),p]),T,t("blockquote",f,[a(d,null,{default:r(()=>[e("POST")]),_:1}),g]),P,t("blockquote",I,[a(d,null,{default:r(()=>[e("POST")]),_:1}),S]),q,t("blockquote",k,[a(d,null,{default:r(()=>[e("POST")]),_:1}),x]),D])}const $=n(h,[["render",A]]);export{O as __pageData,$ as default}; diff --git a/assets/zh-CN_resources_role.md.DLTs0-kA.js b/assets/zh-CN_resources_role.md.DLTs0-kA.js new file mode 100644 index 0000000..860772e --- /dev/null +++ b/assets/zh-CN_resources_role.md.DLTs0-kA.js @@ -0,0 +1 @@ +import{_ as r,R as i,l as h,f as t,m as a,w as o,a6 as e,a as _,$ as l}from"./chunks/framework.CtqZpALn.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"},f=t("code",null,"/guild.role.list",-1),q=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),D=e('
字段类型描述
guild_idstring群组 ID
role_idstring角色 ID
roleGuildRole角色数据

修改群组角色。

删除群组角色

',3),x={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 R(N,y,G,E,O,$){const d=i("badge");return _(),h("div",null,[u,t("blockquote",n,[a(d,null,{default:o(()=>[l("POST")]),_:1}),c]),b,t("blockquote",g,[a(d,null,{default:o(()=>[l("POST")]),_:1}),T]),p,t("blockquote",P,[a(d,null,{default:o(()=>[l("POST")]),_:1}),f]),q,t("blockquote",m,[a(d,null,{default:o(()=>[l("POST")]),_:1}),I]),S,t("blockquote",A,[a(d,null,{default:o(()=>[l("POST")]),_:1}),k]),D,t("blockquote",x,[a(d,null,{default:o(()=>[l("POST")]),_:1}),C]),V])}const B=r(s,[["render",R]]);export{z as __pageData,B as default}; diff --git a/assets/zh-CN_resources_role.md.DLTs0-kA.lean.js b/assets/zh-CN_resources_role.md.DLTs0-kA.lean.js new file mode 100644 index 0000000..d097f81 --- /dev/null +++ b/assets/zh-CN_resources_role.md.DLTs0-kA.lean.js @@ -0,0 +1 @@ +import{_ as r,R as i,l as h,f as t,m as a,w as o,a6 as e,a as _,$ as l}from"./chunks/framework.CtqZpALn.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"},f=t("code",null,"/guild.role.list",-1),q=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),D=e("",3),x={class:"route"},C=t("code",null,"/guild.role.delete",-1),V=e("",9);function R(N,y,G,E,O,$){const d=i("badge");return _(),h("div",null,[u,t("blockquote",n,[a(d,null,{default:o(()=>[l("POST")]),_:1}),c]),b,t("blockquote",g,[a(d,null,{default:o(()=>[l("POST")]),_:1}),T]),p,t("blockquote",P,[a(d,null,{default:o(()=>[l("POST")]),_:1}),f]),q,t("blockquote",m,[a(d,null,{default:o(()=>[l("POST")]),_:1}),I]),S,t("blockquote",A,[a(d,null,{default:o(()=>[l("POST")]),_:1}),k]),D,t("blockquote",x,[a(d,null,{default:o(()=>[l("POST")]),_:1}),C]),V])}const B=r(s,[["render",R]]);export{z as __pageData,B as default}; diff --git a/assets/zh-CN_resources_user.md.CIvScYtH.js b/assets/zh-CN_resources_user.md.CIvScYtH.js new file mode 100644 index 0000000..e2f4f71 --- /dev/null +++ b/assets/zh-CN_resources_user.md.CIvScYtH.js @@ -0,0 +1 @@ +import{_ as s,R as h,l as _,f as t,m as d,w as r,a6 as e,a as n,$ as o}from"./chunks/framework.CtqZpALn.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(k,x,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.CIvScYtH.lean.js b/assets/zh-CN_resources_user.md.CIvScYtH.lean.js new file mode 100644 index 0000000..79de1d1 --- /dev/null +++ b/assets/zh-CN_resources_user.md.CIvScYtH.lean.js @@ -0,0 +1 @@ +import{_ as s,R as h,l as _,f as t,m as d,w as r,a6 as e,a as n,$ as o}from"./chunks/framework.CtqZpALn.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(k,x,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..a0fa36f --- /dev/null +++ b/en-US/index.html @@ -0,0 +1,24 @@ + + + + + + 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..c5fda70 --- /dev/null +++ b/en-US/introduction.html @@ -0,0 +1,24 @@ + + + + + + Introduction | Satori + + + + + + + + + + + + + +
Skip to content

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..948fa2e --- /dev/null +++ b/en-US/protocol/api.html @@ -0,0 +1,24 @@ + + + + + + HTTP API | Satori + + + + + + + + + + + + + +
Skip to content

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..7f4304c --- /dev/null +++ b/en-US/protocol/index.html @@ -0,0 +1,24 @@ + + + + + + Overview | Satori + + + + + + + + + + + + + +
Skip to content

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..ca8acdb --- /dev/null +++ b/en-US/protocol/message.html @@ -0,0 +1,24 @@ + + + + + + Message | Satori + + + + + + + + + + + + + +
Skip to content

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..34d0f84 --- /dev/null +++ b/en-US/protocol/webhook.html @@ -0,0 +1,24 @@ + + + + + + Webhook | Satori + + + + + + + + + + + + + +
Skip to content

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..aee2584 --- /dev/null +++ b/en-US/protocol/websocket.html @@ -0,0 +1,24 @@ + + + + + + WebSocket | Satori + + + + + + + + + + + + + +
Skip to content

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..4afafbe --- /dev/null +++ b/en-US/resources/channel.html @@ -0,0 +1,24 @@ + + + + + + Channel | Satori + + + + + + + + + + + + + +
Skip to content

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..c214426 --- /dev/null +++ b/en-US/resources/guild.html @@ -0,0 +1,24 @@ + + + + + + Guild | Satori + + + + + + + + + + + + + +
Skip to content

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..4899a3d --- /dev/null +++ b/en-US/resources/member.html @@ -0,0 +1,28 @@ + + + + + + 群组成员 (GuildMember) | Satori + + + + + + + + + + + + + +
Skip to content

群组成员 (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..c2d1d8e --- /dev/null +++ b/en-US/resources/message.html @@ -0,0 +1,31 @@ + + + + + + 消息 (Message) | Satori + + + + + + + + + + + + + +
Skip to content

消息 (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..eb64fb6 --- /dev/null +++ b/en-US/resources/reaction.html @@ -0,0 +1,24 @@ + + + + + + 表态 (Reaction) 实验性 | Satori + + + + + + + + + + + + + +
Skip to content

表态 (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..307b02c --- /dev/null +++ b/en-US/resources/role.html @@ -0,0 +1,29 @@ + + + + + + 群组角色 (GuildRole) 实验性 | Satori + + + + + + + + + + + + + +
Skip to content

群组角色 (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..45b3c14 --- /dev/null +++ b/en-US/resources/user.html @@ -0,0 +1,28 @@ + + + + + + 用户 (User) | Satori + + + + + + + + + + + + + +
Skip to content

用户 (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..4a1e3d2 --- /dev/null +++ b/hashmap.json @@ -0,0 +1 @@ +{"zh-cn_resources_reaction.md":"MEG_PZJL","en-us_protocol_api.md":"tjEvRPe9","en-us_resources_channel.md":"B49Loav5","en-us_protocol_webhook.md":"Dv45azH5","zh-cn_resources_guild.md":"D4GWzdfJ","zh-cn_protocol_api.md":"B6RT9T-b","en-us_resources_user.md":"d8k6TvvM","en-us_protocol_message.md":"C8I9M0t3","zh-cn_resources_interaction.md":"B4bO94AM","zh-cn_resources_channel.md":"BrK2DrWx","zh-cn_advanced_admin.md":"C9G_6R-7","zh-cn_protocol_elements.md":"d9OkxSqX","en-us_protocol_websocket.md":"BKw3x1oT","en-us_resources_role.md":"BlA2gUbW","zh-cn_resources_message.md":"Cs5HE-st","zh-cn_resources_login.md":"BtKO-X7t","zh-cn_resources_user.md":"CIvScYtH","en-us_resources_guild.md":"B-DL93Yw","en-us_resources_message.md":"BaNUWu1G","en-us_introduction.md":"COyc3duQ","zh-cn_index.md":"CdCe0MIX","en-us_resources_member.md":"BJP15InX","en-us_resources_reaction.md":"DViq2951","zh-cn_protocol_index.md":"BCJ5lIZZ","en-us_protocol_index.md":"D7Gi7Bkr","en-us_index.md":"Bsz4tPbi","zh-cn_advanced_internal.md":"6ADIgZra","zh-cn_resources_role.md":"DLTs0-kA","zh-cn_resources_member.md":"CXr0_r_0","zh-cn_protocol_message.md":"fglB_YNF","zh-cn_advanced_resource.md":"R7MZX5XF","zh-cn_protocol_events.md":"DyRiGfhF","zh-cn_introduction.md":"k_naDUjk"} diff --git a/zh-CN/advanced/admin.html b/zh-CN/advanced/admin.html new file mode 100644 index 0000000..423725d --- /dev/null +++ b/zh-CN/advanced/admin.html @@ -0,0 +1,24 @@ + + + + + + 管理接口 可选 实验性 | 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

返回 Login 对象构成的数组。

创建 WebHook

POST/admin/webhook.create
字段类型描述
urlstringWebHook 地址
tokenstring?鉴权令牌

移除 WebHook

POST/admin/webhook.delete
字段类型描述
urlstringWebHook 地址
+ + + + \ 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..35d23fa --- /dev/null +++ b/zh-CN/advanced/internal.html @@ -0,0 +1,34 @@ + + + + + + 内部接口 可选 | Satori + + + + + + + + + + + + + +
Skip to content

内部接口 可选

TIP

这是一个可选功能。

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

这些原生 API 和事件被统称为内部接口。你可以名为 internal 的路由或事件来访问它们。

API 扩展

SDK 可以通过 /{path}/{version}/internal/{method} 路由代理平台原生 API。通信方式与 HTTP API 类似。返回值与平台返回值一致。

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

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

事件扩展

平台原生事件

SDK 可以通过 internal 事件的 _type_data 属性代理平台原生事件。它的结构如下:

字段类型说明
idnumber事件 ID
typestring事件类型 (固定为 internal)
platformstring接收者的平台名称
self_idstring接收者的平台账号
timestampnumber事件的时间戳
_typestring原生事件类型
_dataobject原生事件数据

标准事件的扩展字段

标准事件的平台原生字段也可以通过上述 _type_data 访问。它的结构如下:

字段类型说明
typestring事件类型 (不应该是 internal)
_typestring平台通用名称
_dataobject原生事件数据
其他字段其他标准事件字段

TIP

有些平台原生事件可以直接对应到标准事件。当这些事件触发时,SDK 可以同时触发标准事件和平台原生事件。这两个事件都带有 _type_data 字段,但这两个字段的值可能是不同的。

消息元素扩展

平台原生消息元素

平台可以提供原生消息元素,但需要加上平台通用名称作为前缀。下面是一个例子:

html
<kook:card size="lg">
+  <kook:countdown end-time="1608819168000"/>
+</kook:card>

标准元素的扩展属性

标准元素的平台原生属性也可以通过加上平台通用名称作为前缀的方式声明。下面是一个例子:

html
<!-- src 是 audio 元素的标准属性。 -->
+<!-- 但 cover 并未标准化,所以需要加前缀。 -->
+<audio src="url1" kook:cover="url2"/>

TIP

平台原生消息元素的属性是否需要前缀由 SDK 实现自行决定。如果某个消息元素希望在未来标准化,那么加上前缀可以降低迁移成本。如果没有标准化需要,那么去掉前缀在书写上更方便。

+ + + + \ No newline at end of file diff --git a/zh-CN/advanced/resource.html b/zh-CN/advanced/resource.html new file mode 100644 index 0000000..97bd056 --- /dev/null +++ b/zh-CN/advanced/resource.html @@ -0,0 +1,43 @@ + + + + + + 资源链接 实验性 | Satori + + + + + + + + + + + + + +
Skip to content

资源链接 实验性

WARNING

这是一个实验性功能。

文件上传

POST/upload.create

如果要发送的消息中含有图片或其他媒体资源,可以使用此 API 将文件上传至 Satori 服务器并转换为 URL,以便在消息编码中使用。

与其他 API 不同,上传文件的请求体遵循 multipart/form-data 格式。下面是一个示例:

text
POST /v1/upload.create
+Content-Type: multipart/form-data
+Authorization: Bearer 1234567890
+X-Platform: discord
+X-Self-ID: 1234567890
+
+--boundary
+Content-Disposition: form-data; name="foo"; filename="image1.png"
+Content-Type: image/png
+
+binary-data
+--boundary
+Content-Disposition: form-data; name="bar"; filename="image2.gif"
+Content-Type: image/gif
+
+binary-data
+--boundary--

其中,Content-Disposition 中的 name 字段表示文件标识符 (必需且不能重复),filename 字段表示文件名 (可选);Content-Type 表示文件类型 (必需)。

返回值是一个字典类型,其中的每个键分别对应于请求体中的文件标识符,值是一个 URL 字符串,可以在消息编码中使用。下面是一个示例的返回值:

json
{
+  "foo": "upload://temp/z0q9lgqb/3j6emd92-image1.png",
+  "bar": "upload://temp/z0q9lgqb/reacpmeq-image2.gif"
+}

在实现此 API 时,如果平台已经支持了文件上传功能,可以直接使用平台提供的上传 API,返回平台的 URL 即可。如果平台不支持文件上传功能,应当回退到 SDK 提供的默认实现。

SDK 可以基于本地文件系统实现上传功能。上传到本地文件系统中的文件 URL 通过 upload:// 协议进一步代理,且有一定的有效期。各实现可以根据自身情况调整有效期,推荐值为 5 分钟。

内部链接

upload:// 称为内部链接协议,用于代理一些无法直接通过公网访问的资源。

适用场景

上一节中已经提到,在不支持文件上传的平台上调用 upload.create,你将获得内部链接。除此以外,还有一些内部链接的适用场景。

TIP

场景:通过平台 API 请求资源

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

为了避免在不必要的场合损失性能,更推荐的方式是直接将资源 ID 封装进内部链接,并立即构造消息元素。等到真正需要请求资源时再调用平台的 API。

TIP

场景:资源链接不宜直接公开

对于另一些平台,尽管其提供的资源链接是可用的,但这个链接中会明文包含机器人令牌,并非可以公开使用的链接 (例如 Telegram)。因此,对于这些平台中的资源,我们也不能直接使用其链接,同样需要将其封装进内部链接。此时内部链接就是单纯的代理。

不同方案对比

与内部链接相比,另一些实践则是不推荐的。

WARNING

不推荐:data: URL

一种不推荐的方案是直接下载资源,并转换为 data: 链接放入消息元素中。之所以不推荐使用,是因为这种方案有两大致命缺点:

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

WARNING

不推荐:本地代理

另一种方案是由 SDK 额外提供一个用于访问资源的路由 (比如下文介绍的代理路由),并将资源链接转换为能访问到该路由的 URL。这种方案在 Satori 引入内部链接之前是最佳实践,但现在已经不推荐使用了。相比内部链接,这种方案有两个缺点:

  • 这样生成的链接与 Satori 服务器自身的地址耦合,一旦 Satori 服务器更换域名或者端口,过去的链接将全部失效,不利于迁移和跨接等复杂场景;
  • 如果需要扩展其他需要用到资源的逻辑 (比如下载图片到本地),就会导致通过网络自己请求自己,而这些数据原本可以在内存或硬盘中传输,这显然引入了额外的性能损耗。

路由唯一性

SDK 本身和不同的平台适配器都可能实现内部链接,因此我们需要保证内部链接的唯一性。

通常,由适配器实现的内部链接需要以 upload://{platform}/{self_id}/ 开头,确保各个登录号所使用的资源不会冲突。由 SDK 自身实现的内部链接相对没有那么严格,但通常还需要在链接中加入每个实例的唯一标识,以避免跨接过程中的混淆。

无论是适配器还是 SDK 实现的内部链接,都应当将所占用的路由写入 login.proxy_urls

代理路由 可选

TIP

这是一个可选功能。

假设你在开发基于 Satori 的聊天平台客户端,你希望可以直接将 Satori 协议中给出的资源链接用于 HTML,但很多情况下你都难以如愿:

  1. 该资源链接由平台生成,且含有防盗链机制,无法在跨域请求中访问;
  2. 该资源链接是一个内部链接,无法在 HTML 中直接访问。

为此,SDK 需要额外提供一个代理路由 /{path}/{version}/proxy/{url},用于访问这些资源链接。这个路由下只接受 GET 请求,且不需要 X-PlatformX-Self-ID 请求头。

下面是一个典型的代理路由请求示例:

text
GET /v1/proxy/upload://temp/z0q9lgqb/3j6emd92-image1.png

在具体的应用场景中,代理路由可根据需要添加 Access-Control-Allow-Origin 等响应头,以限制或允许跨域请求。

为了辨别需要代理的路径以防滥用,Satori 还引入了 login.proxy_urls 属性。这个属性标注了一个登录号所可能需要代理的资源链接前缀,应用侧可以根据这个属性来判断是否需要代理。

根据 url 的不同形式,SDK 提供的代理路由会有不同的行为:

  • 如果 url 不是合法的 URL,会直接返回 400;
  • 如果 url 不以任何一个 login.proxy_urls 中的前缀开头,会直接返回 403;
  • 如果 url 是一个内部链接,会由该内部链接的实现决定如何提供此资源 (可能的方式包括返回数据、重定向以及资源无法访问的报错);
  • 如果 url 是一个外部链接 (即不以 upload:// 开头的链接),会在 SDK 侧下载该资源并返回 (通常使用流式传输)。

最佳实践

综上所述,我们总结出了一套关于资源链接的最佳实践:

对于 SDK 开发者,你需要:

  1. 提供 REGISTER_UPLOAD_ROUTE 方法用于注册内部链接路由,以便适配器实现;
  2. 提供 DOWNLOAD_URL 方法用于将一个链接下载为数据,无论其是否为内部链接;
  3. 基于本地文件系统实现内置的 upload.create API;
  4. 基于上述 DOWNLOAD_URL 方法实现代理路由。

对于适配器开发者,你需要:

  1. 如果需要使用内部链接 (参见下一条):调用 REGISTER_UPLOAD_ROUTE 方法注册相应的路由;
  2. 接收事件推送时:如果收到的资源链接符合内部链接的适用场景,将它们转化为内部链接;
  3. 发送消息时:根据平台行为和资源链接的形式,合理选择下载和发送资源的方式;
  4. 如果平台支持文件上传:实现 upload.create API,覆盖 SDK 的默认实现。
+ + + + \ No newline at end of file diff --git a/zh-CN/index.html b/zh-CN/index.html new file mode 100644 index 0000000..5926d0a --- /dev/null +++ b/zh-CN/index.html @@ -0,0 +1,24 @@ + + + + + + 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..cc67e99 --- /dev/null +++ b/zh-CN/introduction.html @@ -0,0 +1,24 @@ + + + + + + 介绍 | 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..3a80072 --- /dev/null +++ b/zh-CN/protocol/api.html @@ -0,0 +1,30 @@ + + + + + + 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 格式。作为特例,具有 文件上传 功能的 API 使用 multipart/form-data 编码。

请求头中需要包含 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"}

鉴权

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

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

状态码

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

TIP

如果某个标准 API 没有被某个平台支持,则应该返回 404 而非 501 (NOT IMPLEMENTED)。

平台特性 实验性

Login 对象中的 features 字段是一个字符串数组,用于表示平台的特性。这些特性可以用于判断平台是否支持某些 API。合法的平台特性包括:

  • API 可用性,如特性 message.delete 表示支持使用 message.delete 撤回消息。
  • API 额外特性,如特性 message.list.from 表示使用 message.list 查询消息列表时支持将消息 ID 作为分页令牌。
  • 平台额外特性,如特性 guild.plain 表示该平台的群组内只能存在一个消息频道。

目前仅有 API 名称本身是规范的用法。我们将在后续版本中提供更全面的标准特性列表。

分页列表

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

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

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

双向分页列表

极少数 API 返回可双向延伸的分页数据。这种情况下,响应会是一个 BidiList 对象:

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

在对应的 API 中,你可以通过 directionorder 参数来指定方向和排序。

direction 参数有三种不同的取值:

  • before:向前获取数据,此时 prevnext 相同,均表示上一页的令牌。
  • after:向后获取数据,此时 prevnext 相同,均表示下一页的令牌。
  • around:向两侧获取数据,此时 prev 表示上一页的令牌,next 表示下一页的令牌。

如果 prevnext 缺失,则表示在该方向上没有更多数据了。

order 参数有两种不同的取值:

  • asc:升序排列。
  • desc:降序排列。

进阶 API

除了标准 API 外,Satori 还提供了一些进阶功能。

  • /{path}/{version}/proxy 的子路由用于代理平台资源,请参见 资源文件
  • /{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..30b12ad --- /dev/null +++ b/zh-CN/protocol/elements.html @@ -0,0 +1,40 @@ + + + + + + 标准元素 | 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
titlestring?收发资源文件名称
cache 实验性boolean?是否使用已缓存的文件
timeout 实验性string?下载文件的最长时间 (毫秒)

图片 (img)

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

属性类型范围描述
widthnumber?图片宽度 (像素)
heightnumber?图片高度 (像素)

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

音频 (audio)

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

属性类型范围描述
durationnumber?音频长度 (秒)
posterstring?收发音频封面 URL

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

视频 (video)

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

属性类型范围描述
widthnumber?视频宽度 (像素)
heightnumber?视频高度 (像素)
durationnumber?视频长度 (秒)
posterstring?收发视频封面 URL

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

文件 (file)

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

属性类型范围描述
posterstring?收发缩略图 URL

<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 id="123123123" name="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 id="123123123" name="Alice" avatar="url"/>
+    hello world
+  </message>
+</message>

元信息元素

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

引用 (quote)

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

作者 (author)

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

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

交互元素

交互元素用于显然消息中的可交互性内容。如果平台不支持此类元素且难以提供回退,可以直接忽略整个元素。实现侧应当根据平台特性,针对性地返回带有交互和不带有交互的消息。

按钮 (button) 实验性

属性类型范围描述
idstring?按钮的 ID
typestring?按钮的类型
hrefstring?按钮的链接
textstring?待输入文本
themestring?按钮的样式

<button> 元素用于表示一个按钮。它的子元素会被渲染为按钮的文本。

按钮目前支持三种不同的类型:

  • 点击 action 类型的按钮时会触发一个 interaction/button 事件,该事件的 button 资源会包含上述 id
  • 点击 link 类型的按钮时会打开一个链接,该链接的地址为上述 href
  • 点击 input 类型的按钮时会在用户的输入框中填充上述 text

theme 仅建议使用下列值:

  • primary
  • secondary
  • success
  • warning
  • danger
  • info
+ + + + \ 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..ed923eb --- /dev/null +++ b/zh-CN/protocol/events.html @@ -0,0 +1,24 @@ + + + + + + 事件 | Satori + + + + + + + + + + + + + +
Skip to content

事件

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

类型定义

Event

字段类型描述
idnumber事件 ID
typestring事件类型
platformstring接收者的平台名称
self_idstring接收者的平台账号
timestampnumber事件的时间戳
argvArgv?交互指令
buttonButton?交互按钮
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..f6e58e5 --- /dev/null +++ b/zh-CN/protocol/index.html @@ -0,0 +1,24 @@ + + + + + + 总览 | 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..47d8617 --- /dev/null +++ b/zh-CN/protocol/message.html @@ -0,0 +1,30 @@ + + + + + + 消息编码 | 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>

注释

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

标准元素

关于 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..31f23d7 --- /dev/null +++ b/zh-CN/resources/channel.html @@ -0,0 +1,24 @@ + + + + + + 频道 (Channel) | Satori + + + + + + + + + + + + + +
Skip to content

频道 (Channel)

类型定义

Channel

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

Channel.Type

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

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/channel.mute
字段类型描述
channel_idstring频道 ID
durationnumber禁言时长 (毫秒)

禁言群组频道。如果传入的禁言时长为 0 则表示解除禁言。

创建私聊频道

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..5efdd04 --- /dev/null +++ b/zh-CN/resources/guild.html @@ -0,0 +1,24 @@ + + + + + + 群组 (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/interaction.html b/zh-CN/resources/interaction.html new file mode 100644 index 0000000..7ba40b3 --- /dev/null +++ b/zh-CN/resources/interaction.html @@ -0,0 +1,24 @@ + + + + + + 交互 (Interaction) 实验性 | Satori + + + + + + + + + + + + + +
Skip to content

交互 (Interaction) 实验性

TIP

交互功能主要通过机器人提供,并由用户在聊天应用中触发。如果你要实现或接入的聊天平台不支持机器人相关功能,那么可以直接忽略本节。

类型定义

Argv

字段类型描述
namestring指令名称
argumentsany[]参数
optionsobject选项

Button

字段类型描述
idstring按钮 ID

事件

interaction/button

类型为 action 的按钮被点击时触发。必需资源:button

interaction/command

调用斜线指令时触发。资源 argvmessage 中至少包含其一。

TIP

许多平台都支持斜线指令,但它们的实现方式各不相同。如果平台的斜线指令仅仅提供在前端,机器人无法直接判断一个事件是否为斜线指令调用,那么直接实现为普通消息事件即可。

+ + + + \ 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..97142cc --- /dev/null +++ b/zh-CN/resources/login.html @@ -0,0 +1,24 @@ + + + + + + 登录信息 (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..3dad1e1 --- /dev/null +++ b/zh-CN/resources/member.html @@ -0,0 +1,24 @@ + + + + + + 群组成员 (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.mute
字段类型描述
guild_idstring群组 ID
user_idstring用户 ID
durationnumber禁言时长 (毫秒)

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

通过群组成员申请

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..c79912a --- /dev/null +++ b/zh-CN/resources/message.html @@ -0,0 +1,24 @@ + + + + + + 消息 (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?分页令牌
directionDirection?查询方向
limitnumber?消息数量限制
orderOrder?对结果排序

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

  • next 参数默认值为空,表示从最新消息开始查询。此时 direction 参数只能为 before
  • direction 参数默认为 before
  • order 参数默认为 asc (无论查询方向)。
  • limit 参数的默认值与平台默认值保持一致。如果平台 API 没有设定默认值,则可以自行设定,推荐值为 50。如果用户传入值超出平台要求的上限,则应当改为使用平台的上限值,而不是返回错误。开发者应当使用返回值中 prevnext 的存在性判断是否有更多数据,而非依赖于返回值中 data 的长度。

事件

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..dc9a623 --- /dev/null +++ b/zh-CN/resources/reaction.html @@ -0,0 +1,24 @@ + + + + + + 表态 (Reaction) 实验性 | Satori + + + + + + + + + + + + + +
Skip to content

表态 (Reaction) 实验性

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..6f11dae --- /dev/null +++ b/zh-CN/resources/role.html @@ -0,0 +1,24 @@ + + + + + + 群组角色 (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..e492875 --- /dev/null +++ b/zh-CN/resources/user.html @@ -0,0 +1,24 @@ + + + + + + 用户 (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