-1,R[1]=P<0||L-1||V(R,"default"))&&l.push(p)}}}const a=[o,l];return ee(e)&&s.set(e,a),a}function Ps(e){return e[0]!=="$"}function Fs(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Ms(e,t){return Fs(e)===Fs(t)}function Ss(e,t){return N(t)?t.findIndex(n=>Ms(n,e)):U(t)&&Ms(t,e)?0:-1}const Wr=e=>e[0]==="_"||e==="$stable",cs=e=>N(e)?e.map(Te):[Te(e)],Qo=(e,t,n)=>{if(t._n)return t;const s=Eo((...r)=>cs(t(...r)),n);return s._c=!1,s},qr=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Wr(r))continue;const i=e[r];if(U(i))t[r]=Qo(r,i,s);else if(i!=null){const o=cs(i);t[r]=()=>o}}},Vr=(e,t)=>{const n=cs(t);e.slots.default=()=>n},Go=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=z(t),Xt(t,"_",n)):qr(t,e.slots={})}else e.slots={},t&&Vr(e,t);Xt(e.slots,bn,1)},el=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(ce(r,t),!n&&l===1&&delete r._):(i=!t.$stable,qr(t,r)),o=t}else t&&(Vr(e,t),o={default:1});if(i)for(const l in r)!Wr(l)&&!(l in o)&&delete r[l]};function zr(){return{app:null,config:{isNativeTag:xi,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let tl=0;function nl(e,t){return function(s,r=null){U(s)||(s=Object.assign({},s)),r!=null&&!ee(r)&&(r=null);const i=zr(),o=new Set;let l=!1;const f=i.app={_uid:tl++,_component:s,_props:r,_container:null,_context:i,_instance:null,version:El,get config(){return i.config},set config(a){},use(a,...d){return o.has(a)||(a&&U(a.install)?(o.add(a),a.install(f,...d)):U(a)&&(o.add(a),a(f,...d))),f},mixin(a){return i.mixins.includes(a)||i.mixins.push(a),f},component(a,d){return d?(i.components[a]=d,f):i.components[a]},directive(a,d){return d?(i.directives[a]=d,f):i.directives[a]},mount(a,d,p){if(!l){const y=le(s,r);return y.appContext=i,d&&t?t(y,a):e(y,a,p),l=!0,f._container=a,a.__vue_app__=f,us(y.component)||y.component.proxy}},unmount(){l&&(e(null,f._container),delete f._container.__vue_app__)},provide(a,d){return i.provides[a]=d,f}};return f}}function nn(e,t,n,s,r=!1){if(N(e)){e.forEach((y,R)=>nn(y,t&&(N(t)?t[R]:t),n,s,r));return}if(pt(s)&&!r)return;const i=s.shapeFlag&4?us(s.component)||s.component.proxy:s.el,o=r?null:i,{i:l,r:f}=e,a=t&&t.r,d=l.refs===te?l.refs={}:l.refs,p=l.setupState;if(a!=null&&a!==f&&(re(a)?(d[a]=null,V(p,a)&&(p[a]=null)):oe(a)&&(a.value=null)),U(f))We(f,l,12,[o,d]);else{const y=re(f),R=oe(f);if(y||R){const L=()=>{if(e.f){const P=y?V(p,f)?p[f]:d[f]:f.value;r?N(P)&&Vn(P,i):N(P)?P.includes(i)||P.push(i):y?(d[f]=[i],V(p,f)&&(p[f]=d[f])):(f.value=[i],e.k&&(d[e.k]=f.value))}else y?(d[f]=o,V(p,f)&&(p[f]=o)):R&&(f.value=o,e.k&&(d[e.k]=o))};o?(L.id=-1,de(L,n)):L()}}}let Ue=!1;const kt=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Wt=e=>e.nodeType===8;function sl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:f,createComment:a}}=e,d=(_,E)=>{if(!E.hasChildNodes()){n(null,_,E),Gt(),E._vnode=_;return}Ue=!1,p(E.firstChild,_,null,null,null),Gt(),E._vnode=_,Ue&&console.error("Hydration completed but contains mismatches.")},p=(_,E,A,$,D,Z=!1)=>{const q=Wt(_)&&_.data==="[",T=()=>P(_,E,A,$,D,q),{type:B,ref:j,shapeFlag:Y,patchFlag:I}=E;let K=_.nodeType;E.el=_,I===-2&&(Z=!1,E.dynamicChildren=null);let F=null;switch(B){case mt:K!==3?E.children===""?(f(E.el=r(""),o(_),_),F=_):F=T():(_.data!==E.children&&(Ue=!0,_.data=E.children),F=i(_));break;case be:K!==8||q?F=T():F=i(_);break;case At:if(q&&(_=i(_),K=_.nodeType),K===1||K===3){F=_;const ge=!E.children.length;for(let J=0;J{Z=Z||!!E.dynamicChildren;const{type:q,props:T,patchFlag:B,shapeFlag:j,dirs:Y}=E,I=q==="input"&&Y||q==="option";if(I||B!==-1){if(Y&&Fe(E,null,A,"created"),T)if(I||!Z||B&48)for(const F in T)(I&&F.endsWith("value")||Lt(F)&&!Et(F))&&s(_,F,null,T[F],!1,void 0,A);else T.onClick&&s(_,"onClick",null,T.onClick,!1,void 0,A);let K;if((K=T&&T.onVnodeBeforeMount)&&we(K,A,E),Y&&Fe(E,null,A,"beforeMount"),((K=T&&T.onVnodeMounted)||Y)&&Pr(()=>{K&&we(K,A,E),Y&&Fe(E,null,A,"mounted")},$),j&16&&!(T&&(T.innerHTML||T.textContent))){let F=R(_.firstChild,E,_,A,$,D,Z);for(;F;){Ue=!0;const ge=F;F=F.nextSibling,l(ge)}}else j&8&&_.textContent!==E.children&&(Ue=!0,_.textContent=E.children)}return _.nextSibling},R=(_,E,A,$,D,Z,q)=>{q=q||!!E.dynamicChildren;const T=E.children,B=T.length;for(let j=0;j{const{slotScopeIds:q}=E;q&&(D=D?D.concat(q):q);const T=o(_),B=R(i(_),E,T,A,$,D,Z);return B&&Wt(B)&&B.data==="]"?i(E.anchor=B):(Ue=!0,f(E.anchor=a("]"),T,B),B)},P=(_,E,A,$,D,Z)=>{if(Ue=!0,E.el=null,Z){const B=W(_);for(;;){const j=i(_);if(j&&j!==B)l(j);else break}}const q=i(_),T=o(_);return l(_),n(null,E,T,q,A,$,kt(T),D),q},W=_=>{let E=0;for(;_;)if(_=i(_),_&&Wt(_)&&(_.data==="["&&E++,_.data==="]")){if(E===0)return i(_);E--}return _};return[d,p]}const de=Pr;function rl(e){return il(e,sl)}function il(e,t){const n=Pi();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:f,setText:a,setElementText:d,parentNode:p,nextSibling:y,setScopeId:R=Ie,insertStaticContent:L}=e,P=(c,u,h,m=null,g=null,C=null,v=!1,w=null,x=!!u.dynamicChildren)=>{if(c===u)return;c&&!et(c,u)&&(m=Ht(c),Oe(c,g,C,!0),c=null),u.patchFlag===-2&&(x=!1,u.dynamicChildren=null);const{type:b,ref:M,shapeFlag:O}=u;switch(b){case mt:W(c,u,h,m);break;case be:_(c,u,h,m);break;case At:c==null&&E(u,h,m,v);break;case he:I(c,u,h,m,g,C,v,w,x);break;default:O&1?D(c,u,h,m,g,C,v,w,x):O&6?K(c,u,h,m,g,C,v,w,x):(O&64||O&128)&&b.process(c,u,h,m,g,C,v,w,x,ot)}M!=null&&g&&nn(M,c&&c.ref,C,u||c,!u)},W=(c,u,h,m)=>{if(c==null)s(u.el=l(u.children),h,m);else{const g=u.el=c.el;u.children!==c.children&&a(g,u.children)}},_=(c,u,h,m)=>{c==null?s(u.el=f(u.children||""),h,m):u.el=c.el},E=(c,u,h,m)=>{[c.el,c.anchor]=L(c.children,u,h,m,c.el,c.anchor)},A=({el:c,anchor:u},h,m)=>{let g;for(;c&&c!==u;)g=y(c),s(c,h,m),c=g;s(u,h,m)},$=({el:c,anchor:u})=>{let h;for(;c&&c!==u;)h=y(c),r(c),c=h;r(u)},D=(c,u,h,m,g,C,v,w,x)=>{v=v||u.type==="svg",c==null?Z(u,h,m,g,C,v,w,x):B(c,u,g,C,v,w,x)},Z=(c,u,h,m,g,C,v,w)=>{let x,b;const{type:M,props:O,shapeFlag:S,transition:H,dirs:k}=c;if(x=c.el=o(c.type,C,O&&O.is,O),S&8?d(x,c.children):S&16&&T(c.children,x,null,m,g,C&&M!=="foreignObject",v,w),k&&Fe(c,null,m,"created"),q(x,c,c.scopeId,v,m),O){for(const X in O)X!=="value"&&!Et(X)&&i(x,X,null,O[X],C,c.children,m,g,Le);"value"in O&&i(x,"value",null,O.value),(b=O.onVnodeBeforeMount)&&we(b,m,c)}k&&Fe(c,null,m,"beforeMount");const G=(!g||g&&!g.pendingBranch)&&H&&!H.persisted;G&&H.beforeEnter(x),s(x,u,h),((b=O&&O.onVnodeMounted)||G||k)&&de(()=>{b&&we(b,m,c),G&&H.enter(x),k&&Fe(c,null,m,"mounted")},g)},q=(c,u,h,m,g)=>{if(h&&R(c,h),m)for(let C=0;C{for(let b=x;b{const w=u.el=c.el;let{patchFlag:x,dynamicChildren:b,dirs:M}=u;x|=c.patchFlag&16;const O=c.props||te,S=u.props||te;let H;h&&Je(h,!1),(H=S.onVnodeBeforeUpdate)&&we(H,h,u,c),M&&Fe(u,c,h,"beforeUpdate"),h&&Je(h,!0);const k=g&&u.type!=="foreignObject";if(b?j(c.dynamicChildren,b,w,h,m,k,C):v||Q(c,u,w,null,h,m,k,C,!1),x>0){if(x&16)Y(w,u,O,S,h,m,g);else if(x&2&&O.class!==S.class&&i(w,"class",null,S.class,g),x&4&&i(w,"style",O.style,S.style,g),x&8){const G=u.dynamicProps;for(let X=0;X{H&&we(H,h,u,c),M&&Fe(u,c,h,"updated")},m)},j=(c,u,h,m,g,C,v)=>{for(let w=0;w{if(h!==m){if(h!==te)for(const w in h)!Et(w)&&!(w in m)&&i(c,w,h[w],null,v,u.children,g,C,Le);for(const w in m){if(Et(w))continue;const x=m[w],b=h[w];x!==b&&w!=="value"&&i(c,w,b,x,v,u.children,g,C,Le)}"value"in m&&i(c,"value",h.value,m.value)}},I=(c,u,h,m,g,C,v,w,x)=>{const b=u.el=c?c.el:l(""),M=u.anchor=c?c.anchor:l("");let{patchFlag:O,dynamicChildren:S,slotScopeIds:H}=u;H&&(w=w?w.concat(H):H),c==null?(s(b,h,m),s(M,h,m),T(u.children,h,M,g,C,v,w,x)):O>0&&O&64&&S&&c.dynamicChildren?(j(c.dynamicChildren,S,h,g,C,v,w),(u.key!=null||g&&u===g.subTree)&&Yr(c,u,!0)):Q(c,u,h,M,g,C,v,w,x)},K=(c,u,h,m,g,C,v,w,x)=>{u.slotScopeIds=w,c==null?u.shapeFlag&512?g.ctx.activate(u,h,m,v,x):F(u,h,m,g,C,v,x):ge(c,u,x)},F=(c,u,h,m,g,C,v)=>{const w=c.component=pl(c,m,g);if(pn(c)&&(w.ctx.renderer=ot),gl(w),w.asyncDep){if(g&&g.registerDep(w,J),!c.el){const x=w.subTree=le(be);_(null,x,u,h)}return}J(w,c,u,h,g,C,v)},ge=(c,u,h)=>{const m=u.component=c.component;if(Ao(c,u,h))if(m.asyncDep&&!m.asyncResolved){ne(m,u,h);return}else m.next=u,yo(m.update),m.update();else u.el=c.el,m.vnode=u},J=(c,u,h,m,g,C,v)=>{const w=()=>{if(c.isMounted){let{next:M,bu:O,u:S,parent:H,vnode:k}=c,G=M,X;Je(c,!1),M?(M.el=k.el,ne(c,M,v)):M=k,O&&Cn(O),(X=M.props&&M.props.onVnodeBeforeUpdate)&&we(X,H,M,k),Je(c,!0);const ie=xn(c),Ee=c.subTree;c.subTree=ie,P(Ee,ie,p(Ee.el),Ht(Ee),c,g,C),M.el=ie.el,G===null&&Ro(c,ie.el),S&&de(S,g),(X=M.props&&M.props.onVnodeUpdated)&&de(()=>we(X,H,M,k),g)}else{let M;const{el:O,props:S}=u,{bm:H,m:k,parent:G}=c,X=pt(u);if(Je(c,!1),H&&Cn(H),!X&&(M=S&&S.onVnodeBeforeMount)&&we(M,G,u),Je(c,!0),O&&wn){const ie=()=>{c.subTree=xn(c),wn(O,c.subTree,c,g,null)};X?u.type.__asyncLoader().then(()=>!c.isUnmounted&&ie()):ie()}else{const ie=c.subTree=xn(c);P(null,ie,h,m,c,g,C),u.el=ie.el}if(k&&de(k,g),!X&&(M=S&&S.onVnodeMounted)){const ie=u;de(()=>we(M,G,ie),g)}(u.shapeFlag&256||G&&pt(G.vnode)&&G.vnode.shapeFlag&256)&&c.a&&de(c.a,g),c.isMounted=!0,u=h=m=null}},x=c.effect=new Xn(w,()=>is(b),c.scope),b=c.update=()=>x.run();b.id=c.uid,Je(c,!0),b()},ne=(c,u,h)=>{u.component=c;const m=c.vnode.props;c.vnode=u,c.next=null,Zo(c,u.props,m,h),el(c,u.children,h),bt(),vs(),yt()},Q=(c,u,h,m,g,C,v,w,x=!1)=>{const b=c&&c.children,M=c?c.shapeFlag:0,O=u.children,{patchFlag:S,shapeFlag:H}=u;if(S>0){if(S&128){Nt(b,O,h,m,g,C,v,w,x);return}else if(S&256){ze(b,O,h,m,g,C,v,w,x);return}}H&8?(M&16&&Le(b,g,C),O!==b&&d(h,O)):M&16?H&16?Nt(b,O,h,m,g,C,v,w,x):Le(b,g,C,!0):(M&8&&d(h,""),H&16&&T(O,h,m,g,C,v,w,x))},ze=(c,u,h,m,g,C,v,w,x)=>{c=c||ft,u=u||ft;const b=c.length,M=u.length,O=Math.min(b,M);let S;for(S=0;SM?Le(c,g,C,!0,!1,O):T(u,h,m,g,C,v,w,x,O)},Nt=(c,u,h,m,g,C,v,w,x)=>{let b=0;const M=u.length;let O=c.length-1,S=M-1;for(;b<=O&&b<=S;){const H=c[b],k=u[b]=x?Ke(u[b]):Te(u[b]);if(et(H,k))P(H,k,h,null,g,C,v,w,x);else break;b++}for(;b<=O&&b<=S;){const H=c[O],k=u[S]=x?Ke(u[S]):Te(u[S]);if(et(H,k))P(H,k,h,null,g,C,v,w,x);else break;O--,S--}if(b>O){if(b<=S){const H=S+1,k=HS)for(;b<=O;)Oe(c[b],g,C,!0),b++;else{const H=b,k=b,G=new Map;for(b=k;b<=S;b++){const me=u[b]=x?Ke(u[b]):Te(u[b]);me.key!=null&&G.set(me.key,b)}let X,ie=0;const Ee=S-k+1;let lt=!1,hs=0;const wt=new Array(Ee);for(b=0;b=Ee){Oe(me,g,C,!0);continue}let Pe;if(me.key!=null)Pe=G.get(me.key);else for(X=k;X<=S;X++)if(wt[X-k]===0&&et(me,u[X])){Pe=X;break}Pe===void 0?Oe(me,g,C,!0):(wt[Pe-k]=b+1,Pe>=hs?hs=Pe:lt=!0,P(me,u[Pe],h,null,g,C,v,w,x),ie++)}const ps=lt?ol(wt):ft;for(X=ps.length-1,b=Ee-1;b>=0;b--){const me=k+b,Pe=u[me],gs=me+1{const{el:C,type:v,transition:w,children:x,shapeFlag:b}=c;if(b&6){Ye(c.component.subTree,u,h,m);return}if(b&128){c.suspense.move(u,h,m);return}if(b&64){v.move(c,u,h,ot);return}if(v===he){s(C,u,h);for(let O=0;Ow.enter(C),g);else{const{leave:O,delayLeave:S,afterLeave:H}=w,k=()=>s(C,u,h),G=()=>{O(C,()=>{k(),H&&H()})};S?S(C,k,G):G()}else s(C,u,h)},Oe=(c,u,h,m=!1,g=!1)=>{const{type:C,props:v,ref:w,children:x,dynamicChildren:b,shapeFlag:M,patchFlag:O,dirs:S}=c;if(w!=null&&nn(w,null,h,c,!0),M&256){u.ctx.deactivate(c);return}const H=M&1&&S,k=!pt(c);let G;if(k&&(G=v&&v.onVnodeBeforeUnmount)&&we(G,u,c),M&6)gi(c.component,h,m);else{if(M&128){c.suspense.unmount(h,m);return}H&&Fe(c,null,u,"beforeUnmount"),M&64?c.type.remove(c,u,h,g,ot,m):b&&(C!==he||O>0&&O&64)?Le(b,u,h,!1,!0):(C===he&&O&384||!g&&M&16)&&Le(x,u,h),m&&as(c)}(k&&(G=v&&v.onVnodeUnmounted)||H)&&de(()=>{G&&we(G,u,c),H&&Fe(c,null,u,"unmounted")},h)},as=c=>{const{type:u,el:h,anchor:m,transition:g}=c;if(u===he){pi(h,m);return}if(u===At){$(c);return}const C=()=>{r(h),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(c.shapeFlag&1&&g&&!g.persisted){const{leave:v,delayLeave:w}=g,x=()=>v(h,C);w?w(c.el,C,x):x()}else C()},pi=(c,u)=>{let h;for(;c!==u;)h=y(c),r(c),c=h;r(u)},gi=(c,u,h)=>{const{bum:m,scope:g,update:C,subTree:v,um:w}=c;m&&Cn(m),g.stop(),C&&(C.active=!1,Oe(v,c,u,h)),w&&de(w,u),de(()=>{c.isUnmounted=!0},u),u&&u.pendingBranch&&!u.isUnmounted&&c.asyncDep&&!c.asyncResolved&&c.suspenseId===u.pendingId&&(u.deps--,u.deps===0&&u.resolve())},Le=(c,u,h,m=!1,g=!1,C=0)=>{for(let v=C;vc.shapeFlag&6?Ht(c.component.subTree):c.shapeFlag&128?c.suspense.next():y(c.anchor||c.el),ds=(c,u,h)=>{c==null?u._vnode&&Oe(u._vnode,null,null,!0):P(u._vnode||null,c,u,null,null,null,h),vs(),Gt(),u._vnode=c},ot={p:P,um:Oe,m:Ye,r:as,mt:F,mc:T,pc:Q,pbc:j,n:Ht,o:e};let yn,wn;return t&&([yn,wn]=t(ot)),{render:ds,hydrate:yn,createApp:nl(ds,yn)}}function Je({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Yr(e,t,n=!1){const s=e.children,r=t.children;if(N(s)&&N(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}const ll=e=>e.__isTeleport,he=Symbol(void 0),mt=Symbol(void 0),be=Symbol(void 0),At=Symbol(void 0),Rt=[];let Re=null;function Jr(e=!1){Rt.push(Re=e?null:[])}function cl(){Rt.pop(),Re=Rt[Rt.length-1]||null}let Mt=1;function Ls(e){Mt+=e}function Xr(e){return e.dynamicChildren=Mt>0?Re||ft:null,cl(),Mt>0&&Re&&Re.push(e),e}function Lc(e,t,n,s,r,i){return Xr(Gr(e,t,n,s,r,i,!0))}function Zr(e,t,n,s,r){return Xr(le(e,t,n,s,r,!0))}function sn(e){return e?e.__v_isVNode===!0:!1}function et(e,t){return e.type===t.type&&e.key===t.key}const bn="__vInternal",Qr=({key:e})=>e??null,Yt=({ref:e,ref_key:t,ref_for:n})=>e!=null?re(e)||oe(e)||U(e)?{i:ue,r:e,k:t,f:!!n}:e:null;function Gr(e,t=null,n=null,s=0,r=null,i=e===he?0:1,o=!1,l=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Qr(t),ref:t&&Yt(t),scopeId:dn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:ue};return l?(fs(f,n),i&128&&e.normalize(f)):n&&(f.shapeFlag|=re(n)?8:16),Mt>0&&!o&&Re&&(f.patchFlag>0||i&6)&&f.patchFlag!==32&&Re.push(f),f}const le=fl;function fl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===jr)&&(e=be),sn(e)){const l=Ve(e,t,!0);return n&&fs(l,n),Mt>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag|=-2,l}if(yl(e)&&(e=e.__vccOpts),t){t=ul(t);let{class:l,style:f}=t;l&&!re(l)&&(t.class=Wn(l)),ee(f)&&(wr(f)&&!N(f)&&(f=ce({},f)),t.style=kn(f))}const o=re(e)?1:Io(e)?128:ll(e)?64:ee(e)?4:U(e)?2:0;return Gr(e,t,n,s,r,o,i,!0)}function ul(e){return e?wr(e)||bn in e?ce({},e):e:null}function Ve(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:o}=e,l=t?al(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Qr(l),ref:t&&t.ref?n&&r?N(r)?r.concat(Yt(t)):[r,Yt(t)]:Yt(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==he?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ve(e.ssContent),ssFallback:e.ssFallback&&Ve(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function ei(e=" ",t=0){return le(mt,null,e,t)}function Nc(e,t){const n=le(At,null,e);return n.staticCount=t,n}function Hc(e="",t=!1){return t?(Jr(),Zr(be,null,e)):le(be,null,e)}function Te(e){return e==null||typeof e=="boolean"?le(be):N(e)?le(he,null,e.slice()):typeof e=="object"?Ke(e):le(mt,null,String(e))}function Ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ve(e)}function fs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(N(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),fs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(bn in t)?t._ctx=ue:r===3&&ue&&(ue.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else U(t)?(t={default:t,_ctx:ue},n=32):(t=String(t),s&64?(n=16,t=[ei(t)]):n=8);e.children=t,e.shapeFlag|=n}function al(...e){const t={};for(let n=0;nse||ue,_t=e=>{se=e,e.scope.on()},rt=()=>{se&&se.scope.off(),se=null};function ni(e){return e.vnode.shapeFlag&4}let St=!1;function gl(e,t=!1){St=t;const{props:n,children:s}=e.vnode,r=ni(e);Xo(e,n,r,t),Go(e,s);const i=r?ml(e,t):void 0;return St=!1,i}function ml(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=vt(new Proxy(e.ctx,Wo));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?ri(e):null;_t(e),bt();const i=We(s,e,0,[e.props,r]);if(yt(),rt(),or(i)){if(i.then(rt,rt),t)return i.then(o=>{Ns(e,o,t)}).catch(o=>{un(o,e,0)});e.asyncDep=i}else Ns(e,i,t)}else si(e,t)}function Ns(e,t,n){U(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=Er(t)),si(e,n)}let Hs;function si(e,t,n){const s=e.type;if(!e.render){if(!t&&Hs&&!s.render){const r=s.template||ls(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:f}=s,a=ce(ce({isCustomElement:i,delimiters:l},o),f);s.render=Hs(r,a)}}e.render=s.render||Ie}_t(e),bt(),qo(e),yt(),rt()}function _l(e){return new Proxy(e.attrs,{get(t,n){return pe(e,"get","$attrs"),t[n]}})}function ri(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=_l(e))},slots:e.slots,emit:e.emit,expose:t}}function us(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Er(vt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Tt)return Tt[n](e)},has(t,n){return n in t||n in Tt}}))}function bl(e,t=!0){return U(e)?e.displayName||e.name:e.name||t&&e.__name}function yl(e){return U(e)&&"__vccOpts"in e}const ve=(e,t)=>mo(e,t,St);function $c(){return wl().slots}function wl(){const e=ti();return e.setupContext||(e.setupContext=ri(e))}function Bn(e,t,n){const s=arguments.length;return s===2?ee(t)&&!N(t)?sn(t)?le(e,null,[t]):le(e,t):le(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&sn(n)&&(n=[n]),le(e,t,n))}const Cl=Symbol(""),xl=()=>ht(Cl),El="3.2.47",vl="http://www.w3.org/2000/svg",tt=typeof document<"u"?document:null,$s=tt&&tt.createElement("template"),Tl={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t?tt.createElementNS(vl,e):tt.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>tt.createTextNode(e),createComment:e=>tt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>tt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{$s.innerHTML=s?`${e} `:e;const l=$s.content;if(s){const f=l.firstChild;for(;f.firstChild;)l.appendChild(f.firstChild);l.removeChild(f)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Al(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Rl(e,t,n){const s=e.style,r=re(n);if(n&&!r){if(t&&!re(t))for(const i in t)n[i]==null&&Dn(s,i,"");for(const i in n)Dn(s,i,n[i])}else{const i=s.display;r?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const js=/\s*!important$/;function Dn(e,t,n){if(N(n))n.forEach(s=>Dn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Il(e,t);js.test(n)?e.setProperty(it(s),n.replace(js,""),"important"):e[s]=n}}const Us=["Webkit","Moz","ms"],Tn={};function Il(e,t){const n=Tn[t];if(n)return n;let s=Se(t);if(s!=="filter"&&s in e)return Tn[t]=s;s=ln(s);for(let r=0;rAn||(Nl.then(()=>An=0),An=Date.now());function $l(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;xe(jl(s,n.value),t,5,[s])};return n.value=e,n.attached=Hl(),n}function jl(e,t){if(N(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Ks=/^on[a-z]/,Ul=(e,t,n,s,r=!1,i,o,l,f)=>{t==="class"?Al(e,s,r):t==="style"?Rl(e,n,s):Lt(t)?qn(t)||Sl(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Bl(e,t,s,r))?Pl(e,t,s,i,o,l,f):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Ol(e,t,s,r))};function Bl(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&Ks.test(t)&&U(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Ks.test(t)&&re(n)?!1:t in e}const Be="transition",Ct="animation",ii=(e,{slots:t})=>Bn(Mr,Dl(e),t);ii.displayName="Transition";const oi={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};ii.props=ce({},Mr.props,oi);const Xe=(e,t=[])=>{N(e)?e.forEach(n=>n(...t)):e&&e(...t)},ks=e=>e?N(e)?e.some(t=>t.length>1):e.length>1:!1;function Dl(e){const t={};for(const I in e)I in oi||(t[I]=e[I]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:f=i,appearActiveClass:a=o,appearToClass:d=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:y=`${n}-leave-active`,leaveToClass:R=`${n}-leave-to`}=e,L=Kl(r),P=L&&L[0],W=L&&L[1],{onBeforeEnter:_,onEnter:E,onEnterCancelled:A,onLeave:$,onLeaveCancelled:D,onBeforeAppear:Z=_,onAppear:q=E,onAppearCancelled:T=A}=t,B=(I,K,F)=>{Ze(I,K?d:l),Ze(I,K?a:o),F&&F()},j=(I,K)=>{I._isLeaving=!1,Ze(I,p),Ze(I,R),Ze(I,y),K&&K()},Y=I=>(K,F)=>{const ge=I?q:E,J=()=>B(K,I,F);Xe(ge,[K,J]),Ws(()=>{Ze(K,I?f:i),De(K,I?d:l),ks(ge)||qs(K,s,P,J)})};return ce(t,{onBeforeEnter(I){Xe(_,[I]),De(I,i),De(I,o)},onBeforeAppear(I){Xe(Z,[I]),De(I,f),De(I,a)},onEnter:Y(!1),onAppear:Y(!0),onLeave(I,K){I._isLeaving=!0;const F=()=>j(I,K);De(I,p),ql(),De(I,y),Ws(()=>{I._isLeaving&&(Ze(I,p),De(I,R),ks($)||qs(I,s,W,F))}),Xe($,[I,F])},onEnterCancelled(I){B(I,!1),Xe(A,[I])},onAppearCancelled(I){B(I,!0),Xe(T,[I])},onLeaveCancelled(I){j(I),Xe(D,[I])}})}function Kl(e){if(e==null)return null;if(ee(e))return[Rn(e.enter),Rn(e.leave)];{const t=Rn(e);return[t,t]}}function Rn(e){return Oi(e)}function De(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Ze(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Ws(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let kl=0;function qs(e,t,n,s){const r=e._endId=++kl,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:f}=Wl(e,t);if(!o)return s();const a=o+"end";let d=0;const p=()=>{e.removeEventListener(a,y),i()},y=R=>{R.target===e&&++d>=f&&p()};setTimeout(()=>{d(n[L]||"").split(", "),r=s(`${Be}Delay`),i=s(`${Be}Duration`),o=Vs(r,i),l=s(`${Ct}Delay`),f=s(`${Ct}Duration`),a=Vs(l,f);let d=null,p=0,y=0;t===Be?o>0&&(d=Be,p=o,y=i.length):t===Ct?a>0&&(d=Ct,p=a,y=f.length):(p=Math.max(o,a),d=p>0?o>a?Be:Ct:null,y=d?d===Be?i.length:f.length:0);const R=d===Be&&/\b(transform|all)(,|$)/.test(s(`${Be}Property`).toString());return{type:d,timeout:p,propCount:y,hasTransform:R}}function Vs(e,t){for(;e.lengthzs(n)+zs(e[s])))}function zs(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function ql(){return document.body.offsetHeight}const Vl=["ctrl","shift","alt","meta"],zl={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)=>Vl.some(n=>e[`${n}Key`]&&!t.includes(n))},jc=(e,t)=>(n,...s)=>{for(let r=0;rn=>{if(!("key"in n))return;const s=it(n.key);if(t.some(r=>r===s||Yl[r]===s))return e(n)},Jl=ce({patchProp:Ul},Tl);let In,Ys=!1;function Xl(){return In=Ys?In:rl(Jl),Ys=!0,In}const Bc=(...e)=>{const t=Xl().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Zl(s);if(r)return n(r,!0,r instanceof SVGElement)},t};function Zl(e){return re(e)?document.querySelector(e):e}const Dc=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Ql="modulepreload",Gl=function(e){return"/"+e},Js={},Kc=function(t,n,s){if(!n||n.length===0)return t();const r=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=Gl(i),i in Js)return;Js[i]=!0;const o=i.endsWith(".css"),l=o?'[rel="stylesheet"]':"";if(!!s)for(let d=r.length-1;d>=0;d--){const p=r[d];if(p.href===i&&(!o||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${l}`))return;const a=document.createElement("link");if(a.rel=o?"stylesheet":Ql,o||(a.as="script",a.crossOrigin=""),a.href=i,document.head.appendChild(a),o)return new Promise((d,p)=>{a.addEventListener("load",d),a.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())},ec=window.__VP_SITE_DATA__,li=/^[a-z]+:/i,kc=/^pathname:\/\//,Wc="vitepress-theme-appearance",ci=/#.*$/,tc=/(index)?\.(md|html)$/,Ce=typeof document<"u",fi={relativePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function nc(e,t,n=!1){if(t===void 0)return!1;if(e=Xs(`/${e}`),n)return new RegExp(t).test(e);if(Xs(t)!==e)return!1;const s=t.match(ci);return s?(Ce?location.hash:"")===s[0]:!0}function Xs(e){return decodeURI(e).replace(ci,"").replace(tc,"")}function sc(e){return li.test(e)}function rc(e,t){var s,r,i,o,l,f,a;const n=Object.keys(e.locales).find(d=>d!=="root"&&!sc(d)&&nc(t,`/${d}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:ai(e.head,((f=e.locales[n])==null?void 0:f.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function ui(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=ic(e.title,s);return`${n}${r}`}function ic(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function oc(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function ai(e,t){return[...e.filter(n=>!oc(t,n)),...t]}const lc=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,cc=/^[a-z]:/i;function Zs(e){const t=cc.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(lc,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const fc=Symbol(),nt=co(ec);function qc(e){const t=ve(()=>rc(nt.value,e.data.relativePath));return{site:t,theme:ve(()=>t.value.themeConfig),page:ve(()=>e.data),frontmatter:ve(()=>e.data.frontmatter),params:ve(()=>e.data.params),lang:ve(()=>t.value.lang),dir:ve(()=>t.value.dir),localeIndex:ve(()=>t.value.localeIndex||"root"),title:ve(()=>ui(t.value,e.data)),description:ve(()=>e.data.description||t.value.description),isDark:Cr(!1)}}function Vc(){const e=ht(fc);if(!e)throw new Error("vitepress data not properly injected in app");return e}function uc(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Qs(e){return li.test(e)||e.startsWith(".")?e:uc(nt.value.base,e)}function ac(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ce){const n="/";t=Zs(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),t=`${n}assets/${t}.${s}.js`}else t=`./${Zs(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Jt=[];function zc(e){Jt.push(e),_n(()=>{Jt=Jt.filter(t=>t!==e)})}const dc=Symbol(),Gs="http://a.com",hc=()=>({path:"/",component:null,data:fi});function Yc(e,t){const n=fn(hc()),s={route:n,go:r};async function r(l=Ce?location.href:"/"){var a,d;await((a=s.onBeforeRouteChange)==null?void 0:a.call(s,l));const f=new URL(l,Gs);nt.value.cleanUrls||!f.pathname.endsWith("/")&&!f.pathname.endsWith(".html")&&(f.pathname+=".html",l=f.pathname+f.search+f.hash),Ce&&l!==location.href&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",l)),await o(l),await((d=s.onAfterRouteChanged)==null?void 0:d.call(s,l))}let i=null;async function o(l,f=0,a=!1){const d=new URL(l,Gs),p=i=d.pathname;try{let y=await e(p);if(i===p){i=null;const{default:R,__pageData:L}=y;if(!R)throw new Error(`Invalid route component: ${R}`);n.path=Ce?p:Qs(p),n.component=vt(R),n.data=vt(L),Ce&&Ar(()=>{let P=nt.value.base+L.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!nt.value.cleanUrls&&!P.endsWith("/")&&(P+=".html"),P!==d.pathname&&(d.pathname=P,l=P+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!f){let W=null;try{W=document.querySelector(decodeURIComponent(d.hash))}catch(_){console.warn(_)}if(W){er(W,d.hash);return}}window.scrollTo(0,f)})}}catch(y){if(!/fetch/.test(y.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(y),!a)try{const R=await fetch(nt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await R.json(),await o(l,f,!0);return}catch{}i===p&&(i=null,n.path=Ce?p:Qs(p),n.component=t?vt(t):null,n.data=fi)}}return Ce&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const a=l.target.closest("a");if(a&&!a.closest(".vp-raw")&&(a instanceof SVGElement||!a.download)){const{target:d}=a,{href:p,origin:y,pathname:R,hash:L,search:P}=new URL(a.href instanceof SVGAnimatedString?a.href.animVal:a.href,a.baseURI),W=window.location,_=R.match(/\.\w+$/);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&d!=="_blank"&&y===W.origin&&!(_&&_[0]!==".html")&&(l.preventDefault(),R===W.pathname&&P===W.search?L&&L!==W.hash&&(history.pushState(null,"",L),window.dispatchEvent(new Event("hashchange")),er(a,L,a.classList.contains("header-anchor"))):r(p))}},{capture:!0}),window.addEventListener("popstate",l=>{o(location.href,l.state&&l.state.scrollPosition||0)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function pc(){const e=ht(dc);if(!e)throw new Error("useRouter() is called without provider.");return e}function di(){return pc().route}function er(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.querySelector(decodeURIComponent(t))}catch(r){console.warn(r)}if(s){const r=nt.value.scrollOffset;let i=0;if(typeof r=="number")i=r;else if(typeof r=="string")i=tr(r);else if(Array.isArray(r))for(const f of r){const a=tr(f);if(a){i=a;break}}const o=parseInt(window.getComputedStyle(s).paddingTop,10),l=window.scrollY+s.getBoundingClientRect().top-i+o;!n||Math.abs(l-window.scrollY)>window.innerHeight?window.scrollTo(0,l):window.scrollTo({left:0,top:l,behavior:"smooth"})}}function tr(e){const t=document.querySelector(e);if(!t)return 0;const n=t.getBoundingClientRect().bottom;return n<0?0:n+24}const nr=()=>Jt.forEach(e=>e()),Jc=Nr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=di();return()=>Bn(e.as,{style:{position:"relative"}},[t.component?Bn(t.component,{onVnodeMounted:nr,onVnodeUpdated:nr}):"404 Page Not Found"])}});function Xc(e,t){let n=[],s=!0;const r=i=>{if(s){s=!1;return}n.forEach(o=>document.head.removeChild(o)),n=[],i.forEach(o=>{const l=gc(o);document.head.appendChild(l),n.push(l)})};Po(()=>{const i=e.data,o=t.value,l=i&&i.description,f=i&&i.frontmatter.head||[];document.title=ui(o,i),document.querySelector("meta[name=description]").setAttribute("content",l||o.description),r(ai(o.head,_c(f)))})}function gc([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),s}function mc(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function _c(e){return e.filter(t=>!mc(t))}const On=new Set,hi=()=>document.createElement("link"),bc=e=>{const t=hi();t.rel="prefetch",t.href=e,document.head.appendChild(t)},yc=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let qt;const wc=Ce&&(qt=hi())&&qt.relList&&qt.relList.supports&&qt.relList.supports("prefetch")?bc:yc;function Zc(){if(!Ce||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:f}=l;if(!On.has(f)){On.add(f);const a=ac(f);wc(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{target:o}=i,{hostname:l,pathname:f}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),a=f.match(/\.\w+$/);a&&a[0]!==".html"||o!=="_blank"&&l===location.hostname&&(f!==location.pathname?n.observe(i):On.add(f))})})};mn(s);const r=di();zt(()=>r.path,s),_n(()=>{n&&n.disconnect()})}const Qc=Nr({setup(e,{slots:t}){const n=Cr(!1);return mn(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Gc(){if(Ce){const e=new Map;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className);let l="";i.querySelectorAll("span.line:not(.diff.remove)").forEach(f=>l+=(f.textContent||"")+`
+`),l=l.slice(0,-1),o&&(l=l.replace(/^ *(\$|>) /gm,"").trim()),Cc(l).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 Cc(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function ef(){Ce&&window.addEventListener("click",e=>{var n,s;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement,i=Array.from((r==null?void 0:r.querySelectorAll("input"))||[]).indexOf(t),o=r==null?void 0:r.querySelector('div[class*="language-"].active'),l=(s=r==null?void 0:r.querySelectorAll('div[class*="language-"]:not(.language-id)'))==null?void 0:s[i];o&&l&&o!==l&&(o.classList.remove("active"),l.classList.add("active"))}})}export{Ic as $,Zr as A,Eo as B,Hc as C,al as D,le as E,he as F,Oc as G,kn as H,Pc as I,li as J,Ce as K,Fc as L,Ac as M,Rc as N,Nc as O,kc as P,Wc as Q,ht as R,Oo as S,ii as T,Uo as U,zc as V,co as W,Ar as X,Sc as Y,Uc as Z,Dc as _,ei as a,jc as a0,$c as a1,Xc as a2,Zc as a3,Gc as a4,ef as a5,Bn as a6,dc as a7,qc as a8,fc as a9,Jc as aa,Qc as ab,nt as ac,Bc as ad,Yc as ae,ac as af,Kc as ag,uo as b,Lc as c,Nr as d,Tc as e,yr as f,vc as g,Cr as h,Si as i,Ec as j,Po as k,ve as l,ti as m,Wn as n,Jr as o,mn as p,sc as q,Mc as r,Qs as s,xc as t,Vc as u,nc as v,zt as w,di as x,_n as y,Gr as z};
diff --git a/assets/chunks/theme.0fe641a0.js b/assets/chunks/theme.0fe641a0.js
new file mode 100644
index 0000000..f0e58c0
--- /dev/null
+++ b/assets/chunks/theme.0fe641a0.js
@@ -0,0 +1,7 @@
+import{d as g,o as a,c as i,r as u,n as M,a as I,t as P,_ as p,u as Qe,b as c,e as Je,f as Ae,g as Ze,h as x,i as et,j as tt,w as q,k as Q,l as k,m as nt,p as F,q as st,P as ot,s as he,v as K,x as ee,y as fe,z as r,F as S,A as y,B as v,C as m,T as pe,D as se,E as h,G as R,H as He,I as U,J as Ee,K as at,L as N,M as H,N as E,O as ct,Q as Be,R as me,S as oe,U as lt,V as J,W as ge,X as it,Y as rt,Z as ut,$ as dt,a0 as _t,a1 as vt}from"./framework.41379913.js";const ht=g({__name:"VPBadge",props:{text:null,type:null},setup(e){return(t,n)=>(a(),i("span",{class:M(["VPBadge",e.type??"tip"])},[u(t.$slots,"default",{},()=>[I(P(e.text),1)],!0)],2))}});const ft=p(ht,[["__scopeId","data-v-350d3852"]]),V=Qe;function ze(e){return et()?(tt(e),!0):!1}function De(e){return typeof e=="function"?e():c(e)}const pt=typeof window<"u",Fe=()=>{};function mt(...e){if(e.length!==1)return Je(...e);const t=e[0];return typeof t=="function"?Ae(Ze(()=>({get:t,set:Fe}))):x(t)}function gt(e){var t;const n=De(e);return(t=n==null?void 0:n.$el)!=null?t:n}const ye=pt?window:void 0;function yt(...e){let t,n,s,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,o]=e,t=ye):[t,n,s,o]=e,!t)return Fe;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const l=[],d=()=>{l.forEach(L=>L()),l.length=0},f=(L,C,w,$)=>(L.addEventListener(C,w,$),()=>L.removeEventListener(C,w,$)),_=q(()=>[gt(t),De(o)],([L,C])=>{d(),L&&l.push(...n.flatMap(w=>s.map($=>f(L,w,$,C))))},{immediate:!0,flush:"post"}),b=()=>{_(),d()};return ze(b),b}function bt(){const e=x(!1);return nt()&&F(()=>{e.value=!0}),e}function kt(e){const t=bt();return k(()=>(t.value,!!e()))}function de(e,t={}){const{window:n=ye}=t,s=kt(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const l=x(!1),d=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",f):o.removeListener(f))},f=()=>{s.value&&(d(),o=n.matchMedia(mt(e).value),l.value=!!(o!=null&&o.matches),o&&("addEventListener"in o?o.addEventListener("change",f):o.addListener(f)))};return Q(f),ze(()=>d()),l}function $t({window:e=ye}={}){if(!e)return{x:x(0),y:x(0)};const t=x(e.scrollX),n=x(e.scrollY);return yt(e,"scroll",()=>{t.value=e.scrollX,n.value=e.scrollY},{capture:!1,passive:!0}),{x:t,y:n}}function Pt(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),s=!0,setTimeout(()=>{s=!1},t))}}function _e(e){return/^\//.test(e)?e:`/${e}`}function Z(e){if(st(e))return e.replace(ot,"");const{site:t}=V(),{pathname:n,search:s,hash:o}=new URL(e,"http://example.com"),l=n.endsWith("/")||n.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${n.replace(/(\.md)?$/,t.value.cleanUrls?"":".html")}${s}${o}`);return he(l)}function Oe(e,t){if(Array.isArray(e))return e;if(e==null)return[];t=_e(t);const n=Object.keys(e).sort((s,o)=>o.split("/").length-s.split("/").length).find(s=>t.startsWith(_e(s)));return n?e[n]:[]}function Vt(e){const t=[];let n=0;for(const s in e){const o=e[s];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function wt(e){const t=[];function n(s){for(const o of s)o.text&&o.link&&t.push({text:o.text,link:o.link}),o.items&&n(o.items)}return n(e),t}function ve(e,t){return Array.isArray(t)?t.some(n=>ve(e,n)):K(e,t.link)?!0:t.items?ve(e,t.items):!1}function z(){const e=ee(),{theme:t,frontmatter:n}=V(),s=de("(min-width: 960px)"),o=x(!1),l=k(()=>{const B=t.value.sidebar,T=e.data.relativePath;return B?Oe(B,T):[]}),d=k(()=>n.value.sidebar!==!1&&l.value.length>0&&n.value.layout!=="home"),f=k(()=>_?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),_=k(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),b=k(()=>d.value&&s.value),L=k(()=>d.value?Vt(l.value):[]);function C(){o.value=!0}function w(){o.value=!1}function $(){o.value?w():C()}return{isOpen:o,sidebar:l,sidebarGroups:L,hasSidebar:d,hasAside:_,leftAside:f,isSidebarEnabled:b,open:C,close:w,toggle:$}}function xt(e,t){let n;Q(()=>{n=e.value?document.activeElement:void 0}),F(()=>{window.addEventListener("keyup",s)}),fe(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function St(e){const{page:t}=V(),n=x(!1),s=k(()=>e.value.collapsed!=null),o=k(()=>!!e.value.link),l=k(()=>K(t.value.relativePath,e.value.link)),d=k(()=>l.value?!0:e.value.items?ve(t.value.relativePath,e.value.items):!1),f=k(()=>!!(e.value.items&&e.value.items.length));Q(()=>{n.value=!!(s.value&&e.value.collapsed)}),Q(()=>{(l.value||d.value)&&(n.value=!1)});function _(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:o,isActiveLink:l,hasActiveLink:d,hasChildren:f,toggle:_}}const Lt=g({__name:"VPSkipLink",setup(e){const t=ee(),n=x();q(()=>t.path,()=>n.value.focus());function s({target:o}){const l=document.querySelector(decodeURIComponent(o.hash));if(l){const d=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",d)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",d),l.focus(),window.scrollTo(0,0)}}return(o,l)=>(a(),i(S,null,[r("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),r("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}});const Mt=p(Lt,[["__scopeId","data-v-c8616af1"]]),Ct={key:0,class:"VPBackdrop"},Bt=g({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(a(),y(pe,{name:"fade"},{default:v(()=>[e.show?(a(),i("div",Ct)):m("",!0)]),_:1}))}});const It=p(Bt,[["__scopeId","data-v-c79a1216"]]);function Nt(){const e=x(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const l=ee();return q(()=>l.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}function te({removeCurrent:e=!0,correspondingLink:t=!1}={}){const{site:n,localeIndex:s,page:o,theme:l}=V(),d=k(()=>{var _,b;return{label:(_=n.value.locales[s.value])==null?void 0:_.label,link:((b=n.value.locales[s.value])==null?void 0:b.link)||(s.value==="root"?"/":`/${s.value}/`)}});return{localeLinks:k(()=>Object.entries(n.value.locales).flatMap(([_,b])=>e&&d.value.label===b.label?[]:{text:b.label,link:Tt(b.link||(_==="root"?"/":`/${_}/`),l.value.i18nRouting!==!1&&t,o.value.relativePath.slice(d.value.link.length-1),!n.value.cleanUrls)})),currentLang:d}}function Tt(e,t,n,s){return t?e.replace(/\/$/,"")+_e(n.replace(/(^|\/)?index.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const At=["src","alt"],Ht={inheritAttrs:!1},Et=g({...Ht,__name:"VPImage",props:{image:null,alt:null},setup(e){return(t,n)=>{const s=R("VPImage",!0);return e.image?(a(),i(S,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),i("img",se({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:c(he)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,At)):(a(),i(S,{key:1},[h(s,se({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),h(s,se({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}});const be=p(Et,[["__scopeId","data-v-6db2186b"]]),zt=["href"],Dt=g({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=V(),{hasSidebar:s}=z(),{currentLang:o}=te();return(l,d)=>(a(),i("div",{class:M(["VPNavBarTitle",{"has-sidebar":c(s)}])},[r("a",{class:"title",href:c(Z)(c(o).link)},[u(l.$slots,"nav-bar-title-before",{},void 0,!0),c(n).logo?(a(),y(be,{key:0,class:"logo",image:c(n).logo},null,8,["image"])):m("",!0),c(n).siteTitle?(a(),i(S,{key:1},[I(P(c(n).siteTitle),1)],64)):c(n).siteTitle===void 0?(a(),i(S,{key:2},[I(P(c(t).title),1)],64)):m("",!0),u(l.$slots,"nav-bar-title-after",{},void 0,!0)],8,zt)],2))}});const Ft=p(Dt,[["__scopeId","data-v-f4ef19a3"]]);const Ot={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},Gt={class:"DocSearch-Button-Container"},Rt=r("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[r("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),Ut={class:"DocSearch-Button-Placeholder"},jt=r("span",{class:"DocSearch-Button-Keys"},[r("kbd",{class:"DocSearch-Button-Key"}),r("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Ie=g({__name:"VPNavBarSearchButton",props:{placeholder:null},setup(e){return(t,n)=>(a(),i("button",Ot,[r("span",Gt,[Rt,r("span",Ut,P(e.placeholder),1)]),jt]))}});const qt={id:"local-search"},Kt={key:1,id:"docsearch"},Wt=g({__name:"VPNavBarSearch",setup(e){const t=()=>null,n=()=>null,{theme:s,localeIndex:o}=V(),l=x(!1),d=k(()=>{var $,B,T,A,D,ne,W;const w=(($=s.value.search)==null?void 0:$.options)??s.value.algolia;return((D=(A=(T=(B=w==null?void 0:w.locales)==null?void 0:B[o.value])==null?void 0:T.translations)==null?void 0:A.button)==null?void 0:D.buttonText)||((W=(ne=w==null?void 0:w.translations)==null?void 0:ne.button)==null?void 0:W.buttonText)||"Search"});F(()=>{});function f(){l.value||(l.value=!0,setTimeout(_,16))}function _(){const w=new Event("keydown");w.key="k",w.metaKey=!0,window.dispatchEvent(w),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||_()},16)}const b=x(!1),L=x("'Meta'");F(()=>{L.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'"});const C="";return(w,$)=>{var B;return a(),i("div",{class:"VPNavBarSearch",style:He({"--vp-meta-key":L.value})},[c(C)==="local"?(a(),i(S,{key:0},[b.value?(a(),y(c(t),{key:0,placeholder:c(d),onClose:$[0]||($[0]=T=>b.value=!1)},null,8,["placeholder"])):m("",!0),r("div",qt,[h(Ie,{placeholder:c(d),onClick:$[1]||($[1]=T=>b.value=!0)},null,8,["placeholder"])])],64)):c(C)==="algolia"?(a(),i(S,{key:1},[l.value?(a(),y(c(n),{key:0,algolia:((B=c(s).search)==null?void 0:B.options)??c(s).algolia},null,8,["algolia"])):(a(),i("div",Kt,[h(Ie,{placeholder:c(d),onClick:f},null,8,["placeholder"])]))],64)):m("",!0)],4)}}});const Yt={},Xt={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",height:"24px",viewBox:"0 0 24 24",width:"24px"},Qt=r("path",{d:"M0 0h24v24H0V0z",fill:"none"},null,-1),Jt=r("path",{d:"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z"},null,-1),Zt=[Qt,Jt];function en(e,t){return a(),i("svg",Xt,Zt)}const tn=p(Yt,[["render",en]]),nn=g({__name:"VPLink",props:{tag:null,href:null,noIcon:{type:Boolean},target:null,rel:null},setup(e){const t=e,n=k(()=>t.tag??t.href?"a":"span"),s=k(()=>t.href&&Ee.test(t.href));return(o,l)=>(a(),y(U(c(n)),{class:M(["VPLink",{link:e.href}]),href:e.href?c(Z)(e.href):void 0,target:e.target||(c(s)?"_blank":void 0),rel:e.rel||(c(s)?"noreferrer":void 0)},{default:v(()=>[u(o.$slots,"default",{},void 0,!0),c(s)&&!e.noIcon?(a(),y(tn,{key:0,class:"icon"})):m("",!0)]),_:3},8,["class","href","target","rel"]))}});const O=p(nn,[["__scopeId","data-v-8f4dc553"]]),sn=g({__name:"VPNavBarMenuLink",props:{item:null},setup(e){const{page:t}=V();return(n,s)=>(a(),y(O,{class:M({VPNavBarMenuLink:!0,active:c(K)(c(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,tabindex:"0"},{default:v(()=>[I(P(e.item.text),1)]),_:1},8,["class","href","target","rel"]))}});const on=p(sn,[["__scopeId","data-v-37adc828"]]),ke=x();let Ge=!1,ue=0;function an(e){const t=x(!1);if(at){!Ge&&cn(),ue++;const n=q(ke,s=>{var o,l,d;s===e.el.value||(o=e.el.value)!=null&&o.contains(s)?(t.value=!0,(l=e.onFocus)==null||l.call(e)):(t.value=!1,(d=e.onBlur)==null||d.call(e))});fe(()=>{n(),ue--,ue||ln()})}return Ae(t)}function cn(){document.addEventListener("focusin",Re),Ge=!0,ke.value=document.activeElement}function ln(){document.removeEventListener("focusin",Re)}function Re(){ke.value=document.activeElement}const rn={},un={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},dn=r("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),_n=[dn];function vn(e,t){return a(),i("svg",un,_n)}const Ue=p(rn,[["render",vn]]),hn={},fn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},pn=r("circle",{cx:"12",cy:"12",r:"2"},null,-1),mn=r("circle",{cx:"19",cy:"12",r:"2"},null,-1),gn=r("circle",{cx:"5",cy:"12",r:"2"},null,-1),yn=[pn,mn,gn];function bn(e,t){return a(),i("svg",fn,yn)}const kn=p(hn,[["render",bn]]),$n={class:"VPMenuLink"},Pn=g({__name:"VPMenuLink",props:{item:null},setup(e){const{page:t}=V();return(n,s)=>(a(),i("div",$n,[h(O,{class:M({active:c(K)(c(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel},{default:v(()=>[I(P(e.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const ie=p(Pn,[["__scopeId","data-v-d2c93bab"]]),Vn={class:"VPMenuGroup"},wn={key:0,class:"title"},xn=g({__name:"VPMenuGroup",props:{text:null,items:null},setup(e){return(t,n)=>(a(),i("div",Vn,[e.text?(a(),i("p",wn,P(e.text),1)):m("",!0),(a(!0),i(S,null,N(e.items,s=>(a(),i(S,null,["link"in s?(a(),y(ie,{key:0,item:s},null,8,["item"])):m("",!0)],64))),256))]))}});const Sn=p(xn,[["__scopeId","data-v-69e747b5"]]),Ln={class:"VPMenu"},Mn={key:0,class:"items"},Cn=g({__name:"VPMenu",props:{items:null},setup(e){return(t,n)=>(a(),i("div",Ln,[e.items?(a(),i("div",Mn,[(a(!0),i(S,null,N(e.items,s=>(a(),i(S,{key:s.text},["link"in s?(a(),y(ie,{key:0,item:s},null,8,["item"])):(a(),y(Sn,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):m("",!0),u(t.$slots,"default",{},void 0,!0)]))}});const Bn=p(Cn,[["__scopeId","data-v-e7ea1737"]]),In=["aria-expanded","aria-label"],Nn={key:0,class:"text"},Tn={class:"menu"},An=g({__name:"VPFlyout",props:{icon:null,button:null,label:null,items:null},setup(e){const t=x(!1),n=x();an({el:n,onBlur:s});function s(){t.value=!1}return(o,l)=>(a(),i("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:l[1]||(l[1]=d=>t.value=!0),onMouseleave:l[2]||(l[2]=d=>t.value=!1)},[r("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:l[0]||(l[0]=d=>t.value=!t.value)},[e.button||e.icon?(a(),i("span",Nn,[e.icon?(a(),y(U(e.icon),{key:0,class:"option-icon"})):m("",!0),I(" "+P(e.button)+" ",1),h(Ue,{class:"text-icon"})])):(a(),y(kn,{key:1,class:"icon"}))],8,In),r("div",Tn,[h(Bn,{items:e.items},{default:v(()=>[u(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const $e=p(An,[["__scopeId","data-v-764effdf"]]),Hn=g({__name:"VPNavBarMenuGroup",props:{item:null},setup(e){const{page:t}=V();return(n,s)=>(a(),y($e,{class:M({VPNavBarMenuGroup:!0,active:c(K)(c(t).relativePath,e.item.activeMatch,!!e.item.activeMatch)}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),En=e=>(H("data-v-7f418b0f"),e=e(),E(),e),zn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Dn=En(()=>r("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Fn=g({__name:"VPNavBarMenu",setup(e){const{theme:t}=V();return(n,s)=>c(t).nav?(a(),i("nav",zn,[Dn,(a(!0),i(S,null,N(c(t).nav,o=>(a(),i(S,{key:o.text},["link"in o?(a(),y(on,{key:0,item:o},null,8,["item"])):(a(),y(Hn,{key:1,item:o},null,8,["item"]))],64))),128))])):m("",!0)}});const On=p(Fn,[["__scopeId","data-v-7f418b0f"]]),Gn={},Rn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Un=r("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),jn=r("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),qn=[Un,jn];function Kn(e,t){return a(),i("svg",Rn,qn)}const je=p(Gn,[["render",Kn]]),Wn={class:"items"},Yn={class:"title"},Xn=g({__name:"VPNavBarTranslations",setup(e){const{theme:t}=V(),{localeLinks:n,currentLang:s}=te({correspondingLink:!0});return(o,l)=>c(n).length&&c(s).label?(a(),y($e,{key:0,class:"VPNavBarTranslations",icon:je,label:c(t).langMenuLabel||"Change language"},{default:v(()=>[r("div",Wn,[r("p",Yn,P(c(s).label),1),(a(!0),i(S,null,N(c(n),d=>(a(),y(ie,{key:d.link,item:d},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}});const Qn=p(Xn,[["__scopeId","data-v-74abcbb9"]]);const Jn={},Zn={class:"VPSwitch",type:"button",role:"switch"},es={class:"check"},ts={key:0,class:"icon"};function ns(e,t){return a(),i("button",Zn,[r("span",es,[e.$slots.default?(a(),i("span",ts,[u(e.$slots,"default",{},void 0,!0)])):m("",!0)])])}const ss=p(Jn,[["render",ns],["__scopeId","data-v-f3c41672"]]),os={},as={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},cs=ct(' ',9),ls=[cs];function is(e,t){return a(),i("svg",as,ls)}const rs=p(os,[["render",is]]),us={},ds={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},_s=r("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),vs=[_s];function hs(e,t){return a(),i("svg",ds,vs)}const fs=p(us,[["render",hs]]),ps={title:"toggle dark mode"},ms=g({__name:"VPSwitchAppearance",setup(e){const{site:t,isDark:n}=V(),s=x(!1),o=typeof localStorage<"u"?l():()=>{};F(()=>{s.value=document.documentElement.classList.contains("dark")});function l(){const d=window.matchMedia("(prefers-color-scheme: dark)"),f=document.documentElement.classList;let _=localStorage.getItem(Be),b=t.value.appearance==="dark"&&_==null||(_==="auto"||_==null?d.matches:_==="dark");d.onchange=w=>{_==="auto"&&C(b=w.matches)};function L(){C(b=!b),_=b?d.matches?"auto":"dark":d.matches?"light":"auto",localStorage.setItem(Be,_)}function C(w){const $=document.createElement("style");$.type="text/css",$.appendChild(document.createTextNode(`:not(.VPSwitchAppearance):not(.VPSwitchAppearance *) {
+ -webkit-transition: none !important;
+ -moz-transition: none !important;
+ -o-transition: none !important;
+ -ms-transition: none !important;
+ transition: none !important;
+}`)),document.head.appendChild($),s.value=w,f[w?"add":"remove"]("dark"),window.getComputedStyle($).opacity,document.head.removeChild($)}return L}return q(s,d=>{n.value=d}),(d,f)=>(a(),i("label",ps,[h(ss,{class:"VPSwitchAppearance","aria-checked":s.value,onClick:c(o)},{default:v(()=>[h(rs,{class:"sun"}),h(fs,{class:"moon"})]),_:1},8,["aria-checked","onClick"])]))}});const Pe=p(ms,[["__scopeId","data-v-a9c8afb8"]]),gs={key:0,class:"VPNavBarAppearance"},ys=g({__name:"VPNavBarAppearance",setup(e){const{site:t}=V();return(n,s)=>c(t).appearance?(a(),i("div",gs,[h(Pe)])):m("",!0)}});const bs=p(ys,[["__scopeId","data-v-f6a63727"]]),ks={discord:'Discord ',facebook:'Facebook ',github:'GitHub ',instagram:'Instagram ',linkedin:'LinkedIn ',mastodon:'Mastodon ',slack:'Slack ',twitter:'Twitter ',youtube:'YouTube '},$s=["href","aria-label","innerHTML"],Ps=g({__name:"VPSocialLink",props:{icon:null,link:null},setup(e){const t=e,n=k(()=>typeof t.icon=="object"?t.icon.svg:ks[t.icon]);return(s,o)=>(a(),i("a",{class:"VPSocialLink",href:e.link,"aria-label":typeof e.icon=="string"?e.icon:"",target:"_blank",rel:"noopener",innerHTML:c(n)},null,8,$s))}});const Vs=p(Ps,[["__scopeId","data-v-c530cc0a"]]),ws={class:"VPSocialLinks"},xs=g({__name:"VPSocialLinks",props:{links:null},setup(e){return(t,n)=>(a(),i("div",ws,[(a(!0),i(S,null,N(e.links,({link:s,icon:o})=>(a(),y(Vs,{key:s,icon:o,link:s},null,8,["icon","link"]))),128))]))}});const Ve=p(xs,[["__scopeId","data-v-f6988cfb"]]),Ss=g({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=V();return(n,s)=>c(t).socialLinks?(a(),y(Ve,{key:0,class:"VPNavBarSocialLinks",links:c(t).socialLinks},null,8,["links"])):m("",!0)}});const Ls=p(Ss,[["__scopeId","data-v-0394ad82"]]),Ms={key:0,class:"group translations"},Cs={class:"trans-title"},Bs={key:1,class:"group"},Is={class:"item appearance"},Ns={class:"label"},Ts={class:"appearance-action"},As={key:2,class:"group"},Hs={class:"item social-links"},Es=g({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=V(),{localeLinks:s,currentLang:o}=te({correspondingLink:!0}),l=k(()=>s.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(d,f)=>c(l)?(a(),y($e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[c(s).length&&c(o).label?(a(),i("div",Ms,[r("p",Cs,P(c(o).label),1),(a(!0),i(S,null,N(c(s),_=>(a(),y(ie,{key:_.link,item:_},null,8,["item"]))),128))])):m("",!0),c(t).appearance?(a(),i("div",Bs,[r("div",Is,[r("p",Ns,P(c(n).darkModeSwitchLabel||"Appearance"),1),r("div",Ts,[h(Pe)])])])):m("",!0),c(n).socialLinks?(a(),i("div",As,[r("div",Hs,[h(Ve,{class:"social-links-list",links:c(n).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}});const zs=p(Es,[["__scopeId","data-v-40855f84"]]),Ds=e=>(H("data-v-e5dd9c1c"),e=e(),E(),e),Fs=["aria-expanded"],Os=Ds(()=>r("span",{class:"container"},[r("span",{class:"top"}),r("span",{class:"middle"}),r("span",{class:"bottom"})],-1)),Gs=[Os],Rs=g({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(a(),i("button",{type:"button",class:M(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},Gs,10,Fs))}});const Us=p(Rs,[["__scopeId","data-v-e5dd9c1c"]]),js=e=>(H("data-v-94c81dcc"),e=e(),E(),e),qs={class:"container"},Ks={class:"title"},Ws={class:"content"},Ys=js(()=>r("div",{class:"curtain"},null,-1)),Xs={class:"content-body"},Qs=g({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const{y:t}=$t(),{hasSidebar:n}=z(),s=k(()=>({"has-sidebar":n.value,fill:t.value>0}));return(o,l)=>(a(),i("div",{class:M(["VPNavBar",c(s)])},[r("div",qs,[r("div",Ks,[h(Ft,null,{"nav-bar-title-before":v(()=>[u(o.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(o.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),r("div",Ws,[Ys,r("div",Xs,[u(o.$slots,"nav-bar-content-before",{},void 0,!0),h(Wt,{class:"search"}),h(On,{class:"menu"}),h(Qn,{class:"translations"}),h(bs,{class:"appearance"}),h(Ls,{class:"social-links"}),h(zs,{class:"extra"}),u(o.$slots,"nav-bar-content-after",{},void 0,!0),h(Us,{class:"hamburger",active:e.isScreenOpen,onClick:l[0]||(l[0]=d=>o.$emit("toggle-screen"))},null,8,["active"])])])])],2))}});const Js=p(Qs,[["__scopeId","data-v-94c81dcc"]]);function Zs(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1),j=[],ce=!1,xe=-1,Y=void 0,G=void 0,X=void 0,qe=function(t){return j.some(function(n){return!!(n.options.allowTouchMove&&n.options.allowTouchMove(t))})},le=function(t){var n=t||window.event;return qe(n.target)||n.touches.length>1?!0:(n.preventDefault&&n.preventDefault(),!1)},eo=function(t){if(X===void 0){var n=!!t&&t.reserveScrollBarGap===!0,s=window.innerWidth-document.documentElement.clientWidth;if(n&&s>0){var o=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"),10);X=document.body.style.paddingRight,document.body.style.paddingRight=o+s+"px"}}Y===void 0&&(Y=document.body.style.overflow,document.body.style.overflow="hidden")},to=function(){X!==void 0&&(document.body.style.paddingRight=X,X=void 0),Y!==void 0&&(document.body.style.overflow=Y,Y=void 0)},no=function(){return window.requestAnimationFrame(function(){if(G===void 0){G={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left};var t=window,n=t.scrollY,s=t.scrollX,o=t.innerHeight;document.body.style.position="fixed",document.body.style.top=-n,document.body.style.left=-s,setTimeout(function(){return window.requestAnimationFrame(function(){var l=o-window.innerHeight;l&&n>=o&&(document.body.style.top=-(n+l))})},300)}})},so=function(){if(G!==void 0){var t=-parseInt(document.body.style.top,10),n=-parseInt(document.body.style.left,10);document.body.style.position=G.position,document.body.style.top=G.top,document.body.style.left=G.left,window.scrollTo(n,t),G=void 0}},oo=function(t){return t?t.scrollHeight-t.scrollTop<=t.clientHeight:!1},ao=function(t,n){var s=t.targetTouches[0].clientY-xe;return qe(t.target)?!1:n&&n.scrollTop===0&&s>0||oo(n)&&s<0?le(t):(t.stopPropagation(),!0)},Ke=function(t,n){if(!t){console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");return}if(!j.some(function(o){return o.targetElement===t})){var s={targetElement:t,options:n||{}};j=[].concat(Zs(j),[s]),ae?no():eo(n),ae&&(t.ontouchstart=function(o){o.targetTouches.length===1&&(xe=o.targetTouches[0].clientY)},t.ontouchmove=function(o){o.targetTouches.length===1&&ao(o,t)},ce||(document.addEventListener("touchmove",le,we?{passive:!1}:void 0),ce=!0))}},We=function(){ae&&(j.forEach(function(t){t.targetElement.ontouchstart=null,t.targetElement.ontouchmove=null}),ce&&(document.removeEventListener("touchmove",le,we?{passive:!1}:void 0),ce=!1),xe=-1),ae?so():to(),j=[]};const co=g({__name:"VPNavScreenMenuLink",props:{text:null,link:null},setup(e){const t=me("close-screen");return(n,s)=>(a(),y(O,{class:"VPNavScreenMenuLink",href:e.link,onClick:c(t)},{default:v(()=>[I(P(e.text),1)]),_:1},8,["href","onClick"]))}});const lo=p(co,[["__scopeId","data-v-c328f34f"]]),io={},ro={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},uo=r("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),_o=[uo];function vo(e,t){return a(),i("svg",ro,_o)}const ho=p(io,[["render",vo]]),fo=g({__name:"VPNavScreenMenuGroupLink",props:{text:null,link:null},setup(e){const t=me("close-screen");return(n,s)=>(a(),y(O,{class:"VPNavScreenMenuGroupLink",href:e.link,onClick:c(t)},{default:v(()=>[I(P(e.text),1)]),_:1},8,["href","onClick"]))}});const Ye=p(fo,[["__scopeId","data-v-3d20956d"]]),po={class:"VPNavScreenMenuGroupSection"},mo={key:0,class:"title"},go=g({__name:"VPNavScreenMenuGroupSection",props:{text:null,items:null},setup(e){return(t,n)=>(a(),i("div",po,[e.text?(a(),i("p",mo,P(e.text),1)):m("",!0),(a(!0),i(S,null,N(e.items,s=>(a(),y(Ye,{key:s.text,text:s.text,link:s.link},null,8,["text","link"]))),128))]))}});const yo=p(go,[["__scopeId","data-v-7478538b"]]),bo=["aria-controls","aria-expanded"],ko={class:"button-text"},$o=["id"],Po={key:1,class:"group"},Vo=g({__name:"VPNavScreenMenuGroup",props:{text:null,items:null},setup(e){const t=e,n=x(!1),s=k(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(l,d)=>(a(),i("div",{class:M(["VPNavScreenMenuGroup",{open:n.value}])},[r("button",{class:"button","aria-controls":c(s),"aria-expanded":n.value,onClick:o},[r("span",ko,P(e.text),1),h(ho,{class:"button-icon"})],8,bo),r("div",{id:c(s),class:"items"},[(a(!0),i(S,null,N(e.items,f=>(a(),i(S,{key:f.text},["link"in f?(a(),i("div",{key:f.text,class:"item"},[h(Ye,{text:f.text,link:f.link},null,8,["text","link"])])):(a(),i("div",Po,[h(yo,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,$o)],2))}});const wo=p(Vo,[["__scopeId","data-v-a9a19324"]]),xo={key:0,class:"VPNavScreenMenu"},So=g({__name:"VPNavScreenMenu",setup(e){const{theme:t}=V();return(n,s)=>c(t).nav?(a(),i("nav",xo,[(a(!0),i(S,null,N(c(t).nav,o=>(a(),i(S,{key:o.text},["link"in o?(a(),y(lo,{key:0,text:o.text,link:o.link},null,8,["text","link"])):(a(),y(wo,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),Lo={key:0,class:"VPNavScreenAppearance"},Mo={class:"text"},Co=g({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=V();return(s,o)=>c(t).appearance?(a(),i("div",Lo,[r("p",Mo,P(c(n).darkModeSwitchLabel||"Appearance"),1),h(Pe)])):m("",!0)}});const Bo=p(Co,[["__scopeId","data-v-add8f686"]]),Io={class:"list"},No=g({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=te({correspondingLink:!0}),s=x(!1);function o(){s.value=!s.value}return(l,d)=>c(t).length&&c(n).label?(a(),i("div",{key:0,class:M(["VPNavScreenTranslations",{open:s.value}])},[r("button",{class:"title",onClick:o},[h(je,{class:"icon lang"}),I(" "+P(c(n).label)+" ",1),h(Ue,{class:"icon chevron"})]),r("ul",Io,[(a(!0),i(S,null,N(c(t),f=>(a(),i("li",{key:f.link,class:"item"},[h(O,{class:"link",href:f.link},{default:v(()=>[I(P(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}});const To=p(No,[["__scopeId","data-v-d72aa483"]]),Ao=g({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=V();return(n,s)=>c(t).socialLinks?(a(),y(Ve,{key:0,class:"VPNavScreenSocialLinks",links:c(t).socialLinks},null,8,["links"])):m("",!0)}}),Ho={class:"container"},Eo=g({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=x(null);function n(){Ke(t.value,{reserveScrollBarGap:!0})}function s(){We()}return(o,l)=>(a(),y(pe,{name:"fade",onEnter:n,onAfterLeave:s},{default:v(()=>[e.open?(a(),i("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t},[r("div",Ho,[u(o.$slots,"nav-screen-content-before",{},void 0,!0),h(So,{class:"menu"}),h(To,{class:"translations"}),h(Bo,{class:"appearance"}),h(Ao,{class:"social-links"}),u(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}});const zo=p(Eo,[["__scopeId","data-v-724636ae"]]),Do={class:"VPNav"},Fo=g({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=Nt();return oe("close-screen",n),(o,l)=>(a(),i("header",Do,[h(Js,{"is-screen-open":c(t),onToggleScreen:c(s)},{"nav-bar-title-before":v(()=>[u(o.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(o.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(o.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(o.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),h(zo,{open:c(t)},{"nav-screen-content-before":v(()=>[u(o.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(o.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])]))}});const Oo=p(Fo,[["__scopeId","data-v-7e5bc4a5"]]),Go={},Ro={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Uo=r("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),jo=r("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),qo=r("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),Ko=r("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),Wo=[Uo,jo,qo,Ko];function Yo(e,t){return a(),i("svg",Ro,Wo)}const Xo=p(Go,[["render",Yo]]);function Qo(){const{hasSidebar:e}=z(),t=de("(min-width: 960px)"),n=de("(min-width: 1280px)");return{isAsideEnabled:k(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const Jo=71;function Se(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function Le(e){const t=[...document.querySelectorAll(".VPDoc h2,h3,h4,h5,h6")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const s=Number(n.tagName[1]);return{title:Zo(n),link:"#"+n.id,level:s}});return ea(t,e)}function Zo(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(n.classList.contains("VPBadge")||n.classList.contains("header-anchor"))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function ea(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[s,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;e=e.filter(d=>d.level>=s&&d.level<=o);const l=[];e:for(let d=0;d=0;_--){const b=e[_];if(b.level{requestAnimationFrame(l),window.addEventListener("scroll",s)}),lt(()=>{d(location.hash)}),fe(()=>{window.removeEventListener("scroll",s)});function l(){if(!n.value)return;const f=[].slice.call(e.value.querySelectorAll(".outline-link")),_=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter($=>f.some(B=>B.hash===$.hash&&$.offsetParent!==null)),b=window.scrollY,L=window.innerHeight,C=document.body.offsetHeight,w=Math.abs(b+L-C)<1;if(_.length&&w){d(_[_.length-1].hash);return}for(let $=0;$<_.length;$++){const B=_[$],T=_[$+1],[A,D]=na($,B,T);if(A){d(D);return}}}function d(f){o&&o.classList.remove("active"),f!==null&&(o=e.value.querySelector(`a[href="${decodeURIComponent(f)}"]`));const _=o;_?(_.classList.add("active"),t.value.style.top=_.offsetTop+33+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function Te(e){return e.parentElement.offsetTop-Jo}function na(e,t,n){const s=window.scrollY;return e===0&&s===0?[!0,null]:s{const o=R("VPDocOutlineItem",!0);return a(),i("ul",{class:M(e.root?"root":"nested")},[(a(!0),i(S,null,N(e.headers,({children:l,link:d,title:f})=>(a(),i("li",null,[r("a",{class:"outline-link",href:d,onClick:t,title:f},P(f),9,sa),l!=null&&l.length?(a(),y(o,{key:0,headers:l},null,8,["headers"])):m("",!0)]))),256))],2)}}});const Me=p(oa,[["__scopeId","data-v-9a431c33"]]),aa={},ca={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},la=r("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),ia=[la];function ra(e,t){return a(),i("svg",ca,ia)}const Ce=p(aa,[["render",ra]]),ua=g({__name:"VPLocalNavOutlineDropdown",setup(e){const{frontmatter:t,theme:n}=V(),s=x(!1),o=x(0),l=x();J(()=>{s.value=!1});function d(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-64,0)}function f(L){L.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),it(()=>{s.value=!1}))}function _(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}const b=ge([]);return J(()=>{b.value=Le(t.value.outline??n.value.outline)}),(L,C)=>(a(),i("div",{class:"VPLocalNavOutlineDropdown",style:He({"--vp-vh":o.value+"px"})},[c(b).length>0?(a(),i("button",{key:0,onClick:d,class:M({open:s.value})},[I(P(c(Se)(c(n)))+" ",1),h(Ce,{class:"icon"})],2)):(a(),i("button",{key:1,onClick:_},P(c(n).returnToTopLabel||"Return to top"),1)),h(pe,{name:"flyout"},{default:v(()=>[s.value?(a(),i("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:f},[r("a",{class:"top-link",href:"#",onClick:_},P(c(n).returnToTopLabel||"Return to top"),1),h(Me,{headers:c(b)},null,8,["headers"])],512)):m("",!0)]),_:1})],4))}});const da=p(ua,[["__scopeId","data-v-079b16a8"]]),_a={key:0,class:"VPLocalNav"},va=["aria-expanded"],ha={class:"menu-text"},fa=g({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t}=V(),{hasSidebar:n}=z();return(s,o)=>c(n)?(a(),i("div",_a,[r("button",{class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:o[0]||(o[0]=l=>s.$emit("open-menu"))},[h(Xo,{class:"menu-icon"}),r("span",ha,P(c(t).sidebarMenuLabel||"Menu"),1)],8,va),h(da)])):m("",!0)}});const pa=p(fa,[["__scopeId","data-v-f5a2ca58"]]),ma=e=>(H("data-v-c4656e6d"),e=e(),E(),e),ga=["role","tabindex"],ya=ma(()=>r("div",{class:"indicator"},null,-1)),ba=["onKeydown"],ka={key:1,class:"items"},$a=g({__name:"VPSidebarItem",props:{item:null,depth:null},setup(e){const t=e,{collapsed:n,collapsible:s,isLink:o,isActiveLink:l,hasActiveLink:d,hasChildren:f,toggle:_}=St(k(()=>t.item)),b=k(()=>f.value?"section":"div"),L=k(()=>o.value?"a":"div"),C=k(()=>f.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),w=k(()=>o.value?void 0:"button"),$=k(()=>[[`level-${t.depth}`],{collapsible:s.value},{collapsed:n.value},{"is-link":o.value},{"is-active":l.value},{"has-active":d.value}]);function B(A){"key"in A&&A.key!=="Enter"||!t.item.link&&_()}function T(){t.item.link&&_()}return(A,D)=>{const ne=R("VPSidebarItem",!0);return a(),y(U(c(b)),{class:M(["VPSidebarItem",c($)])},{default:v(()=>[e.item.text?(a(),i("div",se({key:0,class:"item",role:c(w)},rt(e.item.items?{click:B,keydown:B}:{},!0),{tabindex:e.item.items&&0}),[ya,e.item.link?(a(),y(O,{key:0,tag:c(L),class:"link",href:e.item.link},{default:v(()=>[(a(),y(U(c(C)),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href"])):(a(),y(U(c(C)),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null?(a(),i("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:T,onKeydown:ut(T,["enter"]),tabindex:"0"},[h(Ce,{class:"caret-icon"})],40,ba)):m("",!0)],16,ga)):m("",!0),e.item.items&&e.item.items.length?(a(),i("div",ka,[e.depth<5?(a(!0),i(S,{key:0},N(e.item.items,W=>(a(),y(ne,{key:W.text,item:W,depth:e.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}});const Pa=p($a,[["__scopeId","data-v-c4656e6d"]]),Xe=e=>(H("data-v-af16598e"),e=e(),E(),e),Va=Xe(()=>r("div",{class:"curtain"},null,-1)),wa={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},xa=Xe(()=>r("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Sa=g({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const t=e,{sidebarGroups:n,hasSidebar:s}=z();let o=x(null);function l(){Ke(o.value,{reserveScrollBarGap:!0})}function d(){We()}return dt(async()=>{var f;t.open?(l(),(f=o.value)==null||f.focus()):d()}),(f,_)=>c(s)?(a(),i("aside",{key:0,class:M(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:_[0]||(_[0]=_t(()=>{},["stop"]))},[Va,r("nav",wa,[xa,u(f.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),i(S,null,N(c(n),b=>(a(),i("div",{key:b.text,class:"group"},[h(Pa,{item:b,depth:0},null,8,["item"])]))),128)),u(f.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}});const La=p(Sa,[["__scopeId","data-v-af16598e"]]),Ma={},Ca={class:"VPPage"};function Ba(e,t){const n=R("Content");return a(),i("div",Ca,[u(e.$slots,"page-top"),h(n),u(e.$slots,"page-bottom")])}const Ia=p(Ma,[["render",Ba]]),Na=g({__name:"VPButton",props:{tag:null,size:null,theme:null,text:null,href:null},setup(e){const t=e,n=k(()=>[t.size??"medium",t.theme??"brand"]),s=k(()=>t.href&&Ee.test(t.href)),o=k(()=>t.tag?t.tag:t.href?"a":"button");return(l,d)=>(a(),y(U(c(o)),{class:M(["VPButton",c(n)]),href:e.href?c(Z)(e.href):void 0,target:c(s)?"_blank":void 0,rel:c(s)?"noreferrer":void 0},{default:v(()=>[I(P(e.text),1)]),_:1},8,["class","href","target","rel"]))}});const Ta=p(Na,[["__scopeId","data-v-567ba664"]]),Aa=e=>(H("data-v-fd2650d5"),e=e(),E(),e),Ha={class:"container"},Ea={class:"main"},za={key:0,class:"name"},Da={class:"clip"},Fa={key:1,class:"text"},Oa={key:2,class:"tagline"},Ga={key:0,class:"actions"},Ra={key:0,class:"image"},Ua={class:"image-container"},ja=Aa(()=>r("div",{class:"image-bg"},null,-1)),qa=g({__name:"VPHero",props:{name:null,text:null,tagline:null,image:null,actions:null},setup(e){const t=me("hero-image-slot-exists");return(n,s)=>(a(),i("div",{class:M(["VPHero",{"has-image":e.image||c(t)}])},[r("div",Ha,[r("div",Ea,[u(n.$slots,"home-hero-info",{},()=>[e.name?(a(),i("h1",za,[r("span",Da,P(e.name),1)])):m("",!0),e.text?(a(),i("p",Fa,P(e.text),1)):m("",!0),e.tagline?(a(),i("p",Oa,P(e.tagline),1)):m("",!0)],!0),e.actions?(a(),i("div",Ga,[(a(!0),i(S,null,N(e.actions,o=>(a(),i("div",{key:o.link,class:"action"},[h(Ta,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link},null,8,["theme","text","href"])]))),128))])):m("",!0)]),e.image||c(t)?(a(),i("div",Ra,[r("div",Ua,[ja,u(n.$slots,"home-hero-image",{},()=>[e.image?(a(),y(be,{key:0,class:"image-src",image:e.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}});const Ka=p(qa,[["__scopeId","data-v-fd2650d5"]]),Wa=g({__name:"VPHomeHero",setup(e){const{frontmatter:t}=V();return(n,s)=>c(t).hero?(a(),y(Ka,{key:0,class:"VPHomeHero",name:c(t).hero.name,text:c(t).hero.text,tagline:c(t).hero.tagline,image:c(t).hero.image,actions:c(t).hero.actions},{"home-hero-info":v(()=>[u(n.$slots,"home-hero-info")]),"home-hero-image":v(()=>[u(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),Ya={},Xa={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Qa=r("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),Ja=[Qa];function Za(e,t){return a(),i("svg",Xa,Ja)}const ec=p(Ya,[["render",Za]]),tc={class:"box"},nc=["innerHTML"],sc=["innerHTML"],oc=["innerHTML"],ac={key:3,class:"link-text"},cc={class:"link-text-value"},lc=g({__name:"VPFeature",props:{icon:null,title:null,details:null,link:null,linkText:null},setup(e){return(t,n)=>(a(),y(O,{class:"VPFeature",href:e.link,"no-icon":!0},{default:v(()=>[r("article",tc,[typeof e.icon=="object"?(a(),y(be,{key:0,image:e.icon,alt:e.icon.alt,height:e.icon.height,width:e.icon.width},null,8,["image","alt","height","width"])):e.icon?(a(),i("div",{key:1,class:"icon",innerHTML:e.icon},null,8,nc)):m("",!0),r("h2",{class:"title",innerHTML:e.title},null,8,sc),e.details?(a(),i("p",{key:2,class:"details",innerHTML:e.details},null,8,oc)):m("",!0),e.linkText?(a(),i("div",ac,[r("p",cc,[I(P(e.linkText)+" ",1),h(ec,{class:"link-text-icon"})])])):m("",!0)])]),_:1},8,["href"]))}});const ic=p(lc,[["__scopeId","data-v-837f6cca"]]),rc={key:0,class:"VPFeatures"},uc={class:"container"},dc={class:"items"},_c=g({__name:"VPFeatures",props:{features:null},setup(e){const t=e,n=k(()=>{const s=t.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s%2===0)return"grid-4"}else return});return(s,o)=>e.features?(a(),i("div",rc,[r("div",uc,[r("div",dc,[(a(!0),i(S,null,N(e.features,l=>(a(),i("div",{key:l.title,class:M(["item",[c(n)]])},[h(ic,{icon:l.icon,title:l.title,details:l.details,link:l.link,"link-text":l.linkText},null,8,["icon","title","details","link","link-text"])],2))),128))])])])):m("",!0)}});const vc=p(_c,[["__scopeId","data-v-6816157f"]]),hc=g({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=V();return(n,s)=>c(t).features?(a(),y(vc,{key:0,class:"VPHomeFeatures",features:c(t).features},null,8,["features"])):m("",!0)}}),fc={class:"VPHome"},pc=g({__name:"VPHome",setup(e){return(t,n)=>{const s=R("Content");return a(),i("div",fc,[u(t.$slots,"home-hero-before",{},void 0,!0),h(Wa,null,{"home-hero-info":v(()=>[u(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[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),h(hc),u(t.$slots,"home-features-after",{},void 0,!0),h(s)])}}});const mc=p(pc,[["__scopeId","data-v-d82743a8"]]),gc=e=>(H("data-v-ff0f39c8"),e=e(),E(),e),yc={class:"content"},bc={class:"outline-title"},kc={"aria-labelledby":"doc-outline-aria-label"},$c=gc(()=>r("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Pc=g({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=V(),s=ge([]);J(()=>{s.value=Le(t.value.outline??n.value.outline)});const o=x(),l=x();return ta(o,l),(d,f)=>(a(),i("div",{class:M(["VPDocAsideOutline",{"has-outline":c(s).length>0}]),ref_key:"container",ref:o},[r("div",yc,[r("div",{class:"outline-marker",ref_key:"marker",ref:l},null,512),r("div",bc,P(c(Se)(c(n))),1),r("nav",kc,[$c,h(Me,{headers:c(s),root:!0},null,8,["headers"])])])],2))}});const Vc=p(Pc,[["__scopeId","data-v-ff0f39c8"]]),wc={class:"VPDocAsideCarbonAds"},xc=g({__name:"VPDocAsideCarbonAds",props:{carbonAds:null},setup(e){const t=()=>null;return(n,s)=>(a(),i("div",wc,[h(c(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Sc=e=>(H("data-v-3f215769"),e=e(),E(),e),Lc={class:"VPDocAside"},Mc=Sc(()=>r("div",{class:"spacer"},null,-1)),Cc=g({__name:"VPDocAside",setup(e){const{theme:t}=V();return(n,s)=>(a(),i("div",Lc,[u(n.$slots,"aside-top",{},void 0,!0),u(n.$slots,"aside-outline-before",{},void 0,!0),h(Vc),u(n.$slots,"aside-outline-after",{},void 0,!0),Mc,u(n.$slots,"aside-ads-before",{},void 0,!0),c(t).carbonAds?(a(),y(xc,{key:0,"carbon-ads":c(t).carbonAds},null,8,["carbon-ads"])):m("",!0),u(n.$slots,"aside-ads-after",{},void 0,!0),u(n.$slots,"aside-bottom",{},void 0,!0)]))}});const Bc=p(Cc,[["__scopeId","data-v-3f215769"]]);function Ic(){const{theme:e,page:t}=V();return k(()=>{const{text:n="Edit this page",pattern:s=""}=e.value.editLink||{},{relativePath:o}=t.value;let l;return typeof s=="function"?l=s({relativePath:o}):l=s.replace(/:path/g,o),{url:l,text:n}})}function Nc(){const{page:e,theme:t,frontmatter:n}=V();return k(()=>{var d,f,_,b;const s=Oe(t.value.sidebar,e.value.relativePath),o=wt(s),l=o.findIndex(L=>K(e.value.relativePath,L.link));return{prev:n.value.prev===!1?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((d=o[l-1])==null?void 0:d.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((f=o[l-1])==null?void 0:f.link)},next:n.value.next===!1?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((_=o[l+1])==null?void 0:_.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((b=o[l+1])==null?void 0:b.link)}}})}const Tc={},Ac={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Hc=r("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),Ec=r("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),zc=[Hc,Ec];function Dc(e,t){return a(),i("svg",Ac,zc)}const Fc=p(Tc,[["render",Dc]]),Oc={class:"VPLastUpdated"},Gc=["datetime"],Rc=g({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:s}=V(),o=k(()=>new Date(n.value.lastUpdated)),l=k(()=>o.value.toISOString()),d=x("");return F(()=>{Q(()=>{d.value=o.value.toLocaleString(s.value)})}),(f,_)=>(a(),i("p",Oc,[I(P(c(t).lastUpdatedText||"Last updated")+": ",1),r("time",{datetime:c(l)},P(d.value),9,Gc)]))}});const Uc=p(Rc,[["__scopeId","data-v-7b3ebfe1"]]),jc={key:0,class:"VPDocFooter"},qc={key:0,class:"edit-info"},Kc={key:0,class:"edit-link"},Wc={key:1,class:"last-updated"},Yc={key:1,class:"prev-next"},Xc={class:"pager"},Qc=["href"],Jc=["innerHTML"],Zc=["innerHTML"],el=["href"],tl=["innerHTML"],nl=["innerHTML"],sl=g({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=V(),o=Ic(),l=Nc(),d=k(()=>t.value.editLink&&s.value.editLink!==!1),f=k(()=>n.value.lastUpdated&&s.value.lastUpdated!==!1),_=k(()=>d.value||f.value||l.value.prev||l.value.next);return(b,L)=>{var C,w,$,B,T,A,D;return c(_)?(a(),i("footer",jc,[u(b.$slots,"doc-footer-before",{},void 0,!0),c(d)||c(f)?(a(),i("div",qc,[c(d)?(a(),i("div",Kc,[h(O,{class:"edit-link-button",href:c(o).url,"no-icon":!0},{default:v(()=>[h(Fc,{class:"edit-link-icon","aria-label":"edit icon"}),I(" "+P(c(o).text),1)]),_:1},8,["href"])])):m("",!0),c(f)?(a(),i("div",Wc,[h(Uc)])):m("",!0)])):m("",!0),(C=c(l).prev)!=null&&C.link||(w=c(l).next)!=null&&w.link?(a(),i("div",Yc,[r("div",Xc,[($=c(l).prev)!=null&&$.link?(a(),i("a",{key:0,class:"pager-link prev",href:c(Z)(c(l).prev.link)},[r("span",{class:"desc",innerHTML:((B=c(t).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,Jc),r("span",{class:"title",innerHTML:c(l).prev.text},null,8,Zc)],8,Qc)):m("",!0)]),r("div",{class:M(["pager",{"has-prev":(T=c(l).prev)==null?void 0:T.link}])},[(A=c(l).next)!=null&&A.link?(a(),i("a",{key:0,class:"pager-link next",href:c(Z)(c(l).next.link)},[r("span",{class:"desc",innerHTML:((D=c(t).docFooter)==null?void 0:D.next)||"Next page"},null,8,tl),r("span",{class:"title",innerHTML:c(l).next.text},null,8,nl)],8,el)):m("",!0)],2)])):m("",!0)])):m("",!0)}}});const ol=p(sl,[["__scopeId","data-v-face870a"]]),al={key:0,class:"VPDocOutlineDropdown"},cl={key:0,class:"items"},ll=g({__name:"VPDocOutlineDropdown",setup(e){const{frontmatter:t,theme:n}=V(),s=x(!1);J(()=>{s.value=!1});const o=ge([]);return J(()=>{o.value=Le(t.value.outline??n.value.outline)}),(l,d)=>c(o).length>0?(a(),i("div",al,[r("button",{onClick:d[0]||(d[0]=f=>s.value=!s.value),class:M({open:s.value})},[I(P(c(Se)(c(n)))+" ",1),h(Ce,{class:"icon"})],2),s.value?(a(),i("div",cl,[h(Me,{headers:c(o)},null,8,["headers"])])):m("",!0)])):m("",!0)}});const il=p(ll,[["__scopeId","data-v-2edece88"]]),rl=e=>(H("data-v-c4b0d3cf"),e=e(),E(),e),ul={class:"container"},dl=rl(()=>r("div",{class:"aside-curtain"},null,-1)),_l={class:"aside-container"},vl={class:"aside-content"},hl={class:"content"},fl={class:"content-container"},pl={class:"main"},ml=g({__name:"VPDoc",setup(e){const t=ee(),{hasSidebar:n,hasAside:s,leftAside:o}=z(),l=k(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,f)=>{const _=R("Content");return a(),i("div",{class:M(["VPDoc",{"has-sidebar":c(n),"has-aside":c(s)}])},[u(d.$slots,"doc-top",{},void 0,!0),r("div",ul,[c(s)?(a(),i("div",{key:0,class:M(["aside",{"left-aside":c(o)}])},[dl,r("div",_l,[r("div",vl,[h(Bc,null,{"aside-top":v(()=>[u(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):m("",!0),r("div",hl,[r("div",fl,[u(d.$slots,"doc-before",{},void 0,!0),h(il),r("main",pl,[h(_,{class:M(["vp-doc",c(l)])},null,8,["class"])]),h(ol,null,{"doc-footer-before":v(()=>[u(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(d.$slots,"doc-after",{},void 0,!0)])])]),u(d.$slots,"doc-bottom",{},void 0,!0)],2)}}});const gl=p(ml,[["__scopeId","data-v-c4b0d3cf"]]),re=e=>(H("data-v-c70503b8"),e=e(),E(),e),yl={class:"NotFound"},bl=re(()=>r("p",{class:"code"},"404",-1)),kl=re(()=>r("h1",{class:"title"},"PAGE NOT FOUND",-1)),$l=re(()=>r("div",{class:"divider"},null,-1)),Pl=re(()=>r("blockquote",{class:"quote"}," But if you don't change your direction, and if you keep looking, you may end up where you are heading. ",-1)),Vl={class:"action"},wl=["href"],xl=g({__name:"NotFound",setup(e){const{site:t}=V(),{localeLinks:n}=te({removeCurrent:!1}),s=x("/");return F(()=>{var l;const o=window.location.pathname.replace(t.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(s.value=((l=n.value.find(({link:d})=>d.startsWith(o)))==null?void 0:l.link)||n.value[0].link)}),(o,l)=>(a(),i("div",yl,[bl,kl,$l,Pl,r("div",Vl,[r("a",{class:"link",href:c(he)(s.value),"aria-label":"go to home"}," Take me home ",8,wl)])]))}});const Sl=p(xl,[["__scopeId","data-v-c70503b8"]]),Ll=g({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=V(),{hasSidebar:s}=z();return(o,l)=>(a(),i("div",{class:M(["VPContent",{"has-sidebar":c(s),"is-home":c(n).layout==="home"}]),id:"VPContent"},[c(t).isNotFound?u(o.$slots,"not-found",{key:0},()=>[h(Sl)],!0):c(n).layout==="page"?(a(),y(Ia,{key:1},{"page-top":v(()=>[u(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):c(n).layout==="home"?(a(),y(mc,{key:2},{"home-hero-before":v(()=>[u(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):(a(),y(gl,{key:3},{"doc-top":v(()=>[u(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[u(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[u(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[u(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[u(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});const Ml=p(Ll,[["__scopeId","data-v-a494bd1d"]]),Cl={class:"container"},Bl=["innerHTML"],Il=["innerHTML"],Nl=g({__name:"VPFooter",setup(e){const{theme:t}=V(),{hasSidebar:n}=z();return(s,o)=>c(t).footer?(a(),i("footer",{key:0,class:M(["VPFooter",{"has-sidebar":c(n)}])},[r("div",Cl,[c(t).footer.message?(a(),i("p",{key:0,class:"message",innerHTML:c(t).footer.message},null,8,Bl)):m("",!0),c(t).footer.copyright?(a(),i("p",{key:1,class:"copyright",innerHTML:c(t).footer.copyright},null,8,Il)):m("",!0)])],2)):m("",!0)}});const Tl=p(Nl,[["__scopeId","data-v-2f86ebd2"]]),Al={key:0,class:"Layout"},Hl=g({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=z(),o=ee();q(()=>o.path,s),xt(t,s),oe("close-sidebar",s),oe("is-sidebar-open",t);const{frontmatter:l}=V(),d=vt(),f=k(()=>!!d["home-hero-image"]);return oe("hero-image-slot-exists",f),(_,b)=>{const L=R("Content");return c(l).layout!==!1?(a(),i("div",Al,[u(_.$slots,"layout-top",{},void 0,!0),h(Mt),h(It,{class:"backdrop",show:c(t),onClick:c(s)},null,8,["show","onClick"]),h(Oo,null,{"nav-bar-title-before":v(()=>[u(_.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(_.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(_.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(_.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[u(_.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(_.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),h(pa,{open:c(t),onOpenMenu:c(n)},null,8,["open","onOpenMenu"]),h(La,{open:c(t)},{"sidebar-nav-before":v(()=>[u(_.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[u(_.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),h(Ml,null,{"page-top":v(()=>[u(_.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(_.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[u(_.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[u(_.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(_.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(_.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(_.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(_.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(_.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[u(_.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(_.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(_.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[u(_.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(_.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[u(_.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(_.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(_.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(_.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(_.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(_.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),h(Tl),u(_.$slots,"layout-bottom",{},void 0,!0)])):(a(),y(L,{key:1}))}}});const El=p(Hl,[["__scopeId","data-v-b2cf3e0b"]]);const Dl={Layout:El,enhanceApp:({app:e})=>{e.component("Badge",ft)}};export{Dl as t};
diff --git a/assets/index.md.a7ecfcb0.js b/assets/index.md.a7ecfcb0.js
new file mode 100644
index 0000000..42091bd
--- /dev/null
+++ b/assets/index.md.a7ecfcb0.js
@@ -0,0 +1 @@
+import{_ as e,c as t,o as n}from"./chunks/framework.41379913.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"编程导引","text":"Introduction to Programming","tagline":"从零开始你的计算机编程之旅","actions":[{"text":"开始阅读 →","link":"/intro","theme":"brand"}]}},"headers":[],"relativePath":"index.md"}'),o={name:"index.md"};function a(r,i,c,s,d,m){return n(),t("div")}const l=e(o,[["render",a]]);export{_ as __pageData,l as default};
diff --git a/assets/index.md.a7ecfcb0.lean.js b/assets/index.md.a7ecfcb0.lean.js
new file mode 100644
index 0000000..42091bd
--- /dev/null
+++ b/assets/index.md.a7ecfcb0.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as t,o as n}from"./chunks/framework.41379913.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"编程导引","text":"Introduction to Programming","tagline":"从零开始你的计算机编程之旅","actions":[{"text":"开始阅读 →","link":"/intro","theme":"brand"}]}},"headers":[],"relativePath":"index.md"}'),o={name:"index.md"};function a(r,i,c,s,d,m){return n(),t("div")}const l=e(o,[["render",a]]);export{_ as __pageData,l as default};
diff --git a/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 b/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2
new file mode 100644
index 0000000..2a68729
Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 differ
diff --git a/assets/inter-italic-cyrillic.ea42a392.woff2 b/assets/inter-italic-cyrillic.ea42a392.woff2
new file mode 100644
index 0000000..f640351
Binary files /dev/null and b/assets/inter-italic-cyrillic.ea42a392.woff2 differ
diff --git a/assets/inter-italic-greek-ext.4fbe9427.woff2 b/assets/inter-italic-greek-ext.4fbe9427.woff2
new file mode 100644
index 0000000..0021896
Binary files /dev/null and b/assets/inter-italic-greek-ext.4fbe9427.woff2 differ
diff --git a/assets/inter-italic-greek.8f4463c4.woff2 b/assets/inter-italic-greek.8f4463c4.woff2
new file mode 100644
index 0000000..71c265f
Binary files /dev/null and b/assets/inter-italic-greek.8f4463c4.woff2 differ
diff --git a/assets/inter-italic-latin-ext.bd8920cc.woff2 b/assets/inter-italic-latin-ext.bd8920cc.woff2
new file mode 100644
index 0000000..9c1b944
Binary files /dev/null and b/assets/inter-italic-latin-ext.bd8920cc.woff2 differ
diff --git a/assets/inter-italic-latin.bd3b6f56.woff2 b/assets/inter-italic-latin.bd3b6f56.woff2
new file mode 100644
index 0000000..01fcf20
Binary files /dev/null and b/assets/inter-italic-latin.bd3b6f56.woff2 differ
diff --git a/assets/inter-italic-vietnamese.6ce511fb.woff2 b/assets/inter-italic-vietnamese.6ce511fb.woff2
new file mode 100644
index 0000000..e4f788e
Binary files /dev/null and b/assets/inter-italic-vietnamese.6ce511fb.woff2 differ
diff --git a/assets/inter-roman-cyrillic-ext.e75737ce.woff2 b/assets/inter-roman-cyrillic-ext.e75737ce.woff2
new file mode 100644
index 0000000..28593cc
Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.e75737ce.woff2 differ
diff --git a/assets/inter-roman-cyrillic.5f2c6c8c.woff2 b/assets/inter-roman-cyrillic.5f2c6c8c.woff2
new file mode 100644
index 0000000..a20adc1
Binary files /dev/null and b/assets/inter-roman-cyrillic.5f2c6c8c.woff2 differ
diff --git a/assets/inter-roman-greek-ext.ab0619bc.woff2 b/assets/inter-roman-greek-ext.ab0619bc.woff2
new file mode 100644
index 0000000..e3b0be7
Binary files /dev/null and b/assets/inter-roman-greek-ext.ab0619bc.woff2 differ
diff --git a/assets/inter-roman-greek.d5a6d92a.woff2 b/assets/inter-roman-greek.d5a6d92a.woff2
new file mode 100644
index 0000000..f790e04
Binary files /dev/null and b/assets/inter-roman-greek.d5a6d92a.woff2 differ
diff --git a/assets/inter-roman-latin-ext.0030eebd.woff2 b/assets/inter-roman-latin-ext.0030eebd.woff2
new file mode 100644
index 0000000..715bd90
Binary files /dev/null and b/assets/inter-roman-latin-ext.0030eebd.woff2 differ
diff --git a/assets/inter-roman-latin.2ed14f66.woff2 b/assets/inter-roman-latin.2ed14f66.woff2
new file mode 100644
index 0000000..a540b7a
Binary files /dev/null and b/assets/inter-roman-latin.2ed14f66.woff2 differ
diff --git a/assets/inter-roman-vietnamese.14ce25a6.woff2 b/assets/inter-roman-vietnamese.14ce25a6.woff2
new file mode 100644
index 0000000..5a9f9cb
Binary files /dev/null and b/assets/inter-roman-vietnamese.14ce25a6.woff2 differ
diff --git a/assets/intro.md.ca4ae51e.js b/assets/intro.md.ca4ae51e.js
new file mode 100644
index 0000000..79f3cb2
--- /dev/null
+++ b/assets/intro.md.ca4ae51e.js
@@ -0,0 +1 @@
+import{_ as e,c as a,o as r,O as t}from"./chunks/framework.41379913.js";const l="/assets/wechat-mp-qrcode.f64c0e73.jpg",i="/assets/wechat-pay-qrcode.87383472.jpg",_=JSON.parse('{"title":"引言","description":"","frontmatter":{},"headers":[],"relativePath":"intro.md"}'),o={name:"intro.md"},n=t('引言 编程 编程(Programming)是一项创造性的活动,如同创作(Composing)、绘画(Painting)等一样。我们常常会通过一系列的步骤把所需要的部件进行组合,得到另一个期望的结构,或者是解决一个实际性的问题。表达和构建这些步骤的过程,就是编程(当然,在脱离程序语言以后,也可以把它叫做规划 (Programme))。
我们会简单地把一件件小事按顺序 做,这样一件件小事的组合以后就可以完成一件更大的事情。比如我们会切菜,生火,炒菜,煮饭,这样我们就能够做出一顿午餐。
当然在这个过程中可能会设计一些计算 。我们会考虑,需要放几勺盐和几把米,以适合最后吃午餐的人的营养均衡。在特殊的时候,甚至需要精确到毫克级别的营养规划,以及不同人的营养结构的差异等。我们会在第二节探讨关于计算,以及计算的组合 等相关问题。
在规划和解决问题的时候可能并不是一帆风顺的,有时候我们会面临各种抉择。比如,考虑明天下午吃素还是吃荤,吃鸡肉和还是鱼肉,吃宫保鸡丁还是鱼香肉丝等等。有比如,在我们准备吃鱼香肉丝的时候发现没有鱼了,又该怎么办。
在任何需要做选择的时候,作为一个程序员(规划师 ),你不应该出现选择困难症。因为任何一个涵待解决的问题都必须得到解决之后才能让这个程序正常地执行。所以,我们在第三章中会探讨关于过程设计,以及如何利用循环和选择等手法来设计一个完善的程序的相关问题。
但是做饭的时候你是怎么区分盐和砂糖、醋和酱油的呢?当然你会说每个都尝一遍,但是这样既有可能浪费,又不卫生。所以习惯性地我们会关注这些材料瓶上面的标签,从上面知道我们用的是什么东西。当然对于读不懂标签的计算机来说,这些材料作为商品的时候都会有固定的条形码,这个条形码也能够让计算机知道一个被它看到的东西代表着什么。因为它知道这些条码是如何编码 (Encoding)的。
当你遇到大量具有相同组件的时候,可以考虑用序列 (Sequence)或者列表(List)来安排这些组件。比如做一道菜的每一个步骤对应在菜谱上的每一项。或者是在处理具有层级结构以及更复杂的关联的结构的时候采用树 (Tree)和图 (Graph)来组织。比如六度关系理论,实际上就是一张非常大的图 (Graph)。
有时候会考虑到一部分组件是可变的。比如时间总是流逝的,人总会长大的。当我们尝试描述一个组件改变的时候,就引入了状态 (State)。这种时候我们更希望能够把改变的数据和相应的操作做一个绑定,这样子绑定了组件的操作就可以看成一个闭包(Closure)。简单地比如一个计数器。当在组件上面绑定更多操作的时候,就可以把它看作一个对象 (Object)。
可变的状态可能会带来的一个问题就是,如果有多个人尝试同时去修改这个状态的时候,会造成结果的不一致性。比如,一个没有加入事务处理的银行账户,两个人同时在进行操作,账户中原有1000元,甲存入了200块,但在甲存入200块还未完成的同时乙取出了200块。这种时候会有几种可能的结果,第一种就是甲先于乙完成操作,结果就是账户余额变成了800块,凭空损失了200块;另外一种就是乙先于甲完成了操作,结果账户余额就变成了甲操作的结果,1200块,凭空多出来400块。这种问题就属于并发 (Concurrency)。
JavaScript 本书选择使用JavaScript来讲述编程中的各种思想和概念。
我们并不是在讲述JavaScript这门编程语言,只是通过JavaScript和其提供的丰富的方便特性,来讲述关于“程序设计”的内容。任何与JavaScript细节相关的东西,可以参考Mozilla Developer Network ,对于特定的主题,我也会专门列出可以参阅的链接。StackOverflow 上也有丰富的资源来解答你的疑惑。
作为入门书籍,为了直观地表述各种概念或者原理,本书可能会使用一些非专业词汇,或者与准确定义有偏差的理解。JavaScript作为一种生产力工具,其准确定义和行为以ECMA 262 国际标准为准。对专业人员如有任何困惑或者争议的点,请参考标准文档的描述。同样,如果你通过本书对编程和相关的东西产生了兴趣,希望深入了解和学习,也请使用专业的书籍和资料。本书只是作为入门的引导,不对专业内容做解释和定义。
更新状态 这本书从2015年8月开始编写,中间经过了多次的重写过程,包括把编程语言从偏硬核且专业的C++转向为JavaScript、引入更多资料和练习、增补和调整章节顺序等,目前内容仍处于不稳定的状态,请参考下面的状态来确定这一章是否值得学习:
第一章 环境 (rewriting) 第二章 计算 Computation (outdated) 第三章 过程 Procedural (outdated) 第四章 编码 Encoding (outdated) 第五章 序列 Sequence (outdated) 第六章 数据 Data (outdated) 第七章 状态 State (prepared) 第八章 引用 Reference 第九章 闭包 Closure 第十章 对象 Object (prepared) 第十一章 第十二章 more... 目录 参与贡献 本书的源码托管在github:kenpusney/i2p-the-book 仓库,你可以提交issue或者pull request贡献和改进本书。
支持我 关注我的公众号获取更新: 资助我创作: 微信二维码:
或点击我的 Paypal 链接 给予帮助。
特别感谢以下朋友的资助 ',31),h=[n];function s(c,p,d,g,u,f){return r(),a("div",null,h)}const b=e(o,[["render",s]]);export{_ as __pageData,b as default};
diff --git a/assets/intro.md.ca4ae51e.lean.js b/assets/intro.md.ca4ae51e.lean.js
new file mode 100644
index 0000000..d74ea20
--- /dev/null
+++ b/assets/intro.md.ca4ae51e.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as a,o as r,O as t}from"./chunks/framework.41379913.js";const l="/assets/wechat-mp-qrcode.f64c0e73.jpg",i="/assets/wechat-pay-qrcode.87383472.jpg",_=JSON.parse('{"title":"引言","description":"","frontmatter":{},"headers":[],"relativePath":"intro.md"}'),o={name:"intro.md"},n=t("",31),h=[n];function s(c,p,d,g,u,f){return r(),a("div",null,h)}const b=e(o,[["render",s]]);export{_ as __pageData,b as default};
diff --git a/assets/stream.md.a4405d7c.js b/assets/stream.md.a4405d7c.js
new file mode 100644
index 0000000..bb66f55
--- /dev/null
+++ b/assets/stream.md.a4405d7c.js
@@ -0,0 +1 @@
+import{_ as a,c as t,o as r,z as e,a as s}from"./chunks/framework.41379913.js";const u=JSON.parse('{"title":"流","description":"","frontmatter":{},"headers":[],"relativePath":"stream.md"}'),o={name:"stream.md"},c=e("h1",{id:"流",tabindex:"-1"},[s("流 "),e("a",{class:"header-anchor",href:"#流","aria-label":'Permalink to "流"'},"")],-1),n=[c];function d(i,_,l,m,p,h){return r(),t("div",null,n)}const x=a(o,[["render",d]]);export{u as __pageData,x as default};
diff --git a/assets/stream.md.a4405d7c.lean.js b/assets/stream.md.a4405d7c.lean.js
new file mode 100644
index 0000000..bb66f55
--- /dev/null
+++ b/assets/stream.md.a4405d7c.lean.js
@@ -0,0 +1 @@
+import{_ as a,c as t,o as r,z as e,a as s}from"./chunks/framework.41379913.js";const u=JSON.parse('{"title":"流","description":"","frontmatter":{},"headers":[],"relativePath":"stream.md"}'),o={name:"stream.md"},c=e("h1",{id:"流",tabindex:"-1"},[s("流 "),e("a",{class:"header-anchor",href:"#流","aria-label":'Permalink to "流"'},"")],-1),n=[c];function d(i,_,l,m,p,h){return r(),t("div",null,n)}const x=a(o,[["render",d]]);export{u as __pageData,x as default};
diff --git a/assets/style.c68003ee.css b/assets/style.c68003ee.css
new file mode 100644
index 0000000..759d1b2
--- /dev/null
+++ b/assets/style.c68003ee.css
@@ -0,0 +1 @@
+@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.5f2c6c8c.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.e75737ce.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.d5a6d92a.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.ab0619bc.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.2ed14f66.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.0030eebd.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.14ce25a6.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.ea42a392.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.8f4463c4.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.4fbe9427.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.bd3b6f56.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.bd8920cc.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.6ce511fb.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-gray: #8e8e93;--vp-c-text-light-1: rgba(60, 60, 67);--vp-c-text-light-2: rgba(60, 60, 67, .75);--vp-c-text-light-3: rgba(60, 60, 67, .33);--vp-c-text-dark-1: rgba(255, 255, 245, .86);--vp-c-text-dark-2: rgba(235, 235, 245, .6);--vp-c-text-dark-3: rgba(235, 235, 245, .38);--vp-c-green: #10b981;--vp-c-green-light: #34d399;--vp-c-green-lighter: #6ee7b7;--vp-c-green-dark: #059669;--vp-c-green-darker: #047857;--vp-c-green-dimm-1: rgba(16, 185, 129, .05);--vp-c-green-dimm-2: rgba(16, 185, 129, .2);--vp-c-green-dimm-3: rgba(16, 185, 129, .5);--vp-c-yellow: #d97706;--vp-c-yellow-light: #f59e0b;--vp-c-yellow-lighter: #fbbf24;--vp-c-yellow-dark: #b45309;--vp-c-yellow-darker: #92400e;--vp-c-yellow-dimm-1: rgba(234, 179, 8, .05);--vp-c-yellow-dimm-2: rgba(234, 179, 8, .2);--vp-c-yellow-dimm-3: rgba(234, 179, 8, .5);--vp-c-red: #f43f5e;--vp-c-red-light: #fb7185;--vp-c-red-lighter: #fda4af;--vp-c-red-dark: #e11d48;--vp-c-red-darker: #be123c;--vp-c-red-dimm-1: rgba(244, 63, 94, .05);--vp-c-red-dimm-2: rgba(244, 63, 94, .2);--vp-c-red-dimm-3: rgba(244, 63, 94, .5);--vp-c-sponsor: #db2777}:root{--vp-c-bg: #ffffff;--vp-c-bg-elv: #ffffff;--vp-c-bg-elv-up: #ffffff;--vp-c-bg-elv-down: #f6f6f7;--vp-c-bg-elv-mute: #f6f6f7;--vp-c-bg-soft: #f6f6f7;--vp-c-bg-soft-up: #f9f9fa;--vp-c-bg-soft-down: #e3e3e5;--vp-c-bg-soft-mute: #e3e3e5;--vp-c-bg-alt: #f6f6f7;--vp-c-border: rgba(60, 60, 67, .29);--vp-c-divider: rgba(60, 60, 67, .12);--vp-c-gutter: rgba(60, 60, 67, .12);--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white);--vp-c-text-1: var(--vp-c-text-light-1);--vp-c-text-2: var(--vp-c-text-light-2);--vp-c-text-3: var(--vp-c-text-light-3);--vp-c-text-inverse-1: var(--vp-c-text-dark-1);--vp-c-text-inverse-2: var(--vp-c-text-dark-2);--vp-c-text-inverse-3: var(--vp-c-text-dark-3);--vp-c-text-code: #476582;--vp-c-brand: var(--vp-c-green);--vp-c-brand-light: var(--vp-c-green-light);--vp-c-brand-lighter: var(--vp-c-green-lighter);--vp-c-brand-dark: var(--vp-c-green-dark);--vp-c-brand-darker: var(--vp-c-green-darker);--vp-c-mute: #f6f6f7;--vp-c-mute-light: #f9f9fc;--vp-c-mute-lighter: #ffffff;--vp-c-mute-dark: #e3e3e5;--vp-c-mute-darker: #d7d7d9}.dark{--vp-c-bg: #1e1e20;--vp-c-bg-elv: #252529;--vp-c-bg-elv-up: #313136;--vp-c-bg-elv-down: #1e1e20;--vp-c-bg-elv-mute: #313136;--vp-c-bg-soft: #252529;--vp-c-bg-soft-up: #313136;--vp-c-bg-soft-down: #1e1e20;--vp-c-bg-soft-mute: #313136;--vp-c-bg-alt: #161618;--vp-c-border: rgba(82, 82, 89, .68);--vp-c-divider: rgba(82, 82, 89, .32);--vp-c-gutter: #000000;--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black);--vp-c-text-1: var(--vp-c-text-dark-1);--vp-c-text-2: var(--vp-c-text-dark-2);--vp-c-text-3: var(--vp-c-text-dark-3);--vp-c-text-inverse-1: var(--vp-c-text-light-1);--vp-c-text-inverse-2: var(--vp-c-text-light-2);--vp-c-text-inverse-3: var(--vp-c-text-light-3);--vp-c-text-code: #c9def1;--vp-c-mute: #313136;--vp-c-mute-light: #3a3a3c;--vp-c-mute-lighter: #505053;--vp-c-mute-dark: #2c2c30;--vp-c-mute-darker: #252529}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-local-nav: 10;--vp-z-index-nav: 20;--vp-z-index-layout-top: 30;--vp-z-index-backdrop: 40;--vp-z-index-sidebar: 50;--vp-z-index-footer: 60}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-block-color: var(--vp-c-text-dark-1);--vp-code-block-bg: #292b30;--vp-code-block-bg-light: #1e1e20;--vp-code-block-divider-color: #000000;--vp-code-line-highlight-color: rgba(0, 0, 0, .5);--vp-code-line-number-color: var(--vp-c-text-dark-3);--vp-code-line-diff-add-color: var(--vp-c-green-dimm-2);--vp-code-line-diff-add-symbol-color: var(--vp-c-green);--vp-code-line-diff-remove-color: var(--vp-c-red-dimm-2);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red);--vp-code-line-warning-color: var(--vp-c-yellow-dimm-2);--vp-code-line-error-color: var(--vp-c-red-dimm-2);--vp-code-copy-code-border-color: transparent;--vp-code-copy-code-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-active-text: var(--vp-c-text-dark-2);--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-dark-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-bar-color: var(--vp-c-brand)}.dark{--vp-code-block-bg: #161618}:root{--vp-button-brand-border: var(--vp-c-brand-lighter);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-lighter);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-dark);--vp-button-brand-active-border: var(--vp-c-brand-lighter);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-darker);--vp-button-alt-border: var(--vp-c-border);--vp-button-alt-text: var(--vp-c-neutral);--vp-button-alt-bg: var(--vp-c-mute);--vp-button-alt-hover-border: var(--vp-c-border);--vp-button-alt-hover-text: var(--vp-c-neutral);--vp-button-alt-hover-bg: var(--vp-c-mute-dark);--vp-button-alt-active-border: var(--vp-c-border);--vp-button-alt-active-text: var(--vp-c-neutral);--vp-button-alt-active-bg: var(--vp-c-mute-darker);--vp-button-sponsor-border: var(--vp-c-gray-light-3);--vp-button-sponsor-text: var(--vp-c-text-light-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}.dark{--vp-button-sponsor-border: var(--vp-c-gray-dark-1);--vp-button-sponsor-text: var(--vp-c-text-dark-2)}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: var(--vp-c-border);--vp-custom-block-info-text: var(--vp-c-text-2);--vp-custom-block-info-bg: var(--vp-c-bg-soft-up);--vp-custom-block-info-code-bg: var(--vp-c-bg-soft);--vp-custom-block-tip-border: var(--vp-c-green);--vp-custom-block-tip-text: var(--vp-c-green-dark);--vp-custom-block-tip-bg: var(--vp-c-bg-soft-up);--vp-custom-block-tip-code-bg: var(--vp-c-bg-soft);--vp-custom-block-warning-border: var(--vp-c-yellow);--vp-custom-block-warning-text: var(--vp-c-yellow);--vp-custom-block-warning-bg: var(--vp-c-bg-soft-up);--vp-custom-block-warning-code-bg: var(--vp-c-bg-soft);--vp-custom-block-danger-border: var(--vp-c-red);--vp-custom-block-danger-text: var(--vp-c-red);--vp-custom-block-danger-bg: var(--vp-c-bg-soft-up);--vp-custom-block-danger-code-bg: var(--vp-c-bg-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-details-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-hover-border-color: var(--vp-c-gray);--vp-input-switch-bg-color: var(--vp-c-mute)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg)}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: var(--vp-c-border);--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-bg-soft-up);--vp-badge-tip-border: var(--vp-c-green-dark);--vp-badge-tip-text: var(--vp-c-green);--vp-badge-tip-bg: var(--vp-c-green-dimm-1);--vp-badge-warning-border: var(--vp-c-yellow-dark);--vp-badge-warning-text: var(--vp-c-yellow);--vp-badge-warning-bg: var(--vp-c-yellow-dimm-1);--vp-badge-danger-border: var(--vp-c-red-dark);--vp-badge-danger-text: var(--vp-c-red);--vp-badge-danger-bg: var(--vp-c-red-dimm-1)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand);--vp-local-search-highlight-bg: var(--vp-c-green-lighter);--vp-local-search-highlight-text: var(--vp-c-black)}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);direction:ltr;font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600}.custom-block a:hover{text-decoration:underline}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.dark .vp-code-light{display:none}html:not(.dark) .vp-code-dark{display:none}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden}.vp-code-group .tabs:after{position:absolute;right:0;bottom:0;left:0;height:1px;background-color:var(--vp-code-tab-divider);content:""}@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:absolute;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:10;height:1px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-]{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{display:block}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{float:left;margin-left:-.87em;padding-right:.23em;font-weight:500;user-select:none;opacity:0;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand);text-decoration-style:dotted;transition:color .25s}.vp-doc a:hover{text-decoration:underline}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block a{color:inherit;font-weight:600}.vp-doc .custom-block a:hover{text-decoration:underline}.vp-doc .custom-block code{font-size:var(--vp-custom-block-code-font-size);font-weight:700;color:inherit}.vp-doc .custom-block div[class*=language-]{margin:8px 0}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;color:var(--vp-c-text-code);background-color:var(--vp-c-mute);transition:color .5s,background-color .5s}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc a>code{color:var(--vp-c-brand);transition:color .25s}.vp-doc a:hover>code{color:var(--vp-c-brand-dark)}.vp-doc div[class*=language-]{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-]{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;left:-65px;display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;width:64px;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:"Copied"}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-c-text-dark-3);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}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin-bottom:4px;text-align:center;letter-spacing:1px;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-bg-soft-down)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge[data-v-350d3852]{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:10px;padding:0 8px;line-height:18px;font-size:12px;font-weight:600;transform:translateY(-2px)}h1 .VPBadge[data-v-350d3852],h2 .VPBadge[data-v-350d3852],h3 .VPBadge[data-v-350d3852],h4 .VPBadge[data-v-350d3852],h5 .VPBadge[data-v-350d3852],h6 .VPBadge[data-v-350d3852]{vertical-align:top}h2 .VPBadge[data-v-350d3852]{border-radius:11px;line-height:20px}.VPBadge.info[data-v-350d3852]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-350d3852]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-350d3852]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-350d3852]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPSkipLink[data-v-c8616af1]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c8616af1]:focus{height:auto;width:auto;clip:auto;clip-path:none}.dark .VPSkipLink[data-v-c8616af1]{color:var(--vp-c-green)}@media (min-width: 1280px){.VPSkipLink[data-v-c8616af1]{top:14px;left:16px}}.VPBackdrop[data-v-c79a1216]{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-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}html:not(.dark) .VPImage.dark[data-v-6db2186b]{display:none}.dark .VPImage.light[data-v-6db2186b]{display:none}.title[data-v-f4ef19a3]{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}.title[data-v-f4ef19a3]:hover{opacity:.6}@media (min-width: 960px){.title[data-v-f4ef19a3]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-f4ef19a3]{border-bottom-color:var(--vp-c-divider)}}[data-v-f4ef19a3] .logo{margin-right:8px;height:24px}/*! @docsearch/css 3.3.3 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{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{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;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;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;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{appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{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;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{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;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.DocSearch{--docsearch-primary-color: var(--vp-c-brand);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark .DocSearch{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-bg-soft-mute);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:32px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:1px;letter-spacing:-12px;color:transparent}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:var(--vp-meta-key);font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-bg-soft-mute)}.DocSearch-Screen-Icon>svg{margin:auto}.icon[data-v-8f4dc553]{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;fill:var(--vp-c-text-3);transition:fill .25s;flex-shrink:0}.VPNavBarMenuLink[data-v-37adc828]{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-37adc828],.VPNavBarMenuLink[data-v-37adc828]:hover{color:var(--vp-c-brand)}.VPMenuGroup+.VPMenuLink[data-v-d2c93bab]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-d2c93bab]{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-d2c93bab]:hover{color:var(--vp-c-brand);background-color:var(--vp-c-bg-elv-mute)}.link.active[data-v-d2c93bab]{color:var(--vp-c-brand)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{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-e7ea1737]{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-e7ea1737] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e7ea1737] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e7ea1737] .group:last-child{padding-bottom:0}.VPMenu[data-v-e7ea1737] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e7ea1737] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e7ea1737] .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-e7ea1737] .action{padding-left:24px}.VPFlyout[data-v-764effdf]{position:relative}.VPFlyout[data-v-764effdf]:hover{color:var(--vp-c-brand);transition:color .25s}.VPFlyout:hover .text[data-v-764effdf]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-764effdf]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-764effdf]{color:var(--vp-c-brand)}.VPFlyout.active:hover .text[data-v-764effdf]{color:var(--vp-c-brand-dark)}.VPFlyout:hover .menu[data-v-764effdf],.button[aria-expanded=true]+.menu[data-v-764effdf]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-764effdf]{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-764effdf]{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-764effdf]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-764effdf]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-764effdf]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-764effdf]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPNavBarMenu[data-v-7f418b0f]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-7f418b0f]{display:flex}}.VPNavBarTranslations[data-v-74abcbb9]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-74abcbb9]{display:flex;align-items:center}}.title[data-v-74abcbb9]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPSwitch[data-v-f3c41672]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s}.VPSwitch[data-v-f3c41672]:hover{border-color:var(--vp-input-hover-border-color)}.check[data-v-f3c41672]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s}.icon[data-v-f3c41672]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-f3c41672] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-f3c41672] svg{fill:var(--vp-c-text-1);transition:opacity .25s}.sun[data-v-a9c8afb8]{opacity:1}.moon[data-v-a9c8afb8],.dark .sun[data-v-a9c8afb8]{opacity:0}.dark .moon[data-v-a9c8afb8]{opacity:1}.dark .VPSwitchAppearance[data-v-a9c8afb8] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-f6a63727]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-f6a63727]{display:flex;align-items:center}}.VPSocialLink[data-v-c530cc0a]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-c530cc0a]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-c530cc0a]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-f6988cfb]{display:flex;flex-wrap:wrap;justify-content:center}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.VPNavBarExtra[data-v-40855f84]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-40855f84]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-40855f84]{display:none}}.trans-title[data-v-40855f84]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-40855f84],.item.social-links[data-v-40855f84]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-40855f84]{min-width:176px}.appearance-action[data-v-40855f84]{margin-right:-2px}.social-links-list[data-v-40855f84]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBar[data-v-94c81dcc]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);transition:border-color .5s,background-color .5s;pointer-events:none;white-space:nowrap}.VPNavBar.has-sidebar[data-v-94c81dcc]{border-bottom-color:var(--vp-c-gutter)}@media (min-width: 768px){.VPNavBar[data-v-94c81dcc]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-94c81dcc]{border-bottom-color:transparent;padding:0}.VPNavBar.fill[data-v-94c81dcc]:not(.has-sidebar){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-94c81dcc]{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-94c81dcc],.container>.content[data-v-94c81dcc]{pointer-events:none}.container[data-v-94c81dcc] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-94c81dcc]{max-width:100%}}.title[data-v-94c81dcc]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-94c81dcc]{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-94c81dcc]{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-94c81dcc]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-94c81dcc]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-94c81dcc]{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-94c81dcc]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .content-body[data-v-94c81dcc],.VPNavBar.fill .content-body[data-v-94c81dcc]{position:relative;background-color:var(--vp-nav-bg-color)}}.menu+.translations[data-v-94c81dcc]:before,.menu+.appearance[data-v-94c81dcc]:before,.menu+.social-links[data-v-94c81dcc]:before,.translations+.appearance[data-v-94c81dcc]:before,.appearance+.social-links[data-v-94c81dcc]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-94c81dcc]:before,.translations+.appearance[data-v-94c81dcc]:before{margin-right:16px}.appearance+.social-links[data-v-94c81dcc]:before{margin-left:16px}.social-links[data-v-94c81dcc]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-94c81dcc]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-94c81dcc]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-94c81dcc]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenMenuLink[data-v-c328f34f]{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-c328f34f]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupLink[data-v-3d20956d]{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-3d20956d]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupSection[data-v-7478538b]{display:block}.title[data-v-7478538b]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-a9a19324]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-a9a19324]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-a9a19324]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-a9a19324]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-a9a19324]{padding-bottom:6px;color:var(--vp-c-brand)}.VPNavScreenMenuGroup.open .button-icon[data-v-a9a19324]{transform:rotate(45deg)}.button[data-v-a9a19324]{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-a9a19324]:hover{color:var(--vp-c-brand)}.button-icon[data-v-a9a19324]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-a9a19324]:first-child{padding-top:0}.group+.group[data-v-a9a19324],.group+.item[data-v-a9a19324]{padding-top:4px}.VPNavScreenAppearance[data-v-add8f686]{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-add8f686]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenTranslations[data-v-d72aa483]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-d72aa483]{height:auto}.title[data-v-d72aa483]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-d72aa483]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-d72aa483]{margin-right:8px}.icon.chevron[data-v-d72aa483]{margin-left:4px}.list[data-v-d72aa483]{padding:4px 0 0 24px}.link[data-v-d72aa483]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-724636ae]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-724636ae],.VPNavScreen.fade-leave-active[data-v-724636ae]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-724636ae],.VPNavScreen.fade-leave-active .container[data-v-724636ae]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-724636ae],.VPNavScreen.fade-leave-to[data-v-724636ae]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-724636ae],.VPNavScreen.fade-leave-to .container[data-v-724636ae]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-724636ae]{display:none}}.container[data-v-724636ae]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-724636ae],.menu+.appearance[data-v-724636ae],.translations+.appearance[data-v-724636ae]{margin-top:24px}.menu+.social-links[data-v-724636ae]{margin-top:16px}.appearance+.social-links[data-v-724636ae]{margin-top:16px}.VPNav[data-v-7e5bc4a5]{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-7e5bc4a5]{position:fixed}}.root[data-v-9a431c33]{position:relative;z-index:1}.nested[data-v-9a431c33]{padding-left:13px}.outline-link[data-v-9a431c33]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:500}.outline-link[data-v-9a431c33]:hover,.outline-link.active[data-v-9a431c33]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-9a431c33]{padding-left:13px}.VPLocalNavOutlineDropdown[data-v-079b16a8]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-079b16a8]{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-079b16a8]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-079b16a8]{color:var(--vp-c-text-1)}.icon[data-v-079b16a8]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-079b16a8] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-079b16a8]{transform:rotate(90deg)}.items[data-v-079b16a8]{position:absolute;left:20px;right:20px;top:64px;background-color:var(--vp-local-nav-bg-color);padding:4px 10px 16px;border:1px solid var(--vp-c-divider);border-radius:8px;max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}.top-link[data-v-079b16a8]{display:block;color:var(--vp-c-brand);font-size:13px;font-weight:500;padding:6px 0;margin:0 13px 10px;border-bottom:1px solid var(--vp-c-divider)}.flyout-enter-active[data-v-079b16a8]{transition:all .2s ease-out}.flyout-leave-active[data-v-079b16a8]{transition:all .15s ease-in}.flyout-enter-from[data-v-079b16a8],.flyout-leave-to[data-v-079b16a8]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-f5a2ca58]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;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);transition:border-color .5s,background-color .5s}@media (min-width: 960px){.VPLocalNav[data-v-f5a2ca58]{display:none}}.menu[data-v-f5a2ca58]{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-f5a2ca58]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-f5a2ca58]{padding:0 32px}}.menu-icon[data-v-f5a2ca58]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-f5a2ca58]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-f5a2ca58]{padding:12px 32px 11px}}.VPSidebarItem.level-0[data-v-c4656e6d]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-c4656e6d]{padding-bottom:10px}.item[data-v-c4656e6d]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-c4656e6d]{cursor:pointer}.indicator[data-v-c4656e6d]{position:absolute;top:6px;bottom:6px;left:-17px;width:1px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-c4656e6d],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-c4656e6d],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-c4656e6d],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-c4656e6d]{background-color:var(--vp-c-brand)}.link[data-v-c4656e6d]{display:flex;align-items:center;flex-grow:1}.text[data-v-c4656e6d]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-c4656e6d]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-c4656e6d],.VPSidebarItem.level-2 .text[data-v-c4656e6d],.VPSidebarItem.level-3 .text[data-v-c4656e6d],.VPSidebarItem.level-4 .text[data-v-c4656e6d],.VPSidebarItem.level-5 .text[data-v-c4656e6d]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-c4656e6d]{color:var(--vp-c-brand)}.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-c4656e6d]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-c4656e6d]{color:var(--vp-c-brand)}.caret[data-v-c4656e6d]{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}.item:hover .caret[data-v-c4656e6d]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-c4656e6d]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-c4656e6d]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-c4656e6d]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-c4656e6d],.VPSidebarItem.level-2 .items[data-v-c4656e6d],.VPSidebarItem.level-3 .items[data-v-c4656e6d],.VPSidebarItem.level-4 .items[data-v-c4656e6d],.VPSidebarItem.level-5 .items[data-v-c4656e6d]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-c4656e6d]{display:none}.VPSidebar[data-v-af16598e]{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-af16598e]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-af16598e]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-af16598e]{z-index:1;padding-top:var(--vp-nav-height);padding-bottom:128px;width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-af16598e]{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-af16598e]{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-af16598e]{outline:0}.group+.group[data-v-af16598e]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-af16598e]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPButton[data-v-567ba664]{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-567ba664]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-567ba664]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-567ba664]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-567ba664]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-567ba664]: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-567ba664]: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-567ba664]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-567ba664]: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-567ba664]: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-567ba664]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-567ba664]: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-567ba664]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}.VPHero[data-v-fd2650d5]{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-fd2650d5]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-fd2650d5]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-fd2650d5]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-fd2650d5]{flex-direction:row}}.main[data-v-fd2650d5]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-fd2650d5]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-fd2650d5]{text-align:left}}@media (min-width: 960px){.main[data-v-fd2650d5]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-fd2650d5]{max-width:592px}}.name[data-v-fd2650d5],.text[data-v-fd2650d5]{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-fd2650d5],.VPHero.has-image .text[data-v-fd2650d5]{margin:0 auto}.name[data-v-fd2650d5]{color:var(--vp-home-hero-name-color)}.clip[data-v-fd2650d5]{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-fd2650d5],.text[data-v-fd2650d5]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-fd2650d5],.text[data-v-fd2650d5]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-fd2650d5],.VPHero.has-image .text[data-v-fd2650d5]{margin:0}}.tagline[data-v-fd2650d5]{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-fd2650d5]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-fd2650d5]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-fd2650d5]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-fd2650d5]{margin:0}}.actions[data-v-fd2650d5]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-fd2650d5]{justify-content:center}@media (min-width: 640px){.actions[data-v-fd2650d5]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-fd2650d5]{justify-content:flex-start}}.action[data-v-fd2650d5]{flex-shrink:0;padding:6px}.image[data-v-fd2650d5]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-fd2650d5]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-fd2650d5]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-fd2650d5]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-fd2650d5]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-fd2650d5]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-fd2650d5]{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-fd2650d5]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-fd2650d5]{width:320px;height:320px}}[data-v-fd2650d5] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-fd2650d5] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-fd2650d5] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-837f6cca]{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-837f6cca]:hover{border-color:var(--vp-c-brand);background-color:var(--vp-c-bg-soft-up)}.box[data-v-837f6cca]{display:flex;flex-direction:column;padding:24px;height:100%}.VPFeature[data-v-837f6cca] .VPImage{width:48px;height:48px;margin-bottom:20px}.icon[data-v-837f6cca]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-bg-soft-down);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-837f6cca]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-837f6cca]{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-837f6cca]{padding-top:8px}.link-text-value[data-v-837f6cca]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand)}.link-text-icon[data-v-837f6cca]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-6816157f]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-6816157f]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-6816157f]{padding:0 64px}}.container[data-v-6816157f]{margin:0 auto;max-width:1152px}.items[data-v-6816157f]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-6816157f]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-6816157f],.item.grid-4[data-v-6816157f],.item.grid-6[data-v-6816157f]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-6816157f],.item.grid-4[data-v-6816157f]{width:50%}.item.grid-3[data-v-6816157f],.item.grid-6[data-v-6816157f]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-6816157f]{width:25%}}.VPHome[data-v-d82743a8]{padding-bottom:96px}.VPHome[data-v-d82743a8] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-d82743a8]{padding-bottom:128px}}.VPDocAsideOutline[data-v-ff0f39c8]{display:none}.VPDocAsideOutline.has-outline[data-v-ff0f39c8]{display:block}.content[data-v-ff0f39c8]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-ff0f39c8]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:1px;height:18px;background-color:var(--vp-c-brand);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-ff0f39c8]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-7b3ebfe1]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-7b3ebfe1]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-face870a]{margin-top:64px}.edit-info[data-v-face870a]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-face870a]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-face870a]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.edit-link-button[data-v-face870a]:hover{color:var(--vp-c-brand-dark)}.edit-link-icon[data-v-face870a]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-face870a]{border-top:1px solid var(--vp-c-divider);padding-top:24px}@media (min-width: 640px){.prev-next[data-v-face870a]{display:flex}}.pager.has-prev[data-v-face870a]{padding-top:8px}@media (min-width: 640px){.pager[data-v-face870a]{display:flex;flex-direction:column;flex-shrink:0;width:50%}.pager.has-prev[data-v-face870a]{padding-top:0;padding-left:16px}}.pager-link[data-v-face870a]{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-face870a]:hover{border-color:var(--vp-c-brand)}.pager-link.next[data-v-face870a]{margin-left:auto;text-align:right}.desc[data-v-face870a]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-face870a]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.VPDocOutlineDropdown[data-v-2edece88]{margin-bottom:42px}.VPDocOutlineDropdown button[data-v-2edece88]{display:block;font-size:14px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;border:1px solid var(--vp-c-border);padding:4px 12px;border-radius:8px}.VPDocOutlineDropdown button[data-v-2edece88]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-2edece88]{color:var(--vp-c-text-1)}.icon[data-v-2edece88]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-2edece88] .outline-link{font-size:13px}.open>.icon[data-v-2edece88]{transform:rotate(90deg)}.items[data-v-2edece88]{margin-top:10px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-c4b0d3cf]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-c4b0d3cf]{display:none}@media (min-width: 960px) and (max-width: 1280px){.VPDoc .VPDocOutlineDropdown[data-v-c4b0d3cf]{display:block}}@media (min-width: 768px){.VPDoc[data-v-c4b0d3cf]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-c4b0d3cf]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-c4b0d3cf]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-c4b0d3cf]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-c4b0d3cf]{display:flex;justify-content:center}.VPDoc .aside[data-v-c4b0d3cf]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-c4b0d3cf]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-c4b0d3cf]{max-width:1104px}}.container[data-v-c4b0d3cf]{margin:0 auto;width:100%}.aside[data-v-c4b0d3cf]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-c4b0d3cf]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-c4b0d3cf]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 32px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-c4b0d3cf]::-webkit-scrollbar{display:none}.aside-curtain[data-v-c4b0d3cf]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-c4b0d3cf]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-c4b0d3cf]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-c4b0d3cf]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-c4b0d3cf]{order:1;margin:0;min-width:640px}}.content-container[data-v-c4b0d3cf]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-c4b0d3cf]{max-width:688px}.NotFound[data-v-c70503b8]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-c70503b8]{padding:96px 32px 168px}}.code[data-v-c70503b8]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-c70503b8]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-c70503b8]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-c70503b8]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-c70503b8]{padding-top:20px}.link[data-v-c70503b8]{display:inline-block;border:1px solid var(--vp-c-brand);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:border-color .25s,color .25s}.link[data-v-c70503b8]:hover{border-color:var(--vp-c-brand-dark);color:var(--vp-c-brand-dark)}.VPContent[data-v-a494bd1d]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-a494bd1d]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-a494bd1d]{margin:0}@media (min-width: 960px){.VPContent[data-v-a494bd1d]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-a494bd1d]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-a494bd1d]{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-2f86ebd2]{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-2f86ebd2]{display:none}@media (min-width: 768px){.VPFooter[data-v-2f86ebd2]{padding:32px}}.container[data-v-2f86ebd2]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-2f86ebd2],.copyright[data-v-2f86ebd2]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.message[data-v-2f86ebd2]{order:2}.copyright[data-v-2f86ebd2]{order:1}.Layout[data-v-b2cf3e0b]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3c6e61c2]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-3c6e61c2]{margin:0 auto;max-width:1152px}.love[data-v-3c6e61c2]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-3c6e61c2]{width:28px;height:28px;fill:currentColor}.message[data-v-3c6e61c2]{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-3c6e61c2]{padding-top:32px}.action[data-v-3c6e61c2]{padding-top:40px;text-align:center}.VPTeamPage[data-v-10b00018]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-10b00018]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-10b00018-s],.VPTeamMembers+.VPTeamPageSection[data-v-10b00018-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-10b00018-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-10b00018-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-10b00018-s],.VPTeamMembers+.VPTeamPageSection[data-v-10b00018-s]{margin-top:96px}}.VPTeamMembers[data-v-10b00018-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-10b00018-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-10b00018-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{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-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{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-b1a88750]{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-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-1739ab5f]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-1739ab5f]{padding:32px}.VPTeamMembersItem.small .data[data-v-1739ab5f]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-1739ab5f]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-1739ab5f]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-1739ab5f]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-1739ab5f]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-1739ab5f]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-1739ab5f]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-1739ab5f]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-1739ab5f]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-1739ab5f]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-1739ab5f]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-1739ab5f]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-1739ab5f]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-1739ab5f]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-1739ab5f]{text-align:center}.avatar[data-v-1739ab5f]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-1739ab5f]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-1739ab5f]{margin:0;font-weight:600}.affiliation[data-v-1739ab5f]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-1739ab5f]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-1739ab5f]:hover{color:var(--vp-c-brand)}.desc[data-v-1739ab5f]{margin:0 auto}.links[data-v-1739ab5f]{display:flex;justify-content:center;height:56px}.sp-link[data-v-1739ab5f]{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-1739ab5f]:hover,.sp .sp-link.link[data-v-1739ab5f]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-1739ab5f]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-04685dce]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-04685dce]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-04685dce]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-04685dce]{max-width:876px}.VPTeamMembers.medium .container[data-v-04685dce]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-04685dce]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-04685dce]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-04685dce]{max-width:760px}.container[data-v-04685dce]{display:grid;gap:24px;margin:0 auto;max-width:1152px}
diff --git a/assets/wechat-mp-qrcode.f64c0e73.jpg b/assets/wechat-mp-qrcode.f64c0e73.jpg
new file mode 100644
index 0000000..4801bc4
Binary files /dev/null and b/assets/wechat-mp-qrcode.f64c0e73.jpg differ
diff --git a/assets/wechat-pay-qrcode.87383472.jpg b/assets/wechat-pay-qrcode.87383472.jpg
new file mode 100644
index 0000000..f7063f1
Binary files /dev/null and b/assets/wechat-pay-qrcode.87383472.jpg differ
diff --git a/book.json b/book.json
deleted file mode 100644
index 70c08cc..0000000
--- a/book.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "gitbook": ">=2.0.0",
- "plugins": [
- "mathjax-pro",
- "todo",
- "betterchinese",
- "ga"
- ],
- "pluginsConfig": {
- "ga": {
- "token": "UA-51073473-3"
- }
- }
-}
\ No newline at end of file
diff --git a/ch01_environment.html b/ch01_environment.html
new file mode 100644
index 0000000..e9ccaa2
--- /dev/null
+++ b/ch01_environment.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+ 环境 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch02_computation.html b/ch02_computation.html
new file mode 100644
index 0000000..1ed5300
--- /dev/null
+++ b/ch02_computation.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+ 计算 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch03_procedure.html b/ch03_procedure.html
new file mode 100644
index 0000000..89b0c96
--- /dev/null
+++ b/ch03_procedure.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+ 过程 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch04_encoding.html b/ch04_encoding.html
new file mode 100644
index 0000000..2c775d5
--- /dev/null
+++ b/ch04_encoding.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+ 编码 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch05_sequence.html b/ch05_sequence.html
new file mode 100644
index 0000000..ca2bb4c
--- /dev/null
+++ b/ch05_sequence.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+ 序列 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch06_data.html b/ch06_data.html
new file mode 100644
index 0000000..a41239d
--- /dev/null
+++ b/ch06_data.html
@@ -0,0 +1,136 @@
+
+
+
+
+
+ 数据 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch07_state.html b/ch07_state.html
new file mode 100644
index 0000000..3dbd706
--- /dev/null
+++ b/ch07_state.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+ 状态 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch08_reference.html b/ch08_reference.html
new file mode 100644
index 0000000..42a61d3
--- /dev/null
+++ b/ch08_reference.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+ 引用 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch09_closure.html b/ch09_closure.html
new file mode 100644
index 0000000..3b05235
--- /dev/null
+++ b/ch09_closure.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+ 闭包 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch10_object.html b/ch10_object.html
new file mode 100644
index 0000000..d04ac0f
--- /dev/null
+++ b/ch10_object.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+ 对象 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ch11_concurrency.html b/ch11_concurrency.html
new file mode 100644
index 0000000..0a5442c
--- /dev/null
+++ b/ch11_concurrency.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+ 并发 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js
deleted file mode 100644
index 87682b5..0000000
--- a/docs/.vitepress/config.js
+++ /dev/null
@@ -1,76 +0,0 @@
-const chaptersAndGuides = [
- {
- text: "目录",
- collapsed: false,
- items: [
- { text: "引言", link: "/chapters/intro" },
- { text: "环境", link: "/chapters/ch01_environment" },
- { text: "计算", link: "/chapters/ch02_computation" },
- { text: "过程", link: "/chapters/ch03_procedure" },
- { text: "编码", link: "/chapters/ch04_encoding" },
- { text: "序列", link: "/chapters/ch05_sequence" },
- { text: "数据", link: "/chapters/ch06_data" },
- { text: "状态", link: "/chapters/ch07_state" },
- { text: "引用", link: "/chapters/ch08_reference" },
- { text: "闭包", link: "/chapters/ch09_closure" },
- { text: "对象", link: "/chapters/ch10_object" },
- { text: "并发", link: "/chapters/ch11_concurrency" },
- { text: "练习答案与提示", link: "/chapters/answers" },
- ],
- },
- {
- text: "附录",
- collapsed: true,
- items: [
- { text: "工具上手", link: "/guides/" },
- { text: "浏览器开发者工具与 Console", link: "/guides/browser-devtools" },
- { text: "安装与上手 VS Code", link: "/guides/vscode" },
- {
- text: "安装 Node.js 并在 VS Code 运行 JavaScript",
- link: "/guides/nodejs",
- },
- { text: "TypeScript 入门:安装、编译与运行", link: "/guides/typescript" },
- ],
- },
-];
-
-module.exports = {
- title: "编程导引",
- themeConfig: {
- nav: [
- { text: "编程导引", link: "/chapters/intro" },
- { text: "参考", link: "/reference/glossary" },
- ],
-
- sidebar: {
- "/chapters/": chaptersAndGuides,
- "/reference/": [{ text: "概念解释", link: "/reference/glossary" }],
- "/guides/": chaptersAndGuides,
- },
- footer: {
- message: "CC-BY 4.0 Licensed",
- copyright:"Copyright © 2015-present Kimmy Liu",
- },
- },
-
- markdown: {
- math: true,
- },
-
- head: [
- [
- "script",
- {},
-
- `
-var _hmt = _hmt || [];
-(function() {
- var hm = document.createElement("script");
- hm.src = "https://hm.baidu.com/hm.js?bc2f9f80827718f41c02c33dc45976cb";
- var s = document.getElementsByTagName("script")[0];
- s.parentNode.insertBefore(hm, s);
-})();
- `,
- ],
- ],
-};
diff --git a/docs/chapters/answers.md b/docs/chapters/answers.md
deleted file mode 100644
index b35a7d3..0000000
--- a/docs/chapters/answers.md
+++ /dev/null
@@ -1,307 +0,0 @@
-# 练习答案与提示
-
-> 说明:以下为参考答案/提示,不是唯一解。为了保持可读性,示例代码尽量短,省略了异常处理。
-
-## 第二章 计算
-
-**练习 1:懒求值下的乘法次数**
-
-`pow5(x)` 展开是 `x*x*x*x*x`,需要 4 次乘法。如果参数不先求值,每一次出现都会重新计算。
-
-设 `M(n)` 表示 `pow5` 嵌套 n 次的乘法次数:
-
-* `M(1) = 4`
-* `M(n) = 4 + 5 * M(n-1)`
-
-因此:`M(2)=24`,`M(3)=124`,`M(4)=624`。
-
-**练习 2:强制求值的问题**
-
-* 可能做很多无用计算(性能浪费)。
-* 不能处理“无穷序列/无穷结构”。
-* 即使分支不会被用到,也提前执行(丢失短路优势)。
-* 如果参数包含副作用,提前执行会改变行为。
-
-## 第三章 过程
-
-**阶乘(循环/递归/尾递归)**
-
-```javascript
-function fact(n) {
- let r = 1;
- for (let i = 2; i <= n; i++) r *= i;
- return r;
-}
-
-function factRec(n) {
- return n <= 1 ? 1 : n * factRec(n - 1);
-}
-
-function factTail(n, acc = 1) {
- return n <= 1 ? acc : factTail(n - 1, acc * n);
-}
-```
-
-**斐波那契(循环/递归/尾递归)**
-
-```javascript
-function fib(n) {
- let a = 0, b = 1;
- for (let i = 0; i < n; i++) {
- [a, b] = [b, a + b];
- }
- return a;
-}
-
-function fibRec(n) {
- return n <= 1 ? n : fibRec(n - 1) + fibRec(n - 2);
-}
-
-function fibTail(n, a = 0, b = 1) {
- return n === 0 ? a : fibTail(n - 1, b, a + b);
-}
-```
-
-**短路求值说明**
-
-`condition ? expr1 : expr2` 只会计算其中一个分支。
-所以当 `y == 1` 时,`pow(x, y-1) * x` 不会被执行。
-
-**顺序/分支/循环的现实过程**
-
-示例:
-
-* 顺序:起床 → 洗漱 → 早餐。
-* 分支:是否下雨?下雨带伞,否则不带。
-* 循环:刷牙 2 分钟(重复动作)。
-
-## 第四章 编码
-
-**小数的表示**
-
-`1/3` 在十进制是无限循环小数,到了二进制依然是无限循环。IEEE 754 用“符号位 + 指数 + 尾数”近似表示,所以会出现精度误差。
-
-可以用 `0.1 + 0.2` 观察误差:
-
-```javascript
-0.1 + 0.2; // 0.30000000000000004
-```
-
-## 第五章 序列
-
-**LCS 提示**
-
-经典解法是动态规划:
-
-```
-if a[i-1] == b[j-1] => dp[i][j] = dp[i-1][j-1] + 1
-else => dp[i][j] = max(dp[i-1][j], dp[i][j-1])
-```
-
-这要求你能“多次访问任意位置”,所以在 C++ 中至少需要 Random Access 迭代器。
-
-## 第六章 数据
-
-**sumList**
-
-```javascript
-function sumList(list) {
- let sum = 0;
- for (let p = list; p !== null; p = p.next) sum += p.value;
- return sum;
-}
-```
-
-**filterList**
-
-```javascript
-function filterList(list, pred) {
- if (list === null) return null;
- if (pred(list.value)) {
- return { value: list.value, next: filterList(list.next, pred) };
- }
- return filterList(list.next, pred);
-}
-```
-
-**树遍历**
-
-参考正文中的 `preorder/inorder/postorder`。
-
-**DFS/BFS**
-
-参考正文中的 `dfs/bfs`,DFS 使用栈,BFS 使用队列。
-
-## 第七章 状态
-
-**计数器**
-
-```javascript
-let counter = {
- value: 0,
- inc() { this.value += 1; },
- dec() { this.value -= 1; }
-};
-```
-
-**电梯状态机**
-
-状态示例:`idle / up / down / open`,转移规则取决于请求队列。
-
-**move**
-
-```javascript
-function move(point, dx, dy) {
- return { x: point.x + dx, y: point.y + dy };
-}
-```
-
-**共享状态与库存示例(提示)**
-
-把“读库存 + 减库存”拆成两步,再用 `await` 人为制造切换点,就能看到负库存或丢失更新的情况:
-
-```javascript
-let stock = 1;
-async function buy() {
- let current = stock;
- await Promise.resolve();
- stock = current - 1;
-}
-```
-
-## 第八章 引用
-
-**数组输出**
-
-`a` 和 `b` 指向同一数组,`c` 是浅拷贝:
-
-```javascript
-// 输出:
-// a: [1, 2, 3]
-// b: [1, 2, 3]
-// c: [1, 2]
-```
-
-**cloneUser(浅拷贝)**
-
-```javascript
-const cloneUser = user => ({ ...user });
-```
-
-**freeze 示例**
-
-```javascript
-let obj = Object.freeze({ x: 1 });
-obj.x = 2;
-obj.x; // 1
-```
-
-**共享尾部链表(提示)**
-
-两个链表可以共用同一个尾节点:
-
-```javascript
-let tail = node(3, null);
-let listA = node(1, node(2, tail));
-let listB = node(9, tail);
-```
-
-优点:节省内存;风险:修改共享节点会影响两条链表。
-
-## 第九章 闭包
-
-**makeOnce**
-
-```javascript
-function makeOnce(fn) {
- let called = false;
- return function (...args) {
- if (called) return;
- called = true;
- return fn(...args);
- };
-}
-```
-
-**makeTimer**
-
-```javascript
-function makeTimer() {
- const start = Date.now();
- return () => Date.now() - start;
-}
-```
-
-**outer()() 为什么能输出**
-
-因为返回的函数闭包捕获了 `msg`,即使 `outer` 结束了,`msg` 仍然可访问。
-
-## 第十章 对象
-
-**Animal / Dog / Cat**
-
-```javascript
-class Animal {
- speak() { console.log('...'); }
-}
-class Dog extends Animal {
- speak() { console.log('woof'); }
-}
-class Cat extends Animal {
- speak() { console.log('meow'); }
-}
-```
-
-**feed**
-
-```javascript
-function feed(animal) {
- animal.eat();
-}
-```
-
-**组合 move + draw**
-
-```javascript
-let canMove = { move() { console.log('move'); } };
-let canDraw = { draw() { console.log('draw'); } };
-let sprite = Object.assign({}, canMove, canDraw);
-```
-
-## 第十一章 并发
-
-**修复银行竞态(队列化)**
-
-```javascript
-function createQueue() {
- let last = Promise.resolve();
- return function enqueue(task) {
- last = last.then(() => task()).catch(() => {});
- return last;
- };
-}
-
-let enqueue = createQueue();
-
-enqueue(() => deposit(200));
-enqueue(() => withdraw(200));
-```
-
-**顺序打印 1/2/3**
-
-```javascript
-function delay(ms) {
- return new Promise(resolve => setTimeout(resolve, ms));
-}
-
-(async function () {
- for (let i = 1; i <= 3; i++) {
- await delay(1000);
- console.log(i);
- }
-})();
-```
-
-**任务队列(提示)**
-
-把每个任务包装成返回 Promise 的函数,然后用一个“串行链”依次执行。
diff --git a/docs/chapters/ch01_environment.md b/docs/chapters/ch01_environment.md
deleted file mode 100644
index f02b5ef..0000000
--- a/docs/chapters/ch01_environment.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-description: 简单介绍下JavaScript编程语言,以及对应的环境准备工作。
----
-
-# 环境
-
-## JavaScript
-
-JavaScript是目前使用最广泛的编程语言之一。作为互联网和移动计算时代的基础支撑语言,从基本的生产力工具,到日常的泛娱乐平台,它活跃在每一次你浏览网站、使用App的过程中,提供基本的运算和流程保障。
-
-JavaScript的诞生和发展也颇具传奇色彩,Brendan Eich在几天的时间内设计并实现了这门编程语言,影响了后面几十年的软件和技术的发展。如今几乎每一个设备都接入了JavaScript,深入到了我们生活的方方面面。作为一门工业级的编程语言,JavaScript由欧洲计算机制造商协会(ECMA)制定标准化的行为和定义,来规范这个语言的使用和发展方向。TC39技术委员会也一直在更新JavaScript的功能,让这个有二十多年历史的旧技术不断焕发新的活力。
-
-JavaScript 的环境触手可及。在电脑端你可以随时打开一个现代的浏览器,页面上右键菜单中选择“Inspect”或者“查看/检查元素”,然后切换到“控制台(Console)”标签。如果你还没用过开发者工具,请先阅读[浏览器开发者工具与 Console](../guides/browser-devtools.md)。
-
-## 编写代码
-
-当需要写大量代码组合使用的时候,你可以通过本地编辑Web页面的方式来编写JavaScript代码。JavaScript是Web端的基本编程语言,可以稳定地运行在大多数现代浏览器中。
-
-通过文件编辑器创建下面的代码,命名为`index.html`
-
-```html
-
-
-
-
- Introduction to Programming
-
-
-
-
-
-```
-
-在``之间,就是你编写JavaScript代码的地方。编写完成后,用浏览器打开(或者刷新)这个文件,就能看到对应的效果和执行内容。
-
-比如上面的代码,就是在控制台打印“hello world”。
-
-本书推荐使用 Visual Studio Code 作为基本的代码编辑工具,安装与上手请参考[安装与上手 VS Code](../guides/vscode.md)。
-
-当你希望在本地运行 JavaScript 或 TypeScript 时,需要安装 Node.js 与 TypeScript,对应的上手步骤见:
-
-* [安装 Node.js 并在 VS Code 运行 JavaScript](../guides/nodejs.md)
-* [TypeScript 入门:安装、编译与运行](../guides/typescript.md)
-
-## 延伸阅读
-
-* [进程与线程 Process & Thread](../reference/glossary/process-and-thread.md)
-* [阻塞与非阻塞 Blocking & Non-blocking](../reference/glossary/blocking-nonblocking.md)
-* [同步与异步 Sync & Async](../reference/glossary/sync-async.md)
-* [调用栈 Call Stack](../reference/glossary/call-stack.md)
-
-一切准备就绪的话,我们就开始吧。
diff --git a/docs/chapters/ch02_computation.md b/docs/chapters/ch02_computation.md
deleted file mode 100644
index 4b19156..0000000
--- a/docs/chapters/ch02_computation.md
+++ /dev/null
@@ -1,165 +0,0 @@
----
-description: 计算机可以完成哪些基本运算?如何把运算进行组合?如何进行函数封装?如何实现递归?
----
-
-# 计算
-
-编程语言是人与计算机打交道的一个重要工具。
-
-计算机(Computer)是干嘛的?当然是计算(Computing)啦。
-
-在浏览器的控制台输入以下代码(如果还没打开过控制台,请先看[浏览器开发者工具与 Console](../guides/browser-devtools.md)):
-
-```javascript
-1 + 1
-```
-
-是不是有看到浏览器在回应你:`2`。这里基本上是能够当成一个计算器用的。
-
-没错,这就是计算嘛。
-
-然而,有什么用呢?
-
-## 计算
-
-简(pian)单(mian)地讲,一切问题都能抽出来一套数学模型,同样能够抽出来的数学模型都可以转化成计算问题,然后让计算机来解决。
-
-所以**计算**可以看成是整个程序设计的基础。同样像我们之前提到的,计算机,本身也就是拿来做计算的。
-
-那么我们都可以做哪些计算呢?
-
-当然普通的$+ - \times(*) \div(/)$不用说,你还可以把一些复杂的计算规则定义成函数:
-
-```javascript
-function pow5(num) {
- return num * num * num * num * num;
-}
-```
-
-比如`pow5`的意思就是求一个数的5次方。我们定义了一个函数,怎么用呢?
-
-然后尝试下面的代码:
-```javascript
-pow5(1)
-```
-
-嗯,没错,输出了我们期望的结果(`1`)。
-
-## 组合
-
-什么是组合呢?
-
-想想我们学习函数和多项式的时候,
-
-$$
-f(x) = x^2 + 2x + 1
-$$
-
-$$
-g(x) = (x+3)(x-5)
-$$
-
-然后我们要定义一个$h(x) = f(g(x))$,那么定义出来的$h(x)$长什么样呢?
-
-我们首先要把$g(x)$代入$f(x)$,
-
-$$
-f(g(x)) = g(x)^2 + 2g(x) + 1
-$$
-
-即
-
-$$
-f(g(x)) = [(x+3)(x-5)]^2 + 2 * (x+3)(x-5) + 1
-$$
-
-好吧我编不下去了。总之展开来以后很丑的。
-
-而且如果以后遇到$\sigma(x,y,z)$跟$\theta(a,b,c)$组合的,或者是更多参数的函数组合,结果更是可想而知。
-
-但是在JavaScript里面我们并不用担心这个问题。
-
-比如我们有两个函数
-
-```javascript
-function f(x) {
- return x*x + 2*x + 1;
-}
-
-function g(x) {
- return (x+3) * (x-5);
-}
-```
-
-那么我们的$h(x)$可以很简单的写成这个样子:
-
-```javascript
-function h(x) {
- return f(g(x));
-}
-```
-
-或者你也可以不用专门去定义,在用到的时候直接用就可以:
-
-```javascript
-f(g(5))
-// or
-h(5)
-```
-
-### 组合的意义
-
-比如我们可以考虑一个更复杂的函数,
-
-$$
-\sigma(x,y) = x^2 + x*y + (x+y)\times5
-$$
-
-当 $x, y$ 分别为 $4x+1,5x-3$的时候。你可以试着自己去展开一下这个算式:
-
-$$
-\sigma(4x+1, 5x-3) =
-(4x+1)^2 + (4x+1)(5x-3)+(4x+1+5x-3)\times 5
-$$
-
-总之,无论他有多长,都会在算式里面充斥着$4x+1$和$5x-3$,而且,计算机并没有那么聪明,所以只好按照特定的顺序一次次的计算。
-
-于是$4x+1$被重复计算了三次,$5x-3$被重复计算了两次。对于`pow5`那种情况,更是会被求值5次。
-
-令人欣慰的是,组合帮我们保证了这个问题不会有这些重复。
-
-当你计算`pow5(3+1)`的时候,JavaScript并不会去展开成`(3+1)*(3+1)...*(3+1)`这种形式,而是直接变成了`pow5(4)`,最后的结果是1024。
-
-也就是说,函数的每个自变量(编程语言里面我们会把他们叫做参数(argument))会先被求值,得到他们的值以后才会带入计算。
-
-\*请记住我们现在讨论的这个问题,后面会展开并且深入地探讨。
-
-### 补充:函数的可组合性
-
-函数的组合不仅仅是数学里的“代入”,也可以用于日常操作的拼装。比如我们想要“排序后再反转”的结果:
-
-```javascript
-function sorted(array) {
- return array.slice().sort();
-}
-
-function reversed(array) {
- return array.slice().reverse();
-}
-
-function sortReversed(array) {
- return reversed(sorted(array));
-}
-```
-
-组合的意义在于:**用小而清晰的步骤,拼出更复杂的行为**。如果你想对数字排序,需要提供比较器(后面“作为数据的过程”会讲到)。
-
-## 练习
-
-* 请思考,如果函数的参数在代入函数之前并不进行强制求值,`pow5(pow5(pow5(pow5(5))))`展开后共计算多少次乘法。
-* 强制求值可能会造成的问题有哪些。
-
-## 延伸阅读
-
-* [复杂度 Complexity](../reference/glossary/complexity.md)
-* [浮点数 Floating Point](../reference/glossary/floating-point.md)
diff --git a/docs/chapters/ch03_procedure.md b/docs/chapters/ch03_procedure.md
deleted file mode 100644
index f7fdc18..0000000
--- a/docs/chapters/ch03_procedure.md
+++ /dev/null
@@ -1,296 +0,0 @@
----
-description: 程序的基本控制结构有哪几种?递归和循环的区别是什么?短路求值的作用是什么?
----
-
-# 过程
-
-什么是过程呢?
-
-凭经验我们就能知道,实际的问题并不是像理想中那么简单,不是一个表达式就能描述的清楚的,而且也并不一定能通过组合来直接解决。
-
-甚至是简单的数学问题,也不能用他们来解决。比如:
-
-$$
-|x|
- = abs(x) = \begin{cases}
-x, &x\ge0 \\
--x, &x\lt0
-\end{cases}
-$$
-
-求绝对值,或者
-
-$$
-pow(x,y) = \prod_{1}^{y}{x}
-$$
-
-求积。
-
-其中一个需要我们根据参数的值,来选择不同的计算方式,返回不同的结果;另外一个则是通过对特定的表达式做一个累乘(没错其实行为跟乘方是一样的,所以我把它叫 pow)。
-
-我们先看累乘。
-
-## 累乘
-
-如果我们已知指数的话,要写起来是很简单的:
-
-```javascript
-function pow1(x) { return x; }
-function pow2(x) { return pow1(x) * x; }
-function pow3(x) { return pow2(x) * x; }
-function pow4(x) { return pow3(x) * x; }
-function pow5(x) { return pow4(x) * x; }
-```
-
-这样写其实是符合pow的定义的。
-
-然后其实我们可以把它变换一下:
-
-```javascript
-// 伪代码,无法正确运行
-function pow(x, 1) { return x; }
-function pow(x, 2) { return pow(x, 1) * x; }
-function pow(x, 3) { return pow(x, 2) * x; }
-function pow(x, 4) { return pow(x, 3) * x; }
-function pow(x, 5) { return pow(x, 4) * x; }
-```
-
-所以我们得到了pow函数的另一个形式:
-
-$$
-pow(x, y) = \begin{cases}
-x, &y=1 \\
-pow(x, y -1)\times x, &y>1
-\end{cases}
-$$
-
-没错我们又归结到了选择结构上。后面我们会拿这个来讨论。现在只是简单提一提。
-
-哦对了,现在pow的这个形式叫做递归定义,数学上叫递推关系式(好像又叫归纳定义?)。
-
-好的,我们回到$\prod$运算符上来。
-
-根据前面的分析,我们可以知道,如果能够拿到前面一个乘积,然后和第y个相乘,,就可以得到我们要的结果。
-
-于是我们假设那第`y-1`个乘积是`prod`,最终的结果就是`prod*x`。再往前推`prod`,这个关系是基本上不变的。
-
-那么,我们只要有一个东西来保存前面的结果,再跟后面的相乘之后更新保存的结果就可以了。
-
-这个能保存数据的东西我们把它叫做变量(Variable)。
-
-比如最开始`prod = 1`,然后`prod = prod * x`,会把`prod`与`x`相乘的结果计算出来,再保存进`prod`里面。
-
-所以我们可以简单地把这个计算看成
-
-```javascript
-let prod=1
-prod=prod*x;
-prod=prod*x;
-prod=prod*x;
-...
-prod=prod*x; // 执行y次
-```
-
-那么怎么让他能够只执行`y`次呢?
-
-## 循环
-
-JavaScript提供了一种东西叫做循环语句。
-
-大概是长这个样子的
-
-```javascript
-let prod=1;
-for(let i = 1; i <= y; i = i+1) {
- prod = prod*x;
-}
-```
-
-这个叫循环语句,意思就是,在满足指定条件的情况下,会一直去执行语句体(花括号之间)的内容。
-
-上面那段代码的意思是,让`prod`初值为1,让`i`从1开始,每次增加1,如果`i`小于等于`y`的话,执行`prod = prod*x`,否则跳出循环。
-
-确实很复杂,特别是比起上面那个递归定义来。
-
-我们对它进行一个简单的改写。
-
-一般来说,程序员是从 $0$ 开始计数的。于是从 $1$ 到 $y$,就变成了从 $0$ 到 $y-1$,进一步地`i <= y-1`又可以进一步地写成`i < y`(反正都是整数,证明我就不给了),这样条件就简化掉了一个符号。
-
-另外,但凡类似`x=x+y`这种的,都可以写成`x+=y`,特别地,当运算符为`+`和`-`,同时`y`为1的时候,可以直接写成`x++`或者`x--`;
-
-于是一个典型的循环就出来了:
-
-```javascript
-let prod=1;
-for(let i = 0; i < y; i++) {
- prod *= x;
-}
-```
-
-那么我们的pow函数也有了:
-
-```javascript
-function pow(x, y) {
- let prod=1;
- for(let i = 0; i < y; i++) {
- prod *= x;
- }
- return prod;
-}
-```
-
-## 选择
-
-好的,回头来看我们的abs函数。
-
-我们要根据x的符号来决定时返回x还是他的相反数。
-
-JavaScript让我们能通过选择语句`if...else...`做这件事。
-
-```javascript
-function abs(x) {
- if(x >= 0) {
- return x;
- } else {
- return -x;
- }
-}
-```
-
-当然`if/else`还有一种简单的形式,可以让我们写起来更省力。
-
-```javascript
-function abs(x) {
- return (x >= 0) ? x : -x;
-}
-```
-
-`?:`运算符共有三部分,问好前面是判断条件,问号后面由冒号分成两部分,如果判断条件为真,那么返回冒号与问号之间的,否则返回冒号之后的。
-
-## 递归
-
-好的,这样子我们就能完善我们前面写的递归定义的pow了。
-
-```javascript
-function pow(x, y) {
- return (y == 1) ? x : pow(x, y-1) * x;
-}
-```
-
-不能比循环的明白更多。
-
-### 尾递归
-
-尾递归这个概念可以简单做个了解。主要是因为如果有了尾递归,编译器就可以更好的优化程序的执行过程。而且更重要的一点是,尾递归跟循环几乎是一一对应的关系。
-
-我们先简单的把这个实现写出来吧。
-
-```javascript
-function pow(x, y, prod = 1) {
- return (y == 0) ? prod : pow(x, y-1, prod*x);
-}
-```
-
-怎么转换到循环的呢?
-
-首先我们提取出变量来。
-
-```javascript
-function pow(x, y, prod = 1) {
- if (y == 0) {
- return prod;
- }
- y = y - 1;
- prod*=x;
- return pow(x, y, prod);
-}
-```
-
-正式写成循环
-
-```javascript
-function pow(x, y, prod = 1) {
- for(;y != 0;) { // or while(y != 0)
- y = y - 1;
- prod*=x;
- }
- return prod;
-}
-```
-
-改写成递增的变量
-
-```javascript
-function pow(x, y) {
- let prod = 1;
- for(let i = 0; i < y; i++) {
- prod *= x;
- }
- return prod;
-}
-```
-
-### 递归树与效率(补充)
-
-递归在表达结构上很自然,但有时会重复计算。
-
-以斐波那契为例(常用定义:`fib(0)=0, fib(1)=1`):
-
-```javascript
-function fib(n) {
- if (n <= 1) return n;
- return fib(n - 1) + fib(n - 2);
-}
-```
-
-当 `n` 增大时,`fib(n-2)` 等子问题会被重复计算很多次,调用次数增长很快。把它改成尾递归或循环,可以避免这种重复。
-
-> 提醒:JavaScript 规范并不保证“尾调用优化”,很多运行时也没有开启,所以尾递归更多是理解思路,实际工程里常常直接用循环。
-
-## 短路求值
-
-试想一下我们的递归版pow代码
-
-```javascript
-function pow(x, y) {
- return (y == 1) ? x : pow(x, y-1) * x;
-}
-```
-
-如果这里你把函数自身的调用写成了`pow(x, y) * x`,结果会是怎么样的呢?
-
-如果这样写,y作为一个计数器并没有递减,那么每回调用都会跟当前调用一样传递相同的参数进去。
-
-于是会一在重复递归地调用`pow(x, y)`,直到不能再调用导致栈溢出。
-
-然而一定是这样吗?你可以调用一下`pow(4, 1)`试试,会正常输出`4`。
-
-为什么会有这种不同呢?
-
-上一讲,我们提到了组合的概念,说,通过组合会强制求值每一个传递给函数的参数,但是当我们把这个东西忘`?:`操作符上套的时候,并没有效果。
-
-这种特性叫做短路求值(short-circuit evaluation),对于`?:`来说,只有当条件为真的时候才去求值真分支,为假的时候才去求值假分支。
-
-所以如果写错的那个pow,当`y == 1`的时候,还是能够正常执行的。
-
-## 过程
-
-一个再复杂的流程,最终都会由这样的三部分组成:
-
-* 顺序
-* 分支(选择)
-* 循环
-
-根据我们前面提到的组合的思想,再复杂的过程都能通过这些来组合解决。
-
-## 练习
-
-* 试写出求阶乘、求斐波那契数等函数的循环、递归和尾递归版本的实现。
-* 用以上代码解释短路求值
-* 请使用顺序、分支、循环来描述现实中的一些过程。
-
-## 延伸阅读
-
-* [递归 Recursion](../reference/glossary/recursion.md)
-* [调用栈 Call Stack](../reference/glossary/call-stack.md)
-* [尾调用优化 Tail Call Optimization](../reference/glossary/tail-call-optimization.md)
diff --git a/docs/chapters/ch04_encoding.md b/docs/chapters/ch04_encoding.md
deleted file mode 100644
index 62500b1..0000000
--- a/docs/chapters/ch04_encoding.md
+++ /dev/null
@@ -1,179 +0,0 @@
-# 编码
-
-这里的编码(Encoding)当然不是指简单的编写代码。
-
-为什么会有这个概念呢。
-
-想想古老的印度人是怎么表示数字的吧:用十个不同的符号和位序组合来表示一个确切的数字,演化成今天我们用阿拉伯数字(Arabic Numerals)表示的十进制系统。
-
-没错就是你身边到处都存在的**数字**。这套系统只需要简单的十个符号和并不怎么复杂的规则就能从0表示到任意大的确切数字。
-
-我们在第二讲中提到,代码中的表示的“整数”,跟数学意义上的整数,是有所差距的。这个差距其宗之一就在于表示数字的能力上。
-
-比如,我们来计算$2^{70}$:
-
-```javascript
-pow(2, 70);
-```
-
-嗯,结果是什么鬼(`1.1805916207174113e+21`,特别是后面这段)!
-
-也就是说,我们能直观表示的整数也就21位(十万亿亿级),再之后就只能用科学计数法表示了。
-
-实际你会发现,其实还没到这个数量级的时候,数字就已经无法精确表示了。
-
-为什么会这样呢?
-
-## 二进制
-
-跟阿拉伯数字系统一样,计算机内部也是利用位序来表示数值,但由于数字电路只有通和断两种状态,所以,相当于每位上只能有两种状态,作为传统,我们将用0和1来表示这两种状态。
-
-然后我们就会看到计算机努力的表示数字: $0,1,10,11,100,101,110,111,1000,1001,1010$ 等你都觉得脑袋大了,计算机才数到10,不过其实关于这个问题并不需要你操心太多,反正跟阿拉伯数字一样,只要足够长,任意大的数都可以表示。
-
-可是我们之前使用的过程告诉我们,其实并不是这样的。为什么呢?
-
-### 定长
-
-既然计算机表示数字就是靠0和1,那么如果我要表示多个数字,怎么来区分呢?
-
-比如,你知道下面究竟是1,2,3,4还是13, 14?
-
-```javascript
-11011100
-```
-
-于是其实我们可以思考一下,出了数值,还有什么可以利用的。
-
-长度。(以及其实你也可以用霍夫曼编码。)
-
-当我规定用于表示数据的长度必须是一定(比如4位)的时候,表示数据就特别地清晰了:
-
-```javascript
-0001 0010 0011 0100
-```
-
-就可以表示1,2,3,4这四个数。而上面那个我们理解不了的序列,也可以解释成13,14这两个数。
-
-当你去规定一种解释二进制序列的方法的时候,其实你就是在定义一种**编码**。
-
-二进制序列中,每个0或者1,叫一个bit(位),特定长度(一般是8)的基本解释单位,叫做byte(字节),这个特定长度,据说是依据当前系统中表示基本的字符编码的长度来确定。
-
-换句话说,编码不仅仅是能用来表示数字的。
-
-## ASCII
-
-现在提到字节大家都会反应是8位,就是因为这个东西。
-
-全名叫American Standard Code for Information Interchange(美国标准信息交换码)。
-
-这套代码从上世纪60年代一直用到现在,足以说明有多么经典。然而我们先不说它是什么,简单地从我们自己的角度出发先设计一套东西。
-
-### 字符集
-
-要知道美国人民的生活很是单调的,每天就面临大小写加起来四十多个字母,十个阿拉伯数字,以及十多个常用的标点符号。对比起来,深深地为自己的母语感到自豪。
-
-当然,美国人民日常使用的字符量少,在信息化的时代,其实是有优势的,比如,把他们常用的字符加起来也就100个左右,而$2^{6} \lt 100 \lt 2^7$,所以我们只要有长度为7位的二进制串长度就能把美国人民用的那些字符给完全表示出来。
-
-比如我们可以定义,0000000 ~ 0001001 表示数字字符0-9,0100001 ~ 0111010 表示大写字母字符的A-Z,1000001 ~ 1011010 表示小写字母字符的a-z,于是我们就能把对应的字母变成相应的编码了。
-
-但是老是这样看着满屏的0和1,总是会感觉眼花。既然都是表示数据,并不是说相同的东西,计算机看到长什么样子,我们就要看一样的。只要是能够表示相同的数据,完全可以换一种我们更习惯的方式来表示。
-
-### 十六进制
-
-比如我们可以使用十六进制(Hexadecimal)代替二进制(Binary),也就是说,同一个位上面共有16个状态,习惯上分别用0-9加上a-f来表示,同时,为了与十进制表示进行区分,一般会加上0x前缀或者h后缀。对于刚刚的字符编码来说,就可以用0x00 ~ 0x09 表示 数字字符,0x21 ~ 0x3A 表示大写字母A-Z,0x40 ~ 0x5A表示小写字母a-z。
-
-#### 为什么是十六进制而不是其他的十二进制或者十八、二十四进制呢?
-
-我们可以简单的做一个对比:
-
-```
-Bin 0001 0010 0011 .... 1010 1011 1100 1101 1110 1111
-Hex 1 2 3 A B C D E F
-Dec 1 2 3 10 11 12 13 14 15
-```
-
-十六进制的一位刚好一一对应二进制的每四个位。
-
-于是本来用二进制表示起来很冗长的东西,用十六进制可以比较轻松的表述出来。而且相互之间的转换也很容易。
-
-相反生活中常用的十进制跟二进制对应的就不那么协调,所以一般也比较少用,只要知道对应的位上的值就好。
-
-也就是说,只要能够数
-
-$$
-1,2,4,8,16,...,1024,2048,...,32768,65536,
-131072,...,2147483648
-$$
-
-嗯,我觉得如果你玩过2048的话一定不会对前面的那些数字感到陌生。
-
-### ASCII
-
-嗯,ASCII跟我们想的一样,选择了8位作为实际的长度,同时加入了一些必须要用到的特殊字符(比如制表符tab 0x09,回车记号carriage return 0x0D,换行符line feed 0x0A..),以及一些控制字符(比如空字符NUL 0x00,文件结束符EOF等)。于是整体的设计相对于我们的想法有一些偏移:
-
-* `\x30` ~ `\x39` 表示0-9
-* `\x41` ~ `\x5a` 表示A-Z
-* `\x61` ~ `\x7a` 表示a-z
-
-好的我们来试试吧:
-
-```javascript
-'\x41'
-```
-
-
-我们可以直接用引号`'`括起来单个字符,在程序中直接拿来使用。同时也可以反过来看:
-
-```javascript
-let a_char = 'a';
-a_char.charCodeAt(0).toString(16)
-```
-
-
-### CJK字符集
-
-CJK(有时候也会带上V),是China,Japan,Korea(和Vietnam)的统称,在这些地区,因为同遗传自古汉语,字符的数量可是非常之多,8位的ASCII根本就没办法保存这么多东西。
-
-于是随着各种语言诞生了各种编码,比如`GB2312` 简体中文,`Big-5` 繁体中文,`Shift-JIS` 日文等。这些编码并不是相互兼容的,于是一般对于特定的内容,需要专门指出其编码。同样地,当你尝试去一种编码来解释另外一种编码的文本时,就会出现**乱码**的情况。注意这个时候并不是你电脑中毒了。
-
-### Unicode
-
-所以就有人想,不如把所有的编码都统一了吧,于是就出现了Unicode。
-
-现行版本的Unicode加入了世界上能够找到的绝大多数语言的符号(嗯,包括emoji),然后将这些符号分类整理,统一编码。于是,在理想情况下,大家都使用Unicode字符集的话,就不会出现乱码的错误了。
-
-Unicode包含的字符量足够的多,于是就要设计比ASCII更充分大的表示方式才能够容纳所有的符号。最初选择的是每个字符使用16位的二进制串来表示,这样的话一个中文字符虽然会超出8位范围之外,还是能够表示得出来,这种方法被称为UTF-16。
-
-然而不久就发现,符号的数量(就算仅仅是中文字符)远远多于65536个,于是又进一步地扩充到了32位,可以表示到上亿个字符了,目前为止还要很久才会资源枯竭,这种方法类似地,被称为UTF-32。
-
-然而UTF-32有个很致命的缺点。
-
-对于西方人来说,并没有CJKV地区的人的需求,1个字节就能足够表示他们的符号,而UTF-32硬生生地为了统一,要求字母字符也要用4个字节来表示,这样就让空间整整大了4倍,而且另外3倍的空间完全是浪费掉的,没有任何作用。
-
-但是,为了兼容,没办法。
-
-### UTF-8
-
-于是为了解决这个浪费空间的问题,UTF-8出现了。这是来自Ken Thompson的设计,他给整个IT界贡献了不少东西,Unix、C语言、UTF-8。
-
-简单来说就是,在保持与ASCII兼容的情况下,通过添加一些标记来支持更长的编码。
-
-具体的做法当然维基百科介绍的比我更清楚,这里提起来只是要说这么一个思路:变长编码(Variable-Width Encoding)。因为比较重要的就是在设计的过程中考虑变量和不变量,以及设置各种标志和不同的数据区块解释方式,这样就可以把简单的二进制序列变成我们想要的任意数据。
-
-当然,这里的思想我们会在第6章详细地展开。
-
-## 数系的扩充
-
-你有没有尝试计算JavaScript里面`1/3`的结果?
-
-当我们需要小数的时候又该如何表示呢?
-
-这个问题留作练习。
-
-作为参考答案,你可以搜索IEEE754。
-
-## 延伸阅读
-
-* [编码与字符集 Encoding & Charset](../reference/glossary/encoding-and-charset.md)
-* [Unicode / UTF-8](../reference/glossary/unicode-utf8.md)
-* [浮点数 Floating Point](../reference/glossary/floating-point.md)
diff --git a/docs/chapters/ch05_sequence.md b/docs/chapters/ch05_sequence.md
deleted file mode 100644
index 33b1d38..0000000
--- a/docs/chapters/ch05_sequence.md
+++ /dev/null
@@ -1,251 +0,0 @@
-# 序列
-
-你应该记得,我们在编码那一张提过如何表示多个数字的,没错,定长编码可以帮我们解决这个问题,帮我们界定数字之间的边界。但是,当我们要表示的数据不只是一组的时候,又该怎么来界定边界?
-
-比如,我们有两组数,分别是$1,3,5,7,9,11$和$0,2,4,6,8,10$,假设以一个字节(十六进制)表示的话,就是下面这个样子的:
-
-```cpp
-0x01030507 0x090B0002 0x0406080A
-```
-
-好的,接下来请完成以下任务:
-
-* 找到第二个序列中的第三个数。
-
-嗯,是不是感觉自己懵了,如果不知道第一组有几个的话你是不可能准确找到这个数字的。
-
-于是我们得到了一个简单的界定序列边界的方法,就是要知道各序列对应的长度。
-
-比如我们知道这两个序列是连续放在一起的,第一个序列长度是$6$,同时也知道要找的是第二个序列的第三个数,那么这个数就应该是第$6+3$个数字。
-
-当然,这个数字要从$1$数过去才行,否则从任意其他的位置数,都不能得到我们想要的结果。
-
-## 长度
-
-我们可以看到,界定一个序列,必须要知道的是两点,第一个是他的起始元素,第二个就是这个序列的长度。
-
-一般来说,当这个序列的长度固定不变,并且每个元素是挨在一起的时候,我们常把它叫做array。
-
-> 关于array,我非常不喜欢“数组”这个翻译,因为这里面并不一定是数,也有可能是符,所以我会尽可能地使用array来表示它。
-
-在JavaScript中,定义一个array如下:
-
-```javascript
-let nums = [1, 2, 3, 4, 5]
-```
-
-对于array来讲,初始元素是方括号中的取值为0的时候的值。在方括号中的值我们称之为index(**索引**,奇葩翻译一般叫做**下标**)。这些索引以数字的形式出现,作为序号来表示数据在序列中的位置。
-
-有个重点是,这里的索引是从$0$开始,最大是$序列长度-1$,这其实也就是为什么我们在第三章讲过程的时候提到循环的写法的一个原因。
-
-不过对于遍历序列来说还支持另外一种写法。
-
-```javascript
-
-for(let item of nums) {
- console.log(item);
-}
-```
-
-不需要你去管什么索引了,这样子写就像是在说
-
-```javascript
-对于 nums 里面的 item
- 输出 item 的值
-```
-
-当然,在Python中看起来更自然:
-
-```python
-for item in nums:
- print(item)
-```
-
-## 串
-
-JavaScript中的字符串与array类似,自己维护了长度。但在早期的一些编程语言(如C语言)中,是没有做这种记录的,取而代之的是使用一个特定的标志来表示,这里是最后一个值为空。这种字符串也有另外一个名字,叫空结尾串(Null-terminated String)。
-
-这种特殊标记就可以让我们界定一个序列的边界的另外一种方式。
-
-我们可以来简单模拟一下这个行为:
-```javascript
-let content = ['h', 'e', 'l', 'l', 'o', null];
-
-// 求长度:
-
-function length(nts) {
- let length = 0;
- for (let item of nts) {
- if (item != null) {
- length ++;
- } else {
- break;
- }
- }
- return length;
-}
-
-length(content) // 5
-```
-
-而实际存放这个串的空间大小:
-```javascript
-content.length // 6
-```
-
-## 可变长序列
-
-试想你在一个笔记本上记录内容,每一行算是一个条目,当一页记录满以后,并不能连续地往下面记了,就需要翻到下一页纸。
-
-连续不连续并不重要,重要的是我们能从这一页翻到下一页。
-
-对应到我们的序列表示上,只要当前元素能够记录下一个元素的位置,是不是就表示我们的序列就能从第一个元素全部找出来了呢?
-
-就像这张图片描述的:
-
-
-
-这种结构被称为链接列表(也叫链表,Linked List)在上世纪五十年代就已经设计用于实际的程序。链表这种结构非常的灵活,可以很轻松的在任意位置添加或者删除数据。因为并不需要内存结构上的连续,所有的位序关系都是靠前一个元素和后一个元素之间的链接关系来确定,而添加或者删除数据只要改变一下这种链接关系就可以了。
-
-但是对于链表来说一个很大的问题就是访问数据。比如我们要访问链表的第n个元素的时候,对于array和串这种结构来说,因为内存空间上是连续的,直接做一次加法就能找到,但是对于链表来说每次都要从第一个元素开始找起。而且,这种形式的链表又称作单链表(Singly Linked List),是没有办法从尾部往头部走的。
-
-所以,在单链表的基础上,又构造了双链表(Double Linked List),每一个元素除了纪录自己对应的下一个元素之外,还要保存自己对应的上一个元素。这种时候如果做一些相邻元素的访问,就比单链表高效了一些。
-
-比如,当我访问列表中第7个元素,然后再去访问第6个的时候,只要从第7个元素向前查找一次就可以了。
-
-也许以后你可能还会听说到循环链表(Circular Linked List),或者是其他的形式,这些都离不开最初链表的思想:把数据和位置做关联。
-
-## 线性结构
-
-我们简单的做一个总结。
-
-对于array,string和list我们都称为序列,原因其实是显而易见的。
-
-首先,他们满足这样一点:所有的都是从头到尾连续地组织在一起,从任何地方出发都能找到下一个元素或者是到序列尾部。就像是在头和尾之间有一条线把他们串起来一样,而且在逻辑表示上,我们也是把他们放成一串。
-
-另外,对于每一个元素,他们在序列中的位置是固定的,换句话说,序列中的元素是有前后顺序的。当我任意交换两个元素的位置,得到的新序列就跟原来的序列是不同的。
-
-第三点就是,当我们从第一个元素开始找下去的时候,总是能找到最后一个元素(对于没有最后一个元素的情况,我们会在以后进行探讨)。
-
-总结下来就是,序列是线性的(Linear)、有序的(Ordered,类比“排序过的(Sorted)”)和有穷的(Finite)。
-
-## 生成器
-
-很多时候我们的序列是通过某种规则产生的,而这种规则并不会一次性把所有元素都算出来。
-
-比如自然数、斐波那契、日志流、用户滚动加载的结果……这类序列可能很长,甚至没有终点。如果你强行把它们“全算出来”,要么没必要,要么根本算不完。
-
-这时候就需要**生成器**(Generator)和**迭代器**(Iterator):让序列“按需生产”,需要一个元素就产出一个,产完就停。
-
-### 迭代器与可迭代对象
-
-在 JavaScript 里,迭代器是一个有 `next()` 方法的对象,`next()` 返回 `{ value, done }`:
-
-```javascript
-let counter = {
- current: 0,
- next() {
- return { value: this.current++, done: false };
- }
-};
-
-counter.next(); // { value: 0, done: false }
-counter.next(); // { value: 1, done: false }
-```
-
-而**可迭代对象**(Iterable)是指“可以被 `for...of` 遍历”的对象,它们内部会提供一个迭代器。
-
-### 生成器函数
-
-生成器函数用 `function*` 定义,用 `yield` 产出元素:
-
-```javascript
-function* range(start, end) {
- for (let i = start; i <= end; i++) {
- yield i;
- }
-}
-
-for (let n of range(1, 5)) {
- console.log(n);
-}
-```
-
-这就像一个“可暂停”的函数:每次 `yield` 交出一个值,下次从上次停下的位置继续。
-
-更有趣的是,可以定义**无穷序列**:
-
-```javascript
-function* naturals() {
- let n = 0;
- while (true) {
- yield n++;
- }
-}
-```
-
-但是要小心:无穷序列如果直接展开,会卡死。
-
-所以通常会配合一个“截断器”(take):
-
-```javascript
-function* take(n, iterable) {
- let i = 0;
- for (let item of iterable) {
- if (i++ >= n) break;
- yield item;
- }
-}
-
-[...take(5, naturals())]; // [0, 1, 2, 3, 4]
-```
-
-生成器的意义在于:**节省内存、延迟计算、按需处理**。
-这也是很多“流式处理”能成立的基础。
-
-### 扩展阅读:函数式惰性序列(可跳过)
-
-除了 `function*`,还可以用“函数 + 闭包”来模拟惰性序列(按需展开)。
-
-```javascript
-function cons(x, y) {
- return f => f(x, y);
-}
-
-function head(s) {
- return s((x, y) => x);
-}
-
-function tail(s) {
- return s((x, y) => y);
-}
-
-function zeros() {
- return cons(0, () => zeros());
-}
-
-function take(n, s) {
- if (n === 0) return [];
- return [head(s), ...take(n - 1, tail(s)())];
-}
-
-take(5, zeros()); // [0, 0, 0, 0, 0]
-```
-
-这里 `tail` 返回的是一个函数,只有在你“强制求值”的时候(调用它)才会继续生成后续内容,这就是惰性(lazy)的核心思路。
-
-### 练习:最长公共子序列(Longest Common Subsequence)
-
-通常我们会对两个序列的内容进行对比,比较这两个序列有什么地方不同。这就是典型的LCS问题。LCS的应用很多,大部分版本控制系统的核心逻辑中就有它的存在。
-
-请参阅Wikipedia对LCS问题的分析和讨论,尝试实现求LCS的算法,并分析:
-
-* 如果用 JavaScript 实现,你至少需要“可重复遍历”的序列,还是“可随机访问”的序列?
-* 如果你了解 C++ 的迭代器分类,请判断 LCS 至少需要哪一类迭代器(比如 Forward / Random Access)。
-
-> 提示:LCS 经典算法需要频繁访问任意位置。
-
-## 延伸阅读
-
-* [复杂度 Complexity](../reference/glossary/complexity.md)
-* [缓存 Cache](../reference/glossary/cache.md)
diff --git a/docs/chapters/ch06_data.md b/docs/chapters/ch06_data.md
deleted file mode 100644
index 85cd5dc..0000000
--- a/docs/chapters/ch06_data.md
+++ /dev/null
@@ -1,276 +0,0 @@
-# 数据
-
-很多时候我们要处理的东西并不只是一个简单的数据,或者是一个由多个数据组成的简单序列。比如,当我们要考虑一间房子,关注的是户型、面积和位置等;考虑一辆汽车,关注的是品牌、价格和最高时速等;考虑一个学生,关注的是他的学号、姓名、各科成绩等。
-
-这时候,序列、引用和各种标量(Scalar)类型都不能很好地满足我们的需要,我们需要**把多种数据打包在一起**。
-
-## 结构
-
-比如我们要表示一辆车,最直接的方式是用数组:
-
-```javascript
-let car = ['Nissan', 500000, 180];
-```
-
-这种写法虽然能用,但不够清晰:谁是价格?谁是速度?一不小心就会写错。
-
-于是我们更常用“带名字的数据”,也就是**结构**。在 JavaScript 里,这就是对象(Object):
-
-```javascript
-let car = {
- brand: 'Nissan',
- price: 500000, // RMB
- speed: 180 // km/h
-};
-
-car.brand; // 'Nissan'
-car['price']; // 500000
-```
-
-结构的好处是:
-
-* 读起来更像人话;
-* 字段有名字,语义更明确;
-* 字段可以是不同类型,甚至是嵌套结构。
-
-比如一个学生:
-
-```javascript
-let student = {
- id: 'S001',
- name: 'Kimmy',
- scores: { math: 92, english: 86 },
- hobbies: ['reading', 'music']
-};
-```
-
-### 结构的本质
-
-房子、汽车、学生这些“概念性实体”(Entity)都有一些属性(Property)以及与其他实体的关系(Relation)。
-
-当我们给这些属性贴上标签,把它们组织起来,就形成了结构。换句话说,我们给一块数据“赋予了语义”。
-
-## 递归数据类型
-
-有些结构是**递归的**:它包含了它自己。
-
-最经典的例子就是链表(List)。一个节点包含一个值和下一个节点:
-
-```javascript
-function node(value, next = null) {
- return { value, next };
-}
-
-let list = node(1, node(2, node(3, null)));
-```
-
-遍历它很简单:
-
-```javascript
-function printList(list) {
- for (let p = list; p !== null; p = p.next) {
- console.log(p.value);
- }
-}
-```
-
-当然也可以用递归(注意递归层数太深会导致调用栈溢出):
-
-```javascript
-function printList(list) {
- if (list === null) return;
- console.log(list.value);
- printList(list.next);
-}
-```
-
-### 扩展阅读:C++ 中的递归结构(对比)
-
-> 可以跳过,只是帮助理解“指针 + 递归”。
-
-```cpp
-struct ListNode {
- int value;
- ListNode* next;
-};
-
-void printList(ListNode* list) {
- if (list == nullptr) return;
- std::cout << list->value;
- printList(list->next);
-}
-```
-
-## 构造器(Constructor)
-
-当结构变复杂时,我们希望“创建时就自动把字段填好”。
-
-JavaScript 提供了 `class` 和 `constructor`:
-
-```javascript
-class User {
- constructor(name, age, height) {
- this.name = name;
- this.age = age;
- this.height = height;
- }
-}
-
-let user = new User('Kimmy', 18, 178);
-```
-
-你也可以用工厂函数做到类似效果:
-
-```javascript
-function makeUser(name, age, height) {
- return { name, age, height };
-}
-```
-
-构造器的意义在于:**统一初始化规则**,并且可以在创建时做一些必要的检查或计算。
-
-## 递归结构上的操作
-
-既然结构是递归的,那么操作也可以是递归的。
-
-比如我们把链表里的每个数取反:
-
-```javascript
-function mapList(list, transformer) {
- if (list === null) return null;
- return {
- value: transformer(list.value),
- next: mapList(list.next, transformer)
- };
-}
-
-let list2 = mapList(list, x => -x);
-```
-
-## 作为数据的过程(Procedure as Data)
-
-在 JavaScript 中,函数本身就是数据。我们可以把它传给另一个函数,或者作为返回值。
-
-```javascript
-const negate = x => -x;
-mapList(list, negate);
-```
-
-这就是“高阶函数”的基础,也是之后闭包与对象封装的铺垫。
-
-### 补充:函数对象的常见用法
-
-JavaScript 里函数是第一类值,可以像变量一样传递。一个常见场景是“比较器”:
-
-```javascript
-[1, 111, 12].sort((x, y) => x - y); // [1, 12, 111]
-```
-
-`(x, y) => x - y` 就是一个函数对象,它告诉 `sort` 如何比较两个元素。
-
-## 树
-
-另一种经典的递归结构是树(Tree)。比如二叉树:
-
-```javascript
-class TreeNode {
- constructor(value, left = null, right = null) {
- this.value = value;
- this.left = left;
- this.right = right;
- }
-}
-```
-
-下面这棵树表示表达式 `(1 + (2 - 3)) * 4`:
-
-```
- *
- / \
- + 4
- / \
- 1 -
- / \
- 2 3
-```
-
-### 遍历(Traverse)
-
-先序遍历(Preorder):
-
-```javascript
-function preorder(node, visit) {
- if (!node) return;
- visit(node.value);
- preorder(node.left, visit);
- preorder(node.right, visit);
-}
-```
-
-中序遍历(Inorder):
-
-```javascript
-function inorder(node, visit) {
- if (!node) return;
- inorder(node.left, visit);
- visit(node.value);
- inorder(node.right, visit);
-}
-```
-
-后序遍历(Postorder):
-
-```javascript
-function postorder(node, visit) {
- if (!node) return;
- postorder(node.left, visit);
- postorder(node.right, visit);
- visit(node.value);
-}
-```
-
-### 深度优先(Depth-First)和广度优先(Breadth-First)
-
-如果从根节点出发,**先一路走到底再回退**,就是深度优先(DFS)。
-
-如果**一层一层地访问**,就是广度优先(BFS)。
-
-实现 DFS 通常用“栈”,实现 BFS 通常用“队列”。
-
-```javascript
-function dfs(root, visit) {
- if (!root) return;
- let stack = [root];
- while (stack.length) {
- let node = stack.pop();
- visit(node.value);
- if (node.right) stack.push(node.right);
- if (node.left) stack.push(node.left);
- }
-}
-
-function bfs(root, visit) {
- if (!root) return;
- let queue = [root];
- while (queue.length) {
- let node = queue.shift();
- visit(node.value);
- if (node.left) queue.push(node.left);
- if (node.right) queue.push(node.right);
- }
-}
-```
-
-> 提醒:`queue.shift()` 会移动数组,性能一般。生产环境里通常会用真正的队列结构。
-
-## 练习
-
-* 实现一个 `sumList`,返回链表所有元素的和。
-* 改造 `mapList`,写出一个 `filterList`。
-* 用代码实现先序、中序、后序遍历。
-* 用代码实现 DFS 和 BFS,并比较它们在“查找指定节点”上的行为差异。
-
-## 延伸阅读
-
-* [值语义与引用语义 Value vs. Reference](../reference/glossary/value-reference.md)
-* [序列化 Serialization](../reference/glossary/serialization.md)
diff --git a/docs/chapters/ch07_state.md b/docs/chapters/ch07_state.md
deleted file mode 100644
index be68166..0000000
--- a/docs/chapters/ch07_state.md
+++ /dev/null
@@ -1,137 +0,0 @@
-# 状态
-
-程序中的很多数据是在不停变化的,比如时间、用户输入、网络请求结果、游戏中的位置和生命值。当一个可变对象发生变化时,我们就说它的**状态**发生了改变。
-
-简单说:**数据是静态的,状态是“随时间变化的数据”。**
-
-## 可变状态
-
-最典型的状态就是变量:
-
-```javascript
-let count = 0;
-count = count + 1; // 现在 count 的状态变了
-```
-
-`count` 在不同的时刻有不同的值,这就是状态的变化。
-
-### 状态与副作用
-
-如果一个函数会改变外部状态,我们就说它有“副作用”:
-
-```javascript
-let total = 0;
-function add(x) {
- total += x; // 修改了外部状态
-}
-```
-
-副作用并不“坏”,但它会让程序更难预测。所以很多设计会尽量把“计算逻辑”和“状态修改”分开。
-
-## 共享状态与冲突
-
-当多人(或多个任务)同时修改同一份状态,就会出现“冲突”。
-
-例如一个账户余额:
-
-```javascript
-let balance = 1000;
-
-function deposit(amount) {
- let current = balance;
- balance = current + amount;
-}
-
-function withdraw(amount) {
- let current = balance;
- balance = current - amount;
-}
-```
-
-如果两个操作“交错执行”,可能出现意外结果:
-
-```
-balance = 1000
-A: 读到 1000
-B: 读到 1000
-A: 写回 1200
-B: 写回 800
-最终:800(丢失了一次更新)
-```
-
-这类问题叫**竞态条件**。它很难排查,因为结果依赖“执行顺序”。
-
-> 提醒:即使 JavaScript 是单线程,只要出现异步切换(`await` / 回调),也会发生类似“交错执行”。
-
-### 为什么尽量避免共享状态?
-
-* 结果依赖时序,难测试、难复现。
-* 一个地方的修改,会影响所有“别名”。
-* 并发或异步时容易出现竞态。
-* 代码读起来不清楚“谁在改”。
-
-## 不可变更新
-
-一种常见的对策是**不直接修改原对象**,而是创建一个新对象:
-
-```javascript
-let user = { name: 'Kimmy', age: 18 };
-let updated = { ...user, age: 19 }; // 不修改原对象
-```
-
-这种方式叫“不可变更新”(Immutable Update)。它更安全,但会多创建一些对象。
-
-> 提醒:`const` 只保证变量不变,不保证对象内容不变。
-
-## 迭代器也是状态
-
-迭代器之所以能“往前走”,就是因为它内部保存了当前位置:
-
-```javascript
-let iterator = {
- index: 0,
- next(arr) {
- if (this.index >= arr.length) return { done: true };
- return { value: arr[this.index++], done: false };
- }
-};
-```
-
-这个 `index` 就是状态。每次 `next()` 都在改变它。
-
-## 状态机
-
-当一个系统只有有限种状态,并且可以在状态之间切换,我们就称它是**状态机**。
-
-例如红绿灯:
-
-```
-红 -> 绿 -> 黄 -> 红 ...
-```
-
-用代码可以这样表达:
-
-```javascript
-let light = {
- state: 'red',
- next() {
- if (this.state === 'red') this.state = 'green';
- else if (this.state === 'green') this.state = 'yellow';
- else this.state = 'red';
- }
-};
-```
-
-状态机特别适合描述“流程有明显阶段”的问题,比如登录流程、订单流程、游戏关卡等。
-
-## 练习
-
-* 写一个计数器对象 `counter`,包含 `inc()` 和 `dec()` 方法,并维护内部状态。
-* 用状态机描述“电梯”的状态转换(例如:停靠、上行、下行、开门)。
-* 设计一个函数 `move(point, dx, dy)`,返回移动后的新坐标,要求不修改原对象。
-* 写一个“库存扣减”示例,说明共享状态在并发时可能出现负库存。
-
-## 延伸阅读
-
-* [不可变性 Immutability](../reference/glossary/immutability.md)
-* [竞态条件 Race Condition](../reference/glossary/race-condition.md)
diff --git a/docs/chapters/ch08_reference.md b/docs/chapters/ch08_reference.md
deleted file mode 100644
index e5cf2e0..0000000
--- a/docs/chapters/ch08_reference.md
+++ /dev/null
@@ -1,205 +0,0 @@
-# 引用
-
-> 注:本文中提到的“引用”是广义概念,不仅仅指 JavaScript 里的“引用类型”。
-
-在程序里,我们有两种常见的“东西”:
-
-* **值**(Value):比如数字、布尔值、字符串。
-* **引用**(Reference):指向某块数据的“地址”。
-
-## 内存里发生了什么(极简版)
-
-可以把内存想成一个大仓库:
-
-* 小而简单的数据(例如数字)可以直接放在变量里。
-* 复杂对象通常放在“仓库里”,变量里只放一个“门牌号”(引用)。
-
-在 JavaScript 里,基本类型是“值语义”,对象/数组/函数是“引用语义”。
-
-## 值语义 vs. 引用语义
-
-看一个最简单的例子:
-
-```javascript
-let a = 1;
-let b = a;
-
-b = 2;
-a; // 1
-```
-
-`a` 和 `b` 是两个独立的值,互不影响。
-
-再看对象:
-
-```javascript
-let obj1 = { x: 1 };
-let obj2 = obj1;
-
-obj2.x = 2;
-obj1.x; // 2
-```
-
-`obj1` 和 `obj2` 实际上指向同一份数据,这就叫“引用语义”。当两条变量指向同一块数据时,它们就成了**别名**(alias)。
-
-## 引用的作用
-
-引用让我们可以**共享大型结构**,避免频繁复制。例如一个很大的数组:
-
-```javascript
-let big = new Array(1000000).fill(0);
-let shared = big; // 共享引用,几乎不占额外内存
-```
-
-如果每次都复制一份,性能和内存都会受影响。
-
-## 引用与数据结构
-
-链表、树、图等复杂结构都离不开引用。
-
-以链表为例:每个节点保存“下一个节点”的引用:
-
-```javascript
-function node(value, next = null) {
- return { value, next };
-}
-
-let list = node(1, node(2, node(3)));
-```
-
-树和图也是一样:通过引用把节点连接起来。
-
-更进一步:**同一个节点也可以被多个父节点引用**,这样就形成了“有向无环图”(DAG)。这在编译器、缓存结构里很常见。
-
-## 函数参数里的引用
-
-JavaScript 函数传参时,传递的是“值”,但对于对象来说,这个“值”是引用:
-
-```javascript
-function addOne(point) {
- point.x += 1;
-}
-
-let p = { x: 0 };
-addOne(p);
-p.x; // 1
-```
-
-这也是很多“状态被意外修改”的来源。
-
-## 相等与同一
-
-两个对象长得一样,不代表它们是“同一个”:
-
-```javascript
-let a = { x: 1 };
-let b = { x: 1 };
-
-(a === b); // false
-```
-
-`===` 对对象比较的是**引用是否相同**。如果你需要比较内容是否相同,就要写深度比较(或用库)。
-
-## 拷贝:浅拷贝与深拷贝
-
-避免“别名问题”的一种方式是复制:
-
-```javascript
-let user = { name: 'Kimmy', age: 18 };
-let copy = { ...user }; // 浅拷贝
-```
-
-浅拷贝只复制“第一层”。如果有嵌套对象,还是共享引用:
-
-```javascript
-let u1 = { profile: { city: 'SH' } };
-let u2 = { ...u1 };
-
-u2.profile.city = 'BJ';
-u1.profile.city; // 'BJ'
-```
-
-深拷贝更彻底,但实现更复杂。一个常见(但有局限)的方法是:
-
-```javascript
-let deep = JSON.parse(JSON.stringify(u1));
-```
-
-> 提醒:这种方式会丢失函数、`Date`、`Map` 等复杂类型。
-
-## 引用与对象生命周期(内存管理)
-
-在某些语言里(如 C/C++),你需要手动申请和释放内存。释放不当就会造成“内存泄漏”或“野指针”。
-
-JavaScript 有自动垃圾回收(GC),但这并不等于“不会泄漏”。
-
-### 引用计数(概念)
-
-一种常见的内存管理方式叫“引用计数”:
-
-* 每个对象有一个计数。
-* 有一个新的引用指向它,计数 +1。
-* 引用消失,计数 -1。
-* 计数为 0 时释放。
-
-问题是:**循环引用**会让计数永远不为 0:
-
-```javascript
-let a = {};
-let b = {};
-a.other = b;
-b.other = a;
-```
-
-引用计数在这种情况下可能无法回收。现代 JS 引擎通常使用“可达性分析”而不是纯引用计数,所以可以处理循环引用。
-
-### 常见的内存泄漏场景(JS)
-
-* **全局变量**:全局对象引用一直存在。
-* **事件监听未移除**:DOM 结点被移除,但监听还在。
-* **缓存无限增长**:数组/Map 只增不减。
-* **闭包长时间持有大对象**:函数引用了一个很大的结构。
-
-例如:
-
-```javascript
-let cache = [];
-function remember(data) {
- cache.push(data); // cache 不断变大
-}
-```
-
-### 如何避免
-
-* 及时清理不用的引用(设为 `null`)。
-* 给缓存设置上限。
-* 事件监听记得 `removeEventListener`。
-* 临时映射用 `WeakMap` / `WeakSet`。
-
-## 小结
-
-引用让我们能够构建复杂结构、提高效率,但也带来共享状态、别名、生命周期等问题。理解引用是理解“程序行为”的关键一步。
-
-## 练习
-
-* 解释下面代码的输出:
-
-```javascript
-let a = [1, 2];
-let b = a;
-let c = a.slice();
-
-b.push(3);
-
-console.log(a, b, c);
-```
-
-* 写一个 `cloneUser(user)`,返回一个“只做浅拷贝”的函数。
-* 写一个 `freeze` 的例子,说明不可变对象能减少引用带来的副作用。
-* 设计一个链表结构,让两个链表共享同一个尾部节点,并解释这样做的好处与风险。
-
-## 延伸阅读
-
-* [值语义与引用语义 Value vs. Reference](../reference/glossary/value-reference.md)
-* [垃圾回收 Garbage Collection](../reference/glossary/garbage-collection.md)
-* [栈与堆 Stack & Heap](../reference/glossary/stack-and-heap.md)
diff --git a/docs/chapters/ch09_closure.md b/docs/chapters/ch09_closure.md
deleted file mode 100644
index 2431e30..0000000
--- a/docs/chapters/ch09_closure.md
+++ /dev/null
@@ -1,180 +0,0 @@
-# 闭包
-
-闭包(Closure)是 JavaScript 里最重要、也最容易被误解的概念之一。
-
-一句话定义:**闭包是“函数 + 它捕获的外部变量”**。
-
-## 词法作用域
-
-JavaScript 采用词法作用域(Lexical Scope):变量的可见范围由“写代码的位置”决定,而不是“运行时的位置”。
-
-这意味着:内部函数可以访问外部函数里的变量。
-
-```javascript
-function makeAdder(x) {
- return function (y) {
- return x + y;
- };
-}
-
-let add10 = makeAdder(10);
-add10(3); // 13
-```
-
-这里 `add10` 这个函数里,依然能访问 `x`,即使 `makeAdder` 已经执行完毕。
-
-这个“仍然能访问”的能力,就是闭包。
-
-### 扩展阅读:用闭包模拟对象(可跳过)
-
-只用函数也可以模拟“对象 + 方法 + 封装”。比如构造一个“有序对”:
-
-```javascript
-function pair(left, right) {
- return fn => fn(left, right);
-}
-
-function left(a, b) {
- return a;
-}
-
-function right(a, b) {
- return b;
-}
-
-let p = pair(1, 2);
-p(left); // 1
-p(right); // 2
-```
-
-`pair` 的内部数据并没有直接暴露出来,只能通过 `left` / `right` 访问,这就是“封装”的味道。
-
-## 用闭包保存状态
-
-闭包最常见的用法是“封装状态”:
-
-```javascript
-function makeCounter() {
- let count = 0;
- return function () {
- count += 1;
- return count;
- };
-}
-
-let counter = makeCounter();
-counter(); // 1
-counter(); // 2
-```
-
-`count` 是私有变量,只能通过闭包访问,这就是“私有状态”的来源。
-
-## 闭包与回调
-
-很多回调函数依赖外部变量,这也是闭包的体现:
-
-```javascript
-function repeat(message) {
- setTimeout(function () {
- console.log(message);
- }, 1000);
-}
-```
-
-`setTimeout` 执行时,`repeat` 已经结束了,但 `message` 仍然可用。
-
-## 闭包与模块
-
-闭包可以用来“封装私有变量”,形成简单的模块:
-
-```javascript
-function createStore() {
- let data = {};
- return {
- set(key, value) { data[key] = value; },
- get(key) { return data[key]; }
- };
-}
-
-let store = createStore();
-store.set('x', 10);
-store.get('x'); // 10
-```
-
-这里的 `data` 只有 `set/get` 能访问,这就是“私有状态”。
-
-## 闭包与生命周期
-
-闭包会“延长”被捕获变量的生命周期:只要闭包还存在,这些变量就不会被回收。
-
-这通常很有用,但也可能造成内存占用:
-
-```javascript
-function holdBigData() {
- let big = new Array(1000000).fill(0);
- return () => big.length;
-}
-
-let f = holdBigData(); // big 被一直保留
-```
-
-因此,闭包不是问题本身,**不释放的引用**才是问题。
-
-## 常见陷阱:循环与 var
-
-```javascript
-var funcs = [];
-for (var i = 0; i < 3; i++) {
- funcs.push(function () {
- console.log(i);
- });
-}
-
-funcs[0](); // 3
-funcs[1](); // 3
-funcs[2](); // 3
-```
-
-因为 `var` 没有块级作用域,三个函数共享同一个 `i`。
-
-解决方式有两种:
-
-```javascript
-// 方式一:用 let
-for (let i = 0; i < 3; i++) {
- funcs.push(function () { console.log(i); });
-}
-
-// 方式二:用立即执行函数
-for (var i = 0; i < 3; i++) {
- (function (x) {
- funcs.push(function () { console.log(x); });
- })(i);
-}
-```
-
-## 小结
-
-闭包让函数具有“记忆”,也是对象、模块、异步回调的基础。
-
-下一章的“对象”,很多时候可以看作“闭包 + 约定”。
-
-## 练习
-
-* 写一个 `makeOnce(fn)`,让 `fn` 只能执行一次。
-* 写一个 `makeTimer()`,返回一个函数,每次调用返回距离创建时的毫秒数。
-* 解释为什么下面的代码能正常输出 `hello`:
-
-```javascript
-function outer() {
- let msg = 'hello';
- return function () { console.log(msg); };
-}
-
-outer()();
-```
-
-## 延伸阅读
-
-* [词法作用域 Lexical Scope](../reference/glossary/lexical-scope.md)
-* [垃圾回收 Garbage Collection](../reference/glossary/garbage-collection.md)
diff --git a/docs/chapters/ch10_object.md b/docs/chapters/ch10_object.md
deleted file mode 100644
index 280d30f..0000000
--- a/docs/chapters/ch10_object.md
+++ /dev/null
@@ -1,143 +0,0 @@
-# 对象
-
-广义地讲,任何一个在程序中出现的元素都可以称作对象:整数对象、字符串对象、函数对象……
-
-但在“面向对象编程”(OOP)里,**对象**通常指“带状态 + 带行为”的实体。
-
-## 面向对象编程(Object-Oriented Programming)
-
-面向对象的核心思想是:
-
-* **封装**:把数据和操作放在一起。
-* **抽象**:只暴露必要的接口。
-* **多态**:同一接口,多个实现。
-
-### 一个最简单的例子
-
-不同的“车”(Vehicle)都可以跑(run):汽车、卡车、推车……
-
-```javascript
-class Vehicle {
- run() {
- console.log('vehicle running');
- }
-}
-
-class Car extends Vehicle {
- run() {
- console.log('car running');
- }
-}
-
-class Truck extends Vehicle {
- run() {
- console.log('truck running');
- }
-}
-
-let v = new Car();
-v.run(); // car running
-```
-
-这里 `Vehicle` 提供了统一接口 `run()`,不同子类各自实现。
-
-### 多态:同一个接口,不同表现
-
-```javascript
-function start(vehicle) {
- vehicle.run();
-}
-
-start(new Car());
-start(new Truck());
-```
-
-只要对象“能 run”,就能被 `start` 使用。这种风格叫 **鸭子类型**(Duck Typing)。
-
-## JavaScript 的对象模型(极简版)
-
-JavaScript 的对象本质上是“键值对 + 原型链”。
-
-`class` 只是语法糖,本质还是函数和原型:
-
-```javascript
-function Person(name) {
- this.name = name;
-}
-Person.prototype.say = function () {
- console.log('hi, ' + this.name);
-};
-```
-
-使用 `class` 只是更直观:
-
-```javascript
-class Person {
- constructor(name) {
- this.name = name;
- }
- say() {
- console.log('hi, ' + this.name);
- }
-}
-```
-
-## 封装与私有数据
-
-对象常常需要“只读公开,内部私有”。在 JavaScript 里有两种常见写法:
-
-```javascript
-// 写法一:用闭包
-function createCounter() {
- let count = 0;
- return {
- inc() { count += 1; return count; }
- };
-}
-```
-
-```javascript
-// 写法二:用私有字段(#)
-class Counter {
- #count = 0;
- inc() { this.#count += 1; return this.#count; }
-}
-```
-
-封装的意义在于:外部只能通过“方法”访问内部状态,避免随意修改。
-
-## 继承与组合
-
-继承很方便,但容易让结构变复杂。很多时候,我们用**组合**来代替继承:
-
-```javascript
-let canRun = {
- run() { console.log('run'); }
-};
-
-let canFly = {
- fly() { console.log('fly'); }
-};
-
-let bird = Object.assign({}, canRun, canFly);
-bird.run();
-bird.fly();
-```
-
-简单理解:**继承是一棵树,组合是积木**。
-
-## 小结
-
-对象能把“数据 + 行为”放在一起,是程序建模最常用的方法之一。
-
-下一章我们会看到:当对象和并发混在一起时,会出现新的问题。
-
-## 练习
-
-* 定义一个 `Animal` 类,包含 `speak()` 方法,再派生 `Dog`、`Cat`。
-* 写一个 `feed(animal)` 函数,只依赖 `animal.eat()`,不要检查类型。
-* 用组合的方式,让一个对象同时具备 `move` 和 `draw` 两种能力。
-
-## 延伸阅读
-
-* [原型链 Prototype Chain](../reference/glossary/prototype-chain.md)
diff --git a/docs/chapters/ch11_concurrency.md b/docs/chapters/ch11_concurrency.md
deleted file mode 100644
index 3d79439..0000000
--- a/docs/chapters/ch11_concurrency.md
+++ /dev/null
@@ -1,150 +0,0 @@
-# 并发
-
-并发(Concurrency)关注的是:**多个任务在时间上交错执行**。
-
-它不等于并行(Parallelism)。并行是“同时在多个核心上执行”,并发则是“看起来在同时发生”。
-
-## 竞态条件(Race Condition)
-
-并发最常见的问题是竞态:多个任务读写同一份状态,结果取决于“谁先谁后”。
-
-一个经典例子是账户余额:
-
-```javascript
-let balance = 1000;
-
-function delay(ms) {
- return new Promise(resolve => setTimeout(resolve, ms));
-}
-
-async function deposit(amount) {
- let current = balance;
- await delay(10);
- balance = current + amount;
-}
-
-async function withdraw(amount) {
- let current = balance;
- await delay(10);
- balance = current - amount;
-}
-
-Promise.all([
- deposit(200),
- withdraw(200)
-]).then(() => console.log(balance));
-```
-
-最终结果可能是 800 或 1200,取决于哪一个先写回。
-
-这种“读取-修改-写回”的操作如果不是原子的,就会出现竞态。
-
-## 原子性与临界区
-
-`count = count + 1` 看起来是一步,其实包含“读取 + 计算 + 写回”三步。
-当多个任务交错执行时,增量可能丢失。
-
-```javascript
-let count = 0;
-
-async function inc() {
- let current = count;
- await delay(0);
- count = current + 1;
-}
-
-Promise.all([inc(), inc()]).then(() => console.log(count)); // 可能是 1
-```
-
-这段代码里,`await` 让两个任务交错执行,导致“加 1”只发生了一次效果。
-“必须连续执行、不能被打断”的那段代码就叫**临界区**。
-
-## 常见解决思路
-
-* **锁/互斥**:同一时间只能一个任务修改共享状态。
-* **队列化**:把操作排队,按顺序执行。
-* **不可变数据**:不改共享对象,而是产生新对象。
-* **消息传递**:不共享内存,只传递消息(如 Worker)。
-
-## 死锁(概念)
-
-如果两个任务互相等待对方释放资源,就会永远卡住,这叫死锁。
-JavaScript 主线程很少直接写锁,但在多线程环境(或数据库事务)里这是典型问题。
-你要记住的不是“死锁怎么写”,而是:**多个资源 + 相互等待 = 风险**。
-
-## JavaScript 的并发模型
-
-JavaScript 在浏览器和 Node.js 中都遵循“事件循环”模型:
-
-* 代码在一个主线程上执行。
-* 异步任务被放到队列中。
-* 事件循环不断从队列里取任务执行。
-
-### 宏任务与微任务(极简版)
-
-* `setTimeout` 属于宏任务。
-* `Promise.then` / `await` 的回调属于微任务。
-
-```javascript
-console.log('A');
-setTimeout(() => console.log('B'));
-Promise.resolve().then(() => console.log('C'));
-console.log('D');
-
-// 输出顺序:A D C B
-```
-
-### async/await
-
-`async/await` 是 Promise 的语法糖,本质仍然是“任务队列 + 回调”。
-
-## 在单线程里也会发生“并发问题”
-
-即使只有一个线程,只要有异步切换点(`await`、回调),也会出现“交错执行”。
-
-上面的银行例子就是典型。
-
-一种简单的修复方法是**串行化**:
-
-```javascript
-async function runInOrder() {
- await deposit(200);
- await withdraw(200);
- console.log(balance);
-}
-```
-
-如果任务很多,可以用一个“队列”把它们排起来:
-
-```javascript
-function createQueue() {
- let last = Promise.resolve();
- return function enqueue(task) {
- last = last.then(() => task()).catch(() => {});
- return last;
- };
-}
-
-let enqueue = createQueue();
-
-enqueue(() => deposit(200));
-enqueue(() => withdraw(200));
-```
-
-## 并行:Worker 里的消息传递
-
-浏览器里可以用 Web Worker,Node.js 里有 Worker Threads。它们和主线程通过消息通信,避免共享内存带来的竞态。
-
-这部分属于进阶内容,这里先记住一个原则:**能不共享就不共享**。
-
-## 练习
-
-* 修改上面的银行例子,让它在并发情况下仍然得到正确结果。
-* 写一个 `delay(ms)`,然后用 `async/await` 顺序打印 1、2、3(每秒一个)。
-* 写一个“任务队列”,保证多个异步任务按顺序执行。
-
-## 延伸阅读
-
-* [事件循环 Event Loop](../reference/glossary/event-loop.md)
-* [竞态条件 Race Condition](../reference/glossary/race-condition.md)
-* [死锁 Deadlock](../reference/glossary/deadlock.md)
diff --git a/docs/chapters/intro.md b/docs/chapters/intro.md
deleted file mode 100644
index 804016c..0000000
--- a/docs/chapters/intro.md
+++ /dev/null
@@ -1,99 +0,0 @@
-# 引言
-
-## 编程
-
-编程(Programming)是一项创造性的活动,如同创作(Composing)、绘画(Painting)等一样。我们常常会通过一系列的步骤把所需要的部件进行组合,得到另一个期望的结构,或者是解决一个实际性的问题。表达和构建这些步骤的过程,就是编程(当然,在脱离程序语言以后,也可以把它叫做**规划**(Programme))。
-
-我们会简单地把一件件小事按**顺序**做,这样一件件小事的组合以后就可以完成一件更大的事情。比如我们会切菜,生火,炒菜,煮饭,这样我们就能够做出一顿午餐。
-
-当然在这个过程中可能会设计一些**计算**。我们会考虑,需要放几勺盐和几把米,以适合最后吃午餐的人的营养均衡。在特殊的时候,甚至需要精确到毫克级别的营养规划,以及不同人的营养结构的差异等。我们会在第二节探讨关于计算,以及计算的**组合**等相关问题。
-
-在规划和解决问题的时候可能并不是一帆风顺的,有时候我们会面临各种抉择。比如,考虑明天下午吃素还是吃荤,吃鸡肉和还是鱼肉,吃宫保鸡丁还是鱼香肉丝等等。有比如,在我们准备吃鱼香肉丝的时候发现没有鱼了,又该怎么办。
-
-在任何需要做选择的时候,作为一个程序员(**规划师**),你不应该出现选择困难症。因为任何一个亟待解决的问题都必须得到解决之后才能让这个程序正常地执行。所以,我们在第三章中会探讨关于过程设计,以及如何利用循环和选择等手法来设计一个完善的程序的相关问题。
-
-但是做饭的时候你是怎么区分盐和砂糖、醋和酱油的呢?当然你会说每个都尝一遍,但是这样既有可能浪费,又不卫生。所以习惯性地我们会关注这些材料瓶上面的标签,从上面知道我们用的是什么东西。当然对于读不懂标签的计算机来说,这些材料作为商品的时候都会有固定的条形码,这个条形码也能够让计算机知道一个被它看到的东西代表着什么。因为它知道这些条码是如何**编码**(Encoding)的。
-
-当你遇到大量具有相同组件的时候,可以考虑用**序列**(Sequence)或者列表(List)来安排这些组件。比如做一道菜的每一个步骤对应在菜谱上的每一项。或者是在处理具有层级结构以及更复杂的关联的结构的时候采用**树**(Tree)和**图**(Graph)来组织。比如六度关系理论,实际上就是一张非常大的**图**(Graph)。
-
-有时候会考虑到一部分组件是可变的。比如时间总是流逝的,人总会长大的。当我们尝试描述一个组件改变的时候,就引入了**状态**(State)。这种时候我们更希望能够把改变的数据和相应的操作做一个绑定,这样子绑定了组件的操作就可以看成一个闭包(Closure)。简单地比如一个计数器。当在组件上面绑定更多操作的时候,就可以把它看作一个**对象**(Object)。
-
-可变的状态可能会带来的一个问题就是,如果有多个人尝试同时去修改这个状态的时候,会造成结果的不一致性。比如,一个没有加入事务处理的银行账户,两个人同时在进行操作,账户中原有1000元,甲存入了200块,但在甲存入200块还未完成的同时乙取出了200块。这种时候会有几种可能的结果,第一种就是甲先于乙完成操作,结果就是账户余额变成了800块,凭空损失了200块;另外一种就是乙先于甲完成了操作,结果账户余额就变成了甲操作的结果,1200块,凭空多出来400块。这种问题就属于**并发**(Concurrency)。
-
-## JavaScript
-
-本书选择使用 JavaScript 来讲述编程中的各种思想和概念。
-
-我们并不是在讲述 JavaScript 这门编程语言的细节,只是通过它来讲述关于“程序设计”的内容。当你需要查阅资料时,请从本书的“工具上手指南”里整理好的官方入口开始查找。
-
-作为入门书籍,为了直观地表述各种概念或者原理,本书可能会使用一些非专业词汇,或者与准确定义有偏差的理解。JavaScript 作为一种生产力工具,其准确定义和行为以 ECMA-262 国际标准为准。对专业人员如有任何困惑或者争议的点,请参考标准文档的描述。同样,如果你通过本书对编程和相关的东西产生了兴趣,希望深入了解和学习,也请使用专业的书籍和资料。本书只是作为入门的引导,不对专业内容做解释和定义。
-
-## 学习方式与工具
-
-阅读过程中你会用到浏览器开发者工具(Inspector/Console),也会在本地使用 VS Code、Node.js 和 TypeScript。如果你是第一次接触这些工具,建议先阅读:
-
-* [浏览器开发者工具与 Console](../guides/browser-devtools.md)
-* [安装与上手 VS Code](../guides/vscode.md)
-* [安装 Node.js 并在 VS Code 运行 JavaScript](../guides/nodejs.md)
-* [TypeScript 入门:安装、编译与运行](../guides/typescript.md)
-
-## 更新状态
-
-这本书从2015年8月开始编写,中间经过了多次的重写过程,包括把编程语言从偏硬核且专业的C++转向为JavaScript、引入更多资料和练习、增补和调整章节顺序等,目前内容仍处于不稳定的状态,请参考下面的状态来确定这一章是否值得学习:
-
-* 第一章 环境 \(rewriting\)
-* 第二章 计算 Computation \(outdated\)
-* 第三章 过程 Procedural \(outdated\)
-* 第四章 编码 Encoding \(outdated\)
-* 第五章 序列 Sequence \(updated\)
-* 第六章 数据 Data \(updated\)
-* 第七章 状态 State \(updated\)
-* 第八章 引用 Reference \(updated\)
-* 第九章 闭包 Closure \(updated\)
-* 第十章 对象 Object \(updated\)
-* 第十一章 并发 Concurrency \(updated\)
-* 附录 练习答案与提示 \(draft\)
-
-## 目录
-
-* [引言](intro.md)
-* [环境](ch01_environment.md)
-* [计算](ch02_computation.md)
-* [过程](ch03_procedure.md)
-* [编码](ch04_encoding.md)
-* [序列](ch05_sequence.md)
-* [数据](ch06_data.md)
-* [状态](ch07_state.md)
-* [引用](ch08_reference.md)
-* [闭包](ch09_closure.md)
-* [对象](ch10_object.md)
-* [并发](ch11_concurrency.md)
-* [练习答案与提示](answers.md)
-
-## 参与贡献
-
-本书的源码托管在 GitHub [IntroToProgramming/IntroductionToProgramming](https://github.com/IntroToProgramming/IntroductionToProgramming)仓库,你可以提交issue或者pull request贡献和改进本书。
-
-## 支持我
-
-欢迎关注我的微信公众号轻技术(lightych)或者[Telegram Lightych 频道](https://t.me/lightychannel)及时获取更新。
-
-### 特别感谢以下朋友的资助
-
-* [esrever10](https://github.com/esrever10)
-* [karakapi](https://github.com/karakapi)
-* [负一的平方根](http://sqrt-1.me)
-* [linkgod](http://www.linkgod.net)
-* [shellvon](https://github.com/shellvon) & [tingoo](https://github.com/tingoo)
diff --git a/docs/draft/draft.md b/docs/draft/draft.md
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/draft/fpi.md b/docs/draft/fpi.md
deleted file mode 100644
index 1bd15d5..0000000
--- a/docs/draft/fpi.md
+++ /dev/null
@@ -1,702 +0,0 @@
----
-title: 你所需要知道的关于函数的一切
-date: 2020-07-17
----
-
-> 本文源自于我在 2012 ~ 2013 年写的 Meta Functions 系列文章,以及知乎专栏的《map 四种》。通过细致地讲解和练习函数相关的内容来让大家了解**函数**、**闭包**、**延迟计算**和**流**。
->
-> 你可以把它看成一个 SICP 前三章的超级简化版,不过这其中我不会讨论过多的细节。文中所有的代码都在浏览器控制台执行通过,你也可以简单地对着浏览器或者任意实现了 ES6 特性的 JavaScript REPL 试验其中的代码。
-
-# 函数
-
-这里的函数我比较倾向于集合论中的定义,即是两个集合之间的映射关系。也就是那种非常**纯**(pure)的函数。后文也会涉及一些带有状态的函数,不过绝大多数情况下我所期待的是对于一个函数 $f$ ,给定其参数 $x$ ,那么 $f(x)$ 的结果一定是**确定的**(deterministic)。
-
-我们先来实现一个简单的函数,比如**斐波那契(fibonacci)数列**的定义。
-
-$$
-fib(0) = \begin{cases}
- 1, &x = 0, or &x = 1\cr
- fib(n-1) + fib(n-2), &x \ge 2
-\end{cases}
-$$
-
-如果你熟悉递归,可以很容易根据上面的递归定义把 `fib` 函数实现了:
-
-```js
-function fib(n) {
- if (n === 0 || n === 1) {
- return 1;
- }
- return fib(n - 1) + fib(n - 2);
-}
-```
-
-我们来看求 `fib(10)` 的时候的展开图:
-
-```
-fib(10) =>
-fib(9) + fib(8) =>
-fib(8) + fib(7) + fib(7) + fib(6) =>
-fib(7) + fib(6) + fib(6) + fib(5) + fib(6) + fib(5) + fib(5) + fib(4) =>
-.....
-```
-
-最后展开会是一个深度为 10 节点非常多的**递归树**。
-
-在我的电脑上,计算 `fib(30)` 已经需要等待一段时间,明显感觉到延迟了。
-
-## 尾递归
-
-对于这个操作,实际可以用另外一个办法来简化,就是通过**尾递归**,把计算的操作合并到尾调用的参数求值中去。
-
-```js
-function fib(n, a = 1, b = 1) {
- if (n == 0) {
- return a;
- }
- return fib(n-1, b, a + b);
-}
-```
-
-这个时候的 `fib(10)` 的展开:
-
-```
-fib(10) =>
-fib(9, 1, 2) =>
-fib(8, 2, 3) =>
-fib(7, 3, 5) =>
-fib(6, 5, 8) =>
-fib(5, 8, 13) =>
-fib(4, 13, 21) =>
-fib(3, 21, 34) =>
-fib(2, 34, 55) =>
-fib(1, 55, 89) =>
-fib(0, 89, 144) =>
-89
-```
-
-所有的计算通过两个额外的参数来累加,而不是通过反复的递归调用展开,这个时候只有递归层次的深度,就连计算 `fib(100)` 也都只需要递归调用 100 次就好,能够立即返回结果。
-
-如果你曾经用**循环**的方式实现过斐波那契,那要想导出这个尾递归版本其实并不困难:
-
-```js
-function fib(n) {
- let a = 1;
- let b = 1;
- for (let i = 0; i < n; i++) {
- [a, b] = [b, a+b];
- }
- return a;
-}
-```
-
-好的,首先我们把循环倒过来写:
-
-```js
-function fib(n) {
- let a = 1;
- let b = 1;
- for (let i = n; i > 0; i--) {
- [a, b] = [b, a+b];
- }
- return a;
-}
-```
-
-把 `for` 改成死循环:
-
-```js
-function fib(n) {
- let a = 1;
- let b = 1;
- let i = n;
- while(true) {
- if (i === 0) {
- return a;
- }
- [i, a, b] = [i-1, b, a+b];
- }
-}
-```
-
-改一下参数和变量名:
-
-```js
-function fib(n, a = 1, b = 1) {
- while(true) {
- if (n === 0) {
- return a;
- }
- [n, a, b] = [n-1, b, a+b];
- }
-}
-```
-
-`while(true)` 里面的内容,跟尾递归版的结构几乎一模一样,而这里直接改到参数的赋值,就可以一步替换为尾递归。
-
-你可以对比尾递归形式和最后这个循环实现的内容。现实其实通常是反过来的,就是会通常是我们**写成尾递归的样子**,然后再由编译器**优化成循环**。这样的结果是能够省掉函数传参和压栈的过程,算是一步提效明显的优化,对时间(额外的压栈和传参操作)和空间(调用栈)的开销都能节省很多,还能避免不必要的**爆栈**(Stack Overflow)风险。
-
-### 练习
-
-- 请实现另外一个常用递归函数阶乘(factorial)的直接递归版和尾递归版。阶乘函数的定义如下:
-
-$$
-n! = \begin{cases}
- 1, &n = 0 \cr
- (n-1)!\times n, &n \gt 0
-\end{cases}
-$$
-
-# 函数进阶
-
-我们上一节简单实现了一个函数,那么现在来认真地回顾考虑这么一个问题,函数到底是什么?
-
-其实很简单,函数就是这么一个结构,你给他一个输入,他返回给你一个输出。而其由输入得到输出的过程,是你可以定义的。
-
-这其实是一个非常广义的抽象,可以拿来类比各种东西,比如一个生产流水线也可以这么抽象地看,原材料作为输入,产品作为输出;而这个流水线的每一个节点又都是有自己的输入和输出。
-
-于是我们可以看到函数的另外一个特征:可组合(Composable)。
-
-## 可组合性
-
-比如我们定义一个函数,去求一个数组排序后的结果:
-
-```js
-function sorted(array) {
- return array.slice().sort();
-}
-```
-
-然后再定义一个函数,来求一个数组反转之后的结果:
-
-```js
-function reversed(array) {
- return array.slice().reverse();
-}
-```
-
-那如果我们要求一个数组的降序排序的结果,就直接组合这两个调用就好:
-
-```js
-function sort_reversed(array) {
- return reversed(sorted(array));
-}
-```
-
-正式函数的这种可组合性,让我们能通过定义有限的正交算子,来组合出无限的操作。
-
-> 有些人可能会说,这个直接做成 Array 的方法,也是能够做成链式调用来组合的:
->
-> ```javascript
-> Array.prototype.sorted = function() {
-> return this.slice().sort();
-> }
->
-> Array.prototype.reversed() = function() {
-> return this.slice().reverse();
-> }
-> ```
->
-> 实际这两种做法本质上是同一件事情。有些编程语言(比如 D 语言)中,`x.f(y)` 与 `f(x, y)` 是等价操作,实现的这种转换叫做**统一函数调用语法**(Uniform Function Call Syntax)。
-
-## 函数对象
-
-回到上面的排序函数。
-
-JavaScript 有一个问题,就是排序默认是用的文本序,对数字也是如此,也就是说,111 是会排在 12 前面的,而 JavaScript 的 `Array.prototype.sort` 函数会让我们传递一个匿名函数进去来作为排序的比较器(Comparator),达到对数值做排序的目的。
-
-这个比较器就是一个函数对象。
-
-```js
-[1, 111, 12].sort((x, y) => x - y)
-// => [1, 12, 111]
-```
-
-**函数对象**,又叫**匿名函数**,在某些语境下面也叫 lambda 表达式(因其源自于 lambda 演算)。一个函数对象是可以赋值给某个变量、作为参数传递的;或者说,函数对象,是**第一类值**(first class value)。
-
-比如上文中的 `(x, y) => x - y`。
-
-## 闭包
-
-既然函数是**第一类值**,那么我们也就能有方式来构造他了。
-
-通常一个函数在传递过程中不只是作为一个独立的单位存在,还会包括一些**上下文**,这样组合起来的一个结构就叫闭包。
-
-比如,我们定义以下函数,会返回一个函数对象,而这个函数对象每次调用都会累加一次,行为表现像是一个计数器:
-
-```js
-function makeCounter() {
- let count = 0;
- return () => count ++;
-}
-```
-
-这里返回的函数对象,其实就捕获了 `makeCounter` 函数中的变量 `count`,并一直持有。在任何时候我们操作这个函数,都会改变这个变量的值。这个时候的变量可以被称为 **upvalue**(因为是**上层**(upper)函数中的**值**(value))。
-
-这样看起来似乎毫无意义。
-
-我们来看一个深入的结构:
-
-```js
-function pair(left, right) {
- return (fn) => fn(left, right);
-}
-
-function left(a, b) {
- return a;
-}
-
-function right(a, b) {
- return b;
-}
-
-let p = pair(1, 2);
-
-p(left) // => 1;
-p(right) // => 2;
-```
-
-`pair` 给我们构造了一个对象(这个时候已经不仅仅限于函数对象了),然后我们通过另外定义的两个函数来去访问这个对象的内部结构,而这个实际的内部结构并没有直接暴露给我们。
-
-上面这段话你看到了哪些关键的东西?
-
-- **对象**:`pair` 构造了一个有序对,这个对象可以由我们后续定义的方法来操作和访问
-- **方法**:`left` 和 `right` 两个函数本身并没有实际的意义,与 `pair` 对象绑定以后,可以利用 `pair` 中的数据来实现预期的行为
-- **封装**:`pair` 的内部结构在构造时确定,无法在外部获取和改变内部结构,只能通过定义 `pair` 的方法来处理
-
-在只有“函数”这个构造的情况下我们也能做这些事情。甚至在一些编程语言(比如 Java/C++)里面,函数对象就是通过**结构/类**加上特定的**函数/方法**来实现的,也就只有这样他们才能做捕获形成闭包。
-
-# 数据抽象
-
-## 可变性
-
-我们知道 OO 的一个特色是可变性来描述状态,闭包在这里也完全可以实现。当然需要借助一些额外的结构。
-
-```js
-function mutablePair(a, b) {
- return (fn) => {
- let x;
- [a, b, x] = fn(a, b)
- return x;
- }
-}
-
-function getLeft(a, b) {
- return [a, b, a];
-}
-
-function getRight(a, b) {
- return [a, b, b];
-}
-
-function setLeft(value) {
- return (a, b) => [value, b, a]
-}
-
-function setRight(value) {
- return (a, b) => [a, value, b]
-}
-
-let mp = mutablePair(1, 2);
-
-mp(getLeft); // 1
-mp(getRight); // 2
-mp(setLeft(5)); // 1
-mp(getLeft); // 5
-```
-
-其实可以看到,`mp` 接受的每个函数都是 `(a, b) => [a, b, x]` 这种形式。这样就是能够给传递函数充分地信息来获取结构,然后生成充分足够地信息来更新 `mp` 闭包的内部。如果我们再简化一点,把 `a` 和 `b` 作为一个对象比如 `this` 或者 `self` 来看,`mp` 接受的每个函数变成了 `(self) => result`。其中对 `self` 的改变也包括在内。
-
-这其实就是大部分编程语言的面向对象的“方法”的实现机制,都会给这些方法绑定一个 `this` 或者 `self` 变量,让方法内部可控制。
-
-你看,就这么简单。
-
-### 练习
-
-1. 给 mutablePair 实现一个方法,可以交换 pair 左右两边的值。
-2. 有没有更简单地只用函数来实现 mutablePair 的方式?
-
-## 生成器
-
-我们回想一下上一个场景中的计数器,其实是一个非常有用的结构。
-
-比如我们希望得到斐波那契数列,但又不希望提前获取这所有内容的时候:
-
-```js
-function fibGenerator() {
- let n = 0;
- return () => fib(n++)
-}
-```
-
-进一步地我们可以抽象出来这样一个结构,就叫生成器,根据你提供的函数再来求一个结果:
-
-```js
-function generator(fn) {
- let n = 0;
- return () => fn(n++);
-}
-
-y = generator(fib);
-
-y(); // 1
-y(); // 1
-y(); // 2
-y(); // 3
-y(); // 5
-y(); // 8
-```
-
-然后,不知道你是否发现了这么一个问题,就是,这个生成器只能前向迭代,也就是说,没法倒带的。
-
-来我们看一下怎么实现:
-
-```js
-function bidirectionalGenerator(fn) {
- let n = 0;
- return (direct) => {
- let result;
- [n, result] = direct(n, fn);
- return result;
- }
-}
-
-function backward(n, fn) {
- return [n-1, fn(n-1)];
-}
-
-function forward(n, fn) {
- return [n+1, fn(n+1)];
-}
-
-let bg = bidirectionalGenerator(fib);
-bg(forward); // 1
-bg(forward); // 2
-bg(forward); // 3
-bg(forward); // 5
-bg(forward); // 8
-bg(backward); // 5
-bg(backward); // 3
-bg(forward); // 5
-bg(forward); // 8
-```
-
-思路与 `mutablePair` 类似,我们构造一个特定结构作为这个对象的`this`,所有的操作都是围绕这里所谓的 `this` 来进行操作。
-
-### 练习
-
-- 给 `generator` 加上范围限制,实现 `boundedGenerator`。
-
-## 不可变性
-
-前面的生成器中,有一个很关键的问题就是我们**改变了 `generator` 的内部状态**,才得以每次获取都拿到不同的结果。这种情况实际违背了函数其执行的**确定性**。通常我们很少会用这种繁杂的方式实现对象和状态,而是用另外一些更加直观的形式。这个话题我们以后在涉及对象的时候再去讨论。
-
-继续看,如果我们不去改变生成器的内部状态,如何实现一个类似的结构。
-
-一个生成器会产生一系列的值,形成一个序列结构。我们先定义一个序列结构,可以依照前面的定义来:
-
-```js
-function cons(x, y) {
- return (f) => f(x, y);
-}
-
-function head(cons) {
- return cons((x, y) => x);
-}
-
-function tail(cons) {
- return cons((x, y) => y);
-}
-
-function nil() {
- return (f) => f(nil(), nil(), true);
-}
-
-function isNil(s) {
- return s((x, y, z) => z === true);
-}
-```
-
-这样一个结构中,序列的每一个节点所对应的下一个都是另外一个节点(`cons` 或者 `nil`),这样连续递归组合起来的结构就是个单链表序列,也是大多数数据结构的基础。
-
-一个包含了前 5 个自然数的序列,可以表示成以下形式:
-
-```js
-const seq_first_5_nats = cons(0, cons(1, cons(2, cons(3, (cons(4, nil()))))));
-
-head(seq_first_5_nats); // 0
-head(tail(tail(tail(seq_first_5_nats)))); // 3
-```
-
-而生成器每次除了给我们一个值以外,还会产生一个新的状态(因为这里不能再用可变状态了,所以这个新状态肯定是新生成的)。这样一个新的状态也正是跟原本的生成器一致的结构。这有点类似上面的序列,但由于生成器是会持续构造下去的,我们不得不采用一种方式来阻断这个构造的执行。
-
-我们可以先从重复产生同一个状态开始构造这个结构:
-
-```js
-function zeros() {
- return cons(0, () => zeros()); // 而不是 cons(0, zeros())
-}
-
-head(zeros()); // 0
-
-head(tail(tail(zeros())())()); // 0
-```
-
-这里的 `zeros` 就是一个生成器,在这里 `cons` 所对应的 `tail` 部分不再是一个 `cons` 或者 `nil`,而变成了一个函数。这里比较明显的就是,只要你不去对一个函数尝试进行求值,那么他可以作为一个仅有的对象保持该状态,这样就暂时阻断了生成器的持续构造。而当我们需要生成器继续执行的时候,只要对其进行一次强制求值就好了。
-
-可以看到我们每次调用 `tail` 以后都会尝试对它重新求值一次,这正是从一个状态转换到另一个状态的过程。
-
-为了方便从生成器中取出对应的值,我们预定义一个方便的功能函数 `take`:
-
-```js
-function take(n, gen) {
- if (n == 1) {
- return [head(gen)];
- }
- return [head(gen), ...take(n - 1, tail(gen)())];
-}
-
-take(10, zeros()); // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-```
-
-### 练习
-
-1. 实现 `take` 函数的非生成器(即由 `cons`/`nil` 组合而成的链表)版本。
-2. 通常与 `take` 配套的函数时 `drop`,即舍去掉 `take` 所获取的的那部分结果,直接把生成器快进到某个状态。请实现 `drop` 函数。
-
-同样的方式你也可以定义连续产生特定数字的序列:
-
-```js
-function repeat(n) {
- return cons(n, () => repeat(n));
-}
-
-take(10, repeat(10)); // [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
-```
-
-以及,持续递增的生成器:
-
-```js
-function counter(start = 0) {
- return cons(start, () => counter(start + 1));
-}
-
-take(10, counter(0)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-```
-
-可以看出来,这里的 `counter` 无非是在反复地应用 `+1` 这个操作,来持续的到结果。
-
-我们把 `+1` 操作变成函数,也即:
-
-```js
-function inc(x) {
- return x + 1;
-}
-
-function counter(start = 0) {
- return cons(start, () => counter(inc(start)))
-}
-```
-
-这时候我们可以考虑把这个函数作为参数抽取出来:
-
-```js
-function iterate(fn) {
- function generator(start = 0) {
- return cons(start, () => generator(fn(start)));
- }
-
- return generator;
-}
-
-take(10, iterate(inc)(0)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-take(10, iterate(x => x * 2)(1)); // [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
-```
-
-`iterate(fn)` 所产生的生成器对应的序列是:
-
-```js
-start, fn(start), fn(fn(start)), fn(fn(fn(start))), ...
-```
-
-但是这毕竟还是只能单项地产生结果,怎么能像前面一样生成一个 fibonacci 序列呢?
-
-同样的,我们再来抽取一个变量。
-
-每次我们的 `generator` 都只是直接把对应的迭代结果返回,而如果在这个迭代结果上再做一些操作会如何呢?
-
-```js
-function generate(gn, fn) {
- function generator(start = 0) {
- return cons(gn(start), () => generator(fn(start)));
- }
-
- return generator;
-}
-
-take(10, generate(fib, inc)()); // [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
-```
-
-同样,`generate(gn, fn)` 产生的生成器所对应生成的序列则是:
-
-```js
-gn(start), gn(fn(start)), gn(fn(fn(start))), ...
-```
-
-请思考前面`generate(fib, inc)`所实现的 fibonacci 序列生成器,获取其前 10 项时所完整展开的结构以及对 `fib` 函数的调用次数。
-
-你会发现,`generate` 这种方式对于需要复杂迭代运算的 `gn` 并不友好。
-
-## 通用生成器
-
-其实根据 fibonacci 序列的递归定义,我们可以写出更合适的生成器。
-
-```js
-function generateFib() {
- function generator(a = 1, b = 1) {
- return cons(a, () => generator(b, a + b));
- }
-
- return generator;
-}
-
-take(10, generateFib()()); // [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
-```
-
-这样得到的就是一个每取一步进行**一步计算**的 fibonacci 序列生成器,比起来前面每一次都要**重新计算**一遍的要更容易很多。
-
-其实这样我们仍然能够进行更进一步的抽取:
-
-可以看到的是,`generateFib` 里的 `generator` 函数的参数是有一个相对固定的**映射关系**的,也就是我们前面推出来的迭代式 fibonacci 的映射关系,而只要把这组**映射关系**表示出来,那就可以进一步的抽象了:
-
-```js
-function generateBy(fn) {
- function generator(arg, ...args) {
- return cons(arg, () => generator(...fn(arg, ...args)));
- }
-
- return (...initials) => generator(...initials);
-}
-
-take(10, generateBy((a, b) => [b, a + b])(1, 1));
-// [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
-```
-
-### 练习
-
-- 编写与 `generateFib` 类似的阶乘函数(factorial)所对应的版本,并用 `generateBy` 进行改写。
-- 把前面的 `zeros`、`repeat` 和 `counter` 用 `generateBy` 进行改写
-
-### 发生了什么?
-
-生成器这种构造,最主要的优势是利用函数在构造过程中捕获并保留其上下文的特性,来保持执行状态。这样每次在我们对生成器进行求值的时候,随即创建一个新的保持下一次状态的函数,就能够拿到下一个状态的生成器。
-
-而如何生成下一个状态,存在两种场景:
-
-- 第一,根据**反复应用特定函数**的结果转换得到,即我们的 `generate` 函数
-- 第二,根据前面几个**状态组合**得到,即我们的 `generateBy` 函数
-
-这两种场景也自然对应了许多对于实际应用场景中对于数据的复合操作。
-
-同样,由我们导出两种类型生成器的过程可以看到,程序的演进过程就是一整个的**抽象**与**组合**的过程。每一次我们得到一个**相对直观的结果**以后,都可以进一步对其再**抽象**,获得一个**更加通用**的方案。
-
-反过来,如果我们有一些简单函数(像 `inc`)可以做到**预期**的操作,与其他函数**组合**所构成的结构将可以解决几乎任意复杂度的问题。
-
-你所需要知道的与函数相关的一切,绝对不会超出这两个过程的范围。
-
-### 练习
-
-- 请考虑为这些不可变迭代器加入倒带功能。
-
-# 附文:《[map 四种](https://zhuanlan.zhihu.com/p/28471507 "map 四种")》
-
-```js
-// * common functions
-inc = x => x + 1
-double = x => x + x
-square = x => x * x
-
-compose = (f, g) => x => f(g(x))
-
-flip = f => (x, y) => f(y, x)
-
-id = x => x
-
-force = f => f()
-
-// * cons, nil and list
-cons = (x, y) => f => f(x, y)
-
-car = cons => cons((x, y) => x)
-
-cdr = cons => cons((x, y) => y)
-
-nil = () => nil
-
-nilP = x => x == nil
-
-list = (a, ...args) => args.length ? cons(a, list.apply(null, args)) : cons(a, nil)
-
-// * helper
-printList = lst => nilP(lst) || (console.log(car(lst)), printList(cdr(lst)))
-
-tap = f => (...args) => (console.log(args), f.apply(null, args))
-
-// # map the traditional recursive way
-map = (fn, lst) => nilP(lst) ? nil : cons(fn(car(lst)), map(fn, cdr(lst)))
-
-Y = rec => (f => f(f))(f => rec(x => (f(f))(x)))
-
-reduce = Y(r => c => i => l => nilP(l) ? i : c(car(l), r(c)(i)(cdr(l))))
-// # map by reduce
-// map = (fn, l) => reduce((h, t) => cons(fn(h), t))(nil)(l)
-filter = p => reduce((h, t) => p(h) ? cons(h, t) : t)(nil)
-
-foldr = reduce
-
-// foldl :: (a -> b -> a) -> a -> [b] -> a
-foldl = Y(f => c => i => l => nilP(l) ? i : f(c)(c(i, car(l)))(cdr(l)))
-
-reverse = foldl(flip(cons))(nil)
-
-len = reduce((h, t) => t + 1)(0)
-
-// * streams
-// type Stream = () -> (a, Stream)
-zeroP = (x) => x === 0
-
-// zeros = () => cons(0, zeros)
-// 0, 0, 0, ...
-zeros = Y (z => () => cons(0, z))
-
-// o, o, o, ...
-cycle = o => Y(c => () => cons(o, c))
-
-ones = cycle(1)
-
-// take_lazy = n => l => n == 0 ? nil : cons(car(l), take_lazy(n-1)(force(cdr(l))))
-take_lazy = Y(t => n => l => zeroP(n) ? nil : cons(car(l), t(n - 1)(force(cdr(l)))))
-
-// n, n + 1, n + 1 + 1, ...
-ints = Y(i => n => cons(n, () => i(n + 1)))
-
-range = (off, from = 0) => take_lazy(off)(ints(from))
-
-// n, f(n), f(f(n)), ...
-iterate = f => Y(i => n => cons(n, () => i(f(n))))
-// ints = iterate(inc)
-
-// g(n), g(f(n)), g(f(f(n))), ...
-generate = (g, f) => Y(i => n => cons(g(n), () => i(f(n))))
-// iterates = generate(id)
-// ints = generate(id, inc)
-// # map by generate
-// map = (fn, l) => take_lazy(len(l))(generate(compose(fn, car), cdr)(l))
-
-squares = (from = 1) => generate(square, inc)(from)
-
-stream = Y(s => l => nilP(l) ? nil : cons(car(l), () => s(cdr(l))))
-// # map on streams
-map_lazy = (f, s) => generate(compose(f, car), compose(force, cdr))(s)
-```
diff --git a/docs/draft/stream.md b/docs/draft/stream.md
deleted file mode 100644
index 0a3bf1f..0000000
--- a/docs/draft/stream.md
+++ /dev/null
@@ -1 +0,0 @@
-# 流
diff --git a/docs/guides/browser-devtools.md b/docs/guides/browser-devtools.md
deleted file mode 100644
index fce9f9b..0000000
--- a/docs/guides/browser-devtools.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-description: 学会打开浏览器开发者工具(Inspector/DevTools),并使用 Console 作为 REPL。
----
-
-# 浏览器开发者工具与 Console
-
-## 你将学到什么
-
-- 打开浏览器开发者工具(Inspector/DevTools)
-- 进入 Console 并执行 JavaScript
-- 用 Console 做最小实验与排错
-
-## 第一次打开开发者工具
-
-下面以 Chrome / Edge 为例,其他浏览器入口相近:
-
-1. 在网页空白处右键,选择“检查 / Inspect”。
-2. 或者使用快捷键:
- - Windows / Linux:`F12` 或 `Ctrl + Shift + I`
- - macOS:`Cmd + Option + I`
-3. 打开后,点击顶部的 “Console(控制台)” 标签。
-
-如果你只想直接打开 Console:
-
-- Windows / Linux:`Ctrl + Shift + J`
-- macOS:`Cmd + Option + J`
-
-Firefox 的快捷键略有不同:`Ctrl + Shift + K`(macOS 为 `Cmd + Option + K`)。
-
-## 把 Console 当作一个 REPL
-
-REPL 就是“输入一行,马上看到结果”。你可以从这几步开始:
-
-1. 输入 `2 + 2`,按 Enter。
-2. 输入 `document.title`,查看当前网页标题。
-3. 输入 `console.log('hello')`,看输出信息。
-4. 需要多行时,用 `Shift + Enter` 换行,最后再按 Enter 执行。
-
-Console 里运行的代码只影响当前页面,刷新页面就会恢复原状。
-
-## 常见问题
-
-- 看不到 Console:先确认 DevTools 已打开,再切到 Console 标签。
-- 输入没有反应:确认光标在 Console 内,按 Enter 执行。
-- 看到红色报错:通常是代码错误,不会“弄坏”你的电脑或浏览器。
-
-## 什么时候会用到它
-
-- 快速试验一段代码
-- 查看程序输出或报错
-- 理解网页上发生了什么
-
-## 官方文档入口
-
-- [Chrome DevTools 打开方式](https://developer.chrome.com/docs/devtools/open)
-- [Chrome DevTools Console 使用说明](https://developer.chrome.com/docs/devtools/console/)
-- [Edge DevTools 快捷键](https://learn.microsoft.com/microsoft-edge/devtools/shortcuts/)
-- [Firefox Web Console 使用说明](https://firefox-source-docs.mozilla.org/devtools-user/web_console/)
-
-(需要更深入时,再去阅读这些官方资料即可。)
diff --git a/docs/guides/index.md b/docs/guides/index.md
deleted file mode 100644
index 859c2ec..0000000
--- a/docs/guides/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-description: 从零开始搭建 JavaScript 学习环境的工具上手指南。
----
-
-# 工具上手指南
-
-本书会在浏览器里做小实验,也会在本地写代码。下面这几篇指南专为零基础读者准备,按顺序完成即可:
-
-1. [浏览器开发者工具与 Console](./browser-devtools.md)
-2. [安装与上手 VS Code](./vscode.md)
-3. [安装 Node.js 并在 VS Code 运行 JavaScript](./nodejs.md)
-4. [TypeScript 入门:安装、编译与运行](./typescript.md)
-
-每一篇指南都包含:
-
-- 这项工具是做什么的
-- 最小可运行的上手步骤
-- 常见问题与自查办法
-- 官方文档入口(需要深入时再看)
-
-如果你已经用过其中某些工具,可以跳过对应指南,直接进入章节。
diff --git a/docs/guides/nodejs.md b/docs/guides/nodejs.md
deleted file mode 100644
index fd26371..0000000
--- a/docs/guides/nodejs.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-description: 安装 Node.js,并在本地运行 JavaScript。
----
-
-# 安装 Node.js 并在 VS Code 运行 JavaScript
-
-## 你将学到什么
-
-- 安装 Node.js(推荐 LTS 版本)
-- 验证 Node.js 与 npm 是否可用
-- 在 VS Code 终端运行 JavaScript 文件
-
-## 安装 Node.js
-
-1. 打开 Node.js 官网下载页,选择 LTS 版本。
-2. 按提示完成安装。
-3. 安装后先关闭并重新打开终端。
-
-## 验证是否安装成功
-
-在终端里分别输入:
-
-```bash
-node -v
-npm -v
-```
-
-如果能看到版本号,说明安装完成。
-
-## 运行你的第一个本地脚本
-
-1. 用 VS Code 打开一个文件夹。
-2. 新建 `hello.js`,写入:
-
-```javascript
-console.log("hello from node");
-```
-
-3. 打开 VS Code 内置终端。
-4. 在终端中运行:
-
-```bash
-node hello.js
-```
-
-看到输出就成功了。
-
-## 常见问题
-
-- `node` 命令不存在:关闭并重开终端,或重新安装 Node.js。
-- 没看到输出:确认终端所在目录与 `hello.js` 在同一文件夹。
-
-## 官方文档入口
-
-- [Node.js 下载页面](https://nodejs.org/en/download/)
-- [Node.js 官方使用文档](https://nodejs.org/en/learn/)
-- [VS Code 的 Node.js 教程](https://code.visualstudio.com/docs/nodejs/nodejs-tutorial)
-
-(需要深入时再查即可。)
diff --git a/docs/guides/typescript.md b/docs/guides/typescript.md
deleted file mode 100644
index f983850..0000000
--- a/docs/guides/typescript.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-description: 安装 TypeScript,完成第一次编译与运行。
----
-
-# TypeScript 入门:安装、编译与运行
-
-## 你将学到什么
-
-- 安装 TypeScript
-- 编写第一个 `.ts` 文件
-- 编译成 `.js` 并运行
-
-## 前置条件
-
-- 已安装 VS Code(见 [安装与上手 VS Code](./vscode.md))
-- 已安装 Node.js(见 [安装 Node.js 并在 VS Code 运行 JavaScript](./nodejs.md))
-
-## 安装 TypeScript
-
-首次体验可以用“全局安装”,更简单;长期使用建议“项目内安装”。
-
-**方式 A:全局安装(上手更快)**
-
-```bash
-npm install -g typescript
-```
-
-**方式 B:项目内安装(更推荐)**
-
-```bash
-npm init -y
-npm install -D typescript
-```
-
-## 写下第一个 TypeScript 文件
-
-新建 `hello.ts`,写入:
-
-```typescript
-const message: string = "hello from ts";
-console.log(message);
-```
-
-## 编译并运行
-
-全局安装时,直接运行:
-
-```bash
-tsc hello.ts
-```
-
-项目内安装时,使用:
-
-```bash
-npx tsc hello.ts
-```
-
-编译后会生成 `hello.js`,再运行:
-
-```bash
-node hello.js
-```
-
-## 常见问题
-
-- `tsc` 命令找不到:先用 `npx tsc`,或确认是否全局安装成功。
-- 没生成 `hello.js`:确认当前目录是否有写入权限。
-
-## 官方文档入口
-
-- [TypeScript 下载与安装](https://www.typescriptlang.org/download/)
-- [TypeScript Handbook(从零开始)](https://www.typescriptlang.org/docs/handbook/typescript-from-scratch)
-- [VS Code 的 TypeScript 编辑支持说明](https://code.visualstudio.com/docs/typescript/typescript-editing)
-
-(需要深入时再查即可。)
diff --git a/docs/guides/vscode.md b/docs/guides/vscode.md
deleted file mode 100644
index ce04bef..0000000
--- a/docs/guides/vscode.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-description: 安装并上手 Visual Studio Code(VS Code),完成第一次本地编辑。
----
-
-# 安装与上手 VS Code
-
-## 你将学到什么
-
-- 下载与安装 VS Code
-- 打开文件夹与创建文件
-- 使用内置终端(Terminal)
-
-## 安装 VS Code
-
-1. 打开 VS Code 官网下载页面,选择与你系统匹配的安装包。
-2. 用默认选项完成安装即可。
-3. 安装完成后,第一次打开会看到欢迎页,先不用配置太多。
-
-## 第一次打开一个“项目文件夹”
-
-编程时我们通常把相关文件放在同一个文件夹里。可以这样做:
-
-1. 在桌面或任意位置新建一个文件夹,例如 `js-playground`。
-2. 打开 VS Code,选择“打开文件夹 / Open Folder”。
-3. 选择你刚刚创建的文件夹。
-4. 在左侧文件树里,新建文件 `hello.js`。
-
-## 写下第一行代码
-
-在 `hello.js` 里输入下面这一行:
-
-```javascript
-console.log("hello");
-```
-
-先保存文件,后面我们会在 Node.js 指南里运行它。
-
-## 使用内置终端
-
-VS Code 自带终端,可以直接执行命令:
-
-1. 打开菜单 “Terminal / 终端”。
-2. 选择 “New Terminal / 新建终端”。
-3. 终端会出现在窗口底部,后面运行 Node.js 和 TypeScript 都会用到它。
-
-## 常见问题
-
-- 找不到文件:确认你是“打开文件夹”,而不是“打开文件”。
-- 看不到终端:用菜单或快捷键重新打开终端。
-
-## 官方文档入口
-
-- [VS Code 下载页面](https://code.visualstudio.com/download)
-- [VS Code 安装指南](https://code.visualstudio.com/docs/setup/setup-overview)
-- [VS Code 内置终端说明](https://code.visualstudio.com/docs/terminal/getting-started)
-
-(遇到具体问题时再查这些资料即可。)
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644
index cd27734..0000000
--- a/docs/index.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-layout: home
-hero:
- name: 编程导引
- text: Introduction to Programming
- tagline: "从零开始你的计算机编程之旅"
- image:
- src: /hero.png
- alt: Introduction to Programming
- actions:
- - text: 开始阅读 →
- link: /chapters/intro
- theme: brand
-# features:
-# - icon: 🛠️
-# title: Simple and minimal, always
-# details: Lorem ipsum...
-# - icon:
-# src: /cool-feature-icon.svg
-# title: Another cool feature
-# details: Lorem ipsum...
-# - icon:
-# dark: /dark-feature-icon.svg
-# light: /light-feature-icon.svg
-# title: Another cool feature
-# details: Lorem ipsum...
----
diff --git a/docs/public/hero.png b/docs/public/hero.png
deleted file mode 100644
index cc7b282..0000000
Binary files a/docs/public/hero.png and /dev/null differ
diff --git a/docs/reference/glossary.md b/docs/reference/glossary.md
deleted file mode 100644
index 204b900..0000000
--- a/docs/reference/glossary.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# 概念解释 Glossary
-
-## A
-
-- [安全](./glossary/safety-and-security.md)
-
-## B
-
-- [阻塞与非阻塞 Blocking & Non-blocking](./glossary/blocking-nonblocking.md)
-
-## C
-
-- [缓存 Cache](./glossary/cache.md)
-- [调用栈 Call Stack](./glossary/call-stack.md)
-- [复杂度 Complexity](./glossary/complexity.md)
-- [临界区 Critical Section](./glossary/race-condition.md)
-- [测试](./glossary/testing.md)
-
-## D
-
-- [Debug](./glossary/debug.md)
-- [死锁 Deadlock](./glossary/deadlock.md)
-
-## E
-
-- [编码与字符集 Encoding & Charset](./glossary/encoding-and-charset.md)
-- [事件循环 Event Loop](./glossary/event-loop.md)
-
-## F
-
-- [浮点数 Floating Point](./glossary/floating-point.md)
-
-## G
-
-- [垃圾回收 Garbage Collection](./glossary/garbage-collection.md)
-
-## I
-
-- [不可变性 Immutability](./glossary/immutability.md)
-
-## L
-
-- [词法作用域 Lexical Scope](./glossary/lexical-scope.md)
-
-## M
-
-- [内存泄漏 Memory Leak](./glossary/garbage-collection.md)
-
-## P
-
-- [进程与线程 Process & Thread](./glossary/process-and-thread.md)
-- [原型链 Prototype Chain](./glossary/prototype-chain.md)
-
-## R
-
-- [竞态条件 Race Condition](./glossary/race-condition.md)
-- [递归 Recursion](./glossary/recursion.md)
-- [引用计数 Reference Counting](./glossary/garbage-collection.md)
-
-## S
-
-- [Safety, Security](./glossary/safety-and-security.md)
-- [栈与堆 Stack & Heap](./glossary/stack-and-heap.md)
-- [同步与异步 Sync & Async](./glossary/sync-async.md)
-- [序列化 Serialization](./glossary/serialization.md)
-
-## T
-
-- [Tail Call Optimization 尾调用优化](./glossary/tail-call-optimization.md)
-- [Testing](./glossary/testing.md)
-- [Transaction 事务](./glossary/transaction.md)
-- [调试](./glossary/debug.md)
-
-## U
-
-- [Unicode / UTF-8](./glossary/unicode-utf8.md)
-
-## V
-
-- [值语义与引用语义 Value vs. Reference](./glossary/value-reference.md)
diff --git a/docs/reference/glossary/blocking-nonblocking.md b/docs/reference/glossary/blocking-nonblocking.md
deleted file mode 100644
index cfb7dab..0000000
--- a/docs/reference/glossary/blocking-nonblocking.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# 阻塞与非阻塞(Blocking & Non-blocking)
-
-阻塞与非阻塞描述的是:当你“等待结果”时,当前线程是否还能继续做别的事。
-
-## 阻塞(Blocking)
-
-阻塞意味着“停下来等结果”。
-
-比如同步读取文件:
-
-```
-读文件 -> 卡住 -> 文件读完 -> 继续执行
-```
-
-## 非阻塞(Non-blocking)
-
-非阻塞意味着“先发起请求,然后继续做别的事”。
-
-```
-发起读文件 -> 继续执行 -> 文件读完后回调
-```
-
-## 与同步/异步的关系
-
-* 同步/异步:什么时候拿到结果
-* 阻塞/非阻塞:等待时能不能干别的事
-
-例如:
-
-* **同步 + 阻塞**:最常见的传统模式。
-* **异步 + 非阻塞**:事件循环常见模式。
-
-## 进一步阅读
-
-理解阻塞/非阻塞有助于你理解性能与响应性。
diff --git a/docs/reference/glossary/cache.md b/docs/reference/glossary/cache.md
deleted file mode 100644
index 6d0efb9..0000000
--- a/docs/reference/glossary/cache.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# 缓存(Cache)
-
-缓存是一种“用空间换时间”的技术:把常用的数据先存起来,下次更快访问。
-
-## 命中与未命中
-
-* **命中(Hit)**:缓存里有,直接用。
-* **未命中(Miss)**:缓存里没有,需要从原始来源获取。
-
-## 常见场景
-
-* 浏览器缓存网页资源
-* 数据库查询结果缓存
-* 函数计算结果缓存(Memoization)
-
-## 代价与风险
-
-* 缓存过期导致数据不一致
-* 缓存占用内存
-* 需要淘汰策略(如 LRU)
-
-## 进一步阅读
-
-缓存很常见,但“缓存一致性”也是常见问题来源。
diff --git a/docs/reference/glossary/call-stack.md b/docs/reference/glossary/call-stack.md
deleted file mode 100644
index 1dfd6cb..0000000
--- a/docs/reference/glossary/call-stack.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# 调用栈(Call Stack)
-
-调用栈用来记录“当前正在执行的函数链条”。每调用一次函数,就压入一层;函数返回就弹出一层。
-
-## 为什么重要
-
-* 帮你理解递归。
-* 解释“栈溢出”错误。
-* 解释错误堆栈(stack trace)。
-
-## 一个简单例子
-
-```javascript
-function a() { b(); }
-function b() { c(); }
-function c() { return; }
-
-a();
-```
-
-调用顺序是:a -> b -> c,然后依次返回。
-
-## 进一步阅读
-
-调用栈和事件循环结合起来,可以帮助你理解“同步/异步的执行顺序”。
diff --git a/docs/reference/glossary/complexity.md b/docs/reference/glossary/complexity.md
deleted file mode 100644
index 0774445..0000000
--- a/docs/reference/glossary/complexity.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# 复杂度(Complexity)
-
-复杂度用来描述算法在输入规模增大时,时间或空间的增长趋势。
-
-## 大 O 记号(Big O)
-
-常见的几个量级:
-
-* O(1):常数时间
-* O(log n):对数时间
-* O(n):线性时间
-* O(n log n):常见排序复杂度
-* O(n^2):二次时间
-
-## 一个直观例子
-
-在数组中查找一个元素:
-
-* 从头到尾扫描:O(n)
-* 如果数组有序,可以用二分查找:O(log n)
-
-## 为什么需要它
-
-* 帮你判断算法在大输入下会不会变慢。
-* 让你理解“为什么有些方法不可行”。
-
-## 进一步阅读
-
-复杂度是算法入门最重要的概念之一。
diff --git a/docs/reference/glossary/deadlock.md b/docs/reference/glossary/deadlock.md
deleted file mode 100644
index 0a78463..0000000
--- a/docs/reference/glossary/deadlock.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# 死锁(Deadlock)
-
-死锁是指多个任务互相等待对方释放资源,导致所有任务都无法继续。
-
-## 经典场景
-
-任务 A 占有资源 1 等待资源 2,任务 B 占有资源 2 等待资源 1:
-
-```
-A: 持有 1,等待 2
-B: 持有 2,等待 1
-```
-
-双方都在等待,系统卡住。
-
-## 产生死锁的四个条件(经典说法)
-
-1. **互斥**:资源同一时间只能被一个任务占用。
-2. **占有并等待**:任务占有资源,同时等待其他资源。
-3. **不可剥夺**:资源不能被强行夺走。
-4. **循环等待**:任务之间形成等待环。
-
-四个条件同时满足时容易发生死锁。
-
-## 如何避免(概念层面)
-
-* 统一资源获取顺序(打破循环等待)。
-* 限制一次持有多个资源。
-* 增加超时机制,放弃等待。
-
-## 与 JavaScript 的关系
-
-JavaScript 主线程通常不直接写锁,但在多线程(Worker/后端)或数据库事务中非常常见。
diff --git a/docs/reference/glossary/debug.md b/docs/reference/glossary/debug.md
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/reference/glossary/encoding-and-charset.md b/docs/reference/glossary/encoding-and-charset.md
deleted file mode 100644
index aa9c184..0000000
--- a/docs/reference/glossary/encoding-and-charset.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# 编码与字符集(Encoding & Charset)
-
-编码(Encoding)和字符集(Charset)经常被混用,但它们不是一回事。
-
-## 字符集(Charset)
-
-字符集是“有哪些字符”的清单,以及这些字符对应的编号(码点)。
-
-比如 Unicode 字符集里:
-
-* `A` 的码点是 U+0041
-* `中` 的码点是 U+4E2D
-
-## 编码(Encoding)
-
-编码是“如何把码点变成字节序列”。
-
-例如 UTF-8 是一种编码方式:
-
-* `A` -> 1 字节(0x41)
-* `中` -> 3 字节(0xE4 0xB8 0xAD)
-
-不同编码方式决定了“同一个字符”如何变成不同的字节序列。
-
-## 乱码的本质
-
-乱码通常是“用错了解码方式”。
-
-例如:
-
-* 文件是 UTF-8 编码
-* 你用 GBK 去解码
-
-结果就会出现“看起来像噪音”的字符。
-
-## 常见组合
-
-* **Unicode + UTF-8**:现代 Web 的事实标准。
-* **Unicode + UTF-16**:某些系统内部表示常见。
-
-## 简单建议
-
-* 文件统一使用 UTF-8。
-* 工具显示乱码时,尝试切换编码。
-
-## 进一步阅读
-
-理解编码与字符集的区别,是理解“文本为何会坏掉”的基础。
diff --git a/docs/reference/glossary/event-loop.md b/docs/reference/glossary/event-loop.md
deleted file mode 100644
index 9635eff..0000000
--- a/docs/reference/glossary/event-loop.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# 事件循环(Event Loop)
-
-事件循环是 JavaScript 在浏览器和 Node.js 中执行异步任务的核心机制。它决定了“什么时候执行哪段代码”。
-
-## 基本流程(极简版)
-
-1. 执行主线程上的同步代码。
-2. 异步任务完成后把回调放进队列。
-3. 事件循环不断从队列取任务执行。
-
-## 任务队列与优先级
-
-在多数运行时中,任务大致分成两类:
-
-* **宏任务**(Macro Task):如 `setTimeout`、I/O。
-* **微任务**(Micro Task):如 `Promise.then`、`queueMicrotask`。
-
-微任务通常在一次宏任务结束后立即执行,因此“优先级更高”。
-
-```javascript
-console.log('A');
-setTimeout(() => console.log('B'));
-Promise.resolve().then(() => console.log('C'));
-console.log('D');
-// 输出顺序:A D C B
-```
-
-## 为什么单线程也会有“并发感”
-
-事件循环会在同步任务和异步任务之间来回切换,所以看起来像“同时发生”。
-
-这也是共享状态在异步场景下容易出错的原因:任务交错执行,顺序不可预测。
-
-## 常见误解
-
-* **“单线程就没有并发问题”**:错。异步切换同样会造成竞态。
-* **“`await` 会阻塞线程”**:错。`await` 只是把后续逻辑放进微任务队列。
-
-## 进一步阅读
-
-如果你想理解更完整的执行流程,可以结合“竞态条件”“临界区”等概念一起阅读。
diff --git a/docs/reference/glossary/floating-point.md b/docs/reference/glossary/floating-point.md
deleted file mode 100644
index 9061bb2..0000000
--- a/docs/reference/glossary/floating-point.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# 浮点数(Floating Point)
-
-浮点数是计算机表示小数的一种方式。它使用“符号位 + 指数 + 尾数”的结构来近似表示实数。
-
-## 为什么会有误差
-
-很多十进制小数在二进制里是无限循环的,例如:
-
-```
-0.1 -> 0.0001100110011... (二进制循环)
-```
-
-因此在计算机里只能近似存储。
-
-```javascript
-0.1 + 0.2; // 0.30000000000000004
-```
-
-## IEEE 754(简述)
-
-现代计算机大多使用 IEEE 754 标准:
-
-* **单精度**:32 位
-* **双精度**:64 位(JS 的 Number)
-
-## 实用建议
-
-* 不要用 `==` 直接比较浮点数。
-* 用“误差范围”判断:
-
-```javascript
-function nearlyEqual(a, b, eps = 1e-10) {
- return Math.abs(a - b) < eps;
-}
-```
-
-## 进一步阅读
-
-浮点数问题常见于金融计算、科学计算。遇到精度问题时,请优先用整数或专门的数值库。
diff --git a/docs/reference/glossary/garbage-collection.md b/docs/reference/glossary/garbage-collection.md
deleted file mode 100644
index 016ac64..0000000
--- a/docs/reference/glossary/garbage-collection.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# 垃圾回收(Garbage Collection)
-
-垃圾回收(GC)是自动内存管理机制,它会回收“已经不可能再被使用”的对象。
-
-## 引用计数(Reference Counting)
-
-最简单的做法是给每个对象一个计数:
-
-* 有一个新引用指向它,计数 +1。
-* 引用消失,计数 -1。
-* 计数为 0 时释放。
-
-问题是:**循环引用**会让计数永远不为 0。
-
-```javascript
-let a = {};
-let b = {};
-a.other = b;
-b.other = a;
-```
-
-## 可达性分析(Tracing / Mark & Sweep)
-
-现代 JS 引擎通常采用“可达性分析”:
-
-* 以全局对象、调用栈等为根(root)。
-* 从根出发,能到达的对象都“活着”。
-* 无法到达的对象就是垃圾。
-
-这种方法能处理循环引用。
-
-## 内存泄漏(Memory Leak)
-
-即使有 GC,也可能泄漏:对象一直“可达”,但逻辑上早已没用。
-
-常见原因:
-
-* 全局变量过多。
-* 事件监听未移除。
-* 缓存无限增长。
-* 闭包长时间持有大对象。
-
-## 简单建议
-
-* 用完的引用设为 `null`。
-* 给缓存设置上限。
-* 事件监听及时移除。
-* 临时映射用 `WeakMap` / `WeakSet`。
-
-## 进一步阅读
-
-理解 GC 与引用,会帮助你理解“对象生命周期”和性能问题。
diff --git a/docs/reference/glossary/immutability.md b/docs/reference/glossary/immutability.md
deleted file mode 100644
index 4ee572c..0000000
--- a/docs/reference/glossary/immutability.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# 不可变性(Immutability)
-
-不可变性指的是:对象一旦创建,就不再被修改。如果需要变化,就创建一个新的对象。
-
-## 为什么有用
-
-* **减少共享状态冲突**:不修改原对象,减少别名带来的副作用。
-* **更容易推理**:同一输入得到同一输出。
-* **更容易做回滚/撤销**:旧对象仍然保留。
-
-## 成本
-
-* 会产生更多对象,可能增加内存占用。
-* 需要垃圾回收器回收旧对象。
-
-## JavaScript 中的常见做法
-
-```javascript
-let user = { name: 'Kimmy', age: 18 };
-let updated = { ...user, age: 19 };
-```
-
-数组也可以用 `slice()` / `concat()` / `map()` 生成新数组。
-
-## Object.freeze
-
-`Object.freeze` 可以阻止修改,但它是浅层冻结:
-
-```javascript
-let obj = Object.freeze({ profile: { city: 'SH' } });
-obj.profile.city = 'BJ'; // 仍然能改
-```
-
-如果需要深度冻结,需要递归处理。
-
-## 进一步阅读
-
-不可变性和函数式编程关系紧密,也是很多现代框架的设计基础。
diff --git a/docs/reference/glossary/lexical-scope.md b/docs/reference/glossary/lexical-scope.md
deleted file mode 100644
index c76f6f9..0000000
--- a/docs/reference/glossary/lexical-scope.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# 词法作用域(Lexical Scope)
-
-词法作用域指的是:变量的可见范围由“代码写在哪里”决定,而不是“运行时在哪执行”。
-
-## 一个简单例子
-
-```javascript
-function outer() {
- let x = 1;
- function inner() {
- return x + 1;
- }
- return inner;
-}
-
-let f = outer();
-f(); // 2
-```
-
-`inner` 捕获了 `outer` 里的 `x`,这就是闭包的基础。
-
-## 与动态作用域的区别
-
-在动态作用域中,变量的查找取决于“调用链”。但 JavaScript 使用的是词法作用域,所以按“定义时的位置”查找。
-
-## 常见影响
-
-* 函数可以访问外层变量(闭包)。
-* 变量遮蔽(inner 里定义的变量会遮住外层同名变量)。
-* `var` 没有块级作用域,会导致循环陷阱。
-
-## 进一步阅读
-
-理解词法作用域能帮助你理解闭包、模块、以及一些“看起来很奇怪的变量值”。
diff --git a/docs/reference/glossary/process-and-thread.md b/docs/reference/glossary/process-and-thread.md
deleted file mode 100644
index ae58ee6..0000000
--- a/docs/reference/glossary/process-and-thread.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# 进程与线程(Process & Thread)
-
-## 进程(Process)
-
-进程可以理解为“正在运行的程序实例”。
-
-* 有独立的内存空间。
-* 进程之间默认互相隔离。
-
-## 线程(Thread)
-
-线程是进程内部的“执行单元”。
-
-* 同一进程的线程共享内存。
-* 线程之间切换更轻量。
-
-## 为什么要区分
-
-* **进程隔离**更安全,但通信成本高。
-* **线程共享**更高效,但容易出现共享状态问题。
-
-## 与 JavaScript 的关系
-
-浏览器主线程是单线程执行 JS,但它可以创建 Worker 作为“后台线程”。
-
-Node.js 也可以用 Worker Threads,但大多数代码仍是单线程事件循环模型。
-
-## 进一步阅读
-
-理解进程与线程能帮助你理解“并发、并行、隔离和共享”的差别。
diff --git a/docs/reference/glossary/prototype-chain.md b/docs/reference/glossary/prototype-chain.md
deleted file mode 100644
index 4a4a94d..0000000
--- a/docs/reference/glossary/prototype-chain.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# 原型链(Prototype Chain)
-
-JavaScript 对象通过“原型链”实现属性查找与继承。
-
-## 一个直观的说法
-
-当你访问 `obj.foo` 时:
-
-1. 先在 `obj` 自己身上找。
-2. 找不到,就去 `obj.__proto__`(原型)上找。
-3. 继续往上,直到 `null` 为止。
-
-这条向上的链条就是原型链。
-
-## `prototype` 与 `__proto__`
-
-* `Function.prototype`:函数的原型对象(给实例用)。
-* `obj.__proto__`:对象的原型引用(指向构造函数的 `prototype`)。
-
-## `class` 的本质
-
-`class` 只是语法糖,底层仍然是“函数 + 原型链”。
-
-```javascript
-class Person {
- say() { console.log('hi'); }
-}
-
-let p = new Person();
-```
-
-`p` 的 `__proto__` 指向 `Person.prototype`。
-
-## 常见误区
-
-* 原型链不是“复制”,而是“引用”。
-* 修改原型会影响所有实例。
-
-## 进一步阅读
-
-原型链让 JavaScript 拥有灵活的继承方式,但也需要小心全局修改。
diff --git a/docs/reference/glossary/race-condition.md b/docs/reference/glossary/race-condition.md
deleted file mode 100644
index 3d7576a..0000000
--- a/docs/reference/glossary/race-condition.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# 竞态条件(Race Condition)
-
-当多个任务同时读写同一份共享状态时,结果取决于“谁先谁后”,这就叫竞态条件。
-
-## 原子性与临界区
-
-`count = count + 1` 看起来是一句,但实际包含三个步骤:读取、计算、写回。只要这三个步骤之间可以被打断,就可能出错。
-
-**必须连续执行、不能被打断的代码段**,叫做临界区。
-
-```javascript
-let count = 0;
-
-async function inc() {
- let current = count;
- await Promise.resolve();
- count = current + 1;
-}
-
-Promise.all([inc(), inc()]).then(() => console.log(count)); // 可能是 1
-```
-
-## 常见后果
-
-* **丢失更新**:两个操作互相覆盖。
-* **结果不稳定**:同样输入多次运行结果不同。
-* **难以复现**:只有在特定时序下才出现。
-
-## 常见对策
-
-* **锁/互斥**:同一时间只允许一个任务进入临界区。
-* **队列化**:把操作排队顺序执行。
-* **不可变数据**:避免修改共享对象。
-* **消息传递**:不共享内存,只传递消息(如 Worker)。
-
-## 进一步阅读
-
-竞态条件是并发的“第一坑”,理解它会帮你理解死锁、原子性、事务等概念。
diff --git a/docs/reference/glossary/recursion.md b/docs/reference/glossary/recursion.md
deleted file mode 100644
index 6cd4044..0000000
--- a/docs/reference/glossary/recursion.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# 递归(Recursion)
-
-递归就是“函数调用自己”。
-
-## 关键点
-
-* 必须有**终止条件**(base case)。
-* 每次调用都“更接近终止条件”。
-
-## 经典例子:阶乘
-
-```javascript
-function fact(n) {
- return n <= 1 ? 1 : n * fact(n - 1);
-}
-```
-
-## 递归与栈
-
-每次递归调用都会压入调用栈。如果层数过多,就会“栈溢出”。
-
-## 递归 vs. 循环
-
-* 递归表达结构清晰。
-* 循环通常更高效、更安全。
-
-## 进一步阅读
-
-理解递归能帮助你理解树、图、分治等算法。
diff --git a/docs/reference/glossary/safety-and-security.md b/docs/reference/glossary/safety-and-security.md
deleted file mode 100644
index de07f4c..0000000
--- a/docs/reference/glossary/safety-and-security.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# 安全
-
-在计算机科学中,安全代表着两个不同但相关的概念:safety(安全性)和security(安全保障)。虽然它们经常被混淆使用,但它们在含义和应用上存在一些区别。
-
-可以说,safety(安全性)更注重系统的内部能力,而security(安全保障)则更关注系统对外的能力。
-
-## 安全性(Safety)
-
-安全性关注的是系统或软件本身的性质,确保其在正常操作下不会对用户、数据或环境造成伤害或危险。安全性侧重于预防和减轻事故或意外事件的潜在危害,并确保系统在异常情况下能够进入安全状态。
-
-例如,对于一辆自动驾驶汽车而言,安全性意味着它能够遵循交通规则、正确感知周围环境、有效地应对紧急情况,并保证乘客和其他道路使用者的安全。在软件开发中,安全性可以涉及对输入数据的验证、错误处理、边界检查和异常处理等方面,以防止潜在的崩溃、数据损坏或系统故障。
-
-## 安全保障(Security)
-
-安全保障则更加关注系统或软件的保护和防御,以确保其免受恶意攻击、未经授权的访问、数据泄露或损坏等威胁。安全保障旨在确保系统的机密性、完整性和可用性,以及保护用户的隐私和敏感信息。
-
-在计算机系统中,安全保障可以包括诸如身份验证和访问控制、加密和解密、防火墙和入侵检测系统(IDS)等措施。这些措施旨在防止恶意用户的未经授权访问、数据泄露、网络攻击或病毒感染等安全威胁。
-
-总结起来,安全性(safety)强调系统的健壮性和对意外情况的适应能力,而安全保障则强调系统的保护性和对恶意威胁的防御能力。它们是计算机科学中维护系统完整性、可靠性和保护用户利益的重要方面,常常需要综合考虑来确保计算机系统的全面安全。
diff --git a/docs/reference/glossary/serialization.md b/docs/reference/glossary/serialization.md
deleted file mode 100644
index 14e26f7..0000000
--- a/docs/reference/glossary/serialization.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# 序列化(Serialization)
-
-序列化是把内存中的对象变成“可传输/可存储”的格式(通常是字符串或字节流)。
-
-## 为什么需要
-
-* 网络传输
-* 保存到磁盘
-* 跨进程通信
-
-## JavaScript 中的常见方式
-
-```javascript
-let obj = { x: 1, y: 2 };
-let text = JSON.stringify(obj); // 序列化
-let obj2 = JSON.parse(text); // 反序列化
-```
-
-## 常见限制
-
-* JSON 不支持函数、`undefined`、循环引用。
-* 日期对象会变成字符串。
-
-## 进一步阅读
-
-序列化是“程序之间交流”的基础。
diff --git a/docs/reference/glossary/stack-and-heap.md b/docs/reference/glossary/stack-and-heap.md
deleted file mode 100644
index f5b2b37..0000000
--- a/docs/reference/glossary/stack-and-heap.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# 栈与堆(Stack & Heap)
-
-程序运行时,内存大致可以分为两类:**栈**和**堆**。
-
-## 栈(Stack)
-
-* 存放函数调用的临时信息:参数、局部变量、返回地址。
-* “后进先出”(LIFO)。
-* 分配和释放很快。
-
-递归太深会导致“栈溢出”。
-
-## 堆(Heap)
-
-* 存放对象、数组等动态数据。
-* 空间更大,但管理更复杂。
-* 需要垃圾回收器释放不再使用的对象。
-
-## 一个直观比喻
-
-* 栈像“叠盘子”:最后放的最先拿。
-* 堆像“仓库”:物品放哪儿都行,需要登记和清理。
-
-## 为什么你需要知道它
-
-* 理解递归和栈溢出。
-* 理解为什么对象需要 GC。
-* 理解“引用”和“生命周期”。
-
-## 进一步阅读
-
-深入理解栈与堆,会让你对性能、内存泄漏有更直观的判断。
diff --git a/docs/reference/glossary/sync-async.md b/docs/reference/glossary/sync-async.md
deleted file mode 100644
index 31acae4..0000000
--- a/docs/reference/glossary/sync-async.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# 同步与异步(Sync & Async)
-
-## 同步(Synchronous)
-
-同步表示“按顺序执行”:上一件事没完成,下一件事就不能开始。
-
-```javascript
-console.log('A');
-console.log('B');
-```
-
-这两句一定按顺序输出。
-
-## 异步(Asynchronous)
-
-异步表示“先登记,稍后回来处理”。
-
-```javascript
-console.log('A');
-setTimeout(() => console.log('B'), 0);
-console.log('C');
-```
-
-输出顺序通常是:A C B。
-
-## 容易混淆的点
-
-* 同步/异步说的是“什么时候拿到结果”。
-* 阻塞/非阻塞说的是“等待时能不能干别的事”。
-
-二者不同,但经常同时出现。
-
-## 进一步阅读
-
-理解同步/异步有助于你理解事件循环、Promise 和并发问题。
diff --git a/docs/reference/glossary/tail-call-optimization.md b/docs/reference/glossary/tail-call-optimization.md
deleted file mode 100644
index fe83b32..0000000
--- a/docs/reference/glossary/tail-call-optimization.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# 尾调用优化(Tail Call Optimization)
-
-尾调用优化(TCO)是一种编译器/运行时优化:当函数的最后一步是调用另一个函数时,可以复用当前栈帧,避免栈增长。
-
-## 什么是“尾调用”
-
-```javascript
-function f(x) {
- return g(x); // 最后一步是调用 g
-}
-```
-
-因为 `f` 的工作已经完成,所以理论上可以直接把控制权交给 `g`,不必保留 `f` 的栈帧。
-
-## 为什么重要
-
-* 递归可以像循环一样节省栈空间。
-* 能避免深度递归导致的栈溢出。
-
-## JavaScript 的现实情况
-
-ECMAScript 曾经规范化过 TCO,但多数运行时并未开启,所以在 JS 中不能依赖它。
-
-因此,实际工程里深递归往往需要改写成循环或显式栈。
-
-## 进一步阅读
-
-理解 TCO 有助于你判断“递归是否安全”。
diff --git a/docs/reference/glossary/testing.md b/docs/reference/glossary/testing.md
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/reference/glossary/transaction.md b/docs/reference/glossary/transaction.md
deleted file mode 100644
index a917010..0000000
--- a/docs/reference/glossary/transaction.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# 事务(Transaction)
-
-事务是“一组操作要么全部成功,要么全部失败”的机制。
-
-## 为什么需要
-
-在涉及资金、库存、订单等场景时,部分失败会造成数据不一致。
-
-## ACID(简述)
-
-* **Atomicity 原子性**:要么全部成功,要么全部失败。
-* **Consistency 一致性**:数据满足约束。
-* **Isolation 隔离性**:并发事务互不干扰。
-* **Durability 持久性**:成功后结果可持久保存。
-
-## 简单类比
-
-转账:
-
-* A 扣钱成功
-* B 加钱失败
-
-如果没有事务,就会出现“钱少了、但没加到对方”的问题。
-
-## 进一步阅读
-
-事务是数据库与并发控制的核心概念。
diff --git a/docs/reference/glossary/unicode-utf8.md b/docs/reference/glossary/unicode-utf8.md
deleted file mode 100644
index a0572be..0000000
--- a/docs/reference/glossary/unicode-utf8.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Unicode / UTF-8
-
-Unicode 是一个字符集,定义了“字符与编号(码点)”的映射。UTF-8 是一种编码方式,负责把码点变成字节序列。
-
-## 一个直观例子
-
-* `A` 的码点是 U+0041
-* 用 UTF-8 编码时,就是一个字节:`0x41`
-
-而 `中` 的码点是 U+4E2D,用 UTF-8 编码时需要 3 个字节。
-
-## 为什么 UTF-8 流行
-
-* **兼容 ASCII**:英文字符仍然是 1 字节。
-* **节省空间**:对英文友好,对中文等多字节字符也能支持。
-* **互联网事实标准**:Web 世界几乎都用它。
-
-## 常见误解
-
-* **Unicode 不是编码**:Unicode 只是“码点表”。
-* **UTF-8 不是字符集**:UTF-8 只是编码方式。
-
-## 进一步阅读
-
-理解 Unicode / UTF-8 有助于避免乱码和文件编码问题。
diff --git a/docs/reference/glossary/value-reference.md b/docs/reference/glossary/value-reference.md
deleted file mode 100644
index 1e474ce..0000000
--- a/docs/reference/glossary/value-reference.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# 值语义与引用语义(Value vs. Reference)
-
-## 值语义
-
-“值语义”表示:变量存的是数据本身,拷贝会得到独立的值。
-
-```javascript
-let a = 1;
-let b = a;
-b = 2;
-a; // 1
-```
-
-## 引用语义
-
-“引用语义”表示:变量存的是对象地址,拷贝只复制地址。
-
-```javascript
-let obj1 = { x: 1 };
-let obj2 = obj1;
-obj2.x = 2;
-obj1.x; // 2
-```
-
-## 浅拷贝与深拷贝
-
-* **浅拷贝**:只复制第一层。
-* **深拷贝**:递归复制所有层。
-
-```javascript
-let u1 = { profile: { city: 'SH' } };
-let u2 = { ...u1 }; // 浅拷贝
-u2.profile.city = 'BJ';
-u1.profile.city; // 'BJ'
-```
-
-## 进一步阅读
-
-理解值语义/引用语义是理解“共享状态”和“意外修改”的基础。
diff --git a/docs/res/code.html b/docs/res/code.html
deleted file mode 100644
index 1ff663d..0000000
--- a/docs/res/code.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- Introduction to Programming
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/res/images/cons-cells.png b/docs/res/images/cons-cells.png
deleted file mode 100644
index b4995e1..0000000
Binary files a/docs/res/images/cons-cells.png and /dev/null differ
diff --git a/docs/public/favicon.ico b/favicon.ico
similarity index 100%
rename from docs/public/favicon.ico
rename to favicon.ico
diff --git a/hashmap.json b/hashmap.json
new file mode 100644
index 0000000..9b7f186
--- /dev/null
+++ b/hashmap.json
@@ -0,0 +1 @@
+{"summary.md":"6e51fa23","ch01_environment.md":"ad374fcf","ch06_data.md":"8876a824","ch10_object.md":"a4f3746e","intro.md":"ca4ae51e","glossary.md":"9584a1ea","ch05_sequence.md":"e9066e5e","ch11_concurrency.md":"2b82afad","ch09_closure.md":"a7117936","stream.md":"a4405d7c","index.md":"a7ecfcb0","ch07_state.md":"5efbe2c2","ch04_encoding.md":"6d49b0e8","ch02_computation.md":"d79955df","ch03_procedure.md":"2caba3b4","ch08_reference.md":"ea346374"}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c5c087f
--- /dev/null
+++ b/index.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+ 编程导引 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/intro.html b/intro.html
new file mode 100644
index 0000000..09f54dc
--- /dev/null
+++ b/intro.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+ 引言 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/package.json b/package.json
deleted file mode 100644
index 8e12216..0000000
--- a/package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "scripts": {
- "build": "vitepress build docs",
- "dev": "vitepress dev docs"
- },
- "devDependencies": {
- "markdown-it-mathjax3": "^4.3.2",
- "vitepress": "^2.0.0-alpha.16"
- }
-}
diff --git a/practices/index.md b/practices/index.md
deleted file mode 100644
index ee1fa00..0000000
--- a/practices/index.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# 软件工程实践
-
-- 免责声明
-- 概览
-- 开始你的第一个项目
- - 编程语言和平台的选择
- - 编程团队的构建
-- 需求与设计
- - 用户故事
- - 验收条件
- - 实例化需求
- - 领域专家
- - 项目制
-- 研发交付
- - 脚手架
- - 12 factors
- - 代码规范
- -
-- 质量保证与验收
-- 持续运维与改进
-- 节奏、工作空间、业余活动
-- 复杂项目实践
diff --git a/stream.html b/stream.html
new file mode 100644
index 0000000..efcf4b9
--- /dev/null
+++ b/stream.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+ 流 | 编程导引
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index a675121..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,1344 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@babel/helper-string-parser@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
- integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
-
-"@babel/helper-validator-identifier@^7.28.5":
- version "7.28.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4"
- integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==
-
-"@babel/parser@^7.28.5":
- version "7.29.0"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6"
- integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==
- dependencies:
- "@babel/types" "^7.29.0"
-
-"@babel/types@^7.29.0":
- version "7.29.0"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7"
- integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==
- dependencies:
- "@babel/helper-string-parser" "^7.27.1"
- "@babel/helper-validator-identifier" "^7.28.5"
-
-"@docsearch/css@^4.5.3":
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.5.4.tgz#99b69988bc061cd3772c25a2b155c9ee0813a0a2"
- integrity sha512-gzO4DJwyM9c4YEPHwaLV1nUCDC2N6yoh0QJj44dce2rcfN71mB+jpu3+F+Y/KMDF1EKV0C3m54leSWsraE94xg==
-
-"@docsearch/js@^4.5.3":
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-4.5.4.tgz#8d2d29ae0d1629b85894952a240c19a657cb1098"
- integrity sha512-jEBsIklNTevznLZouB0y6SZcaT897gRHnGTzCcH32ibPZRVj/9FyuAM2LUTk61sFdOY79LH4V9rYsIdOe6Wq2g==
-
-"@docsearch/sidepanel-js@^4.5.3":
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/@docsearch/sidepanel-js/-/sidepanel-js-4.5.4.tgz#a67e15b1e63bc31777ea210838d2efdcd3612998"
- integrity sha512-f4KE4cG+P09gJHQNfttfMNy+3gAGj8U0YEgiOOso0YCFI5nGoVvJQpxNMSPgXs4sG34A/oCfKhYwHJiqgHhxPw==
-
-"@esbuild/aix-ppc64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz#815b39267f9bffd3407ea6c376ac32946e24f8d2"
- integrity sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==
-
-"@esbuild/android-arm64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz#19b882408829ad8e12b10aff2840711b2da361e8"
- integrity sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==
-
-"@esbuild/android-arm@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.3.tgz#90be58de27915efa27b767fcbdb37a4470627d7b"
- integrity sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==
-
-"@esbuild/android-x64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.3.tgz#d7dcc976f16e01a9aaa2f9b938fbec7389f895ac"
- integrity sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==
-
-"@esbuild/darwin-arm64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz#9f6cac72b3a8532298a6a4493ed639a8988e8abd"
- integrity sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==
-
-"@esbuild/darwin-x64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz#ac61d645faa37fd650340f1866b0812e1fb14d6a"
- integrity sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==
-
-"@esbuild/freebsd-arm64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz#b8625689d73cf1830fe58c39051acdc12474ea1b"
- integrity sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==
-
-"@esbuild/freebsd-x64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz#07be7dd3c9d42fe0eccd2ab9f9ded780bc53bead"
- integrity sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==
-
-"@esbuild/linux-arm64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz#bf31918fe5c798586460d2b3d6c46ed2c01ca0b6"
- integrity sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==
-
-"@esbuild/linux-arm@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz#28493ee46abec1dc3f500223cd9f8d2df08f9d11"
- integrity sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==
-
-"@esbuild/linux-ia32@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz#750752a8b30b43647402561eea764d0a41d0ee29"
- integrity sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==
-
-"@esbuild/linux-loong64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz#a5a92813a04e71198c50f05adfaf18fc1e95b9ed"
- integrity sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==
-
-"@esbuild/linux-mips64el@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz#deb45d7fd2d2161eadf1fbc593637ed766d50bb1"
- integrity sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==
-
-"@esbuild/linux-ppc64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz#6f39ae0b8c4d3d2d61a65b26df79f6e12a1c3d78"
- integrity sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==
-
-"@esbuild/linux-riscv64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz#4c5c19c3916612ec8e3915187030b9df0b955c1d"
- integrity sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==
-
-"@esbuild/linux-s390x@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz#9ed17b3198fa08ad5ccaa9e74f6c0aff7ad0156d"
- integrity sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==
-
-"@esbuild/linux-x64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz#12383dcbf71b7cf6513e58b4b08d95a710bf52a5"
- integrity sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==
-
-"@esbuild/netbsd-arm64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz#dd0cb2fa543205fcd931df44f4786bfcce6df7d7"
- integrity sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==
-
-"@esbuild/netbsd-x64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz#028ad1807a8e03e155153b2d025b506c3787354b"
- integrity sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==
-
-"@esbuild/openbsd-arm64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz#e3c16ff3490c9b59b969fffca87f350ffc0e2af5"
- integrity sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==
-
-"@esbuild/openbsd-x64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz#c5a4693fcb03d1cbecbf8b422422468dfc0d2a8b"
- integrity sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==
-
-"@esbuild/openharmony-arm64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz#082082444f12db564a0775a41e1991c0e125055e"
- integrity sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==
-
-"@esbuild/sunos-x64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz#5ab036c53f929e8405c4e96e865a424160a1b537"
- integrity sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==
-
-"@esbuild/win32-arm64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz#38de700ef4b960a0045370c171794526e589862e"
- integrity sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==
-
-"@esbuild/win32-ia32@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz#451b93dc03ec5d4f38619e6cd64d9f9eff06f55c"
- integrity sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==
-
-"@esbuild/win32-x64@0.27.3":
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz#0eaf705c941a218a43dba8e09f1df1d6cd2f1f17"
- integrity sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==
-
-"@iconify-json/simple-icons@^1.2.68":
- version "1.2.69"
- resolved "https://registry.yarnpkg.com/@iconify-json/simple-icons/-/simple-icons-1.2.69.tgz#e03c786eedf199380a094d9ee83b9f6149bf7188"
- integrity sha512-T/rhy5n7pzE0ZOxQVlF68SNPCYYjRBpddjgjrJO5WWVRG8es5BQmvxIE9kKF+t2hhPGvuGQFpXmUyqbOtnxirQ==
- dependencies:
- "@iconify/types" "*"
-
-"@iconify/types@*":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57"
- integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==
-
-"@jridgewell/sourcemap-codec@^1.5.5":
- version "1.5.5"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
- integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
-
-"@rolldown/pluginutils@1.0.0-rc.2":
- version "1.0.0-rc.2"
- resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz#10324e74cb3396cb7b616042ea7e9e6aa7d8d458"
- integrity sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==
-
-"@rollup/rollup-android-arm-eabi@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz#add5e608d4e7be55bc3ca3d962490b8b1890e088"
- integrity sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==
-
-"@rollup/rollup-android-arm64@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz#10bd0382b73592beee6e9800a69401a29da625c4"
- integrity sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==
-
-"@rollup/rollup-darwin-arm64@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz#1e99ab04c0b8c619dd7bbde725ba2b87b55bfd81"
- integrity sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==
-
-"@rollup/rollup-darwin-x64@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz#69e741aeb2839d2e8f0da2ce7a33d8bd23632423"
- integrity sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==
-
-"@rollup/rollup-freebsd-arm64@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz#3736c232a999c7bef7131355d83ebdf9651a0839"
- integrity sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==
-
-"@rollup/rollup-freebsd-x64@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz#227dcb8f466684070169942bd3998901c9bfc065"
- integrity sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==
-
-"@rollup/rollup-linux-arm-gnueabihf@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz#ba004b30df31b724f99ce66e7128248bea17cb0c"
- integrity sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==
-
-"@rollup/rollup-linux-arm-musleabihf@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz#6929f3e07be6b6da5991f63c6b68b3e473d0a65a"
- integrity sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==
-
-"@rollup/rollup-linux-arm64-gnu@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz#06e89fd4a25d21fe5575d60b6f913c0e65297bfa"
- integrity sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==
-
-"@rollup/rollup-linux-arm64-musl@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz#fddabf395b90990d5194038e6cd8c00156ed8ac0"
- integrity sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==
-
-"@rollup/rollup-linux-loong64-gnu@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz#04c10bb764bbf09a3c1bd90432e92f58d6603c36"
- integrity sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==
-
-"@rollup/rollup-linux-loong64-musl@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz#f2450361790de80581d8687ea19142d8a4de5c0f"
- integrity sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==
-
-"@rollup/rollup-linux-ppc64-gnu@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz#0474f4667259e407eee1a6d38e29041b708f6a30"
- integrity sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==
-
-"@rollup/rollup-linux-ppc64-musl@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz#9f32074819eeb1ddbe51f50ea9dcd61a6745ec33"
- integrity sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==
-
-"@rollup/rollup-linux-riscv64-gnu@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz#3fdb9d4b1e29fb6b6a6da9f15654d42eb77b99b2"
- integrity sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==
-
-"@rollup/rollup-linux-riscv64-musl@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz#1de780d64e6be0e3e8762035c22e0d8ea68df8ed"
- integrity sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==
-
-"@rollup/rollup-linux-s390x-gnu@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz#1da022ffd2d9e9f0fd8344ea49e113001fbcac64"
- integrity sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==
-
-"@rollup/rollup-linux-x64-gnu@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz#78c16eef9520bd10e1ea7a112593bb58e2842622"
- integrity sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==
-
-"@rollup/rollup-linux-x64-musl@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz#a7598591b4d9af96cb3167b50a5bf1e02dfea06c"
- integrity sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==
-
-"@rollup/rollup-openbsd-x64@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz#c51d48c07cd6c466560e5bed934aec688ce02614"
- integrity sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==
-
-"@rollup/rollup-openharmony-arm64@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz#f09921d0b2a0b60afbf3586d2a7a7f208ba6df17"
- integrity sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==
-
-"@rollup/rollup-win32-arm64-msvc@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz#08d491717135376e4a99529821c94ecd433d5b36"
- integrity sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==
-
-"@rollup/rollup-win32-ia32-msvc@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz#b0c12aac1104a8b8f26a5e0098e5facbb3e3964a"
- integrity sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==
-
-"@rollup/rollup-win32-x64-gnu@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz#b9cccef26f5e6fdc013bf3c0911a3c77428509d0"
- integrity sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==
-
-"@rollup/rollup-win32-x64-msvc@4.57.1":
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz#a03348e7b559c792b6277cc58874b89ef46e1e72"
- integrity sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==
-
-"@shikijs/core@3.22.0", "@shikijs/core@^3.21.0":
- version "3.22.0"
- resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-3.22.0.tgz#9e9e8bd6d65b61fa74205a30491b921079996cdd"
- integrity sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==
- dependencies:
- "@shikijs/types" "3.22.0"
- "@shikijs/vscode-textmate" "^10.0.2"
- "@types/hast" "^3.0.4"
- hast-util-to-html "^9.0.5"
-
-"@shikijs/engine-javascript@3.22.0":
- version "3.22.0"
- resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-3.22.0.tgz#507f5cbb3e565268a35ee8aed42ff73016899e6d"
- integrity sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==
- dependencies:
- "@shikijs/types" "3.22.0"
- "@shikijs/vscode-textmate" "^10.0.2"
- oniguruma-to-es "^4.3.4"
-
-"@shikijs/engine-oniguruma@3.22.0":
- version "3.22.0"
- resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz#d16b66ed18470bc99f5026ec9f635695a10cb7f5"
- integrity sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==
- dependencies:
- "@shikijs/types" "3.22.0"
- "@shikijs/vscode-textmate" "^10.0.2"
-
-"@shikijs/langs@3.22.0":
- version "3.22.0"
- resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-3.22.0.tgz#949338647714b89314efbd333070b0c0263b232a"
- integrity sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==
- dependencies:
- "@shikijs/types" "3.22.0"
-
-"@shikijs/themes@3.22.0":
- version "3.22.0"
- resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-3.22.0.tgz#0a316f0b1bda2dea378dd0c9d7e0a703f36af2c3"
- integrity sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==
- dependencies:
- "@shikijs/types" "3.22.0"
-
-"@shikijs/transformers@^3.21.0":
- version "3.22.0"
- resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-3.22.0.tgz#f5693349a2106d270cb9ee6ce1b0aa52ae3746d8"
- integrity sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw==
- dependencies:
- "@shikijs/core" "3.22.0"
- "@shikijs/types" "3.22.0"
-
-"@shikijs/types@3.22.0", "@shikijs/types@^3.21.0":
- version "3.22.0"
- resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-3.22.0.tgz#43fe92d163742424e794894cb27ce6ce1b4ca8a8"
- integrity sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==
- dependencies:
- "@shikijs/vscode-textmate" "^10.0.2"
- "@types/hast" "^3.0.4"
-
-"@shikijs/vscode-textmate@^10.0.2":
- version "10.0.2"
- resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224"
- integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==
-
-"@types/estree@1.0.8":
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
- integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
-
-"@types/hast@^3.0.0", "@types/hast@^3.0.4":
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa"
- integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==
- dependencies:
- "@types/unist" "*"
-
-"@types/linkify-it@^5":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76"
- integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==
-
-"@types/markdown-it@^14.1.2":
- version "14.1.2"
- resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61"
- integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==
- dependencies:
- "@types/linkify-it" "^5"
- "@types/mdurl" "^2"
-
-"@types/mdast@^4.0.0":
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6"
- integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==
- dependencies:
- "@types/unist" "*"
-
-"@types/mdurl@^2":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd"
- integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==
-
-"@types/unist@*", "@types/unist@^3.0.0":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c"
- integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==
-
-"@types/web-bluetooth@^0.0.21":
- version "0.0.21"
- resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz#525433c784aed9b457aaa0ee3d92aeb71f346b63"
- integrity sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==
-
-"@ungap/structured-clone@^1.0.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
- integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
-
-"@vitejs/plugin-vue@^6.0.3":
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-6.0.4.tgz#f571fe5aeb0be511e3bfdd43844d8eaa0738b28e"
- integrity sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==
- dependencies:
- "@rolldown/pluginutils" "1.0.0-rc.2"
-
-"@vue/compiler-core@3.5.27":
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.27.tgz#ce4402428e26095586eb889c41f6e172eb3960bd"
- integrity sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==
- dependencies:
- "@babel/parser" "^7.28.5"
- "@vue/shared" "3.5.27"
- entities "^7.0.0"
- estree-walker "^2.0.2"
- source-map-js "^1.2.1"
-
-"@vue/compiler-dom@3.5.27":
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz#32b2bc87f0a652c253986796ace0ed6213093af8"
- integrity sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==
- dependencies:
- "@vue/compiler-core" "3.5.27"
- "@vue/shared" "3.5.27"
-
-"@vue/compiler-sfc@3.5.27":
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz#84651b8816bf8e7d6e62fddd14db86efd6d6f1b6"
- integrity sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==
- dependencies:
- "@babel/parser" "^7.28.5"
- "@vue/compiler-core" "3.5.27"
- "@vue/compiler-dom" "3.5.27"
- "@vue/compiler-ssr" "3.5.27"
- "@vue/shared" "3.5.27"
- estree-walker "^2.0.2"
- magic-string "^0.30.21"
- postcss "^8.5.6"
- source-map-js "^1.2.1"
-
-"@vue/compiler-ssr@3.5.27":
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz#b480cad09dacf8f3d9c82b9843402f1a803baee7"
- integrity sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==
- dependencies:
- "@vue/compiler-dom" "3.5.27"
- "@vue/shared" "3.5.27"
-
-"@vue/devtools-api@^8.0.5":
- version "8.0.6"
- resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-8.0.6.tgz#808c7148213057bac961f6274e935115f101a67b"
- integrity sha512-+lGBI+WTvJmnU2FZqHhEB8J1DXcvNlDeEalz77iYgOdY1jTj1ipSBaKj3sRhYcy+kqA8v/BSuvOz1XJucfQmUA==
- dependencies:
- "@vue/devtools-kit" "^8.0.6"
-
-"@vue/devtools-kit@^8.0.6":
- version "8.0.6"
- resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-8.0.6.tgz#057b0bf67935a771350b3c16415196625d325fba"
- integrity sha512-9zXZPTJW72OteDXeSa5RVML3zWDCRcO5t77aJqSs228mdopYj5AiTpihozbsfFJ0IodfNs7pSgOGO3qfCuxDtw==
- dependencies:
- "@vue/devtools-shared" "^8.0.6"
- birpc "^2.6.1"
- hookable "^5.5.3"
- mitt "^3.0.1"
- perfect-debounce "^2.0.0"
- speakingurl "^14.0.1"
- superjson "^2.2.2"
-
-"@vue/devtools-shared@^8.0.6":
- version "8.0.6"
- resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-8.0.6.tgz#68e23ca735f01348dfc268e89265a3ccd0340c60"
- integrity sha512-Pp1JylTqlgMJvxW6MGyfTF8vGvlBSCAvMFaDCYa82Mgw7TT5eE5kkHgDvmOGHWeJE4zIDfCpCxHapsK2LtIAJg==
- dependencies:
- rfdc "^1.4.1"
-
-"@vue/reactivity@3.5.27":
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.27.tgz#d870557de1389a27b8abcb7cbfa30978dc69a000"
- integrity sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==
- dependencies:
- "@vue/shared" "3.5.27"
-
-"@vue/runtime-core@3.5.27":
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.27.tgz#bb43744ed070166c7d581b849ac22b71a9ccf127"
- integrity sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==
- dependencies:
- "@vue/reactivity" "3.5.27"
- "@vue/shared" "3.5.27"
-
-"@vue/runtime-dom@3.5.27":
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz#392513252c7ca7e5277240fdc70b8093449127f5"
- integrity sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==
- dependencies:
- "@vue/reactivity" "3.5.27"
- "@vue/runtime-core" "3.5.27"
- "@vue/shared" "3.5.27"
- csstype "^3.2.3"
-
-"@vue/server-renderer@3.5.27":
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.27.tgz#8137d0d7ec3b59d5992bb04c553775d209dddba7"
- integrity sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==
- dependencies:
- "@vue/compiler-ssr" "3.5.27"
- "@vue/shared" "3.5.27"
-
-"@vue/shared@3.5.27", "@vue/shared@^3.5.27":
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.27.tgz#33a63143d8fb9ca1b3efbc7ecf9bd0ab05f7e06e"
- integrity sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==
-
-"@vueuse/core@14.2.0", "@vueuse/core@^14.1.0":
- version "14.2.0"
- resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-14.2.0.tgz#d358063c94abf058b07ae38585c8caea70605446"
- integrity sha512-tpjzVl7KCQNVd/qcaCE9XbejL38V6KJAEq/tVXj7mDPtl6JtzmUdnXelSS+ULRkkrDgzYVK7EerQJvd2jR794Q==
- dependencies:
- "@types/web-bluetooth" "^0.0.21"
- "@vueuse/metadata" "14.2.0"
- "@vueuse/shared" "14.2.0"
-
-"@vueuse/integrations@^14.1.0":
- version "14.2.0"
- resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-14.2.0.tgz#2e0098536316e2e0949e734306712addaaf5bf36"
- integrity sha512-Yuo5XbIi6XkfSXOYKd5SBZwyBEyO3Hd41eeG2555hDbE0Maz/P0BfPJDYhgDXjS9xI0jkWUUp1Zh5lXHOgkwLw==
- dependencies:
- "@vueuse/core" "14.2.0"
- "@vueuse/shared" "14.2.0"
-
-"@vueuse/metadata@14.2.0":
- version "14.2.0"
- resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-14.2.0.tgz#990be3368ee24acf4e8daf47db396f913dc9e939"
- integrity sha512-i3axTGjU8b13FtyR4Keeama+43iD+BwX9C2TmzBVKqjSHArF03hjkp2SBZ1m72Jk2UtrX0aYCugBq2R1fhkuAQ==
-
-"@vueuse/shared@14.2.0":
- version "14.2.0"
- resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-14.2.0.tgz#a03c496adf2aa1dc96cfa44ba64b51fe8a7e82c0"
- integrity sha512-Z0bmluZTlAXgUcJ4uAFaML16JcD8V0QG00Db3quR642I99JXIDRa2MI2LGxiLVhcBjVnL1jOzIvT5TT2lqJlkA==
-
-ansi-colors@^4.1.1:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
- integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
-
-birpc@^2.6.1:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/birpc/-/birpc-2.9.0.tgz#b59550897e4cd96a223e2a6c1475b572236ed145"
- integrity sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==
-
-boolbase@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
- integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
-
-ccount@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
- integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
-
-character-entities-html4@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
- integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==
-
-character-entities-legacy@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b"
- integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==
-
-cheerio-select@^1.5.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.6.0.tgz#489f36604112c722afa147dedd0d4609c09e1696"
- integrity sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==
- dependencies:
- css-select "^4.3.0"
- css-what "^6.0.1"
- domelementtype "^2.2.0"
- domhandler "^4.3.1"
- domutils "^2.8.0"
-
-cheerio@1.0.0-rc.10:
- version "1.0.0-rc.10"
- resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.10.tgz#2ba3dcdfcc26e7956fc1f440e61d51c643379f3e"
- integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==
- dependencies:
- cheerio-select "^1.5.0"
- dom-serializer "^1.3.2"
- domhandler "^4.2.0"
- htmlparser2 "^6.1.0"
- parse5 "^6.0.1"
- parse5-htmlparser2-tree-adapter "^6.0.1"
- tslib "^2.2.0"
-
-comma-separated-tokens@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
- integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
-
-commander@9.2.0:
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9"
- integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==
-
-commander@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
- integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
-
-copy-anything@^4:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-4.0.5.tgz#16cabafd1ea4bb327a540b750f2b4df522825aea"
- integrity sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==
- dependencies:
- is-what "^5.2.0"
-
-css-select@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
- integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
- dependencies:
- boolbase "^1.0.0"
- css-what "^6.0.1"
- domhandler "^4.3.1"
- domutils "^2.8.0"
- nth-check "^2.0.1"
-
-css-what@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
- integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
-
-csstype@^3.2.3:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a"
- integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==
-
-dequal@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
- integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
-
-devlop@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018"
- integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==
- dependencies:
- dequal "^2.0.0"
-
-dom-serializer@^1.0.1, dom-serializer@^1.3.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
- integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
- dependencies:
- domelementtype "^2.0.1"
- domhandler "^4.2.0"
- entities "^2.0.0"
-
-domelementtype@^2.0.1, domelementtype@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
- integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
-
-domhandler@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a"
- integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==
- dependencies:
- domelementtype "^2.0.1"
-
-domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
- integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
- dependencies:
- domelementtype "^2.2.0"
-
-domutils@^2.4.2, domutils@^2.5.2, domutils@^2.8.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
- integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
- dependencies:
- dom-serializer "^1.0.1"
- domelementtype "^2.2.0"
- domhandler "^4.2.0"
-
-entities@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
- integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
-
-entities@^7.0.0:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/entities/-/entities-7.0.1.tgz#26e8a88889db63417dcb9a1e79a3f1bc92b5976b"
- integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==
-
-esbuild@^0.27.0:
- version "0.27.3"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.3.tgz#5859ca8e70a3af956b26895ce4954d7e73bd27a8"
- integrity sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==
- optionalDependencies:
- "@esbuild/aix-ppc64" "0.27.3"
- "@esbuild/android-arm" "0.27.3"
- "@esbuild/android-arm64" "0.27.3"
- "@esbuild/android-x64" "0.27.3"
- "@esbuild/darwin-arm64" "0.27.3"
- "@esbuild/darwin-x64" "0.27.3"
- "@esbuild/freebsd-arm64" "0.27.3"
- "@esbuild/freebsd-x64" "0.27.3"
- "@esbuild/linux-arm" "0.27.3"
- "@esbuild/linux-arm64" "0.27.3"
- "@esbuild/linux-ia32" "0.27.3"
- "@esbuild/linux-loong64" "0.27.3"
- "@esbuild/linux-mips64el" "0.27.3"
- "@esbuild/linux-ppc64" "0.27.3"
- "@esbuild/linux-riscv64" "0.27.3"
- "@esbuild/linux-s390x" "0.27.3"
- "@esbuild/linux-x64" "0.27.3"
- "@esbuild/netbsd-arm64" "0.27.3"
- "@esbuild/netbsd-x64" "0.27.3"
- "@esbuild/openbsd-arm64" "0.27.3"
- "@esbuild/openbsd-x64" "0.27.3"
- "@esbuild/openharmony-arm64" "0.27.3"
- "@esbuild/sunos-x64" "0.27.3"
- "@esbuild/win32-arm64" "0.27.3"
- "@esbuild/win32-ia32" "0.27.3"
- "@esbuild/win32-x64" "0.27.3"
-
-escape-goat@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-3.0.0.tgz#e8b5fb658553fe8a3c4959c316c6ebb8c842b19c"
- integrity sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==
-
-esm@^3.2.25:
- version "3.2.25"
- resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
- integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
-
-estree-walker@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
- integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
-
-fdir@^6.5.0:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
- integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
-
-focus-trap@^7.8.0:
- version "7.8.0"
- resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.8.0.tgz#b1d9463fa42b93ad7a5223d750493a6c09b672a8"
- integrity sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==
- dependencies:
- tabbable "^6.4.0"
-
-fsevents@~2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-fsevents@~2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
- integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-
-hast-util-to-html@^9.0.5:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz#ccc673a55bb8e85775b08ac28380f72d47167005"
- integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==
- dependencies:
- "@types/hast" "^3.0.0"
- "@types/unist" "^3.0.0"
- ccount "^2.0.0"
- comma-separated-tokens "^2.0.0"
- hast-util-whitespace "^3.0.0"
- html-void-elements "^3.0.0"
- mdast-util-to-hast "^13.0.0"
- property-information "^7.0.0"
- space-separated-tokens "^2.0.0"
- stringify-entities "^4.0.0"
- zwitch "^2.0.4"
-
-hast-util-whitespace@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621"
- integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==
- dependencies:
- "@types/hast" "^3.0.0"
-
-hookable@^5.5.3:
- version "5.5.3"
- resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d"
- integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==
-
-html-void-elements@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7"
- integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==
-
-htmlparser2@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7"
- integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==
- dependencies:
- domelementtype "^2.0.1"
- domhandler "^3.3.0"
- domutils "^2.4.2"
- entities "^2.0.0"
-
-htmlparser2@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
- integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
- dependencies:
- domelementtype "^2.0.1"
- domhandler "^4.0.0"
- domutils "^2.5.2"
- entities "^2.0.0"
-
-is-what@^5.2.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/is-what/-/is-what-5.5.0.tgz#a3031815757cfe1f03fed990bf6355a2d3f628c4"
- integrity sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==
-
-juice@^8.0.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/juice/-/juice-8.1.0.tgz#4ea23362522fe06418229943237ee3751a4fca70"
- integrity sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==
- dependencies:
- cheerio "1.0.0-rc.10"
- commander "^6.1.0"
- mensch "^0.3.4"
- slick "^1.12.2"
- web-resource-inliner "^6.0.1"
-
-magic-string@^0.30.21:
- version "0.30.21"
- resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91"
- integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==
- dependencies:
- "@jridgewell/sourcemap-codec" "^1.5.5"
-
-mark.js@8.11.1:
- version "8.11.1"
- resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5"
- integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==
-
-markdown-it-mathjax3@^4.3.2:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/markdown-it-mathjax3/-/markdown-it-mathjax3-4.3.2.tgz#1e34aa86f8560b283fd283008334adc2d6b05a37"
- integrity sha512-TX3GW5NjmupgFtMJGRauioMbbkGsOXAAt1DZ/rzzYmTHqzkO1rNAdiMD4NiruurToPApn2kYy76x02QN26qr2w==
- dependencies:
- juice "^8.0.0"
- mathjax-full "^3.2.0"
-
-mathjax-full@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/mathjax-full/-/mathjax-full-3.2.2.tgz#43f02e55219db393030985d2b6537ceae82f1fa7"
- integrity sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==
- dependencies:
- esm "^3.2.25"
- mhchemparser "^4.1.0"
- mj-context-menu "^0.6.1"
- speech-rule-engine "^4.0.6"
-
-mdast-util-to-hast@^13.0.0:
- version "13.2.0"
- resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4"
- integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==
- dependencies:
- "@types/hast" "^3.0.0"
- "@types/mdast" "^4.0.0"
- "@ungap/structured-clone" "^1.0.0"
- devlop "^1.0.0"
- micromark-util-sanitize-uri "^2.0.0"
- trim-lines "^3.0.0"
- unist-util-position "^5.0.0"
- unist-util-visit "^5.0.0"
- vfile "^6.0.0"
-
-mensch@^0.3.4:
- version "0.3.4"
- resolved "https://registry.yarnpkg.com/mensch/-/mensch-0.3.4.tgz#770f91b46cb16ea5b204ee735768c3f0c491fecd"
- integrity sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==
-
-mhchemparser@^4.1.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/mhchemparser/-/mhchemparser-4.2.1.tgz#d73982e66bc06170a85b1985600ee9dabe157cb0"
- integrity sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==
-
-micromark-util-character@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1"
- integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==
- dependencies:
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-util-encode@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1"
- integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==
-
-micromark-util-sanitize-uri@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de"
- integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==
- dependencies:
- micromark-util-character "^2.0.0"
- micromark-util-encode "^2.0.0"
- micromark-util-symbol "^2.0.0"
-
-micromark-util-symbol@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044"
- integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==
-
-micromark-util-types@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e"
- integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==
-
-mime@^2.4.6:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
- integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
-
-minisearch@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-7.2.0.tgz#3dc30e41e9464b3836553b6d969b656614f8f359"
- integrity sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==
-
-mitt@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
- integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
-
-mj-context-menu@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/mj-context-menu/-/mj-context-menu-0.6.1.tgz#a043c5282bf7e1cf3821de07b13525ca6f85aa69"
- integrity sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==
-
-nanoid@^3.3.11:
- version "3.3.11"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
- integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
-
-node-fetch@^2.6.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
- integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
- dependencies:
- whatwg-url "^5.0.0"
-
-nth-check@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
- integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
- dependencies:
- boolbase "^1.0.0"
-
-oniguruma-parser@^0.12.1:
- version "0.12.1"
- resolved "https://registry.yarnpkg.com/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz#82ba2208d7a2b69ee344b7efe0ae930c627dcc4a"
- integrity sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==
-
-oniguruma-to-es@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz#0b909d960faeb84511c979b1f2af64e9bc37ce34"
- integrity sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==
- dependencies:
- oniguruma-parser "^0.12.1"
- regex "^6.0.1"
- regex-recursion "^6.0.2"
-
-parse5-htmlparser2-tree-adapter@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
- integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==
- dependencies:
- parse5 "^6.0.1"
-
-parse5@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
- integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
-
-perfect-debounce@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-2.1.0.tgz#e7078e38f231cb191855c3136a4423aef725d261"
- integrity sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==
-
-picocolors@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
- integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
-
-picomatch@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
- integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
-
-postcss@^8.5.6:
- version "8.5.6"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
- integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
- dependencies:
- nanoid "^3.3.11"
- picocolors "^1.1.1"
- source-map-js "^1.2.1"
-
-property-information@^7.0.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d"
- integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==
-
-regex-recursion@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/regex-recursion/-/regex-recursion-6.0.2.tgz#a0b1977a74c87f073377b938dbedfab2ea582b33"
- integrity sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==
- dependencies:
- regex-utilities "^2.3.0"
-
-regex-utilities@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/regex-utilities/-/regex-utilities-2.3.0.tgz#87163512a15dce2908cf079c8960d5158ff43280"
- integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==
-
-regex@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/regex/-/regex-6.1.0.tgz#d7ce98f8ee32da7497c13f6601fca2bc4a6a7803"
- integrity sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==
- dependencies:
- regex-utilities "^2.3.0"
-
-rfdc@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca"
- integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
-
-rollup@^4.43.0:
- version "4.57.1"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.57.1.tgz#947f70baca32db2b9c594267fe9150aa316e5a88"
- integrity sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==
- dependencies:
- "@types/estree" "1.0.8"
- optionalDependencies:
- "@rollup/rollup-android-arm-eabi" "4.57.1"
- "@rollup/rollup-android-arm64" "4.57.1"
- "@rollup/rollup-darwin-arm64" "4.57.1"
- "@rollup/rollup-darwin-x64" "4.57.1"
- "@rollup/rollup-freebsd-arm64" "4.57.1"
- "@rollup/rollup-freebsd-x64" "4.57.1"
- "@rollup/rollup-linux-arm-gnueabihf" "4.57.1"
- "@rollup/rollup-linux-arm-musleabihf" "4.57.1"
- "@rollup/rollup-linux-arm64-gnu" "4.57.1"
- "@rollup/rollup-linux-arm64-musl" "4.57.1"
- "@rollup/rollup-linux-loong64-gnu" "4.57.1"
- "@rollup/rollup-linux-loong64-musl" "4.57.1"
- "@rollup/rollup-linux-ppc64-gnu" "4.57.1"
- "@rollup/rollup-linux-ppc64-musl" "4.57.1"
- "@rollup/rollup-linux-riscv64-gnu" "4.57.1"
- "@rollup/rollup-linux-riscv64-musl" "4.57.1"
- "@rollup/rollup-linux-s390x-gnu" "4.57.1"
- "@rollup/rollup-linux-x64-gnu" "4.57.1"
- "@rollup/rollup-linux-x64-musl" "4.57.1"
- "@rollup/rollup-openbsd-x64" "4.57.1"
- "@rollup/rollup-openharmony-arm64" "4.57.1"
- "@rollup/rollup-win32-arm64-msvc" "4.57.1"
- "@rollup/rollup-win32-ia32-msvc" "4.57.1"
- "@rollup/rollup-win32-x64-gnu" "4.57.1"
- "@rollup/rollup-win32-x64-msvc" "4.57.1"
- fsevents "~2.3.2"
-
-shiki@^3.21.0:
- version "3.22.0"
- resolved "https://registry.yarnpkg.com/shiki/-/shiki-3.22.0.tgz#3d590efee11feb75769354b1f64240915c3af827"
- integrity sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==
- dependencies:
- "@shikijs/core" "3.22.0"
- "@shikijs/engine-javascript" "3.22.0"
- "@shikijs/engine-oniguruma" "3.22.0"
- "@shikijs/langs" "3.22.0"
- "@shikijs/themes" "3.22.0"
- "@shikijs/types" "3.22.0"
- "@shikijs/vscode-textmate" "^10.0.2"
- "@types/hast" "^3.0.4"
-
-slick@^1.12.2:
- version "1.12.2"
- resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7"
- integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==
-
-source-map-js@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
- integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
-
-space-separated-tokens@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f"
- integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==
-
-speakingurl@^14.0.1:
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53"
- integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==
-
-speech-rule-engine@^4.0.6:
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz#b655dacbad3dae04acc0f7665e26ef258397dd09"
- integrity sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==
- dependencies:
- commander "9.2.0"
- wicked-good-xpath "1.3.0"
- xmldom-sre "0.1.31"
-
-stringify-entities@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3"
- integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==
- dependencies:
- character-entities-html4 "^2.0.0"
- character-entities-legacy "^3.0.0"
-
-superjson@^2.2.2:
- version "2.2.6"
- resolved "https://registry.yarnpkg.com/superjson/-/superjson-2.2.6.tgz#a223a3a988172a5f9656e2063fe5f733af40d099"
- integrity sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==
- dependencies:
- copy-anything "^4"
-
-tabbable@^6.4.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.4.0.tgz#36eb7a06d80b3924a22095daf45740dea3bf5581"
- integrity sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==
-
-tinyglobby@^0.2.15:
- version "0.2.15"
- resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2"
- integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==
- dependencies:
- fdir "^6.5.0"
- picomatch "^4.0.3"
-
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
- integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-
-trim-lines@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
- integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==
-
-tslib@^2.2.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b"
- integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==
-
-unist-util-is@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424"
- integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==
- dependencies:
- "@types/unist" "^3.0.0"
-
-unist-util-position@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4"
- integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==
- dependencies:
- "@types/unist" "^3.0.0"
-
-unist-util-stringify-position@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2"
- integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==
- dependencies:
- "@types/unist" "^3.0.0"
-
-unist-util-visit-parents@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815"
- integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==
- dependencies:
- "@types/unist" "^3.0.0"
- unist-util-is "^6.0.0"
-
-unist-util-visit@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6"
- integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==
- dependencies:
- "@types/unist" "^3.0.0"
- unist-util-is "^6.0.0"
- unist-util-visit-parents "^6.0.0"
-
-valid-data-url@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-3.0.1.tgz#826c1744e71b5632e847dd15dbd45b9fb38aa34f"
- integrity sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==
-
-vfile-message@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181"
- integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==
- dependencies:
- "@types/unist" "^3.0.0"
- unist-util-stringify-position "^4.0.0"
-
-vfile@^6.0.0:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab"
- integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==
- dependencies:
- "@types/unist" "^3.0.0"
- vfile-message "^4.0.0"
-
-vite@^7.3.1:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/vite/-/vite-7.3.1.tgz#7f6cfe8fb9074138605e822a75d9d30b814d6507"
- integrity sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==
- dependencies:
- esbuild "^0.27.0"
- fdir "^6.5.0"
- picomatch "^4.0.3"
- postcss "^8.5.6"
- rollup "^4.43.0"
- tinyglobby "^0.2.15"
- optionalDependencies:
- fsevents "~2.3.3"
-
-vitepress@^2.0.0-alpha.16:
- version "2.0.0-alpha.16"
- resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-2.0.0-alpha.16.tgz#1e65446af54837185a9e2169706376409bed1127"
- integrity sha512-w1nwsefDVIsje7BZr2tsKxkZutDGjG0YoQ2yxO7+a9tvYVqfljYbwj5LMYkPy8Tb7YbPwa22HtIhk62jbrvuEQ==
- dependencies:
- "@docsearch/css" "^4.5.3"
- "@docsearch/js" "^4.5.3"
- "@docsearch/sidepanel-js" "^4.5.3"
- "@iconify-json/simple-icons" "^1.2.68"
- "@shikijs/core" "^3.21.0"
- "@shikijs/transformers" "^3.21.0"
- "@shikijs/types" "^3.21.0"
- "@types/markdown-it" "^14.1.2"
- "@vitejs/plugin-vue" "^6.0.3"
- "@vue/devtools-api" "^8.0.5"
- "@vue/shared" "^3.5.27"
- "@vueuse/core" "^14.1.0"
- "@vueuse/integrations" "^14.1.0"
- focus-trap "^7.8.0"
- mark.js "8.11.1"
- minisearch "^7.2.0"
- shiki "^3.21.0"
- vite "^7.3.1"
- vue "^3.5.27"
-
-vue@^3.5.27:
- version "3.5.27"
- resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.27.tgz#e55fd941b614459ab2228489bc19d1692e05876c"
- integrity sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==
- dependencies:
- "@vue/compiler-dom" "3.5.27"
- "@vue/compiler-sfc" "3.5.27"
- "@vue/runtime-dom" "3.5.27"
- "@vue/server-renderer" "3.5.27"
- "@vue/shared" "3.5.27"
-
-web-resource-inliner@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz#df0822f0a12028805fe80719ed52ab6526886e02"
- integrity sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==
- dependencies:
- ansi-colors "^4.1.1"
- escape-goat "^3.0.0"
- htmlparser2 "^5.0.0"
- mime "^2.4.6"
- node-fetch "^2.6.0"
- valid-data-url "^3.0.0"
-
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
- integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-
-whatwg-url@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
- integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
-wicked-good-xpath@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz#81b0e95e8650e49c94b22298fff8686b5553cf6c"
- integrity sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==
-
-xmldom-sre@0.1.31:
- version "0.1.31"
- resolved "https://registry.yarnpkg.com/xmldom-sre/-/xmldom-sre-0.1.31.tgz#10860d5bab2c603144597d04bf2c4980e98067f4"
- integrity sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==
-
-zwitch@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"
- integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==