{V=V||!!y.dynamicChildren;const{type:M,props:v,patchFlag:P,shapeFlag:S,dirs:K,transition:ee}=y,re=M==="input"||M==="option";if(re||P!==-1){K&&Ne(y,null,I,"created");let D=!1;if(H(p)){D=Yo(x,ee)&&I&&I.vnode.props&&I.vnode.props.appear;const k=p.content.firstChild;D&&ee.beforeEnter(k),W(k,p,I),y.el=p=k}if(S&16&&!(v&&(v.innerHTML||v.textContent))){let k=_(p.firstChild,y,p,I,x,F,V);for(;k;){gt();const de=k;k=k.nextSibling,l(de)}}else S&8&&p.textContent!==y.children&&(gt(),p.textContent=y.children);if(v){if(re||!V||P&48){const k=p.tagName.includes("-");for(const de in v)(re&&(de.endsWith("value")||de==="indeterminate")||Kt(de)&&!vt(de)||de[0]==="."||k)&&r(p,de,null,v[de],void 0,I)}else if(v.onClick)r(p,"onClick",null,v.onClick,void 0,I);else if(P&4&&bt(v.style))for(const k in v.style)v.style[k]}let Y;(Y=v&&v.onVnodeBeforeMount)&&Te(Y,I,y),K&&Ne(y,null,I,"beforeMount"),((Y=v&&v.onVnodeMounted)||K||D)&&Zo(()=>{Y&&Te(Y,I,y),D&&ee.enter(p),K&&Ne(y,null,I,"mounted")},x)}return p.nextSibling},_=(p,y,I,x,F,V,M)=>{M=M||!!y.dynamicChildren;const v=y.children,P=v.length;for(let S=0;S{const{slotScopeIds:M}=y;M&&(F=F?F.concat(M):M);const v=i(p),P=_(o(p),y,v,I,x,F,V);return P&&on(P)&&P.data==="]"?o(y.anchor=P):(gt(),c(y.anchor=u("]"),v,P),P)},O=(p,y,I,x,F,V)=>{if(gt(),y.el=null,V){const P=U(p);for(;;){const S=o(p);if(S&&S!==P)l(S);else break}}const M=o(p),v=i(p);return l(p),n(null,y,v,M,I,x,sn(v),F),M},U=(p,y="[",I="]")=>{let x=0;for(;p;)if(p=o(p),p&&on(p)&&(p.data===y&&x++,p.data===I)){if(x===0)return o(p);x--}return p},W=(p,y,I)=>{const x=y.parentNode;x&&x.replaceChild(p,y);let F=I;for(;F;)F.vnode.el===y&&(F.vnode.el=F.subTree.el=p),F=F.parent},H=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[f,h]}const _e=Zo;function uc(e){return Xo(e)}function fc(e){return Xo(e,ac)}function Xo(e,t){const n=Zs();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:u,setElementText:f,parentNode:h,nextSibling:m,setScopeId:_=Ae,insertStaticContent:w}=e,O=(a,d,g,C=null,b=null,T=null,L=void 0,A=null,R=!!d.dynamicChildren)=>{if(a===d)return;a&&!lt(a,d)&&(C=zt(a),Ie(a,b,T,!0),a=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:E,ref:N,shapeFlag:j}=d;switch(E){case ut:U(a,d,g,C);break;case ye:W(a,d,g,C);break;case Ft:a==null&&H(d,g,C,L);break;case ve:S(a,d,g,C,b,T,L,A,R);break;default:j&1?I(a,d,g,C,b,T,L,A,R):j&6?K(a,d,g,C,b,T,L,A,R):(j&64||j&128)&&E.process(a,d,g,C,b,T,L,A,R,ht)}N!=null&&b&&En(N,a&&a.ref,T,d||a,!d)},U=(a,d,g,C)=>{if(a==null)r(d.el=l(d.children),g,C);else{const b=d.el=a.el;d.children!==a.children&&u(b,d.children)}},W=(a,d,g,C)=>{a==null?r(d.el=c(d.children||""),g,C):d.el=a.el},H=(a,d,g,C)=>{[a.el,a.anchor]=w(a.children,d,g,C,a.el,a.anchor)},p=({el:a,anchor:d},g,C)=>{let b;for(;a&&a!==d;)b=m(a),r(a,g,C),a=b;r(d,g,C)},y=({el:a,anchor:d})=>{let g;for(;a&&a!==d;)g=m(a),s(a),a=g;s(d)},I=(a,d,g,C,b,T,L,A,R)=>{d.type==="svg"?L="svg":d.type==="math"&&(L="mathml"),a==null?x(d,g,C,b,T,L,A,R):M(a,d,b,T,L,A,R)},x=(a,d,g,C,b,T,L,A)=>{let R,E;const{props:N,shapeFlag:j,transition:$,dirs:G}=a;if(R=a.el=i(a.type,T,N&&N.is,N),j&8?f(R,a.children):j&16&&V(a.children,R,null,C,b,Gn(a,T),L,A),G&&Ne(a,null,C,"created"),F(R,a,a.scopeId,L,C),N){for(const te in N)te!=="value"&&!vt(te)&&o(R,te,null,N[te],T,C);"value"in N&&o(R,"value",null,N.value,T),(E=N.onVnodeBeforeMount)&&Te(E,C,a)}G&&Ne(a,null,C,"beforeMount");const X=Yo(b,$);X&&$.beforeEnter(R),r(R,d,g),((E=N&&N.onVnodeMounted)||X||G)&&_e(()=>{E&&Te(E,C,a),X&&$.enter(R),G&&Ne(a,null,C,"mounted")},b)},F=(a,d,g,C,b)=>{if(g&&_(a,g),C)for(let T=0;T{for(let E=R;E{const A=d.el=a.el;let{patchFlag:R,dynamicChildren:E,dirs:N}=d;R|=a.patchFlag&16;const j=a.props||ne,$=d.props||ne;let G;if(g&&rt(g,!1),(G=$.onVnodeBeforeUpdate)&&Te(G,g,d,a),N&&Ne(d,a,g,"beforeUpdate"),g&&rt(g,!0),(j.innerHTML&&$.innerHTML==null||j.textContent&&$.textContent==null)&&f(A,""),E?v(a.dynamicChildren,E,A,g,C,Gn(d,b),T):L||k(a,d,A,null,g,C,Gn(d,b),T,!1),R>0){if(R&16)P(A,j,$,g,b);else if(R&2&&j.class!==$.class&&o(A,"class",null,$.class,b),R&4&&o(A,"style",j.style,$.style,b),R&8){const X=d.dynamicProps;for(let te=0;te{G&&Te(G,g,d,a),N&&Ne(d,a,g,"updated")},C)},v=(a,d,g,C,b,T,L)=>{for(let A=0;A{if(d!==g){if(d!==ne)for(const T in d)!vt(T)&&!(T in g)&&o(a,T,d[T],null,b,C);for(const T in g){if(vt(T))continue;const L=g[T],A=d[T];L!==A&&T!=="value"&&o(a,T,A,L,b,C)}"value"in g&&o(a,"value",d.value,g.value,b)}},S=(a,d,g,C,b,T,L,A,R)=>{const E=d.el=a?a.el:l(""),N=d.anchor=a?a.anchor:l("");let{patchFlag:j,dynamicChildren:$,slotScopeIds:G}=d;G&&(A=A?A.concat(G):G),a==null?(r(E,g,C),r(N,g,C),V(d.children||[],g,N,b,T,L,A,R)):j>0&&j&64&&$&&a.dynamicChildren?(v(a.dynamicChildren,$,g,b,T,L,A),(d.key!=null||b&&d===b.subTree)&&Ur(a,d,!0)):k(a,d,g,N,b,T,L,A,R)},K=(a,d,g,C,b,T,L,A,R)=>{d.slotScopeIds=A,a==null?d.shapeFlag&512?b.ctx.activate(d,g,C,L,R):ee(d,g,C,b,T,L,R):re(a,d,R)},ee=(a,d,g,C,b,T,L)=>{const A=a.component=Oc(a,C,b);if(qt(a)&&(A.ctx.renderer=ht),Lc(A,!1,L),A.asyncDep){if(b&&b.registerDep(A,D,L),!a.el){const R=A.subTree=le(ye);W(null,R,d,g)}}else D(A,a,d,g,b,T,L)},re=(a,d,g)=>{const C=d.component=a.component;if(bc(a,d,g))if(C.asyncDep&&!C.asyncResolved){Y(C,d,g);return}else C.next=d,Tl(C.update),C.effect.dirty=!0,C.update();else d.el=a.el,C.vnode=d},D=(a,d,g,C,b,T,L)=>{const A=()=>{if(a.isMounted){let{next:N,bu:j,u:$,parent:G,vnode:X}=a;{const pt=zo(a);if(pt){N&&(N.el=X.el,Y(a,N,L)),pt.asyncDep.then(()=>{a.isUnmounted||A()});return}}let te=N,Q;rt(a,!1),N?(N.el=X.el,Y(a,N,L)):N=X,j&&dn(j),(Q=N.props&&N.props.onVnodeBeforeUpdate)&&Te(Q,G,N,X),rt(a,!0);const ce=Xn(a),Oe=a.subTree;a.subTree=ce,O(Oe,ce,h(Oe.el),zt(Oe),a,b,T),N.el=ce.el,te===null&&wc(a,ce.el),$&&_e($,b),(Q=N.props&&N.props.onVnodeUpdated)&&_e(()=>Te(Q,G,N,X),b)}else{let N;const{el:j,props:$}=d,{bm:G,m:X,parent:te}=a,Q=Et(d);if(rt(a,!1),G&&dn(G),!Q&&(N=$&&$.onVnodeBeforeMount)&&Te(N,te,d),rt(a,!0),j&&Bn){const ce=()=>{a.subTree=Xn(a),Bn(j,a.subTree,a,b,null)};Q?d.type.__asyncLoader().then(()=>!a.isUnmounted&&ce()):ce()}else{const ce=a.subTree=Xn(a);O(null,ce,g,C,a,b,T),d.el=ce.el}if(X&&_e(X,b),!Q&&(N=$&&$.onVnodeMounted)){const ce=d;_e(()=>Te(N,te,ce),b)}(d.shapeFlag&256||te&&Et(te.vnode)&&te.vnode.shapeFlag&256)&&a.a&&_e(a.a,b),a.isMounted=!0,d=g=C=null}},R=a.effect=new Ar(A,Ae,()=>In(E),a.scope),E=a.update=()=>{R.dirty&&R.run()};E.i=a,E.id=a.uid,rt(a,!0),E()},Y=(a,d,g)=>{d.component=a;const C=a.vnode.props;a.vnode=d,a.next=null,Zl(a,d.props,C,g),rc(a,d.children,g),et(),is(a),tt()},k=(a,d,g,C,b,T,L,A,R=!1)=>{const E=a&&a.children,N=a?a.shapeFlag:0,j=d.children,{patchFlag:$,shapeFlag:G}=d;if($>0){if($&128){Yt(E,j,g,C,b,T,L,A,R);return}else if($&256){de(E,j,g,C,b,T,L,A,R);return}}G&8?(N&16&&Rt(E,b,T),j!==E&&f(g,j)):N&16?G&16?Yt(E,j,g,C,b,T,L,A,R):Rt(E,b,T,!0):(N&8&&f(g,""),G&16&&V(j,g,C,b,T,L,A,R))},de=(a,d,g,C,b,T,L,A,R)=>{a=a||yt,d=d||yt;const E=a.length,N=d.length,j=Math.min(E,N);let $;for($=0;$N?Rt(a,b,T,!0,!1,j):V(d,g,C,b,T,L,A,R,j)},Yt=(a,d,g,C,b,T,L,A,R)=>{let E=0;const N=d.length;let j=a.length-1,$=N-1;for(;E<=j&&E<=$;){const G=a[E],X=d[E]=R?qe(d[E]):xe(d[E]);if(lt(G,X))O(G,X,g,null,b,T,L,A,R);else break;E++}for(;E<=j&&E<=$;){const G=a[j],X=d[$]=R?qe(d[$]):xe(d[$]);if(lt(G,X))O(G,X,g,null,b,T,L,A,R);else break;j--,$--}if(E>j){if(E<=$){const G=$+1,X=G$)for(;E<=j;)Ie(a[E],b,T,!0),E++;else{const G=E,X=E,te=new Map;for(E=X;E<=$;E++){const we=d[E]=R?qe(d[E]):xe(d[E]);we.key!=null&&te.set(we.key,E)}let Q,ce=0;const Oe=$-X+1;let pt=!1,Yr=0;const Ot=new Array(Oe);for(E=0;E=Oe){Ie(we,b,T,!0);continue}let Pe;if(we.key!=null)Pe=te.get(we.key);else for(Q=X;Q<=$;Q++)if(Ot[Q-X]===0&<(we,d[Q])){Pe=Q;break}Pe===void 0?Ie(we,b,T,!0):(Ot[Pe-X]=E+1,Pe>=Yr?Yr=Pe:pt=!0,O(we,d[Pe],g,null,b,T,L,A,R),ce++)}const zr=pt?dc(Ot):yt;for(Q=zr.length-1,E=Oe-1;E>=0;E--){const we=X+E,Pe=d[we],Jr=we+1{const{el:T,type:L,transition:A,children:R,shapeFlag:E}=a;if(E&6){nt(a.component.subTree,d,g,C);return}if(E&128){a.suspense.move(d,g,C);return}if(E&64){L.move(a,d,g,ht);return}if(L===ve){r(T,d,g);for(let j=0;jA.enter(T),b);else{const{leave:j,delayLeave:$,afterLeave:G}=A,X=()=>r(T,d,g),te=()=>{j(T,()=>{X(),G&&G()})};$?$(T,X,te):te()}else r(T,d,g)},Ie=(a,d,g,C=!1,b=!1)=>{const{type:T,props:L,ref:A,children:R,dynamicChildren:E,shapeFlag:N,patchFlag:j,dirs:$,cacheIndex:G}=a;if(j===-2&&(b=!1),A!=null&&En(A,null,g,a,!0),G!=null&&(d.renderCache[G]=void 0),N&256){d.ctx.deactivate(a);return}const X=N&1&&$,te=!Et(a);let Q;if(te&&(Q=L&&L.onVnodeBeforeUnmount)&&Te(Q,d,a),N&6)Mi(a.component,g,C);else{if(N&128){a.suspense.unmount(g,C);return}X&&Ne(a,null,d,"beforeUnmount"),N&64?a.type.remove(a,d,g,ht,C):E&&!E.hasOnce&&(T!==ve||j>0&&j&64)?Rt(E,d,g,!1,!0):(T===ve&&j&384||!b&&N&16)&&Rt(R,d,g),C&&Gr(a)}(te&&(Q=L&&L.onVnodeUnmounted)||X)&&_e(()=>{Q&&Te(Q,d,a),X&&Ne(a,null,d,"unmounted")},g)},Gr=a=>{const{type:d,el:g,anchor:C,transition:b}=a;if(d===ve){Li(g,C);return}if(d===Ft){y(a);return}const T=()=>{s(g),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:L,delayLeave:A}=b,R=()=>L(g,T);A?A(a.el,T,R):R()}else T()},Li=(a,d)=>{let g;for(;a!==d;)g=m(a),s(a),a=g;s(d)},Mi=(a,d,g)=>{const{bum:C,scope:b,update:T,subTree:L,um:A,m:R,a:E}=a;ys(R),ys(E),C&&dn(C),b.stop(),T&&(T.active=!1,Ie(L,a,d,g)),A&&_e(A,d),_e(()=>{a.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Rt=(a,d,g,C=!1,b=!1,T=0)=>{for(let L=T;L{if(a.shapeFlag&6)return zt(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const d=m(a.anchor||a.el),g=d&&d[Wo];return g?m(g):d};let Dn=!1;const Xr=(a,d,g)=>{a==null?d._vnode&&Ie(d._vnode,null,null,!0):O(d._vnode||null,a,d,null,null,null,g),d._vnode=a,Dn||(Dn=!0,is(),_n(),Dn=!1)},ht={p:O,um:Ie,m:nt,r:Gr,mt:ee,mc:V,pc:k,pbc:v,n:zt,o:e};let Un,Bn;return t&&([Un,Bn]=t(ht)),{render:Xr,hydrate:Un,createApp:zl(Xr,Un)}}function Gn({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 Yo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ur(e,t,n=!1){const r=e.children,s=t.children;if(B(r)&&B(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function zo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:zo(t)}function ys(e){if(e)for(let t=0;tSt(hc);function Br(e,t){return $n(e,null,t)}function vu(e,t){return $n(e,null,{flush:"post"})}const ln={};function $e(e,t,n){return $n(e,t,n)}function $n(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=ne){if(t&&o){const x=t;t=(...F)=>{x(...F),I()}}const c=ae,u=x=>r===!0?x:Ge(x,r===!1?1:void 0);let f,h=!1,m=!1;if(he(e)?(f=()=>e.value,h=Tt(e)):bt(e)?(f=()=>u(e),h=!0):B(e)?(m=!0,h=e.some(x=>bt(x)||Tt(x)),f=()=>e.map(x=>{if(he(x))return x.value;if(bt(x))return u(x);if(q(x))return Ye(x,c,2)})):q(e)?t?f=()=>Ye(e,c,2):f=()=>(_&&_(),Re(e,c,3,[w])):f=Ae,t&&r){const x=f;f=()=>Ge(x())}let _,w=x=>{_=p.onStop=()=>{Ye(x,c,4),_=p.onStop=void 0}},O;if(Xt)if(w=Ae,t?n&&Re(t,c,3,[f(),m?[]:void 0,w]):f(),s==="sync"){const x=pc();O=x.__watcherHandles||(x.__watcherHandles=[])}else return Ae;let U=m?new Array(e.length).fill(ln):ln;const W=()=>{if(!(!p.active||!p.dirty))if(t){const x=p.run();(r||h||(m?x.some((F,V)=>ze(F,U[V])):ze(x,U)))&&(_&&_(),Re(t,c,3,[x,U===ln?void 0:m&&U[0]===ln?[]:U,w]),U=x)}else p.run()};W.allowRecurse=!!t;let H;s==="sync"?H=W:s==="post"?H=()=>_e(W,c&&c.suspense):(W.pre=!0,c&&(W.id=c.uid),H=()=>In(W));const p=new Ar(f,Ae,H),y=ro(),I=()=>{p.stop(),y&&Cr(y.effects,p)};return t?n?W():U=p.run():s==="post"?_e(p.run.bind(p),c&&c.suspense):p.run(),O&&O.push(I),I}function gc(e,t,n){const r=this.proxy,s=ie(e)?e.includes(".")?Jo(r,e):()=>r[e]:e.bind(r,r);let o;q(t)?o=t:(o=t.handler,n=t);const i=Gt(this),l=$n(s,o.bind(r),n);return i(),l}function Jo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{Ge(r,t,n)});else if(Js(e)){for(const r in e)Ge(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Ge(e[r],t,n)}return e}const mc=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Le(t)}Modifiers`]||e[`${Ze(t)}Modifiers`];function yc(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ne;let s=n;const o=t.startsWith("update:"),i=o&&mc(r,t.slice(7));i&&(i.trim&&(s=n.map(f=>ie(f)?f.trim():f)),i.number&&(s=n.map(cr)));let l,c=r[l=fn(t)]||r[l=fn(Le(t))];!c&&o&&(c=r[l=fn(Ze(t))]),c&&Re(c,e,6,s);const u=r[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Re(u,e,6,s)}}function Qo(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!q(e)){const c=u=>{const f=Qo(u,t,!0);f&&(l=!0,fe(i,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(Z(e)&&r.set(e,null),null):(B(o)?o.forEach(c=>i[c]=null):fe(i,o),Z(e)&&r.set(e,i),i)}function Hn(e,t){return!e||!Kt(t)?!1:(t=t.slice(2).replace(/Once$/,""),z(e,t[0].toLowerCase()+t.slice(1))||z(e,Ze(t))||z(e,t))}function Xn(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:l,emit:c,render:u,renderCache:f,props:h,data:m,setupState:_,ctx:w,inheritAttrs:O}=e,U=vn(e);let W,H;try{if(n.shapeFlag&4){const y=s||r,I=y;W=xe(u.call(I,y,f,h,_,m,w)),H=l}else{const y=t;W=xe(y.length>1?y(h,{attrs:l,slots:i,emit:c}):y(h,null)),H=t.props?l:_c(l)}}catch(y){$t.length=0,Wt(y,e,1),W=le(ye)}let p=W;if(H&&O!==!1){const y=Object.keys(H),{shapeFlag:I}=p;y.length&&I&7&&(o&&y.some(Er)&&(H=vc(H,o)),p=Je(p,H,!1,!0))}return n.dirs&&(p=Je(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(p.transition=n.transition),W=p,vn(U),W}const _c=e=>{let t;for(const n in e)(n==="class"||n==="style"||Kt(n))&&((t||(t={}))[n]=e[n]);return t},vc=(e,t)=>{const n={};for(const r in e)(!Er(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function bc(e,t,n){const{props:r,children:s,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 r?_s(r,i,u):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Zo(e,t){t&&t.pendingBranch?B(e)?t.effects.push(...e):t.effects.push(e):xl(e)}const ve=Symbol.for("v-fgt"),ut=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Ft=Symbol.for("v-stc"),$t=[];let Ce=null;function ei(e=!1){$t.push(Ce=e?null:[])}function Cc(){$t.pop(),Ce=$t[$t.length-1]||null}let Ut=1;function vs(e){Ut+=e,e<0&&Ce&&(Ce.hasOnce=!0)}function ti(e){return e.dynamicChildren=Ut>0?Ce||yt:null,Cc(),Ut>0&&Ce&&Ce.push(e),e}function bu(e,t,n,r,s,o){return ti(si(e,t,n,r,s,o,!0))}function ni(e,t,n,r,s){return ti(le(e,t,n,r,s,!0))}function Cn(e){return e?e.__v_isVNode===!0:!1}function lt(e,t){return e.type===t.type&&e.key===t.key}const ri=({key:e})=>e??null,pn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ie(e)||he(e)||q(e)?{i:ue,r:e,k:t,f:!!n}:e:null);function si(e,t=null,n=null,r=0,s=null,o=e===ve?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ri(t),ref:t&&pn(t),scopeId:Pn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:ue};return l?(kr(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=ie(n)?8:16),Ut>0&&!i&&Ce&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Ce.push(c),c}const le=Sc;function Sc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Mo)&&(e=ye),Cn(e)){const l=Je(e,t,!0);return n&&kr(l,n),Ut>0&&!o&&Ce&&(l.shapeFlag&6?Ce[Ce.indexOf(e)]=l:Ce.push(l)),l.patchFlag=-2,l}if(Nc(e)&&(e=e.__vccOpts),t){t=Tc(t);let{class:l,style:c}=t;l&&!ie(l)&&(t.class=xr(l)),Z(c)&&(mo(c)&&!B(c)&&(c=fe({},c)),t.style=Tr(c))}const i=ie(e)?1:Ec(e)?128:sc(e)?64:Z(e)?4:q(e)?2:0;return si(e,t,n,r,s,i,o,!0)}function Tc(e){return e?mo(e)||jo(e)?fe({},e):e:null}function Je(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:l,transition:c}=e,u=t?xc(s||{},t):s,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&ri(u),ref:t&&t.ref?n&&o?B(o)?o.concat(pn(t)):[o,pn(t)]:pn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ve?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&&Je(e.ssContent),ssFallback:e.ssFallback&&Je(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&bn(f,c.clone(f)),f}function oi(e=" ",t=0){return le(ut,null,e,t)}function wu(e,t){const n=le(Ft,null,e);return n.staticCount=t,n}function Eu(e="",t=!1){return t?(ei(),ni(ye,null,e)):le(ye,null,e)}function xe(e){return e==null||typeof e=="boolean"?le(ye):B(e)?le(ve,null,e.slice()):typeof e=="object"?qe(e):le(ut,null,String(e))}function qe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Je(e)}function kr(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(B(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),kr(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!jo(t)?t._ctx=ue:s===3&&ue&&(ue.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:ue},n=32):(t=String(t),r&64?(n=16,t=[oi(t)]):n=8);e.children=t,e.shapeFlag|=n}function xc(...e){const t={};for(let n=0;nae||ue;let Sn,vr;{const e=Zs(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};Sn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),vr=t("__VUE_SSR_SETTERS__",n=>Xt=n)}const Gt=e=>{const t=ae;return Sn(e),e.scope.on(),()=>{e.scope.off(),Sn(t)}},bs=()=>{ae&&ae.scope.off(),Sn(null)};function ii(e){return e.vnode.shapeFlag&4}let Xt=!1;function Lc(e,t=!1,n=!1){t&&vr(t);const{props:r,children:s}=e.vnode,o=ii(e);Ql(e,r,o,t),nc(e,s,n);const i=o?Mc(e,t):void 0;return t&&vr(!1),i}function Mc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Bl);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?ci(e):null,o=Gt(e);et();const i=Ye(r,e,0,[e.props,s]);if(tt(),o(),Ys(i)){if(i.then(bs,bs),t)return i.then(l=>{ws(e,l,t)}).catch(l=>{Wt(l,e,0)});e.asyncDep=i}else ws(e,i,t)}else li(e,t)}function ws(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=bo(t)),li(e,n)}let Es;function li(e,t,n){const r=e.type;if(!e.render){if(!t&&Es&&!r.render){const s=r.template||Vr(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,u=fe(fe({isCustomElement:o,delimiters:l},i),c);r.render=Es(s,u)}}e.render=r.render||Ae}{const s=Gt(e);et();try{Kl(e)}finally{tt(),s()}}}const Ic={get(e,t){return be(e,"get",""),e[t]}};function ci(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Ic),slots:e.slots,emit:e.emit,expose:t}}function Vn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(bo(hn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Pt)return Pt[n](e)},has(t,n){return n in t||n in Pt}})):e.proxy}function Pc(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function Nc(e){return q(e)&&"__vccOpts"in e}const se=(e,t)=>gl(e,t,Xt);function br(e,t,n){const r=arguments.length;return r===2?Z(t)&&!B(t)?Cn(t)?le(e,null,[t]):le(e,t):le(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Cn(n)&&(n=[n]),le(e,t,n))}const Fc="3.4.38";/**
+* @vue/runtime-dom v3.4.38
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/const $c="http://www.w3.org/2000/svg",Hc="http://www.w3.org/1998/Math/MathML",je=typeof document<"u"?document:null,Cs=je&&je.createElement("template"),jc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?je.createElementNS($c,e):t==="mathml"?je.createElementNS(Hc,e):n?je.createElement(e,{is:n}):je.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>je.createTextNode(e),createComment:e=>je.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>je.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Cs.innerHTML=r==="svg"?`${e} `:r==="mathml"?`${e} `:e;const l=Cs.content;if(r==="svg"||r==="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",Lt="animation",Bt=Symbol("_vtc"),ai=(e,{slots:t})=>br(Ml,Vc(e),t);ai.displayName="Transition";const ui={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};ai.props=fe({},To,ui);const st=(e,t=[])=>{B(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ss=e=>e?B(e)?e.some(t=>t.length>1):e.length>1:!1;function Vc(e){const t={};for(const S in e)S in ui||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:u=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,w=Dc(s),O=w&&w[0],U=w&&w[1],{onBeforeEnter:W,onEnter:H,onEnterCancelled:p,onLeave:y,onLeaveCancelled:I,onBeforeAppear:x=W,onAppear:F=H,onAppearCancelled:V=p}=t,M=(S,K,ee)=>{ot(S,K?f:l),ot(S,K?u:i),ee&&ee()},v=(S,K)=>{S._isLeaving=!1,ot(S,h),ot(S,_),ot(S,m),K&&K()},P=S=>(K,ee)=>{const re=S?F:H,D=()=>M(K,S,ee);st(re,[K,D]),Ts(()=>{ot(K,S?c:o),ke(K,S?f:l),Ss(re)||xs(K,r,O,D)})};return fe(t,{onBeforeEnter(S){st(W,[S]),ke(S,o),ke(S,i)},onBeforeAppear(S){st(x,[S]),ke(S,c),ke(S,u)},onEnter:P(!1),onAppear:P(!0),onLeave(S,K){S._isLeaving=!0;const ee=()=>v(S,K);ke(S,h),ke(S,m),kc(),Ts(()=>{S._isLeaving&&(ot(S,h),ke(S,_),Ss(y)||xs(S,r,U,ee))}),st(y,[S,ee])},onEnterCancelled(S){M(S,!1),st(p,[S])},onAppearCancelled(S){M(S,!0),st(V,[S])},onLeaveCancelled(S){v(S),st(I,[S])}})}function Dc(e){if(e==null)return null;if(Z(e))return[Yn(e.enter),Yn(e.leave)];{const t=Yn(e);return[t,t]}}function Yn(e){return Hi(e)}function ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Bt]||(e[Bt]=new Set)).add(t)}function ot(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Bt];n&&(n.delete(t),n.size||(e[Bt]=void 0))}function Ts(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Uc=0;function xs(e,t,n,r){const s=e._endId=++Uc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=Bc(e,t);if(!i)return r();const u=i+"end";let f=0;const h=()=>{e.removeEventListener(u,m),o()},m=_=>{_.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[w]||"").split(", "),s=r(`${Be}Delay`),o=r(`${Be}Duration`),i=As(s,o),l=r(`${Lt}Delay`),c=r(`${Lt}Duration`),u=As(l,c);let f=null,h=0,m=0;t===Be?i>0&&(f=Be,h=i,m=o.length):t===Lt?u>0&&(f=Lt,h=u,m=c.length):(h=Math.max(i,u),f=h>0?i>u?Be:Lt:null,m=f?f===Be?o.length:c.length:0);const _=f===Be&&/\b(transform|all)(,|$)/.test(r(`${Be}Property`).toString());return{type:f,timeout:h,propCount:m,hasTransform:_}}function As(e,t){for(;e.lengthRs(n)+Rs(e[r])))}function Rs(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function kc(){return document.body.offsetHeight}function Kc(e,t,n){const r=e[Bt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Os=Symbol("_vod"),Wc=Symbol("_vsh"),qc=Symbol(""),Gc=/(^|;)\s*display\s*:/;function Xc(e,t,n){const r=e.style,s=ie(n);let o=!1;if(n&&!s){if(t)if(ie(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&gn(r,l,"")}else for(const i in t)n[i]==null&&gn(r,i,"");for(const i in n)i==="display"&&(o=!0),gn(r,i,n[i])}else if(s){if(t!==n){const i=r[qc];i&&(n+=";"+i),r.cssText=n,o=Gc.test(n)}}else t&&e.removeAttribute("style");Os in e&&(e[Os]=o?r.display:"",e[Wc]&&(r.display="none"))}const Ls=/\s*!important$/;function gn(e,t,n){if(B(n))n.forEach(r=>gn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Yc(e,t);Ls.test(n)?e.setProperty(Ze(r),n.replace(Ls,""),"important"):e[r]=n}}const Ms=["Webkit","Moz","ms"],zn={};function Yc(e,t){const n=zn[t];if(n)return n;let r=Le(t);if(r!=="filter"&&r in e)return zn[t]=r;r=An(r);for(let s=0;sJn||(ea.then(()=>Jn=0),Jn=Date.now());function na(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Re(ra(r,n.value),t,5,[r])};return n.value=e,n.attached=ta(),n}function ra(e,t){if(B(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const $s=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,sa=(e,t,n,r,s,o)=>{const i=s==="svg";t==="class"?Kc(e,r,i):t==="style"?Xc(e,n,r):Kt(t)?Er(t)||Qc(e,t,n,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):oa(e,t,r,i))?(zc(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ps(e,t,r,i,o,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ps(e,t,r,i))};function oa(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&$s(t)&&q(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 s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return $s(t)&&ie(n)?!1:t in e}const Hs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return B(t)?n=>dn(t,n):t};function ia(e){e.target.composing=!0}function js(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qn=Symbol("_assign"),Cu={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[Qn]=Hs(s);const o=r||s.props&&s.props.type==="number";mt(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=cr(l)),e[Qn](l)}),n&&mt(e,"change",()=>{e.value=e.value.trim()}),t||(mt(e,"compositionstart",ia),mt(e,"compositionend",js),mt(e,"change",js))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[Qn]=Hs(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?cr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},la=["ctrl","shift","alt","meta"],ca={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)=>la.some(n=>e[`${n}Key`]&&!t.includes(n))},Su=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const o=Ze(s.key);if(t.some(i=>i===o||aa[i]===o))return e(s)})},fi=fe({patchProp:sa},jc);let Ht,Vs=!1;function ua(){return Ht||(Ht=uc(fi))}function fa(){return Ht=Vs?Ht:fc(fi),Vs=!0,Ht}const xu=(...e)=>{const t=ua().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=hi(r);if(!s)return;const o=t._component;!q(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,di(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},Au=(...e)=>{const t=fa().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=hi(r);if(s)return n(s,!0,di(s))},t};function di(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function hi(e){return ie(e)?document.querySelector(e):e}const da=window.__VP_SITE_DATA__;function Kr(e){return ro()?(Gi(e),!0):!1}function He(e){return typeof e=="function"?e():vo(e)}const pi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Ru=e=>e!=null,ha=Object.prototype.toString,pa=e=>ha.call(e)==="[object Object]",kt=()=>{},Ds=ga();function ga(){var e,t;return pi&&((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 ma(e,t){function n(...r){return new Promise((s,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(o)})}return n}const gi=e=>e();function ya(e,t={}){let n,r,s=kt;const o=l=>{clearTimeout(l),s(),s=kt};return l=>{const c=He(e),u=He(t.maxWait);return n&&o(n),c<=0||u!==void 0&&u<=0?(r&&(o(r),r=null),Promise.resolve(l())):new Promise((f,h)=>{s=t.rejectOnCancel?h:f,u&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,f(l())},u)),n=setTimeout(()=>{r&&o(r),r=null,f(l())},c)})}}function _a(e=gi){const t=oe(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...o)=>{t.value&&e(...o)};return{isActive:Ln(t),pause:n,resume:r,eventFilter:s}}function va(e){return jn()}function mi(...e){if(e.length!==1)return El(...e);const t=e[0];return typeof t=="function"?Ln(vl(()=>({get:t,set:kt}))):oe(t)}function yi(e,t,n={}){const{eventFilter:r=gi,...s}=n;return $e(e,ma(r,t),s)}function ba(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=_a(r);return{stop:yi(e,t,{...s,eventFilter:o}),pause:i,resume:l,isActive:c}}function Wr(e,t=!0,n){va()?At(e,n):t?e():Mn(e)}function Ou(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return yi(e,t,{...o,eventFilter:ya(r,{maxWait:s})})}function Lu(e,t,n){let r;he(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=kt}=r,c=oe(!s),u=i?Fr(t):oe(t);let f=0;return Br(async h=>{if(!c.value)return;f++;const m=f;let _=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const w=await e(O=>{h(()=>{o&&(o.value=!1),_||O()})});m===f&&(u.value=w)}catch(w){l(w)}finally{o&&m===f&&(o.value=!1),_=!0}}),s?se(()=>(c.value=!0,u.value)):u}function _i(e){var t;const n=He(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Me=pi?window:void 0;function xt(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=Me):[t,n,r,s]=e,!t)return kt;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(f=>f()),o.length=0},l=(f,h,m,_)=>(f.addEventListener(h,m,_),()=>f.removeEventListener(h,m,_)),c=$e(()=>[_i(t),He(s)],([f,h])=>{if(i(),!f)return;const m=pa(h)?{...h}:h;o.push(...n.flatMap(_=>r.map(w=>l(f,_,w,m))))},{immediate:!0,flush:"post"}),u=()=>{c(),i()};return Kr(u),u}function wa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Mu(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=Me,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=wa(t);return xt(s,o,f=>{f.repeat&&He(l)||c(f)&&n(f)},i)}function Ea(){const e=oe(!1),t=jn();return t&&At(()=>{e.value=!0},t),e}function Ca(e){const t=Ea();return se(()=>(t.value,!!e()))}function vi(e,t={}){const{window:n=Me}=t,r=Ca(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=oe(!1),i=u=>{o.value=u.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",i):s.removeListener(i))},c=Br(()=>{r.value&&(l(),s=n.matchMedia(He(e)),"addEventListener"in s?s.addEventListener("change",i):s.addListener(i),o.value=s.matches)});return Kr(()=>{c(),l(),s=void 0}),o}const cn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},an="__vueuse_ssr_handlers__",Sa=Ta();function Ta(){return an in cn||(cn[an]=cn[an]||{}),cn[an]}function bi(e,t){return Sa[e]||t}function xa(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 Aa={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()}},Us="vueuse-storage";function qr(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:h=Me,eventFilter:m,onError:_=v=>{console.error(v)},initOnMounted:w}=r,O=(f?Fr:oe)(typeof t=="function"?t():t);if(!n)try{n=bi("getDefaultStorage",()=>{var v;return(v=Me)==null?void 0:v.localStorage})()}catch(v){_(v)}if(!n)return O;const U=He(t),W=xa(U),H=(s=r.serializer)!=null?s:Aa[W],{pause:p,resume:y}=ba(O,()=>x(O.value),{flush:o,deep:i,eventFilter:m});h&&l&&Wr(()=>{n instanceof Storage?xt(h,"storage",V):xt(h,Us,M),w&&V()}),w||V();function I(v,P){if(h){const S={key:e,oldValue:v,newValue:P,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",S):new CustomEvent(Us,{detail:S}))}}function x(v){try{const P=n.getItem(e);if(v==null)I(P,null),n.removeItem(e);else{const S=H.write(v);P!==S&&(n.setItem(e,S),I(P,S))}}catch(P){_(P)}}function F(v){const P=v?v.newValue:n.getItem(e);if(P==null)return c&&U!=null&&n.setItem(e,H.write(U)),U;if(!v&&u){const S=H.read(P);return typeof u=="function"?u(S,U):W==="object"&&!Array.isArray(S)?{...U,...S}:S}else return typeof P!="string"?P:H.read(P)}function V(v){if(!(v&&v.storageArea!==n)){if(v&&v.key==null){O.value=U;return}if(!(v&&v.key!==e)){p();try{(v==null?void 0:v.newValue)!==H.write(O.value)&&(O.value=F(v))}catch(P){_(P)}finally{v?Mn(y):y()}}}}function M(v){V(v.detail)}return O}function wi(e){return vi("(prefers-color-scheme: dark)",e)}const Ra="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Oa(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Me,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=wi({window:s}),_=se(()=>m.value?"dark":"light"),w=c||(i==null?mi(r):qr(i,r,o,{window:s,listenToStorageChanges:l})),O=se(()=>w.value==="auto"?_.value:w.value),U=bi("updateHTMLAttrs",(y,I,x)=>{const F=typeof y=="string"?s==null?void 0:s.document.querySelector(y):_i(y);if(!F)return;const V=new Set,M=new Set;let v=null;if(I==="class"){const S=x.split(/\s/g);Object.values(h).flatMap(K=>(K||"").split(/\s/g)).filter(Boolean).forEach(K=>{S.includes(K)?V.add(K):M.add(K)})}else v={key:I,value:x};if(V.size===0&&M.size===0&&v===null)return;let P;f&&(P=s.document.createElement("style"),P.appendChild(document.createTextNode(Ra)),s.document.head.appendChild(P));for(const S of V)F.classList.add(S);for(const S of M)F.classList.remove(S);v&&F.setAttribute(v.key,v.value),f&&(s.getComputedStyle(P).opacity,document.head.removeChild(P))});function W(y){var I;U(t,n,(I=h[y])!=null?I:y)}function H(y){e.onChanged?e.onChanged(y,W):W(y)}$e(O,H,{flush:"post",immediate:!0}),Wr(()=>H(O.value));const p=se({get(){return u?w.value:O.value},set(y){w.value=y}});try{return Object.assign(p,{store:w,system:_,state:O})}catch{return p}}function La(e={}){const{valueDark:t="dark",valueLight:n="",window:r=Me}=e,s=Oa({...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=se(()=>s.system?s.system.value:wi({window:r}).value?"dark":"light");return se({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?s.value="auto":s.value=c}})}function Zn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Iu(e,t,n={}){const{window:r=Me}=n;return qr(e,t,r==null?void 0:r.localStorage,n)}function Ei(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 er=new WeakMap;function Pu(e,t=!1){const n=oe(t);let r=null,s="";$e(mi(e),l=>{const c=Zn(He(l));if(c){const u=c;if(er.get(u)||er.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(s=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=Zn(He(e));!l||n.value||(Ds&&(r=xt(l,"touchmove",c=>{Ma(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=Zn(He(e));!l||!n.value||(Ds&&(r==null||r()),l.style.overflow=s,er.delete(l),n.value=!1)};return Kr(i),se({get(){return n.value},set(l){l?o():i()}})}function Nu(e,t,n={}){const{window:r=Me}=n;return qr(e,t,r==null?void 0:r.sessionStorage,n)}function Fu(e={}){const{window:t=Me,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const r=oe(t.scrollX),s=oe(t.scrollY),o=se({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=se({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return xt(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}function $u(e={}){const{window:t=Me,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:o=!0,type:i="inner"}=e,l=oe(n),c=oe(r),u=()=>{t&&(i==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):o?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(u(),Wr(u),xt("resize",u,{passive:!0}),s){const f=vi("(orientation: portrait)");$e(f,()=>u())}return{width:l,height:c}}const tr={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var nr={};const Ci=/^(?:[a-z]+:|\/\/)/i,Ia="vitepress-theme-appearance",Pa=/#.*$/,Na=/[?#].*$/,Fa=/(?:(^|\/)index)?\.(?:md|html)$/,pe=typeof document<"u",Si={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function $a(e,t,n=!1){if(t===void 0)return!1;if(e=Bs(`/${e}`),n)return new RegExp(t).test(e);if(Bs(t)!==e)return!1;const r=t.match(Pa);return r?(pe?location.hash:"")===r[0]:!0}function Bs(e){return decodeURI(e).replace(Na,"").replace(Fa,"$1")}function Ha(e){return Ci.test(e)}function ja(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!Ha(n)&&$a(t,`/${n}/`,!0))||"root"}function Va(e,t){var r,s,o,i,l,c,u;const n=ja(e,t);return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.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:xi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function Ti(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=Da(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Da(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ua(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([o,i])=>o===n&&i[s[0]]===s[1])}function xi(e,t){return[...e.filter(n=>!Ua(t,n)),...t]}const Ba=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,ka=/^[a-z]:/i;function ks(e){const t=ka.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Ba,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const rr=new Set;function Ka(e){if(rr.size===0){const n=typeof process=="object"&&(nr==null?void 0:nr.VITE_EXTRA_EXTENSIONS)||(tr==null?void 0:tr.VITE_EXTRA_EXTENSIONS)||"";("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"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>rr.add(r))}const t=e.split(".").pop();return t==null||!rr.has(t.toLowerCase())}function Hu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Wa=Symbol(),ft=Fr(da);function ju(e){const t=se(()=>Va(ft.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?oe(!0):n?La({storageKey:Ia,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),s=oe(pe?location.hash:"");return pe&&window.addEventListener("hashchange",()=>{s.value=location.hash}),$e(()=>e.data,()=>{s.value=pe?location.hash:""}),{site:t,theme:se(()=>t.value.themeConfig),page:se(()=>e.data),frontmatter:se(()=>e.data.frontmatter),params:se(()=>e.data.params),lang:se(()=>t.value.lang),dir:se(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:se(()=>t.value.localeIndex||"root"),title:se(()=>Ti(t.value,e.data)),description:se(()=>e.data.description||t.value.description),isDark:r,hash:se(()=>s.value)}}function qa(){const e=St(Wa);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Ga(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ks(e){return Ci.test(e)||!e.startsWith("/")?e:Ga(ft.value.base,e)}function Xa(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),pe){const n="/";t=ks(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${ks(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let mn=[];function Vu(e){mn.push(e),Fn(()=>{mn=mn.filter(t=>t!==e)})}function Ya(){let e=ft.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=Ws(e,n);else if(Array.isArray(e))for(const r of e){const s=Ws(r,n);if(s){t=s;break}}return t}function Ws(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const za=Symbol(),Ai="http://a.com",Ja=()=>({path:"/",component:null,data:Si});function Du(e,t){const n=On(Ja()),r={route:n,go:s};async function s(l=pe?location.href:"/"){var c,u;l=sr(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(pe&&l!==sr(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await i(l),await((u=r.onAfterRouteChanged)==null?void 0:u.call(r,l)))}let o=null;async function i(l,c=0,u=!1){var m;if(await((m=r.onBeforePageLoad)==null?void 0:m.call(r,l))===!1)return;const f=new URL(l,Ai),h=o=f.pathname;try{let _=await e(h);if(!_)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:w,__pageData:O}=_;if(!w)throw new Error(`Invalid route component: ${w}`);n.path=pe?h:Ks(h),n.component=hn(w),n.data=hn(O),pe&&Mn(()=>{let U=ft.value.base+O.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ft.value.cleanUrls&&!U.endsWith("/")&&(U+=".html"),U!==f.pathname&&(f.pathname=U,l=U+f.search+f.hash,history.replaceState({},"",l)),f.hash&&!c){let W=null;try{W=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(H){console.warn(H)}if(W){qs(W,f.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!u)try{const w=await fetch(ft.value.base+"hashmap.json");window.__VP_HASH_MAP__=await w.json(),await i(l,c,!0);return}catch{}if(o===h){o=null,n.path=pe?h:Ks(h),n.component=t?hn(t):null;const w=pe?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Si,relativePath:w}}}}return pe&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:f,origin:h,pathname:m,hash:_,search:w}=new URL(u,c.baseURI),O=new URL(location.href);h===O.origin&&Ka(m)&&(l.preventDefault(),m===O.pathname&&w===O.search?(_!==O.hash&&(history.pushState({},"",f),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:O.href,newURL:f}))),_?qs(c,_,c.classList.contains("header-anchor")):window.scrollTo(0,0)):s(f))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await i(sr(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Qa(){const e=St(za);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ri(){return Qa().route}function qs(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=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(r).paddingTop,10),i=window.scrollY+r.getBoundingClientRect().top-Ya()+o;requestAnimationFrame(s)}}function sr(e){const t=new URL(e,Ai);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ft.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 or=()=>mn.forEach(e=>e()),Uu=Hr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ri(),{site:n}=qa();return()=>br(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?br(t.component,{onVnodeMounted:or,onVnodeUpdated:or,onVnodeUnmounted:or}):"404 Page Not Found"])}}),Bu=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},Za="modulepreload",eu=function(e){return"/"+e},Gs={},ku=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),i=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.all(n.map(l=>{if(l=eu(l),l in Gs)return;Gs[l]=!0;const c=l.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":Za,c||(f.as="script",f.crossOrigin=""),f.href=l,i&&f.setAttribute("nonce",i),document.head.appendChild(f),c)return new Promise((h,m)=>{f.addEventListener("load",h),f.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${l}`)))})}))}return s.then(()=>t()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},Ku=Hr({setup(e,{slots:t}){const n=oe(!1);return At(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Wu(){pe&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const o=r.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(u=>u.classList.contains("active"));if(!i)return;const l=o.children[s];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function qu(){if(pe){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,o=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let u=c.textContent||"";i&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),tu(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function tu(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 r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function Gu(e,t){let n=!0,r=[];const s=o=>{if(n){n=!1,o.forEach(l=>{const c=ir(l);for(const u of document.head.children)if(u.isEqualNode(c)){r.push(u);return}});return}const i=o.map(ir);r.forEach((l,c)=>{const u=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));u!==-1?delete i[u]:(l==null||l.remove(),delete r[c])}),i.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...i].filter(Boolean)};Br(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],u=Ti(i,o);u!==document.title&&(document.title=u);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):ir(["meta",{name:"description",content:f}]),s(xi(i.head,ru(c)))})}function ir([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function nu(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function ru(e){return e.filter(t=>!nu(t))}const lr=new Set,Oi=()=>document.createElement("link"),su=e=>{const t=Oi();t.rel="prefetch",t.href=e,document.head.appendChild(t)},ou=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let un;const iu=pe&&(un=Oi())&&un.relList&&un.relList.supports&&un.relList.supports("prefetch")?su:ou;function Xu(){if(!pe||!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 r=()=>{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(!lr.has(c)){lr.add(c);const u=Xa(c);u&&iu(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):lr.add(l))})})};At(r);const s=Ri();$e(()=>s.path,r),Fn(()=>{n&&n.disconnect()})}export{Tu as $,vu as A,Hl as B,Ya as C,du as D,pu as E,ve as F,Fr as G,Vu as H,le as I,hu as J,Ci as K,Ri as L,xc as M,St as N,$u as O,Tr as P,Mu as Q,Mn as R,Fu as S,ai as T,pe as U,Ln as V,fu as W,ku as X,Pu as Y,Jl as Z,Bu as _,oi as a,mu as a0,Lo as a1,Su as a2,yu as a3,xu as a4,br as a5,wu as a6,lu as a7,Gu as a8,za as a9,Hu as aA,ju as aa,Wa as ab,Uu as ac,Ku as ad,ft as ae,Au as af,Du as ag,Xa as ah,Xu as ai,qu as aj,Wu as ak,He as al,_i as am,Ru as an,Kr as ao,Lu as ap,Nu as aq,Iu as ar,Ou as as,Qa as at,xt as au,uu as av,Cu as aw,he as ax,_u as ay,hn as az,ni as b,bu as c,Hr as d,Eu as e,Ka as f,Ks as g,se as h,Ha as i,si as j,vo as k,au as l,$a as m,xr as n,ei as o,cu as p,vi as q,gu as r,oe as s,Ki as t,qa as u,$e as v,Rl as w,Br as x,At as y,Fn as z};
diff --git a/assets/chunks/giscus-aTimukGI.CKTvSCx2.js b/assets/chunks/giscus-aTimukGI.CKTvSCx2.js
new file mode 100644
index 00000000..901e31ab
--- /dev/null
+++ b/assets/chunks/giscus-aTimukGI.CKTvSCx2.js
@@ -0,0 +1,66 @@
+/**
+ * @license
+ * Copyright 2019 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */const x=globalThis,j=x.ShadowRoot&&(x.ShadyCSS===void 0||x.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,W=Symbol(),q=new WeakMap;let ot=class{constructor(s,t,e){if(this._$cssResult$=!0,e!==W)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=s,this.t=t}get styleSheet(){let s=this.o;const t=this.t;if(j&&s===void 0){const e=t!==void 0&&t.length===1;e&&(s=q.get(t)),s===void 0&&((this.o=s=new CSSStyleSheet).replaceSync(this.cssText),e&&q.set(t,s))}return s}toString(){return this.cssText}};const pt=s=>new ot(typeof s=="string"?s:s+"",void 0,W),_t=(s,...t)=>{const e=s.length===1?s[0]:t.reduce((i,r,o)=>i+(n=>{if(n._$cssResult$===!0)return n.cssText;if(typeof n=="number")return n;throw Error("Value passed to 'css' function must be a 'css' function result: "+n+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(r)+s[o+1],s[0]);return new ot(e,s,W)},gt=(s,t)=>{if(j)s.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const e of t){const i=document.createElement("style"),r=x.litNonce;r!==void 0&&i.setAttribute("nonce",r),i.textContent=e.cssText,s.appendChild(i)}},K=j?s=>s:s=>s instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return pt(e)})(s):s;/**
+ * @license
+ * Copyright 2017 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */const{is:$t,defineProperty:ft,getOwnPropertyDescriptor:mt,getOwnPropertyNames:vt,getOwnPropertySymbols:At,getPrototypeOf:yt}=Object,E=globalThis,Y=E.trustedTypes,St=Y?Y.emptyScript:"",J=E.reactiveElementPolyfillSupport,U=(s,t)=>s,H={toAttribute(s,t){switch(t){case Boolean:s=s?St:null;break;case Object:case Array:s=s==null?s:JSON.stringify(s)}return s},fromAttribute(s,t){let e=s;switch(t){case Boolean:e=s!==null;break;case Number:e=s===null?null:Number(s);break;case Object:case Array:try{e=JSON.parse(s)}catch{e=null}}return e}},V=(s,t)=>!$t(s,t),F={attribute:!0,type:String,converter:H,reflect:!1,hasChanged:V};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),E.litPropertyMetadata??(E.litPropertyMetadata=new WeakMap);class S extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??(this.l=[])).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=F){if(e.state&&(e.attribute=!1),this._$Ei(),this.elementProperties.set(t,e),!e.noAccessor){const i=Symbol(),r=this.getPropertyDescriptor(t,i,e);r!==void 0&&ft(this.prototype,t,r)}}static getPropertyDescriptor(t,e,i){const{get:r,set:o}=mt(this.prototype,t)??{get(){return this[e]},set(n){this[e]=n}};return{get(){return r==null?void 0:r.call(this)},set(n){const a=r==null?void 0:r.call(this);o.call(this,n),this.requestUpdate(t,a,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??F}static _$Ei(){if(this.hasOwnProperty(U("elementProperties")))return;const t=yt(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(U("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(U("properties"))){const e=this.properties,i=[...vt(e),...At(e)];for(const r of i)this.createProperty(r,e[r])}const t=this[Symbol.metadata];if(t!==null){const e=litPropertyMetadata.get(t);if(e!==void 0)for(const[i,r]of e)this.elementProperties.set(i,r)}this._$Eh=new Map;for(const[e,i]of this.elementProperties){const r=this._$Eu(e,i);r!==void 0&&this._$Eh.set(r,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const r of i)e.unshift(K(r))}else t!==void 0&&e.push(K(t));return e}static _$Eu(t,e){const i=e.attribute;return i===!1?void 0:typeof i=="string"?i:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){var t;this._$Eg=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$ES(),this.requestUpdate(),(t=this.constructor.l)==null||t.forEach(e=>e(this))}addController(t){var e;(this._$E_??(this._$E_=new Set)).add(t),this.renderRoot!==void 0&&this.isConnected&&((e=t.hostConnected)==null||e.call(t))}removeController(t){var e;(e=this._$E_)==null||e.delete(t)}_$ES(){const t=new Map,e=this.constructor.elementProperties;for(const i of e.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return gt(t,this.constructor.elementStyles),t}connectedCallback(){var t;this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(t=this._$E_)==null||t.forEach(e=>{var i;return(i=e.hostConnected)==null?void 0:i.call(e)})}enableUpdating(t){}disconnectedCallback(){var t;(t=this._$E_)==null||t.forEach(e=>{var i;return(i=e.hostDisconnected)==null?void 0:i.call(e)})}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$EO(t,e){var i;const r=this.constructor.elementProperties.get(t),o=this.constructor._$Eu(t,r);if(o!==void 0&&r.reflect===!0){const n=(((i=r.converter)==null?void 0:i.toAttribute)!==void 0?r.converter:H).toAttribute(e,r.type);this._$Em=t,n==null?this.removeAttribute(o):this.setAttribute(o,n),this._$Em=null}}_$AK(t,e){var i;const r=this.constructor,o=r._$Eh.get(t);if(o!==void 0&&this._$Em!==o){const n=r.getPropertyOptions(o),a=typeof n.converter=="function"?{fromAttribute:n.converter}:((i=n.converter)==null?void 0:i.fromAttribute)!==void 0?n.converter:H;this._$Em=o,this[o]=a.fromAttribute(e,n.type),this._$Em=null}}requestUpdate(t,e,i,r=!1,o){if(t!==void 0){if(i??(i=this.constructor.getPropertyOptions(t)),!(i.hasChanged??V)(r?o:this[t],e))return;this.C(t,e,i)}this.isUpdatePending===!1&&(this._$Eg=this._$EP())}C(t,e,i){this._$AL.has(t)||this._$AL.set(t,e),i.reflect===!0&&this._$Em!==t&&(this._$Ej??(this._$Ej=new Set)).add(t)}async _$EP(){this.isUpdatePending=!0;try{await this._$Eg}catch(e){Promise.reject(e)}const t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(const[o,n]of this._$Ep)this[o]=n;this._$Ep=void 0}const r=this.constructor.elementProperties;if(r.size>0)for(const[o,n]of r)n.wrapped!==!0||this._$AL.has(o)||this[o]===void 0||this.C(o,this[o],n)}let e=!1;const i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),(t=this._$E_)==null||t.forEach(r=>{var o;return(o=r.hostUpdate)==null?void 0:o.call(r)}),this.update(i)):this._$ET()}catch(r){throw e=!1,this._$ET(),r}e&&this._$AE(i)}willUpdate(t){}_$AE(t){var e;(e=this._$E_)==null||e.forEach(i=>{var r;return(r=i.hostUpdated)==null?void 0:r.call(i)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$ET(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Eg}shouldUpdate(t){return!0}update(t){this._$Ej&&(this._$Ej=this._$Ej.forEach(e=>this._$EO(e,this[e]))),this._$ET()}updated(t){}firstUpdated(t){}}S.elementStyles=[],S.shadowRootOptions={mode:"open"},S[U("elementProperties")]=new Map,S[U("finalized")]=new Map,J==null||J({ReactiveElement:S}),(E.reactiveElementVersions??(E.reactiveElementVersions=[])).push("2.0.2");/**
+ * @license
+ * Copyright 2017 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */const L=globalThis,k=L.trustedTypes,Q=k?k.createPolicy("lit-html",{createHTML:s=>s}):void 0,at="$lit$",m=`lit$${(Math.random()+"").slice(9)}$`,ht="?"+m,Et=`<${ht}>`,y=document,O=()=>y.createComment(""),R=s=>s===null||typeof s!="object"&&typeof s!="function",lt=Array.isArray,bt=s=>lt(s)||typeof(s==null?void 0:s[Symbol.iterator])=="function",z=`[
+\f\r]`,w=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Z=/-->/g,X=/>/g,v=RegExp(`>|${z}(?:([^\\s"'>=/]+)(${z}*=${z}*(?:[^
+\f\r"'\`<>=]|("|')|))|$)`,"g"),tt=/'/g,et=/"/g,ct=/^(?:script|style|textarea|title)$/i,Ct=s=>(t,...e)=>({_$litType$:s,strings:t,values:e}),wt=Ct(1),b=Symbol.for("lit-noChange"),c=Symbol.for("lit-nothing"),st=new WeakMap,A=y.createTreeWalker(y,129);function dt(s,t){if(!Array.isArray(s)||!s.hasOwnProperty("raw"))throw Error("invalid template strings array");return Q!==void 0?Q.createHTML(t):t}const Ut=(s,t)=>{const e=s.length-1,i=[];let r,o=t===2?"":"",n=w;for(let a=0;a"?(n=r??w,l=-1):u[1]===void 0?l=-2:(l=n.lastIndex-u[2].length,g=u[1],n=u[3]===void 0?v:u[3]==='"'?et:tt):n===et||n===tt?n=v:n===Z||n===X?n=w:(n=v,r=void 0);const f=n===v&&s[a+1].startsWith("/>")?" ":"";o+=n===w?h+Et:l>=0?(i.push(g),h.slice(0,l)+at+h.slice(l)+m+f):h+m+(l===-2?a:f)}return[dt(s,o+(s[e]||">")+(t===2?" ":"")),i]};class N{constructor({strings:t,_$litType$:e},i){let r;this.parts=[];let o=0,n=0;const a=t.length-1,h=this.parts,[g,u]=Ut(t,e);if(this.el=N.createElement(g,i),A.currentNode=this.el.content,e===2){const l=this.el.content.firstChild;l.replaceWith(...l.childNodes)}for(;(r=A.nextNode())!==null&&h.length0){r.textContent=k?k.emptyScript:"";for(let f=0;f<$;f++)r.append(l[f],O()),A.nextNode(),h.push({type:2,index:++o});r.append(l[$],O())}}}else if(r.nodeType===8)if(r.data===ht)h.push({type:2,index:o});else{let l=-1;for(;(l=r.data.indexOf(m,l+1))!==-1;)h.push({type:7,index:o}),l+=m.length-1}o++}}static createElement(t,e){const i=y.createElement("template");return i.innerHTML=t,i}}function C(s,t,e=s,i){var r,o;if(t===b)return t;let n=i!==void 0?(r=e._$Co)==null?void 0:r[i]:e._$Cl;const a=R(t)?void 0:t._$litDirective$;return(n==null?void 0:n.constructor)!==a&&((o=n==null?void 0:n._$AO)==null||o.call(n,!1),a===void 0?n=void 0:(n=new a(s),n._$AT(s,e,i)),i!==void 0?(e._$Co??(e._$Co=[]))[i]=n:e._$Cl=n),n!==void 0&&(t=C(s,n._$AS(s,t.values),n,i)),t}let Pt=class{constructor(s,t){this._$AV=[],this._$AN=void 0,this._$AD=s,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(s){const{el:{content:t},parts:e}=this._$AD,i=((s==null?void 0:s.creationScope)??y).importNode(t,!0);A.currentNode=i;let r=A.nextNode(),o=0,n=0,a=e[0];for(;a!==void 0;){if(o===a.index){let h;a.type===2?h=new M(r,r.nextSibling,this,s):a.type===1?h=new a.ctor(r,a.name,a.strings,this,s):a.type===6&&(h=new Nt(r,this,s)),this._$AV.push(h),a=e[++n]}o!==(a==null?void 0:a.index)&&(r=A.nextNode(),o++)}return A.currentNode=y,i}p(s){let t=0;for(const e of this._$AV)e!==void 0&&(e.strings!==void 0?(e._$AI(s,e,t),t+=e.strings.length-2):e._$AI(s[t])),t++}};class M{get _$AU(){var t;return((t=this._$AM)==null?void 0:t._$AU)??this._$Cv}constructor(t,e,i,r){this.type=2,this._$AH=c,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=i,this.options=r,this._$Cv=(r==null?void 0:r.isConnected)??!0}get parentNode(){let t=this._$AA.parentNode;const e=this._$AM;return e!==void 0&&(t==null?void 0:t.nodeType)===11&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=C(this,t,e),R(t)?t===c||t==null||t===""?(this._$AH!==c&&this._$AR(),this._$AH=c):t!==this._$AH&&t!==b&&this._(t):t._$litType$!==void 0?this.g(t):t.nodeType!==void 0?this.$(t):bt(t)?this.T(t):this._(t)}k(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}$(t){this._$AH!==t&&(this._$AR(),this._$AH=this.k(t))}_(t){this._$AH!==c&&R(this._$AH)?this._$AA.nextSibling.data=t:this.$(y.createTextNode(t)),this._$AH=t}g(t){var e;const{values:i,_$litType$:r}=t,o=typeof r=="number"?this._$AC(t):(r.el===void 0&&(r.el=N.createElement(dt(r.h,r.h[0]),this.options)),r);if(((e=this._$AH)==null?void 0:e._$AD)===o)this._$AH.p(i);else{const n=new Pt(o,this),a=n.u(this.options);n.p(i),this.$(a),this._$AH=n}}_$AC(t){let e=st.get(t.strings);return e===void 0&&st.set(t.strings,e=new N(t)),e}T(t){lt(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,r=0;for(const o of t)r===e.length?e.push(i=new M(this.k(O()),this.k(O()),this,this.options)):i=e[r],i._$AI(o),r++;r2||i[0]!==""||i[1]!==""?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=c}_$AI(t,e=this,i,r){const o=this.strings;let n=!1;if(o===void 0)t=C(this,t,e,0),n=!R(t)||t!==this._$AH&&t!==b,n&&(this._$AH=t);else{const a=t;let h,g;for(t=o[0],h=0;h{const i=(e==null?void 0:e.renderBefore)??t;let r=i._$litPart$;if(r===void 0){const o=(e==null?void 0:e.renderBefore)??null;i._$litPart$=r=new M(t.insertBefore(O(),o),o,void 0,e??{})}return r._$AI(s),r};/**
+ * @license
+ * Copyright 2017 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */let P=class extends S{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var s;const t=super.createRenderRoot();return(s=this.renderOptions).renderBefore??(s.renderBefore=t.firstChild),t}update(s){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(s),this._$Do=Mt(t,this.renderRoot,this.renderOptions)}connectedCallback(){var s;super.connectedCallback(),(s=this._$Do)==null||s.setConnected(!0)}disconnectedCallback(){var s;super.disconnectedCallback(),(s=this._$Do)==null||s.setConnected(!1)}render(){return b}};var rt;P._$litElement$=!0,P.finalized=!0,(rt=globalThis.litElementHydrateSupport)==null||rt.call(globalThis,{LitElement:P});const nt=globalThis.litElementPolyfillSupport;nt==null||nt({LitElement:P});(globalThis.litElementVersions??(globalThis.litElementVersions=[])).push("4.0.2");/**
+ * @license
+ * Copyright 2017 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */const It=s=>(t,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(s,t)}):customElements.define(s,t)};/**
+ * @license
+ * Copyright 2017 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */const xt={attribute:!0,type:String,converter:H,reflect:!1,hasChanged:V},Ht=(s=xt,t,e)=>{const{kind:i,metadata:r}=e;let o=globalThis.litPropertyMetadata.get(r);if(o===void 0&&globalThis.litPropertyMetadata.set(r,o=new Map),o.set(e.name,s),i==="accessor"){const{name:n}=e;return{set(a){const h=t.get.call(this);t.set.call(this,a),this.requestUpdate(n,h,s)},init(a){return a!==void 0&&this.C(n,void 0,s),a}}}if(i==="setter"){const{name:n}=e;return function(a){const h=this[n];t.call(this,a),this.requestUpdate(n,h,s)}}throw Error("Unsupported decorator location: "+i)};function _(s){return(t,e)=>typeof e=="object"?Ht(s,t,e):((i,r,o)=>{const n=r.hasOwnProperty(o);return r.constructor.createProperty(o,n?{...i,wrapped:!0}:i),n?Object.getOwnPropertyDescriptor(r,o):void 0})(s,t,e)}/**
+ * @license
+ * Copyright 2020 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */const Lt=s=>s.strings===void 0;/**
+ * @license
+ * Copyright 2017 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */const kt={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Gt=s=>(...t)=>({_$litDirective$:s,values:t});let Dt=class{constructor(s){}get _$AU(){return this._$AM._$AU}_$AT(s,t,e){this._$Ct=s,this._$AM=t,this._$Ci=e}_$AS(s,t){return this.update(s,t)}update(s,t){return this.render(...t)}};/**
+ * @license
+ * Copyright 2017 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */const T=(s,t)=>{var e;const i=s._$AN;if(i===void 0)return!1;for(const r of i)(e=r._$AO)==null||e.call(r,t,!1),T(r,t);return!0},G=s=>{let t,e;do{if((t=s._$AM)===void 0)break;e=t._$AN,e.delete(s),s=t}while((e==null?void 0:e.size)===0)},ut=s=>{for(let t;t=s._$AM;s=t){let e=t._$AN;if(e===void 0)t._$AN=e=new Set;else if(e.has(s))break;e.add(s),jt(t)}};function zt(s){this._$AN!==void 0?(G(this),this._$AM=s,ut(this)):this._$AM=s}function Bt(s,t=!1,e=0){const i=this._$AH,r=this._$AN;if(r!==void 0&&r.size!==0)if(t)if(Array.isArray(i))for(let o=e;o{s.type==kt.CHILD&&(s._$AP??(s._$AP=Bt),s._$AQ??(s._$AQ=zt))};class Wt extends Dt{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,e,i){super._$AT(t,e,i),ut(this),this.isConnected=t._$AU}_$AO(t,e=!0){var i,r;t!==this.isConnected&&(this.isConnected=t,t?(i=this.reconnected)==null||i.call(this):(r=this.disconnected)==null||r.call(this)),e&&(T(this,t),G(this))}setValue(t){if(Lt(this._$Ct))this._$Ct._$AI(t,this);else{const e=[...this._$Ct._$AH];e[this._$Ci]=t,this._$Ct._$AI(e,this,0)}}disconnected(){}reconnected(){}}/**
+ * @license
+ * Copyright 2020 Google LLC
+ * SPDX-License-Identifier: BSD-3-Clause
+ */const Vt=()=>new qt;class qt{}const B=new WeakMap,Kt=Gt(class extends Wt{render(s){return c}update(s,[t]){var e;const i=t!==this.G;return i&&this.G!==void 0&&this.ot(void 0),(i||this.rt!==this.lt)&&(this.G=t,this.ct=(e=s.options)==null?void 0:e.host,this.ot(this.lt=s.element)),c}ot(s){if(typeof this.G=="function"){const t=this.ct??globalThis;let e=B.get(t);e===void 0&&(e=new WeakMap,B.set(t,e)),e.get(this.G)!==void 0&&this.G.call(this.ct,void 0),e.set(this.G,s),s!==void 0&&this.G.call(this.ct,s)}else this.G.value=s}get rt(){var s,t;return typeof this.G=="function"?(s=B.get(this.ct??globalThis))==null?void 0:s.get(this.G):(t=this.G)==null?void 0:t.value}disconnected(){this.rt===this.lt&&this.ot(void 0)}reconnected(){this.ot(this.lt)}});var Yt=Object.defineProperty,Jt=Object.getOwnPropertyDescriptor,p=(s,t,e,i)=>{for(var r=i>1?void 0:i?Jt(t,e):t,o=s.length-1,n;o>=0;o--)(n=s[o])&&(r=(i?n(t,e,r):n(r))||r);return i&&r&&Yt(t,e,r),r};function Ft(s){return customElements.get(s)?t=>t:It(s)}let d=class extends P{constructor(){super(),this.GISCUS_SESSION_KEY="giscus-session",this.GISCUS_DEFAULT_HOST="https://giscus.app",this.ERROR_SUGGESTION="Please consider reporting this error at https://github.com/giscus/giscus/issues/new.",this.__session="",this._iframeRef=Vt(),this.messageEventHandler=this.handleMessageEvent.bind(this),this.hasLoaded=!1,this.host=this.GISCUS_DEFAULT_HOST,this.strict="0",this.reactionsEnabled="1",this.emitMetadata="0",this.inputPosition="bottom",this.theme="light",this.lang="en",this.loading="eager",this.setupSession(),window.addEventListener("message",this.messageEventHandler)}get iframeRef(){var s;return(s=this._iframeRef)==null?void 0:s.value}get _host(){try{return new URL(this.host),this.host}catch{return this.GISCUS_DEFAULT_HOST}}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("message",this.messageEventHandler)}_formatError(s){return`[giscus] An error occurred. Error message: "${s}".`}setupSession(){const s=location.href,t=new URL(s),e=localStorage.getItem(this.GISCUS_SESSION_KEY),i=t.searchParams.get("giscus")??"";if(this.__session="",i){localStorage.setItem(this.GISCUS_SESSION_KEY,JSON.stringify(i)),this.__session=i,t.searchParams.delete("giscus"),t.hash="",history.replaceState(void 0,document.title,t.toString());return}if(e)try{this.__session=JSON.parse(e)}catch(r){localStorage.removeItem(this.GISCUS_SESSION_KEY),console.warn(`${this._formatError(r==null?void 0:r.message)} Session has been cleared.`)}}signOut(){localStorage.removeItem(this.GISCUS_SESSION_KEY),this.__session="",this.update(new Map)}handleMessageEvent(s){if(s.origin!==this._host)return;const{data:t}=s;if(!(typeof t=="object"&&t.giscus))return;if(this.iframeRef&&t.giscus.resizeHeight&&(this.iframeRef.style.height=`${t.giscus.resizeHeight}px`),t.giscus.signOut){console.info("[giscus] User has logged out. Session has been cleared."),this.signOut();return}if(!t.giscus.error)return;const e=t.giscus.error;if(e.includes("Bad credentials")||e.includes("Invalid state value")||e.includes("State has expired")){if(localStorage.getItem(this.GISCUS_SESSION_KEY)!==null){console.warn(`${this._formatError(e)} Session has been cleared.`),this.signOut();return}console.error(`${this._formatError(e)} No session is stored initially. ${this.ERROR_SUGGESTION}`)}if(e.includes("Discussion not found")){console.warn(`[giscus] ${e}. A new discussion will be created if a comment/reaction is submitted.`);return}console.error(`${this._formatError(e)} ${this.ERROR_SUGGESTION}`)}sendMessage(s){var t;!((t=this.iframeRef)!=null&&t.contentWindow)||!this.hasLoaded||this.iframeRef.contentWindow.postMessage({giscus:s},this._host)}updateConfig(){const s={setConfig:{repo:this.repo,repoId:this.repoId,category:this.category,categoryId:this.categoryId,term:this.getTerm(),number:+this.getNumber(),strict:this.strict==="1",reactionsEnabled:this.reactionsEnabled==="1",emitMetadata:this.emitMetadata==="1",inputPosition:this.inputPosition,theme:this.theme,lang:this.lang}};this.sendMessage(s)}firstUpdated(){var s;(s=this.iframeRef)==null||s.addEventListener("load",()=>{var t;(t=this.iframeRef)==null||t.classList.remove("loading"),this.hasLoaded=!0,this.updateConfig()})}requestUpdate(s,t,e){if(!this.hasUpdated||s==="host"){super.requestUpdate(s,t,e);return}this.updateConfig()}getMetaContent(s,t=!1){const e=t?`meta[property='og:${s}'],`:"",i=document.querySelector(e+`meta[name='${s}']`);return i?i.content:""}_getCleanedUrl(){const s=new URL(location.href);return s.searchParams.delete("giscus"),s.hash="",s}getTerm(){switch(this.mapping){case"url":return this._getCleanedUrl().toString();case"title":return document.title;case"og:title":return this.getMetaContent("title",!0);case"specific":return this.term??"";case"number":return"";case"pathname":default:return location.pathname.length<2?"index":location.pathname.substring(1).replace(/\.\w+$/,"")}}getNumber(){return this.mapping==="number"?this.term??"":""}getIframeSrc(){const s=this._getCleanedUrl().toString(),t=`${s}${this.id?"#"+this.id:""}`,e=this.getMetaContent("description",!0),i=this.getMetaContent("giscus:backlink")||s,r={origin:t,session:this.__session,repo:this.repo,repoId:this.repoId??"",category:this.category??"",categoryId:this.categoryId??"",term:this.getTerm(),number:this.getNumber(),strict:this.strict,reactionsEnabled:this.reactionsEnabled,emitMetadata:this.emitMetadata,inputPosition:this.inputPosition,theme:this.theme,description:e,backLink:i},o=this._host,n=this.lang?`/${this.lang}`:"",a=new URLSearchParams(r);return`${o}${n}/widget?${a.toString()}`}render(){return wt`
+
+ `}};d.styles=_t`
+ :host,
+ iframe {
+ width: 100%;
+ border: none;
+ min-height: 150px;
+ color-scheme: light dark;
+ }
+
+ iframe.loading {
+ opacity: 0;
+ }
+ `;p([_({reflect:!0})],d.prototype,"host",2);p([_({reflect:!0})],d.prototype,"repo",2);p([_({reflect:!0})],d.prototype,"repoId",2);p([_({reflect:!0})],d.prototype,"category",2);p([_({reflect:!0})],d.prototype,"categoryId",2);p([_({reflect:!0})],d.prototype,"mapping",2);p([_({reflect:!0})],d.prototype,"term",2);p([_({reflect:!0})],d.prototype,"strict",2);p([_({reflect:!0})],d.prototype,"reactionsEnabled",2);p([_({reflect:!0})],d.prototype,"emitMetadata",2);p([_({reflect:!0})],d.prototype,"inputPosition",2);p([_({reflect:!0})],d.prototype,"theme",2);p([_({reflect:!0})],d.prototype,"lang",2);p([_({reflect:!0})],d.prototype,"loading",2);d=p([Ft("giscus-widget")],d);export{d as GiscusWidget};
diff --git a/assets/chunks/theme.CuJNMu0w.js b/assets/chunks/theme.CuJNMu0w.js
new file mode 100644
index 00000000..79c4bb6f
--- /dev/null
+++ b/assets/chunks/theme.CuJNMu0w.js
@@ -0,0 +1,4 @@
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.C8JYv8Jy.js","assets/chunks/framework.Bhh1y9_T.js"])))=>i.map(i=>d[i]);
+import{d as _,o as s,c,r as u,n as H,a as oe,t as A,b as $,w as p,e as h,T as Oe,_ as y,u as ot,i as Mt,f as Bt,g as ye,h as L,j as d,k as i,p as G,l as j,m as ce,q as ze,s as z,v as Z,x as Le,y as J,z as Fe,A as De,B as Ot,C as Ft,D as ie,F as B,E as W,G as nt,H as Pe,I as g,J as ee,K as at,L as pe,M as re,N as Se,O as Dt,P as st,Q as Ae,R as Ue,S as rt,U as Ve,V as Ut,W as Gt,X as it,Y as lt,Z as ct,$ as jt,a0 as qt,a1 as Rt,a2 as ut,a3 as Kt,a4 as Wt,a5 as ve,a6 as Jt,a7 as Yt}from"./framework.Bhh1y9_T.js";const dt=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(s(),c("span",{class:H(["VPBadge",e.type])},[u(e.$slots,"default",{},()=>[oe(A(e.text),1)])],2))}}),Zt={key:0,class:"VPBackdrop"},Xt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(s(),$(Oe,{name:"fade"},{default:p(()=>[e.show?(s(),c("div",Zt)):h("",!0)]),_:1}))}}),Qt=y(Xt,[["__scopeId","data-v-4a25c188"]]),w=ot;function xt(o,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(o,e):(o(),(n=!0)&&setTimeout(()=>n=!1,e))}}function He(o){return/^\//.test(o)?o:`/${o}`}function Ge(o){const{pathname:e,search:t,hash:n,protocol:a}=new URL(o,"http://a.com");if(Mt(o)||o.startsWith("#")||!a.startsWith("http")||!Bt(e))return o;const{site:r}=w(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${n}`);return ye(l)}function fe({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:n,theme:a,hash:r}=w(),l=L(()=>{var v,b;return{label:(v=e.value.locales[t.value])==null?void 0:v.label,link:((b=e.value.locales[t.value])==null?void 0:b.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:L(()=>Object.entries(e.value.locales).flatMap(([v,b])=>l.value.label===b.label?[]:{text:b.label,link:eo(b.link||(v==="root"?"/":`/${v}/`),a.value.i18nRouting!==!1&&o,n.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+r.value})),currentLang:l}}function eo(o,e,t,n){return e?o.replace(/\/$/,"")+He(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):o}const to=o=>(G("data-v-d3e33f7f"),o=o(),j(),o),oo={class:"NotFound"},no={class:"code"},ao={class:"title"},so=to(()=>d("div",{class:"divider"},null,-1)),ro={class:"quote"},io={class:"action"},lo=["href","aria-label"],co=_({__name:"NotFound",setup(o){const{theme:e}=w(),{currentLang:t}=fe();return(n,a)=>{var r,l,m,v,b;return s(),c("div",oo,[d("p",no,A(((r=i(e).notFound)==null?void 0:r.code)??"404"),1),d("h1",ao,A(((l=i(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),so,d("blockquote",ro,A(((m=i(e).notFound)==null?void 0:m.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",io,[d("a",{class:"link",href:i(ye)(i(t).link),"aria-label":((v=i(e).notFound)==null?void 0:v.linkLabel)??"go to home"},A(((b=i(e).notFound)==null?void 0:b.linkText)??"Take me home"),9,lo)])])}}}),uo=y(co,[["__scopeId","data-v-d3e33f7f"]]);function mt(o,e){if(Array.isArray(o))return be(o);if(o==null)return[];e=He(e);const t=Object.keys(o).sort((a,r)=>r.split("/").length-a.split("/").length).find(a=>e.startsWith(He(a))),n=t?o[t]:[];return Array.isArray(n)?be(n):be(n.items,n.base)}function mo(o){const e=[];let t=0;for(const n in o){const a=o[n];if(a.items){t=e.push(a);continue}e[t]||e.push({items:[]}),e[t].items.push(a)}return e}function vo(o){const e=[];function t(n){for(const a of n)a.text&&a.link&&e.push({text:a.text,link:a.link,docFooterText:a.docFooterText}),a.items&&t(a.items)}return t(o),e}function Me(o,e){return Array.isArray(e)?e.some(t=>Me(o,t)):ce(o,e.link)?!0:e.items?Me(o,e.items):!1}function be(o,e){return[...o].map(t=>{const n={...t},a=n.base||e;return a&&n.link&&(n.link=a+n.link),n.items&&(n.items=be(n.items,a)),n})}function ne(){const{frontmatter:o,page:e,theme:t}=w(),n=ze("(min-width: 960px)"),a=z(!1),r=L(()=>{const F=t.value.sidebar,C=e.value.relativePath;return F?mt(F,C):[]}),l=z(r.value);Z(r,(F,C)=>{JSON.stringify(F)!==JSON.stringify(C)&&(l.value=r.value)});const m=L(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),v=L(()=>b?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),b=L(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),P=L(()=>m.value&&n.value),k=L(()=>m.value?mo(l.value):[]);function V(){a.value=!0}function E(){a.value=!1}function N(){a.value?E():V()}return{isOpen:a,sidebar:l,sidebarGroups:k,hasSidebar:m,hasAside:b,leftAside:v,isSidebarEnabled:P,open:V,close:E,toggle:N}}function po(o,e){let t;Le(()=>{t=o.value?document.activeElement:void 0}),J(()=>{window.addEventListener("keyup",n)}),Fe(()=>{window.removeEventListener("keyup",n)});function n(a){a.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function fo(o){const{page:e,hash:t}=w(),n=z(!1),a=L(()=>o.value.collapsed!=null),r=L(()=>!!o.value.link),l=z(!1),m=()=>{l.value=ce(e.value.relativePath,o.value.link)};Z([e,o,t],m),J(m);const v=L(()=>l.value?!0:o.value.items?Me(e.value.relativePath,o.value.items):!1),b=L(()=>!!(o.value.items&&o.value.items.length));Le(()=>{n.value=!!(a.value&&o.value.collapsed)}),De(()=>{(l.value||v.value)&&(n.value=!1)});function P(){a.value&&(n.value=!n.value)}return{collapsed:n,collapsible:a,isLink:r,isActiveLink:l,hasActiveLink:v,hasChildren:b,toggle:P}}function ho(){const{hasSidebar:o}=ne(),e=ze("(min-width: 960px)"),t=ze("(min-width: 1280px)");return{isAsideEnabled:L(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const Be=[];function vt(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function je(o){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:_o(t),link:"#"+t.id,level:n}});return go(e,o)}function _o(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function go(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,a]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(l=>l.level>=n&&l.level<=a),Be.length=0;for(const{element:l,link:m}of o)Be.push({element:l,link:m});const r=[];e:for(let l=0;l=0;v--){const b=o[v];if(b.level{requestAnimationFrame(r),window.addEventListener("scroll",n)}),Ot(()=>{l(location.hash)}),Fe(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const m=window.scrollY,v=window.innerHeight,b=document.body.offsetHeight,P=Math.abs(m+v-b)<1,k=Be.map(({element:E,link:N})=>({link:N,top:ko(E)})).filter(({top:E})=>!Number.isNaN(E)).sort((E,N)=>E.top-N.top);if(!k.length){l(null);return}if(m<1){l(null);return}if(P){l(k[k.length-1].link);return}let V=null;for(const{link:E,top:N}of k){if(N>m+Ft()+4)break;V=E}l(V)}function l(m){a&&a.classList.remove("active"),m==null?a=null:a=o.value.querySelector(`a[href="${decodeURIComponent(m)}"]`);const v=a;v?(v.classList.add("active"),e.value.style.top=v.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function ko(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const $o=["href","title"],yo=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const n=t.href.split("#")[1],a=document.getElementById(decodeURIComponent(n));a==null||a.focus({preventScroll:!0})}return(t,n)=>{const a=ie("VPDocOutlineItem",!0);return s(),c("ul",{class:H(["VPDocOutlineItem",t.root?"root":"nested"])},[(s(!0),c(B,null,W(t.headers,({children:r,link:l,title:m})=>(s(),c("li",null,[d("a",{class:"outline-link",href:l,onClick:e,title:m},A(m),9,$o),r!=null&&r.length?(s(),$(a,{key:0,headers:r},null,8,["headers"])):h("",!0)]))),256))],2)}}}),pt=y(yo,[["__scopeId","data-v-00020b51"]]),Lo={class:"content"},Po={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},So=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=w(),n=nt([]);Pe(()=>{n.value=je(e.value.outline??t.value.outline)});const a=z(),r=z();return bo(a,r),(l,m)=>(s(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:H(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:a},[d("div",Lo,[d("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),d("div",Po,A(i(vt)(i(t))),1),g(pt,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),Vo=y(So,[["__scopeId","data-v-4c69a99b"]]),wo={class:"VPDocAsideCarbonAds"},To=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,n)=>(s(),c("div",wo,[g(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Io=o=>(G("data-v-957a5c78"),o=o(),j(),o),No={class:"VPDocAside"},Eo=Io(()=>d("div",{class:"spacer"},null,-1)),Co=_({__name:"VPDocAside",setup(o){const{theme:e}=w();return(t,n)=>(s(),c("div",No,[u(t.$slots,"aside-top",{},void 0,!0),u(t.$slots,"aside-outline-before",{},void 0,!0),g(Vo),u(t.$slots,"aside-outline-after",{},void 0,!0),Eo,u(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(s(),$(To,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):h("",!0),u(t.$slots,"aside-ads-after",{},void 0,!0),u(t.$slots,"aside-bottom",{},void 0,!0)]))}}),zo=y(Co,[["__scopeId","data-v-957a5c78"]]);function Ao(){const{theme:o,page:e}=w();return L(()=>{const{text:t="Edit this page",pattern:n=""}=o.value.editLink||{};let a;return typeof n=="function"?a=n(e.value):a=n.replace(/:path/g,e.value.filePath),{url:a,text:t}})}function Ho(){const{page:o,theme:e,frontmatter:t}=w();return L(()=>{var b,P,k,V,E,N,F,C;const n=mt(e.value.sidebar,o.value.relativePath),a=vo(n),r=Mo(a,X=>X.link.replace(/[?#].*$/,"")),l=r.findIndex(X=>ce(o.value.relativePath,X.link)),m=((b=e.value.docFooter)==null?void 0:b.prev)===!1&&!t.value.prev||t.value.prev===!1,v=((P=e.value.docFooter)==null?void 0:P.next)===!1&&!t.value.next||t.value.next===!1;return{prev:m?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((k=r[l-1])==null?void 0:k.docFooterText)??((V=r[l-1])==null?void 0:V.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((E=r[l-1])==null?void 0:E.link)},next:v?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((N=r[l+1])==null?void 0:N.docFooterText)??((F=r[l+1])==null?void 0:F.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((C=r[l+1])==null?void 0:C.link)}}})}function Mo(o,e){const t=new Set;return o.filter(n=>{const a=e(n);return t.has(a)?!1:t.add(a)})}const te=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=L(()=>e.tag??(e.href?"a":"span")),n=L(()=>e.href&&at.test(e.href)||e.target==="_blank");return(a,r)=>(s(),$(ee(t.value),{class:H(["VPLink",{link:a.href,"vp-external-link-icon":n.value,"no-icon":a.noIcon}]),href:a.href?i(Ge)(a.href):void 0,target:a.target??(n.value?"_blank":void 0),rel:a.rel??(n.value?"noreferrer":void 0)},{default:p(()=>[u(a.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Bo={class:"VPLastUpdated"},Oo=["datetime"],Fo=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:n}=w(),a=L(()=>new Date(t.value.lastUpdated)),r=L(()=>a.value.toISOString()),l=z("");return J(()=>{Le(()=>{var m,v,b;l.value=new Intl.DateTimeFormat((v=(m=e.value.lastUpdated)==null?void 0:m.formatOptions)!=null&&v.forceLocale?n.value:void 0,((b=e.value.lastUpdated)==null?void 0:b.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(a.value)})}),(m,v)=>{var b;return s(),c("p",Bo,[oe(A(((b=i(e).lastUpdated)==null?void 0:b.text)||i(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:r.value},A(l.value),9,Oo)])}}}),Do=y(Fo,[["__scopeId","data-v-c8439711"]]),ft=o=>(G("data-v-6fb16c48"),o=o(),j(),o),Uo={key:0,class:"VPDocFooter"},Go={key:0,class:"edit-info"},jo={key:0,class:"edit-link"},qo=ft(()=>d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Ro={key:1,class:"last-updated"},Ko={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Wo=ft(()=>d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),Jo={class:"pager"},Yo=["innerHTML"],Zo=["innerHTML"],Xo={class:"pager"},Qo=["innerHTML"],xo=["innerHTML"],en=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:n}=w(),a=Ao(),r=Ho(),l=L(()=>e.value.editLink&&n.value.editLink!==!1),m=L(()=>t.value.lastUpdated),v=L(()=>l.value||m.value||r.value.prev||r.value.next);return(b,P)=>{var k,V,E,N;return v.value?(s(),c("footer",Uo,[u(b.$slots,"doc-footer-before",{},void 0,!0),l.value||m.value?(s(),c("div",Go,[l.value?(s(),c("div",jo,[g(te,{class:"edit-link-button",href:i(a).url,"no-icon":!0},{default:p(()=>[qo,oe(" "+A(i(a).text),1)]),_:1},8,["href"])])):h("",!0),m.value?(s(),c("div",Ro,[g(Do)])):h("",!0)])):h("",!0),(k=i(r).prev)!=null&&k.link||(V=i(r).next)!=null&&V.link?(s(),c("nav",Ko,[Wo,d("div",Jo,[(E=i(r).prev)!=null&&E.link?(s(),$(te,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:p(()=>{var F;return[d("span",{class:"desc",innerHTML:((F=i(e).docFooter)==null?void 0:F.prev)||"Previous page"},null,8,Yo),d("span",{class:"title",innerHTML:i(r).prev.text},null,8,Zo)]}),_:1},8,["href"])):h("",!0)]),d("div",Xo,[(N=i(r).next)!=null&&N.link?(s(),$(te,{key:0,class:"pager-link next",href:i(r).next.link},{default:p(()=>{var F;return[d("span",{class:"desc",innerHTML:((F=i(e).docFooter)==null?void 0:F.next)||"Next page"},null,8,Qo),d("span",{class:"title",innerHTML:i(r).next.text},null,8,xo)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),tn=y(en,[["__scopeId","data-v-6fb16c48"]]),on=o=>(G("data-v-715d218f"),o=o(),j(),o),nn={class:"container"},an=on(()=>d("div",{class:"aside-curtain"},null,-1)),sn={class:"aside-container"},rn={class:"aside-content"},ln={class:"content"},cn={class:"content-container"},un={class:"main"},dn=_({__name:"VPDoc",setup(o){const{theme:e}=w(),t=pe(),{hasSidebar:n,hasAside:a,leftAside:r}=ne(),l=L(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(m,v)=>{const b=ie("Content");return s(),c("div",{class:H(["VPDoc",{"has-sidebar":i(n),"has-aside":i(a)}])},[u(m.$slots,"doc-top",{},void 0,!0),d("div",nn,[i(a)?(s(),c("div",{key:0,class:H(["aside",{"left-aside":i(r)}])},[an,d("div",sn,[d("div",rn,[g(zo,null,{"aside-top":p(()=>[u(m.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[u(m.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[u(m.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[u(m.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[u(m.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[u(m.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),d("div",ln,[d("div",cn,[u(m.$slots,"doc-before",{},void 0,!0),d("main",un,[g(b,{class:H(["vp-doc",[l.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),g(tn,null,{"doc-footer-before":p(()=>[u(m.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(m.$slots,"doc-after",{},void 0,!0)])])]),u(m.$slots,"doc-bottom",{},void 0,!0)],2)}}}),mn=y(dn,[["__scopeId","data-v-715d218f"]]),vn=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=L(()=>e.href&&at.test(e.href)),n=L(()=>e.tag||e.href?"a":"button");return(a,r)=>(s(),$(ee(n.value),{class:H(["VPButton",[a.size,a.theme]]),href:a.href?i(Ge)(a.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:p(()=>[oe(A(a.text),1)]),_:1},8,["class","href","target","rel"]))}}),pn=y(vn,[["__scopeId","data-v-19112015"]]),fn=["src","alt"],hn=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const n=ie("VPImage",!0);return e.image?(s(),c(B,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),c("img",re({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(ye)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,fn)):(s(),c(B,{key:1},[g(n,re({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),g(n,re({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),$e=y(hn,[["__scopeId","data-v-c6276651"]]),_n=o=>(G("data-v-415d0179"),o=o(),j(),o),gn={class:"container"},bn={class:"main"},kn={key:0,class:"name"},$n=["innerHTML"],yn=["innerHTML"],Ln=["innerHTML"],Pn={key:0,class:"actions"},Sn={key:0,class:"image"},Vn={class:"image-container"},wn=_n(()=>d("div",{class:"image-bg"},null,-1)),Tn=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=Se("hero-image-slot-exists");return(t,n)=>(s(),c("div",{class:H(["VPHero",{"has-image":t.image||i(e)}])},[d("div",gn,[d("div",bn,[u(t.$slots,"home-hero-info-before",{},void 0,!0),u(t.$slots,"home-hero-info",{},()=>[t.name?(s(),c("h1",kn,[d("span",{innerHTML:t.name,class:"clip"},null,8,$n)])):h("",!0),t.text?(s(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,yn)):h("",!0),t.tagline?(s(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Ln)):h("",!0)],!0),u(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(s(),c("div",Pn,[(s(!0),c(B,null,W(t.actions,a=>(s(),c("div",{key:a.link,class:"action"},[g(pn,{tag:"a",size:"medium",theme:a.theme,text:a.text,href:a.link,target:a.target,rel:a.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),u(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(s(),c("div",Sn,[d("div",Vn,[wn,u(t.$slots,"home-hero-image",{},()=>[t.image?(s(),$($e,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),In=y(Tn,[["__scopeId","data-v-415d0179"]]),Nn=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=w();return(t,n)=>i(e).hero?(s(),$(In,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":p(()=>[u(t.$slots,"home-hero-info-before")]),"home-hero-info":p(()=>[u(t.$slots,"home-hero-info")]),"home-hero-info-after":p(()=>[u(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":p(()=>[u(t.$slots,"home-hero-actions-after")]),"home-hero-image":p(()=>[u(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),En=o=>(G("data-v-0c8a99e7"),o=o(),j(),o),Cn={class:"box"},zn={key:0,class:"icon"},An=["innerHTML"],Hn=["innerHTML"],Mn=["innerHTML"],Bn={key:4,class:"link-text"},On={class:"link-text-value"},Fn=En(()=>d("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Dn=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(s(),$(te,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[d("article",Cn,[typeof e.icon=="object"&&e.icon.wrap?(s(),c("div",zn,[g($e,{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"?(s(),$($e,{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?(s(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,An)):h("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Hn),e.details?(s(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Mn)):h("",!0),e.linkText?(s(),c("div",Bn,[d("p",On,[oe(A(e.linkText)+" ",1),Fn])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Un=y(Dn,[["__scopeId","data-v-0c8a99e7"]]),Gn={key:0,class:"VPFeatures"},jn={class:"container"},qn={class:"items"},Rn=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=L(()=>{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,a)=>n.features?(s(),c("div",Gn,[d("div",jn,[d("div",qn,[(s(!0),c(B,null,W(n.features,r=>(s(),c("div",{key:r.title,class:H(["item",[t.value]])},[g(Un,{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))])])])):h("",!0)}}),Kn=y(Rn,[["__scopeId","data-v-fdd7fd61"]]),Wn=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=w();return(t,n)=>i(e).features?(s(),$(Kn,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):h("",!0)}}),Jn=_({__name:"VPHomeContent",setup(o){const{width:e}=Dt({initialWidth:0,includeScrollbar:!1});return(t,n)=>(s(),c("div",{class:"vp-doc container",style:st(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[u(t.$slots,"default",{},void 0,!0)],4))}}),Yn=y(Jn,[["__scopeId","data-v-38b3e09e"]]),Zn={class:"VPHome"},Xn=_({__name:"VPHome",setup(o){const{frontmatter:e}=w();return(t,n)=>{const a=ie("Content");return s(),c("div",Zn,[u(t.$slots,"home-hero-before",{},void 0,!0),g(Nn,null,{"home-hero-info-before":p(()=>[u(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[u(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[u(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[u(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[u(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),u(t.$slots,"home-hero-after",{},void 0,!0),u(t.$slots,"home-features-before",{},void 0,!0),g(Wn),u(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(s(),$(Yn,{key:0},{default:p(()=>[g(a)]),_:1})):(s(),$(a,{key:1}))])}}}),Qn=y(Xn,[["__scopeId","data-v-f3abe0bf"]]),xn={},ea={class:"VPPage"};function ta(o,e){const t=ie("Content");return s(),c("div",ea,[u(o.$slots,"page-top"),g(t),u(o.$slots,"page-bottom")])}const oa=y(xn,[["render",ta]]),na=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=w(),{hasSidebar:n}=ne();return(a,r)=>(s(),c("div",{class:H(["VPContent",{"has-sidebar":i(n),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?u(a.$slots,"not-found",{key:0},()=>[g(uo)],!0):i(t).layout==="page"?(s(),$(oa,{key:1},{"page-top":p(()=>[u(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[u(a.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(s(),$(Qn,{key:2},{"home-hero-before":p(()=>[u(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[u(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[u(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[u(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[u(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[u(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[u(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[u(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[u(a.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(s(),$(ee(i(t).layout),{key:3})):(s(),$(mn,{key:4},{"doc-top":p(()=>[u(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[u(a.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[u(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[u(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[u(a.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[u(a.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[u(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[u(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[u(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[u(a.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[u(a.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),aa=y(na,[["__scopeId","data-v-a399269d"]]),sa={class:"container"},ra=["innerHTML"],ia=["innerHTML"],la=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=w(),{hasSidebar:n}=ne();return(a,r)=>i(e).footer&&i(t).footer!==!1?(s(),c("footer",{key:0,class:H(["VPFooter",{"has-sidebar":i(n)}])},[d("div",sa,[i(e).footer.message?(s(),c("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,ra)):h("",!0),i(e).footer.copyright?(s(),c("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,ia)):h("",!0)])],2)):h("",!0)}}),ca=y(la,[["__scopeId","data-v-51d2e0a7"]]);function ua(){const{theme:o,frontmatter:e}=w(),t=nt([]),n=L(()=>t.value.length>0);return Pe(()=>{t.value=je(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:n}}const da=o=>(G("data-v-55fc9c08"),o=o(),j(),o),ma={class:"menu-text"},va=da(()=>d("span",{class:"vpi-chevron-right icon"},null,-1)),pa={class:"header"},fa={class:"outline"},ha=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=w(),n=z(!1),a=z(0),r=z(),l=z();function m(k){var V;(V=r.value)!=null&&V.contains(k.target)||(n.value=!1)}Z(n,k=>{if(k){document.addEventListener("click",m);return}document.removeEventListener("click",m)}),Ae("Escape",()=>{n.value=!1}),Pe(()=>{n.value=!1});function v(){n.value=!n.value,a.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function b(k){k.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ue(()=>{n.value=!1}))}function P(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(k,V)=>(s(),c("div",{class:"VPLocalNavOutlineDropdown",style:st({"--vp-vh":a.value+"px"}),ref_key:"main",ref:r},[k.headers.length>0?(s(),c("button",{key:0,onClick:v,class:H({open:n.value})},[d("span",ma,A(i(vt)(i(t))),1),va],2)):(s(),c("button",{key:1,onClick:P},A(i(t).returnToTopLabel||"Return to top"),1)),g(Oe,{name:"flyout"},{default:p(()=>[n.value?(s(),c("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:b},[d("div",pa,[d("a",{class:"top-link",href:"#",onClick:P},A(i(t).returnToTopLabel||"Return to top"),1)]),d("div",fa,[g(pt,{headers:k.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),_a=y(ha,[["__scopeId","data-v-55fc9c08"]]),ga=o=>(G("data-v-30188ab8"),o=o(),j(),o),ba={class:"container"},ka=["aria-expanded"],$a=ga(()=>d("span",{class:"vpi-align-left menu-icon"},null,-1)),ya={class:"menu-text"},La=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=w(),{hasSidebar:n}=ne(),{headers:a}=ua(),{y:r}=rt(),l=z(0);J(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Pe(()=>{a.value=je(t.value.outline??e.value.outline)});const m=L(()=>a.value.length===0),v=L(()=>m.value&&!n.value),b=L(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:m.value,fixed:v.value}));return(P,k)=>i(t).layout!=="home"&&(!v.value||i(r)>=l.value)?(s(),c("div",{key:0,class:H(b.value)},[d("div",ba,[i(n)?(s(),c("button",{key:0,class:"menu","aria-expanded":P.open,"aria-controls":"VPSidebarNav",onClick:k[0]||(k[0]=V=>P.$emit("open-menu"))},[$a,d("span",ya,A(i(e).sidebarMenuLabel||"Menu"),1)],8,ka)):h("",!0),g(_a,{headers:i(a),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),Pa=y(La,[["__scopeId","data-v-30188ab8"]]);function Sa(){const o=z(!1);function e(){o.value=!0,window.addEventListener("resize",a)}function t(){o.value=!1,window.removeEventListener("resize",a)}function n(){o.value?t():e()}function a(){window.outerWidth>=768&&t()}const r=pe();return Z(()=>r.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:n}}const Va={},wa={class:"VPSwitch",type:"button",role:"switch"},Ta={class:"check"},Ia={key:0,class:"icon"};function Na(o,e){return s(),c("button",wa,[d("span",Ta,[o.$slots.default?(s(),c("span",Ia,[u(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Ea=y(Va,[["render",Na],["__scopeId","data-v-3ee2f654"]]),ht=o=>(G("data-v-9abaff51"),o=o(),j(),o),Ca=ht(()=>d("span",{class:"vpi-sun sun"},null,-1)),za=ht(()=>d("span",{class:"vpi-moon moon"},null,-1)),Aa=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=w(),n=Se("toggle-appearance",()=>{e.value=!e.value}),a=z("");return De(()=>{a.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,l)=>(s(),$(Ea,{title:a.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(n)},{default:p(()=>[Ca,za]),_:1},8,["title","aria-checked","onClick"]))}}),qe=y(Aa,[["__scopeId","data-v-9abaff51"]]),Ha={key:0,class:"VPNavBarAppearance"},Ma=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=w();return(t,n)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(s(),c("div",Ha,[g(qe)])):h("",!0)}}),Ba=y(Ma,[["__scopeId","data-v-87c5e7d2"]]),Re=z();let _t=!1,Ce=0;function Oa(o){const e=z(!1);if(Ve){!_t&&Fa(),Ce++;const t=Z(Re,n=>{var a,r,l;n===o.el.value||(a=o.el.value)!=null&&a.contains(n)?(e.value=!0,(r=o.onFocus)==null||r.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});Fe(()=>{t(),Ce--,Ce||Da()})}return Ut(e)}function Fa(){document.addEventListener("focusin",gt),_t=!0,Re.value=document.activeElement}function Da(){document.removeEventListener("focusin",gt)}function gt(){Re.value=document.activeElement}const Ua={class:"VPMenuLink"},Ga=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=w();return(t,n)=>(s(),c("div",Ua,[g(te,{class:H({active:i(ce)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:p(()=>[oe(A(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),we=y(Ga,[["__scopeId","data-v-a33e9249"]]),ja={class:"VPMenuGroup"},qa={key:0,class:"title"},Ra=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(s(),c("div",ja,[e.text?(s(),c("p",qa,A(e.text),1)):h("",!0),(s(!0),c(B,null,W(e.items,n=>(s(),c(B,null,["link"in n?(s(),$(we,{key:0,item:n},null,8,["item"])):h("",!0)],64))),256))]))}}),Ka=y(Ra,[["__scopeId","data-v-becbdab9"]]),Wa={class:"VPMenu"},Ja={key:0,class:"items"},Ya=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(s(),c("div",Wa,[e.items?(s(),c("div",Ja,[(s(!0),c(B,null,W(e.items,n=>(s(),c(B,{key:JSON.stringify(n)},["link"in n?(s(),$(we,{key:0,item:n},null,8,["item"])):"component"in n?(s(),$(ee(n.component),re({key:1,ref_for:!0},n.props),null,16)):(s(),$(Ka,{key:2,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0),u(e.$slots,"default",{},void 0,!0)]))}}),Za=y(Ya,[["__scopeId","data-v-26e1b36f"]]),Xa=o=>(G("data-v-779d1d76"),o=o(),j(),o),Qa=["aria-expanded","aria-label"],xa={key:0,class:"text"},es=["innerHTML"],ts=Xa(()=>d("span",{class:"vpi-chevron-down text-icon"},null,-1)),os={key:1,class:"vpi-more-horizontal icon"},ns={class:"menu"},as=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=z(!1),t=z();Oa({el:t,onBlur:n});function n(){e.value=!1}return(a,r)=>(s(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=l=>e.value=!0),onMouseleave:r[2]||(r[2]=l=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":a.label,onClick:r[0]||(r[0]=l=>e.value=!e.value)},[a.button||a.icon?(s(),c("span",xa,[a.icon?(s(),c("span",{key:0,class:H([a.icon,"option-icon"])},null,2)):h("",!0),a.button?(s(),c("span",{key:1,innerHTML:a.button},null,8,es)):h("",!0),ts])):(s(),c("span",os))],8,Qa),d("div",ns,[g(Za,{items:a.items},{default:p(()=>[u(a.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ke=y(as,[["__scopeId","data-v-779d1d76"]]),ss=["href","aria-label","innerHTML"],rs=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=L(()=>typeof e.icon=="object"?e.icon.svg:` `);return(n,a)=>(s(),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,ss))}}),is=y(rs,[["__scopeId","data-v-d5c0951d"]]),ls={class:"VPSocialLinks"},cs=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(s(),c("div",ls,[(s(!0),c(B,null,W(e.links,({link:n,icon:a,ariaLabel:r})=>(s(),$(is,{key:n,icon:a,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),We=y(cs,[["__scopeId","data-v-0c074974"]]),us={key:0,class:"group translations"},ds={class:"trans-title"},ms={key:1,class:"group"},vs={class:"item appearance"},ps={class:"label"},fs={class:"appearance-action"},hs={key:2,class:"group"},_s={class:"item social-links"},gs=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=w(),{localeLinks:n,currentLang:a}=fe({correspondingLink:!0}),r=L(()=>n.value.length&&a.value.label||e.value.appearance||t.value.socialLinks);return(l,m)=>r.value?(s(),$(Ke,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[i(n).length&&i(a).label?(s(),c("div",us,[d("p",ds,A(i(a).label),1),(s(!0),c(B,null,W(i(n),v=>(s(),$(we,{key:v.link,item:v},null,8,["item"]))),128))])):h("",!0),i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(s(),c("div",ms,[d("div",vs,[d("p",ps,A(i(t).darkModeSwitchLabel||"Appearance"),1),d("div",fs,[g(qe)])])])):h("",!0),i(t).socialLinks?(s(),c("div",hs,[d("div",_s,[g(We,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),bs=y(gs,[["__scopeId","data-v-3a857657"]]),ks=o=>(G("data-v-c2a24129"),o=o(),j(),o),$s=["aria-expanded"],ys=ks(()=>d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)),Ls=[ys],Ps=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(s(),c("button",{type:"button",class:H(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},Ls,10,$s))}}),Ss=y(Ps,[["__scopeId","data-v-c2a24129"]]),Vs=["innerHTML"],ws=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=w();return(t,n)=>(s(),$(te,{class:H({VPNavBarMenuLink:!0,active:i(ce)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:p(()=>[d("span",{innerHTML:t.item.text},null,8,Vs)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Ts=y(ws,[["__scopeId","data-v-86a4e124"]]),Is=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=w(),n=r=>"component"in r?!1:"link"in r?ce(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),a=L(()=>n(e.item));return(r,l)=>(s(),$(Ke,{class:H({VPNavBarMenuGroup:!0,active:i(ce)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||a.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),Ns=o=>(G("data-v-af86387c"),o=o(),j(),o),Es={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Cs=Ns(()=>d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),zs=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=w();return(t,n)=>i(e).nav?(s(),c("nav",Es,[Cs,(s(!0),c(B,null,W(i(e).nav,a=>(s(),c(B,{key:JSON.stringify(a)},["link"in a?(s(),$(Ts,{key:0,item:a},null,8,["item"])):"component"in a?(s(),$(ee(a.component),re({key:1,ref_for:!0},a.props),null,16)):(s(),$(Is,{key:2,item:a},null,8,["item"]))],64))),128))])):h("",!0)}}),As=y(zs,[["__scopeId","data-v-af86387c"]]);function Hs(o){const{localeIndex:e,theme:t}=w();function n(a){var N,F,C;const r=a.split("."),l=(N=t.value.search)==null?void 0:N.options,m=l&&typeof l=="object",v=m&&((C=(F=l.locales)==null?void 0:F[e.value])==null?void 0:C.translations)||null,b=m&&l.translations||null;let P=v,k=b,V=o;const E=r.pop();for(const X of r){let Q=null;const D=V==null?void 0:V[X];D&&(Q=V=D);const ae=k==null?void 0:k[X];ae&&(Q=k=ae);const x=P==null?void 0:P[X];x&&(Q=P=x),D||(V=Q),ae||(k=Q),x||(P=Q)}return(P==null?void 0:P[E])??(k==null?void 0:k[E])??(V==null?void 0:V[E])??""}return n}const Ms=["aria-label"],Bs={class:"DocSearch-Button-Container"},Os=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Fs={class:"DocSearch-Button-Placeholder"},Ds=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Ze=_({__name:"VPNavBarSearchButton",setup(o){const t=Hs({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,a)=>(s(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[d("span",Bs,[Os,d("span",Fs,A(i(t)("button.buttonText")),1)]),Ds],8,Ms))}}),Us={class:"VPNavBarSearch"},Gs={id:"local-search"},js={key:1,id:"docsearch"},qs=_({__name:"VPNavBarSearch",setup(o){const e=Gt(()=>it(()=>import("./VPLocalSearchBox.C8JYv8Jy.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=w(),a=z(!1),r=z(!1);J(()=>{});function l(){a.value||(a.value=!0,setTimeout(m,16))}function m(){const k=new Event("keydown");k.key="k",k.metaKey=!0,window.dispatchEvent(k),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||m()},16)}function v(k){const V=k.target,E=V.tagName;return V.isContentEditable||E==="INPUT"||E==="SELECT"||E==="TEXTAREA"}const b=z(!1);Ae("k",k=>{(k.ctrlKey||k.metaKey)&&(k.preventDefault(),b.value=!0)}),Ae("/",k=>{v(k)||(k.preventDefault(),b.value=!0)});const P="local";return(k,V)=>{var E;return s(),c("div",Us,[i(P)==="local"?(s(),c(B,{key:0},[b.value?(s(),$(i(e),{key:0,onClose:V[0]||(V[0]=N=>b.value=!1)})):h("",!0),d("div",Gs,[g(Ze,{onClick:V[1]||(V[1]=N=>b.value=!0)})])],64)):i(P)==="algolia"?(s(),c(B,{key:1},[a.value?(s(),$(i(t),{key:0,algolia:((E=i(n).search)==null?void 0:E.options)??i(n).algolia,onVnodeBeforeMount:V[2]||(V[2]=N=>r.value=!0)},null,8,["algolia"])):h("",!0),r.value?h("",!0):(s(),c("div",js,[g(Ze,{onClick:l})]))],64)):h("",!0)])}}}),Rs=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=w();return(t,n)=>i(e).socialLinks?(s(),$(We,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),Ks=y(Rs,[["__scopeId","data-v-9686c645"]]),Ws=["href","rel","target"],Js={key:1},Ys={key:2},Zs=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=w(),{hasSidebar:n}=ne(),{currentLang:a}=fe(),r=L(()=>{var v;return typeof t.value.logoLink=="string"?t.value.logoLink:(v=t.value.logoLink)==null?void 0:v.link}),l=L(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.rel}),m=L(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.target});return(v,b)=>(s(),c("div",{class:H(["VPNavBarTitle",{"has-sidebar":i(n)}])},[d("a",{class:"title",href:r.value??i(Ge)(i(a).link),rel:l.value,target:m.value},[u(v.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(s(),$($e,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):h("",!0),i(t).siteTitle?(s(),c("span",Js,A(i(t).siteTitle),1)):i(t).siteTitle===void 0?(s(),c("span",Ys,A(i(e).title),1)):h("",!0),u(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,Ws)],2))}}),Xs=y(Zs,[["__scopeId","data-v-b3258250"]]),Qs={class:"items"},xs={class:"title"},er=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=w(),{localeLinks:t,currentLang:n}=fe({correspondingLink:!0});return(a,r)=>i(t).length&&i(n).label?(s(),$(Ke,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:p(()=>[d("div",Qs,[d("p",xs,A(i(n).label),1),(s(!0),c(B,null,W(i(t),l=>(s(),$(we,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),tr=y(er,[["__scopeId","data-v-d11f4714"]]),or=o=>(G("data-v-4706692b"),o=o(),j(),o),nr={class:"wrapper"},ar={class:"container"},sr={class:"title"},rr={class:"content"},ir={class:"content-body"},lr=or(()=>d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1)),cr=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=rt(),{hasSidebar:n}=ne(),{frontmatter:a}=w(),r=z({});return De(()=>{r.value={"has-sidebar":n.value,home:a.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,m)=>(s(),c("div",{class:H(["VPNavBar",r.value])},[d("div",nr,[d("div",ar,[d("div",sr,[g(Xs,null,{"nav-bar-title-before":p(()=>[u(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[u(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",rr,[d("div",ir,[u(l.$slots,"nav-bar-content-before",{},void 0,!0),g(qs,{class:"search"}),g(As,{class:"menu"}),g(tr,{class:"translations"}),g(Ba,{class:"appearance"}),g(Ks,{class:"social-links"}),g(bs,{class:"extra"}),u(l.$slots,"nav-bar-content-after",{},void 0,!0),g(Ss,{class:"hamburger",active:l.isScreenOpen,onClick:m[0]||(m[0]=v=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),lr],2))}}),ur=y(cr,[["__scopeId","data-v-4706692b"]]),dr={key:0,class:"VPNavScreenAppearance"},mr={class:"text"},vr=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=w();return(n,a)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(s(),c("div",dr,[d("p",mr,A(i(t).darkModeSwitchLabel||"Appearance"),1),g(qe)])):h("",!0)}}),pr=y(vr,[["__scopeId","data-v-e3518e41"]]),fr=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=Se("close-screen");return(t,n)=>(s(),$(te,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),hr=y(fr,[["__scopeId","data-v-33292676"]]),_r=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=Se("close-screen");return(t,n)=>(s(),$(te,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:p(()=>[oe(A(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),bt=y(_r,[["__scopeId","data-v-2d8e3881"]]),gr={class:"VPNavScreenMenuGroupSection"},br={key:0,class:"title"},kr=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(s(),c("div",gr,[e.text?(s(),c("p",br,A(e.text),1)):h("",!0),(s(!0),c(B,null,W(e.items,n=>(s(),$(bt,{key:n.text,item:n},null,8,["item"]))),128))]))}}),$r=y(kr,[["__scopeId","data-v-7ef2022d"]]),yr=o=>(G("data-v-4671a8b5"),o=o(),j(),o),Lr=["aria-controls","aria-expanded"],Pr=["innerHTML"],Sr=yr(()=>d("span",{class:"vpi-plus button-icon"},null,-1)),Vr=["id"],wr={key:0,class:"item"},Tr={key:1,class:"item"},Ir={key:2,class:"group"},Nr=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=z(!1),n=L(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function a(){t.value=!t.value}return(r,l)=>(s(),c("div",{class:H(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:a},[d("span",{class:"button-text",innerHTML:r.text},null,8,Pr),Sr],8,Lr),d("div",{id:n.value,class:"items"},[(s(!0),c(B,null,W(r.items,m=>(s(),c(B,{key:JSON.stringify(m)},["link"in m?(s(),c("div",wr,[g(bt,{item:m},null,8,["item"])])):"component"in m?(s(),c("div",Tr,[(s(),$(ee(m.component),re({ref_for:!0},m.props,{"screen-menu":""}),null,16))])):(s(),c("div",Ir,[g($r,{text:m.text,items:m.items},null,8,["text","items"])]))],64))),128))],8,Vr)],2))}}),Er=y(Nr,[["__scopeId","data-v-4671a8b5"]]),Cr={key:0,class:"VPNavScreenMenu"},zr=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=w();return(t,n)=>i(e).nav?(s(),c("nav",Cr,[(s(!0),c(B,null,W(i(e).nav,a=>(s(),c(B,{key:JSON.stringify(a)},["link"in a?(s(),$(hr,{key:0,item:a},null,8,["item"])):"component"in a?(s(),$(ee(a.component),re({key:1,ref_for:!0},a.props,{"screen-menu":""}),null,16)):(s(),$(Er,{key:2,text:a.text||"",items:a.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),Ar=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=w();return(t,n)=>i(e).socialLinks?(s(),$(We,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),kt=o=>(G("data-v-4cc74b28"),o=o(),j(),o),Hr=kt(()=>d("span",{class:"vpi-languages icon lang"},null,-1)),Mr=kt(()=>d("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Br={class:"list"},Or=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=fe({correspondingLink:!0}),n=z(!1);function a(){n.value=!n.value}return(r,l)=>i(e).length&&i(t).label?(s(),c("div",{key:0,class:H(["VPNavScreenTranslations",{open:n.value}])},[d("button",{class:"title",onClick:a},[Hr,oe(" "+A(i(t).label)+" ",1),Mr]),d("ul",Br,[(s(!0),c(B,null,W(i(e),m=>(s(),c("li",{key:m.link,class:"item"},[g(te,{class:"link",href:m.link},{default:p(()=>[oe(A(m.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),Fr=y(Or,[["__scopeId","data-v-4cc74b28"]]),Dr={class:"container"},Ur=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=z(null),t=lt(Ve?document.body:null);return(n,a)=>(s(),$(Oe,{name:"fade",onEnter:a[0]||(a[0]=r=>t.value=!0),onAfterLeave:a[1]||(a[1]=r=>t.value=!1)},{default:p(()=>[n.open?(s(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",Dr,[u(n.$slots,"nav-screen-content-before",{},void 0,!0),g(zr,{class:"menu"}),g(Fr,{class:"translations"}),g(pr,{class:"appearance"}),g(Ar,{class:"social-links"}),u(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),Gr=y(Ur,[["__scopeId","data-v-27670706"]]),jr={key:0,class:"VPNav"},qr=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=Sa(),{frontmatter:a}=w(),r=L(()=>a.value.navbar!==!1);return ct("close-screen",t),Le(()=>{Ve&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,m)=>r.value?(s(),c("header",jr,[g(ur,{"is-screen-open":i(e),onToggleScreen:i(n)},{"nav-bar-title-before":p(()=>[u(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[u(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[u(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[u(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),g(Gr,{open:i(e)},{"nav-screen-content-before":p(()=>[u(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[u(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),Rr=y(qr,[["__scopeId","data-v-7697d12e"]]),$t=o=>(G("data-v-4e965525"),o=o(),j(),o),Kr=["role","tabindex"],Wr=$t(()=>d("div",{class:"indicator"},null,-1)),Jr=$t(()=>d("span",{class:"vpi-chevron-right caret-icon"},null,-1)),Yr=[Jr],Zr={key:1,class:"items"},Xr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:n,isLink:a,isActiveLink:r,hasActiveLink:l,hasChildren:m,toggle:v}=fo(L(()=>e.item)),b=L(()=>m.value?"section":"div"),P=L(()=>a.value?"a":"div"),k=L(()=>m.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),V=L(()=>a.value?void 0:"button"),E=L(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":a.value},{"is-active":r.value},{"has-active":l.value}]);function N(C){"key"in C&&C.key!=="Enter"||!e.item.link&&v()}function F(){e.item.link&&v()}return(C,X)=>{const Q=ie("VPSidebarItem",!0);return s(),$(ee(b.value),{class:H(["VPSidebarItem",E.value])},{default:p(()=>[C.item.text?(s(),c("div",re({key:0,class:"item",role:V.value},qt(C.item.items?{click:N,keydown:N}:{},!0),{tabindex:C.item.items&&0}),[Wr,C.item.link?(s(),$(te,{key:0,tag:P.value,class:"link",href:C.item.link,rel:C.item.rel,target:C.item.target},{default:p(()=>[(s(),$(ee(k.value),{class:"text",innerHTML:C.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),$(ee(k.value),{key:1,class:"text",innerHTML:C.item.text},null,8,["innerHTML"])),C.item.collapsed!=null&&C.item.items&&C.item.items.length?(s(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:F,onKeydown:jt(F,["enter"]),tabindex:"0"},Yr,32)):h("",!0)],16,Kr)):h("",!0),C.item.items&&C.item.items.length?(s(),c("div",Zr,[C.depth<5?(s(!0),c(B,{key:0},W(C.item.items,D=>(s(),$(Q,{key:D.text,item:D,depth:C.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Qr=y(Xr,[["__scopeId","data-v-4e965525"]]),xr=_({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=z(!0);let t=null;return J(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Rt(()=>{t!=null&&(clearTimeout(t),t=null)}),(n,a)=>(s(!0),c(B,null,W(n.items,r=>(s(),c("div",{key:r.text,class:H(["group",{"no-transition":e.value}])},[g(Qr,{item:r,depth:0},null,8,["item"])],2))),128))}}),ei=y(xr,[["__scopeId","data-v-091a4ebd"]]),yt=o=>(G("data-v-4cb49b8f"),o=o(),j(),o),ti=yt(()=>d("div",{class:"curtain"},null,-1)),oi={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},ni=yt(()=>d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),ai=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=ne(),n=o,a=z(null),r=lt(Ve?document.body:null);Z([n,a],()=>{var m;n.open?(r.value=!0,(m=a.value)==null||m.focus()):r.value=!1},{immediate:!0,flush:"post"});const l=z(0);return Z(e,()=>{l.value+=1},{deep:!0}),(m,v)=>i(t)?(s(),c("aside",{key:0,class:H(["VPSidebar",{open:m.open}]),ref_key:"navEl",ref:a,onClick:v[0]||(v[0]=ut(()=>{},["stop"]))},[ti,d("nav",oi,[ni,u(m.$slots,"sidebar-nav-before",{},void 0,!0),(s(),$(ei,{items:i(e),key:l.value},null,8,["items"])),u(m.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),si=y(ai,[["__scopeId","data-v-4cb49b8f"]]),ri=_({__name:"VPSkipLink",setup(o){const e=pe(),t=z();Z(()=>e.path,()=>t.value.focus());function n({target:a}){const r=document.getElementById(decodeURIComponent(a.hash).slice(1));if(r){const l=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",l)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",l),r.focus(),window.scrollTo(0,0)}}return(a,r)=>(s(),c(B,null,[d("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),ii=y(ri,[["__scopeId","data-v-bbad7db3"]]),li=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:n}=ne(),a=pe();Z(()=>a.path,n),po(e,n);const{frontmatter:r}=w(),l=Kt(),m=L(()=>!!l["home-hero-image"]);return ct("hero-image-slot-exists",m),(v,b)=>{const P=ie("Content");return i(r).layout!==!1?(s(),c("div",{key:0,class:H(["Layout",i(r).pageClass])},[u(v.$slots,"layout-top",{},void 0,!0),g(ii),g(Qt,{class:"backdrop",show:i(e),onClick:i(n)},null,8,["show","onClick"]),g(Rr,null,{"nav-bar-title-before":p(()=>[u(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[u(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[u(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[u(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[u(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[u(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),g(Pa,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),g(si,{open:i(e)},{"sidebar-nav-before":p(()=>[u(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[u(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),g(aa,null,{"page-top":p(()=>[u(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[u(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[u(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[u(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[u(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[u(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[u(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[u(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[u(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[u(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[u(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[u(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[u(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[u(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[u(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[u(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[u(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[u(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[u(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[u(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[u(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[u(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[u(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),g(ca),u(v.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),$(P,{key:1}))}}}),ci=y(li,[["__scopeId","data-v-7fa59262"]]),Xe={Layout:ci,enhanceApp:({app:o})=>{o.component("Badge",dt)}},ui=["id","host","repo","repoid","category","categoryid","mapping","term","strict","reactionsenabled","emitmetadata","inputposition","theme","lang","loading"],di=_({__name:"Giscus",props:{id:{},host:{},repo:{},repoId:{},category:{},categoryId:{},mapping:{},term:{},theme:{},strict:{},reactionsEnabled:{},emitMetadata:{},inputPosition:{},lang:{},loading:{}},setup(o){const e=z(!1);return J(()=>{e.value=!0,it(()=>import("./giscus-aTimukGI.CKTvSCx2.js"),[])}),(t,n)=>e.value?(s(),c("giscus-widget",{key:0,id:t.id,host:t.host,repo:t.repo,repoid:t.repoId,category:t.category,categoryid:t.categoryId,mapping:t.mapping,term:t.term,strict:t.strict,reactionsenabled:t.reactionsEnabled,emitmetadata:t.emitMetadata,inputposition:t.inputPosition,theme:t.theme,lang:t.lang,loading:t.loading},null,8,ui)):h("",!0)}}),Qe=(o,e,t=!0)=>{var b;const n={id:"comment",host:"https://giscus.app",category:"General",mapping:"pathname",term:"Welcome to giscus!",reactionsEnabled:"1",inputPosition:"top",lang:"zh-CN",loading:"lazy",repo:"xxx/xxx",repoId:"",homePageShowComment:!1};if(o.locales){const k=document.querySelector("html").getAttribute("lang");k&&o.locales[k]&&(o.lang=o.locales[k])}const a=o.lightTheme||"light",r=o.darkTheme||"transparent_dark";let l=document.getElementById("giscus");if(l&&l.parentNode.removeChild(l),(e==null?void 0:e.value.comment)!==void 0){if(!(e!=null&&e.value.comment))return}else if(!t)return;if(!o.homePageShowComment&&(!location.pathname||location.pathname==="/"))return;const m=((b=document.querySelector("html"))==null?void 0:b.className.indexOf("dark"))!==-1,v=document.getElementsByClassName("content-container")[0];if(v){const P=document.createElement("div");P.setAttribute("id","giscus"),P.style.height="auto",P.style.marginTop="40px",P.style.borderTop="1px solid var(--vp-c-divider)",P.style.paddingTop="20px",v.append(P),Wt({render:()=>ve(di,{...n,theme:m?r:a,...o})}).mount("#giscus")}},mi=o=>{const e=document.querySelector("html"),t=o.lightTheme||"light",n=o.darkTheme||"transparent_dark";new MutationObserver(r=>{r.forEach(l=>{if(l.type=="attributes"){let m=document.getElementById("comment");m==null||m.setAttribute("theme",e.className.indexOf("dark")!==-1?n:t)}})}).observe(e,{attributeFilter:["class"]})},vi=(o,e,t=!0)=>{J(()=>{Qe(o,e.frontmatter,t),mi(o)}),Z(()=>e.route.path,()=>Ue(()=>{Qe(o,e.frontmatter,t)}))};/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */var le=Object.assign||function(o){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},n=window.Promise||function(S){function T(){}S(T,T)},a=function(S){var T=S.target;if(T===he){N();return}D.indexOf(T)!==-1&&F({target:T})},r=function(){if(!(x||!f.original)){var S=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(Je-S)>M.scrollOffset&&setTimeout(N,150)}},l=function(S){var T=S.key||S.keyCode;(T==="Escape"||T==="Esc"||T===27)&&N()},m=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},T=S;if(S.background&&(he.style.background=S.background),S.container&&S.container instanceof Object&&(T.container=le({},M.container,S.container)),S.template){var O=ke(S.template)?S.template:document.querySelector(S.template);T.template=O}return M=le({},M,T),D.forEach(function(U){U.dispatchEvent(de("medium-zoom:update",{detail:{zoom:q}}))}),q},v=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return o(le({},M,S))},b=function(){for(var S=arguments.length,T=Array(S),O=0;O0?T.reduce(function(I,K){return[].concat(I,et(K))},[]):D;return U.forEach(function(I){I.classList.remove("medium-zoom-image"),I.dispatchEvent(de("medium-zoom:detach",{detail:{zoom:q}}))}),D=D.filter(function(I){return U.indexOf(I)===-1}),q},k=function(S,T){var O=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return D.forEach(function(U){U.addEventListener("medium-zoom:"+S,T,O)}),ae.push({type:"medium-zoom:"+S,listener:T,options:O}),q},V=function(S,T){var O=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return D.forEach(function(U){U.removeEventListener("medium-zoom:"+S,T,O)}),ae=ae.filter(function(U){return!(U.type==="medium-zoom:"+S&&U.listener.toString()===T.toString())}),q},E=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},T=S.target,O=function(){var I={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},K=void 0,Y=void 0;if(M.container)if(M.container instanceof Object)I=le({},I,M.container),K=I.width-I.left-I.right-M.margin*2,Y=I.height-I.top-I.bottom-M.margin*2;else{var ue=ke(M.container)?M.container:document.querySelector(M.container),se=ue.getBoundingClientRect(),Te=se.width,St=se.height,Vt=se.left,wt=se.top;I=le({},I,{width:Te,height:St,left:Vt,top:wt})}K=K||I.width-M.margin*2,Y=Y||I.height-M.margin*2;var me=f.zoomedHd||f.original,Tt=xe(me)?K:me.naturalWidth||K,It=xe(me)?Y:me.naturalHeight||Y,_e=me.getBoundingClientRect(),Nt=_e.top,Et=_e.left,Ie=_e.width,Ne=_e.height,Ct=Math.min(Math.max(Ie,Tt),K)/Ie,zt=Math.min(Math.max(Ne,It),Y)/Ne,Ee=Math.min(Ct,zt),At=(-Et+(K-Ie)/2+M.margin+I.left)/Ee,Ht=(-Nt+(Y-Ne)/2+M.margin+I.top)/Ee,Ye="scale("+Ee+") translate3d("+At+"px, "+Ht+"px, 0)";f.zoomed.style.transform=Ye,f.zoomedHd&&(f.zoomedHd.style.transform=Ye)};return new n(function(U){if(T&&D.indexOf(T)===-1){U(q);return}var I=function Te(){x=!1,f.zoomed.removeEventListener("transitionend",Te),f.original.dispatchEvent(de("medium-zoom:opened",{detail:{zoom:q}})),U(q)};if(f.zoomed){U(q);return}if(T)f.original=T;else if(D.length>0){var K=D;f.original=K[0]}else{U(q);return}if(f.original.dispatchEvent(de("medium-zoom:open",{detail:{zoom:q}})),Je=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,x=!0,f.zoomed=hi(f.original),document.body.appendChild(he),M.template){var Y=ke(M.template)?M.template:document.querySelector(M.template);f.template=document.createElement("div"),f.template.appendChild(Y.content.cloneNode(!0)),document.body.appendChild(f.template)}if(f.original.parentElement&&f.original.parentElement.tagName==="PICTURE"&&f.original.currentSrc&&(f.zoomed.src=f.original.currentSrc),document.body.appendChild(f.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),f.original.classList.add("medium-zoom-image--hidden"),f.zoomed.classList.add("medium-zoom-image--opened"),f.zoomed.addEventListener("click",N),f.zoomed.addEventListener("transitionend",I),f.original.getAttribute("data-zoom-src")){f.zoomedHd=f.zoomed.cloneNode(),f.zoomedHd.removeAttribute("srcset"),f.zoomedHd.removeAttribute("sizes"),f.zoomedHd.removeAttribute("loading"),f.zoomedHd.src=f.zoomed.getAttribute("data-zoom-src"),f.zoomedHd.onerror=function(){clearInterval(ue),console.warn("Unable to reach the zoom image target "+f.zoomedHd.src),f.zoomedHd=null,O()};var ue=setInterval(function(){f.zoomedHd.complete&&(clearInterval(ue),f.zoomedHd.classList.add("medium-zoom-image--opened"),f.zoomedHd.addEventListener("click",N),document.body.appendChild(f.zoomedHd),O())},10)}else if(f.original.hasAttribute("srcset")){f.zoomedHd=f.zoomed.cloneNode(),f.zoomedHd.removeAttribute("sizes"),f.zoomedHd.removeAttribute("loading");var se=f.zoomedHd.addEventListener("load",function(){f.zoomedHd.removeEventListener("load",se),f.zoomedHd.classList.add("medium-zoom-image--opened"),f.zoomedHd.addEventListener("click",N),document.body.appendChild(f.zoomedHd),O()})}else O()})},N=function(){return new n(function(S){if(x||!f.original){S(q);return}var T=function O(){f.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(f.zoomed),f.zoomedHd&&document.body.removeChild(f.zoomedHd),document.body.removeChild(he),f.zoomed.classList.remove("medium-zoom-image--opened"),f.template&&document.body.removeChild(f.template),x=!1,f.zoomed.removeEventListener("transitionend",O),f.original.dispatchEvent(de("medium-zoom:closed",{detail:{zoom:q}})),f.original=null,f.zoomed=null,f.zoomedHd=null,f.template=null,S(q)};x=!0,document.body.classList.remove("medium-zoom--opened"),f.zoomed.style.transform="",f.zoomedHd&&(f.zoomedHd.style.transform=""),f.template&&(f.template.style.transition="opacity 150ms",f.template.style.opacity=0),f.original.dispatchEvent(de("medium-zoom:close",{detail:{zoom:q}})),f.zoomed.addEventListener("transitionend",T)})},F=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},T=S.target;return f.original?N():E({target:T})},C=function(){return M},X=function(){return D},Q=function(){return f.original},D=[],ae=[],x=!1,Je=0,M=t,f={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(e)==="[object Object]"?M=e:(e||typeof e=="string")&&b(e),M=le({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},M);var he=fi(M.background);document.addEventListener("click",a),document.addEventListener("keyup",l),document.addEventListener("scroll",r),window.addEventListener("resize",N);var q={open:E,close:N,toggle:F,update:m,clone:v,attach:b,detach:P,on:k,off:V,getOptions:C,getImages:X,getZoomedImage:Q};return q};function _i(o,e){e===void 0&&(e={});var t=e.insertAt;if(!(typeof document>"u")){var n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",t==="top"&&n.firstChild?n.insertBefore(a,n.firstChild):n.appendChild(a),a.styleSheet?a.styleSheet.cssText=o:a.appendChild(document.createTextNode(o))}}var gi=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";_i(gi);const Pt=o=>(G("data-v-3cd5c07b"),o=o(),j(),o),bi={key:0,class:"banner-wrapper",role:"banner"},ki=Pt(()=>d("div",{class:"content"}," 全新移动端 H5 框架 Fantastic-mobile 正式发布,点击查看详情 ",-1)),$i=Pt(()=>d("span",{class:"close"},"×",-1)),yi=[$i],tt="ACTIVITY-FANTASTIC-MOBILE-1",Li=_({__name:"Activity",setup(o){const e=z(!1);function t(){window.location.href="https://fantastic-mobile.hurui.me/"}function n(){e.value=!1,localStorage.setItem(tt,String(!0)),document.documentElement.classList.remove("mirror-site-menu-fixed")}return J(()=>{e.value=!localStorage.getItem(tt),e.value&&document.documentElement.classList.add("mirror-site-menu-fixed")}),(a,r)=>e.value?(s(),c("div",bi,[d("div",{id:"banner",onClick:t},[ki,d("button",{id:"banner-close",onClick:ut(n,["stop"])},yi)])])):h("",!0)}}),Pi=y(Li,[["__scopeId","data-v-3cd5c07b"]]),Si={},Vi=Jt('',2),wi=[Vi];function Ti(o,e){return s(),c("div",null,wi)}const Ii=y(Si,[["render",Ti],["__scopeId","data-v-d8aff6a3"]]),Ni={},Ei=o=>(G("data-v-f619d5b7"),o=o(),j(),o),Ci={class:"home-preview-block"},zi={class:"home-preview"},Ai=Ei(()=>d("h2",null,"截图预览",-1)),Hi={class:"items"},Mi={class:"item"},Bi={class:"item"},Oi={class:"item"},Fi={class:"item"},Di={class:"item"},Ui={class:"item"};function Gi(o,e){const t=ie("zoom-img");return s(),c("div",Ci,[d("div",zi,[Ai,d("div",Hi,[d("div",Mi,[g(t,{src:"/preview1.png"})]),d("div",Bi,[g(t,{src:"/preview2.png"})]),d("div",Oi,[g(t,{src:"/preview3.png"})]),d("div",Fi,[g(t,{src:"/preview4.png"})]),d("div",Di,[g(t,{src:"/preview5.png"})]),d("div",Ui,[g(t,{src:"/preview6.png"})])])])])}const ji=y(Ni,[["render",Gi],["__scopeId","data-v-f619d5b7"]]),qi={key:0},Ri=["src"],Ki=_({__name:"ZoomImg",props:{src:String},setup(o){const e=z(null);return J(()=>{e.value&&Lt(e.value,{background:"var(--vp-c-bg)"})}),(t,n)=>o.src?(s(),c("p",qi,[d("img",{ref_key:"imgRef",ref:e,src:i(ye)(o.src),loading:"lazy"},null,8,Ri)])):h("",!0)}}),Ji={...Xe,Layout(){return ve(Xe.Layout,null,{"layout-top":()=>ve(Pi),"home-features-after":()=>ve(ji),"aside-bottom":()=>ve(Ii)})},setup(){const o=pe(),e=()=>{Lt("[data-zoomable]",{background:"var(--vp-c-bg)"})};J(()=>e()),Z(()=>o.path,()=>Ue(()=>e()));const{frontmatter:t}=Yt(ot());vi({repo:"one-step-admin/one-step-admin.github.io",repoId:"R_kgDOJpKIUg",category:"Announcements",categoryId:"DIC_kwDOJpKIUs4CeSdr",mapping:"pathname",inputPosition:"top",lang:"zh-CN",lightTheme:"light",darkTheme:"transparent_dark",loading:!0},{frontmatter:t,route:o},!0)},enhanceApp({app:o}){o.component("Badge",dt),o.component("ZoomImg",Ki)}};export{Ji as R,Hs as c,w as u};
diff --git a/assets/components_action-container.md.C6ADMMHn.js b/assets/components_action-container.md.C6ADMMHn.js
new file mode 100644
index 00000000..94e435ae
--- /dev/null
+++ b/assets/components_action-container.md.C6ADMMHn.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const p=JSON.parse('{"title":"ActionContainer 固定底部操作栏","description":"","frontmatter":{},"headers":[],"relativePath":"components/action-container.md","filePath":"components/action-container.md"}'),o={name:"components/action-container.md"},i=n('ActionContainer 固定底部操作栏 Slot name 说明 - 内容区的 HTML 内容 action 操作区域的 HTML 内容
',3),r=[i];function c(l,s,d,_,h,f){return a(),e("div",null,r)}const x=t(o,[["render",c]]);export{p as __pageData,x as default};
diff --git a/assets/components_action-container.md.C6ADMMHn.lean.js b/assets/components_action-container.md.C6ADMMHn.lean.js
new file mode 100644
index 00000000..c6ea5a20
--- /dev/null
+++ b/assets/components_action-container.md.C6ADMMHn.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const p=JSON.parse('{"title":"ActionContainer 固定底部操作栏","description":"","frontmatter":{},"headers":[],"relativePath":"components/action-container.md","filePath":"components/action-container.md"}'),o={name:"components/action-container.md"},i=n("",3),r=[i];function c(l,s,d,_,h,f){return a(),e("div",null,r)}const x=t(o,[["render",c]]);export{p as __pageData,x as default};
diff --git a/assets/components_auth-all.md.CC4RPLIO.js b/assets/components_auth-all.md.CC4RPLIO.js
new file mode 100644
index 00000000..167a99d3
--- /dev/null
+++ b/assets/components_auth-all.md.CC4RPLIO.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as l}from"./chunks/framework.Bhh1y9_T.js";const u=JSON.parse('{"title":"AuthAll 鉴权","description":"","frontmatter":{},"headers":[],"relativePath":"components/auth-all.md","filePath":"components/auth-all.md"}'),s={name:"components/auth-all.md"},o=l('AuthAll 鉴权 Props 参数 说明 类型 可选值 默认值 value 权限数据,如果传入为 array 时,全部匹配则鉴权通过,并显示 slot 内容 array / string - -
Slots ',5),n=[o];function r(h,d,i,c,_,f){return a(),e("div",null,n)}const p=t(s,[["render",r]]);export{u as __pageData,p as default};
diff --git a/assets/components_auth-all.md.CC4RPLIO.lean.js b/assets/components_auth-all.md.CC4RPLIO.lean.js
new file mode 100644
index 00000000..f34c23e2
--- /dev/null
+++ b/assets/components_auth-all.md.CC4RPLIO.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as l}from"./chunks/framework.Bhh1y9_T.js";const u=JSON.parse('{"title":"AuthAll 鉴权","description":"","frontmatter":{},"headers":[],"relativePath":"components/auth-all.md","filePath":"components/auth-all.md"}'),s={name:"components/auth-all.md"},o=l("",5),n=[o];function r(h,d,i,c,_,f){return a(),e("div",null,n)}const p=t(s,[["render",r]]);export{u as __pageData,p as default};
diff --git a/assets/components_auth.md.DJiNZXkN.js b/assets/components_auth.md.DJiNZXkN.js
new file mode 100644
index 00000000..d0c8e5d6
--- /dev/null
+++ b/assets/components_auth.md.DJiNZXkN.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as l}from"./chunks/framework.Bhh1y9_T.js";const u=JSON.parse('{"title":"Auth 鉴权","description":"","frontmatter":{},"headers":[],"relativePath":"components/auth.md","filePath":"components/auth.md"}'),s={name:"components/auth.md"},o=l('Auth 鉴权 Props 参数 说明 类型 可选值 默认值 value 权限数据,如果传入为 array 时,匹配到其中一项则鉴权通过,并显示 slot 内容 array / string - -
Slots ',5),n=[o];function r(h,d,i,c,_,f){return a(),e("div",null,n)}const p=t(s,[["render",r]]);export{u as __pageData,p as default};
diff --git a/assets/components_auth.md.DJiNZXkN.lean.js b/assets/components_auth.md.DJiNZXkN.lean.js
new file mode 100644
index 00000000..de93255d
--- /dev/null
+++ b/assets/components_auth.md.DJiNZXkN.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as l}from"./chunks/framework.Bhh1y9_T.js";const u=JSON.parse('{"title":"Auth 鉴权","description":"","frontmatter":{},"headers":[],"relativePath":"components/auth.md","filePath":"components/auth.md"}'),s={name:"components/auth.md"},o=l("",5),n=[o];function r(h,d,i,c,_,f){return a(),e("div",null,n)}const p=t(s,[["render",r]]);export{u as __pageData,p as default};
diff --git a/assets/components_chip.md.DS5QQKp9.js b/assets/components_chip.md.DS5QQKp9.js
new file mode 100644
index 00000000..770e42cd
--- /dev/null
+++ b/assets/components_chip.md.DS5QQKp9.js
@@ -0,0 +1 @@
+import{_ as l,D as s,c as n,j as e,a as t,I as d,a6 as o,o as i}from"./chunks/framework.Bhh1y9_T.js";const P=JSON.parse('{"title":"Chip 纸片","description":"","frontmatter":{},"headers":[],"relativePath":"components/chip.md","filePath":"components/chip.md"}'),r={name:"components/chip.md"},h={id:"chip-纸片",tabindex:"-1"},c=e("a",{class:"header-anchor",href:"#chip-纸片","aria-label":'Permalink to "Chip 纸片 "'},"",-1),p=o('Props 参数 说明 类型 可选值 默认值 type 类型 string primary / success / warning / danger / info - closable 是否显示关闭按钮 boolean - false
Events ',4);function f(x,_,y,g,b,m){const a=s("Badge");return i(),n("div",null,[e("h1",h,[t("Chip 纸片 "),d(a,{type:"pro",text:"专业版"}),t(),c]),p])}const v=l(r,[["render",f]]);export{P as __pageData,v as default};
diff --git a/assets/components_chip.md.DS5QQKp9.lean.js b/assets/components_chip.md.DS5QQKp9.lean.js
new file mode 100644
index 00000000..8bf7a2d5
--- /dev/null
+++ b/assets/components_chip.md.DS5QQKp9.lean.js
@@ -0,0 +1 @@
+import{_ as l,D as s,c as n,j as e,a as t,I as d,a6 as o,o as i}from"./chunks/framework.Bhh1y9_T.js";const P=JSON.parse('{"title":"Chip 纸片","description":"","frontmatter":{},"headers":[],"relativePath":"components/chip.md","filePath":"components/chip.md"}'),r={name:"components/chip.md"},h={id:"chip-纸片",tabindex:"-1"},c=e("a",{class:"header-anchor",href:"#chip-纸片","aria-label":'Permalink to "Chip 纸片 "'},"",-1),p=o("",4);function f(x,_,y,g,b,m){const a=s("Badge");return i(),n("div",null,[e("h1",h,[t("Chip 纸片 "),d(a,{type:"pro",text:"专业版"}),t(),c]),p])}const v=l(r,[["render",f]]);export{P as __pageData,v as default};
diff --git a/assets/components_colorful-card.md.C17Jec7Q.js b/assets/components_colorful-card.md.C17Jec7Q.js
new file mode 100644
index 00000000..882a28ae
--- /dev/null
+++ b/assets/components_colorful-card.md.C17Jec7Q.js
@@ -0,0 +1 @@
+import{_ as a,D as d,c as n,j as e,a as t,I as r,a6 as s,o}from"./chunks/framework.Bhh1y9_T.js";const C=JSON.parse('{"title":"ColorfulCard 多彩渐变卡片","description":"","frontmatter":{},"headers":[],"relativePath":"components/colorful-card.md","filePath":"components/colorful-card.md"}'),i={name:"components/colorful-card.md"},f={id:"colorfulcard-多彩渐变卡片",tabindex:"-1"},c=e("a",{class:"header-anchor",href:"#colorfulcard-多彩渐变卡片","aria-label":'Permalink to "ColorfulCard 多彩渐变卡片 "'},"",-1),g=s('Props 参数 说明 类型 可选值 默认值 color-from 开始颜色 string - '#843cf6' color-to 终止颜色 string - '#759bff' header 头部标题 string - - num 数字标记 number - - tip 底行提示文字 string - - icon 图标,使用 SvgIcon 组件,与该组件 name 参数相同 string - -
',2);function x(y,_,h,p,m,u){const l=d("Badge");return o(),n("div",null,[e("h1",f,[t("ColorfulCard 多彩渐变卡片 "),r(l,{type:"pro",text:"专业版"}),t(),c]),g])}const P=a(i,[["render",x]]);export{C as __pageData,P as default};
diff --git a/assets/components_colorful-card.md.C17Jec7Q.lean.js b/assets/components_colorful-card.md.C17Jec7Q.lean.js
new file mode 100644
index 00000000..8bdb8ad7
--- /dev/null
+++ b/assets/components_colorful-card.md.C17Jec7Q.lean.js
@@ -0,0 +1 @@
+import{_ as a,D as d,c as n,j as e,a as t,I as r,a6 as s,o}from"./chunks/framework.Bhh1y9_T.js";const C=JSON.parse('{"title":"ColorfulCard 多彩渐变卡片","description":"","frontmatter":{},"headers":[],"relativePath":"components/colorful-card.md","filePath":"components/colorful-card.md"}'),i={name:"components/colorful-card.md"},f={id:"colorfulcard-多彩渐变卡片",tabindex:"-1"},c=e("a",{class:"header-anchor",href:"#colorfulcard-多彩渐变卡片","aria-label":'Permalink to "ColorfulCard 多彩渐变卡片 "'},"",-1),g=s("",2);function x(y,_,h,p,m,u){const l=d("Badge");return o(),n("div",null,[e("h1",f,[t("ColorfulCard 多彩渐变卡片 "),r(l,{type:"pro",text:"专业版"}),t(),c]),g])}const P=a(i,[["render",x]]);export{C as __pageData,P as default};
diff --git a/assets/components_file-upload.md.D7PBngz1.js b/assets/components_file-upload.md.D7PBngz1.js
new file mode 100644
index 00000000..19312c57
--- /dev/null
+++ b/assets/components_file-upload.md.D7PBngz1.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as d}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"FileUpload 文件上传","description":"","frontmatter":{},"headers":[],"relativePath":"components/file-upload.md","filePath":"components/file-upload.md"}'),a={name:"components/file-upload.md"},n=d('FileUpload 文件上传 Props 参数 说明 类型 可选值 默认值 action 必选参数,上传的地址 string - - headers 设置上传的请求头部 object - - data 上传时附带的额外参数 object - - name 上传的文件字段名 string - file size 上传文件大小限制,单位为MB number - 2 max 上传数量限制 number - 3 files 上传的文件列表,例如:[{name: 'xxx.jpg', url: 'http://xxx.cdn.com/xxx.jpg'}]
array - [] notip 是否隐藏提示栏 boolean - false ext 支持的文件类型 array - ['zip', 'rar']
',3),i=[n];function s(f,x,r,o,g,y){return l(),e("div",null,i)}const h=t(a,[["render",s]]);export{c as __pageData,h as default};
diff --git a/assets/components_file-upload.md.D7PBngz1.lean.js b/assets/components_file-upload.md.D7PBngz1.lean.js
new file mode 100644
index 00000000..d3679ca4
--- /dev/null
+++ b/assets/components_file-upload.md.D7PBngz1.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as d}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"FileUpload 文件上传","description":"","frontmatter":{},"headers":[],"relativePath":"components/file-upload.md","filePath":"components/file-upload.md"}'),a={name:"components/file-upload.md"},n=d("",3),i=[n];function s(f,x,r,o,g,y){return l(),e("div",null,i)}const h=t(a,[["render",s]]);export{c as __pageData,h as default};
diff --git a/assets/components_i18n-selector.md.hlvQr2K-.js b/assets/components_i18n-selector.md.hlvQr2K-.js
new file mode 100644
index 00000000..43db4a7e
--- /dev/null
+++ b/assets/components_i18n-selector.md.hlvQr2K-.js
@@ -0,0 +1 @@
+import{_ as o,D as s,c as n,j as t,a as e,I as r,a6 as l,o as c}from"./chunks/framework.Bhh1y9_T.js";const T=JSON.parse('{"title":"I18nSelector 国际化选择器","description":"","frontmatter":{},"headers":[],"relativePath":"components/i18n-selector.md","filePath":"components/i18n-selector.md"}'),d={name:"components/i18n-selector.md"},i={id:"i18nselector-国际化选择器",tabindex:"-1"},_=t("a",{class:"header-anchor",href:"#i18nselector-国际化选择器","aria-label":'Permalink to "I18nSelector 国际化选择器 "'},"",-1),h=l('Slots ',2);function p(m,f,x,S,b,g){const a=s("Badge");return c(),n("div",null,[t("h1",i,[e("I18nSelector 国际化选择器 "),r(a,{type:"pro",text:"专业版"}),e(),_]),h])}const u=o(d,[["render",p]]);export{T as __pageData,u as default};
diff --git a/assets/components_i18n-selector.md.hlvQr2K-.lean.js b/assets/components_i18n-selector.md.hlvQr2K-.lean.js
new file mode 100644
index 00000000..1abd9374
--- /dev/null
+++ b/assets/components_i18n-selector.md.hlvQr2K-.lean.js
@@ -0,0 +1 @@
+import{_ as o,D as s,c as n,j as t,a as e,I as r,a6 as l,o as c}from"./chunks/framework.Bhh1y9_T.js";const T=JSON.parse('{"title":"I18nSelector 国际化选择器","description":"","frontmatter":{},"headers":[],"relativePath":"components/i18n-selector.md","filePath":"components/i18n-selector.md"}'),d={name:"components/i18n-selector.md"},i={id:"i18nselector-国际化选择器",tabindex:"-1"},_=t("a",{class:"header-anchor",href:"#i18nselector-国际化选择器","aria-label":'Permalink to "I18nSelector 国际化选择器 "'},"",-1),h=l("",2);function p(m,f,x,S,b,g){const a=s("Badge");return c(),n("div",null,[t("h1",i,[e("I18nSelector 国际化选择器 "),r(a,{type:"pro",text:"专业版"}),e(),_]),h])}const u=o(d,[["render",p]]);export{T as __pageData,u as default};
diff --git a/assets/components_icon-picker.md.CDiXSf0R.js b/assets/components_icon-picker.md.CDiXSf0R.js
new file mode 100644
index 00000000..54f17b8f
--- /dev/null
+++ b/assets/components_icon-picker.md.CDiXSf0R.js
@@ -0,0 +1 @@
+import{_ as l,D as n,c as o,j as e,a as t,I as s,a6 as r,o as i}from"./chunks/framework.Bhh1y9_T.js";const b=JSON.parse('{"title":"IconPicker 图标选择器","description":"","frontmatter":{},"headers":[],"relativePath":"components/icon-picker.md","filePath":"components/icon-picker.md"}'),d={name:"components/icon-picker.md"},c={id:"iconpicker-图标选择器",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#iconpicker-图标选择器","aria-label":'Permalink to "IconPicker 图标选择器 "'},"",-1),_=r('Props 参数 说明 类型 可选值 默认值 v-model 图标名称 string - - size 选择器尺寸 string 'large' 'default'
',2);function h(f,x,g,y,m,k){const a=n("Badge");return i(),o("div",null,[e("h1",c,[t("IconPicker 图标选择器 "),s(a,{type:"pro",text:"专业版"}),t(),p]),_])}const u=l(d,[["render",h]]);export{b as __pageData,u as default};
diff --git a/assets/components_icon-picker.md.CDiXSf0R.lean.js b/assets/components_icon-picker.md.CDiXSf0R.lean.js
new file mode 100644
index 00000000..e1af6612
--- /dev/null
+++ b/assets/components_icon-picker.md.CDiXSf0R.lean.js
@@ -0,0 +1 @@
+import{_ as l,D as n,c as o,j as e,a as t,I as s,a6 as r,o as i}from"./chunks/framework.Bhh1y9_T.js";const b=JSON.parse('{"title":"IconPicker 图标选择器","description":"","frontmatter":{},"headers":[],"relativePath":"components/icon-picker.md","filePath":"components/icon-picker.md"}'),d={name:"components/icon-picker.md"},c={id:"iconpicker-图标选择器",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#iconpicker-图标选择器","aria-label":'Permalink to "IconPicker 图标选择器 "'},"",-1),_=r("",2);function h(f,x,g,y,m,k){const a=n("Badge");return i(),o("div",null,[e("h1",c,[t("IconPicker 图标选择器 "),s(a,{type:"pro",text:"专业版"}),t(),p]),_])}const u=l(d,[["render",h]]);export{b as __pageData,u as default};
diff --git a/assets/components_image-preview.md.O75IkQyb.js b/assets/components_image-preview.md.O75IkQyb.js
new file mode 100644
index 00000000..4bed0d43
--- /dev/null
+++ b/assets/components_image-preview.md.O75IkQyb.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const x=JSON.parse('{"title":"ImagePreview 图片预览","description":"","frontmatter":{},"headers":[],"relativePath":"components/image-preview.md","filePath":"components/image-preview.md"}'),i={name:"components/image-preview.md"},s=a('ImagePreview 图片预览 Props 参数 说明 类型 可选值 默认值 src 图片链接 string - - width 展示宽度 string - - height 展示高度 string - -
',3),d=[s];function n(r,o,g,h,f,c){return l(),e("div",null,d)}const p=t(i,[["render",n]]);export{x as __pageData,p as default};
diff --git a/assets/components_image-preview.md.O75IkQyb.lean.js b/assets/components_image-preview.md.O75IkQyb.lean.js
new file mode 100644
index 00000000..553d2775
--- /dev/null
+++ b/assets/components_image-preview.md.O75IkQyb.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const x=JSON.parse('{"title":"ImagePreview 图片预览","description":"","frontmatter":{},"headers":[],"relativePath":"components/image-preview.md","filePath":"components/image-preview.md"}'),i={name:"components/image-preview.md"},s=a("",3),d=[s];function n(r,o,g,h,f,c){return l(),e("div",null,d)}const p=t(i,[["render",n]]);export{x as __pageData,p as default};
diff --git a/assets/components_image-upload.md.D7rbM4Gb.js b/assets/components_image-upload.md.D7rbM4Gb.js
new file mode 100644
index 00000000..2e84af5a
--- /dev/null
+++ b/assets/components_image-upload.md.D7rbM4Gb.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as d}from"./chunks/framework.Bhh1y9_T.js";const h=JSON.parse('{"title":"ImageUpload 单图上传","description":"","frontmatter":{},"headers":[],"relativePath":"components/image-upload.md","filePath":"components/image-upload.md"}'),a={name:"components/image-upload.md"},n=d('ImageUpload 单图上传 Props 参数 说明 类型 可选值 默认值 v-model 图片地址 string - - action 必选参数,上传的地址 string - - headers 设置上传的请求头部 object - - data 上传时附带的额外参数 object - - name 上传的文件字段名 string - file size 上传文件大小限制,单位为MB number - 2 width 展示宽度 number - 150 height 展示高度 number - 150 placeholder 占位图 string - - notip 是否隐藏提示栏 boolean - false ext 支持的文件类型 array - ['jpg', 'png', 'gif', 'bmp']
',3),i=[n];function s(g,f,r,x,y,o){return l(),e("div",null,i)}const c=t(a,[["render",s]]);export{h as __pageData,c as default};
diff --git a/assets/components_image-upload.md.D7rbM4Gb.lean.js b/assets/components_image-upload.md.D7rbM4Gb.lean.js
new file mode 100644
index 00000000..ca8f3d2a
--- /dev/null
+++ b/assets/components_image-upload.md.D7rbM4Gb.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as d}from"./chunks/framework.Bhh1y9_T.js";const h=JSON.parse('{"title":"ImageUpload 单图上传","description":"","frontmatter":{},"headers":[],"relativePath":"components/image-upload.md","filePath":"components/image-upload.md"}'),a={name:"components/image-upload.md"},n=d("",3),i=[n];function s(g,f,r,x,y,o){return l(),e("div",null,i)}const c=t(a,[["render",s]]);export{h as __pageData,c as default};
diff --git a/assets/components_images-upload.md.RSnuNose.js b/assets/components_images-upload.md.RSnuNose.js
new file mode 100644
index 00000000..7b7db853
--- /dev/null
+++ b/assets/components_images-upload.md.RSnuNose.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as d}from"./chunks/framework.Bhh1y9_T.js";const h=JSON.parse('{"title":"ImagesUpload 多图上传","description":"","frontmatter":{},"headers":[],"relativePath":"components/images-upload.md","filePath":"components/images-upload.md"}'),a={name:"components/images-upload.md"},s=d('ImagesUpload 多图上传 Props 参数 说明 类型 可选值 默认值 v-model 图片列表 array - [] action 必选参数,上传的地址 string - - headers 设置上传的请求头部 object - - data 上传时附带的额外参数 object - - name 上传的文件字段名 string - file max 上传数量限制 number - 3 size 上传文件大小限制,单位为MB number - 2 width 展示宽度 number - 150 height 展示高度 number - 150 placeholder 占位图 string - - notip 是否隐藏提示栏 boolean - false ext 支持的文件类型 array - ['jpg', 'png', 'gif', 'bmp']
',3),n=[s];function i(g,f,x,r,y,o){return l(),e("div",null,n)}const m=t(a,[["render",i]]);export{h as __pageData,m as default};
diff --git a/assets/components_images-upload.md.RSnuNose.lean.js b/assets/components_images-upload.md.RSnuNose.lean.js
new file mode 100644
index 00000000..30d99f91
--- /dev/null
+++ b/assets/components_images-upload.md.RSnuNose.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as d}from"./chunks/framework.Bhh1y9_T.js";const h=JSON.parse('{"title":"ImagesUpload 多图上传","description":"","frontmatter":{},"headers":[],"relativePath":"components/images-upload.md","filePath":"components/images-upload.md"}'),a={name:"components/images-upload.md"},s=d("",3),n=[s];function i(g,f,x,r,y,o){return l(),e("div",null,n)}const m=t(a,[["render",i]]);export{h as __pageData,m as default};
diff --git a/assets/components_index.md.IDIJOnXK.js b/assets/components_index.md.IDIJOnXK.js
new file mode 100644
index 00000000..8b1570e9
--- /dev/null
+++ b/assets/components_index.md.IDIJOnXK.js
@@ -0,0 +1,12 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"components/index.md","filePath":"components/index.md"}'),n={name:"components/index.md"},e=t(`介绍 框架提供一系列的组件方便快速开发。
基础组件 基础组件由 Element Plus 提供,其中包含按钮 、文字链接 、单选框 、多选框 、输入框 、计数器 、级联选择器 、开关 、滑块 等 50+ 个组件。
阅读并学习请查看 Element Plus 官方文档 。
说明
为了统一图标的使用,框架没有采用 Element Plus 官方图标的使用方式,这意味着部分 Element Plus 组件的 icon 属性将无法使用,例如 Button 按钮组件。
template <!-- 无法使用 -->
+< el-button icon = "el-icon-edit" >编辑</ el-button >
+
+<!-- 可以使用插槽代替 -->
+< el-button >
+ < template # icon >
+ < el-icon >
+ < svg-icon name = "ep:edit" />
+ </ el-icon >
+ </ template >
+ 编辑
+</ el-button >
如果你习惯 Element Plus 官方图标的使用方式,需执行 pnpm install @element-plus/icons-vue
安装依赖,并按照官方的使用方式引入图标,点击查看 详细介绍。
替换组件库
如果你不喜欢 Element Plus ,或者你想要将老项目迁移到 One-step-admin 上,但老项目里使用的组件库并不是 Element Plus ,框架也提供了组件库替换移方案:
如果你想使用的组件库不在上述方案中,可以通过参考任何一份方案,理解替换的整理思路,并自行替换,别担心会很复杂,我们已经将大部分工作做好了。
内建组件 为了实现 UI 组件库可替换,框架内建了一些组件,这些组件仅服务于框架自身,所以不建议在业务页面内使用。但如果你需要对框架进行二次开发,并保证视觉上的一致性,这时候你就会需要用到它们。
内建组件存放在 /src/layouts/ui-kit/
目录下,并配置了使用时自动引入。
扩展组件 扩展组件为框架封装的组件,有全新开发的组件,也有在 Element Plus 组件上二次封装的组件,还有一些则是封装了第三方的插件。
组件源码完全开放,如果觉得用着不顺手,可以到 /src/components/
目录下找到对应组件自行修改。
`,13),l=[e];function p(h,r,k,o,E,d){return a(),i("div",null,l)}const u=s(n,[["render",p]]);export{c as __pageData,u as default};
diff --git a/assets/components_index.md.IDIJOnXK.lean.js b/assets/components_index.md.IDIJOnXK.lean.js
new file mode 100644
index 00000000..a642a612
--- /dev/null
+++ b/assets/components_index.md.IDIJOnXK.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"components/index.md","filePath":"components/index.md"}'),n={name:"components/index.md"},e=t("",13),l=[e];function p(h,r,k,o,E,d){return a(),i("div",null,l)}const u=s(n,[["render",p]]);export{c as __pageData,u as default};
diff --git a/assets/components_page-header.md.DN9_VgJv.js b/assets/components_page-header.md.DN9_VgJv.js
new file mode 100644
index 00000000..8e6fe599
--- /dev/null
+++ b/assets/components_page-header.md.DN9_VgJv.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as l}from"./chunks/framework.Bhh1y9_T.js";const _=JSON.parse('{"title":"PageHeader 页头","description":"","frontmatter":{},"headers":[],"relativePath":"components/page-header.md","filePath":"components/page-header.md"}'),d={name:"components/page-header.md"},n=l('Props 参数 说明 类型 可选值 默认值 title 标题 string - - content 内容 string - -
Slots name 说明 - 右侧区域的 HTML 内容 content 内容区域的 HTML 内容
',5),s=[n];function r(o,i,h,g,f,c){return a(),e("div",null,s)}const p=t(d,[["render",r]]);export{_ as __pageData,p as default};
diff --git a/assets/components_page-header.md.DN9_VgJv.lean.js b/assets/components_page-header.md.DN9_VgJv.lean.js
new file mode 100644
index 00000000..eae7bf94
--- /dev/null
+++ b/assets/components_page-header.md.DN9_VgJv.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as l}from"./chunks/framework.Bhh1y9_T.js";const _=JSON.parse('{"title":"PageHeader 页头","description":"","frontmatter":{},"headers":[],"relativePath":"components/page-header.md","filePath":"components/page-header.md"}'),d={name:"components/page-header.md"},n=l("",5),s=[n];function r(o,i,h,g,f,c){return a(),e("div",null,s)}const p=t(d,[["render",r]]);export{_ as __pageData,p as default};
diff --git a/assets/components_page-main.md.t28_56LQ.js b/assets/components_page-main.md.t28_56LQ.js
new file mode 100644
index 00000000..8991ecc9
--- /dev/null
+++ b/assets/components_page-main.md.t28_56LQ.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const y=JSON.parse('{"title":"PageMain 内容块","description":"","frontmatter":{},"headers":[],"relativePath":"components/page-main.md","filePath":"components/page-main.md"}'),n={name:"components/page-main.md"},s=a('PageMain 内容块 Props 参数 说明 类型 可选值 默认值 title 标题 string - - collaspe 是否折叠 boolean - false height 展示高度,当 collaspe 为 true 时生效 string - -
Slots name 说明 - 内容区的 HTML 内容 title 标题区的 HTML 内容
',5),d=[s];function i(o,r,h,g,f,x){return l(),e("div",null,d)}const p=t(n,[["render",i]]);export{y as __pageData,p as default};
diff --git a/assets/components_page-main.md.t28_56LQ.lean.js b/assets/components_page-main.md.t28_56LQ.lean.js
new file mode 100644
index 00000000..9b6e577e
--- /dev/null
+++ b/assets/components_page-main.md.t28_56LQ.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const y=JSON.parse('{"title":"PageMain 内容块","description":"","frontmatter":{},"headers":[],"relativePath":"components/page-main.md","filePath":"components/page-main.md"}'),n={name:"components/page-main.md"},s=a("",5),d=[s];function i(o,r,h,g,f,x){return l(),e("div",null,d)}const p=t(n,[["render",i]]);export{y as __pageData,p as default};
diff --git a/assets/components_pcas-cascader.md.BEb_Ujl_.js b/assets/components_pcas-cascader.md.BEb_Ujl_.js
new file mode 100644
index 00000000..1c02e87a
--- /dev/null
+++ b/assets/components_pcas-cascader.md.BEb_Ujl_.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as l}from"./chunks/framework.Bhh1y9_T.js";const y=JSON.parse('{"title":"PcasCascader 省市区街道联动","description":"","frontmatter":{},"headers":[],"relativePath":"components/pcas-cascader.md","filePath":"components/pcas-cascader.md"}'),d={name:"components/pcas-cascader.md"},s=l('PcasCascader 省市区街道联动 Props 参数 说明 类型 可选值 默认值 v-model 联动数据选中项绑定值 array - [] type 联动类型,pc
省市、pca
省市区、pcas
省市区街道 string pc / pca / pcas pca format 绑定数据的格式化类型 string code / name / both code disabled 是否禁用 boolean - false
',3),c=[s];function n(r,o,i,f,p,x){return a(),e("div",null,c)}const g=t(d,[["render",n]]);export{y as __pageData,g as default};
diff --git a/assets/components_pcas-cascader.md.BEb_Ujl_.lean.js b/assets/components_pcas-cascader.md.BEb_Ujl_.lean.js
new file mode 100644
index 00000000..20490567
--- /dev/null
+++ b/assets/components_pcas-cascader.md.BEb_Ujl_.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as a,a6 as l}from"./chunks/framework.Bhh1y9_T.js";const y=JSON.parse('{"title":"PcasCascader 省市区街道联动","description":"","frontmatter":{},"headers":[],"relativePath":"components/pcas-cascader.md","filePath":"components/pcas-cascader.md"}'),d={name:"components/pcas-cascader.md"},s=l("",3),c=[s];function n(r,o,i,f,p,x){return a(),e("div",null,c)}const g=t(d,[["render",n]]);export{y as __pageData,g as default};
diff --git a/assets/components_search-bar.md.DyxwWVs4.js b/assets/components_search-bar.md.DyxwWVs4.js
new file mode 100644
index 00000000..d987abdc
--- /dev/null
+++ b/assets/components_search-bar.md.DyxwWVs4.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const y=JSON.parse('{"title":"SearchBar 搜索面板","description":"","frontmatter":{},"headers":[],"relativePath":"components/search-bar.md","filePath":"components/search-bar.md"}'),d={name:"components/search-bar.md"},s=a('SearchBar 搜索面板 Props 参数 说明 类型 可选值 默认值 fold 是否折叠 boolean - true show-toggle 是否显示切换按钮 boolean - true background 是否显示背景 boolean - false
Slots name 说明 - 内容区域的 HTML 内容,作用域参数为 { fold, toggle }
Events 事件名称 说明 回调参数 toggle 切换展开/收起状态的事件回调 新状态的值
',7),r=[s];function n(o,h,i,f,c,x){return l(),e("div",null,r)}const b=t(d,[["render",n]]);export{y as __pageData,b as default};
diff --git a/assets/components_search-bar.md.DyxwWVs4.lean.js b/assets/components_search-bar.md.DyxwWVs4.lean.js
new file mode 100644
index 00000000..2c573afa
--- /dev/null
+++ b/assets/components_search-bar.md.DyxwWVs4.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const y=JSON.parse('{"title":"SearchBar 搜索面板","description":"","frontmatter":{},"headers":[],"relativePath":"components/search-bar.md","filePath":"components/search-bar.md"}'),d={name:"components/search-bar.md"},s=a("",7),r=[s];function n(o,h,i,f,c,x){return l(),e("div",null,r)}const b=t(d,[["render",n]]);export{y as __pageData,b as default};
diff --git a/assets/components_sparkline.md.B0Y5wjqT.js b/assets/components_sparkline.md.B0Y5wjqT.js
new file mode 100644
index 00000000..54fd1a60
--- /dev/null
+++ b/assets/components_sparkline.md.B0Y5wjqT.js
@@ -0,0 +1 @@
+import{_ as d,D as a,c as s,j as e,a as t,I as n,a6 as i,o as r}from"./chunks/framework.Bhh1y9_T.js";const u=JSON.parse('{"title":"Sparkline 迷你图","description":"","frontmatter":{},"headers":[],"relativePath":"components/sparkline.md","filePath":"components/sparkline.md"}'),o={name:"components/sparkline.md"},f={id:"sparkline-迷你图",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#sparkline-迷你图","aria-label":'Permalink to "Sparkline 迷你图 "'},"",-1),g=i('Props 参数 说明 类型 可选值 默认值 value 迷你图数据,支持一维数组和对象数组,当为对象数组时,对象内参数为 {tooltip: 'xxx', value: 1}
array - - width 展示宽度 number - 100 height 展示高度 number - 30 stroke-width 折线宽度 number - 3 stroke-color 折线颜色 string - #dc2b33 fill-color 填充颜色 string - - cursor-color 鼠标 hover 时辅助线颜色 string - #dc2b33 spot-color 鼠标 hover 时辅助点颜色 string - #dc2b33 tooltip 鼠标 hover 时是否显示文字提示 boolean - false
',2);function y(c,p,h,_,m,b){const l=a("Badge");return r(),s("div",null,[e("h1",f,[t("Sparkline 迷你图 "),n(l,{type:"pro",text:"专业版"}),t(),x]),g])}const v=d(o,[["render",y]]);export{u as __pageData,v as default};
diff --git a/assets/components_sparkline.md.B0Y5wjqT.lean.js b/assets/components_sparkline.md.B0Y5wjqT.lean.js
new file mode 100644
index 00000000..bf75a020
--- /dev/null
+++ b/assets/components_sparkline.md.B0Y5wjqT.lean.js
@@ -0,0 +1 @@
+import{_ as d,D as a,c as s,j as e,a as t,I as n,a6 as i,o as r}from"./chunks/framework.Bhh1y9_T.js";const u=JSON.parse('{"title":"Sparkline 迷你图","description":"","frontmatter":{},"headers":[],"relativePath":"components/sparkline.md","filePath":"components/sparkline.md"}'),o={name:"components/sparkline.md"},f={id:"sparkline-迷你图",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#sparkline-迷你图","aria-label":'Permalink to "Sparkline 迷你图 "'},"",-1),g=i("",2);function y(c,p,h,_,m,b){const l=a("Badge");return r(),s("div",null,[e("h1",f,[t("Sparkline 迷你图 "),n(l,{type:"pro",text:"专业版"}),t(),x]),g])}const v=d(o,[["render",y]]);export{u as __pageData,v as default};
diff --git a/assets/components_storage-box.md.DkmDy-9N.js b/assets/components_storage-box.md.DkmDy-9N.js
new file mode 100644
index 00000000..0d84e90a
--- /dev/null
+++ b/assets/components_storage-box.md.DkmDy-9N.js
@@ -0,0 +1 @@
+import{_ as l,D as s,c as o,j as e,a as t,I as d,a6 as n,o as r}from"./chunks/framework.Bhh1y9_T.js";const B=JSON.parse('{"title":"StorageBox 储存箱","description":"","frontmatter":{},"headers":[],"relativePath":"components/storage-box.md","filePath":"components/storage-box.md"}'),i={name:"components/storage-box.md"},h={id:"storagebox-储存箱",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#storagebox-储存箱","aria-label":'Permalink to "StorageBox 储存箱 "'},"",-1),g=n('Props 参数 说明 类型 可选值 默认值 data 需要储存的数据 object / array - - name 数据存放的命名空间 string - - title 下拉面板标题 string - '储存箱'
Slots Events 事件名称 说明 回调参数 take-out 点击下拉面板中某条记录的事件回调 记录的数据
',6);function f(y,c,_,b,p,m){const a=s("Badge");return r(),o("div",null,[e("h1",h,[t("StorageBox 储存箱 "),d(a,{type:"pro",text:"专业版"}),t(),x]),g])}const P=l(i,[["render",f]]);export{B as __pageData,P as default};
diff --git a/assets/components_storage-box.md.DkmDy-9N.lean.js b/assets/components_storage-box.md.DkmDy-9N.lean.js
new file mode 100644
index 00000000..49b57c57
--- /dev/null
+++ b/assets/components_storage-box.md.DkmDy-9N.lean.js
@@ -0,0 +1 @@
+import{_ as l,D as s,c as o,j as e,a as t,I as d,a6 as n,o as r}from"./chunks/framework.Bhh1y9_T.js";const B=JSON.parse('{"title":"StorageBox 储存箱","description":"","frontmatter":{},"headers":[],"relativePath":"components/storage-box.md","filePath":"components/storage-box.md"}'),i={name:"components/storage-box.md"},h={id:"storagebox-储存箱",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#storagebox-储存箱","aria-label":'Permalink to "StorageBox 储存箱 "'},"",-1),g=n("",6);function f(y,c,_,b,p,m){const a=s("Badge");return r(),o("div",null,[e("h1",h,[t("StorageBox 储存箱 "),d(a,{type:"pro",text:"专业版"}),t(),x]),g])}const P=l(i,[["render",f]]);export{B as __pageData,P as default};
diff --git a/assets/components_svg-icon.md.BXB-K3yu.js b/assets/components_svg-icon.md.BXB-K3yu.js
new file mode 100644
index 00000000..f1650d04
--- /dev/null
+++ b/assets/components_svg-icon.md.BXB-K3yu.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const h=JSON.parse('{"title":"SvgIcon SVG图标","description":"","frontmatter":{},"headers":[],"relativePath":"components/svg-icon.md","filePath":"components/svg-icon.md"}'),n={name:"components/svg-icon.md"},s=a('SvgIcon SVG图标 Props 参数 说明 类型 可选值 默认值 name svg 文件名 / Iconify 图标名,详细可阅读《图标 》 string - - flip 翻转方式,支持水平、垂直以及同时翻转 string horizontal / vertical / both - rotate 旋转角度 number 0 - 360 0 color 颜色 string size 尺寸 string / number
',3),d=[s];function i(o,r,g,f,c,x){return l(),e("div",null,d)}const _=t(n,[["render",i]]);export{h as __pageData,_ as default};
diff --git a/assets/components_svg-icon.md.BXB-K3yu.lean.js b/assets/components_svg-icon.md.BXB-K3yu.lean.js
new file mode 100644
index 00000000..0e284857
--- /dev/null
+++ b/assets/components_svg-icon.md.BXB-K3yu.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const h=JSON.parse('{"title":"SvgIcon SVG图标","description":"","frontmatter":{},"headers":[],"relativePath":"components/svg-icon.md","filePath":"components/svg-icon.md"}'),n={name:"components/svg-icon.md"},s=a("",3),d=[s];function i(o,r,g,f,c,x){return l(),e("div",null,d)}const _=t(n,[["render",i]]);export{h as __pageData,_ as default};
diff --git a/assets/components_trend.md.DxxgyeHY.js b/assets/components_trend.md.DxxgyeHY.js
new file mode 100644
index 00000000..8355af45
--- /dev/null
+++ b/assets/components_trend.md.DxxgyeHY.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as d}from"./chunks/framework.Bhh1y9_T.js";const _=JSON.parse('{"title":"Trend 趋势标记","description":"","frontmatter":{},"headers":[],"relativePath":"components/trend.md","filePath":"components/trend.md"}'),a={name:"components/trend.md"},n=d('Trend 趋势标记 Props 参数 说明 类型 可选值 默认值 value 内容 string - - type 类型 string up / down up prefix 前缀 string - - suffix 后缀 string - - reverse 颜色反转 boolean - false
',3),s=[n];function r(i,o,f,x,g,y){return l(),e("div",null,s)}const c=t(a,[["render",r]]);export{_ as __pageData,c as default};
diff --git a/assets/components_trend.md.DxxgyeHY.lean.js b/assets/components_trend.md.DxxgyeHY.lean.js
new file mode 100644
index 00000000..58187b9b
--- /dev/null
+++ b/assets/components_trend.md.DxxgyeHY.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as l,a6 as d}from"./chunks/framework.Bhh1y9_T.js";const _=JSON.parse('{"title":"Trend 趋势标记","description":"","frontmatter":{},"headers":[],"relativePath":"components/trend.md","filePath":"components/trend.md"}'),a={name:"components/trend.md"},n=d("",3),s=[n];function r(i,o,f,x,g,y){return l(),e("div",null,s)}const c=t(a,[["render",r]]);export{_ as __pageData,c as default};
diff --git a/assets/guide_api.md.UJgy_6go.js b/assets/guide_api.md.UJgy_6go.js
new file mode 100644
index 00000000..53f41375
--- /dev/null
+++ b/assets/guide_api.md.UJgy_6go.js
@@ -0,0 +1,32 @@
+import{_ as e,D as h,c as l,j as i,a as s,I as t,a6 as a,o as p}from"./chunks/framework.Bhh1y9_T.js";const D=JSON.parse('{"title":"常用 API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/api.md","filePath":"guide/api.md"}'),k={name:"guide/api.md"},d=a(`常用 API 接口请求 详细可阅读《与服务端交互 - 接口请求 》。
ts import api from '@/api'
+
+api. get ()
+api. post ()
鉴权 详细可阅读《权限 - 鉴权函数 》。
ts import useAuth from '@/utils/composables/useAuth'
+
+const { auth , authAll } = useAuth ()
+
+auth ()
+authAll ()
主导航 切换 切换主导航,index
为主导航序列数。
ts import useMenu from '@/utils/composables/useMenu'
+
+useMenu (). switchTo (index)
窗口 新增窗口 ts import useWindow from '@/utils/composables/useWindow'
+
+useWindow. add ( 'windowName' )
+
+useWindow. add ({
+ title: '窗口标题' ,
+ name: 'windowName'
+})
关闭窗口 ts import useWindow from '@/utils/composables/useWindow'
+
+useWindow (). remove ( 'windowName' )
`,16),r={id:"窗口全屏切换",tabindex:"-1"},o=i("a",{class:"header-anchor",href:"#窗口全屏切换","aria-label":'Permalink to "窗口全屏切换 "'},"",-1),E=a(`ts import useWindow from '@/utils/composables/useWindow'
+
+useWindow (). toggleMaximize ( 'windowName' )
`,1),c={id:"判断窗口是否全屏",tabindex:"-1"},g=i("a",{class:"header-anchor",href:"#判断窗口是否全屏","aria-label":'Permalink to "判断窗口是否全屏 "'},"",-1),y=a(`ts import useWindow from '@/utils/composables/useWindow'
+
+useWindow (). isMaximize ( 'windowName' ) // true / false
窗口刷新 ts import useWindow from '@/utils/composables/useWindow'
+
+useWindow (). reload ( 'windowName' )
事件总线 基于 mitt 简单封装,使用方法请查阅官方文档。
ts import eventBus from '@/utils/eventBus'
+
+eventBus. on ()
+eventBus. emit ()
+eventBus. off ()
`,6),u={id:"日期",tabindex:"-1"},F=i("a",{class:"header-anchor",href:"#日期","aria-label":'Permalink to "日期 "'},"",-1),m=a(`基于 dayjs 简单封装,使用方法请查阅官方文档。
ts import dayjs from '@/utils/dayjs'
+
+dayjs ()
`,2);function b(_,C,v,B,A,f){const n=h("Badge");return p(),l("div",null,[d,i("h3",r,[s("窗口全屏切换 "),t(n,{type:"pro",text:"专业版"}),s(),o]),E,i("h3",c,[s("判断窗口是否全屏 "),t(n,{type:"pro",text:"专业版"}),s(),g]),y,i("h2",u,[s("日期 "),t(n,{type:"pro",text:"专业版"}),s(),F]),m])}const w=e(k,[["render",b]]);export{D as __pageData,w as default};
diff --git a/assets/guide_api.md.UJgy_6go.lean.js b/assets/guide_api.md.UJgy_6go.lean.js
new file mode 100644
index 00000000..98fa8510
--- /dev/null
+++ b/assets/guide_api.md.UJgy_6go.lean.js
@@ -0,0 +1 @@
+import{_ as e,D as h,c as l,j as i,a as s,I as t,a6 as a,o as p}from"./chunks/framework.Bhh1y9_T.js";const D=JSON.parse('{"title":"常用 API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/api.md","filePath":"guide/api.md"}'),k={name:"guide/api.md"},d=a("",16),r={id:"窗口全屏切换",tabindex:"-1"},o=i("a",{class:"header-anchor",href:"#窗口全屏切换","aria-label":'Permalink to "窗口全屏切换 "'},"",-1),E=a("",1),c={id:"判断窗口是否全屏",tabindex:"-1"},g=i("a",{class:"header-anchor",href:"#判断窗口是否全屏","aria-label":'Permalink to "判断窗口是否全屏 "'},"",-1),y=a("",6),u={id:"日期",tabindex:"-1"},F=i("a",{class:"header-anchor",href:"#日期","aria-label":'Permalink to "日期 "'},"",-1),m=a("",2);function b(_,C,v,B,A,f){const n=h("Badge");return p(),l("div",null,[d,i("h3",r,[s("窗口全屏切换 "),t(n,{type:"pro",text:"专业版"}),s(),o]),E,i("h3",c,[s("判断窗口是否全屏 "),t(n,{type:"pro",text:"专业版"}),s(),g]),y,i("h2",u,[s("日期 "),t(n,{type:"pro",text:"专业版"}),s(),F]),m])}const w=e(k,[["render",b]]);export{D as __pageData,w as default};
diff --git a/assets/guide_axios.md.BhXyFrum.js b/assets/guide_axios.md.BhXyFrum.js
new file mode 100644
index 00000000..17460bb4
--- /dev/null
+++ b/assets/guide_axios.md.BhXyFrum.js
@@ -0,0 +1,98 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const o=JSON.parse('{"title":"与服务端交互","description":"","frontmatter":{},"headers":[],"relativePath":"guide/axios.md","filePath":"guide/axios.md"}'),h={name:"guide/axios.md"},p=n(`与服务端交互 框架使用 Axios 做为异步请求工具,并进行了简单的封装。
接口请求 设置 baseURL 在根目录 .env.*
文件里的 VITE_APP_API_BASEURL
这个参数就是配置 axios 的 baseURL
。
例如项目的真实接口请求地址为:
http://api.test.com/news/list
http://api.test.com/news/create
http://api.test.com/shop/info
则可设置为 VITE_APP_API_BASEURL = http://api.test.com/
。
请求调用 常用的 GET 和 POST 请求可使用以下的方法:
ts import api from '@/api'
+
+// GET 请求
+api. get ( 'news/list' , {
+ params: {
+ page: 1 ,
+ size: 10 ,
+ },
+}). then (( res ) => {
+ // 后续业务代码
+})
+
+// POST 请求
+api. post ( 'news/create' , {
+ title: '新闻标题' ,
+ content: '新闻内容' ,
+}). then (( res ) => {
+ // 后续业务代码
+})
拦截器 在 /src/api/index.ts
文件里实例化了 axios 对象,并对 request
和 response
设置了拦截器,拦截器的用处就是拦截每一次的请求和响应,然后做一些全局的处理。例如接口响应报错,可以在拦截器里用统一的报错提示来展示,方便业务开发。但因为每个公司提供的接口标准不同,所以该文件拦截器部分的代码,需要开发者根据实际情况去修改调整。
代码很简单,首先初始化 axios 对象,然后 axios.interceptors.request.use()
和 axios.interceptors.response.use()
就分别是请求和响应的拦截代码了。
参考代码里只做了简单的拦截处理,例如请求的时候会自动带上 token ,响应的时候会根据错误信息判断是登录失效还是接口报错,并做相应动作。
模块管理 如果项目里的接口很多,推荐根据模块来统一管理接口,目录为 /src/api/modules/
。
跨域处理 生产环境的跨域需要服务端去解决,开发环境的跨域问题可在本地设置代理解决。如果本地开发环境请求接口提示跨域,可以设置 .env.development
文件里 VITE_OPEN_PROXY = true
开启代理。
ts import api from '@/api'
+
+api. get ( 'news/list' ) // http://localhost:9000/proxy/news/list
+api. post ( 'news/add' ) // http://localhost:9000/proxy/news/add
开启代理后,原有请求都会被指向到本地 http://localhost:9000/proxy
,因为 /proxy
匹配到了 vite.config.ts 里代理部分的设置,所以实际是请求依旧是 VITE_APP_API_BASEURL
所设置的地址。
ts server : {
+ // vite.config.ts 中 proxy 配置,该配置即用于代理 API 请求
+ proxy : {
+ '/proxy' : {
+ target: loadEnv (mode, process. cwd ()). VITE_APP_API_BASEURL ,
+ changeOrigin: command === 'serve' && loadEnv (mode, process. cwd ()). VITE_OPEN_PROXY == 'true' ,
+ rewrite : path => path. replace ( / \\/ proxy / , '' ),
+ },
+ },
+},
多数据源 如果项目里需要从多个不同地址的数据源请求数据,你有两种方式可以实现。
如果只是几个接口需求从其它数据源请求,你可以使用覆盖 baseURL
的方式:
ts import api from '@/api'
+
+api. get ( '/new/list' , {
+ baseURL: 'http://baidu.com/' , // 直接覆盖 baseURL
+})
这种方式的前提是,两个数据源的 request
和 response
规则要保持一致,因为只是覆盖 baseURL
,拦截器还是用的同一套规则。
所以如果两个数据源的请求和响应是完全不同的标准,你需要给第二个数据源单独实例化一个 axios 对象。首先在 .env.*
文件里配置第二个数据源的 baseURL
:
# 命名可随意,以 VITE_APP_ 开头即可
+VITE_APP_API_BASEURL_2 = 此处填写接口地址
然后把 /src/api/index.ts
文件复制一份,例如就叫 /src/api/index2.ts
,并且将代码中使用到 VITE_APP_API_BASEURL
也替换为 VITE_APP_API_BASEURL_2
,这样你就可以在页面中通过引入不同的文件分别请求两个数据源了:
ts import api from '@/api'
+import api2 from '@/api/index2'
+
+// 请求默认数据源
+api. get ( '/new/list' )
+// 请求第 2 个数据源
+api2. get ( '/new/list' )
需注意,如果第二个数据源也需要开启跨域处理的话,需要在 /src/api/index2.ts
里定一个新的 proxy 路径,例如 /proxy2/
:
ts const api = axios. create ({
+ baseURL: import . meta .env. DEV && import . meta .env. VITE_OPEN_PROXY === 'true' ? '/proxy2/' : import . meta .env. VITE_APP_API_BASEURL_2 ,
+ timeout: 10000 ,
+ responseType: 'json' ,
+})
同时在 vite.config.ts 里增加一段新的 proxy 配置:
ts server : {
+ // vite.config.ts 中 proxy 配置,该配置即用于代理 API 请求
+ proxy : {
+ '/proxy' : {
+ target: loadEnv (mode, process. cwd ()). VITE_APP_API_BASEURL ,
+ changeOrigin: command === 'serve' && loadEnv (mode, process. cwd ()). VITE_OPEN_PROXY == 'true' ,
+ rewrite : path => path. replace ( / \\/ proxy / , '' ),
+ },
+ '/proxy2' : {
+ target: loadEnv (mode, process. cwd ()). VITE_APP_API_BASEURL_2 ,
+ changeOrigin: command === 'serve' && loadEnv (mode, process. cwd ()). VITE_OPEN_PROXY == 'true' ,
+ rewrite : path => path. replace ( / \\/ proxy2 / , '' ),
+ },
+ },
+},
Mock Mock 数据是前端开发过程中必不可少的一环,是分离前后端开发的关键链路。通过预先跟服务器端约定好的接口,模拟请求数据甚至逻辑,能够让前端开发独立自主,不会被服务端的开发所阻塞。
开发环境 mock mock 文件存放在 /src/mock/
下,建议按照不同模块区分文件夹。文件新增或修改后会自动更新,不需要手动重启,可以在代码控制台查看日志信息。
以下为示例代码:
ts import { defineFakeRoute } from 'vite-plugin-fake-server/client'
+import Mock from 'mockjs'
+
+export default defineFakeRoute ([
+ {
+ url: '/mock/news/list' ,
+ method: 'get' ,
+ response : () => {
+ return {
+ error: '' ,
+ status: 1 ,
+ data: Mock. mock ({
+ 'list|5-10' : [
+ {
+ title: '@ctitle' ,
+ },
+ ],
+ }),
+ }
+ },
+ },
+])
参数获取:
GET:({ query }) => { }
POST:({ body }) => { }
为了让 mock 接口与真实接口共存,即项目开发中,部分请求 mock 接口,部分请求真实接口。需要在配置 mock 接口的时候,给 url
参数统一设置 /mock/
前缀,并在调用接口的时候,使用 baseURL
强制修改此次请求的地址。
如下所示,其中 news/list
会请求本地的 mock 接口,而 news/create
依旧请求真实接口,即使开启跨域代理也不影响。
ts import api from '@/api'
+
+api. get ( 'news/list' , {
+ baseURL: '/mock/' ,
+ params: {
+ page: 1 ,
+ size: 10 ,
+ },
+}). then (( res ) => {
+ // 后续业务代码
+})
+
+api. post ( 'news/create' , {
+ title: '新闻标题' ,
+ content: '新闻内容' ,
+}). then (( res ) => {
+ // 后续业务代码
+})
生产环境 mock 注意
生产环境一般都是调用真实接口,如果需要使用 mock 也只适用于一些简单的示例网站及预览网站。
模板默认已经配置好生产环境 mock ,如果不想让生产环境里的请求走 mock ,可在接口调用处删除 baseURL 设置,或直接删除 mock 接口文件。
需要注意一点,如果项目中有涉及到上传功能,请彻底关闭线上环境 mock ,在环境配置里设置 VITE_BUILD_MOCK = false
,不然线上环境将会报错。
开发环境与生产环境使用 mock 差异不大,比较大的区别是生产环境里调用 mock 接口,在控制台内看不到接口请求日志。
`,52),k=[p];function l(t,e,E,d,r,g){return a(),i("div",null,k)}const y=s(h,[["render",l]]);export{o as __pageData,y as default};
diff --git a/assets/guide_axios.md.BhXyFrum.lean.js b/assets/guide_axios.md.BhXyFrum.lean.js
new file mode 100644
index 00000000..19e0a2b0
--- /dev/null
+++ b/assets/guide_axios.md.BhXyFrum.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const o=JSON.parse('{"title":"与服务端交互","description":"","frontmatter":{},"headers":[],"relativePath":"guide/axios.md","filePath":"guide/axios.md"}'),h={name:"guide/axios.md"},p=n("",52),k=[p];function l(t,e,E,d,r,g){return a(),i("div",null,k)}const y=s(h,[["render",l]]);export{o as __pageData,y as default};
diff --git a/assets/guide_build.md.-GzyVqA3.js b/assets/guide_build.md.-GzyVqA3.js
new file mode 100644
index 00000000..6439d0b2
--- /dev/null
+++ b/assets/guide_build.md.-GzyVqA3.js
@@ -0,0 +1,9 @@
+import{_ as a,c as e,o as s,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const b=JSON.parse('{"title":"构建与预览","description":"","frontmatter":{},"headers":[],"relativePath":"guide/build.md","filePath":"guide/build.md"}'),p={name:"guide/build.md"},t=n(`构建与预览 构建 项目开发完成之后,可以执行 pnpm run build
命令进行构建,构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件。
如果是需要构建测试环境,则执行 pnpm run build:test
命令,对应会在根目录生成 dist-test 文件夹。
TIP
如果最终访问地址为域名非根节点,如 https://www.example.com/app
,则需要在 vite.config.ts
中设置 base
选项为 /app/
,否则会出现资源引用错误。
预览 生成好的 dist 文件夹一般需要部署至服务器才算部署发布成功,但为了保证构建出来的文件能正常运行,开发者通常希望能在本地先预览一下,可执行 pnpm run serve
或 pnpm run serve:test
命令预览不同环境构建出的文件夹。
压缩 在环境配置文件里设置 VITE_BUILD_COMPRESS
即可在构建时生成 .gz
或 .br
文件。
# 单独开启 gzip
+VITE_BUILD_COMPRESS = gzip
+
+# 单独开启 brotli ,brotli 是比 gzip 压缩率更高的算法
+VITE_BUILD_COMPRESS = brotli
+
+# 或者也可以都开启,两者可以共存
+VITE_BUILD_COMPRESS = gzip,brotli
两者均需要 nginx 安装指定模块并开启后才会生效。
其它设置 在环境配置文件里除了可以设置压缩选项,还可设置:
# 是否在打包时生成 sourcemap
+VITE_BUILD_SOURCEMAP = true
`,14),i=[t];function o(c,d,l,r,h,u){return s(),e("div",null,i)}const m=a(p,[["render",o]]);export{b as __pageData,m as default};
diff --git a/assets/guide_build.md.-GzyVqA3.lean.js b/assets/guide_build.md.-GzyVqA3.lean.js
new file mode 100644
index 00000000..db49e55c
--- /dev/null
+++ b/assets/guide_build.md.-GzyVqA3.lean.js
@@ -0,0 +1 @@
+import{_ as a,c as e,o as s,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const b=JSON.parse('{"title":"构建与预览","description":"","frontmatter":{},"headers":[],"relativePath":"guide/build.md","filePath":"guide/build.md"}'),p={name:"guide/build.md"},t=n("",14),i=[t];function o(c,d,l,r,h,u){return s(),e("div",null,i)}const m=a(p,[["render",o]]);export{b as __pageData,m as default};
diff --git a/assets/guide_changelog.md.DCflyckv.js b/assets/guide_changelog.md.DCflyckv.js
new file mode 100644
index 00000000..51f6f504
--- /dev/null
+++ b/assets/guide_changelog.md.DCflyckv.js
@@ -0,0 +1,33 @@
+import{_ as t,D as r,c as i,j as a,a as o,I as l,a6 as e,o as p}from"./chunks/framework.Bhh1y9_T.js";const E=JSON.parse('{"title":"更新日志","description":"","frontmatter":{},"headers":[],"relativePath":"guide/changelog.md","filePath":"guide/changelog.md"}'),n={name:"guide/changelog.md"},h=e('更新日志 只记录 feat/fix 以及破坏性更新记录。
4.7.0 基础版
🚨 Breaking Changes
🚀 Features
扩充 unocss 自定义 shortcuts - by @hooray (6258e) SvgIcon 组件支持传入本地图片,网络图片增加载入和失败状态 - by @hooray (cea64) 引入 postcss-nested - by @hooray (2ce2b) 专业版
🚨 Breaking Changes
🚀 Features
扩充 unocss 自定义 shortcuts - by @hooray (15a3f) SvgIcon 组件支持传入本地图片,网络图片增加载入和失败状态 - by @hooray (a1a81) 引入 postcss-nested - by @hooray (5f4d6) 4.6.0 基础版
🚨 Breaking Changes
移除createInjectionKey
函数 - by @hooray (09d49) 窗口宽度改为配置文件全局设置 - by @hooray (fa5c5) 🚀 Features
上传组件增加自定义上传 - by @hooray (43851) FileUpload 组件文件列表增加下载功能 - by @hooray (09b21) 专业版
🚨 Breaking Changes
移除createInjectionKey
函数,全局provide的generateI18nTitle
函数放到useMenu()
里提供 - by @hooray (ebc63) 调整 menu.enableSubMenuCollapseButton
的展示逻辑 - by @hooray (3a6d7) 🚀 Features
上传组件增加自定义上传 - by @hooray (dab41) 窗口宽度改为在配置文件全局设置,支持单独设置窗口宽度 - by @hooray (3837a) FileUpload 组件文件列表增加下载功能 - by @hooray (fd0ca) 🐞 Bug Fixes
修复类型警告 - by @hooray (9783f) 修复主题跟随系统且系统为明亮模式时,水印不生效 - by @hooray (f9498) 4.5.0 基础版
🚨 Breaking Changes
配置项 menu.menuMode
变更为 menu.mode
- by @hooray (10415) 🚀 Features
🐞 Bug Fixes
专业版
🚨 Breaking Changes
配置项 menu.menuActiveStyle
变更为 menu.style
- by @hooray (fce08) 配置项 menu.menuMode
变更为 menu.mode
- by @hooray (9091d) 🚀 Features
增加2种导航栏模式 side-panel
/ head-panel
- by @hooray (cab92) 增加禁用开发者工具环境变量 - by @hooray (f2ef8) 新增哀悼模式和色弱模式 - by @hooray (9ebc8) 🐞 Bug Fixes
4.4.1 专业版
🐞 Bug Fixes
修复有 badge 的一级导航在收起时展示和其他导航不一样的问题 - by @hooray (1441c) 4.4.0 基础版
🚀 Features
🐞 Bug Fixes
修复顶部导航鼠标滚动回弹 - by @hooray (216ac) 修复顶部导航数量过多,导致工具栏被遮挡 - by @hooray (f49b6) 专业版
🚨 Breaking Changes
移除导航i18n
配置项,合并到title
配置项内 - by @hooray (1921b) 🚀 Features
🐞 Bug Fixes
4.3.0 专业版
🚀 Features
提供 $t
函数,用于菜单 i18n
能在 VSCode I18n Ally 插件下正确显示 - by @hooray (d8039) 工具栏部分按钮增加交互动效 - by @hooray (8f597) 支持 RTL 模式 - by @hooray (97483) 🐞 Bug Fixes
修复 mock 模板请求无响应数据 - by @hooray (6c92d) 4.2.3 4.2.2 4.2.1 专业版
🐞 Bug Fixes
修复 IconPicker 组件样式错乱 - by @hooray (3bd3b) 4.2.0 基础版
🚀 Features
引入 unplugin-turbo-console 优化开发体验 - by @hooray (43d09) 增加打包后生成存档文件支持 - by @hooray (66d9e) 增加图片支持,整站图标改用 unocss icon 方式使用,方便在内网环境使用 - by @hooray (4bccd) 导航菜单收起时,无二级的一级导航增加 tooltip 展示 - by @hooray (5e61c) 明暗模式设置为跟随系统时,支持动态切换 - by @hooray (98792) 🐞 Bug Fixes
专业版
🚨 Breaking Changes
重构用户偏好模块,偏好设置可存放在 localStorage - by @hooray (7a554) 重构页面水印,支持动态更新 - by @hooray (7cdc8) 移除内置 v-waves 指令,使用第三方 v-wave 插件 - by @hooray (a7505) 🚀 Features
引入 unplugin-turbo-console 优化开发体验 - by @hooray (f644e) 增加打包后生成存档文件支持 - by @hooray (2bb50) SvgIcon 增加图片支持,整站图标改用 unocss icon 方式使用,方便在内网环境使用 - by @hooray (d5715) 导航菜单收起时,无二级的一级导航增加 tooltip 展示 - by @hooray (95cf8) 明暗模式设置为跟随系统时,支持动态切换 - by @hooray (c7bcb) 增加 v-zoomable
图片预览指令 - by @hooray (3d58e) 🐞 Bug Fixes
4.1.0 基础版
🚨 Breaking Changes
Vite-plugin-fake-server 替换 vite-plugin-mock - by @hooray (38039) 应用配置 toolbar
对象内属性调整 - by @hooray (e2aaf) 专业版
🚨 Breaking Changes
Vite-plugin-fake-server 替换 vite-plugin-mock - by @hooray (bdfa4) 应用配置 toolbar
对象内属性调整 - by @hooray (c2915) 🚀 Features
应用配置新增 menu.subMenuAutoCollapse
,支持次导航收起时,鼠标悬停临时展开 - by @hooray (970ef) 应用配置新增 toolbar.layout
属性,支持工具栏自定义布局 - by @hooray (cc87f) 4.0.1 基础版
🐞 Bug Fixes
修复登录页 Copyright 组件未展示 - by @hooray (0b03a) 专业版
🐞 Bug Fixes
修复登录页 Copyright 组件未展示 - by @hooray (a808f) 4.0.0 基础版
🚨 Breaking Changes
启用新的 eslint 配置文件 - by @hooray (5f9f1) 移除应用配置中 Element Plus 默认尺寸的配置项 - by @hooray (dfc51) 🚀 Features
支持使用 Iconify 完整图标库 - by @hooray (2d642) 重构框架核心源码 - by @hooray (874e3) Eslint 增加 unocss 配置 - by @hooray (dcbcc) 专业版
🚨 Breaking Changes
启用新的 eslint 配置文件 - by @hooray (66160) 移除应用配置中 Element Plus 默认尺寸的配置项 - by @hooray (6720a) 🚀 Features
🐞 Bug Fixes
',39),c=e(`拥抱原子化 CSS ,启用 UnoCSS ,并对框架部分组件样式进行了重构
如果你正在将老版本的业务代码向新版本迁移,推荐安装 UnoCSS 这个 VSCode 插件,它能高亮显示 UnoCSS 的代码。如果你的业务页面代码中定义的 class 和 UnoCSS 的 class 重名,也可以通过这个插件快速识别到并修改。
与 Element Plus 组件库解耦,方便替换成其他第三方 UI 组件库,详细可阅读:
ESLint 配置文件格式调整,详细可阅读《代码规范 - ESLint 配置 》
ESLint 提供了全新的配置方式,所有配置项将都在一个 eslint.config.js
文件中实现。
基础版现在可以使用 Iconify 完整图标库,详细可阅读《图标 - Iconify 图标 》
全新的主题配色方案,详细可阅读《主题 - 框架主题 》
移除 Element Plus 自定义主题配置
如果你依旧需要自定义 Element Plus 的主题,可以阅读 Element Plus 官方文档《自定义主题 》,或者参考下面提供的最佳实践。
在 /src/assets/styles/
目录下分别新建 element-plus.scss
和 element-plus.dark.scss
并写入下面的代码:
scss // element-plus.scss
+@forward "element-plus/theme-chalk/src/common/var.scss" with (
+ $colors : (
+ "primary" : (
+ "base" : green
+ )
+ )
+);
+@use "element-plus/theme-chalk/src/index.scss" as * ;
+@use "./element-plus.dark.scss" as * ;
scss // element-plus.dark.scss
+@forward "element-plus/theme-chalk/src/dark/var.scss" with (
+ $bg-color : (
+ "page" : # 0a0a0a ,
+ "" : # 141414 ,
+ "overlay" : # 1d1e1f ,
+ )
+);
+@use "element-plus/theme-chalk/src/dark/css-vars.scss" as * ;
修改 /src/main.ts
ts ...
+import ElementPlus from 'element-plus'
+import 'element-plus/dist/index.css'
+import 'element-plus/theme-chalk/dark/css-vars.css'
+import '@/assets/styles/element-plus.scss'
+...
移除应用配置中 Element Plus 默认尺寸的配置项
如果你依旧需要全局配置 Element Plus 的默认尺寸,可以参考《Config Provider 全局配置 》并在 /src/App.vue
中进行修改。
移除精灵图支持
原有 /src/assets/sprites/
目录中的图片,现在可以移动到 /src/assets/images/
目录中,并修改代码中的使用方式。
`,8),m=e(`ts const globalSettings : Settings . all = {
+ menu: {
+ /**
+ * 留空默认
+ * radius 圆角
+ */
+ menuFillStyle: '' ,
+ // 导航栏是否圆角
+ isRounded: false ,
+ },
+}
`,1),b=e('3.1.3 3.1.2 3.1.1 3.1.0 3.0.0 基础版
🚨 Breaking Changes
移除 BatchActionBar
组件 - by @hooray (b1f8f) 移除 Editor
组件 - by @hooray (2ea5f) 移除 vite-plugin-html 插件 - by @hooray (9d1d3) 调整应用配置的配置项,并将应用配置按钮从工具栏删除 - by @hooray (ceffd) 重构接口请求,统一管理接口请求模块 - by @hooray (301d7) 🚀 Features
引入 stylelint-stylistic 插件 - by @hooray (38e3f) 🐞 Bug Fixes
修复 axios baseURL 配置,解决构建后 baseURL 不生效的问题 - by @hooray (87963) 专业版
🚨 Breaking Changes
移除 BatchActionBar
组件 - by @hooray (ca569) 移除 Editor
组件 - by @hooray (6fff3) 移除 vite-plugin-html 插件 - by @hooray (f9c4e) 调整应用配置的配置项,并将应用配置按钮从工具栏删除 - by @hooray (abea5) 重构标准模块,增加表格高度自适应功能 - by @hooray (f20ca) 重构接口请求,统一管理接口请求模块 - by @hooray (831ab) 🚀 Features
引入 stylelint-stylistic 插件 - by @hooray (f0826) 新增 StorageBox 组件 - by @hooray (38efb) 增加明暗切换过渡动效 - by @hooray (44045) 🐞 Bug Fixes
修复 axios baseURL 配置,解决构建后 baseURL 不生效的问题 - by @hooray (3fa26) 增加 dropdown 组件外边框的临时解决方案 - by @hooray (9cd44) 2.3.2 2.3.1 2.3.0 基础版
🚨 Breaking Changes
Pinia store 改为 setup 写法 - by @hooray (1cd93) UseCurrentInstance() 重命名为 useGlobalProperties() - by @hooray (0311a) 专业版
🚨 Breaking Changes
Pinia store 改为 setup 写法 - by @hooray (040a5) UseCurrentInstance() 重命名为 useGlobalProperties() - by @hooray (39d56) 🐞 Bug Fixes
修复顶部主导航国际化配置不生效 - by @hooray (02548) 修复切换国际化语言时,主导航激活项被复原到第一个 - by @hooray (e6846) 2.2.0 专业版
🚀 Features
个人设置窗口补充 i18n 配置 - by @hooray (2655c) 🐞 Bug Fixes
2.1.0 2.0.0 v1.0.0 基础版
JS 版本存档,框架下次更新将切换到 TS 版本,JS 版本将不再维护。
专业版
JS 版本存档,框架下次更新将切换到 TS 版本,JS 版本将不再维护。
',36);function d(u,k,g,f,y,_){const s=r("Badge");return p(),i("div",null,[h,a("ul",null,[c,a("li",null,[a("p",null,[o("应用配置中导航栏填充风格的配置项名称变更 "),l(s,{type:"pro",text:"专业版"})]),m])]),b])}const F=t(n,[["render",d]]);export{E as __pageData,F as default};
diff --git a/assets/guide_changelog.md.DCflyckv.lean.js b/assets/guide_changelog.md.DCflyckv.lean.js
new file mode 100644
index 00000000..d041fff6
--- /dev/null
+++ b/assets/guide_changelog.md.DCflyckv.lean.js
@@ -0,0 +1 @@
+import{_ as t,D as r,c as i,j as a,a as o,I as l,a6 as e,o as p}from"./chunks/framework.Bhh1y9_T.js";const E=JSON.parse('{"title":"更新日志","description":"","frontmatter":{},"headers":[],"relativePath":"guide/changelog.md","filePath":"guide/changelog.md"}'),n={name:"guide/changelog.md"},h=e("",39),c=e("",8),m=e("",1),b=e("",36);function d(u,k,g,f,y,_){const s=r("Badge");return p(),i("div",null,[h,a("ul",null,[c,a("li",null,[a("p",null,[o("应用配置中导航栏填充风格的配置项名称变更 "),l(s,{type:"pro",text:"专业版"})]),m])]),b])}const F=t(n,[["render",d]]);export{E as __pageData,F as default};
diff --git a/assets/guide_coding-standard.md.BOxNKpOC.js b/assets/guide_coding-standard.md.BOxNKpOC.js
new file mode 100644
index 00000000..d5fc3976
--- /dev/null
+++ b/assets/guide_coding-standard.md.BOxNKpOC.js
@@ -0,0 +1,21 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const E=JSON.parse('{"title":"代码规范","description":"","frontmatter":{},"headers":[],"relativePath":"guide/coding-standard.md","filePath":"guide/coding-standard.md"}'),e={name:"guide/coding-standard.md"},n=t(`代码规范 为保证代码风格统一,请使用 Visual Studio Code 做为开发 IDE ,框架源码里已提供相关配置文件,可直接测试效果:在保存代码时,会自动对当前文件进行代码格式化操作。
IDE 配置 配置文件为 .editorconfig
,通常情况下无需做任何修改。
ESLint 配置 配置文件为 eslint.config.js
,框架使用 antfu/eslint-config 做为基础规范,如果你对默认的规则有异议,可以查阅 ESLint 官网规则并在 eslint.config.js
文件中进行覆盖。
当你对规则进行修改后,原有的代码可能会因为规则的变动导致编辑器大量提示错误,你可以通过运行 pnpm run lint:eslint
进行一次格式校验,如果规则支持自动修复,则会将不符合规则的代码自动进行格式化。
TIP
通过修改 eslint.config.js
中 ignores
配置可忽略无需做代码规范校验的目录或文件,例如在项目中导入了一些第三方的插件代码或组件代码,我们就可以将其进行忽略。
StyleLint 配置 配置文件为 .stylelintrc
,如果你对默认的规则有异议,可以查阅 Stylelint 官网规则并在 .stylelintrc
文件中进行修改。
当你对规则进行修改后,原有的代码可能会因为规则的变动导致编辑器大量提示错误,你可以通过运行 pnpm run lint:stylelint
进行一次格式校验,如果规则支持自动修复,则会将不符合规则的代码自动进行格式化。
TIP
通过修改 .stylelintignore
可忽略无需做代码规范校验的文件,例如在项目中导入了一些第三方的插件代码或组件代码,我们就可以将其进行忽略。
simple-git-hooks 和 lint-staged 由于 IDE 能做的事比较有限,只能对代码的书写规范进行格式化,对于一些无法自动修复的错误代码,如果没有改正到就被推送到 git 仓库,在多人协作开发时,可能会影响到别人的开发体验。所以框架集成了 simple-git-hooks 和 lint-staged 这两个依赖来解决这一问题。
在提交代码时, simple-git-hooks 会通过 lint-staged 对本次提交变更的文件进行分别进行 eslint 和 stylelint 检测,如果有报错,则会阻止本次代码提交,直到开发者修改完所有错误代码后,才允许提交到 git 仓库,这样可以确保 git 仓库里的代码不会有不规范的代码。
注意
请确保在安装依赖前,已经使用 git init
对项目进行过 git 环境初始化,如果你在安装依赖后再初始化了 git 环境,请在 git 环境初始化之后再执行一遍 pnpm install
安装命令。
此外,如果 git 仓库目录和框架目录并非同一个,则需要在 package.json
中修改 postinstall
脚本,切换到 git 所在目录。例如 git 目录是 project/
,而框架目录是 project/one-step-admin/
,则在 package.json
里找到 simple-git-hooks
配置并修改:
json "simple-git-hooks" : {
+ "pre-commit" : "cd ./one-step-admin/ && pnpm lint-staged" ,
+ "preserveUnused" : true
+}
修改后重新执行一下 pnpm install
即可。
移除 如果不想在 git 提交时强制进行代码规范校验,可以在 package.json
中移除 simple-git-hooks
配置:
然后手动删除 .git/hooks/pre-commit
文件即可。
`,21),l=[n];function p(o,h,d,k,r,c){return a(),i("div",null,l)}const u=s(e,[["render",p]]);export{E as __pageData,u as default};
diff --git a/assets/guide_coding-standard.md.BOxNKpOC.lean.js b/assets/guide_coding-standard.md.BOxNKpOC.lean.js
new file mode 100644
index 00000000..05f995ac
--- /dev/null
+++ b/assets/guide_coding-standard.md.BOxNKpOC.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const E=JSON.parse('{"title":"代码规范","description":"","frontmatter":{},"headers":[],"relativePath":"guide/coding-standard.md","filePath":"guide/coding-standard.md"}'),e={name:"guide/coding-standard.md"},n=t("",21),l=[n];function p(o,h,d,k,r,c){return a(),i("div",null,l)}const u=s(e,[["render",p]]);export{E as __pageData,u as default};
diff --git a/assets/guide_components.md.DKFLed6e.js b/assets/guide_components.md.DKFLed6e.js
new file mode 100644
index 00000000..12bf2ac9
--- /dev/null
+++ b/assets/guide_components.md.DKFLed6e.js
@@ -0,0 +1,17 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"guide/components.md","filePath":"guide/components.md"}'),t={name:"guide/components.md"},l=n(`介绍 框架提供一系列的组件方便快速开发,其中基础组件 为 Element Plus 原生提供的组件;而扩展组件 有一部分是在 Element Plus 组件上进行了二次开发,还有一部分是封装了第三方插件。
组件源码完全开放,如果觉得用着不顺手,可以到 /src/components/
目录下找到对应组件进行修改。
基础组件 基础组件由 Element Plus 提供,其中包含按钮 、文字链接 、单选框 、多选框 、输入框 、计数器 、级联选择器 、开关 、滑块 等 50+ 个组件。
阅读并学习请查看 Element Plus 官方文档 。
TIP
框架严格按照 Element Plus 推荐的使用方式进行引入,即按需自动导入,意味着你可以直接在代码里使用组件,而无需手动注册。
但也意味着 Element Plus 一些全局方法将无法使用,例如 Message 消息提示组件。
js // 无法使用
+const { proxy } = getCurrentInstance ()
+proxy.$message. success (options)
+
+// 可以使用
+ElMessage. success (options)
另外因为框架没有采用 Element Plus 官方的图标使用方式,这也意味着部分组件的 icon 属性将无法使用,例如 Button 按钮组件。
template <!-- 无法使用 -->
+< el-button icon = "el-icon-edit" >编辑</ el-button >
+
+<!-- 可以使用插槽代替 -->
+< el-button >
+ < template # icon >
+ < el-icon >
+ < svg-icon name = "ep:edit" />
+ </ el-icon >
+ </ template >
+ 编辑
+</ el-button >
扩展组件 `,8),e=[l];function p(h,k,r,E,o,g){return a(),i("div",null,e)}const y=s(t,[["render",p]]);export{c as __pageData,y as default};
diff --git a/assets/guide_components.md.DKFLed6e.lean.js b/assets/guide_components.md.DKFLed6e.lean.js
new file mode 100644
index 00000000..76b5f912
--- /dev/null
+++ b/assets/guide_components.md.DKFLed6e.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"guide/components.md","filePath":"guide/components.md"}'),t={name:"guide/components.md"},l=n("",8),e=[l];function p(h,k,r,E,o,g){return a(),i("div",null,e)}const y=s(t,[["render",p]]);export{c as __pageData,y as default};
diff --git a/assets/guide_configure.md.DGLgmmVa.js b/assets/guide_configure.md.DGLgmmVa.js
new file mode 100644
index 00000000..3a209dad
--- /dev/null
+++ b/assets/guide_configure.md.DGLgmmVa.js
@@ -0,0 +1,62 @@
+import{_ as s,c as a,o as i,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/settings.png",_=JSON.parse('{"title":"配置","description":"","frontmatter":{},"headers":[],"relativePath":"guide/configure.md","filePath":"guide/configure.md"}'),p={name:"guide/configure.md"},e=n(`配置 环境配置 默认提供三套环境配置,分别为:
其中 VITE_APP_SETTING
VITE_APP_TITLE
VITE_APP_API_BASEURL
VITE_APP_DEBUG_TOOL
VITE_APP_DISABLE_DEVTOOL
为必要配置,即不管是在开发、测试,还是生产环境都需要使用到。而其余配置则在不同环境下有不同用途,例如开发环境用于本地开发使用,测试环境和生产环境用于构建使用。
开发者可根据实际业务需求进行扩展,如果对这块不熟悉,请阅读 Vite - 环境变量和模式 章节。
注意
VITE_APP_SETTING
该变量是开启应用配置面板,目的是方便开发者在开发阶段调试,生产环境下默认关闭,也建议关闭。
如果希望提供用户一些定制化的能力,可以开启偏好设置,详细可阅读《用户偏好设置 》
应用配置(框架配置) 开发者请在 /src/settings.ts
文件中设置自定义配置,而 /src/settings.default.ts
为框架的默认配置,请勿在该文件内修改。
关于配置的类型定义,可以在 /src/types/globals.d.ts
文件中查阅。
ts // 这是基础版演示源码里的自定义配置示例
+const globalSettings : Settings . all = {
+ app: {
+ enablePermission: true ,
+ },
+ menu: {
+ enableSubMenuCollapseButton: true ,
+ enableHotkeys: true ,
+ },
+ toolbar: {
+ enableFullscreen: true ,
+ enableColorScheme: true ,
+ },
+}
注意
如果文档中提供的配置介绍,在你本地的开发环境中报错或者无法生效,说明你使用的版本不支持或者配置参数有变动,你可以打开 /src/settings.default.ts
查看当前版本的完整配置作为参考。并且如果你使用的是 Visual Studio Code ,鼠标悬浮到属性上时,会有属性的介绍:
',12),t=[e];function h(k,d,c,r,E,o){return i(),a("div",null,t)}const y=s(p,[["render",h]]);export{_ as __pageData,y as default};
diff --git a/assets/guide_configure.md.DGLgmmVa.lean.js b/assets/guide_configure.md.DGLgmmVa.lean.js
new file mode 100644
index 00000000..c1755f48
--- /dev/null
+++ b/assets/guide_configure.md.DGLgmmVa.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as a,o as i,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/settings.png",_=JSON.parse('{"title":"配置","description":"","frontmatter":{},"headers":[],"relativePath":"guide/configure.md","filePath":"guide/configure.md"}'),p={name:"guide/configure.md"},e=n("",12),t=[e];function h(k,d,c,r,E,o){return i(),a("div",null,t)}const y=s(p,[["render",h]]);export{_ as __pageData,y as default};
diff --git a/assets/guide_copyright.md.DFx3AWRC.js b/assets/guide_copyright.md.DFx3AWRC.js
new file mode 100644
index 00000000..770831b2
--- /dev/null
+++ b/assets/guide_copyright.md.DFx3AWRC.js
@@ -0,0 +1,21 @@
+import{_ as s,c as i,o as a,a6 as h}from"./chunks/framework.Bhh1y9_T.js";const t="/copyright.png",y=JSON.parse('{"title":"版权信息","description":"","frontmatter":{},"headers":[],"relativePath":"guide/copyright.md","filePath":"guide/copyright.md"}'),n={name:"guide/copyright.md"},l=h('版权信息 版权信息位于页面底部显示。
使用 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ copyright: {
+ enable: true ,
+ },
+}
网站运行日期 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ copyright: {
+ dates: '2021-2022' ,
+ },
+}
公司名称 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ copyright: {
+ company: 'One-step-admin' ,
+ },
+}
网站地址 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ copyright: {
+ website: 'https://one-step-admin.hurui.me' ,
+ },
+}
如果未设置公司名称,则该设置将被忽略。
备案号 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ copyright: {
+ beian: '' ,
+ },
+}
`,19),p=[l];function e(k,d,g,r,E,c){return a(),i("div",null,p)}const F=s(n,[["render",e]]);export{y as __pageData,F as default};
diff --git a/assets/guide_copyright.md.DFx3AWRC.lean.js b/assets/guide_copyright.md.DFx3AWRC.lean.js
new file mode 100644
index 00000000..1c95edd4
--- /dev/null
+++ b/assets/guide_copyright.md.DFx3AWRC.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as h}from"./chunks/framework.Bhh1y9_T.js";const t="/copyright.png",y=JSON.parse('{"title":"版权信息","description":"","frontmatter":{},"headers":[],"relativePath":"guide/copyright.md","filePath":"guide/copyright.md"}'),n={name:"guide/copyright.md"},l=h("",19),p=[l];function e(k,d,g,r,E,c){return a(),i("div",null,p)}const F=s(n,[["render",e]]);export{y as __pageData,F as default};
diff --git a/assets/guide_error-log.md.CtmjfpdD.js b/assets/guide_error-log.md.CtmjfpdD.js
new file mode 100644
index 00000000..58c6bb85
--- /dev/null
+++ b/assets/guide_error-log.md.CtmjfpdD.js
@@ -0,0 +1,5 @@
+import{_ as i,D as t,c as n,j as a,a as s,I as l,a6 as p,o as r}from"./chunks/framework.Bhh1y9_T.js";const F=JSON.parse('{"title":"错误日志","description":"","frontmatter":{},"headers":[],"relativePath":"guide/error-log.md","filePath":"guide/error-log.md"}'),o={name:"guide/error-log.md"},h={id:"错误日志",tabindex:"-1"},d=a("a",{class:"header-anchor",href:"#错误日志","aria-label":'Permalink to "错误日志 "'},"",-1),c=p(`首先需要在应用配置里开启错误日志。
ts const globalSettings : Settings . all = {
+ app: {
+ enableErrorLog: true ,
+ },
+}
然后需要到 /src/utils/error.log.ts
文件里编写业务代码,框架为方便演示,将错误日志记录在 sessionStorage
里。
开发者需要根据实际业务情况修改代码,例如将增加上报信息,记录用户账号、token等数据,并且将错误日志进行上报。
由于开启错误日志监控后,Vue 相关的错误都不会在控制台里显示,所以在开发环境下即使开启错误日志也不会被启用,如果需要在开发环境下测试,可在 /src/util/error.log.ts
里修改开启的条件判断。
`,5);function k(g,E,_,y,u,m){const e=t("Badge");return r(),n("div",null,[a("h1",h,[s("错误日志 "),l(e,{type:"pro",text:"专业版"}),s(),d]),c])}const B=i(o,[["render",k]]);export{F as __pageData,B as default};
diff --git a/assets/guide_error-log.md.CtmjfpdD.lean.js b/assets/guide_error-log.md.CtmjfpdD.lean.js
new file mode 100644
index 00000000..2df32ba0
--- /dev/null
+++ b/assets/guide_error-log.md.CtmjfpdD.lean.js
@@ -0,0 +1 @@
+import{_ as i,D as t,c as n,j as a,a as s,I as l,a6 as p,o as r}from"./chunks/framework.Bhh1y9_T.js";const F=JSON.parse('{"title":"错误日志","description":"","frontmatter":{},"headers":[],"relativePath":"guide/error-log.md","filePath":"guide/error-log.md"}'),o={name:"guide/error-log.md"},h={id:"错误日志",tabindex:"-1"},d=a("a",{class:"header-anchor",href:"#错误日志","aria-label":'Permalink to "错误日志 "'},"",-1),c=p("",5);function k(g,E,_,y,u,m){const e=t("Badge");return r(),n("div",null,[a("h1",h,[s("错误日志 "),l(e,{type:"pro",text:"专业版"}),s(),d]),c])}const B=i(o,[["render",k]]);export{F as __pageData,B as default};
diff --git a/assets/guide_favorites.md.CmABV1kw.js b/assets/guide_favorites.md.CmABV1kw.js
new file mode 100644
index 00000000..f2d967d6
--- /dev/null
+++ b/assets/guide_favorites.md.CmABV1kw.js
@@ -0,0 +1,5 @@
+import{_ as i,D as t,c as n,j as a,a as s,I as o,a6 as l,o as p}from"./chunks/framework.Bhh1y9_T.js";const h="/favorites.png",b=JSON.parse('{"title":"收藏夹","description":"","frontmatter":{},"headers":[],"relativePath":"guide/favorites.md","filePath":"guide/favorites.md"}'),d={name:"guide/favorites.md"},r={id:"收藏夹",tabindex:"-1"},c=a("a",{class:"header-anchor",href:"#收藏夹","aria-label":'Permalink to "收藏夹 "'},"",-1),k=l('需在工具栏开启,开启后用户可将常用的导航菜单添加进收藏夹,方便快速访问。
处理请求 收藏夹默认存储在浏览器本地 localStorage 里,如果需要将数据存储到服务器,可以通过 favorites.storageTo
配置项来实现,具体配置如下:
ts const globalSettings : Settings . all = {
+ favorites: {
+ storageTo: 'server' ,
+ },
+}
然后到 /src/api/modules/user.ts
中找到 favorites()
和 favoritesEdit()
这两个函数,并分别修改这两个函数的请求地址。
建议
为减轻后端处理,数据会直接以 JSON 字符串进行存储,建议后端可以在用户表增加相关字段,并将字段类型设为 lonetext
。
`,7);function g(_,E,m,v,f,u){const e=t("Badge");return p(),n("div",null,[a("h1",r,[s("收藏夹 "),o(e,{type:"pro",text:"专业版"}),s(),c]),k])}const F=i(d,[["render",g]]);export{b as __pageData,F as default};
diff --git a/assets/guide_favorites.md.CmABV1kw.lean.js b/assets/guide_favorites.md.CmABV1kw.lean.js
new file mode 100644
index 00000000..5a0f64a9
--- /dev/null
+++ b/assets/guide_favorites.md.CmABV1kw.lean.js
@@ -0,0 +1 @@
+import{_ as i,D as t,c as n,j as a,a as s,I as o,a6 as l,o as p}from"./chunks/framework.Bhh1y9_T.js";const h="/favorites.png",b=JSON.parse('{"title":"收藏夹","description":"","frontmatter":{},"headers":[],"relativePath":"guide/favorites.md","filePath":"guide/favorites.md"}'),d={name:"guide/favorites.md"},r={id:"收藏夹",tabindex:"-1"},c=a("a",{class:"header-anchor",href:"#收藏夹","aria-label":'Permalink to "收藏夹 "'},"",-1),k=l("",7);function g(_,E,m,v,f,u){const e=t("Badge");return p(),n("div",null,[a("h1",r,[s("收藏夹 "),o(e,{type:"pro",text:"专业版"}),s(),c]),k])}const F=i(d,[["render",g]]);export{b as __pageData,F as default};
diff --git a/assets/guide_font.md.BA3rgSN5.js b/assets/guide_font.md.BA3rgSN5.js
new file mode 100644
index 00000000..f528ef79
--- /dev/null
+++ b/assets/guide_font.md.BA3rgSN5.js
@@ -0,0 +1,4 @@
+import{_ as t,D as i,c as o,j as a,a as e,I as n,a6 as l,o as r}from"./chunks/framework.Bhh1y9_T.js";const d="/font1.png",p="/font2.png",x=JSON.parse('{"title":"自定义字体","description":"","frontmatter":{},"headers":[],"relativePath":"guide/font.md","filePath":"guide/font.md"}'),c={name:"guide/font.md"},h={id:"自定义字体",tabindex:"-1"},k=a("a",{class:"header-anchor",href:"#自定义字体","aria-label":'Permalink to "自定义字体 "'},"",-1),g=l('用户访问使用了自定义字体的页面时,会自动下载字体文件,字体文件有大有小,所以不建议在非英文环境中使用。
框架预设了 Digital 7 的两套字体,除此之外,你也可以通过以下方法引入你需要的自定义字体。
找字体 访问 DaFont 或其它字体下载网站,下载 .ttf
格式的字体文件。
生成字体 因为 .ttf
格式的字体文件不是浏览器支持的字体格式,所以需要通过 .ttf
生成其它格式的字体文件。
访问 Font Squirrel ,上传 .ttf
文件,并按照下面设置后,点击下载。
使用 将上一步下载的压缩包解压并放入 /src/assets/fonts/
目录下,注意按文件夹区分,随后引入文件夹中的 stylesheet.css
即可使用,以 Digital 7 字体为例:
scss @import '../../assets/fonts/digital-7/stylesheet.css' ;
+.digital-7 {
+ font-family : 'digital-7regular' ;
+}
字体的 font-family
名称在 stylesheet.css
里查看。
另外你也可以将 @import '../../assets/fonts/digital-7/stylesheet.css';
这句代码放到全局引入,这样所有页面就都可以通过设置 font-family: 'digital-7regular';
直接使用了。
`,14);function f(_,m,E,u,y,b){const s=i("Badge");return r(),o("div",null,[a("h1",h,[e("自定义字体 "),n(s,{type:"pro",text:"专业版"}),e(),k]),g])}const B=t(c,[["render",f]]);export{x as __pageData,B as default};
diff --git a/assets/guide_font.md.BA3rgSN5.lean.js b/assets/guide_font.md.BA3rgSN5.lean.js
new file mode 100644
index 00000000..b5c27674
--- /dev/null
+++ b/assets/guide_font.md.BA3rgSN5.lean.js
@@ -0,0 +1 @@
+import{_ as t,D as i,c as o,j as a,a as e,I as n,a6 as l,o as r}from"./chunks/framework.Bhh1y9_T.js";const d="/font1.png",p="/font2.png",x=JSON.parse('{"title":"自定义字体","description":"","frontmatter":{},"headers":[],"relativePath":"guide/font.md","filePath":"guide/font.md"}'),c={name:"guide/font.md"},h={id:"自定义字体",tabindex:"-1"},k=a("a",{class:"header-anchor",href:"#自定义字体","aria-label":'Permalink to "自定义字体 "'},"",-1),g=l("",14);function f(_,m,E,u,y,b){const s=i("Badge");return r(),o("div",null,[a("h1",h,[e("自定义字体 "),n(s,{type:"pro",text:"专业版"}),e(),k]),g])}const B=t(c,[["render",f]]);export{x as __pageData,B as default};
diff --git a/assets/guide_i18n.md.DNvdKeNF.js b/assets/guide_i18n.md.DNvdKeNF.js
new file mode 100644
index 00000000..76310986
--- /dev/null
+++ b/assets/guide_i18n.md.DNvdKeNF.js
@@ -0,0 +1,58 @@
+import{_ as n,D as l,c as h,j as i,a as s,I as t,a6 as e,o as p}from"./chunks/framework.Bhh1y9_T.js";const k="/i18n-ally.png",B=JSON.parse('{"title":"国际化","description":"","frontmatter":{},"headers":[],"relativePath":"guide/i18n.md","filePath":"guide/i18n.md"}'),E={name:"guide/i18n.md"},d={id:"国际化",tabindex:"-1"},r=i("a",{class:"header-anchor",href:"#国际化","aria-label":'Permalink to "国际化 "'},"",-1),g=e('vscode 扩展 如果使用 vscode 进行开发,推荐安装 i18n Ally 这个扩展。
安装该扩展后,代码里可以实时查看对应语言的内容。
语言选择器 在应用配置里设置后,会在顶栏里显示语言选择器。
ts const globalSettings : Settings . all = {
+ toolbar: {
+ enableI18n: true ,
+ },
+}
同时还可在应用配置里设置默认语言,可选设置的值参考 /src/locales/lang/
目录下文件名,留空则会根据浏览器语言自动判断,如果找不到对应的语言则使用 中文(简体) 兜底。
ts const globalSettings : Settings . all = {
+ app: {
+ defaultLang: '' ,
+ },
+}
语言包 语言包存放在 /src/locales/lang/
目录下,因为 Element Plus 本身也有自己的语言包,所以在做国际化支持的时候,框架的语言包文件命名需要和 Element Plus 保持一致,可点击这里 查看 Element Plus 的语言包文件。
假设你已经在 /src/locales/lang/
目录下新增并配置好了一个日文语言包 ja.json
,然后你需要到 /src/locales/index.ts
文件里做以下调整。
ts import elementLocaleZhCN from 'element-plus/lib/locale/lang/zh-cn'
+import elementLocaleZhTW from 'element-plus/lib/locale/lang/zh-tw'
+import elementLocaleEn from 'element-plus/lib/locale/lang/en'
+// 引用 Element Plus 的日文语言包
+import elementLocaleJa from 'element-plus/lib/locale/lang/ja'
+
+function getElementLocales () {
+ const locales : {
+ [ key : string ] : any
+ } = {}
+ for ( const key in messages) {
+ locales[key] = {}
+ switch (key) {
+ case 'zh-cn' :
+ Object. assign (locales[key], elementLocaleZhCN, { labelName: '中文(简体)' })
+ break
+ case 'zh-tw' :
+ Object. assign (locales[key], elementLocaleZhTW, { labelName: '中文(繁體)' })
+ break
+ case 'en' :
+ Object. assign (locales[key], elementLocaleEn, { labelName: 'English' })
+ break
+ // 在这里增加一个 case 选项,其中 labelName 会在语言选择器里显示
+ case 'ja' :
+ Object. assign (locales[key], elementLocaleJa, { labelName: '日本語' })
+ break
+ }
+ }
+ return locales
+}
修改完成后,需要重新启动项目才会生效。
导航设置 如果需要新增某个导航的国际化支持,光设置好中文(简体)的还不行,其它语言包文件里也要同步添加。当都设置好后,可在该导航里设置 title
参数,例如:
框架设置 以中文(简体)为例,打开 /src/locales/lang/zh-cn.json
文件可以看到框架相关的配置,在 app
对象里的就是框架部分的语言信息,如果需要对框架进行二次开发,请在这里扩展。
json {
+ "app" : {
+ "account" : "用户名" ,
+ "captcha" : "验证码" ,
+ "check" : "确认" ,
+ "goLogin" : "去登录" ,
+ "login" : "登录" ,
+ "logout" : "退出登录" ,
+ "newPassword" : "新密码" ,
+ "password" : "密码" ,
+ "profile" : "个人设置" ,
+ "sendCaptcha" : "发送验证码"
+ }
+}
单页组件 如果每个页面都要做国际化支持,那语言包文件就会变得无比庞大且难以维护,推荐在每个页面组件里使用 <i18n>
自定义块进行语言维护,可访问 /src/views/feature_example/i18n.vue
查看示例。
与服务端交互 所有的请求均会在请求头里带上 Accept-Language
,后端可根据这一状态信息做动态数据国际化处理。
关闭国际化 如果不想开启国际化,可参考以下设置,该设置表示关闭语言选择器,并以中文(简体)显示。
ts const globalSettings : Settings . all = {
+ app: {
+ defaultLang: 'zh-cn' ,
+ },
+ toolbar: {
+ enableI18n: false ,
+ },
+}
`,28);function o(c,y,F,u,C,b){const a=l("Badge");return p(),h("div",null,[i("h1",d,[s("国际化 "),t(a,{type:"pro",text:"专业版"}),s(),r]),g])}const q=n(E,[["render",o]]);export{B as __pageData,q as default};
diff --git a/assets/guide_i18n.md.DNvdKeNF.lean.js b/assets/guide_i18n.md.DNvdKeNF.lean.js
new file mode 100644
index 00000000..ee570928
--- /dev/null
+++ b/assets/guide_i18n.md.DNvdKeNF.lean.js
@@ -0,0 +1 @@
+import{_ as n,D as l,c as h,j as i,a as s,I as t,a6 as e,o as p}from"./chunks/framework.Bhh1y9_T.js";const k="/i18n-ally.png",B=JSON.parse('{"title":"国际化","description":"","frontmatter":{},"headers":[],"relativePath":"guide/i18n.md","filePath":"guide/i18n.md"}'),E={name:"guide/i18n.md"},d={id:"国际化",tabindex:"-1"},r=i("a",{class:"header-anchor",href:"#国际化","aria-label":'Permalink to "国际化 "'},"",-1),g=e("",28);function o(c,y,F,u,C,b){const a=l("Badge");return p(),h("div",null,[i("h1",d,[s("国际化 "),t(a,{type:"pro",text:"专业版"}),s(),r]),g])}const q=n(E,[["render",o]]);export{B as __pageData,q as default};
diff --git a/assets/guide_intro.md.sO_pu713.js b/assets/guide_intro.md.sO_pu713.js
new file mode 100644
index 00000000..61bc0dab
--- /dev/null
+++ b/assets/guide_intro.md.sO_pu713.js
@@ -0,0 +1 @@
+import{_ as s,D as r,c as o,j as t,a as e,I as i,a6 as n,o as c}from"./chunks/framework.Bhh1y9_T.js";const T=JSON.parse('{"title":"文档说明","description":"","frontmatter":{},"headers":[],"relativePath":"guide/intro.md","filePath":"guide/intro.md"}'),d={name:"guide/intro.md"},p=n('文档说明 ⭐⭐⭐⭐⭐
相信你已经准备或正在使用 One-step-admin 进行开发工作了,在此之前,希望你可以去 Github 或者 Gitee(码云) 帮我点个 ⭐ ,这将是对我极大的鼓励。
',2),l=t("p",null,[e("如果你准备好了,那我们就"),t("a",{href:"/guide/ready.html"},"开始"),e("吧~")],-1);function _(m,h,g,u,b,f){const a=r("Badge");return c(),o("div",null,[p,t("p",null,[e("文档中标记 "),i(a,{type:"pro",text:"专业版"}),e(" 的地方,表示该功能仅提供于专业版使用,使用基础版的开发者可直接跳过阅读。")]),l])}const v=s(d,[["render",_]]);export{T as __pageData,v as default};
diff --git a/assets/guide_intro.md.sO_pu713.lean.js b/assets/guide_intro.md.sO_pu713.lean.js
new file mode 100644
index 00000000..b9980243
--- /dev/null
+++ b/assets/guide_intro.md.sO_pu713.lean.js
@@ -0,0 +1 @@
+import{_ as s,D as r,c as o,j as t,a as e,I as i,a6 as n,o as c}from"./chunks/framework.Bhh1y9_T.js";const T=JSON.parse('{"title":"文档说明","description":"","frontmatter":{},"headers":[],"relativePath":"guide/intro.md","filePath":"guide/intro.md"}'),d={name:"guide/intro.md"},p=n("",2),l=t("p",null,[e("如果你准备好了,那我们就"),t("a",{href:"/guide/ready.html"},"开始"),e("吧~")],-1);function _(m,h,g,u,b,f){const a=r("Badge");return c(),o("div",null,[p,t("p",null,[e("文档中标记 "),i(a,{type:"pro",text:"专业版"}),e(" 的地方,表示该功能仅提供于专业版使用,使用基础版的开发者可直接跳过阅读。")]),l])}const v=s(d,[["render",_]]);export{T as __pageData,v as default};
diff --git a/assets/guide_layout.md.CtDYcY0J.js b/assets/guide_layout.md.CtDYcY0J.js
new file mode 100644
index 00000000..40f6a130
--- /dev/null
+++ b/assets/guide_layout.md.CtDYcY0J.js
@@ -0,0 +1,29 @@
+import{_ as e,D as h,c as l,j as s,a as i,I as t,a6 as n,o as p}from"./chunks/framework.Bhh1y9_T.js";const k="/menu-mode-head.png",d="/menu-mode-side.png",g="/menu-mode-single.png",o="/menu-mode-only-side.png",r="/menu-mode-only-head.png",E="/menu-mode-side-panel.png",c="/menu-mode-head-panel.png",H=JSON.parse('{"title":"布局","description":"","frontmatter":{},"headers":[],"relativePath":"guide/layout.md","filePath":"guide/layout.md"}'),y={name:"guide/layout.md"},_=s("h1",{id:"布局",tabindex:"-1"},[i("布局 "),s("a",{class:"header-anchor",href:"#布局","aria-label":'Permalink to "布局"'},"")],-1),m=s("p",null,[i("通过 7 种导航栏模式和 4 种页宽模式的组合搭配,可实现 28 种布局结构,再搭配默认提供的 6 款主题,"),s("strong",null,"即可实现上百种界面风格"),i("。")],-1),u=s("h2",{id:"导航栏模式",tabindex:"-1"},[i("导航栏模式 "),s("a",{class:"header-anchor",href:"#导航栏模式","aria-label":'Permalink to "导航栏模式"'},"")],-1),F=s("p",null,"在应用配置里进行设置,可实现 7 种导航栏模式:",-1),b=s("li",null,"顶部模式",-1),C=s("li",null,"侧边栏模式(含主导航)",-1),v=s("li",null,"侧边栏模式(无主导航)",-1),A=n('顶部模式
ts const globalSettings : Settings . all = {
+ menu: {
+ mode: 'head' , // v4.5.0 之前版本为 menuMode
+ },
+}
侧边栏模式(含主导航)
ts const globalSettings : Settings . all = {
+ menu: {
+ mode: 'side' , // v4.5.0 之前版本为 menuMode
+ },
+}
侧边栏模式(无主导航)
ts const globalSettings : Settings . all = {
+ menu: {
+ mode: 'single' , // v4.5.0 之前版本为 menuMode
+ },
+}
`,9),x={id:"侧边栏精简模式",tabindex:"-1"},B=s("a",{class:"header-anchor",href:"#侧边栏精简模式","aria-label":'Permalink to "侧边栏精简模式 "'},"",-1),D=n('
ts const globalSettings : Settings . all = {
+ menu: {
+ mode: 'only-side' , // v4.5.0 之前版本为 menuMode
+ },
+}
`,2),S={id:"顶部精简模式",tabindex:"-1"},T=s("a",{class:"header-anchor",href:"#顶部精简模式","aria-label":'Permalink to "顶部精简模式 "'},"",-1),P=n('
ts const globalSettings : Settings . all = {
+ menu: {
+ mode: 'only-head' , // v4.5.0 之前版本为 menuMode
+ },
+}
`,2),f={id:"侧边栏面板模式",tabindex:"-1"},V=s("a",{class:"header-anchor",href:"#侧边栏面板模式","aria-label":'Permalink to "侧边栏面板模式 "'},"",-1),I=n('
ts const globalSettings : Settings . all = {
+ menu: {
+ mode: 'side-panel' ,
+ },
+}
`,2),N={id:"顶部面板模式",tabindex:"-1"},q=s("a",{class:"header-anchor",href:"#顶部面板模式","aria-label":'Permalink to "顶部面板模式 "'},"",-1),z=n('
ts const globalSettings : Settings . all = {
+ menu: {
+ mode: 'head-panel' ,
+ },
+}
变量 布局相关的变量存放在 /src/assets/styles/globals.css
文件中(注意看注释),均为 CSS 变量。
`,4);function M(R,$,j,J,O,w){const a=h("Badge");return p(),l("div",null,[_,m,u,F,s("ul",null,[b,C,v,s("li",null,[i("侧边栏精简模式 "),t(a,{type:"pro",text:"专业版"})]),s("li",null,[i("顶部精简模式 "),t(a,{type:"pro",text:"专业版"})]),s("li",null,[i("侧边栏面板模式 "),t(a,{type:"pro",text:"专业版"}),i(),t(a,{type:"tip",text:"v4.5.0 新增"})]),s("li",null,[i("顶部面板模式 "),t(a,{type:"pro",text:"专业版"}),i(),t(a,{type:"tip",text:"v4.5.0 新增"})])]),A,s("h3",x,[i("侧边栏精简模式 "),t(a,{type:"pro",text:"专业版"}),i(),B]),D,s("h3",S,[i("顶部精简模式 "),t(a,{type:"pro",text:"专业版"}),i(),T]),P,s("h3",f,[i("侧边栏面板模式 "),t(a,{type:"pro",text:"专业版"}),i(),t(a,{type:"tip",text:"v4.5.0 新增"}),i(),V]),I,s("h3",N,[i("顶部面板模式 "),t(a,{type:"pro",text:"专业版"}),i(),t(a,{type:"tip",text:"v4.5.0 新增"}),i(),q]),z])}const K=e(y,[["render",M]]);export{H as __pageData,K as default};
diff --git a/assets/guide_layout.md.CtDYcY0J.lean.js b/assets/guide_layout.md.CtDYcY0J.lean.js
new file mode 100644
index 00000000..0f70df24
--- /dev/null
+++ b/assets/guide_layout.md.CtDYcY0J.lean.js
@@ -0,0 +1 @@
+import{_ as e,D as h,c as l,j as s,a as i,I as t,a6 as n,o as p}from"./chunks/framework.Bhh1y9_T.js";const k="/menu-mode-head.png",d="/menu-mode-side.png",g="/menu-mode-single.png",o="/menu-mode-only-side.png",r="/menu-mode-only-head.png",E="/menu-mode-side-panel.png",c="/menu-mode-head-panel.png",H=JSON.parse('{"title":"布局","description":"","frontmatter":{},"headers":[],"relativePath":"guide/layout.md","filePath":"guide/layout.md"}'),y={name:"guide/layout.md"},_=s("h1",{id:"布局",tabindex:"-1"},[i("布局 "),s("a",{class:"header-anchor",href:"#布局","aria-label":'Permalink to "布局"'},"")],-1),m=s("p",null,[i("通过 7 种导航栏模式和 4 种页宽模式的组合搭配,可实现 28 种布局结构,再搭配默认提供的 6 款主题,"),s("strong",null,"即可实现上百种界面风格"),i("。")],-1),u=s("h2",{id:"导航栏模式",tabindex:"-1"},[i("导航栏模式 "),s("a",{class:"header-anchor",href:"#导航栏模式","aria-label":'Permalink to "导航栏模式"'},"")],-1),F=s("p",null,"在应用配置里进行设置,可实现 7 种导航栏模式:",-1),b=s("li",null,"顶部模式",-1),C=s("li",null,"侧边栏模式(含主导航)",-1),v=s("li",null,"侧边栏模式(无主导航)",-1),A=n("",9),x={id:"侧边栏精简模式",tabindex:"-1"},B=s("a",{class:"header-anchor",href:"#侧边栏精简模式","aria-label":'Permalink to "侧边栏精简模式 "'},"",-1),D=n("",2),S={id:"顶部精简模式",tabindex:"-1"},T=s("a",{class:"header-anchor",href:"#顶部精简模式","aria-label":'Permalink to "顶部精简模式 "'},"",-1),P=n("",2),f={id:"侧边栏面板模式",tabindex:"-1"},V=s("a",{class:"header-anchor",href:"#侧边栏面板模式","aria-label":'Permalink to "侧边栏面板模式 "'},"",-1),I=n("",2),N={id:"顶部面板模式",tabindex:"-1"},q=s("a",{class:"header-anchor",href:"#顶部面板模式","aria-label":'Permalink to "顶部面板模式 "'},"",-1),z=n("",4);function M(R,$,j,J,O,w){const a=h("Badge");return p(),l("div",null,[_,m,u,F,s("ul",null,[b,C,v,s("li",null,[i("侧边栏精简模式 "),t(a,{type:"pro",text:"专业版"})]),s("li",null,[i("顶部精简模式 "),t(a,{type:"pro",text:"专业版"})]),s("li",null,[i("侧边栏面板模式 "),t(a,{type:"pro",text:"专业版"}),i(),t(a,{type:"tip",text:"v4.5.0 新增"})]),s("li",null,[i("顶部面板模式 "),t(a,{type:"pro",text:"专业版"}),i(),t(a,{type:"tip",text:"v4.5.0 新增"})])]),A,s("h3",x,[i("侧边栏精简模式 "),t(a,{type:"pro",text:"专业版"}),i(),B]),D,s("h3",S,[i("顶部精简模式 "),t(a,{type:"pro",text:"专业版"}),i(),T]),P,s("h3",f,[i("侧边栏面板模式 "),t(a,{type:"pro",text:"专业版"}),i(),t(a,{type:"tip",text:"v4.5.0 新增"}),i(),V]),I,s("h3",N,[i("顶部面板模式 "),t(a,{type:"pro",text:"专业版"}),i(),t(a,{type:"tip",text:"v4.5.0 新增"}),i(),q]),z])}const K=e(y,[["render",M]]);export{H as __pageData,K as default};
diff --git a/assets/guide_login.md.BgAQ9xap.js b/assets/guide_login.md.BgAQ9xap.js
new file mode 100644
index 00000000..5e188a1d
--- /dev/null
+++ b/assets/guide_login.md.BgAQ9xap.js
@@ -0,0 +1 @@
+import{_ as e,c as o,o as i,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const h=JSON.parse('{"title":"登录","description":"","frontmatter":{},"headers":[],"relativePath":"guide/login.md","filePath":"guide/login.md"}'),l={name:"guide/login.md"},a=t('登录 开发者通常在简单熟悉本框架后,涉及到的第一步业务开发就是修改登录功能,将其替换为自己的登录接口。
但在实践过程中,经常会遇到一些问题,比如:
替换真实接口后,无法正常登录 登录接口请求成功,但是无法跳转到后台主页 ... 针对这些问题你需要依次检查以下几点:
在 .env.development
里检查接口请求地址是否正确。 在 /src/api/index.ts
里修改响应拦截器里的代码,按照实际情况进行调整。例如什么状态下是请求成功,什么状态下是请求异常,并进行错误提示。 在 /src/api/modules/user.ts
里修改 login
函数,确保接口可以请求成功。 在 /src/store/modules/user.ts
里修改 isLogin
计算属性,这部分需要根据实际存储的用户信息去判断是否登录。 ',6),c=[a];function d(s,n,r,_,p,u){return i(),o("div",null,c)}const g=e(l,[["render",d]]);export{h as __pageData,g as default};
diff --git a/assets/guide_login.md.BgAQ9xap.lean.js b/assets/guide_login.md.BgAQ9xap.lean.js
new file mode 100644
index 00000000..01775172
--- /dev/null
+++ b/assets/guide_login.md.BgAQ9xap.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as o,o as i,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const h=JSON.parse('{"title":"登录","description":"","frontmatter":{},"headers":[],"relativePath":"guide/login.md","filePath":"guide/login.md"}'),l={name:"guide/login.md"},a=t("",6),c=[a];function d(s,n,r,_,p,u){return i(),o("div",null,c)}const g=e(l,[["render",d]]);export{h as __pageData,g as default};
diff --git a/assets/guide_menu.md.DjhhAq8f.js b/assets/guide_menu.md.DjhhAq8f.js
new file mode 100644
index 00000000..d2f042ff
--- /dev/null
+++ b/assets/guide_menu.md.DjhhAq8f.js
@@ -0,0 +1,33 @@
+import{_ as n,D as l,c as h,I as a,a as t,j as s,a6 as i,o as d}from"./chunks/framework.Bhh1y9_T.js";const N=JSON.parse('{"title":"导航","description":"","frontmatter":{},"headers":[],"relativePath":"guide/menu.md","filePath":"guide/menu.md"}'),p={name:"guide/menu.md"},r=i(`导航 项目导航配置存放在 /src/menu/modules/
目录下,每一个 ts 文件会被视为一个导航模块。
所有配置的导航模块均需要在 /src/menu/index.ts
文件里进行引入并放到主导航下。
基本配置 一级导航 一个导航模块包含以下结构:
ts const menus : Menu . recordRaw = {
+ title: '演示' ,
+ windowName: 'Example' ,
+}
+
+export default menus
注意事项
整个项目所有导航的 windowName
不能重复
多级导航 ts const menus : Menu . recordRaw = {
+ title: '演示' ,
+ children: [
+ {
+ title: '演示页面' ,
+ windowName: 'Example' ,
+ },
+ ],
+}
+
+export default menus
外链 只需要将 windowName
设置为需要跳转的 HTTP 地址即可。
ts const menus : Menu . recordRaw = {
+ title: '官网' ,
+ windowName: 'https://one-step-admin.hurui.me' ,
+}
+
+export default menus
主导航 主导航会将我们配置好的导航模块进行归类,在 /src/menu/index.ts
里进行设置。
ts const menu = [
+ {
+ title: '演示' ,
+ icon: 'sidebar-default' ,
+ children: [
+ WindowExample,
+ ],
+ },
+]
主导航只需设置 title
、icon
和 children
三个参数,其中 children
则是存放我们配置的导航模块数据。
导航配置 title 类型 是否必须 默认值 说明 string ✔️ / 导航展示的标题
`,20),k=s("a",{href:"./i18n.html"},"国际化",-1),o=i('windowName 类型 是否必须 默认值 说明 string ✔️ / 窗口组件名,确保唯一
',2),c={id:"windowwidth",tabindex:"-1"},g=s("a",{class:"header-anchor",href:"#windowwidth","aria-label":'Permalink to "windowWidth "'},"",-1),E=i('类型 是否必须 默认值 说明 string / number ✖️ / 窗口宽度,设置为数字时单位为 px
',1),y={id:"i18n",tabindex:"-1"},x=s("s",null,"i18n",-1),b=s("a",{class:"header-anchor",href:"#i18n","aria-label":'Permalink to "~~i18n~~ "'},"",-1),_=i('类型 是否必须 默认值 说明 string ✖️ / 标题国际化对应的 key 值
详细可阅读《国际化 》。
',2),u={id:"notitle",tabindex:"-1"},m=s("a",{class:"header-anchor",href:"#notitle","aria-label":'Permalink to "noTitle "'},"",-1),F=i('类型 是否必须 默认值 说明 boolean ✖️ false 是否显示窗口标题栏
icon 类型 是否必须 默认值 说明 string ✖️ / 导航中显示的图标
该项配置最终会通过 <svg-icon />
组件进行展示,意味着你可以使用自定义图标,也可使用 Iconify 提供的图标,详细可阅读《SVG 图标 》。
auth 类型 是否必须 默认值 说明 string / array ✖️ / 该路由访问权限,支持多个权限叠加,只要满足一个,即可进入
用户在登录时,会获取用户权限,根据权限去过滤并动态注册路由。所以没有权限的路由不会被注册,也不会在侧边栏导航里显示,详细可阅读《权限 - 路由权限 》。
',7),f={id:"badge",tabindex:"-1"},C=s("a",{class:"header-anchor",href:"#badge","aria-label":'Permalink to "badge "'},"",-1),v=i(`类型 是否必须 默认值 说明 boolean / number / string ✖️ / 导航标记
设置不同的类型值,展示效果也会不同。
boolean
展示形式为点,当值为 false 时隐藏number
展示形式为文本,当值小于等于 0 时隐藏string
展示形式为文本,当值为空时隐藏如果标记需要动态更新,请设置为箭头函数形式,并返回外部变量,例如搭配 pinia 一起使用。
ts badge : () => globalStore.number
params 类型 是否必须 默认值 说明 object ✖️ / 窗口外部传入参数
该属性通常不在导航里直接配置,而是通过调用全局 useWindow()
提供的 API ,在打开非导航窗口时动态传入窗口所需要的参数。
后端生成 在应用配置里开启:
ts const globalSettings : Settings . all = {
+ menu: {
+ baseOn: 'backend'
+ }
+}
开启后在 /src/api/modules/app.ts
文件里找到 menuList()
这个函数,并修改这个函数的请求地址,请求返回的数据就是导航数据,你可以在 /src/mock/app.ts
里查看 mock 数据。
开启后端生成后,导航权限有两种做法,第一种是返回全部的导航数据,让框架自行处理(推荐),第二种是后端直接返回用户具备访问权限的导航数据。
`,13);function T(A,w,B,P,D,q){const e=l("Badge");return d(),h("div",null,[r,a(e,{type:"tip",text:"v4.4.0"}),t(" 开始,"),a(e,{type:"pro",text:"专业版"}),t(" 支持设置 i18n 对应的 key 值,详细可阅读《"),k,t("》。"),o,s("h3",c,[t("windowWidth "),a(e,{type:"pro",text:"专业版"}),t(),a(e,{type:"tip",text:"v4.6.0 新增"}),t(),g]),E,s("h3",y,[x,t(),a(e,{type:"pro",text:"专业版"}),t(),a(e,{type:"warning",text:"v4.4.0 移除"}),t(),b]),_,s("h3",u,[t("noTitle "),a(e,{type:"pro",text:"专业版"}),t(),m]),F,s("h3",f,[t("badge "),a(e,{type:"pro",text:"专业版"}),t(),C]),v])}const V=n(p,[["render",T]]);export{N as __pageData,V as default};
diff --git a/assets/guide_menu.md.DjhhAq8f.lean.js b/assets/guide_menu.md.DjhhAq8f.lean.js
new file mode 100644
index 00000000..0b80df9d
--- /dev/null
+++ b/assets/guide_menu.md.DjhhAq8f.lean.js
@@ -0,0 +1 @@
+import{_ as n,D as l,c as h,I as a,a as t,j as s,a6 as i,o as d}from"./chunks/framework.Bhh1y9_T.js";const N=JSON.parse('{"title":"导航","description":"","frontmatter":{},"headers":[],"relativePath":"guide/menu.md","filePath":"guide/menu.md"}'),p={name:"guide/menu.md"},r=i("",20),k=s("a",{href:"./i18n.html"},"国际化",-1),o=i("",2),c={id:"windowwidth",tabindex:"-1"},g=s("a",{class:"header-anchor",href:"#windowwidth","aria-label":'Permalink to "windowWidth "'},"",-1),E=i("",1),y={id:"i18n",tabindex:"-1"},x=s("s",null,"i18n",-1),b=s("a",{class:"header-anchor",href:"#i18n","aria-label":'Permalink to "~~i18n~~ "'},"",-1),_=i("",2),u={id:"notitle",tabindex:"-1"},m=s("a",{class:"header-anchor",href:"#notitle","aria-label":'Permalink to "noTitle "'},"",-1),F=i("",7),f={id:"badge",tabindex:"-1"},C=s("a",{class:"header-anchor",href:"#badge","aria-label":'Permalink to "badge "'},"",-1),v=i("",13);function T(A,w,B,P,D,q){const e=l("Badge");return d(),h("div",null,[r,a(e,{type:"tip",text:"v4.4.0"}),t(" 开始,"),a(e,{type:"pro",text:"专业版"}),t(" 支持设置 i18n 对应的 key 值,详细可阅读《"),k,t("》。"),o,s("h3",c,[t("windowWidth "),a(e,{type:"pro",text:"专业版"}),t(),a(e,{type:"tip",text:"v4.6.0 新增"}),t(),g]),E,s("h3",y,[x,t(),a(e,{type:"pro",text:"专业版"}),t(),a(e,{type:"warning",text:"v4.4.0 移除"}),t(),b]),_,s("h3",u,[t("noTitle "),a(e,{type:"pro",text:"专业版"}),t(),m]),F,s("h3",f,[t("badge "),a(e,{type:"pro",text:"专业版"}),t(),C]),v])}const V=n(p,[["render",T]]);export{N as __pageData,V as default};
diff --git a/assets/guide_permission.md.Bi4TpiJ3.js b/assets/guide_permission.md.Bi4TpiJ3.js
new file mode 100644
index 00000000..72afa10f
--- /dev/null
+++ b/assets/guide_permission.md.Bi4TpiJ3.js
@@ -0,0 +1,44 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"权限","description":"","frontmatter":{},"headers":[],"relativePath":"guide/permission.md","filePath":"guide/permission.md"}'),n={name:"guide/permission.md"},h=t(`权限 首先需要在应用配置里开启权限功能。
ts const globalSettings : Settings . all = {
+ app: {
+ enablePermission: true ,
+ },
+}
然后在 /src/api/modules/user.ts
文件里找到 getPermissions
的方法,该方法用于登录成功后获取用户权限。在实际开发中,需要手动进行修改,框架默认通过 mock 模拟获取用户权限。
在演示源码中,默认提供了两组权限,你可以在“权限验证”导航里切换帐号查看不同权限下的效果。如果使用的不是 admin
或 test
用户名登录,则在导航栏里看不到“权限验证”导航入口。
鉴权组件 页面中某个模块,当前用户具备该权限是如何显示,不具备该权限又是如何显示,针对这样的需求,框架提供了 <Auth>
和 <AuthAll>
组件,具体使用如下:
template <!-- 单权限验证 -->
+< Auth : value = "'department.create'" >
+ < p >你有该权限</ p >
+ < template # no-auth >
+ < p >你没有该权限</ p >
+ </ template >
+</ Auth >
+
+<!-- 多权限验证,用户只要具备其中任何一个权限,则验证通过 -->
+< Auth : value = " [ 'department.create' , 'department.edit' ] " >
+ < p >你有该权限</ p >
+ < template # no-auth >
+ < p >你没有该权限</ p >
+ </ template >
+</ Auth >
+
+<!-- 多权限验证,用户必须具备全部权限,才验证通过 -->
+< AuthAll : value = " [ 'department.create' , 'department.edit' ] " >
+ < p >你有该权限</ p >
+ < template # no-auth >
+ < p >你没有该权限</ p >
+ </ template >
+</ AuthAll >
鉴权指令 对于单个元素,也提供了 v-auth
和 v-auth-all
鉴权指令,使用上对比鉴权组件更方便,当然它能做的事情也更简单。
template <!-- 单权限验证 -->
+< button v-auth = "'department.create'" >新增部门</ button >
+
+<!-- 多权限验证,用户只要具备其中任何一个权限,则验证通过 -->
+< button v-auth = " [ 'department.create' , 'department.edit' ] " >新增部门</ button >
+
+<!-- 多权限验证,用户必须具备全部权限,才验证通过 -->
+< button v-auth-all = " [ 'department.create' , 'department.edit' ] " >新增部门</ button >
鉴权函数 鉴权组件和鉴权指令控制的是页面上的元素,而鉴权函数则更多是使用在业务流程代码里的权限判断。
ts import useAuth from '@/utils/composables/useAuth'
+const { auth , authAll } = useAuth ()
+
+// 单权限验证,返回 true 或 false
+auth ( 'department.create' )
+
+// 多权限验证,用户只要具备其中任何一个权限,则验证通过,返回 true 或 false
+auth ([ 'department.create' , 'department.edit' ])
+
+// 多权限验证,用户必须具备全部权限,才验证通过,返回 true 或 false
+authAll ([ 'department.create' , 'department.edit' ])
`,14),l=[h];function k(p,e,E,d,r,g){return a(),i("div",null,l)}const F=s(n,[["render",k]]);export{c as __pageData,F as default};
diff --git a/assets/guide_permission.md.Bi4TpiJ3.lean.js b/assets/guide_permission.md.Bi4TpiJ3.lean.js
new file mode 100644
index 00000000..7d34f69b
--- /dev/null
+++ b/assets/guide_permission.md.Bi4TpiJ3.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"权限","description":"","frontmatter":{},"headers":[],"relativePath":"guide/permission.md","filePath":"guide/permission.md"}'),n={name:"guide/permission.md"},h=t("",14),l=[h];function k(p,e,E,d,r,g){return a(),i("div",null,l)}const F=s(n,[["render",k]]);export{c as __pageData,F as default};
diff --git a/assets/guide_plop-module.md.DvVVYnkY.js b/assets/guide_plop-module.md.DvVVYnkY.js
new file mode 100644
index 00000000..b5a88cb0
--- /dev/null
+++ b/assets/guide_plop-module.md.DvVVYnkY.js
@@ -0,0 +1,56 @@
+import{_ as n,D as p,c as l,j as i,a as s,I as e,a6 as t,o as h}from"./chunks/framework.Bhh1y9_T.js";const k="/module1.gif",d="/module2.gif",v=JSON.parse('{"title":"标准模块","description":"","frontmatter":{},"headers":[],"relativePath":"guide/plop-module.md","filePath":"guide/plop-module.md"}'),E={name:"guide/plop-module.md"},r={id:"标准模块",tabindex:"-1"},o=i("a",{class:"header-anchor",href:"#标准模块","aria-label":'Permalink to "标准模块 "'},"",-1),c=t(`在《代码文件自动生成 - module 》里介绍了如何快速生成一个标准模块,这个标准模块是一个最基础的 CURD 模块,它包含列表页和编辑页,同时提供了搜索和删除的功能,并且同时也可以生成对应的 mock 文件,在这基础上可以更方便的进行业务扩展。
下面我就实际操作一遍,并介绍一下这个标准模块有哪些特性。
用法说明 ? 请选择需要创建的模式: module - 创建标准窗口
+? 请输入窗口组件名称 test window
+? 请输入模块中文名称 默认模块
+? 是否生成 Mock Yes
+√ ++ \\src\\views\\windows\\TestWindow\\index.vue
+√ ++ \\src\\views\\windows\\TestWindow\\components\\DetailForm\\index.vue
+√ ++ \\src\\views\\windows\\TestWindow\\components\\FormMode\\index.vue
+√ ++ \\src\\mock\\test-window.js
这里我已经通过命令在 /src/views/windows/
目录下创建好了一个 TestWindow 文件夹,并且也生成了 mock 数据。接下来需要去配置下导航,这样我们才可以在导航栏里访问到。
首先在 /src/menu/modules/
目录下新建一个 test.window.ts
文件,并在里面复制以下代码:
ts cosnt menus : Menu.recordRaw = {
+ title: '测试模块' ,
+ windowName: 'TestWindow'
+}
+
+export default menus
然后到 /src/router/routes.ts
文件里加上这个路由配置文件的引用。
ts import TestWindow from './modules/test.window'
+
+const menu = [
+ ... ,
+ {
+ title: '页面' ,
+ icon: 'ri-pages-line' ,
+ children: [
+ ... PagesExample,
+ TestWindow,
+ ],
+ },
+ ...
+]
这时候就可以通过导航栏访问到我们的窗口了,我们的一个演示模块也就初步创建好了。
特性介绍 功能部分的介绍主要还是要看代码,先从列表页 index.vue
开始。
最先看到的是这句文件导入代码,因为几乎每个列表页都需要翻页功能,所以把翻页相关的东西都存放在 /src/utils/composables/pagination/index.ts
方便复用。
ts import usePagination from '@/utils/composables/usePagination'
+
+const { pagination , getParams , onSizeChange , onCurrentChange , onSortChange } = usePagination ()
接着在 data
里存放的是标准模块提供的一些配置项和必要数据参数字段。
ts const data = ref ({
+ loading: false ,
+ /**
+ * 详情展示模式
+ * dialog 对话框
+ * drawer 抽屉
+ */
+ formMode: 'dialog' ,
+ // 详情
+ formModeProps: {
+ visible: false ,
+ id: '' ,
+ },
+ // 搜索
+ search: {
+ account: '' ,
+ name: '' ,
+ mobile: '' ,
+ sex: '' ,
+ },
+ searchMore: false ,
+ // 批量操作
+ batch: {
+ enable: true ,
+ selectionDataList: [],
+ },
+ // 列表数据
+ dataList: [],
+})
标准模块提供了 2 种详情展示模式,默认是弹窗的方式,你可以修改 formMode: 'drawer'
开启抽屉模式,保存后效果如下:
再往下就是需要你修改或编写业务代码的部分,这里就不继续展开了。
详情页的代码就不多介绍了,相对比较简单,可自行阅读理解。其中表单部分单独封装成组件存放在 /src/views/windows/[模块文件夹]/components/DetailForm/index.vue
里了,同样你在 components/
文件夹下还能看到另外一个 FormMode
的文件夹,这样的用意是让表单可以复用,可以通过弹窗或抽屉的形式打开详情页 。
可能有人会有疑问,为什么不在生成文件的时候直接让我选择用哪种形式,这样生成出来就是哪种,而是在生成好的代码文件里再进行配置?
这样设计的目的主要有三点:
合理使用 。关于表单具体使用哪种展示模式比较好,我们的建议是,当表单与当前列表页关联性较强,内容少则使用弹窗,内容多则使用抽屉;而当表单与当前列表页关联性较弱,且内容多,可以使用新建窗口的形式,让新窗口进行承载。方便后期维护 。考虑到需求会变,可能一开始是一个很简单的表单,后期需求一点点增加,变成了一个庞大的表单,这时候就要从弹窗改成抽屉的形式,反之也可能是从抽屉改成弹窗的形式,处理起来都很麻烦。所以方便后期维护,这部分是有意而为之,做成了 2 种形式共存,通过配置可一键切换。跨窗口的组件调用 。第一点里有提到,如果既不想使用弹窗,也不想使用抽屉,你还可以使用新窗口的形式进行处理,这时候由于表单部分已抽象成组件,所以即便是在新窗口里,也可以直接调用该组件,从而无需编写重复代码。当然标准模块也只是框架提供的一个标准,你可以沿用,也可以根据自己的需求指定一套标准,毕竟最终目的都是提高开发效率,同时也确保多人协作开发的时候有个统一标准,不会出现每个人做出来的模块风格都不一样。
',26);function g(y,F,m,u,C,D){const a=p("Badge");return h(),l("div",null,[i("h1",r,[s("标准模块 "),e(a,{type:"pro",text:"专业版"}),s(),o]),c])}const A=n(E,[["render",g]]);export{v as __pageData,A as default};
diff --git a/assets/guide_plop-module.md.DvVVYnkY.lean.js b/assets/guide_plop-module.md.DvVVYnkY.lean.js
new file mode 100644
index 00000000..6626f161
--- /dev/null
+++ b/assets/guide_plop-module.md.DvVVYnkY.lean.js
@@ -0,0 +1 @@
+import{_ as n,D as p,c as l,j as i,a as s,I as e,a6 as t,o as h}from"./chunks/framework.Bhh1y9_T.js";const k="/module1.gif",d="/module2.gif",v=JSON.parse('{"title":"标准模块","description":"","frontmatter":{},"headers":[],"relativePath":"guide/plop-module.md","filePath":"guide/plop-module.md"}'),E={name:"guide/plop-module.md"},r={id:"标准模块",tabindex:"-1"},o=i("a",{class:"header-anchor",href:"#标准模块","aria-label":'Permalink to "标准模块 "'},"",-1),c=t("",26);function g(y,F,m,u,C,D){const a=p("Badge");return h(),l("div",null,[i("h1",r,[s("标准模块 "),e(a,{type:"pro",text:"专业版"}),s(),o]),c])}const A=n(E,[["render",g]]);export{v as __pageData,A as default};
diff --git a/assets/guide_plop.md.B0BZJ5As.js b/assets/guide_plop.md.B0BZJ5As.js
new file mode 100644
index 00000000..2ceb94ff
--- /dev/null
+++ b/assets/guide_plop.md.B0BZJ5As.js
@@ -0,0 +1 @@
+import{_ as l,D as p,c as s,j as e,a as o,I as a,a6 as c,o as n}from"./chunks/framework.Bhh1y9_T.js";const d="/plop-page.gif",r="/plop-component.gif",i="/plop-store.gif",_="/plop-mock.gif",m="/plop-module.gif",$=JSON.parse('{"title":"代码文件自动生成","description":"","frontmatter":{},"headers":[],"relativePath":"guide/plop.md","filePath":"guide/plop.md"}'),h={name:"guide/plop.md"},u=c('代码文件自动生成 INFO
该功能基于 plop 实现,在扩展新的模式前,请先详细阅读 plop 官方文档。
开发过程中,避免不了手动去频繁创建页面、组件等文件,并且还要在文件里写一些必要的代码,是不是觉得很麻烦?现在你可以用更简洁的方式来处理这一切。
框架默认提供了 5 种模式,通过 pnpm run new
指令可以自行选择。
',4),g=e("li",null,[e("code",null,"page"),o(" 页面文件")],-1),f=e("li",null,[e("code",null,"component"),o(" 组件文件")],-1),k=e("li",null,[e("code",null,"store"),o(" pinia 全局状态文件")],-1),b=e("li",null,[e("code",null,"mock"),o(" mock 文件")],-1),x=e("code",null,"module",-1),T=c('除了框架提供的 5 种模式,你还可以自定义新的模式,其原理就是通过预设模板,按照特定规则创建文件或者文件夹。
预设模板文件存放在 /plop-templates/
目录下,并在 /plopfile.js
文件里进行引用,你可以参考现有 5 种模式的目录结构进行创建新的模板。
page
page 模式下,只能在 /src/views/
目录下选择指定的文件夹进行生成,生成的文件中,部分关键位置会被替换掉,例如 <page-header />
中的 title
会按照你输入的中文名称替换,页面的 name
会根据当前文件目录和文件名自动生成,确保唯一。
component
component 模式可以选择生成的是公共组件还是局部组件,公共组件生成目录为 /src/components/
,局部组件则在 /src/views/
目录下选择指定的文件夹进行生成。
store
store 模式则会在 /src/store/modules/
目录下生成一个空模板
mock
mock 模式则会在 /src/mock/
目录下生成一个标准 CURD 的 mock 数据
',14),P={id:"module",tabindex:"-1"},q=e("a",{class:"header-anchor",href:"#module","aria-label":'Permalink to "module "'},"",-1),N=e("p",null,[e("img",{src:m,alt:"","data-zoomable":""})],-1),S=e("p",null,"module 模式是一个标准模块模板,会在指定目录下生成模块文件夹,并且包含列表页、编辑(详情)页,以及相关局部组件。",-1),V=e("p",null,[o("这块部分详细介绍请阅读《"),e("a",{href:"./plop-module.html"},"标准模块"),o("》。")],-1);function v(w,A,B,C,I,z){const t=p("Badge");return n(),s("div",null,[u,e("ul",null,[g,f,k,b,e("li",null,[x,o(" 页面模块文件 "),a(t,{type:"pro",text:"专业版"})])]),T,e("h2",P,[o("module "),a(t,{type:"pro",text:"专业版"}),o(),q]),N,S,V])}const j=l(h,[["render",v]]);export{$ as __pageData,j as default};
diff --git a/assets/guide_plop.md.B0BZJ5As.lean.js b/assets/guide_plop.md.B0BZJ5As.lean.js
new file mode 100644
index 00000000..5875aba3
--- /dev/null
+++ b/assets/guide_plop.md.B0BZJ5As.lean.js
@@ -0,0 +1 @@
+import{_ as l,D as p,c as s,j as e,a as o,I as a,a6 as c,o as n}from"./chunks/framework.Bhh1y9_T.js";const d="/plop-page.gif",r="/plop-component.gif",i="/plop-store.gif",_="/plop-mock.gif",m="/plop-module.gif",$=JSON.parse('{"title":"代码文件自动生成","description":"","frontmatter":{},"headers":[],"relativePath":"guide/plop.md","filePath":"guide/plop.md"}'),h={name:"guide/plop.md"},u=c("",4),g=e("li",null,[e("code",null,"page"),o(" 页面文件")],-1),f=e("li",null,[e("code",null,"component"),o(" 组件文件")],-1),k=e("li",null,[e("code",null,"store"),o(" pinia 全局状态文件")],-1),b=e("li",null,[e("code",null,"mock"),o(" mock 文件")],-1),x=e("code",null,"module",-1),T=c("",14),P={id:"module",tabindex:"-1"},q=e("a",{class:"header-anchor",href:"#module","aria-label":'Permalink to "module "'},"",-1),N=e("p",null,[e("img",{src:m,alt:"","data-zoomable":""})],-1),S=e("p",null,"module 模式是一个标准模块模板,会在指定目录下生成模块文件夹,并且包含列表页、编辑(详情)页,以及相关局部组件。",-1),V=e("p",null,[o("这块部分详细介绍请阅读《"),e("a",{href:"./plop-module.html"},"标准模块"),o("》。")],-1);function v(w,A,B,C,I,z){const t=p("Badge");return n(),s("div",null,[u,e("ul",null,[g,f,k,b,e("li",null,[x,o(" 页面模块文件 "),a(t,{type:"pro",text:"专业版"})])]),T,e("h2",P,[o("module "),a(t,{type:"pro",text:"专业版"}),o(),q]),N,S,V])}const j=l(h,[["render",v]]);export{$ as __pageData,j as default};
diff --git a/assets/guide_preferences.md.DClypLUq.js b/assets/guide_preferences.md.DClypLUq.js
new file mode 100644
index 00000000..1dee1f19
--- /dev/null
+++ b/assets/guide_preferences.md.DClypLUq.js
@@ -0,0 +1,16 @@
+import{_ as e,D as n,c as t,j as i,a as s,I as l,a6 as p,o as h}from"./chunks/framework.Bhh1y9_T.js";const k="/preferences.png",f=JSON.parse('{"title":"用户偏好设置","description":"","frontmatter":{},"headers":[],"relativePath":"guide/preferences.md","filePath":"guide/preferences.md"}'),r={name:"guide/preferences.md"},d={id:"用户偏好设置",tabindex:"-1"},c=i("a",{class:"header-anchor",href:"#用户偏好设置","aria-label":'Permalink to "用户偏好设置 "'},"",-1),o=p(`如果希望将框架的部分应用配置项暴露给用户,让用户可以自行设置,那么可以使用用户偏好设置功能。
开启 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ userPreferences: {
+ enable: true ,
+ },
+}
定制偏好设置内容 然后打开 /src/store/modules/user.ts
文件,你可以在文件里进一步定制用户偏好设置里的内容:
ts // 框架已将可提供给用户配置的选项提取出来,请勿新增其他选项,不需要的选项可以在这里注释掉
+const preferences = ref < Settings . all >({
+ app: {
+ colorScheme: settingsDefault.app.colorScheme,
+ theme: settingsDefault.app.theme,
+ },
+ ...
+})
如果仔细对比,会发现这里的配置项并不是框架的完整应用配置,这是因为有部分配置项并不适合暴露给用户,比如 userPreferences.enable
这个配置项就是用来控制是否开启用户偏好设置的,如果开启了用户偏好设置,那么这个配置项就不应该再暴露给用户了,否则用户就可以关闭用户偏好设置了,这样就没有意义了。再比如 menu.baseOn
这个配置项是用来控制导航数据来源的,修改它会直接影响代码的调整,所以也是不能暴露给用户的。
所以请勿新增这里的配置项,你需要做的就是将不需要暴露给用户的配置项注释掉即可。
处理请求 用户偏好设置默认存储在浏览器本地 localStorage 里,如果需要将数据存储到服务器,可以通过 userPreferences.storageTo
配置项来实现,具体配置如下:
ts const globalSettings : Settings . all = {
+ userPreferences: {
+ storageTo: 'server' ,
+ },
+}
然后到 /src/api/modules/user.ts
中找到 preferences()
和 preferencesEdit()
这两个函数,并分别修改这两个函数的请求地址。
建议
为减轻后端处理,数据会直接以 JSON 字符串进行存储,建议后端可以在用户表增加相关字段,并将字段类型设为 lonetext
。
`,15);function g(E,y,u,F,m,_){const a=n("Badge");return h(),t("div",null,[i("h1",d,[s("用户偏好设置 "),l(a,{type:"pro",text:"专业版"}),s(),c]),o])}const C=e(r,[["render",g]]);export{f as __pageData,C as default};
diff --git a/assets/guide_preferences.md.DClypLUq.lean.js b/assets/guide_preferences.md.DClypLUq.lean.js
new file mode 100644
index 00000000..34c4c2a1
--- /dev/null
+++ b/assets/guide_preferences.md.DClypLUq.lean.js
@@ -0,0 +1 @@
+import{_ as e,D as n,c as t,j as i,a as s,I as l,a6 as p,o as h}from"./chunks/framework.Bhh1y9_T.js";const k="/preferences.png",f=JSON.parse('{"title":"用户偏好设置","description":"","frontmatter":{},"headers":[],"relativePath":"guide/preferences.md","filePath":"guide/preferences.md"}'),r={name:"guide/preferences.md"},d={id:"用户偏好设置",tabindex:"-1"},c=i("a",{class:"header-anchor",href:"#用户偏好设置","aria-label":'Permalink to "用户偏好设置 "'},"",-1),o=p("",15);function g(E,y,u,F,m,_){const a=n("Badge");return h(),t("div",null,[i("h1",d,[s("用户偏好设置 "),l(a,{type:"pro",text:"专业版"}),s(),c]),o])}const C=e(r,[["render",g]]);export{f as __pageData,C as default};
diff --git a/assets/guide_q-a.md.DjjcUkzh.js b/assets/guide_q-a.md.DjjcUkzh.js
new file mode 100644
index 00000000..cbd29ea2
--- /dev/null
+++ b/assets/guide_q-a.md.DjjcUkzh.js
@@ -0,0 +1,25 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const n="/qa1.png",y=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q-a.md","filePath":"guide/q-a.md"}'),h={name:"guide/q-a.md"},p=t('常见问题 安装依赖时有警告
这是一个可以无视的警告,因为依赖已经安装成功了。
如果对这个问题感兴趣,可以浏览下这个 issue ,里面有给出一个忽略警告的方案,就是在 package.json
中添加:
json {
+ "pnpm" : {
+ "peerDependencyRules" : {
+ "ignoreMissing" : [
+ "postcss" ,
+ "rollup"
+ ]
+ }
+ }
+}
这样你下次再安装依赖的时候,就不会出现该警告了。
为什么本地开发环境首次载入很慢 主要是 Vite 的原因,具体可以阅读这篇文章了解《为什么有人说 vite 快,有人却说 vite 慢? 》。
Vite 4.3 显著提升了开发服务器的性能,具体可以阅读这篇文章了解《Vite 4.3 is out! 》,同时框架 v3.0.0 版本开始,vite 也升级到了 4.3 版本。
项目 URL 里的 # 号能不能去掉 这是因为路由默认使用的是 Hash 模式,你可以在 /src/router/index.ts
修改为 HTML5 模式,但需要注意,开启 HTML5 模式,服务器也需要做相应的配置调整,详细可阅读《Vue-router 不同的历史模式 》。
构建报错,提示内存溢出 构建时失败并在错误信息里提示 Reached heap limit Allocation failed - JavaScript heap out of memory
。
你可以执行 pnpm add cross-env -D
安装 cross-env 依赖,并在 package.json
里修改构建脚本指令:
json {
+ "scripts" : {
+ "build" : "vue-tsc --noEmit && cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build"
+ }
+}
其中 8192 表示内存空间大小。
直接修改构建产物的接口地址 如果你需要将构建产物部署到多台服务器,并且根据不同服务器配置不同的接口地址。这时候如果采用新增环境配置文件的方式,会存在一个弊端,就是不同环境需要分别进行构建。下面的方法可以让你直接修改构建产物的接口地址。
新增 /public/config.js
文件:
js window.globalConfig = {
+ API_BASEURL: '/' ,
+}
在 /index.html
中引入:
html < body >
+ ...
+ < script src = "/config.js" ></ script >
+ < script type = "module" src = "/src/main.ts" ></ script >
+</ body >
修改 /src/api/index.ts
,仅在生产环境时使用:
ts const api = axios. create ({
+ baseURL: ( import . meta .env. DEV && import . meta .env. VITE_OPEN_PROXY === 'true' ) ? '/proxy/' : import . meta .env. VITE_APP_API_BASEURL ,
+ baseURL: ( import . meta .env. DEV && import . meta .env. VITE_OPEN_PROXY === 'true' ) ? '/proxy/' : ( import . meta .env. DEV ? import . meta .env. VITE_APP_API_BASEURL : (window as any ).globalConfig. API_BASEURL ),
+ timeout: 1000 * 60 ,
+ responseType: 'json' ,
+})
之后你就可以在构建产物目录下直接修改 config.js
文件内的接口地址了,此方法不仅适用于接口地址,可以自行扩展。
不会 TypeScript 怎么办 不管个人还是团队、产品或者项目,从长远考虑我们都建议你学习 TypeScript,因为它是未来的趋势,而且大部分框架、库、插件都是用 TypeScript 开发的,足以证明它是构建一款成熟稳健产品的基石。
但考虑到实际情况,会各种客观原因存在,如果必须要用传统 JavaScript 进行开发,你可以在 tsconfig.json
里将 allowJs
设置为 true
即可,框架原有的 TypeScript 代码不会受到影响,并且你也可以在项目中使用 JavaScript 编写代码。
`,29),l=[p];function e(k,E,r,d,o,g){return a(),i("div",null,l)}const F=s(h,[["render",e]]);export{y as __pageData,F as default};
diff --git a/assets/guide_q-a.md.DjjcUkzh.lean.js b/assets/guide_q-a.md.DjjcUkzh.lean.js
new file mode 100644
index 00000000..04758eb6
--- /dev/null
+++ b/assets/guide_q-a.md.DjjcUkzh.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const n="/qa1.png",y=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q-a.md","filePath":"guide/q-a.md"}'),h={name:"guide/q-a.md"},p=t("",29),l=[p];function e(k,E,r,d,o,g){return a(),i("div",null,l)}const F=s(h,[["render",e]]);export{y as __pageData,F as default};
diff --git a/assets/guide_ready.md.CJkkBV7W.js b/assets/guide_ready.md.CJkkBV7W.js
new file mode 100644
index 00000000..b65c9d9e
--- /dev/null
+++ b/assets/guide_ready.md.CJkkBV7W.js
@@ -0,0 +1,7 @@
+import{_ as e,c as a,o as t,a6 as i}from"./chunks/framework.Bhh1y9_T.js";const s="/download.png",r="/vscode.png",b=JSON.parse('{"title":"准备工作","description":"","frontmatter":{},"headers":[],"relativePath":"guide/ready.md","filePath":"guide/ready.md"}'),l={name:"guide/ready.md"},n=i('准备工作 源码 阅读开发文档前,请确保手上已经有 One-step-admin 源码,因为文档中提及的内容,都是需要在本地项目中编写或修改代码并运行才能呈现的。如果还没有源码,可以通过下面两种方式获取:
基础版 说明
框架源码 不含示例代码,可直接用于实际开发演示源码 同演示站,在框架源码基础上,提供了大量示例代码到 Github Releases 页面下载最新版本的压缩包,如下图所示:
或者也可以从 Github/Gitee 上拉取源码,但需要注意的是,这种方式拉取的是最新的代码,而不是稳定版本,可能会存在一些问题,所以请谨慎使用。
专业版 专业版用户会邀请加入到私有组织,获取源码的方式和基础版一致,只是仓库地址不同。
如果你想获取专业版源码,可以点这里 去购买。
开发环境 使用本模板前,需要在本地依次安装好 Node.js , pnpm , Git 和 Visual Studio Code 。
注意
Node.js 需要使用 18+ / 20+ 版本。
然后在 Visual Studio Code 里安装好以下扩展:
在 Visual Studio Code 里打开源码的文件夹,右下角会自动提示需要安装的依赖,直接点击安装即可。
建议
以上为开发时必备扩展,以下则是作者推荐安装的扩展,安装它们将在一定程度上提升开发效率。
除此之外,还需要准备好开发使用的浏览器,推荐使用 Chrome ,并且在 Chrome 里安装好 Vue.js devtools 扩展 ,安装 Vue 官方提供的调试工具在一定程度上可以提升解决 bug 的效率,当然这个扩展开启后,可能在开发环境操作会有些许卡顿,建议不需要时候可以将扩展禁用。
不过由于安装 Vue.js devtools 需要访问 Chrome 应用商店,如果在大陆地区访问,需要自行准备相关可访问外网 的工具。如果不具备该条件,也可访问 Vue.js devtools 官网 了解本地构建或者下载支持 Edge/Firefox 的 Vue.js devtools 。
技术栈 了解并熟悉框架使用到的技术栈,能让你使用本框架更得心应手。
',25),o=[n];function h(p,d,c,g,m,k){return t(),a("div",null,o)}const f=e(l,[["render",h]]);export{b as __pageData,f as default};
diff --git a/assets/guide_ready.md.CJkkBV7W.lean.js b/assets/guide_ready.md.CJkkBV7W.lean.js
new file mode 100644
index 00000000..6f0f1af5
--- /dev/null
+++ b/assets/guide_ready.md.CJkkBV7W.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as a,o as t,a6 as i}from"./chunks/framework.Bhh1y9_T.js";const s="/download.png",r="/vscode.png",b=JSON.parse('{"title":"准备工作","description":"","frontmatter":{},"headers":[],"relativePath":"guide/ready.md","filePath":"guide/ready.md"}'),l={name:"guide/ready.md"},n=i("",25),o=[n];function h(p,d,c,g,m,k){return t(),a("div",null,o)}const f=e(l,[["render",h]]);export{b as __pageData,f as default};
diff --git a/assets/guide_replace-to-antd.md.BaHAuChd.js b/assets/guide_replace-to-antd.md.BaHAuChd.js
new file mode 100644
index 00000000..e084bf1f
--- /dev/null
+++ b/assets/guide_replace-to-antd.md.BaHAuChd.js
@@ -0,0 +1,93 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const t="/ui-antd.png",y=JSON.parse('{"title":"替换为 Ant Design Vue","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-antd.md","filePath":"guide/replace-to-antd.md"}'),l={name:"guide/replace-to-antd.md"},p=n(`替换为 Ant Design Vue 注意
v4.0 之前的版本不支持替换组件库,本文适用于 v4.0 及之后的版本。
由于框架默认使用的是 Element Plus 组件库,并且演示源码中大量示例也使用了 Element Plus,如果你需要使用 Ant Design Vue ,请拉取框架源码分支,或者到 Github Releases 页面下载框架源码压缩包。
专业版用户也同样,请到专业版仓库下载框架源码。
安装 sh # 安装依赖
+pnpm install
+
+# 安装 Ant Design Vue
+pnpm add ant-design-vue@4.x
代码调整 基础版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import Antd from 'ant-design-vue'
+import 'ant-design-vue/dist/reset.css'
+
+function install ( app : App ) {
+ app. use (Antd)
+}
+
+export default { install }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import antDesignVueLocaleZhCN from 'ant-design-vue/es/locale/zh_CN'
+import { theme } from 'ant-design-vue'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+</ script >
+
+< template >
+ < AConfigProvider : locale = " antDesignVueLocaleZhCN " : theme = " settingsStore.currentColorScheme === 'dark' ? { algorithm: [theme.darkAlgorithm] } : {} " >
+ < slot / >
+ </ AConfigProvider >
+</ template >
删除相关文件
.
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
专业版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import Antd from 'ant-design-vue'
+import 'ant-design-vue/dist/reset.css'
+
+import zhCN from 'ant-design-vue/es/locale/zh_CN'
+import zhTW from 'ant-design-vue/es/locale/zh_TW'
+import en from 'ant-design-vue/es/locale/en_US'
+
+function install ( app : App ) {
+ app. use (Antd)
+}
+
+// 此处的对象属性和 src/locales/index.ts 中的 messages 对象属性一一对应
+const locales : { [ key : string ] : any } = {
+ 'zh-cn' : zhCN,
+ 'zh-tw' : zhTW,
+ 'en' : en,
+}
+
+export default { install }
+export { locales }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import { theme } from 'ant-design-vue'
+import { locales } from './index'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+</ script >
+
+< template >
+ < AConfigProvider : locale = " locales[settingsStore.lang] " : theme = " settingsStore.currentColorScheme === 'dark' ? { algorithm: [theme.darkAlgorithm] } : {} " >
+ < slot / >
+ </ AConfigProvider >
+</ template >
删除相关文件
.
+├─ plop-templates
+│ └─ module // 标准模块模板基于 Element Plus 开发,需要删除
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ IconPicker
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
修改登录页 由于登录页使用了 Element Plus 组件,并且删除会导致框架无法正常使用,所以此处需要开发者自行修改或者重新制作登录页,或者也可以参考下方示例中已经修改好的登录页。
卸载 sh # 卸载 Element Plus
+pnpm remove element-plus
完成 至此,你已经将框架中的 Element Plus 组件库替换为 Ant Design Vue 组件库,并且可以开始使用 Ant Design Vue 进行业务开发了。
示例 如果对上述的步骤还有不清楚的地方,可以访问此仓库 查看示例源码,以及此链接 查看示例网站。
',18),h=[p];function e(k,r,d,E,g,o){return a(),i("div",null,h)}const F=s(l,[["render",e]]);export{y as __pageData,F as default};
diff --git a/assets/guide_replace-to-antd.md.BaHAuChd.lean.js b/assets/guide_replace-to-antd.md.BaHAuChd.lean.js
new file mode 100644
index 00000000..4c6334db
--- /dev/null
+++ b/assets/guide_replace-to-antd.md.BaHAuChd.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const t="/ui-antd.png",y=JSON.parse('{"title":"替换为 Ant Design Vue","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-antd.md","filePath":"guide/replace-to-antd.md"}'),l={name:"guide/replace-to-antd.md"},p=n("",18),h=[p];function e(k,r,d,E,g,o){return a(),i("div",null,h)}const F=s(l,[["render",e]]);export{y as __pageData,F as default};
diff --git a/assets/guide_replace-to-arco.md.DNOX62fS.js b/assets/guide_replace-to-arco.md.DNOX62fS.js
new file mode 100644
index 00000000..686b1892
--- /dev/null
+++ b/assets/guide_replace-to-arco.md.DNOX62fS.js
@@ -0,0 +1,142 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-arco.png",o=JSON.parse('{"title":"替换为 Arco Design Vue","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-arco.md","filePath":"guide/replace-to-arco.md"}'),p={name:"guide/replace-to-arco.md"},h=n(`替换为 Arco Design Vue 注意
v4.0 之前的版本不支持替换组件库,本文适用于 v4.0 及之后的版本。
由于框架默认使用的是 Element Plus 组件库,并且演示源码中大量示例也使用了 Element Plus,如果你需要使用 Arco Design Vue ,请拉取框架源码分支,或者到 Github Releases 页面下载框架源码压缩包。
专业版用户也同样,请到专业版仓库下载框架源码。
安装 sh # 安装依赖
+pnpm install
+
+# 安装 Arco Design Vue
+pnpm add @arco-design/web-vue -D
代码调整 基础版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global" ,
+ ...
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import ArcoVue from '@arco-design/web-vue'
+import '@arco-design/web-vue/dist/arco.css'
+
+function install ( app : App ) {
+ app. use (ArcoVue)
+}
+
+export default { install }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import zhCN from '@arco-design/web-vue/es/locale/lang/zh-cn'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+
+const prefersColorScheme = window. matchMedia ( '(prefers-color-scheme: dark)' )
+watch (() => settingsStore.settings.app.colorScheme, ( colorScheme ) => {
+ if (colorScheme === '' ) {
+ prefersColorScheme. addEventListener ( 'change' , updateTheme)
+ }
+ else {
+ prefersColorScheme. removeEventListener ( 'change' , updateTheme)
+ }
+ nextTick (() => {
+ updateTheme ()
+ })
+}, {
+ immediate: true ,
+})
+function updateTheme () {
+ switch (settingsStore.currentColorScheme) {
+ case 'light' :
+ document.body. removeAttribute ( 'arco-theme' )
+ break
+ case 'dark' :
+ document.body. setAttribute ( 'arco-theme' , 'dark' )
+ break
+ }
+}
+</ script >
+
+< template >
+ < AConfigProvider : locale = " zhCN " >
+ < slot / >
+ </ AConfigProvider >
+</ template >
删除相关文件
.
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
专业版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import ArcoVue from '@arco-design/web-vue'
+import '@arco-design/web-vue/dist/arco.css'
+
+import zhCN from '@arco-design/web-vue/es/locale/lang/zh-CN'
+import zhTW from '@arco-design/web-vue/es/locale/lang/zh-TW'
+import en from '@arco-design/web-vue/es/locale/lang/en-US'
+
+function install ( app : App ) {
+ app. use (ArcoVue)
+}
+
+// 此处的对象属性和 src/locales/index.ts 中的 messages 对象属性一一对应
+const locales : { [ key : string ] : any } = {
+ 'zh-cn' : zhCN,
+ 'zh-tw' : zhTW,
+ 'en' : en,
+}
+
+export default { install }
+export { locales }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import { locales } from './index'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+
+const prefersColorScheme = window. matchMedia ( '(prefers-color-scheme: dark)' )
+watch (() => settingsStore.settings.app.colorScheme, ( colorScheme ) => {
+ if (colorScheme === '' ) {
+ prefersColorScheme. addEventListener ( 'change' , updateTheme)
+ }
+ else {
+ prefersColorScheme. removeEventListener ( 'change' , updateTheme)
+ }
+ nextTick (() => {
+ updateTheme ()
+ })
+}, {
+ immediate: true ,
+})
+function updateTheme () {
+ switch (settingsStore.currentColorScheme) {
+ case 'light' :
+ document.body. removeAttribute ( 'arco-theme' )
+ break
+ case 'dark' :
+ document.body. setAttribute ( 'arco-theme' , 'dark' )
+ break
+ }
+}
+</ script >
+
+< template >
+ < AConfigProvider : locale = " locales[settingsStore.lang] " >
+ < slot / >
+ </ AConfigProvider >
+</ template >
删除相关文件
.
+├─ plop-templates
+│ └─ module // 标准模块模板基于 Element Plus 开发,需要删除
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ IconPicker
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
修改登录页 由于登录页使用了 Element Plus 组件,并且删除会导致框架无法正常使用,所以此处需要开发者自行修改或者重新制作登录页,或者也可以参考下方示例中已经修改好的登录页。
卸载 sh # 卸载 Element Plus
+pnpm remove element-plus
完成 至此,你已经将框架中的 Element Plus 组件库替换为 Arco Design Vue 组件库,并且可以开始使用 Arco Design Vue 进行业务开发了。
示例 如果对上述的步骤还有不清楚的地方,可以访问此仓库 查看示例源码,以及此链接 查看示例网站。
',18),t=[h];function k(e,E,r,d,g,c){return a(),i("div",null,t)}const F=s(p,[["render",k]]);export{o as __pageData,F as default};
diff --git a/assets/guide_replace-to-arco.md.DNOX62fS.lean.js b/assets/guide_replace-to-arco.md.DNOX62fS.lean.js
new file mode 100644
index 00000000..8c8afe25
--- /dev/null
+++ b/assets/guide_replace-to-arco.md.DNOX62fS.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-arco.png",o=JSON.parse('{"title":"替换为 Arco Design Vue","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-arco.md","filePath":"guide/replace-to-arco.md"}'),p={name:"guide/replace-to-arco.md"},h=n("",18),t=[h];function k(e,E,r,d,g,c){return a(),i("div",null,t)}const F=s(p,[["render",k]]);export{o as __pageData,F as default};
diff --git a/assets/guide_replace-to-idux.md.h73pcns6.js b/assets/guide_replace-to-idux.md.h73pcns6.js
new file mode 100644
index 00000000..48947dfa
--- /dev/null
+++ b/assets/guide_replace-to-idux.md.h73pcns6.js
@@ -0,0 +1,102 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-idux.png",y=JSON.parse('{"title":"替换为 iDux","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-idux.md","filePath":"guide/replace-to-idux.md"}'),p={name:"guide/replace-to-idux.md"},t=n(`替换为 iDux 注意
v4.0 之前的版本不支持替换组件库,本文适用于 v4.0 及之后的版本。
由于框架默认使用的是 Element Plus 组件库,并且演示源码中大量示例也使用了 Element Plus,如果你需要使用 iDux ,请拉取框架源码分支,或者到 Github Releases 页面下载框架源码压缩包。
专业版用户也同样,请到专业版仓库下载框架源码。
安装 sh # 安装依赖
+pnpm install
+
+# 安装 iDux
+pnpm add @idux/cdk @idux/components
代码调整 基础版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import IduxCdk from '@idux/cdk'
+import IduxComponents from '@idux/components'
+import { IDUX_ICON_DEPENDENCIES, addIconDefinitions } from '@idux/components/icon'
+import { createGlobalConfig } from '@idux/components/config'
+import { zhCN } from '@idux/components/locales'
+import '@idux/components/index.full.css'
+
+function install ( app : App ) {
+ addIconDefinitions ( IDUX_ICON_DEPENDENCIES )
+ app. use (IduxCdk). use (IduxComponents). use ( createGlobalConfig ({ locale: zhCN }))
+}
+
+export default { install }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+</ script >
+
+< template >
+ < IxThemeProvider : preset-theme = " settingsStore.currentColorScheme === 'dark' ? 'dark' : 'default'" >
+ < IxMessageProvider >
+ < slot / >
+ </ IxMessageProvider >
+ </ IxThemeProvider >
+</ template >
删除相关文件
.
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
专业版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import IduxCdk from '@idux/cdk'
+import IduxComponents from '@idux/components'
+import { IDUX_ICON_DEPENDENCIES, addIconDefinitions } from '@idux/components/icon'
+import { enUS, zhCN } from '@idux/components/locales'
+import '@idux/components/index.full.css'
+
+// 此处的对象属性和 src/locales/index.ts 中的 messages 对象属性一一对应
+const locales : { [ key : string ] : any } = {
+ 'zh-cn' : zhCN,
+ 'zh-tw' : zhCN,
+ 'en' : enUS,
+}
+
+function install ( app : App ) {
+ addIconDefinitions ( IDUX_ICON_DEPENDENCIES )
+ app. use (IduxCdk). use (IduxComponents)
+}
+
+export default { install }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import { useGlobalConfig } from '@idux/components/config'
+import { locales } from './index'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+
+const [, setLocale ] = useGlobalConfig ( 'locale' , locales[settingsStore.lang])
+watch (() => settingsStore.lang, val => setLocale (locales[settingsStore.lang]))
+</ script >
+
+< template >
+ < IxThemeProvider : preset-theme = " settingsStore.currentColorScheme === 'dark' ? 'dark' : 'default'" >
+ < IxMessageProvider >
+ < slot / >
+ </ IxMessageProvider >
+ </ IxThemeProvider >
+</ template >
删除相关文件
.
+├─ plop-templates
+│ └─ module // 标准模块模板基于 Element Plus 开发,需要删除
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ IconPicker
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
修改登录页 由于登录页使用了 Element Plus 组件,并且删除会导致框架无法正常使用,所以此处需要开发者自行修改或者重新制作登录页,或者也可以参考下方示例中已经修改好的登录页。
卸载 sh # 卸载 Element Plus
+pnpm remove element-plus
完成 至此,你已经将框架中的 Element Plus 组件库替换为 iDux 组件库,并且可以开始使用 iDux 进行业务开发了。
示例 如果对上述的步骤还有不清楚的地方,可以访问此仓库 查看示例源码,以及此链接 查看示例网站。
',18),h=[t];function k(e,d,E,r,g,o){return a(),i("div",null,h)}const F=s(p,[["render",k]]);export{y as __pageData,F as default};
diff --git a/assets/guide_replace-to-idux.md.h73pcns6.lean.js b/assets/guide_replace-to-idux.md.h73pcns6.lean.js
new file mode 100644
index 00000000..41b17cfa
--- /dev/null
+++ b/assets/guide_replace-to-idux.md.h73pcns6.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-idux.png",y=JSON.parse('{"title":"替换为 iDux","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-idux.md","filePath":"guide/replace-to-idux.md"}'),p={name:"guide/replace-to-idux.md"},t=n("",18),h=[t];function k(e,d,E,r,g,o){return a(),i("div",null,h)}const F=s(p,[["render",k]]);export{y as __pageData,F as default};
diff --git a/assets/guide_replace-to-naive.md.BFtvI_Qz.js b/assets/guide_replace-to-naive.md.BFtvI_Qz.js
new file mode 100644
index 00000000..c02008c7
--- /dev/null
+++ b/assets/guide_replace-to-naive.md.BFtvI_Qz.js
@@ -0,0 +1,93 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-naive.png",c=JSON.parse('{"title":"替换为 Naive UI","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-naive.md","filePath":"guide/replace-to-naive.md"}'),t={name:"guide/replace-to-naive.md"},h=n(`替换为 Naive UI 注意
v4.0 之前的版本不支持替换组件库,本文适用于 v4.0 及之后的版本。
由于框架默认使用的是 Element Plus 组件库,并且演示源码中大量示例也使用了 Element Plus,如果你需要使用 Naive UI ,请拉取框架源码分支,或者到 Github Releases 页面下载框架源码压缩包。
专业版用户也同样,请到专业版仓库下载框架源码。
安装 sh # 安装依赖
+pnpm install
+
+# 安装 Naive UI
+pnpm add naive-ui -D
代码调整 基础版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ "naive-ui/volar"
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import naive from 'naive-ui'
+
+function install ( app : App ) {
+ app. use (naive)
+}
+
+export default { install }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import { darkTheme, dateZhCN, zhCN } from 'naive-ui'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+</ script >
+
+< template >
+ < NConfigProvider : locale = " zhCN " : date-locale = " dateZhCN " : theme = " settingsStore.currentColorScheme === 'dark' ? darkTheme : undefined " style = " height : 100 % ; " >
+ < NMessageProvider >
+ < slot / >
+ < NGlobalStyle />
+ </ NMessageProvider >
+ </ NConfigProvider >
+</ template >
删除相关文件
.
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
专业版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ "naive-ui/volar"
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import naive, { dateEnUS, dateZhCN, dateZhTW, enUS, zhCN, zhTW } from 'naive-ui'
+
+function install ( app : App ) {
+ app. use (naive)
+}
+
+// 此处的对象属性和 src/locales/index.ts 中的 messages 对象属性一一对应
+const locales : { [ key : string ] : any } = {
+ 'zh-cn' : {
+ ui: zhCN,
+ date: dateZhCN,
+ },
+ 'zh-tw' : {
+ ui: zhTW,
+ date: dateZhTW,
+ },
+ 'en' : {
+ ui: enUS,
+ date: dateEnUS,
+ },
+}
+
+export default { install }
+export { locales }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import { darkTheme } from 'naive-ui'
+import { locales } from './index'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+</ script >
+
+< template >
+ < NConfigProvider : locale = " locales[settingsStore.lang].ui " : date-locale = " locales[settingsStore.lang].date " : theme = " settingsStore.currentColorScheme === 'dark' ? darkTheme : undefined " style = " height : 100 % ; " >
+ < NMessageProvider >
+ < slot / >
+ < NGlobalStyle />
+ </ NMessageProvider >
+ </ NConfigProvider >
+</ template >
修改登录页 由于登录页使用了 Element Plus 组件,并且删除会导致框架无法正常使用,所以此处需要开发者自行修改或者重新制作登录页,或者也可以参考下方示例中已经修改好的登录页。
卸载 sh # 卸载 Element Plus
+pnpm remove element-plus
完成 至此,你已经将框架中的 Element Plus 组件库替换为 Naive UI 组件库,并且可以开始使用 Naive UI 进行业务开发了。
示例 如果对上述的步骤还有不清楚的地方,可以访问此仓库 查看示例源码,以及此链接 查看示例网站。
',18),p=[h];function k(e,E,r,d,g,y){return a(),i("div",null,p)}const F=s(t,[["render",k]]);export{c as __pageData,F as default};
diff --git a/assets/guide_replace-to-naive.md.BFtvI_Qz.lean.js b/assets/guide_replace-to-naive.md.BFtvI_Qz.lean.js
new file mode 100644
index 00000000..bbf57be2
--- /dev/null
+++ b/assets/guide_replace-to-naive.md.BFtvI_Qz.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-naive.png",c=JSON.parse('{"title":"替换为 Naive UI","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-naive.md","filePath":"guide/replace-to-naive.md"}'),t={name:"guide/replace-to-naive.md"},h=n("",18),p=[h];function k(e,E,r,d,g,y){return a(),i("div",null,p)}const F=s(t,[["render",k]]);export{c as __pageData,F as default};
diff --git a/assets/guide_replace-to-tdesign.md.B7ZFdjJZ.js b/assets/guide_replace-to-tdesign.md.B7ZFdjJZ.js
new file mode 100644
index 00000000..f8e8936f
--- /dev/null
+++ b/assets/guide_replace-to-tdesign.md.B7ZFdjJZ.js
@@ -0,0 +1,161 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-tdesign.png",o=JSON.parse('{"title":"替换为 TDesign","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-tdesign.md","filePath":"guide/replace-to-tdesign.md"}'),p={name:"guide/replace-to-tdesign.md"},t=n(`替换为 TDesign 注意
v4.0 之前的版本不支持替换组件库,本文适用于 v4.0 及之后的版本。
由于框架默认使用的是 Element Plus 组件库,并且演示源码中大量示例也使用了 Element Plus,如果你需要使用 TDesign ,请拉取框架源码分支,或者到 Github Releases 页面下载框架源码压缩包。
专业版用户也同样,请到专业版仓库下载框架源码。
安装 sh # 安装依赖
+pnpm install
+
+# 安装 TDesign
+pnpm add tdesign-vue-next
代码调整 基础版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ ],
+ ...
+ },
+ ...
+ "include" : [
+ "src/**/*.ts" ,
+ "src/**/*.d.ts" ,
+ "src/**/*.tsx" ,
+ "src/**/*.vue"
+ "src/**/*.vue" ,
+ "node_modules/tdesign-vue-next/global.d.ts"
+ ]
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import TDesign from 'tdesign-vue-next'
+import 'tdesign-vue-next/es/style/index.css'
+
+function install ( app : App ) {
+ app. use (TDesign)
+}
+
+export default { install }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import { merge } from 'lodash-es'
+import zhCN from 'tdesign-vue-next/es/locale/zh_CN'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+
+const prefersColorScheme = window. matchMedia ( '(prefers-color-scheme: dark)' )
+watch (() => settingsStore.settings.app.colorScheme, ( colorScheme ) => {
+ if (colorScheme === '' ) {
+ prefersColorScheme. addEventListener ( 'change' , updateTheme)
+ }
+ else {
+ prefersColorScheme. removeEventListener ( 'change' , updateTheme)
+ }
+ nextTick (() => {
+ updateTheme ()
+ })
+}, {
+ immediate: true ,
+})
+function updateTheme () {
+ switch (settingsStore.currentColorScheme) {
+ case 'light' :
+ document.documentElement. removeAttribute ( 'theme-mode' )
+ break
+ case 'dark' :
+ document.documentElement. setAttribute ( 'theme-mode' , 'dark' )
+ break
+ }
+}
+</ script >
+
+< template >
+ < TConfigProvider : global-config = " merge (zhCN) " >
+ < slot / >
+ </ TConfigProvider >
+</ template >
删除相关文件
.
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
专业版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ ],
+ ...
+ },
+ ...
+ "include" : [
+ "src/**/*.ts" ,
+ "src/**/*.d.ts" ,
+ "src/**/*.tsx" ,
+ "src/**/*.vue"
+ "src/**/*.vue" ,
+ "node_modules/tdesign-vue-next/global.d.ts"
+ ]
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import TDesign from 'tdesign-vue-next'
+import 'tdesign-vue-next/es/style/index.css'
+
+import zhCN from 'tdesign-vue-next/es/locale/zh_CN'
+import zhTW from 'tdesign-vue-next/es/locale/zh_TW'
+import en from 'tdesign-vue-next/es/locale/en_US'
+
+function install ( app : App ) {
+ app. use (TDesign)
+}
+
+// 此处的对象属性和 src/locales/index.ts 中的 messages 对象属性一一对应
+const locales : { [ key : string ] : any } = {
+ 'zh-cn' : zhCN,
+ 'zh-tw' : zhTW,
+ 'en' : en,
+}
+
+export default { install }
+export { locales }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import { merge } from 'lodash-es'
+import { locales } from './index'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+
+const prefersColorScheme = window. matchMedia ( '(prefers-color-scheme: dark)' )
+watch (() => settingsStore.settings.app.colorScheme, ( colorScheme ) => {
+ if (colorScheme === '' ) {
+ prefersColorScheme. addEventListener ( 'change' , updateTheme)
+ }
+ else {
+ prefersColorScheme. removeEventListener ( 'change' , updateTheme)
+ }
+ nextTick (() => {
+ updateTheme ()
+ })
+}, {
+ immediate: true ,
+})
+function updateTheme () {
+ switch (settingsStore.currentColorScheme) {
+ case 'light' :
+ document.documentElement. removeAttribute ( 'theme-mode' )
+ break
+ case 'dark' :
+ document.documentElement. setAttribute ( 'theme-mode' , 'dark' )
+ break
+ }
+}
+</ script >
+
+< template >
+ < TConfigProvider : global-config = " merge (locales[settingsStore.lang]) " >
+ < slot / >
+ </ TConfigProvider >
+</ template >
删除相关文件
.
+├─ plop-templates
+│ └─ module // 标准模块模板基于 Element Plus 开发,需要删除
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ IconPicker
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
修改登录页 由于登录页使用了 Element Plus 组件,并且删除会导致框架无法正常使用,所以此处需要开发者自行修改或者重新制作登录页,或者也可以参考下方示例中已经修改好的登录页。
卸载 sh # 卸载 Element Plus
+pnpm remove element-plus
完成 至此,你已经将框架中的 Element Plus 组件库替换为 TDesign 组件库,并且可以开始使用 TDesign 进行业务开发了。
示例 如果对上述的步骤还有不清楚的地方,可以访问此仓库 查看示例源码,以及此链接 查看示例网站。
',18),h=[t];function k(e,E,r,d,g,y){return a(),i("div",null,h)}const F=s(p,[["render",k]]);export{o as __pageData,F as default};
diff --git a/assets/guide_replace-to-tdesign.md.B7ZFdjJZ.lean.js b/assets/guide_replace-to-tdesign.md.B7ZFdjJZ.lean.js
new file mode 100644
index 00000000..dba72e87
--- /dev/null
+++ b/assets/guide_replace-to-tdesign.md.B7ZFdjJZ.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-tdesign.png",o=JSON.parse('{"title":"替换为 TDesign","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-tdesign.md","filePath":"guide/replace-to-tdesign.md"}'),p={name:"guide/replace-to-tdesign.md"},t=n("",18),h=[t];function k(e,E,r,d,g,y){return a(),i("div",null,h)}const F=s(p,[["render",k]]);export{o as __pageData,F as default};
diff --git a/assets/guide_replace-to-vexip.md.fMhR5uan.js b/assets/guide_replace-to-vexip.md.fMhR5uan.js
new file mode 100644
index 00000000..1fb2f5e8
--- /dev/null
+++ b/assets/guide_replace-to-vexip.md.fMhR5uan.js
@@ -0,0 +1,90 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-vexip.png",y=JSON.parse('{"title":"替换为 Vexip UI","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-vexip.md","filePath":"guide/replace-to-vexip.md"}'),p={name:"guide/replace-to-vexip.md"},t=n(`替换为 Vexip UI 注意
v4.0 之前的版本不支持替换组件库,本文适用于 v4.0 及之后的版本。
由于框架默认使用的是 Element Plus 组件库,并且演示源码中大量示例也使用了 Element Plus,如果你需要使用 Vexip UI ,请拉取框架源码分支,或者到 Github Releases 页面下载框架源码压缩包。
专业版用户也同样,请到专业版仓库下载框架源码。
安装 sh # 安装依赖
+pnpm install
+
+# 安装 Vexip UI
+pnpm add vexip-ui
代码调整 基础版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import { install as vexipInstall } from 'vexip-ui'
+import 'vexip-ui/css/index.css'
+import 'vexip-ui/css/dark/index.css'
+
+function install ( app : App ) {
+ app. use (vexipInstall, {
+ prefix: 'vxp' ,
+ })
+}
+
+export default { install }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import { zhCNLocale } from 'vexip-ui'
+</ script >
+
+< template >
+ < VxpConfigProvider : locale = " zhCNLocale () " >
+ < slot / >
+ </ VxpConfigProvider >
+</ template >
删除相关文件
.
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
专业版 修改 /tsconfig.json
文件
json {
+ "compilerOptions" : {
+ ...
+ "types" : [
+ ...
+ "element-plus/global"
+ ],
+ ...
+ }
+}
整体修改 /src/ui-provider/index.ts
文件
ts import type { App } from 'vue'
+import { install as vexipInstall, zhCNLocale, zhTWLocale, enUSLocale } from 'vexip-ui'
+import 'vexip-ui/css/index.css'
+import 'vexip-ui/css/dark/index.css'
+
+function install ( app : App ) {
+ app. use (vexipInstall, {
+ prefix: 'vxp' ,
+ })
+}
+
+// 此处的对象属性和 src/locales/index.ts 中的 messages 对象属性一一对应
+const locales : { [ key : string ] : any } = {
+ 'zh-cn' : zhCNLocale (),
+ 'zh-tw' : zhTWLocale (),
+ 'en' : enUSLocale (),
+}
+
+export default { install }
+export { locales }
整体修改 /src/ui-provider/index.vue
文件
vue < script setup lang = "ts" >
+import { locales } from './index'
+import useSettingsStore from '@/store/modules/settings'
+
+const settingsStore = useSettingsStore ()
+</ script >
+
+< template >
+ < VxpConfigProvider : locale = " locales[settingsStore.lang] " >
+ < slot / >
+ </ VxpConfigProvider >
+</ template >
删除相关文件
.
+├─ plop-templates
+│ └─ module // 标准模块模板基于 Element Plus 开发,需要删除
+└─ src
+ └─ components // 下列扩展组件基于 Element Plus 二次封装,需要删除
+ ├─ FileUpload
+ ├─ IconPicker
+ ├─ ImagePreview
+ ├─ ImagesUpload
+ ├─ ImageUpload
+ └─ PcasCascader
修改登录页 由于登录页使用了 Element Plus 组件,并且删除会导致框架无法正常使用,所以此处需要开发者自行修改或者重新制作登录页,或者也可以参考下方示例中已经修改好的登录页。
卸载 sh # 卸载 Element Plus
+pnpm remove element-plus
完成 至此,你已经将框架中的 Element Plus 组件库替换为 Vexip UI 组件库,并且可以开始使用 Vexip UI 进行业务开发了。
示例 如果对上述的步骤还有不清楚的地方,可以访问此仓库 查看示例源码,以及此链接 查看示例网站。
',18),h=[t];function e(k,E,r,d,g,c){return a(),i("div",null,h)}const F=s(p,[["render",e]]);export{y as __pageData,F as default};
diff --git a/assets/guide_replace-to-vexip.md.fMhR5uan.lean.js b/assets/guide_replace-to-vexip.md.fMhR5uan.lean.js
new file mode 100644
index 00000000..d48c4192
--- /dev/null
+++ b/assets/guide_replace-to-vexip.md.fMhR5uan.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const l="/ui-vexip.png",y=JSON.parse('{"title":"替换为 Vexip UI","description":"","frontmatter":{},"headers":[],"relativePath":"guide/replace-to-vexip.md","filePath":"guide/replace-to-vexip.md"}'),p={name:"guide/replace-to-vexip.md"},t=n("",18),h=[t];function e(k,E,r,d,g,c){return a(),i("div",null,h)}const F=s(p,[["render",e]]);export{y as __pageData,F as default};
diff --git a/assets/guide_resources.md.lnq0yWPQ.js b/assets/guide_resources.md.lnq0yWPQ.js
new file mode 100644
index 00000000..c03ba909
--- /dev/null
+++ b/assets/guide_resources.md.lnq0yWPQ.js
@@ -0,0 +1,41 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const g=JSON.parse('{"title":"资源","description":"","frontmatter":{},"headers":[],"relativePath":"guide/resources.md","filePath":"guide/resources.md"}'),h={name:"guide/resources.md"},t=n(`资源 图片 全局公共 全局公共图片存放在 /src/assets/images/
目录下,可自行新建文件夹分类管理。
局部私有 局部私有图片建议采用就近原则,你可以在需要的模块文件夹下建立一个 images
文件夹,专门用于存放局部私有图片。
样式 全局公共 全局公共样式存放在 /src/assets/styles/
目录下,可自行新建文件,并在 /src/main.ts
中引入即可。
此目录下还有一个特殊目录,即 /src/assets/styles/resources/
,这是全局 SCSS 资源目录,你可以在该目录下编写变量、函数、混合等支持 SCSS 特性的代码。
局部私有 基于单文件组件规范,局部私有样式建议直接在 .vue
文件中编写,框架集成了 UnoCSS / PostCSS / SCSS 方案,可选择自己适合的方案。更多单文件组件 CSS 功能请参考这里 。
UnoCSS vue < template >
+ < div class = "flex flex-1 flex-col select-none text-center all:transition-400" >
+ < div class = "ma" >
+ < div class = "animate-bounce-alt animate-duration-1s animate-count-infinite text-5xl fw100" >
+ UnoCSS
+ </ div >
+ </ div >
+ </ div >
+</ template >
PostCSS 框架内置了 postcss-nested 插件,可实现接近于 SCSS 的写法和特性。
vue < style scoped >
+.phone {
+ &_ title {
+ width : 500 px ;
+ @ media ( max-width : 500 px ) {
+ width : auto ;
+ }
+ body .is_dark & {
+ color : white ;
+ }
+ }
+ img {
+ display : block ;
+ }
+}
+</ style >
SCSS vue < style lang = "scss" scoped >
+$width : 500 px ;
+
+.phone {
+ & _title {
+ width : $width ;
+ @media ( max-width : $width ) {
+ width : auto ;
+ }
+ body .is_dark & {
+ color : white ;
+ }
+ }
+ img {
+ display : block ;
+ }
+}
+</ style >
组件 全局公共 全局公共组件存放在 /src/components/
目录下,每个组件按文件夹进行区分。
每个组件的文件夹内至少保留一个文件名为 index.vue
的组件入口(可参考 SvgIcon
组件),文件夹名称即为组件名。
推荐使用 pnpm new
指令进行组件生成,详细可查看《代码文件自动生成 》。
局部私有 局部私有组件建议采用就近原则,你可以在需要的模块文件夹下建立一个 components
文件夹,专门用于存放局部私有组件。
`,27),l=[t];function p(e,k,E,r,d,o){return a(),i("div",null,l)}const y=s(h,[["render",p]]);export{g as __pageData,y as default};
diff --git a/assets/guide_resources.md.lnq0yWPQ.lean.js b/assets/guide_resources.md.lnq0yWPQ.lean.js
new file mode 100644
index 00000000..419cfd55
--- /dev/null
+++ b/assets/guide_resources.md.lnq0yWPQ.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.Bhh1y9_T.js";const g=JSON.parse('{"title":"资源","description":"","frontmatter":{},"headers":[],"relativePath":"guide/resources.md","filePath":"guide/resources.md"}'),h={name:"guide/resources.md"},t=n("",27),l=[t];function p(e,k,E,r,d,o){return a(),i("div",null,l)}const y=s(h,[["render",p]]);export{g as __pageData,y as default};
diff --git a/assets/guide_router.md.Ct6hq6g7.js b/assets/guide_router.md.Ct6hq6g7.js
new file mode 100644
index 00000000..d90c1753
--- /dev/null
+++ b/assets/guide_router.md.Ct6hq6g7.js
@@ -0,0 +1,18 @@
+import{_ as n,D as e,c as t,j as s,a as i,I as h,a6 as l,o as p}from"./chunks/framework.Bhh1y9_T.js";const C=JSON.parse('{"title":"路由","description":"","frontmatter":{},"headers":[],"relativePath":"guide/router.md","filePath":"guide/router.md"}'),k={name:"guide/router.md"},d=s("h1",{id:"路由",tabindex:"-1"},[i("路由 "),s("a",{class:"header-anchor",href:"#路由","aria-label":'Permalink to "路由"'},"")],-1),r=s("p",null,[i("由于框架采用了全新的交互方式,使得路由在本框架中并非核心功能。通过打开 "),s("code",null,"/src/router/index.ts"),i(" 可以看到,框架一共定义了两个路由地址,一个是登录地址,另一个是登录成功后的地址。")],-1),E={id:"免登录页面",tabindex:"-1"},o=s("a",{class:"header-anchor",href:"#免登录页面","aria-label":'Permalink to "免登录页面 "'},"",-1),g=l(`基于设置的路由规则,新增的任何路由,都必须登录后才能访问。如果希望增加免登录的页面,也就是脱离框架本身,相对独立的页面,你可以按照下面的方式处理。
首先在 /src/router/index.ts
里 routes
配置免登录页面的路由,然后在 noLoginWhitelist
里增加一句路由完整地址。例如下面的例子,就增加了一个 /no/login/example
的免登录页面地址。
ts // 固定路由
+const routes = [
+ ... ,
+ {
+ path: '/no/login/example' ,
+ name: 'noLoginExample' ,
+ component : () => import ( '@/views/no-login-example.vue' ),
+ meta: {
+ title: '免登录页面' ,
+ },
+ },
+]
+
+// 免登录白名单
+const noLoginWhitelist = [
+ ... ,
+ '/no/login/example' ,
+]
`,3);function c(y,_,F,m,u,x){const a=e("Badge");return p(),t("div",null,[d,r,s("h2",E,[i("免登录页面 "),h(a,{type:"pro",text:"专业版"}),i(),o]),g])}const D=n(k,[["render",c]]);export{C as __pageData,D as default};
diff --git a/assets/guide_router.md.Ct6hq6g7.lean.js b/assets/guide_router.md.Ct6hq6g7.lean.js
new file mode 100644
index 00000000..a0202795
--- /dev/null
+++ b/assets/guide_router.md.Ct6hq6g7.lean.js
@@ -0,0 +1 @@
+import{_ as n,D as e,c as t,j as s,a as i,I as h,a6 as l,o as p}from"./chunks/framework.Bhh1y9_T.js";const C=JSON.parse('{"title":"路由","description":"","frontmatter":{},"headers":[],"relativePath":"guide/router.md","filePath":"guide/router.md"}'),k={name:"guide/router.md"},d=s("h1",{id:"路由",tabindex:"-1"},[i("路由 "),s("a",{class:"header-anchor",href:"#路由","aria-label":'Permalink to "路由"'},"")],-1),r=s("p",null,[i("由于框架采用了全新的交互方式,使得路由在本框架中并非核心功能。通过打开 "),s("code",null,"/src/router/index.ts"),i(" 可以看到,框架一共定义了两个路由地址,一个是登录地址,另一个是登录成功后的地址。")],-1),E={id:"免登录页面",tabindex:"-1"},o=s("a",{class:"header-anchor",href:"#免登录页面","aria-label":'Permalink to "免登录页面 "'},"",-1),g=l("",3);function c(y,_,F,m,u,x){const a=e("Badge");return p(),t("div",null,[d,r,s("h2",E,[i("免登录页面 "),h(a,{type:"pro",text:"专业版"}),i(),o]),g])}const D=n(k,[["render",c]]);export{C as __pageData,D as default};
diff --git a/assets/guide_rtl.md.Cb10KXRS.js b/assets/guide_rtl.md.Cb10KXRS.js
new file mode 100644
index 00000000..eaf9e019
--- /dev/null
+++ b/assets/guide_rtl.md.Cb10KXRS.js
@@ -0,0 +1,5 @@
+import{_ as e,D as n,c as l,j as t,a as s,I as i,a6 as p,o as h}from"./chunks/framework.Bhh1y9_T.js";const r="/rtl.png",x=JSON.parse('{"title":"RTL 模式","description":"","frontmatter":{},"headers":[],"relativePath":"guide/rtl.md","filePath":"guide/rtl.md"}'),d={name:"guide/rtl.md"},o={id:"rtl-模式",tabindex:"-1"},k=t("a",{class:"header-anchor",href:"#rtl-模式","aria-label":'Permalink to "RTL 模式 "'},"",-1),c=p(`使用 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ app: {
+ direction: 'rtl' ,
+ },
+}
效果如下:
',5);function g(_,E,y,m,u,F){const a=n("Badge");return h(),l("div",null,[t("h1",o,[s("RTL 模式 "),i(a,{type:"pro",text:"专业版"}),s(),i(a,{type:"tip",text:"v4.3.0 新增"}),s(),k]),c])}const B=e(d,[["render",g]]);export{x as __pageData,B as default};
diff --git a/assets/guide_rtl.md.Cb10KXRS.lean.js b/assets/guide_rtl.md.Cb10KXRS.lean.js
new file mode 100644
index 00000000..26123ac8
--- /dev/null
+++ b/assets/guide_rtl.md.Cb10KXRS.lean.js
@@ -0,0 +1 @@
+import{_ as e,D as n,c as l,j as t,a as s,I as i,a6 as p,o as h}from"./chunks/framework.Bhh1y9_T.js";const r="/rtl.png",x=JSON.parse('{"title":"RTL 模式","description":"","frontmatter":{},"headers":[],"relativePath":"guide/rtl.md","filePath":"guide/rtl.md"}'),d={name:"guide/rtl.md"},o={id:"rtl-模式",tabindex:"-1"},k=t("a",{class:"header-anchor",href:"#rtl-模式","aria-label":'Permalink to "RTL 模式 "'},"",-1),c=p("",5);function g(_,E,y,m,u,F){const a=n("Badge");return h(),l("div",null,[t("h1",o,[s("RTL 模式 "),i(a,{type:"pro",text:"专业版"}),s(),i(a,{type:"tip",text:"v4.3.0 新增"}),s(),k]),c])}const B=e(d,[["render",g]]);export{x as __pageData,B as default};
diff --git a/assets/guide_start.md.BIHeICwp.js b/assets/guide_start.md.BIHeICwp.js
new file mode 100644
index 00000000..0699b9f4
--- /dev/null
+++ b/assets/guide_start.md.BIHeICwp.js
@@ -0,0 +1,6 @@
+import{_ as s,c as a,o as e,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const _=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/start.md","filePath":"guide/start.md"}'),n={name:"guide/start.md"},i=t(`开始 做好准备工作后,请在项目根目录下依次执行以下命令:
sh # 安装依赖
+# 注意,必须使用 pnpm 安装依赖,请勿使用 npm 或 yarn 安装依赖
+pnpm install
+
+# 运行
+pnpm run dev
运行成功后,会自动访问页面,默认地址为 http://localhost:9000
报错
安装依赖时提示 404 ,或者安装结束后,运行时提示「 'vite' 不是内部或外部命令,也不是可运行的程序或批处理文件 」,都些都是依赖未安装成功导致的。可以尝试执行 pnpm config set registry https://registry.npmmirror.com/
切换为国内 npmmirror 源(也可以使用 nrm 一键切换源),然后删除根目录下 /node_modules
文件夹并重新安装依赖。
如果依旧无法运行(基本不太可能),可尝试删除根目录下 /node_modules
文件夹与 pnpm-lock.yaml
文件后,再删除 package.json
中 "preinstall": "npx only-allow pnpm"
这句脚本,最后使用 npm / yarn
进行安装依赖。但需要清楚一点,这样操作后,将无法与官方环境锁定的依赖包版本保持一致,可能会出现无法预知的问题,非必要情况下,请勿使用该方案。
`,5),p=[i];function o(l,c,r,d,h,k){return e(),a("div",null,p)}const g=s(n,[["render",o]]);export{_ as __pageData,g as default};
diff --git a/assets/guide_start.md.BIHeICwp.lean.js b/assets/guide_start.md.BIHeICwp.lean.js
new file mode 100644
index 00000000..9573a62a
--- /dev/null
+++ b/assets/guide_start.md.BIHeICwp.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as a,o as e,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const _=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/start.md","filePath":"guide/start.md"}'),n={name:"guide/start.md"},i=t("",5),p=[i];function o(l,c,r,d,h,k){return e(),a("div",null,p)}const g=s(n,[["render",o]]);export{_ as __pageData,g as default};
diff --git a/assets/guide_storage.md.D8cMKo8C.js b/assets/guide_storage.md.D8cMKo8C.js
new file mode 100644
index 00000000..49a0f83c
--- /dev/null
+++ b/assets/guide_storage.md.D8cMKo8C.js
@@ -0,0 +1,17 @@
+import{_ as e,D as t,c as n,j as a,a as s,I as l,a6 as p,o as h}from"./chunks/framework.Bhh1y9_T.js";const v=JSON.parse('{"title":"私有 Storage 数据","description":"","frontmatter":{},"headers":[],"relativePath":"guide/storage.md","filePath":"guide/storage.md"}'),k={name:"guide/storage.md"},o={id:"私有-storage-数据",tabindex:"-1"},r=a("a",{class:"header-anchor",href:"#私有-storage-数据","aria-label":'Permalink to "私有 Storage 数据 "'},"",-1),g=p(`由于 localStorage 和 sessionStorage 的同源策略,同一域名下的 storage 数据会共享。如果你恰好需要在同一域名下部署两套(及以上)系统,不可避免会出现 storage 数据冲突,框架提供了一个 storage 类来解决这个问题。
解决同源 storage 数据冲突的方式就是增加前缀区分,首先需要在应用配置里设置,这里需要你设置一个唯一且不重名的前缀。
ts const globalSettings : Settings . all = {
+ app: {
+ storagePrefix: 'osa_' ,
+ },
+}
然后在需要使用到 storage 的地方引入:
ts import storage from '@/utils/storage'
这个类封装了 setItem()
,getItem()
,removeItem()
,clear()
方法,同时还增加了一个 has()
方法用来判断对象是否存在:
ts // localStorage
+storage.local. has (key)
+storage.local. get (key)
+storage.local. set (key, value)
+storage.local. remove (key)
+storage.local. clear ()
+
+// sessionStorage
+storage.session. has (key)
+storage.session. get (key)
+storage.session. set (key, value)
+storage.session. remove (key)
+storage.session. clear ()
注意
由于 localStorage 有容量上限,一般为 5M ,如果一同域名下部署两套系统,意味着两套系统共享 5M 容量,所以不建议在同一域名部署太多套系统,避免出现 localStorage 不够用的情况。
`,8);function d(E,c,y,F,_,m){const i=t("Badge");return h(),n("div",null,[a("h1",o,[s("私有 Storage 数据 "),l(i,{type:"pro",text:"专业版"}),s(),r]),g])}const C=e(k,[["render",d]]);export{v as __pageData,C as default};
diff --git a/assets/guide_storage.md.D8cMKo8C.lean.js b/assets/guide_storage.md.D8cMKo8C.lean.js
new file mode 100644
index 00000000..541f46b8
--- /dev/null
+++ b/assets/guide_storage.md.D8cMKo8C.lean.js
@@ -0,0 +1 @@
+import{_ as e,D as t,c as n,j as a,a as s,I as l,a6 as p,o as h}from"./chunks/framework.Bhh1y9_T.js";const v=JSON.parse('{"title":"私有 Storage 数据","description":"","frontmatter":{},"headers":[],"relativePath":"guide/storage.md","filePath":"guide/storage.md"}'),k={name:"guide/storage.md"},o={id:"私有-storage-数据",tabindex:"-1"},r=a("a",{class:"header-anchor",href:"#私有-storage-数据","aria-label":'Permalink to "私有 Storage 数据 "'},"",-1),g=p("",8);function d(E,c,y,F,_,m){const i=t("Badge");return h(),n("div",null,[a("h1",o,[s("私有 Storage 数据 "),l(i,{type:"pro",text:"专业版"}),s(),r]),g])}const C=e(k,[["render",d]]);export{v as __pageData,C as default};
diff --git a/assets/guide_store.md.DBQc3j1R.js b/assets/guide_store.md.DBQc3j1R.js
new file mode 100644
index 00000000..e64f45b4
--- /dev/null
+++ b/assets/guide_store.md.DBQc3j1R.js
@@ -0,0 +1,16 @@
+import{_ as s,c as i,o as a,a6 as e}from"./chunks/framework.Bhh1y9_T.js";const g=JSON.parse('{"title":"全局状态管理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/store.md","filePath":"guide/store.md"}'),n={name:"guide/store.md"},t=e(`全局状态管理 TIP
Pinia 已正式成为 Vue.js 官方状态库,如果你对 Pinia 还不熟悉,除了通过 Pinia 官网学习外,我还收集了一些文字/视频的介绍,可以帮助你快速上手。
全局状态文件存放在 /src/store/modules/
目录下,请按模块进行区分。同时请保证文件名和文件内唯一ID保持一致,建议使用 pnpm new
指令进行创建。
例如新建一个 example.ts
的文件:
ts const useExampleStore = defineStore (
+ // 唯一ID
+ 'example' ,
+ () => {
+ const someThing = ref ( 0 )
+
+ return {
+ someThing,
+ }
+ },
+)
+
+export default useExampleStore
使用方法:
ts import useExampleStore from '@/store/modules/example'
+const exampleStore = useExampleStore ()
+
+exampleStore.someThing
`,7),l=[t];function p(h,k,r,d,o,c){return a(),i("div",null,l)}const y=s(n,[["render",p]]);export{g as __pageData,y as default};
diff --git a/assets/guide_store.md.DBQc3j1R.lean.js b/assets/guide_store.md.DBQc3j1R.lean.js
new file mode 100644
index 00000000..62b5d63e
--- /dev/null
+++ b/assets/guide_store.md.DBQc3j1R.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as e}from"./chunks/framework.Bhh1y9_T.js";const g=JSON.parse('{"title":"全局状态管理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/store.md","filePath":"guide/store.md"}'),n={name:"guide/store.md"},t=e("",7),l=[t];function p(h,k,r,d,o,c){return a(),i("div",null,l)}const y=s(n,[["render",p]]);export{g as __pageData,y as default};
diff --git a/assets/guide_svg-icon.md.Bx5n5Xsc.js b/assets/guide_svg-icon.md.Bx5n5Xsc.js
new file mode 100644
index 00000000..6ba52e80
--- /dev/null
+++ b/assets/guide_svg-icon.md.Bx5n5Xsc.js
@@ -0,0 +1,12 @@
+import{_ as t,D as n,c as e,j as s,a as i,I as l,a6 as p,o as h}from"./chunks/framework.Bhh1y9_T.js";const k="/icones1.png",o="/icones2.png",I=JSON.parse('{"title":"图标","description":"","frontmatter":{},"headers":[],"relativePath":"guide/svg-icon.md","filePath":"guide/svg-icon.md"}'),c={name:"guide/svg-icon.md"},r=p(`图标 框架提供了三种使用图标的方式,你可以根据自己的使用需求自行选择。
自定义图标 你可以去阿里巴巴矢量图标库 ,或者其它支持下载 SVG 图标文件的网站,又或者是设计师绘制的 SVG 文件,将准备好的 SVG 图标文件放到 /src/assets/icons/
目录下,然后在页面中就可以通过 SvgIcon 组件使用了,name 就是 svg 的文件名。
vue <!-- /src/assets/icons/example.svg -->
+< SvgIcon name = "example" />
Iconify 图标 介绍
Iconify 提供 100+ 套图标集,有 100,000+ 个图标可以免费使用。
除了可以在 Iconify 官网上查找搜需要的图标,你还可以在 Icônes 网站 上查找,这是一个基于 Iconify 的在线图标搜索网站,它比 Iconify 官网的操作更直观。
Unocss 方案 说明
Unocss 方案采用了 CSS 去处理图标的展示,框架大部分核心模块里采用的是这种方式,如果你对其中的技术细节感兴趣,可以阅读这篇 Unocss 作者的《聊聊纯 CSS 图标 》这篇文章。
框架已经做好了所有配置,使用方式也极为简单,你只需进入 Iconify 官网 上查找 Iconify 提供的所有图标,然后点击需要使用的图标,复制图标名称,在任意原生 HTML 标签上通过设置 class ,格式为 i-{集合名}:{图标名}
,例如:
vue < div class = "i-ep:arrow-right" />
+< i class = "i-ep:search" />
当然你同样也可以通过 SvgIcon 使用它。
vue < SvgIcon name = "i-ep:arrow-right" />
在使用 Unocss 图标时,需要注意以下两点:
图标字符串不支持拼接
vue <!-- 这样不会生效 -->
+< SvgIcon : name = "'i-ep' + ':search'" />
图标字符串不支持异步返回
vue <!-- 这样不会生效 -->
+<!-- 假设 name 是异步请求返回的数据,name 为 i-ep:search -->
+< SvgIcon : name = " name " />
如果确实有以上需求,你可以使用 Iconify 原生提供的方案。
Iconify 原生方案 说明
框架保留了 Iconify 官方提供的使用方式,格式为 {集合名}:{图标名}
。
vue < script setup >
+import { Icon } from '@iconify/vue'
+</ script >
+
+< template >
+ < Icon icon = "ep:arrow-right" />
+</ template >
当然这么使用并没有很方便,依旧还是需要手动导入一个 Icon 组件。如果你也觉得麻烦的话,那么你可以使用 SvgIcon 组件来展示,框架已经帮你做好的所有处理。
vue < SvgIcon name = "ep:arrow-right" />
离线/内网环境使用 说明
优先推荐使用 Unocss 方案,它不受网络环境限制,且相对于 Iconify 原生方案,它的性能更好。
如果你清楚自己需要使用 Iconify 原生方案,并且想要在离线/内网环境使用,需要做一些额外的配置。因为 Iconify 图标默认是提供在线的服务,即首次调用会触发一个外部网络请求去获取 svg 原始数据,并缓存在 localStorage 和 sessionStorage 中,这样下次再调用的时候,则直接从缓存中获取并展示。
框架提供了一份解决方案,在命令行执行 pnpm run generate:icons
,按照指引选择你需要用到的图标集(此处选择的图标集也是图标选择器里展示的图标集),并选择使用方式为离线。这样再在框架中使用这些图标,就不会触发外部网络请求了,但如果使用选择之外的图标,依旧还是会触发外部网络请求。
`,28),d={id:"图标选择器",tabindex:"-1"},g=s("a",{class:"header-anchor",href:"#图标选择器","aria-label":'Permalink to "图标选择器 "'},"",-1),E=s("p",null,"图标选择器是一个特殊的组件,它需要展示多套图标集内的所有图标。",-1),y=s("p",null,[i("通过执行 "),s("code",null,"pnpm run generate:icons"),i(" 命令,并按照指引完成操作后,图标选择器就会自动生效了。")],-1);function u(v,b,m,F,f,_){const a=n("Badge");return h(),e("div",null,[r,s("h2",d,[i("图标选择器 "),l(a,{type:"pro",text:"专业版"}),i(),g]),E,y])}const q=t(c,[["render",u]]);export{I as __pageData,q as default};
diff --git a/assets/guide_svg-icon.md.Bx5n5Xsc.lean.js b/assets/guide_svg-icon.md.Bx5n5Xsc.lean.js
new file mode 100644
index 00000000..f451d9ed
--- /dev/null
+++ b/assets/guide_svg-icon.md.Bx5n5Xsc.lean.js
@@ -0,0 +1 @@
+import{_ as t,D as n,c as e,j as s,a as i,I as l,a6 as p,o as h}from"./chunks/framework.Bhh1y9_T.js";const k="/icones1.png",o="/icones2.png",I=JSON.parse('{"title":"图标","description":"","frontmatter":{},"headers":[],"relativePath":"guide/svg-icon.md","filePath":"guide/svg-icon.md"}'),c={name:"guide/svg-icon.md"},r=p("",28),d={id:"图标选择器",tabindex:"-1"},g=s("a",{class:"header-anchor",href:"#图标选择器","aria-label":'Permalink to "图标选择器 "'},"",-1),E=s("p",null,"图标选择器是一个特殊的组件,它需要展示多套图标集内的所有图标。",-1),y=s("p",null,[i("通过执行 "),s("code",null,"pnpm run generate:icons"),i(" 命令,并按照指引完成操作后,图标选择器就会自动生效了。")],-1);function u(v,b,m,F,f,_){const a=n("Badge");return h(),e("div",null,[r,s("h2",d,[i("图标选择器 "),l(a,{type:"pro",text:"专业版"}),i(),g]),E,y])}const q=t(c,[["render",u]]);export{I as __pageData,q as default};
diff --git a/assets/guide_theme.md.BLSJm2vH.js b/assets/guide_theme.md.BLSJm2vH.js
new file mode 100644
index 00000000..e047a64b
--- /dev/null
+++ b/assets/guide_theme.md.BLSJm2vH.js
@@ -0,0 +1,237 @@
+import{_ as k,D as l,c as p,j as i,a as s,I as h,a6 as a,o as t}from"./chunks/framework.Bhh1y9_T.js";const e="/theme.gif",E="/menu-style.png",r="/menu-isrounded.png",P=JSON.parse('{"title":"主题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/theme.md","filePath":"guide/theme.md"}'),g={name:"guide/theme.md"},d=a(`主题 框架主题 主题配色存放在 /themes/index.ts
文件中,基础版和专业版内容略有不同。
基础版 ts import { hex2rgba } from '@unocss/preset-mini/utils'
+
+export const lightTheme = {
+ 'color-scheme' : 'light' ,
+ // 内置 UI
+ '--ui-primary' : hex2rgba ( '#0f0f0f' ) ! . join ( ' ' ),
+ '--ui-text' : hex2rgba ( '#fcfcfc' ) ! . join ( ' ' ),
+ // 主体
+ '--g-app-bg' : '#fff' ,
+ '--g-main-bg' : '#f2f2f2' ,
+ '--g-border-color' : '#f2f2f2' ,
+ // 头部
+ '--g-header-bg' : '#fff' ,
+ '--g-header-color' : '#0f0f0f' ,
+ '--g-header-menu-color' : '#0f0f0f' ,
+ '--g-header-menu-hover-bg' : '#dde1e3' ,
+ '--g-header-menu-hover-color' : '#0f0f0f' ,
+ '--g-header-menu-active-bg' : '#0f0f0f' ,
+ '--g-header-menu-active-color' : '#fff' ,
+ // 主导航
+ '--g-main-sidebar-bg' : '#f2f2f2' ,
+ '--g-main-sidebar-menu-color' : '#0f0f0f' ,
+ '--g-main-sidebar-menu-hover-bg' : '#dde1e3' ,
+ '--g-main-sidebar-menu-hover-color' : '#0f0f0f' ,
+ '--g-main-sidebar-menu-active-bg' : '#0f0f0f' ,
+ '--g-main-sidebar-menu-active-color' : '#fff' ,
+ // 次导航
+ '--g-sub-sidebar-bg' : '#fff' ,
+ '--g-sub-sidebar-logo-bg' : '#0f0f0f' ,
+ '--g-sub-sidebar-logo-color' : '#fff' ,
+ '--g-sub-sidebar-menu-color' : '#0f0f0f' ,
+ '--g-sub-sidebar-menu-hover-bg' : '#dde1e3' ,
+ '--g-sub-sidebar-menu-hover-color' : '#0f0f0f' ,
+ '--g-sub-sidebar-menu-active-bg' : '#0f0f0f' ,
+ '--g-sub-sidebar-menu-active-color' : '#fff' ,
+ // 工具栏
+ '--g-toolbar-bg' : '#fff' ,
+}
+
+export const darkTheme = {
+ 'color-scheme' : 'dark' ,
+ // 内置 UI
+ '--ui-primary' : hex2rgba ( '#e5e5e5' ) ! . join ( ' ' ),
+ '--ui-text' : hex2rgba ( '#0f0f0f' ) ! . join ( ' ' ),
+ // 主体
+ '--g-app-bg' : '#141414' ,
+ '--g-main-bg' : '#0a0a0a' ,
+ '--g-border-color' : '#15191e' ,
+ // 头部
+ '--g-header-bg' : '#141414' ,
+ '--g-header-color' : '#e5e5e5' ,
+ '--g-header-menu-color' : '#a8a29e' ,
+ '--g-header-menu-hover-bg' : '#141414' ,
+ '--g-header-menu-hover-color' : '#e5e5e5' ,
+ '--g-header-menu-active-bg' : '#e5e5e5' ,
+ '--g-header-menu-active-color' : '#0a0a0a' ,
+ // 主导航
+ '--g-main-sidebar-bg' : '#0a0a0a' ,
+ '--g-main-sidebar-menu-color' : '#a8a29e' ,
+ '--g-main-sidebar-menu-hover-bg' : '#141414' ,
+ '--g-main-sidebar-menu-hover-color' : '#e5e5e5' ,
+ '--g-main-sidebar-menu-active-bg' : '#e5e5e5' ,
+ '--g-main-sidebar-menu-active-color' : '#0a0a0a' ,
+ // 次导航
+ '--g-sub-sidebar-bg' : '#141414' ,
+ '--g-sub-sidebar-logo-bg' : '#0f0f0f' ,
+ '--g-sub-sidebar-logo-color' : '#e5e5e5' ,
+ '--g-sub-sidebar-menu-color' : '#a8a29e' ,
+ '--g-sub-sidebar-menu-hover-bg' : '#0a0a0a' ,
+ '--g-sub-sidebar-menu-hover-color' : '#e5e5e5' ,
+ '--g-sub-sidebar-menu-active-bg' : '#e5e5e5' ,
+ '--g-sub-sidebar-menu-active-color' : '#0a0a0a' ,
+ // 工具栏
+ '--g-toolbar-bg' : '#141414' ,
+}
专业版 与基础版不同,专业版默认提供了 12 款主题,明亮和暗黑模式各 6 款,并且主题在运行时共存,可实现动态切换。
ts import { hex2rgba } from '@unocss/preset-mini/utils'
+
+export default {
+ light: {
+ // 颜色主题
+ 'color-scheme' : 'light' ,
+ // 内置 UI
+ '--ui-primary' : hex2rgba ( '#0f0f0f' ) ! . join ( ' ' ),
+ '--ui-text' : hex2rgba ( '#fcfcfc' ) ! . join ( ' ' ),
+ // 主体
+ '--g-app-bg' : '#fff' ,
+ '--g-main-bg' : '#f2f2f2' ,
+ '--g-border-color' : '#f2f2f2' ,
+ // 头部
+ '--g-header-bg' : '#fff' ,
+ '--g-header-color' : '#0f0f0f' ,
+ '--g-header-menu-color' : '#0f0f0f' ,
+ '--g-header-menu-hover-bg' : '#dde1e3' ,
+ '--g-header-menu-hover-color' : '#0f0f0f' ,
+ '--g-header-menu-active-bg' : '#0f0f0f' ,
+ '--g-header-menu-active-color' : '#fff' ,
+ // 主导航
+ '--g-main-sidebar-bg' : '#f2f2f2' ,
+ '--g-main-sidebar-menu-color' : '#0f0f0f' ,
+ '--g-main-sidebar-menu-hover-bg' : '#dde1e3' ,
+ '--g-main-sidebar-menu-hover-color' : '#0f0f0f' ,
+ '--g-main-sidebar-menu-active-bg' : '#0f0f0f' ,
+ '--g-main-sidebar-menu-active-color' : '#fff' ,
+ // 次导航
+ '--g-sub-sidebar-bg' : '#fff' ,
+ '--g-sub-sidebar-logo-bg' : '#0f0f0f' ,
+ '--g-sub-sidebar-logo-color' : '#fff' ,
+ '--g-sub-sidebar-menu-color' : '#0f0f0f' ,
+ '--g-sub-sidebar-menu-hover-bg' : '#dde1e3' ,
+ '--g-sub-sidebar-menu-hover-color' : '#0f0f0f' ,
+ '--g-sub-sidebar-menu-active-bg' : '#0f0f0f' ,
+ '--g-sub-sidebar-menu-active-color' : '#fff' ,
+ // 工具栏
+ '--g-toolbar-bg' : '#fff' ,
+ },
+ ...
+ dark: {
+ // 颜色主题
+ 'color-scheme' : 'dark' ,
+ // 内置 UI
+ '--ui-primary' : hex2rgba ( '#e5e5e5' ) ! . join ( ' ' ),
+ '--ui-text' : hex2rgba ( '#0f0f0f' ) ! . join ( ' ' ),
+ // 主体
+ '--g-app-bg' : '#141414' ,
+ '--g-main-bg' : '#0a0a0a' ,
+ '--g-border-color' : '#15191e' ,
+ // 头部
+ '--g-header-bg' : '#141414' ,
+ '--g-header-color' : '#e5e5e5' ,
+ '--g-header-menu-color' : '#a8a29e' ,
+ '--g-header-menu-hover-bg' : '#141414' ,
+ '--g-header-menu-hover-color' : '#e5e5e5' ,
+ '--g-header-menu-active-bg' : '#e5e5e5' ,
+ '--g-header-menu-active-color' : '#0a0a0a' ,
+ // 主导航
+ '--g-main-sidebar-bg' : '#0a0a0a' ,
+ '--g-main-sidebar-menu-color' : '#a8a29e' ,
+ '--g-main-sidebar-menu-hover-bg' : '#141414' ,
+ '--g-main-sidebar-menu-hover-color' : '#e5e5e5' ,
+ '--g-main-sidebar-menu-active-bg' : '#e5e5e5' ,
+ '--g-main-sidebar-menu-active-color' : '#0a0a0a' ,
+ // 次导航
+ '--g-sub-sidebar-bg' : '#141414' ,
+ '--g-sub-sidebar-logo-bg' : '#0f0f0f' ,
+ '--g-sub-sidebar-logo-color' : '#e5e5e5' ,
+ '--g-sub-sidebar-menu-color' : '#a8a29e' ,
+ '--g-sub-sidebar-menu-hover-bg' : '#0a0a0a' ,
+ '--g-sub-sidebar-menu-hover-color' : '#e5e5e5' ,
+ '--g-sub-sidebar-menu-active-bg' : '#e5e5e5' ,
+ '--g-sub-sidebar-menu-active-color' : '#0a0a0a' ,
+ // 工具栏
+ '--g-toolbar-bg' : '#141414' ,
+ },
+ ...
+}
如果框架提供的主题风格满足不了你的需求,你还可以自定义新的主题。
ts import { hex2rgba } from '@unocss/preset-mini/utils'
+
+export default {
+ newThemeName: { // 主题名称
+ // 颜色主题
+ 'color-scheme' : 'light' , // 可选值 light/dark ,表示该主题在明亮或暗黑模式下的配色
+ // 内置 UI
+ '--ui-primary' : hex2rgba ( '#409eff' ) ! . join ( ' ' ),
+ '--ui-text' : hex2rgba ( '#fcfcfc' ) ! . join ( ' ' ),
+ // 主体
+ '--g-app-bg' : '#fff' ,
+ '--g-main-bg' : '#f2f2f2' ,
+ '--g-border-color' : '#f2f2f2' ,
+ // 头部
+ '--g-header-bg' : '#222b45' ,
+ '--g-header-color' : '#fff' ,
+ '--g-header-menu-color' : '#fff' ,
+ '--g-header-menu-hover-bg' : '#334067' ,
+ '--g-header-menu-hover-color' : '#fff' ,
+ '--g-header-menu-active-bg' : '#334067' ,
+ '--g-header-menu-active-color' : '#fff' ,
+ // 主导航
+ '--g-main-sidebar-bg' : '#222b45' ,
+ '--g-main-sidebar-menu-color' : '#fff' ,
+ '--g-main-sidebar-menu-hover-bg' : '#334067' ,
+ '--g-main-sidebar-menu-hover-color' : '#fff' ,
+ '--g-main-sidebar-menu-active-bg' : '#334067' ,
+ '--g-main-sidebar-menu-active-color' : '#fff' ,
+ // 次导航
+ '--g-sub-sidebar-bg' : '#fff' ,
+ '--g-sub-sidebar-logo-bg' : '#222b45' ,
+ '--g-sub-sidebar-logo-color' : '#fff' ,
+ '--g-sub-sidebar-menu-color' : '#0f0f0f' ,
+ '--g-sub-sidebar-menu-hover-bg' : '#dde1e3' ,
+ '--g-sub-sidebar-menu-hover-color' : '#0f0f0f' ,
+ '--g-sub-sidebar-menu-active-bg' : '#409eff' ,
+ '--g-sub-sidebar-menu-active-color' : '#fff' ,
+ // 工具栏
+ '--g-toolbar-bg' : '#fff' ,
+ },
+}
最后在应用配置中使用该主题:
ts const globalSettings : Settings . all = {
+ app: {
+ // 如果主题是暗黑模式下使用的,则 darkTheme: 'newThemeName'
+ lightTheme: 'newThemeName' ,
+ },
+}
颜色方案 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ app: {
+ /**
+ * 留空跟随系统
+ * light 明亮模式
+ * dark 暗黑模式
+ */
+ colorScheme: '' ,
+ },
+}
`,16),F={id:"哀悼模式",tabindex:"-1"},y=i("a",{class:"header-anchor",href:"#哀悼模式","aria-label":'Permalink to "哀悼模式 "'},"",-1),c=a(`在应用配置中设置:
ts const globalSettings : Settings . all = {
+ app: {
+ enableMournMode: true ,
+ },
+}
`,2),o={id:"色弱模式",tabindex:"-1"},C=i("a",{class:"header-anchor",href:"#色弱模式","aria-label":'Permalink to "色弱模式 "'},"",-1),B=a(`在应用配置中设置:
ts const globalSettings : Settings . all = {
+ app: {
+ enableColorAmblyopiaMode: true ,
+ },
+}
`,2),b={id:"导航栏风格",tabindex:"-1"},f=i("a",{class:"header-anchor",href:"#导航栏风格","aria-label":'Permalink to "导航栏风格 "'},"",-1),u=a(`风格 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ menu: {
+ /**
+ * 留空默认
+ * arrow 箭头
+ * line 线条
+ * dot 圆点
+ */
+ style: '' , // v4.5.0 之前版本为 menuActiveStyle
+ },
+}
圆角 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ menu: {
+ // 导航栏是否圆角
+ isRounded: true ,
+ },
+}
开发注意 如果只在明亮或暗黑模式中,选择其中一种模式进行业务开发,那没有什么需要注意的,你可以按照以往的开发习惯进行开发,这也是框架推荐的方式。
但如果需要让用户可以自己选择明亮或暗黑模式,或者是根据浏览器主题来判断是使用明亮还是暗黑模式。这时候开发则需要注意,业务页面里使用到的颜色将不能写成固定值(例如 color 、background-color 、border-color 、box-shadow 等有涉及到颜色的属性),因为同一个色值是无法顾及到明亮和暗黑两种模式的。
这时候我们建议使用 UnoCSS 进行样式编写,例如 text-dark dark-text-white
、bg-green dark-bg-red
。如果你不习惯使用 UnoCSS ,那也可以使用下面这种方法,在页面中去自定义一些颜色。
scss div {
+ color : #000 ;
+
+ [ data-theme = " dark " ] & {
+ color : #fff ;
+ }
+}
最后分享一篇关于暗黑模式的文章《教你巧用UI设计中的暗黑模式——Dark Mode 》,希望帮助你更好地在暗黑模式下开发出优秀的页面。
`,14);function m(A,D,v,_,x,S){const n=l("Badge");return t(),p("div",null,[d,i("h2",F,[s("哀悼模式 "),h(n,{type:"tip",text:"v4.5.0 新增"}),s(),y]),c,i("h2",o,[s("色弱模式 "),h(n,{type:"tip",text:"v4.5.0 新增"}),s(),C]),B,i("h2",b,[s("导航栏风格 "),h(n,{type:"pro",text:"专业版"}),s(),f]),u])}const q=k(g,[["render",m]]);export{P as __pageData,q as default};
diff --git a/assets/guide_theme.md.BLSJm2vH.lean.js b/assets/guide_theme.md.BLSJm2vH.lean.js
new file mode 100644
index 00000000..4f5df861
--- /dev/null
+++ b/assets/guide_theme.md.BLSJm2vH.lean.js
@@ -0,0 +1 @@
+import{_ as k,D as l,c as p,j as i,a as s,I as h,a6 as a,o as t}from"./chunks/framework.Bhh1y9_T.js";const e="/theme.gif",E="/menu-style.png",r="/menu-isrounded.png",P=JSON.parse('{"title":"主题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/theme.md","filePath":"guide/theme.md"}'),g={name:"guide/theme.md"},d=a("",16),F={id:"哀悼模式",tabindex:"-1"},y=i("a",{class:"header-anchor",href:"#哀悼模式","aria-label":'Permalink to "哀悼模式 "'},"",-1),c=a("",2),o={id:"色弱模式",tabindex:"-1"},C=i("a",{class:"header-anchor",href:"#色弱模式","aria-label":'Permalink to "色弱模式 "'},"",-1),B=a("",2),b={id:"导航栏风格",tabindex:"-1"},f=i("a",{class:"header-anchor",href:"#导航栏风格","aria-label":'Permalink to "导航栏风格 "'},"",-1),u=a("",14);function m(A,D,v,_,x,S){const n=l("Badge");return t(),p("div",null,[d,i("h2",F,[s("哀悼模式 "),h(n,{type:"tip",text:"v4.5.0 新增"}),s(),y]),c,i("h2",o,[s("色弱模式 "),h(n,{type:"tip",text:"v4.5.0 新增"}),s(),C]),B,i("h2",b,[s("导航栏风格 "),h(n,{type:"pro",text:"专业版"}),s(),f]),u])}const q=k(g,[["render",m]]);export{P as __pageData,q as default};
diff --git a/assets/guide_toolbar.md.DcqYXkK3.js b/assets/guide_toolbar.md.DcqYXkK3.js
new file mode 100644
index 00000000..95e20ab4
--- /dev/null
+++ b/assets/guide_toolbar.md.DcqYXkK3.js
@@ -0,0 +1,33 @@
+import{_ as n,D as l,c as e,j as i,a as s,I as h,a6 as a,o as p}from"./chunks/framework.Bhh1y9_T.js";const k="/toolbar.png",V=JSON.parse('{"title":"工具栏","description":"","frontmatter":{},"headers":[],"relativePath":"guide/toolbar.md","filePath":"guide/toolbar.md"}'),d={name:"guide/toolbar.md"},E=a('工具栏 工具栏主要是红框处各类功能图标。
窗口预览 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ toolbar: {
+ previewWindows: true ,
+ },
+}
`,6),r={id:"收藏夹",tabindex:"-1"},g=i("a",{class:"header-anchor",href:"#收藏夹","aria-label":'Permalink to "收藏夹 "'},"",-1),o=a(`在应用配置中设置:
ts const globalSettings : Settings . all = {
+ toolbar: {
+ favorites: true ,
+ },
+}
详细可阅读《收藏夹 》。
导航搜索 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ toolbar: {
+ navSearch: true ,
+ },
+}
`,6),c={id:"通知中心",tabindex:"-1"},y=i("a",{class:"header-anchor",href:"#通知中心","aria-label":'Permalink to "通知中心 "'},"",-1),F=a(`在应用配置中设置:
ts const globalSettings : Settings . all = {
+ toolbar: {
+ notification: true ,
+ },
+}
通知中心不涉及具体业务,需开发者自行实现,相关文件在:
/src/views/components/Tools/Notification/index.vue
通知中心下拉预览面板/src/views/windows/PersonalNotification/index.vue
通知中心页面 `,4),_={id:"国际化",tabindex:"-1"},C=i("a",{class:"header-anchor",href:"#国际化","aria-label":'Permalink to "国际化 "'},"",-1),b=a(`在应用配置中设置:
ts const globalSettings : Settings . all = {
+ toolbar: {
+ i18n: true ,
+ },
+}
如果设置为不启用,并不代表不支持国际化切换,只是不会在工具栏显示切换语言的图标,详细可阅读《国际化 》。
浏览器全屏 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ toolbar: {
+ fullscreen: true ,
+ },
+}
颜色主题 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ toolbar: {
+ colorScheme: true ,
+ },
+}
如果设置为不启用,并不代表不支持颜色主题切换,只是不会在工具栏显示切换颜色主题的图标。
`,10),u={id:"布局",tabindex:"-1"},v=i("a",{class:"header-anchor",href:"#布局","aria-label":'Permalink to "布局 "'},"",-1),B=a(`在应用配置中设置:
ts const globalSettings : Settings . all = {
+ toolbar: {
+ layout: [ 'previewWindows' , 'favorites' , '->' , 'navSearch' , 'notification' , 'i18n' , 'fullscreen' , 'colorScheme' ],
+ },
+}
可自定义摆放位置和顺序,其中 ->
为分隔符,用于分隔左右两侧的工具栏。修改时请确保提供的所有值都存在,不可删减。
`,3);function m(A,S,T,x,D,f){const t=l("Badge");return p(),e("div",null,[E,i("h2",r,[s("收藏夹 "),h(t,{type:"pro",text:"专业版"}),s(),g]),o,i("h2",c,[s("通知中心 "),h(t,{type:"pro",text:"专业版"}),s(),y]),F,i("h2",_,[s("国际化 "),h(t,{type:"pro",text:"专业版"}),s(),C]),b,i("h2",u,[s("布局 "),h(t,{type:"pro",text:"专业版"}),s(),v]),B])}const N=n(d,[["render",m]]);export{V as __pageData,N as default};
diff --git a/assets/guide_toolbar.md.DcqYXkK3.lean.js b/assets/guide_toolbar.md.DcqYXkK3.lean.js
new file mode 100644
index 00000000..6b75d0df
--- /dev/null
+++ b/assets/guide_toolbar.md.DcqYXkK3.lean.js
@@ -0,0 +1 @@
+import{_ as n,D as l,c as e,j as i,a as s,I as h,a6 as a,o as p}from"./chunks/framework.Bhh1y9_T.js";const k="/toolbar.png",V=JSON.parse('{"title":"工具栏","description":"","frontmatter":{},"headers":[],"relativePath":"guide/toolbar.md","filePath":"guide/toolbar.md"}'),d={name:"guide/toolbar.md"},E=a("",6),r={id:"收藏夹",tabindex:"-1"},g=i("a",{class:"header-anchor",href:"#收藏夹","aria-label":'Permalink to "收藏夹 "'},"",-1),o=a("",6),c={id:"通知中心",tabindex:"-1"},y=i("a",{class:"header-anchor",href:"#通知中心","aria-label":'Permalink to "通知中心 "'},"",-1),F=a("",4),_={id:"国际化",tabindex:"-1"},C=i("a",{class:"header-anchor",href:"#国际化","aria-label":'Permalink to "国际化 "'},"",-1),b=a("",10),u={id:"布局",tabindex:"-1"},v=i("a",{class:"header-anchor",href:"#布局","aria-label":'Permalink to "布局 "'},"",-1),B=a("",3);function m(A,S,T,x,D,f){const t=l("Badge");return p(),e("div",null,[E,i("h2",r,[s("收藏夹 "),h(t,{type:"pro",text:"专业版"}),s(),g]),o,i("h2",c,[s("通知中心 "),h(t,{type:"pro",text:"专业版"}),s(),y]),F,i("h2",_,[s("国际化 "),h(t,{type:"pro",text:"专业版"}),s(),C]),b,i("h2",u,[s("布局 "),h(t,{type:"pro",text:"专业版"}),s(),v]),B])}const N=n(d,[["render",m]]);export{V as __pageData,N as default};
diff --git a/assets/guide_upgrade.md.eXeFHhaS.js b/assets/guide_upgrade.md.eXeFHhaS.js
new file mode 100644
index 00000000..1340df76
--- /dev/null
+++ b/assets/guide_upgrade.md.eXeFHhaS.js
@@ -0,0 +1 @@
+import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.Bhh1y9_T.js";const g=JSON.parse('{"title":"框架更新","description":"","frontmatter":{},"headers":[],"relativePath":"guide/upgrade.md","filePath":"guide/upgrade.md"}'),p={name:"guide/upgrade.md"},r=o('框架更新 首先明确一点,One-step-admin 无法像 npm 的插件一样更新,不仅我们的框架如此,其实大部分管理系统框架都是如此。
因为本质上这类框架其实是一个初始模板,开发者会根据自身需求去修改,然后基于业务开展业务代码编写。
所以一旦下载开始使用,基本是无法更新的,你在哪个时间点开始使用,项目就固定在什么版本了。
虽然有小部分框架选择将部分核心源码封装成 npm 依赖包,由作者全权维护,这样的处理在一定程度上有解决版本更新的问题,但弊端也很明显,开发者在二次开发上会有明显的局限,作者认为是得不偿失的。
那有没有解决办法么?其实也有,参考如下:
在基于 One-step-admin 做项目开发时尽量避免框架自带模块或组件的改动,或者改动地方做一个文档记录,可以清楚知道改动了哪些,这样当你需要进行新版本更新时,按照之前记录的文档可以有个大致的迁移方案,而业务代码则可以直接拷贝过去。 我们尽量在提交代码时标明每次提交改动的变更记录说明,这样你可以选择性的更新部分新代码到项目中,也就是局部更新。这种方案也是作者在公司内部项目经常使用的,因为大部分项目是无需全局更新到新版的,只需将必要的一些新特性或 bug 修复同步到原有项目中即可。 使用文件比较工具,例如 Beyond Compare ,这款工具可以直接对比文件夹,可以清晰的列出文件夹内所有文件的差异,可以协助升级工作开展。 当然个人建议是,做为一个中后台系统框架,稳定是第一诉求,不到万不得已不建议频繁更新,因为更新的成本挺高的,每一次大更新,都需要一次完整的回归测试,以确保功能正常运行。
',8),n=[r];function i(s,_,d,c,l,u){return a(),t("div",null,n)}const h=e(p,[["render",i]]);export{g as __pageData,h as default};
diff --git a/assets/guide_upgrade.md.eXeFHhaS.lean.js b/assets/guide_upgrade.md.eXeFHhaS.lean.js
new file mode 100644
index 00000000..8b0e8916
--- /dev/null
+++ b/assets/guide_upgrade.md.eXeFHhaS.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.Bhh1y9_T.js";const g=JSON.parse('{"title":"框架更新","description":"","frontmatter":{},"headers":[],"relativePath":"guide/upgrade.md","filePath":"guide/upgrade.md"}'),p={name:"guide/upgrade.md"},r=o("",8),n=[r];function i(s,_,d,c,l,u){return a(),t("div",null,n)}const h=e(p,[["render",i]]);export{g as __pageData,h as default};
diff --git a/assets/guide_vue3-composition-api.md.D_pqF34C.js b/assets/guide_vue3-composition-api.md.D_pqF34C.js
new file mode 100644
index 00000000..7cbd4b38
--- /dev/null
+++ b/assets/guide_vue3-composition-api.md.D_pqF34C.js
@@ -0,0 +1,19 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"使用 Composition API 开发","description":"","frontmatter":{},"headers":[],"relativePath":"guide/vue3-composition-api.md","filePath":"guide/vue3-composition-api.md"}'),n={name:"guide/vue3-composition-api.md"},p=t(`使用 Composition API 开发 TIP
Composition API 是 Vue3 全新提供的一种语法,对于从 Vue2 就在使用的开发者,如果一时半会没办法立马上手 Composition API ,你依旧可以在项目中使用 Options API 做开发。当然我们更建议你使用 Composition API 进行开发,它比 Options API 更灵活且易读。
使用 如果你还不熟悉 Composition API ,那么我们建议你阅读 Vue3 官方文档 了解;如果你已经熟悉 Composition API ,那么我们建议你在开发的时候,使用 <script setup>
语法糖进行开发,它将提高很多开发上的效率。
同时得益于 unplugin-auto-import 的特性,在 <script setup>
里无需导入相关 API ,该依赖会自动导入(默认支持 vue,vue-router 和 pinia )。
vue < script setup lang = "ts" >
+// 无需手动 import 相关 API
+import { computed, ref } from 'vue'
+
+const count = ref ( 0 )
+const doubled = computed (() => count.value * 2 )
+</ script >
组件 name <script setup>
可以和普通的 <script>
一起使用,所以可以这样定义组件 name:
vue < script lang = "ts" >
+export default {
+ name: 'componentName' ,
+}
+</ script >
+
+< script setup lang = "ts" >
+...
+</ script >
Vue 3.3 开始,你可以使用 defineOptions
在 <script setup>
里定义组件的 name:
vue < script setup lang = "ts" >
+defineOptions ({
+ name: 'ComponentName' ,
+})
+</ script >
`,11),h=[p];function e(l,k,r,o,E,d){return a(),i("div",null,h)}const u=s(n,[["render",e]]);export{c as __pageData,u as default};
diff --git a/assets/guide_vue3-composition-api.md.D_pqF34C.lean.js b/assets/guide_vue3-composition-api.md.D_pqF34C.lean.js
new file mode 100644
index 00000000..897dd1e7
--- /dev/null
+++ b/assets/guide_vue3-composition-api.md.D_pqF34C.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.Bhh1y9_T.js";const c=JSON.parse('{"title":"使用 Composition API 开发","description":"","frontmatter":{},"headers":[],"relativePath":"guide/vue3-composition-api.md","filePath":"guide/vue3-composition-api.md"}'),n={name:"guide/vue3-composition-api.md"},p=t("",11),h=[p];function e(l,k,r,o,E,d){return a(),i("div",null,h)}const u=s(n,[["render",e]]);export{c as __pageData,u as default};
diff --git a/assets/guide_watermark.md.Bfkh7IZ2.js b/assets/guide_watermark.md.Bfkh7IZ2.js
new file mode 100644
index 00000000..1b9bc102
--- /dev/null
+++ b/assets/guide_watermark.md.Bfkh7IZ2.js
@@ -0,0 +1,17 @@
+import{_ as t,D as n,c as e,j as a,a as s,I as p,a6 as l,o as h}from"./chunks/framework.Bhh1y9_T.js";const k="/watermark.png",b=JSON.parse('{"title":"页面水印","description":"","frontmatter":{},"headers":[],"relativePath":"guide/watermark.md","filePath":"guide/watermark.md"}'),r={name:"guide/watermark.md"},d={id:"页面水印",tabindex:"-1"},E=a("a",{class:"header-anchor",href:"#页面水印","aria-label":'Permalink to "页面水印 "'},"",-1),o=l(`使用 在应用配置中设置:
ts const globalSettings : Settings . all = {
+ app: {
+ enableWatermark: true ,
+ },
+}
效果如下:
设置水印内容 在 /src/store/modules/watermark.ts
中可修改水印展示内容,以及其他水印相关配置。
水印同时支持动态更新,示例:
vue < script setup lang = "ts" >
+import useWatermarkStore from '@/store/modules/watermark'
+
+const watermarkStore = useWatermarkStore ()
+
+watermarkStore. update ({
+ text: '设置水印' ,
+ // 更多设置项请查看 /src/utils/watermark.ts 中 settingsType 类型定义
+})
+
+// 重置水印,恢复到默认设置
+watermarkStore. update ()
+</ script >
`,9);function g(c,y,m,F,u,_){const i=n("Badge");return h(),e("div",null,[a("h1",d,[s("页面水印 "),p(i,{type:"pro",text:"专业版"}),s(),E]),o])}const B=t(r,[["render",g]]);export{b as __pageData,B as default};
diff --git a/assets/guide_watermark.md.Bfkh7IZ2.lean.js b/assets/guide_watermark.md.Bfkh7IZ2.lean.js
new file mode 100644
index 00000000..bd372d59
--- /dev/null
+++ b/assets/guide_watermark.md.Bfkh7IZ2.lean.js
@@ -0,0 +1 @@
+import{_ as t,D as n,c as e,j as a,a as s,I as p,a6 as l,o as h}from"./chunks/framework.Bhh1y9_T.js";const k="/watermark.png",b=JSON.parse('{"title":"页面水印","description":"","frontmatter":{},"headers":[],"relativePath":"guide/watermark.md","filePath":"guide/watermark.md"}'),r={name:"guide/watermark.md"},d={id:"页面水印",tabindex:"-1"},E=a("a",{class:"header-anchor",href:"#页面水印","aria-label":'Permalink to "页面水印 "'},"",-1),o=l("",9);function g(c,y,m,F,u,_){const i=n("Badge");return h(),e("div",null,[a("h1",d,[s("页面水印 "),p(i,{type:"pro",text:"专业版"}),s(),E]),o])}const B=t(r,[["render",g]]);export{b as __pageData,B as default};
diff --git a/assets/guide_why.md.DBObFHbq.js b/assets/guide_why.md.DBObFHbq.js
new file mode 100644
index 00000000..ade8cc8c
--- /dev/null
+++ b/assets/guide_why.md.DBObFHbq.js
@@ -0,0 +1 @@
+import{c as r,j as a,a as t,t as i,k as s,a6 as d,o as l}from"./chunks/framework.Bhh1y9_T.js";const c="/intro-1.gif",h="/intro-2.gif",p="/intro-3.gif",m="/intro-4.gif",_="/intro-5.gif",u=a("h1",{id:"为什么选择我们",tabindex:"-1"},[t("为什么选择我们 ? "),a("a",{class:"header-anchor",href:"#为什么选择我们","aria-label":'Permalink to "为什么选择我们 ?"'},"")],-1),f=a("p",null,"如果你正在做后台框架相关的调研或选型,相信这篇介绍能帮助你快速了解 One-step-admin 的特点,以及与传统后台框架的对比。",-1),g=a("h2",{id:"长期且稳定",tabindex:"-1"},[t("长期且稳定 "),a("a",{class:"header-anchor",href:"#长期且稳定","aria-label":'Permalink to "长期且稳定"'},"")],-1),b=d('高效的交互方式 摆脱传统后台框架路由跳转的交互,将每个模块以窗口 的形式展示在同一个界面中,让使用人员可以做到跨模块的多线操作。
窗口最大化 窗口默认宽度为 800px ,可以在项目中进行调整,也可以通过最大化按钮将窗口最大化展示,以便展示更多信息。
快速定位操作窗口 提供的预览界面可以帮助使用人员快速定位到需要操作的窗口。
专注模式 可勾选多个窗口平均分布在页面中,专注于所勾选的窗口进行操作。
窗口排序 快速调整窗口的展示顺序。
继承自 Fantastic-admin 本框架继承了 Fantastic-admin 许多优秀的特性。例如同样提供了 5 款导航栏模式,3 款导航栏风格以及 6 款主题配色,导航也提供了各种展示形态的设置,显隐、标题、图标、徽标、外链等。
为什么不是 Fantastic-admin ? 这里的 Fantastic-admin 代表了市面上几乎所有的传统后台框架,它们的优势在于理解成本低,每个页面的功能明确,需要做什么操作就进入不同的页面。
而劣势也是因为这种优势导致的,例如要在多个模块之间进行操作,就需要频繁切换路由,而切换路由会导致之前页面上的数据丢失,进而扩展了页面缓存和标签栏的特性,但也变相增加了开发人员的开发成本。其次现在的显示器都在往高分屏/带鱼屏发展,当页面展示内容不多的时候,界面上会显示大量的留白,造成空间浪费。
基于传统后台框架的这些痛点,One-step-admin 应运而生,它探索出了一种全新的交互方式,有效提高了使用人员的操作效率 ,同时也减轻了开发人员的开发成本 。
以上面举例的场景,在 One-step-admin 里,因为模块都以窗口的形式在同一个界面上展示,所以就不存在切换路由,也就不存在切换路由导致页面数据丢失的场景,开发人员只需关注模块内的业务实现即可。
',22),F=JSON.parse('{"title":"为什么选择我们 ?","description":"","frontmatter":{},"headers":[],"relativePath":"guide/why.md","filePath":"guide/why.md"}'),q={name:"guide/why.md"},O=Object.assign(q,{setup(x){const e="2021/11/01",n=new Date().getTime()/1e3-new Date(e).getTime()/1e3,o=parseInt(n/60/60/24);return(P,k)=>(l(),r("div",null,[u,f,g,a("p",null,[t("One-step-admin 自 "+i(e)+" 正式对外发布,截止到今天为止,已持续维护 "),a("strong",null,i(s(o)),1),t(" 天。")]),b]))}});export{F as __pageData,O as default};
diff --git a/assets/guide_why.md.DBObFHbq.lean.js b/assets/guide_why.md.DBObFHbq.lean.js
new file mode 100644
index 00000000..13bb94db
--- /dev/null
+++ b/assets/guide_why.md.DBObFHbq.lean.js
@@ -0,0 +1 @@
+import{c as r,j as a,a as t,t as i,k as s,a6 as d,o as l}from"./chunks/framework.Bhh1y9_T.js";const c="/intro-1.gif",h="/intro-2.gif",p="/intro-3.gif",m="/intro-4.gif",_="/intro-5.gif",u=a("h1",{id:"为什么选择我们",tabindex:"-1"},[t("为什么选择我们 ? "),a("a",{class:"header-anchor",href:"#为什么选择我们","aria-label":'Permalink to "为什么选择我们 ?"'},"")],-1),f=a("p",null,"如果你正在做后台框架相关的调研或选型,相信这篇介绍能帮助你快速了解 One-step-admin 的特点,以及与传统后台框架的对比。",-1),g=a("h2",{id:"长期且稳定",tabindex:"-1"},[t("长期且稳定 "),a("a",{class:"header-anchor",href:"#长期且稳定","aria-label":'Permalink to "长期且稳定"'},"")],-1),b=d("",22),F=JSON.parse('{"title":"为什么选择我们 ?","description":"","frontmatter":{},"headers":[],"relativePath":"guide/why.md","filePath":"guide/why.md"}'),q={name:"guide/why.md"},O=Object.assign(q,{setup(x){const e="2021/11/01",n=new Date().getTime()/1e3-new Date(e).getTime()/1e3,o=parseInt(n/60/60/24);return(P,k)=>(l(),r("div",null,[u,f,g,a("p",null,[t("One-step-admin 自 "+i(e)+" 正式对外发布,截止到今天为止,已持续维护 "),a("strong",null,i(s(o)),1),t(" 天。")]),b]))}});export{F as __pageData,O as default};
diff --git a/assets/guide_window.md.s_rE98aQ.js b/assets/guide_window.md.s_rE98aQ.js
new file mode 100644
index 00000000..321ca13a
--- /dev/null
+++ b/assets/guide_window.md.s_rE98aQ.js
@@ -0,0 +1 @@
+import{_ as e,c as o,o as t,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const w=JSON.parse('{"title":"窗口","description":"","frontmatter":{},"headers":[],"relativePath":"guide/window.md","filePath":"guide/window.md"}'),c={name:"guide/window.md"},d=a('窗口 窗口即组件,存放在 /src/views/windows/
目录下,类似于全局组件,文件夹名即为组件名,在窗口打开的时候会动态加载组件。
每个窗口的文件夹内至少保留一个文件名为 index.vue
的入口文件。
注意
由于窗口展示的特殊性,请勿在窗口组件内使用 position: fixed;
样式。
',4),i=[d];function s(n,_,r,p,l,u){return t(),o("div",null,i)}const h=e(c,[["render",s]]);export{w as __pageData,h as default};
diff --git a/assets/guide_window.md.s_rE98aQ.lean.js b/assets/guide_window.md.s_rE98aQ.lean.js
new file mode 100644
index 00000000..4f0a162d
--- /dev/null
+++ b/assets/guide_window.md.s_rE98aQ.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as o,o as t,a6 as a}from"./chunks/framework.Bhh1y9_T.js";const w=JSON.parse('{"title":"窗口","description":"","frontmatter":{},"headers":[],"relativePath":"guide/window.md","filePath":"guide/window.md"}'),c={name:"guide/window.md"},d=a("",4),i=[d];function s(n,_,r,p,l,u){return t(),o("div",null,i)}const h=e(c,[["render",s]]);export{w as __pageData,h as default};
diff --git a/assets/index.md.Bg6s1Hx0.js b/assets/index.md.Bg6s1Hx0.js
new file mode 100644
index 00000000..f2fe63ca
--- /dev/null
+++ b/assets/index.md.Bg6s1Hx0.js
@@ -0,0 +1 @@
+import{y as n,c as a,o}from"./chunks/framework.Bhh1y9_T.js";function s(){const e=document.querySelector("div.VPHero.has-image.VPHomeHero > div > div.main > h1.name"),t=document.createElement("sup");t.classList.add("pure-tag"),t.textContent="纯前端框架",e==null||e.appendChild(t)}function l(){return fetch("https://api.github.com/repos/one-step-admin/basic/releases/latest").then(e=>e.json()).then(e=>e.tag_name??"").then(e=>{if(!e)return;const t=document.querySelector("div.VPHero.has-image.VPHomeHero > div > div.main > p.tagline"),i=document.createElement("samp");i.classList.add("github-release-tag"),i.textContent=e,t==null||t.appendChild(i)})}const m=JSON.parse('{"title":"One-step-admin","titleTemplate":"一款 Vue 中后台管理系统框架","description":"","frontmatter":{"layout":"home","title":"One-step-admin","titleTemplate":"一款 Vue 中后台管理系统框架","hero":{"name":"One-step-admin","text":"巧妙的管理系统框架","tagline":"快人一步,给你不一样的使用体验","image":{"src":"/logo.png","alt":"Vite"},"actions":[{"theme":"brand","text":"开始","link":"/guide/intro"},{"theme":"alt","text":"为什么选我们 ?","link":"/guide/why"},{"theme":"alt","text":"更新日志","link":"/guide/changelog"},{"theme":"cta buy","text":"购买合集,优惠更多","link":"/buy"},{"theme":"cta","text":"演示地址:基础版 ↗","link":"https://one-step-admin.hurui.me/basic-example"},{"theme":"cta","text":"演示地址:专业版 ↗","link":"https://one-step-admin.hurui.me/pro-example"}]},"features":[{"icon":"💪","title":"先进的技术栈","details":"Vite + Vue3 + Pinia + TypeScript ,采用业内先进的技术栈,使框架始终保持新鲜"},{"icon":"🖥️","title":"高效操作","details":"采用全新交互方式,大幅提升操作效率,更好的利用高分屏/带鱼屏显示器"},{"icon":"🎨","title":"风格百变","details":"通过布局与主题组合搭配,可实现数百种不同风格的界面"},{"icon":"🗺️","title":"多功能导航栏","details":"支持前/后端生成导航栏,轻松实现导航嵌套、外链、标记、权限等功能"},{"icon":"🔑","title":"全场景权限验证","details":"内置鉴权组件、鉴权指令和鉴权函数,真正实现各种场景下的权限验证"},{"icon":"🌐","title":"面向国际","details":"内置业内通用国际化解决方案,通过简单配置实现多国语言切换"},{"icon":"📦","title":"丰富的组件","details":"内置常用组件,提高开发效率;同时提供组件快速生成工具"},{"icon":"📃","title":"丰富的业务页面","details":"通过真实场景及真实需求,沉淀出数十个业务应用的静态页面,方便开发人员直接使用"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),c={name:"index.md"},p=Object.assign(c,{setup(e){return n(()=>{s(),l()}),(t,i)=>(o(),a("div"))}});export{m as __pageData,p as default};
diff --git a/assets/index.md.Bg6s1Hx0.lean.js b/assets/index.md.Bg6s1Hx0.lean.js
new file mode 100644
index 00000000..f2fe63ca
--- /dev/null
+++ b/assets/index.md.Bg6s1Hx0.lean.js
@@ -0,0 +1 @@
+import{y as n,c as a,o}from"./chunks/framework.Bhh1y9_T.js";function s(){const e=document.querySelector("div.VPHero.has-image.VPHomeHero > div > div.main > h1.name"),t=document.createElement("sup");t.classList.add("pure-tag"),t.textContent="纯前端框架",e==null||e.appendChild(t)}function l(){return fetch("https://api.github.com/repos/one-step-admin/basic/releases/latest").then(e=>e.json()).then(e=>e.tag_name??"").then(e=>{if(!e)return;const t=document.querySelector("div.VPHero.has-image.VPHomeHero > div > div.main > p.tagline"),i=document.createElement("samp");i.classList.add("github-release-tag"),i.textContent=e,t==null||t.appendChild(i)})}const m=JSON.parse('{"title":"One-step-admin","titleTemplate":"一款 Vue 中后台管理系统框架","description":"","frontmatter":{"layout":"home","title":"One-step-admin","titleTemplate":"一款 Vue 中后台管理系统框架","hero":{"name":"One-step-admin","text":"巧妙的管理系统框架","tagline":"快人一步,给你不一样的使用体验","image":{"src":"/logo.png","alt":"Vite"},"actions":[{"theme":"brand","text":"开始","link":"/guide/intro"},{"theme":"alt","text":"为什么选我们 ?","link":"/guide/why"},{"theme":"alt","text":"更新日志","link":"/guide/changelog"},{"theme":"cta buy","text":"购买合集,优惠更多","link":"/buy"},{"theme":"cta","text":"演示地址:基础版 ↗","link":"https://one-step-admin.hurui.me/basic-example"},{"theme":"cta","text":"演示地址:专业版 ↗","link":"https://one-step-admin.hurui.me/pro-example"}]},"features":[{"icon":"💪","title":"先进的技术栈","details":"Vite + Vue3 + Pinia + TypeScript ,采用业内先进的技术栈,使框架始终保持新鲜"},{"icon":"🖥️","title":"高效操作","details":"采用全新交互方式,大幅提升操作效率,更好的利用高分屏/带鱼屏显示器"},{"icon":"🎨","title":"风格百变","details":"通过布局与主题组合搭配,可实现数百种不同风格的界面"},{"icon":"🗺️","title":"多功能导航栏","details":"支持前/后端生成导航栏,轻松实现导航嵌套、外链、标记、权限等功能"},{"icon":"🔑","title":"全场景权限验证","details":"内置鉴权组件、鉴权指令和鉴权函数,真正实现各种场景下的权限验证"},{"icon":"🌐","title":"面向国际","details":"内置业内通用国际化解决方案,通过简单配置实现多国语言切换"},{"icon":"📦","title":"丰富的组件","details":"内置常用组件,提高开发效率;同时提供组件快速生成工具"},{"icon":"📃","title":"丰富的业务页面","details":"通过真实场景及真实需求,沉淀出数十个业务应用的静态页面,方便开发人员直接使用"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),c={name:"index.md"},p=Object.assign(c,{setup(e){return n(()=>{s(),l()}),(t,i)=>(o(),a("div"))}});export{m as __pageData,p as default};
diff --git a/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2
new file mode 100644
index 00000000..b6b603d5
Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ
diff --git a/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/assets/inter-italic-cyrillic.By2_1cv3.woff2
new file mode 100644
index 00000000..def40a4f
Binary files /dev/null and b/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ
diff --git a/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/assets/inter-italic-greek-ext.1u6EdAuj.woff2
new file mode 100644
index 00000000..e070c3d3
Binary files /dev/null and b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ
diff --git a/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/assets/inter-italic-greek.DJ8dCoTZ.woff2
new file mode 100644
index 00000000..a3c16ca4
Binary files /dev/null and b/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ
diff --git a/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/assets/inter-italic-latin-ext.CN1xVJS-.woff2
new file mode 100644
index 00000000..2210a899
Binary files /dev/null and b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ
diff --git a/assets/inter-italic-latin.C2AdPX0b.woff2 b/assets/inter-italic-latin.C2AdPX0b.woff2
new file mode 100644
index 00000000..790d62dc
Binary files /dev/null and b/assets/inter-italic-latin.C2AdPX0b.woff2 differ
diff --git a/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/assets/inter-italic-vietnamese.BSbpV94h.woff2
new file mode 100644
index 00000000..1eec0775
Binary files /dev/null and b/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ
diff --git a/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2
new file mode 100644
index 00000000..2cfe6153
Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ
diff --git a/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2
new file mode 100644
index 00000000..e3886dd1
Binary files /dev/null and b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ
diff --git a/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2
new file mode 100644
index 00000000..36d67487
Binary files /dev/null and b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ
diff --git a/assets/inter-roman-greek.BBVDIX6e.woff2 b/assets/inter-roman-greek.BBVDIX6e.woff2
new file mode 100644
index 00000000..2bed1e85
Binary files /dev/null and b/assets/inter-roman-greek.BBVDIX6e.woff2 differ
diff --git a/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2
new file mode 100644
index 00000000..9a8d1e2b
Binary files /dev/null and b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ
diff --git a/assets/inter-roman-latin.Di8DUHzh.woff2 b/assets/inter-roman-latin.Di8DUHzh.woff2
new file mode 100644
index 00000000..07d3c53a
Binary files /dev/null and b/assets/inter-roman-latin.Di8DUHzh.woff2 differ
diff --git a/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/assets/inter-roman-vietnamese.BjW4sHH5.woff2
new file mode 100644
index 00000000..57bdc22a
Binary files /dev/null and b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ
diff --git a/assets/style.DF-GpclC.css b/assets/style.DF-GpclC.css
new file mode 100644
index 00000000..4eb03b5c
--- /dev/null
+++ b/assets/style.DF-GpclC.css
@@ -0,0 +1 @@
+@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.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;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.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;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}: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: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}: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-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{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.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 h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.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;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;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,.vp-doc h4>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:0 0 4px!important;text-align:center;letter-spacing:1px!important;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-4a25c188]{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-4a25c188],.VPBackdrop.fade-leave-to[data-v-4a25c188]{opacity:0}.VPBackdrop.fade-leave-active[data-v-4a25c188]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-4a25c188]{display:none}}.NotFound[data-v-d3e33f7f]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d3e33f7f]{padding:96px 32px 168px}}.code[data-v-d3e33f7f]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d3e33f7f]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d3e33f7f]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d3e33f7f]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d3e33f7f]{padding-top:20px}.link[data-v-d3e33f7f]{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-d3e33f7f]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-00020b51]{position:relative;z-index:1}.nested[data-v-00020b51]{padding-right:16px;padding-left:16px}.outline-link[data-v-00020b51]{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-00020b51]:hover,.outline-link.active[data-v-00020b51]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-00020b51]{padding-left:13px}.VPDocAsideOutline[data-v-4c69a99b]{display:none}.VPDocAsideOutline.has-outline[data-v-4c69a99b]{display:block}.content[data-v-4c69a99b]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-4c69a99b]{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-4c69a99b]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-957a5c78]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-957a5c78]{flex-grow:1}.VPDocAside[data-v-957a5c78] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-957a5c78] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-957a5c78] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-c8439711]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-c8439711]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-6fb16c48]{margin-top:64px}.edit-info[data-v-6fb16c48]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-6fb16c48]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-6fb16c48]{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-6fb16c48]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-6fb16c48]{margin-right:8px}.prev-next[data-v-6fb16c48]{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-6fb16c48]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-6fb16c48]{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-6fb16c48]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-6fb16c48]{margin-left:auto;text-align:right}.desc[data-v-6fb16c48]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-6fb16c48]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-715d218f]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-715d218f]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-715d218f]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-715d218f]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-715d218f]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-715d218f]{display:flex;justify-content:center}.VPDoc .aside[data-v-715d218f]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-715d218f]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-715d218f]{max-width:1104px}}.container[data-v-715d218f]{margin:0 auto;width:100%}.aside[data-v-715d218f]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-715d218f]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-715d218f]{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-715d218f]::-webkit-scrollbar{display:none}.aside-curtain[data-v-715d218f]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-715d218f]{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-715d218f]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-715d218f]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-715d218f]{order:1;margin:0;min-width:640px}}.content-container[data-v-715d218f]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-715d218f]{max-width:688px}.VPButton[data-v-19112015]{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-19112015]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-19112015]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-19112015]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-19112015]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-19112015]: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-19112015]: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-19112015]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-19112015]: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-19112015]: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-19112015]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-19112015]: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-19112015]: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-c6276651]{display:none}.dark .VPImage.light[data-v-c6276651]{display:none}.VPHero[data-v-415d0179]{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-415d0179]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-415d0179]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-415d0179]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-415d0179]{flex-direction:row}}.main[data-v-415d0179]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-415d0179]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-415d0179]{text-align:left}}@media (min-width: 960px){.main[data-v-415d0179]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-415d0179]{max-width:592px}}.name[data-v-415d0179],.text[data-v-415d0179]{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-415d0179],.VPHero.has-image .text[data-v-415d0179]{margin:0 auto}.name[data-v-415d0179]{color:var(--vp-home-hero-name-color)}.clip[data-v-415d0179]{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-415d0179],.text[data-v-415d0179]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-415d0179],.text[data-v-415d0179]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-415d0179],.VPHero.has-image .text[data-v-415d0179]{margin:0}}.tagline[data-v-415d0179]{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-415d0179]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-415d0179]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-415d0179]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-415d0179]{margin:0}}.actions[data-v-415d0179]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-415d0179]{justify-content:center}@media (min-width: 640px){.actions[data-v-415d0179]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-415d0179]{justify-content:flex-start}}.action[data-v-415d0179]{flex-shrink:0;padding:6px}.image[data-v-415d0179]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-415d0179]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-415d0179]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-415d0179]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-415d0179]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-415d0179]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-415d0179]{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-415d0179]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-415d0179]{width:320px;height:320px}}[data-v-415d0179] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-415d0179] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-415d0179] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-0c8a99e7]{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-0c8a99e7]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-0c8a99e7]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-0c8a99e7]>.VPImage{margin-bottom:20px}.icon[data-v-0c8a99e7]{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-0c8a99e7]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-0c8a99e7]{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-0c8a99e7]{padding-top:8px}.link-text-value[data-v-0c8a99e7]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-0c8a99e7]{margin-left:6px}.VPFeatures[data-v-fdd7fd61]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-fdd7fd61]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-fdd7fd61]{padding:0 64px}}.container[data-v-fdd7fd61]{margin:0 auto;max-width:1152px}.items[data-v-fdd7fd61]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-fdd7fd61]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-fdd7fd61],.item.grid-4[data-v-fdd7fd61],.item.grid-6[data-v-fdd7fd61]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-fdd7fd61],.item.grid-4[data-v-fdd7fd61]{width:50%}.item.grid-3[data-v-fdd7fd61],.item.grid-6[data-v-fdd7fd61]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-fdd7fd61]{width:25%}}.container[data-v-38b3e09e]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-38b3e09e]{padding:0 48px}}@media (min-width: 960px){.container[data-v-38b3e09e]{width:100%;padding:0 64px}}.vp-doc[data-v-38b3e09e] .VPHomeSponsors,.vp-doc[data-v-38b3e09e] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-38b3e09e] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-38b3e09e] .VPHomeSponsors a,.vp-doc[data-v-38b3e09e] .VPTeamPage a{text-decoration:none}.VPHome[data-v-f3abe0bf]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-f3abe0bf]{margin-bottom:128px}}.VPContent[data-v-a399269d]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-a399269d]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-a399269d]{margin:0}@media (min-width: 960px){.VPContent[data-v-a399269d]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-a399269d]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-a399269d]{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-51d2e0a7]{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-51d2e0a7]{display:none}.VPFooter[data-v-51d2e0a7] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-51d2e0a7] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-51d2e0a7]{padding:32px}}.container[data-v-51d2e0a7]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-51d2e0a7],.copyright[data-v-51d2e0a7]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-55fc9c08]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-55fc9c08]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-55fc9c08]{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-55fc9c08]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-55fc9c08]{color:var(--vp-c-text-1)}.icon[data-v-55fc9c08]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-55fc9c08]{font-size:14px}.icon[data-v-55fc9c08]{font-size:16px}}.open>.icon[data-v-55fc9c08]{transform:rotate(90deg)}.items[data-v-55fc9c08]{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-55fc9c08]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-55fc9c08]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-55fc9c08]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-55fc9c08]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-55fc9c08]{transition:all .2s ease-out}.flyout-leave-active[data-v-55fc9c08]{transition:all .15s ease-in}.flyout-enter-from[data-v-55fc9c08],.flyout-leave-to[data-v-55fc9c08]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-30188ab8]{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-30188ab8]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-30188ab8]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-30188ab8]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-30188ab8]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-30188ab8]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-30188ab8]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-30188ab8]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-30188ab8]{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-30188ab8]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-30188ab8]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-30188ab8]{display:none}}.menu-icon[data-v-30188ab8]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-30188ab8]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-30188ab8]{padding:12px 32px 11px}}.VPSwitch[data-v-3ee2f654]{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-3ee2f654]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-3ee2f654]{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-3ee2f654]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-3ee2f654] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-3ee2f654] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-9abaff51]{opacity:1}.moon[data-v-9abaff51],.dark .sun[data-v-9abaff51]{opacity:0}.dark .moon[data-v-9abaff51]{opacity:1}.dark .VPSwitchAppearance[data-v-9abaff51] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-87c5e7d2]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-87c5e7d2]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-a33e9249]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-a33e9249]{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-a33e9249]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-a33e9249]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-becbdab9]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-becbdab9]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-becbdab9]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-becbdab9]{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-26e1b36f]{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-26e1b36f] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-26e1b36f] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-26e1b36f] .group:last-child{padding-bottom:0}.VPMenu[data-v-26e1b36f] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-26e1b36f] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-26e1b36f] .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-26e1b36f] .action{padding-left:24px}.VPFlyout[data-v-779d1d76]{position:relative}.VPFlyout[data-v-779d1d76]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-779d1d76]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-779d1d76]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-779d1d76]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-779d1d76]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-779d1d76],.button[aria-expanded=true]+.menu[data-v-779d1d76]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-779d1d76]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-779d1d76]{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-779d1d76]{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-779d1d76]{margin-right:0;font-size:16px}.text-icon[data-v-779d1d76]{margin-left:4px;font-size:14px}.icon[data-v-779d1d76]{font-size:20px;transition:fill .25s}.menu[data-v-779d1d76]{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-d5c0951d]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-d5c0951d]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-d5c0951d]>svg,.VPSocialLink[data-v-d5c0951d]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-0c074974]{display:flex;justify-content:center}.VPNavBarExtra[data-v-3a857657]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-3a857657]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-3a857657]{display:none}}.trans-title[data-v-3a857657]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-3a857657],.item.social-links[data-v-3a857657]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-3a857657]{min-width:176px}.appearance-action[data-v-3a857657]{margin-right:-2px}.social-links-list[data-v-3a857657]{margin:-4px -8px}.VPNavBarHamburger[data-v-c2a24129]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-c2a24129]{display:none}}.container[data-v-c2a24129]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-c2a24129]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-c2a24129]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-c2a24129]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-c2a24129]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-c2a24129]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-c2a24129]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-c2a24129],.VPNavBarHamburger.active:hover .middle[data-v-c2a24129],.VPNavBarHamburger.active:hover .bottom[data-v-c2a24129]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-c2a24129],.middle[data-v-c2a24129],.bottom[data-v-c2a24129]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-c2a24129]{top:0;left:0;transform:translate(0)}.middle[data-v-c2a24129]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-c2a24129]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-86a4e124]{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-86a4e124],.VPNavBarMenuLink[data-v-86a4e124]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-af86387c]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-af86387c]{display:flex}}/*! @docsearch/css 3.6.1 | 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-Key--pressed{transform:none;box-shadow:none}.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}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.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-9686c645]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-9686c645]{display:flex;align-items:center}}.title[data-v-b3258250]{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-b3258250]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-b3258250]{border-bottom-color:var(--vp-c-divider)}}[data-v-b3258250] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-d11f4714]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-d11f4714]{display:flex;align-items:center}}.title[data-v-d11f4714]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-4706692b]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-4706692b]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-4706692b]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-4706692b]:not(.home){background-color:transparent}.VPNavBar[data-v-4706692b]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-4706692b]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-4706692b]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-4706692b]{padding:0}}.container[data-v-4706692b]{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-4706692b],.container>.content[data-v-4706692b]{pointer-events:none}.container[data-v-4706692b] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-4706692b]{max-width:100%}}.title[data-v-4706692b]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-4706692b]{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-4706692b]{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-4706692b]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-4706692b]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-4706692b]{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-4706692b]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-4706692b]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-4706692b]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-4706692b]{column-gap:.5rem}}.menu+.translations[data-v-4706692b]:before,.menu+.appearance[data-v-4706692b]:before,.menu+.social-links[data-v-4706692b]:before,.translations+.appearance[data-v-4706692b]:before,.appearance+.social-links[data-v-4706692b]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-4706692b]:before,.translations+.appearance[data-v-4706692b]:before{margin-right:16px}.appearance+.social-links[data-v-4706692b]:before{margin-left:16px}.social-links[data-v-4706692b]{margin-right:-8px}.divider[data-v-4706692b]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-4706692b]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-4706692b]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-4706692b]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-4706692b]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-4706692b]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-4706692b]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-e3518e41]{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-e3518e41]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-33292676]{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-33292676]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-2d8e3881]{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-2d8e3881]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-7ef2022d]{display:block}.title[data-v-7ef2022d]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-4671a8b5]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-4671a8b5]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-4671a8b5]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-4671a8b5]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-4671a8b5]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-4671a8b5]{transform:rotate(45deg)}.button[data-v-4671a8b5]{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-4671a8b5]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-4671a8b5]{transition:transform .25s}.group[data-v-4671a8b5]:first-child{padding-top:0}.group+.group[data-v-4671a8b5],.group+.item[data-v-4671a8b5]{padding-top:4px}.VPNavScreenTranslations[data-v-4cc74b28]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-4cc74b28]{height:auto}.title[data-v-4cc74b28]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-4cc74b28]{font-size:16px}.icon.lang[data-v-4cc74b28]{margin-right:8px}.icon.chevron[data-v-4cc74b28]{margin-left:4px}.list[data-v-4cc74b28]{padding:4px 0 0 24px}.link[data-v-4cc74b28]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-27670706]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));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 .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-27670706],.VPNavScreen.fade-leave-active[data-v-27670706]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-27670706],.VPNavScreen.fade-leave-active .container[data-v-27670706]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-27670706],.VPNavScreen.fade-leave-to[data-v-27670706]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-27670706],.VPNavScreen.fade-leave-to .container[data-v-27670706]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-27670706]{display:none}}.container[data-v-27670706]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-27670706],.menu+.appearance[data-v-27670706],.translations+.appearance[data-v-27670706]{margin-top:24px}.menu+.social-links[data-v-27670706]{margin-top:16px}.appearance+.social-links[data-v-27670706]{margin-top:16px}.VPNav[data-v-7697d12e]{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-7697d12e]{position:fixed}}.VPSidebarItem.level-0[data-v-4e965525]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-4e965525]{padding-bottom:10px}.item[data-v-4e965525]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-4e965525]{cursor:pointer}.indicator[data-v-4e965525]{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-4e965525],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-4e965525],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-4e965525],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-4e965525]{background-color:var(--vp-c-brand-1)}.link[data-v-4e965525]{display:flex;align-items:center;flex-grow:1}.text[data-v-4e965525]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-4e965525]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-4e965525],.VPSidebarItem.level-2 .text[data-v-4e965525],.VPSidebarItem.level-3 .text[data-v-4e965525],.VPSidebarItem.level-4 .text[data-v-4e965525],.VPSidebarItem.level-5 .text[data-v-4e965525]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-4e965525],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-4e965525],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-4e965525],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-4e965525],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-4e965525],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-4e965525]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-4e965525],.VPSidebarItem.level-1.has-active>.item>.text[data-v-4e965525],.VPSidebarItem.level-2.has-active>.item>.text[data-v-4e965525],.VPSidebarItem.level-3.has-active>.item>.text[data-v-4e965525],.VPSidebarItem.level-4.has-active>.item>.text[data-v-4e965525],.VPSidebarItem.level-5.has-active>.item>.text[data-v-4e965525],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-4e965525],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-4e965525],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-4e965525],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-4e965525],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-4e965525],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-4e965525]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-4e965525],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-4e965525],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-4e965525],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-4e965525],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-4e965525],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-4e965525]{color:var(--vp-c-brand-1)}.caret[data-v-4e965525]{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-4e965525]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-4e965525]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-4e965525]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-4e965525]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-4e965525],.VPSidebarItem.level-2 .items[data-v-4e965525],.VPSidebarItem.level-3 .items[data-v-4e965525],.VPSidebarItem.level-4 .items[data-v-4e965525],.VPSidebarItem.level-5 .items[data-v-4e965525]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-4e965525]{display:none}.no-transition[data-v-091a4ebd] .caret-icon{transition:none}.group+.group[data-v-091a4ebd]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-091a4ebd]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-4cb49b8f]{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-4cb49b8f]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-4cb49b8f]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-4cb49b8f]{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-4cb49b8f]{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-4cb49b8f]{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-4cb49b8f]{outline:0}.VPSkipLink[data-v-bbad7db3]{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-bbad7db3]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-bbad7db3]{top:14px;left:16px}}.Layout[data-v-7fa59262]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-2d6b9597]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-2d6b9597]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-2d6b9597]{margin:128px 0}}.VPHomeSponsors[data-v-2d6b9597]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-2d6b9597]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-2d6b9597]{padding:0 64px}}.container[data-v-2d6b9597]{margin:0 auto;max-width:1152px}.love[data-v-2d6b9597]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-2d6b9597]{display:inline-block}.message[data-v-2d6b9597]{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-2d6b9597]{padding-top:32px}.action[data-v-2d6b9597]{padding-top:40px;text-align:center}.VPTeamPage[data-v-aede8e30]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-aede8e30]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-aede8e30-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-aede8e30-s],.VPTeamMembers+.VPTeamPageSection[data-v-aede8e30-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-aede8e30-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-aede8e30-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-aede8e30-s],.VPTeamMembers+.VPTeamPageSection[data-v-aede8e30-s]{margin-top:96px}}.VPTeamMembers[data-v-aede8e30-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-aede8e30-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-aede8e30-s]{padding:0 64px}}.VPTeamPageTitle[data-v-789c59d8]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-789c59d8]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-789c59d8]{padding:80px 64px 48px}}.title[data-v-789c59d8]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-789c59d8]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-789c59d8]{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-789c59d8]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-7282e979]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-7282e979]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-7282e979]{padding:0 64px}}.title[data-v-7282e979]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-7282e979]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-7282e979]{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-7282e979]{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-7282e979]{padding-top:40px}.VPTeamMembersItem[data-v-5786018f]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-5786018f]{padding:32px}.VPTeamMembersItem.small .data[data-v-5786018f]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-5786018f]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-5786018f]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-5786018f]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-5786018f]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-5786018f]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-5786018f]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-5786018f]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-5786018f]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-5786018f]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-5786018f]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-5786018f]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-5786018f]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-5786018f]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-5786018f]{text-align:center}.avatar[data-v-5786018f]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-5786018f]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-5786018f]{margin:0;font-weight:600}.affiliation[data-v-5786018f]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-5786018f]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-5786018f]:hover{color:var(--vp-c-brand-1)}.desc[data-v-5786018f]{margin:0 auto}.desc[data-v-5786018f] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-5786018f]{display:flex;justify-content:center;height:56px}.sp-link[data-v-5786018f]{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-5786018f]:hover,.sp .sp-link.link[data-v-5786018f]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-5786018f]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-d034ca84]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-d034ca84]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-d034ca84]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-d034ca84]{max-width:876px}.VPTeamMembers.medium .container[data-v-d034ca84]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-d034ca84]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-d034ca84]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-d034ca84]{max-width:760px}.container[data-v-d034ca84]{display:grid;gap:24px;margin:0 auto;max-width:1152px}@font-face{font-family:Fira Code;src:url(/assets/FiraCode-Light.fY4l71KA.woff2) format("woff2"),url(/assets/FiraCode-Light.B1hbeU4w.woff) format("woff");font-weight:300;font-style:normal}@font-face{font-family:Fira Code;src:url(/assets/FiraCode-Regular.jAL9VymT.woff2) format("woff2"),url(/assets/FiraCode-Regular.B8-kG0vS.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Fira Code;src:url(/assets/FiraCode-Medium.-YTCSZkP.woff2) format("woff2"),url(/assets/FiraCode-Medium.B7pixCnj.woff) format("woff");font-weight:500;font-style:normal}@font-face{font-family:Fira Code;src:url(/assets/FiraCode-SemiBold.BiAOBdH0.woff2) format("woff2"),url(/assets/FiraCode-SemiBold.C_qsBl7p.woff) format("woff");font-weight:600;font-style:normal}@font-face{font-family:Fira Code;src:url(/assets/FiraCode-Bold.DzhvDiv4.woff2) format("woff2"),url(/assets/FiraCode-Bold.DeMYoWdo.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Fira Code VF;src:url(/assets/FiraCode-VF.Bc8wnsZt.woff2) format("woff2-variations"),url(/assets/FiraCode-VF.B-gPkBGS.woff) format("woff-variations");font-weight:300 700;font-style:normal}:root{--vp-sidebar-width: 294px}:root{--vp-font-family-mono: ui-monospace, SFMono-Regular, "Fira Code", "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #67c23a 30%, #a2dc85 );--vp-home-hero-image-background-image: linear-gradient( -45deg, #67c23a 50%, #a2dc85 50% );--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}.VPFeature{position:relative}.VPFeature .icon{margin-bottom:8px}.VPFeature .title{position:absolute;top:36px;left:85px;font-size:18px}.custom-block.details summary{cursor:pointer}.github-release-tag{font-size:14px;font-weight:700;padding:4px 6px;margin-left:6px;background:var(--vp-c-brand);color:#fff;border-radius:10px;vertical-align:middle}.pure-tag{position:relative;left:-86px;top:-30px;display:inline-block;line-height:1;background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;font-size:18px;transform-origin:bottom center;animation:swing 2s ease infinite}@media (max-width: 960px){.pure-tag{display:none}}@keyframes swing{20%{transform:rotate3d(0,0,1,15deg)}40%{transform:rotate3d(0,0,1,-10deg)}60%{transform:rotate3d(0,0,1,5deg)}80%{transform:rotate3d(0,0,1,-5deg)}to{transform:rotate3d(0,0,1,0)}}.medium-zoom-overlay{z-index:30}.medium-zoom-image{z-index:31}.VPBadge.pro{border-color:#daa520;color:#333;background-color:#e7c605}a.cta{text-align:center;border-radius:8px}a.cta:hover{border-color:var(--vp-c-brand);background-color:var(--c-bg-accent)}a.cta.buy{border-color:#daa520}.banner-wrapper[data-v-3cd5c07b]{position:fixed;top:0;bottom:0;left:0;right:0;z-index:61;width:100%;height:100%;max-height:40px;background:linear-gradient(45deg,#0a2b4e,#835ec2);overflow:hidden;margin:0;transition:background-size .25s cubic-bezier(.39,.575,.565,1)}#banner[data-v-3cd5c07b]{position:relative;width:100%;height:100%;text-decoration:none;color:#fff;display:flex;justify-content:center;align-items:center;overflow:hidden;cursor:pointer}#banner .content[data-v-3cd5c07b]{margin:0;padding:0;font-weight:700;font-size:18px;letter-spacing:2px;text-align:center;background:linear-gradient(145deg,#c3ffac,#86ec87);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}#banner-close[data-v-3cd5c07b]{position:absolute;width:40px;height:100%;top:0;right:0;color:#fff;font-size:20px;font-weight:700;display:flex;align-items:center;justify-content:center}#banner-close:hover>.close[data-v-3cd5c07b]{color:#86ec87}#banner-close>.close[data-v-3cd5c07b]{font-size:20px;font-weight:600}@media screen and (max-width: 767px){#banner .content[data-v-3cd5c07b]{font-size:14px}}html.mirror-site-menu-fixed{--vp-layout-top-height: 40px}html.mirror-site-menu-fixed .VPNav,html.mirror-site-menu-fixed .VPSidebar{top:40px}html.mirror-site-menu-fixed{scroll-padding-top:104px;overflow:auto}html.mirror-site-menu-fixed{margin-top:42px}@media (max-width: 960px){html.mirror-site-menu-fixed .VPNav,html.mirror-site-menu-fixed .VPSidebar{top:0}}.sponsors-aside-text[data-v-d8aff6a3]{color:var(--vp-c-text-3);display:block;margin:3em 0 1em;font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.4px}.sponsor-container[data-v-d8aff6a3]{--max-width: 100%;display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--max-width),1fr));column-gap:4px}.sponsor-item[data-v-d8aff6a3]{margin:2px 0;background-color:var(--vp-c-bg-soft);display:flex;justify-content:center;align-items:center;gap:12px;padding-inline:20px;border-radius:2px;transition:background-color .2s ease;height:calc(var(--max-width) / 2 - 6px);font-size:13px}.sponsor-item.action[data-v-d8aff6a3]{font-size:11px;color:var(--vt-c-text-3)}.sponsor-item img[data-v-d8aff6a3]{max-width:calc(var(--max-width) - 30px);max-height:calc(var(--max-width) / 2 - 20px)}.sponsor-item .info[data-v-d8aff6a3]{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:4px}.sponsor-item .info .main[data-v-d8aff6a3]{font-weight:700;font-size:14px;line-height:1.5;color:var(--vp-c-text-1)}.sponsor-item .info .sub[data-v-d8aff6a3]{font-size:12px;line-height:1.2;color:var(--vp-c-text-3)}.special .sponsor-item[data-v-d8aff6a3]{height:160px}.special .sponsor-item img[data-v-d8aff6a3]{max-width:300px;max-height:150px}.dark .aside .sponsor-item[data-v-d8aff6a3],.dark .landing .sponsor-item[data-v-d8aff6a3]{background-color:var(--vp-c-gray-soft)}.aside .sponsor-item img[data-v-d8aff6a3],.landing .sponsor-item img[data-v-d8aff6a3]{transition:filter .2s ease}.dark .aside .sponsor-item img[data-v-d8aff6a3],.dark .landing .sponsor-item img[data-v-d8aff6a3]{filter:grayscale(1) invert(1)}.dark .sponsor-item:hover img[data-v-d8aff6a3]{filter:none}.sponsor-container.platinum.aside[data-v-d8aff6a3]{--max-width: 110px;column-gap:1px}.aside .sponsor-item[data-v-d8aff6a3]{margin:1px 0}.aside .special .sponsor-item[data-v-d8aff6a3]{width:100%;height:70px}.aside .special .sponsor-item img[data-v-d8aff6a3]{max-width:120px;max-height:36px}.home-preview-block[data-v-f619d5b7]{padding:0 24px}.home-preview[data-v-f619d5b7]{max-width:1152px;margin:50px auto 0}.home-preview h2[data-v-f619d5b7]{font-size:24px;font-weight:700;margin-bottom:20px;text-align:center}.home-preview .items[data-v-f619d5b7]{display:flex;flex-wrap:wrap;margin:-8px}.home-preview .items .item[data-v-f619d5b7]{width:100%;padding:8px}.home-preview .items .item p[data-v-f619d5b7]{padding:24px;border-radius:12px;background-color:var(--vp-c-bg-soft)}.home-preview .items .item p[data-v-f619d5b7] img{border:1px solid var(--vp-c-divider)}@media (min-width: 640px){.home-preview-block[data-v-f619d5b7]{padding:0 48px}.home-preview .items .item[data-v-f619d5b7]{width:50%}}@media (min-width: 960px){.home-preview-block[data-v-f619d5b7]{padding:0 64px}.home-preview .items .item[data-v-f619d5b7]{width:calc(100% / 3)}}.VPLocalSearchBox[data-v-ea4c1b97]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-ea4c1b97]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-ea4c1b97]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-ea4c1b97]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-ea4c1b97]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-ea4c1b97]{padding:0 8px}}.search-bar[data-v-ea4c1b97]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-ea4c1b97]{display:block;font-size:18px}.navigate-icon[data-v-ea4c1b97]{display:block;font-size:14px}.search-icon[data-v-ea4c1b97]{margin:8px}@media (max-width: 767px){.search-icon[data-v-ea4c1b97]{display:none}}.search-input[data-v-ea4c1b97]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-ea4c1b97]{padding:6px 4px}}.search-actions[data-v-ea4c1b97]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-ea4c1b97]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-ea4c1b97]{display:none}}.search-actions button[data-v-ea4c1b97]{padding:8px}.search-actions button[data-v-ea4c1b97]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-ea4c1b97]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-ea4c1b97]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-ea4c1b97]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-ea4c1b97]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-ea4c1b97]{display:none}}.search-keyboard-shortcuts kbd[data-v-ea4c1b97]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-ea4c1b97]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-ea4c1b97]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-ea4c1b97]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-ea4c1b97]{margin:8px}}.titles[data-v-ea4c1b97]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-ea4c1b97]{display:flex;align-items:center;gap:4px}.title.main[data-v-ea4c1b97]{font-weight:500}.title-icon[data-v-ea4c1b97]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-ea4c1b97]{opacity:.5}.result.selected[data-v-ea4c1b97]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-ea4c1b97]{position:relative}.excerpt[data-v-ea4c1b97]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-ea4c1b97]{opacity:1}.excerpt[data-v-ea4c1b97] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-ea4c1b97] mark,.excerpt[data-v-ea4c1b97] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-ea4c1b97] .vp-code-group .tabs{display:none}.excerpt[data-v-ea4c1b97] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-ea4c1b97]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-ea4c1b97]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-ea4c1b97],.result.selected .title-icon[data-v-ea4c1b97]{color:var(--vp-c-brand-1)!important}.no-results[data-v-ea4c1b97]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-ea4c1b97]{flex:none}
diff --git a/assets/support.md.C9-w0WzG.js b/assets/support.md.C9-w0WzG.js
new file mode 100644
index 00000000..1f238373
--- /dev/null
+++ b/assets/support.md.C9-w0WzG.js
@@ -0,0 +1 @@
+import{c as a,j as e,k as t,a6 as s,o as r,g as i}from"./chunks/framework.Bhh1y9_T.js";const o=s('技术支持 基础版 在使用框架的过程中难免会遇到问题,优先推荐在仓库提交 Issue ,你可以更详细描述问题产生的操作步骤,或者提供完整的最小复现,这样做可以让更多的人参与讨论,也方便后人查阅。
专业版 购买专业版的用户可以加我微信直接和我一对一沟通使用问题。
',6),n={align:"center"},l=["src"],p=JSON.parse('{"title":"技术支持","description":"","frontmatter":{},"headers":[],"relativePath":"support.md","filePath":"support.md"}'),c={name:"support.md"},m=Object.assign(c,{setup(_){return(h,d)=>(r(),a("div",null,[o,e("p",n,[e("img",{src:t(i)("/friend-wechat.png"),width:"300"},null,8,l)])]))}});export{p as __pageData,m as default};
diff --git a/assets/support.md.C9-w0WzG.lean.js b/assets/support.md.C9-w0WzG.lean.js
new file mode 100644
index 00000000..45410c3c
--- /dev/null
+++ b/assets/support.md.C9-w0WzG.lean.js
@@ -0,0 +1 @@
+import{c as a,j as e,k as t,a6 as s,o as r,g as i}from"./chunks/framework.Bhh1y9_T.js";const o=s("",6),n={align:"center"},l=["src"],p=JSON.parse('{"title":"技术支持","description":"","frontmatter":{},"headers":[],"relativePath":"support.md","filePath":"support.md"}'),c={name:"support.md"},m=Object.assign(c,{setup(_){return(h,d)=>(r(),a("div",null,[o,e("p",n,[e("img",{src:t(i)("/friend-wechat.png"),width:"300"},null,8,l)])]))}});export{p as __pageData,m as default};
diff --git a/buy.html b/buy.html
new file mode 100644
index 00000000..5c245371
--- /dev/null
+++ b/buy.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 购买专业版 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/action-container.html b/components/action-container.html
new file mode 100644
index 00000000..8122b162
--- /dev/null
+++ b/components/action-container.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ ActionContainer 固定底部操作栏 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/auth-all.html b/components/auth-all.html
new file mode 100644
index 00000000..c73f0cd4
--- /dev/null
+++ b/components/auth-all.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ AuthAll 鉴权 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/auth.html b/components/auth.html
new file mode 100644
index 00000000..4e8db982
--- /dev/null
+++ b/components/auth.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Auth 鉴权 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/chip.html b/components/chip.html
new file mode 100644
index 00000000..7e34907f
--- /dev/null
+++ b/components/chip.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Chip 纸片 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/colorful-card.html b/components/colorful-card.html
new file mode 100644
index 00000000..9d3f3a44
--- /dev/null
+++ b/components/colorful-card.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ ColorfulCard 多彩渐变卡片 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/file-upload.html b/components/file-upload.html
new file mode 100644
index 00000000..78e989d0
--- /dev/null
+++ b/components/file-upload.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ FileUpload 文件上传 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/i18n-selector.html b/components/i18n-selector.html
new file mode 100644
index 00000000..2d2c611c
--- /dev/null
+++ b/components/i18n-selector.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ I18nSelector 国际化选择器 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/icon-picker.html b/components/icon-picker.html
new file mode 100644
index 00000000..7f052b20
--- /dev/null
+++ b/components/icon-picker.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ IconPicker 图标选择器 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/image-preview.html b/components/image-preview.html
new file mode 100644
index 00000000..c28c232e
--- /dev/null
+++ b/components/image-preview.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ ImagePreview 图片预览 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/image-upload.html b/components/image-upload.html
new file mode 100644
index 00000000..b78ee4f7
--- /dev/null
+++ b/components/image-upload.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ ImageUpload 单图上传 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/images-upload.html b/components/images-upload.html
new file mode 100644
index 00000000..437bf245
--- /dev/null
+++ b/components/images-upload.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ ImagesUpload 多图上传 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/index.html b/components/index.html
new file mode 100644
index 00000000..f5432940
--- /dev/null
+++ b/components/index.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+ 介绍 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/page-header.html b/components/page-header.html
new file mode 100644
index 00000000..4371c65e
--- /dev/null
+++ b/components/page-header.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ PageHeader 页头 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/page-main.html b/components/page-main.html
new file mode 100644
index 00000000..d2b819ba
--- /dev/null
+++ b/components/page-main.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ PageMain 内容块 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/pcas-cascader.html b/components/pcas-cascader.html
new file mode 100644
index 00000000..2fabddad
--- /dev/null
+++ b/components/pcas-cascader.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ PcasCascader 省市区街道联动 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/search-bar.html b/components/search-bar.html
new file mode 100644
index 00000000..0505f803
--- /dev/null
+++ b/components/search-bar.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ SearchBar 搜索面板 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/sparkline.html b/components/sparkline.html
new file mode 100644
index 00000000..627d38e8
--- /dev/null
+++ b/components/sparkline.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Sparkline 迷你图 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/storage-box.html b/components/storage-box.html
new file mode 100644
index 00000000..fbd3bd6f
--- /dev/null
+++ b/components/storage-box.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ StorageBox 储存箱 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/svg-icon.html b/components/svg-icon.html
new file mode 100644
index 00000000..e198d63e
--- /dev/null
+++ b/components/svg-icon.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ SvgIcon SVG图标 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/trend.html b/components/trend.html
new file mode 100644
index 00000000..70ba3212
--- /dev/null
+++ b/components/trend.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Trend 趋势标记 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/copyright.png b/copyright.png
new file mode 100644
index 00000000..c7b9ff53
Binary files /dev/null and b/copyright.png differ
diff --git a/download.png b/download.png
new file mode 100644
index 00000000..7f532eee
Binary files /dev/null and b/download.png differ
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 00000000..c30ac95c
Binary files /dev/null and b/favicon.ico differ
diff --git a/favorites.png b/favorites.png
new file mode 100644
index 00000000..f54b3d8b
Binary files /dev/null and b/favorites.png differ
diff --git a/font1.png b/font1.png
new file mode 100644
index 00000000..7a72fdc5
Binary files /dev/null and b/font1.png differ
diff --git a/font2.png b/font2.png
new file mode 100644
index 00000000..e53aa5bb
Binary files /dev/null and b/font2.png differ
diff --git a/friend-wechat.png b/friend-wechat.png
new file mode 100644
index 00000000..0832dfd6
Binary files /dev/null and b/friend-wechat.png differ
diff --git a/guide/api.html b/guide/api.html
new file mode 100644
index 00000000..9f9fce61
--- /dev/null
+++ b/guide/api.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+ 常用 API | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/axios.html b/guide/axios.html
new file mode 100644
index 00000000..f611bb91
--- /dev/null
+++ b/guide/axios.html
@@ -0,0 +1,130 @@
+
+
+
+
+
+ 与服务端交互 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/build.html b/guide/build.html
new file mode 100644
index 00000000..4b83ef89
--- /dev/null
+++ b/guide/build.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+ 构建与预览 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/changelog.html b/guide/changelog.html
new file mode 100644
index 00000000..75c9fc9a
--- /dev/null
+++ b/guide/changelog.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+ 更新日志 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/coding-standard.html b/guide/coding-standard.html
new file mode 100644
index 00000000..fdb9c40e
--- /dev/null
+++ b/guide/coding-standard.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+ 代码规范 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/components.html b/guide/components.html
new file mode 100644
index 00000000..d7fa367f
--- /dev/null
+++ b/guide/components.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+ 介绍 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/configure.html b/guide/configure.html
new file mode 100644
index 00000000..6ec740d3
--- /dev/null
+++ b/guide/configure.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+ 配置 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/copyright.html b/guide/copyright.html
new file mode 100644
index 00000000..82ebf7c0
--- /dev/null
+++ b/guide/copyright.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+ 版权信息 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/error-log.html b/guide/error-log.html
new file mode 100644
index 00000000..b56fffc2
--- /dev/null
+++ b/guide/error-log.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+ 错误日志 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/favorites.html b/guide/favorites.html
new file mode 100644
index 00000000..d9c8c523
--- /dev/null
+++ b/guide/favorites.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+ 收藏夹 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/font.html b/guide/font.html
new file mode 100644
index 00000000..b4eaf26a
--- /dev/null
+++ b/guide/font.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+ 自定义字体 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/i18n.html b/guide/i18n.html
new file mode 100644
index 00000000..54823f52
--- /dev/null
+++ b/guide/i18n.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+ 国际化 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/intro.html b/guide/intro.html
new file mode 100644
index 00000000..6a5ac53e
--- /dev/null
+++ b/guide/intro.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 文档说明 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/layout.html b/guide/layout.html
new file mode 100644
index 00000000..767d2381
--- /dev/null
+++ b/guide/layout.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+ 布局 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/login.html b/guide/login.html
new file mode 100644
index 00000000..db89bee4
--- /dev/null
+++ b/guide/login.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 登录 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/menu.html b/guide/menu.html
new file mode 100644
index 00000000..9449ac2c
--- /dev/null
+++ b/guide/menu.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+ 导航 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/permission.html b/guide/permission.html
new file mode 100644
index 00000000..23a57121
--- /dev/null
+++ b/guide/permission.html
@@ -0,0 +1,76 @@
+
+
+
+
+
+ 权限 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/plop-module.html b/guide/plop-module.html
new file mode 100644
index 00000000..21b69e03
--- /dev/null
+++ b/guide/plop-module.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+ 标准模块 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/plop.html b/guide/plop.html
new file mode 100644
index 00000000..d7f1df85
--- /dev/null
+++ b/guide/plop.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 代码文件自动生成 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/preferences.html b/guide/preferences.html
new file mode 100644
index 00000000..32690de4
--- /dev/null
+++ b/guide/preferences.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+ 用户偏好设置 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/q-a.html b/guide/q-a.html
new file mode 100644
index 00000000..9016c2e1
--- /dev/null
+++ b/guide/q-a.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+ 常见问题 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/ready.html b/guide/ready.html
new file mode 100644
index 00000000..bf2c14a4
--- /dev/null
+++ b/guide/ready.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+ 准备工作 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/replace-to-antd.html b/guide/replace-to-antd.html
new file mode 100644
index 00000000..2e19b208
--- /dev/null
+++ b/guide/replace-to-antd.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+ 替换为 Ant Design Vue | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/replace-to-arco.html b/guide/replace-to-arco.html
new file mode 100644
index 00000000..c85df5db
--- /dev/null
+++ b/guide/replace-to-arco.html
@@ -0,0 +1,174 @@
+
+
+
+
+
+ 替换为 Arco Design Vue | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/replace-to-idux.html b/guide/replace-to-idux.html
new file mode 100644
index 00000000..fc6fd6c3
--- /dev/null
+++ b/guide/replace-to-idux.html
@@ -0,0 +1,134 @@
+
+
+
+
+
+ 替换为 iDux | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/replace-to-naive.html b/guide/replace-to-naive.html
new file mode 100644
index 00000000..8fd83635
--- /dev/null
+++ b/guide/replace-to-naive.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+ 替换为 Naive UI | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/replace-to-tdesign.html b/guide/replace-to-tdesign.html
new file mode 100644
index 00000000..0c9c71bd
--- /dev/null
+++ b/guide/replace-to-tdesign.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+ 替换为 TDesign | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/replace-to-vexip.html b/guide/replace-to-vexip.html
new file mode 100644
index 00000000..58500286
--- /dev/null
+++ b/guide/replace-to-vexip.html
@@ -0,0 +1,122 @@
+
+
+
+
+
+ 替换为 Vexip UI | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/resources.html b/guide/resources.html
new file mode 100644
index 00000000..10834923
--- /dev/null
+++ b/guide/resources.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+ 资源 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/router.html b/guide/router.html
new file mode 100644
index 00000000..eaaa4b51
--- /dev/null
+++ b/guide/router.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 路由 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/rtl.html b/guide/rtl.html
new file mode 100644
index 00000000..2d5b2b1f
--- /dev/null
+++ b/guide/rtl.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+ RTL 模式 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/start.html b/guide/start.html
new file mode 100644
index 00000000..67c44fe8
--- /dev/null
+++ b/guide/start.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+ 开始 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/storage.html b/guide/storage.html
new file mode 100644
index 00000000..1e2c0ccc
--- /dev/null
+++ b/guide/storage.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+ 私有 Storage 数据 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/store.html b/guide/store.html
new file mode 100644
index 00000000..f5f82726
--- /dev/null
+++ b/guide/store.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+ 全局状态管理 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/svg-icon.html b/guide/svg-icon.html
new file mode 100644
index 00000000..8006e866
--- /dev/null
+++ b/guide/svg-icon.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+ 图标 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/theme.html b/guide/theme.html
new file mode 100644
index 00000000..86152b00
--- /dev/null
+++ b/guide/theme.html
@@ -0,0 +1,269 @@
+
+
+
+
+
+ 主题 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/toolbar.html b/guide/toolbar.html
new file mode 100644
index 00000000..e00d3ede
--- /dev/null
+++ b/guide/toolbar.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+ 工具栏 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/upgrade.html b/guide/upgrade.html
new file mode 100644
index 00000000..e3521aaf
--- /dev/null
+++ b/guide/upgrade.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 框架更新 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/vue3-composition-api.html b/guide/vue3-composition-api.html
new file mode 100644
index 00000000..a380ad36
--- /dev/null
+++ b/guide/vue3-composition-api.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+ 使用 Composition API 开发 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/watermark.html b/guide/watermark.html
new file mode 100644
index 00000000..5fd5592a
--- /dev/null
+++ b/guide/watermark.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+ 页面水印 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/why.html b/guide/why.html
new file mode 100644
index 00000000..3fe81f2a
--- /dev/null
+++ b/guide/why.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 为什么选择我们 ? | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/window.html b/guide/window.html
new file mode 100644
index 00000000..dd51b8d1
--- /dev/null
+++ b/guide/window.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 窗口 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hashmap.json b/hashmap.json
new file mode 100644
index 00000000..0ce442fe
--- /dev/null
+++ b/hashmap.json
@@ -0,0 +1 @@
+{"buy.md":"BpDcuvJD","components_action-container.md":"C6ADMMHn","components_auth-all.md":"CC4RPLIO","components_auth.md":"DJiNZXkN","components_chip.md":"DS5QQKp9","components_colorful-card.md":"C17Jec7Q","components_file-upload.md":"D7PBngz1","components_i18n-selector.md":"hlvQr2K-","components_icon-picker.md":"CDiXSf0R","components_image-preview.md":"O75IkQyb","components_image-upload.md":"D7rbM4Gb","components_images-upload.md":"RSnuNose","components_index.md":"IDIJOnXK","components_page-header.md":"DN9_VgJv","components_page-main.md":"t28_56LQ","components_pcas-cascader.md":"BEb_Ujl_","components_search-bar.md":"DyxwWVs4","components_sparkline.md":"B0Y5wjqT","components_storage-box.md":"DkmDy-9N","components_svg-icon.md":"BXB-K3yu","components_trend.md":"DxxgyeHY","guide_api.md":"UJgy_6go","guide_axios.md":"BhXyFrum","guide_build.md":"-GzyVqA3","guide_changelog.md":"DCflyckv","guide_coding-standard.md":"BOxNKpOC","guide_components.md":"DKFLed6e","guide_configure.md":"DGLgmmVa","guide_copyright.md":"DFx3AWRC","guide_error-log.md":"CtmjfpdD","guide_favorites.md":"CmABV1kw","guide_font.md":"BA3rgSN5","guide_i18n.md":"DNvdKeNF","guide_intro.md":"sO_pu713","guide_layout.md":"CtDYcY0J","guide_login.md":"BgAQ9xap","guide_menu.md":"DjhhAq8f","guide_permission.md":"Bi4TpiJ3","guide_plop-module.md":"DvVVYnkY","guide_plop.md":"B0BZJ5As","guide_preferences.md":"DClypLUq","guide_q-a.md":"DjjcUkzh","guide_ready.md":"CJkkBV7W","guide_replace-to-antd.md":"BaHAuChd","guide_replace-to-arco.md":"DNOX62fS","guide_replace-to-idux.md":"h73pcns6","guide_replace-to-naive.md":"BFtvI_Qz","guide_replace-to-tdesign.md":"B7ZFdjJZ","guide_replace-to-vexip.md":"fMhR5uan","guide_resources.md":"lnq0yWPQ","guide_router.md":"Ct6hq6g7","guide_rtl.md":"Cb10KXRS","guide_start.md":"BIHeICwp","guide_storage.md":"D8cMKo8C","guide_store.md":"DBQc3j1R","guide_svg-icon.md":"Bx5n5Xsc","guide_theme.md":"BLSJm2vH","guide_toolbar.md":"DcqYXkK3","guide_upgrade.md":"eXeFHhaS","guide_vue3-composition-api.md":"D_pqF34C","guide_watermark.md":"Bfkh7IZ2","guide_why.md":"DBObFHbq","guide_window.md":"s_rE98aQ","index.md":"Bg6s1Hx0","support.md":"C9-w0WzG"}
diff --git a/i18n-ally.png b/i18n-ally.png
new file mode 100644
index 00000000..b46c38c1
Binary files /dev/null and b/i18n-ally.png differ
diff --git a/icones1.png b/icones1.png
new file mode 100644
index 00000000..8f35bc50
Binary files /dev/null and b/icones1.png differ
diff --git a/icones2.png b/icones2.png
new file mode 100644
index 00000000..72f13e58
Binary files /dev/null and b/icones2.png differ
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..36ff4067
--- /dev/null
+++ b/index.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ One-step-admin | 一款 Vue 中后台管理系统框架
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Skip to content One-step-admin 巧妙的管理系统框架
快人一步,给你不一样的使用体验
💪
先进的技术栈 Vite + Vue3 + Pinia + TypeScript ,采用业内先进的技术栈,使框架始终保持新鲜
🖥️
高效操作 采用全新交互方式,大幅提升操作效率,更好的利用高分屏/带鱼屏显示器
🎨
风格百变 通过布局与主题组合搭配,可实现数百种不同风格的界面
🗺️
多功能导航栏 支持前/后端生成导航栏,轻松实现导航嵌套、外链、标记、权限等功能
🔑
全场景权限验证 内置鉴权组件、鉴权指令和鉴权函数,真正实现各种场景下的权限验证
🌐
面向国际 内置业内通用国际化解决方案,通过简单配置实现多国语言切换
📦
丰富的组件 内置常用组件,提高开发效率;同时提供组件快速生成工具
📃
丰富的业务页面 通过真实场景及真实需求,沉淀出数十个业务应用的静态页面,方便开发人员直接使用
+
+
+
+
\ No newline at end of file
diff --git a/intro-1.gif b/intro-1.gif
new file mode 100644
index 00000000..5825fac0
Binary files /dev/null and b/intro-1.gif differ
diff --git a/intro-2.gif b/intro-2.gif
new file mode 100644
index 00000000..579e7aaf
Binary files /dev/null and b/intro-2.gif differ
diff --git a/intro-3.gif b/intro-3.gif
new file mode 100644
index 00000000..672e9ac4
Binary files /dev/null and b/intro-3.gif differ
diff --git a/intro-4.gif b/intro-4.gif
new file mode 100644
index 00000000..44fd17eb
Binary files /dev/null and b/intro-4.gif differ
diff --git a/intro-5.gif b/intro-5.gif
new file mode 100644
index 00000000..1089cac3
Binary files /dev/null and b/intro-5.gif differ
diff --git a/logo.png b/logo.png
new file mode 100644
index 00000000..7bfa7dbd
Binary files /dev/null and b/logo.png differ
diff --git a/menu-isrounded.png b/menu-isrounded.png
new file mode 100644
index 00000000..4969e495
Binary files /dev/null and b/menu-isrounded.png differ
diff --git a/menu-mode-head-panel.png b/menu-mode-head-panel.png
new file mode 100644
index 00000000..b66290ea
Binary files /dev/null and b/menu-mode-head-panel.png differ
diff --git a/menu-mode-head.png b/menu-mode-head.png
new file mode 100644
index 00000000..9b6de2d5
Binary files /dev/null and b/menu-mode-head.png differ
diff --git a/menu-mode-only-head.png b/menu-mode-only-head.png
new file mode 100644
index 00000000..68b2e789
Binary files /dev/null and b/menu-mode-only-head.png differ
diff --git a/menu-mode-only-side.png b/menu-mode-only-side.png
new file mode 100644
index 00000000..9b3a3b10
Binary files /dev/null and b/menu-mode-only-side.png differ
diff --git a/menu-mode-side-panel.png b/menu-mode-side-panel.png
new file mode 100644
index 00000000..c76c0488
Binary files /dev/null and b/menu-mode-side-panel.png differ
diff --git a/menu-mode-side.png b/menu-mode-side.png
new file mode 100644
index 00000000..9e7dd585
Binary files /dev/null and b/menu-mode-side.png differ
diff --git a/menu-mode-single.png b/menu-mode-single.png
new file mode 100644
index 00000000..5ee5c2b0
Binary files /dev/null and b/menu-mode-single.png differ
diff --git a/menu-style.png b/menu-style.png
new file mode 100644
index 00000000..4a64ab37
Binary files /dev/null and b/menu-style.png differ
diff --git a/module1.gif b/module1.gif
new file mode 100644
index 00000000..34d9005d
Binary files /dev/null and b/module1.gif differ
diff --git a/module2.gif b/module2.gif
new file mode 100644
index 00000000..ecdf104e
Binary files /dev/null and b/module2.gif differ
diff --git a/plop-component.gif b/plop-component.gif
new file mode 100644
index 00000000..b3940bac
Binary files /dev/null and b/plop-component.gif differ
diff --git a/plop-mock.gif b/plop-mock.gif
new file mode 100644
index 00000000..ce919aa5
Binary files /dev/null and b/plop-mock.gif differ
diff --git a/plop-module.gif b/plop-module.gif
new file mode 100644
index 00000000..c633ee30
Binary files /dev/null and b/plop-module.gif differ
diff --git a/plop-page.gif b/plop-page.gif
new file mode 100644
index 00000000..34c80e9b
Binary files /dev/null and b/plop-page.gif differ
diff --git a/plop-store.gif b/plop-store.gif
new file mode 100644
index 00000000..67604674
Binary files /dev/null and b/plop-store.gif differ
diff --git a/preferences.png b/preferences.png
new file mode 100644
index 00000000..ce2ebe93
Binary files /dev/null and b/preferences.png differ
diff --git a/preview1.png b/preview1.png
new file mode 100644
index 00000000..09889d13
Binary files /dev/null and b/preview1.png differ
diff --git a/preview2.png b/preview2.png
new file mode 100644
index 00000000..839fc75b
Binary files /dev/null and b/preview2.png differ
diff --git a/preview3.png b/preview3.png
new file mode 100644
index 00000000..b585f595
Binary files /dev/null and b/preview3.png differ
diff --git a/preview4.png b/preview4.png
new file mode 100644
index 00000000..3c31f4b4
Binary files /dev/null and b/preview4.png differ
diff --git a/preview5.png b/preview5.png
new file mode 100644
index 00000000..a373a161
Binary files /dev/null and b/preview5.png differ
diff --git a/preview6.png b/preview6.png
new file mode 100644
index 00000000..9a863100
Binary files /dev/null and b/preview6.png differ
diff --git a/qa1.png b/qa1.png
new file mode 100644
index 00000000..72663512
Binary files /dev/null and b/qa1.png differ
diff --git a/qrcode-alipay-699.png b/qrcode-alipay-699.png
new file mode 100644
index 00000000..0aa9a550
Binary files /dev/null and b/qrcode-alipay-699.png differ
diff --git a/qrcode-alipay-799.png b/qrcode-alipay-799.png
new file mode 100644
index 00000000..84fad466
Binary files /dev/null and b/qrcode-alipay-799.png differ
diff --git a/qrcode-alipay-all.png b/qrcode-alipay-all.png
new file mode 100644
index 00000000..e230c9cc
Binary files /dev/null and b/qrcode-alipay-all.png differ
diff --git a/qrcode-alipay-hongbao.jpg b/qrcode-alipay-hongbao.jpg
new file mode 100644
index 00000000..735045c0
Binary files /dev/null and b/qrcode-alipay-hongbao.jpg differ
diff --git a/qrcode-wechat-699.png b/qrcode-wechat-699.png
new file mode 100644
index 00000000..91c5ae0f
Binary files /dev/null and b/qrcode-wechat-699.png differ
diff --git a/qrcode-wechat-799.png b/qrcode-wechat-799.png
new file mode 100644
index 00000000..2cb4c260
Binary files /dev/null and b/qrcode-wechat-799.png differ
diff --git a/qrcode-wechat-all.png b/qrcode-wechat-all.png
new file mode 100644
index 00000000..ec227854
Binary files /dev/null and b/qrcode-wechat-all.png differ
diff --git a/rtl.png b/rtl.png
new file mode 100644
index 00000000..0201aef0
Binary files /dev/null and b/rtl.png differ
diff --git a/settings.png b/settings.png
new file mode 100644
index 00000000..16d500b1
Binary files /dev/null and b/settings.png differ
diff --git a/support.html b/support.html
new file mode 100644
index 00000000..e10e9c0a
--- /dev/null
+++ b/support.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 技术支持 | One-step-admin 官方文档
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tencent13317398997609913126.txt b/tencent13317398997609913126.txt
new file mode 100644
index 00000000..d73382d6
--- /dev/null
+++ b/tencent13317398997609913126.txt
@@ -0,0 +1 @@
+15436924157164566991
\ No newline at end of file
diff --git a/theme.gif b/theme.gif
new file mode 100644
index 00000000..c879b1b0
Binary files /dev/null and b/theme.gif differ
diff --git a/toolbar.png b/toolbar.png
new file mode 100644
index 00000000..d41e8f1a
Binary files /dev/null and b/toolbar.png differ
diff --git a/ui-antd.png b/ui-antd.png
new file mode 100644
index 00000000..5a7f27f8
Binary files /dev/null and b/ui-antd.png differ
diff --git a/ui-arco.png b/ui-arco.png
new file mode 100644
index 00000000..ad963d5d
Binary files /dev/null and b/ui-arco.png differ
diff --git a/ui-idux.png b/ui-idux.png
new file mode 100644
index 00000000..2d341ed1
Binary files /dev/null and b/ui-idux.png differ
diff --git a/ui-naive.png b/ui-naive.png
new file mode 100644
index 00000000..fe0062b3
Binary files /dev/null and b/ui-naive.png differ
diff --git a/ui-tdesign.png b/ui-tdesign.png
new file mode 100644
index 00000000..bdf07dd3
Binary files /dev/null and b/ui-tdesign.png differ
diff --git a/ui-vexip.png b/ui-vexip.png
new file mode 100644
index 00000000..b70abab0
Binary files /dev/null and b/ui-vexip.png differ
diff --git a/vscode.png b/vscode.png
new file mode 100644
index 00000000..d6f68934
Binary files /dev/null and b/vscode.png differ
diff --git a/watermark.png b/watermark.png
new file mode 100644
index 00000000..36b9996b
Binary files /dev/null and b/watermark.png differ