diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index ca2b787..0000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/.github/workflows/deploy.backup b/.github/workflows/deploy.backup
deleted file mode 100644
index 0dd7db6..0000000
--- a/.github/workflows/deploy.backup
+++ /dev/null
@@ -1,39 +0,0 @@
-name: Deploy
-
-on:
- push:
- branches:
- - main
-
-jobs:
- build:
- name: Build
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout repo
- uses: actions/checkout@v3
- with:
- fetch-depth: 0
-
- - name: Set node
- uses: actions/setup-node@v3
- with:
- node-version: 18
-
- - name: Install pnpm
- uses: pnpm/action-setup@v2
- with:
- version: 7
-
- - name: Install dependencies
- run: pnpm install
-
- - name: Build project
- run: pnpm build
-
- - name: Deploy
- uses: peaceiris/actions-gh-pages@v3
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- publish_dir: ./docs/.vitepress/dist
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 1d1c2f6..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-
-node_modules
-dist
-.vscode
-cache
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/.npmrc b/.npmrc
deleted file mode 100644
index 3880f92..0000000
--- a/.npmrc
+++ /dev/null
@@ -1,2 +0,0 @@
-registry=https://registry.npmmirror.com
-strict-peer-dependencies=false
diff --git a/1.js b/1.js
deleted file mode 100644
index 21ff057..0000000
--- a/1.js
+++ /dev/null
@@ -1,12 +0,0 @@
-function sum(...args) {
- const arr = [...args];
- function add(...rest) {
- arr.push(...rest);
- return add;
- }
- add.toString = () => arr.reduce((pre, cur) => pre + cur, 0);
- return add;
-}
-
-console.log("sum:" + sum(2)(3));
-console.log("sum:" + sum(2, 3)(3)(4));
diff --git a/2.js b/2.js
deleted file mode 100644
index 417b82f..0000000
--- a/2.js
+++ /dev/null
@@ -1,69 +0,0 @@
-const urls = [
- {
- info: "link1",
- time: 2000,
- },
- {
- info: "link2",
- time: 3000,
- },
- {
- info: "link3",
- time: 3000,
- },
- {
- info: "link4",
- time: 5000,
- },
-];
-
-function loadImg(url) {
- return new Promise((resolve, reject) => {
- console.log("--", url.info + "start");
- setTimeout(() => {
- console.log("--", url.info + "end");
- resolve();
- }, url.time);
- });
-}
-
-class Scheduler {
- constructor(n) {
- this.max = n || 2;
- this.currentCount = 0;
- this.taskQueue = []; // 当前执行任务队列
- }
-
- add(task) {
- this.taskQueue.push(task);
- this.run();
- }
-
- run() {
- if (this.taskQueue.length === 0 || this.currentCount >= this.max) {
- return;
- }
-
- this.currentCount++;
- const fn = this.taskQueue.shift();
-
- fn()
- .then(() => {
- this._next();
- })
- .catch(() => {
- this._next();
- });
- }
-
- _next() {
- this.currentCount--;
- this.run();
- }
-}
-
-const scheduler = new Scheduler();
-
-urls.forEach((url) => {
- scheduler.add(() => loadImg(url));
-});
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..01b9e23
--- /dev/null
+++ b/404.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+ 404 | FERoad
+
+
+
+
+
+
+
+
+ Skip to content 404
PAGE NOT FOUND
But if you don't change your direction, and if you keep looking, you may end up where you are heading.
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100644
index a83116f..0000000
--- a/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-FE-Road
-前端精进之路 -- WEB前端进阶知识库
-
- 在线网站
-
-
-[](https://app.netlify.com/sites/feroad/deploys)
-
-
diff --git a/assets/app.2599546b.js b/assets/app.2599546b.js
new file mode 100644
index 0000000..1963a28
--- /dev/null
+++ b/assets/app.2599546b.js
@@ -0,0 +1,8 @@
+function Hs(e,t){const n=Object.create(null),s=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}function Rs(e){if(W(e)){const t={};for(let n=0;n{if(n){const s=n.split(Oi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ve(e){let t="";if(we(e))t=e;else if(W(e))for(let n=0;nwe(e)?e:e==null?"":W(e)||me(e)&&(e.toString===mr||!Z(e.toString))?JSON.stringify(e,_r,2):String(e),_r=(e,t)=>t&&t.__v_isRef?_r(e,t.value):Ft(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o])=>(n[`${s} =>`]=o,n),{})}:pr(t)?{[`Set(${t.size})`]:[...t.values()]}:me(t)&&!W(t)&&!gr(t)?String(t):t,ge={},Bt=[],Ke=()=>{},Di=()=>!1,Ui=/^on[^a-z]/,mn=e=>Ui.test(e),Ds=e=>e.startsWith("onUpdate:"),$e=Object.assign,Us=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},zi=Object.prototype.hasOwnProperty,re=(e,t)=>zi.call(e,t),W=Array.isArray,Ft=e=>jn(e)==="[object Map]",pr=e=>jn(e)==="[object Set]",Z=e=>typeof e=="function",we=e=>typeof e=="string",zs=e=>typeof e=="symbol",me=e=>e!==null&&typeof e=="object",vr=e=>me(e)&&Z(e.then)&&Z(e.catch),mr=Object.prototype.toString,jn=e=>mr.call(e),ji=e=>jn(e).slice(8,-1),gr=e=>jn(e)==="[object Object]",js=e=>we(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,tn=Hs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Kn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ki=/-(\w)/g,Je=Kn(e=>e.replace(Ki,(t,n)=>n?n.toUpperCase():"")),qi=/\B([A-Z])/g,Yt=Kn(e=>e.replace(qi,"-$1").toLowerCase()),qn=Kn(e=>e.charAt(0).toUpperCase()+e.slice(1)),as=Kn(e=>e?`on${qn(e)}`:""),cn=(e,t)=>!Object.is(e,t),us=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Wi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Gi=e=>{const t=we(e)?Number(e):NaN;return isNaN(t)?e:t};let xo;const Yi=()=>xo||(xo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Ne;class Qi{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ne,!t&&Ne&&(this.index=(Ne.scopes||(Ne.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ne;try{return Ne=this,t()}finally{Ne=n}}}on(){Ne=this}off(){Ne=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},yr=e=>(e.w&_t)>0,wr=e=>(e.n&_t)>0,Zi=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(d==="length"||d>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":W(e)?js(n)&&l.push(i.get("length")):(l.push(i.get(Lt)),Ft(e)&&l.push(i.get(xs)));break;case"delete":W(e)||(l.push(i.get(Lt)),Ft(e)&&l.push(i.get(xs)));break;case"set":Ft(e)&&l.push(i.get(Lt));break}if(l.length===1)l[0]&&$s(l[0]);else{const c=[];for(const u of l)u&&c.push(...u);$s(Ks(c))}}function $s(e,t){const n=W(e)?e:[...e];for(const s of n)s.computed&&ko(s);for(const s of n)s.computed||ko(s)}function ko(e,t){(e!==ze||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const tl=Hs("__proto__,__v_isRef,__isVue"),kr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(zs)),nl=Ws(),sl=Ws(!1,!0),ol=Ws(!0),Po=rl();function rl(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=le(this);for(let r=0,i=this.length;r{e[t]=function(...n){Qt();const s=le(this)[t].apply(this,n);return Xt(),s}}),e}function il(e){const t=le(this);return Ae(t,"has",e),t.hasOwnProperty(e)}function Ws(e=!1,t=!1){return function(s,o,r){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&r===(e?t?xl:Lr:t?Tr:Sr).get(s))return s;const i=W(s);if(!e){if(i&&re(Po,o))return Reflect.get(Po,o,r);if(o==="hasOwnProperty")return il}const l=Reflect.get(s,o,r);return(zs(o)?kr.has(o):tl(o))||(e||Ae(s,"get",o),t)?l:Ce(l)?i&&js(o)?l:l.value:me(l)?e?Qs(l):Gn(l):l}}const ll=Pr(),cl=Pr(!0);function Pr(e=!1){return function(n,s,o,r){let i=n[s];if(qt(i)&&Ce(i)&&!Ce(o))return!1;if(!e&&(!In(o)&&!qt(o)&&(i=le(i),o=le(o)),!W(n)&&Ce(i)&&!Ce(o)))return i.value=o,!0;const l=W(n)&&js(s)?Number(s)e,Wn=e=>Reflect.getPrototypeOf(e);function xn(e,t,n=!1,s=!1){e=e.__v_raw;const o=le(e),r=le(t);n||(t!==r&&Ae(o,"get",t),Ae(o,"get",r));const{has:i}=Wn(o),l=s?Gs:n?Js:an;if(i.call(o,t))return l(e.get(t));if(i.call(o,r))return l(e.get(r));e!==o&&e.get(t)}function $n(e,t=!1){const n=this.__v_raw,s=le(n),o=le(e);return t||(e!==o&&Ae(s,"has",e),Ae(s,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function kn(e,t=!1){return e=e.__v_raw,!t&&Ae(le(e),"iterate",Lt),Reflect.get(e,"size",e)}function Co(e){e=le(e);const t=le(this);return Wn(t).has.call(t,e)||(t.add(e),st(t,"add",e,e)),this}function So(e,t){t=le(t);const n=le(this),{has:s,get:o}=Wn(n);let r=s.call(n,e);r||(e=le(e),r=s.call(n,e));const i=o.call(n,e);return n.set(e,t),r?cn(t,i)&&st(n,"set",e,t):st(n,"add",e,t),this}function To(e){const t=le(this),{has:n,get:s}=Wn(t);let o=n.call(t,e);o||(e=le(e),o=n.call(t,e)),s&&s.call(t,e);const r=t.delete(e);return o&&st(t,"delete",e,void 0),r}function Lo(){const e=le(this),t=e.size!==0,n=e.clear();return t&&st(e,"clear",void 0,void 0),n}function Pn(e,t){return function(s,o){const r=this,i=r.__v_raw,l=le(i),c=t?Gs:e?Js:an;return!e&&Ae(l,"iterate",Lt),i.forEach((u,d)=>s.call(o,c(u),c(d),r))}}function Cn(e,t,n){return function(...s){const o=this.__v_raw,r=le(o),i=Ft(r),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,u=o[e](...s),d=n?Gs:t?Js:an;return!t&&Ae(r,"iterate",c?xs:Lt),{next(){const{value:p,done:v}=u.next();return v?{value:p,done:v}:{value:l?[d(p[0]),d(p[1])]:d(p),done:v}},[Symbol.iterator](){return this}}}}function it(e){return function(...t){return e==="delete"?!1:this}}function _l(){const e={get(r){return xn(this,r)},get size(){return kn(this)},has:$n,add:Co,set:So,delete:To,clear:Lo,forEach:Pn(!1,!1)},t={get(r){return xn(this,r,!1,!0)},get size(){return kn(this)},has:$n,add:Co,set:So,delete:To,clear:Lo,forEach:Pn(!1,!0)},n={get(r){return xn(this,r,!0)},get size(){return kn(this,!0)},has(r){return $n.call(this,r,!0)},add:it("add"),set:it("set"),delete:it("delete"),clear:it("clear"),forEach:Pn(!0,!1)},s={get(r){return xn(this,r,!0,!0)},get size(){return kn(this,!0)},has(r){return $n.call(this,r,!0)},add:it("add"),set:it("set"),delete:it("delete"),clear:it("clear"),forEach:Pn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(r=>{e[r]=Cn(r,!1,!1),n[r]=Cn(r,!0,!1),t[r]=Cn(r,!1,!0),s[r]=Cn(r,!0,!0)}),[e,n,t,s]}const[pl,vl,ml,gl]=_l();function Ys(e,t){const n=t?e?gl:ml:e?vl:pl;return(s,o,r)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(re(n,o)&&o in s?n:s,o,r)}const bl={get:Ys(!1,!1)},yl={get:Ys(!1,!0)},wl={get:Ys(!0,!1)},Sr=new WeakMap,Tr=new WeakMap,Lr=new WeakMap,xl=new WeakMap;function $l(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function kl(e){return e.__v_skip||!Object.isExtensible(e)?0:$l(ji(e))}function Gn(e){return qt(e)?e:Xs(e,!1,Cr,bl,Sr)}function Pl(e){return Xs(e,!1,hl,yl,Tr)}function Qs(e){return Xs(e,!0,dl,wl,Lr)}function Xs(e,t,n,s,o){if(!me(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=o.get(e);if(r)return r;const i=kl(e);if(i===0)return e;const l=new Proxy(e,i===2?s:n);return o.set(e,l),l}function Ht(e){return qt(e)?Ht(e.__v_raw):!!(e&&e.__v_isReactive)}function qt(e){return!!(e&&e.__v_isReadonly)}function In(e){return!!(e&&e.__v_isShallow)}function Vr(e){return Ht(e)||qt(e)}function le(e){const t=e&&e.__v_raw;return t?le(t):e}function nn(e){return Mn(e,"__v_skip",!0),e}const an=e=>me(e)?Gn(e):e,Js=e=>me(e)?Qs(e):e;function Er(e){dt&&ze&&(e=le(e),$r(e.dep||(e.dep=Ks())))}function Ar(e,t){e=le(e);const n=e.dep;n&&$s(n)}function Ce(e){return!!(e&&e.__v_isRef===!0)}function ae(e){return Mr(e,!1)}function Cl(e){return Mr(e,!0)}function Mr(e,t){return Ce(e)?e:new Sl(e,t)}class Sl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:le(t),this._value=n?t:an(t)}get value(){return Er(this),this._value}set value(t){const n=this.__v_isShallow||In(t)||qt(t);t=n?t:le(t),cn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:an(t),Ar(this))}}function _(e){return Ce(e)?e.value:e}const Tl={get:(e,t,n)=>_(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Ce(o)&&!Ce(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function Ir(e){return Ht(e)?e:new Proxy(e,Tl)}var Nr;class Ll{constructor(t,n,s,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[Nr]=!1,this._dirty=!0,this.effect=new qs(t,()=>{this._dirty||(this._dirty=!0,Ar(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=s}get value(){const t=le(this);return Er(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Nr="__v_isReadonly";function Vl(e,t,n=!1){let s,o;const r=Z(e);return r?(s=e,o=Ke):(s=e.get,o=e.set),new Ll(s,o,r||!o,n)}function ht(e,t,n,s){let o;try{o=s?e(...s):e()}catch(r){Yn(r,t,n)}return o}function Re(e,t,n,s){if(Z(e)){const r=ht(e,t,n,s);return r&&vr(r)&&r.catch(i=>{Yn(i,t,n)}),r}const o=[];for(let r=0;r>>1;fn(Pe[s])Qe&&Pe.splice(t,1)}function Il(e){W(e)?Rt.push(...e):(!nt||!nt.includes(e,e.allowRecurse?Pt+1:Pt))&&Rt.push(e),Br()}function Vo(e,t=un?Qe+1:0){for(;tfn(n)-fn(s)),Pt=0;Pte.id==null?1/0:e.id,Nl=(e,t)=>{const n=fn(e)-fn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Fr(e){ks=!1,un=!0,Pe.sort(Nl);const t=Ke;try{for(Qe=0;Qewe(k)?k.trim():k)),p&&(o=n.map(Wi))}let l,c=s[l=as(t)]||s[l=as(Je(t))];!c&&r&&(c=s[l=as(Yt(t))]),c&&Re(c,e,6,o);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Re(u,e,6,o)}}function Hr(e,t,n=!1){const s=t.emitsCache,o=s.get(e);if(o!==void 0)return o;const r=e.emits;let i={},l=!1;if(!Z(e)){const c=u=>{const d=Hr(u,t,!0);d&&(l=!0,$e(i,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!r&&!l?(me(e)&&s.set(e,null),null):(W(r)?r.forEach(c=>i[c]=null):$e(i,r),me(e)&&s.set(e,i),i)}function Qn(e,t){return!e||!mn(t)?!1:(t=t.slice(2).replace(/Once$/,""),re(e,t[0].toLowerCase()+t.slice(1))||re(e,Yt(t))||re(e,t))}let Se=null,Xn=null;function On(e){const t=Se;return Se=e,Xn=e&&e.type.__scopeId||null,t}function Ze(e){Xn=e}function et(){Xn=null}function A(e,t=Se,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&Ro(-1);const r=On(t);let i;try{i=e(...o)}finally{On(r),s._d&&Ro(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function fs(e){const{type:t,vnode:n,proxy:s,withProxy:o,props:r,propsOptions:[i],slots:l,attrs:c,emit:u,render:d,renderCache:p,data:v,setupState:k,ctx:H,inheritAttrs:N}=e;let X,b;const L=On(e);try{if(n.shapeFlag&4){const Y=o||s;X=Ue(d.call(Y,Y,p,r,k,v,H)),b=c}else{const Y=t;X=Ue(Y.length>1?Y(r,{attrs:c,slots:l,emit:u}):Y(r,null)),b=t.props?c:Bl(c)}}catch(Y){on.length=0,Yn(Y,e,1),X=V(Oe)}let I=X;if(b&&N!==!1){const Y=Object.keys(b),{shapeFlag:te}=I;Y.length&&te&7&&(i&&Y.some(Ds)&&(b=Fl(b,i)),I=pt(I,b))}return n.dirs&&(I=pt(I),I.dirs=I.dirs?I.dirs.concat(n.dirs):n.dirs),n.transition&&(I.transition=n.transition),X=I,On(L),X}const Bl=e=>{let t;for(const n in e)(n==="class"||n==="style"||mn(n))&&((t||(t={}))[n]=e[n]);return t},Fl=(e,t)=>{const n={};for(const s in e)(!Ds(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Hl(e,t,n){const{props:s,children:o,component:r}=e,{props:i,children:l,patchFlag:c}=t,u=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Eo(s,i,u):!!i;if(c&8){const d=t.dynamicProps;for(let p=0;pe.__isSuspense;function Rr(e,t){t&&t.pendingBranch?W(e)?t.effects.push(...e):t.effects.push(e):Il(e)}function Dt(e,t){if(ye){let n=ye.provides;const s=ye.parent&&ye.parent.provides;s===n&&(n=ye.provides=Object.create(s)),n[e]=t}}function qe(e,t,n=!1){const s=ye||Se;if(s){const o=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&Z(t)?t.call(s.proxy):t}}function Et(e,t){return Jn(e,null,t)}function Dr(e,t){return Jn(e,null,{flush:"post"})}const Sn={};function Xe(e,t,n){return Jn(e,t,n)}function Jn(e,t,{immediate:n,deep:s,flush:o,onTrack:r,onTrigger:i}=ge){const l=br()===(ye==null?void 0:ye.scope)?ye:null;let c,u=!1,d=!1;if(Ce(e)?(c=()=>e.value,u=In(e)):Ht(e)?(c=()=>e,s=!0):W(e)?(d=!0,u=e.some(I=>Ht(I)||In(I)),c=()=>e.map(I=>{if(Ce(I))return I.value;if(Ht(I))return Ot(I);if(Z(I))return ht(I,l,2)})):Z(e)?t?c=()=>ht(e,l,2):c=()=>{if(!(l&&l.isUnmounted))return p&&p(),Re(e,l,3,[v])}:c=Ke,t&&s){const I=c;c=()=>Ot(I())}let p,v=I=>{p=b.onStop=()=>{ht(I,l,4)}},k;if(_n)if(v=Ke,t?n&&Re(t,l,3,[c(),d?[]:void 0,v]):c(),o==="sync"){const I=Mc();k=I.__watcherHandles||(I.__watcherHandles=[])}else return Ke;let H=d?new Array(e.length).fill(Sn):Sn;const N=()=>{if(b.active)if(t){const I=b.run();(s||u||(d?I.some((Y,te)=>cn(Y,H[te])):cn(I,H)))&&(p&&p(),Re(t,l,3,[I,H===Sn?void 0:d&&H[0]===Sn?[]:H,v]),H=I)}else b.run()};N.allowRecurse=!!t;let X;o==="sync"?X=N:o==="post"?X=()=>Ee(N,l&&l.suspense):(N.pre=!0,l&&(N.id=l.uid),X=()=>to(N));const b=new qs(c,X);t?n?N():H=b.run():o==="post"?Ee(b.run.bind(b),l&&l.suspense):b.run();const L=()=>{b.stop(),l&&l.scope&&Us(l.scope.effects,b)};return k&&k.push(L),L}function Ul(e,t,n){const s=this.proxy,o=we(e)?e.includes(".")?Ur(s,e):()=>s[e]:e.bind(s,s);let r;Z(t)?r=t:(r=t.handler,n=t);const i=ye;Gt(this);const l=Jn(o,r.bind(s),n);return i?Gt(i):Vt(),l}function Ur(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o{Ot(n,t)});else if(gr(e))for(const n in e)Ot(e[n],t);return e}function zl(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Be(()=>{e.isMounted=!0}),Wr(()=>{e.isUnmounting=!0}),e}const Fe=[Function,Array],jl={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Fe,onEnter:Fe,onAfterEnter:Fe,onEnterCancelled:Fe,onBeforeLeave:Fe,onLeave:Fe,onAfterLeave:Fe,onLeaveCancelled:Fe,onBeforeAppear:Fe,onAppear:Fe,onAfterAppear:Fe,onAppearCancelled:Fe},setup(e,{slots:t}){const n=ns(),s=zl();let o;return()=>{const r=t.default&&Kr(t.default(),!0);if(!r||!r.length)return;let i=r[0];if(r.length>1){for(const N of r)if(N.type!==Oe){i=N;break}}const l=le(e),{mode:c}=l;if(s.isLeaving)return ds(i);const u=Ao(i);if(!u)return ds(i);const d=Ps(u,l,s,n);Cs(u,d);const p=n.subTree,v=p&&Ao(p);let k=!1;const{getTransitionKey:H}=u.type;if(H){const N=H();o===void 0?o=N:N!==o&&(o=N,k=!0)}if(v&&v.type!==Oe&&(!Ct(u,v)||k)){const N=Ps(v,l,s,n);if(Cs(v,N),c==="out-in")return s.isLeaving=!0,N.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},ds(i);c==="in-out"&&u.type!==Oe&&(N.delayLeave=(X,b,L)=>{const I=jr(s,v);I[String(v.key)]=v,X._leaveCb=()=>{b(),X._leaveCb=void 0,delete d.delayedLeave},d.delayedLeave=L})}return i}}},zr=jl;function jr(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Ps(e,t,n,s){const{appear:o,mode:r,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:p,onLeave:v,onAfterLeave:k,onLeaveCancelled:H,onBeforeAppear:N,onAppear:X,onAfterAppear:b,onAppearCancelled:L}=t,I=String(e.key),Y=jr(n,e),te=(M,ee)=>{M&&Re(M,s,9,ee)},he=(M,ee)=>{const Q=ee[1];te(M,ee),W(M)?M.every(ie=>ie.length<=1)&&Q():M.length<=1&&Q()},oe={mode:r,persisted:i,beforeEnter(M){let ee=l;if(!n.isMounted)if(o)ee=N||l;else return;M._leaveCb&&M._leaveCb(!0);const Q=Y[I];Q&&Ct(e,Q)&&Q.el._leaveCb&&Q.el._leaveCb(),te(ee,[M])},enter(M){let ee=c,Q=u,ie=d;if(!n.isMounted)if(o)ee=X||c,Q=b||u,ie=L||d;else return;let O=!1;const ne=M._enterCb=D=>{O||(O=!0,D?te(ie,[M]):te(Q,[M]),oe.delayedLeave&&oe.delayedLeave(),M._enterCb=void 0)};ee?he(ee,[M,ne]):ne()},leave(M,ee){const Q=String(e.key);if(M._enterCb&&M._enterCb(!0),n.isUnmounting)return ee();te(p,[M]);let ie=!1;const O=M._leaveCb=ne=>{ie||(ie=!0,ee(),ne?te(H,[M]):te(k,[M]),M._leaveCb=void 0,Y[Q]===e&&delete Y[Q])};Y[Q]=e,v?he(v,[M,O]):O()},clone(M){return Ps(M,t,n,s)}};return oe}function ds(e){if(Zn(e))return e=pt(e),e.children=null,e}function Ao(e){return Zn(e)?e.children?e.children[0]:void 0:e}function Cs(e,t){e.shapeFlag&6&&e.component?Cs(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Kr(e,t=!1,n){let s=[],o=0;for(let r=0;r1)for(let r=0;r!!e.type.__asyncLoader,Zn=e=>e.type.__isKeepAlive;function Kl(e,t){qr(e,"a",t)}function ql(e,t){qr(e,"da",t)}function qr(e,t,n=ye){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(es(t,s,n),n){let o=n.parent;for(;o&&o.parent;)Zn(o.parent.vnode)&&Wl(s,t,n,o),o=o.parent}}function Wl(e,t,n,s){const o=es(t,e,s,!0);vt(()=>{Us(s[t],o)},n)}function es(e,t,n=ye,s=!1){if(n){const o=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;Qt(),Gt(n);const l=Re(t,n,e,i);return Vt(),Xt(),l});return s?o.unshift(r):o.push(r),r}}const ot=e=>(t,n=ye)=>(!_n||e==="sp")&&es(e,(...s)=>t(...s),n),Gl=ot("bm"),Be=ot("m"),Yl=ot("bu"),no=ot("u"),Wr=ot("bum"),vt=ot("um"),Ql=ot("sp"),Xl=ot("rtg"),Jl=ot("rtc");function Zl(e,t=ye){es("ec",e,t)}function Ye(e,t,n,s){const o=e.dirs,r=t&&t.dirs;for(let i=0;it(i,l,void 0,r&&r[l]));else{const i=Object.keys(e);o=new Array(i.length);for(let l=0,c=i.length;lHn(t)?!(t.type===Oe||t.type===J&&!Qr(t.children)):!0)?e:null}const Ss=e=>e?li(e)?lo(e)||e.proxy:Ss(e.parent):null,sn=$e(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ss(e.parent),$root:e=>Ss(e.root),$emit:e=>e.emit,$options:e=>oo(e),$forceUpdate:e=>e.f||(e.f=()=>to(e.update)),$nextTick:e=>e.n||(e.n=eo.bind(e.proxy)),$watch:e=>Ul.bind(e)}),hs=(e,t)=>e!==ge&&!e.__isScriptSetup&&re(e,t),ec={get({_:e},t){const{ctx:n,setupState:s,data:o,props:r,accessCache:i,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const k=i[t];if(k!==void 0)switch(k){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return r[t]}else{if(hs(s,t))return i[t]=1,s[t];if(o!==ge&&re(o,t))return i[t]=2,o[t];if((u=e.propsOptions[0])&&re(u,t))return i[t]=3,r[t];if(n!==ge&&re(n,t))return i[t]=4,n[t];Ts&&(i[t]=0)}}const d=sn[t];let p,v;if(d)return t==="$attrs"&&Ae(e,"get",t),d(e);if((p=l.__cssModules)&&(p=p[t]))return p;if(n!==ge&&re(n,t))return i[t]=4,n[t];if(v=c.config.globalProperties,re(v,t))return v[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:r}=e;return hs(o,t)?(o[t]=n,!0):s!==ge&&re(s,t)?(s[t]=n,!0):re(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,propsOptions:r}},i){let l;return!!n[i]||e!==ge&&re(e,i)||hs(t,i)||(l=r[0])&&re(l,i)||re(s,i)||re(sn,i)||re(o.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:re(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let Ts=!0;function tc(e){const t=oo(e),n=e.proxy,s=e.ctx;Ts=!1,t.beforeCreate&&Io(t.beforeCreate,e,"bc");const{data:o,computed:r,methods:i,watch:l,provide:c,inject:u,created:d,beforeMount:p,mounted:v,beforeUpdate:k,updated:H,activated:N,deactivated:X,beforeDestroy:b,beforeUnmount:L,destroyed:I,unmounted:Y,render:te,renderTracked:he,renderTriggered:oe,errorCaptured:M,serverPrefetch:ee,expose:Q,inheritAttrs:ie,components:O,directives:ne,filters:D}=t;if(u&&nc(u,s,null,e.appContext.config.unwrapInjectedRef),i)for(const be in i){const _e=i[be];Z(_e)&&(s[be]=_e.bind(n))}if(o){const be=o.call(n,n);me(be)&&(e.data=Gn(be))}if(Ts=!0,r)for(const be in r){const _e=r[be],bt=Z(_e)?_e.bind(n,n):Z(_e.get)?_e.get.bind(n,n):Ke,yn=!Z(_e)&&Z(_e.set)?_e.set.bind(n):Ke,yt=K({get:bt,set:yn});Object.defineProperty(s,be,{enumerable:!0,configurable:!0,get:()=>yt.value,set:We=>yt.value=We})}if(l)for(const be in l)Xr(l[be],s,n,be);if(c){const be=Z(c)?c.call(n):c;Reflect.ownKeys(be).forEach(_e=>{Dt(_e,be[_e])})}d&&Io(d,e,"c");function fe(be,_e){W(_e)?_e.forEach(bt=>be(bt.bind(n))):_e&&be(_e.bind(n))}if(fe(Gl,p),fe(Be,v),fe(Yl,k),fe(no,H),fe(Kl,N),fe(ql,X),fe(Zl,M),fe(Jl,he),fe(Xl,oe),fe(Wr,L),fe(vt,Y),fe(Ql,ee),W(Q))if(Q.length){const be=e.exposed||(e.exposed={});Q.forEach(_e=>{Object.defineProperty(be,_e,{get:()=>n[_e],set:bt=>n[_e]=bt})})}else e.exposed||(e.exposed={});te&&e.render===Ke&&(e.render=te),ie!=null&&(e.inheritAttrs=ie),O&&(e.components=O),ne&&(e.directives=ne)}function nc(e,t,n=Ke,s=!1){W(e)&&(e=Ls(e));for(const o in e){const r=e[o];let i;me(r)?"default"in r?i=qe(r.from||o,r.default,!0):i=qe(r.from||o):i=qe(r),Ce(i)&&s?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):t[o]=i}}function Io(e,t,n){Re(W(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Xr(e,t,n,s){const o=s.includes(".")?Ur(n,s):()=>n[s];if(we(e)){const r=t[e];Z(r)&&Xe(o,r)}else if(Z(e))Xe(o,e.bind(n));else if(me(e))if(W(e))e.forEach(r=>Xr(r,t,n,s));else{const r=Z(e.handler)?e.handler.bind(n):t[e.handler];Z(r)&&Xe(o,r,e)}}function oo(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,l=r.get(t);let c;return l?c=l:!o.length&&!n&&!s?c=t:(c={},o.length&&o.forEach(u=>Bn(c,u,i,!0)),Bn(c,t,i)),me(t)&&r.set(t,c),c}function Bn(e,t,n,s=!1){const{mixins:o,extends:r}=t;r&&Bn(e,r,n,!0),o&&o.forEach(i=>Bn(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=sc[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const sc={data:No,props:kt,emits:kt,methods:kt,computed:kt,beforeCreate:Le,created:Le,beforeMount:Le,mounted:Le,beforeUpdate:Le,updated:Le,beforeDestroy:Le,beforeUnmount:Le,destroyed:Le,unmounted:Le,activated:Le,deactivated:Le,errorCaptured:Le,serverPrefetch:Le,components:kt,directives:kt,watch:rc,provide:No,inject:oc};function No(e,t){return t?e?function(){return $e(Z(e)?e.call(this,this):e,Z(t)?t.call(this,this):t)}:t:e}function oc(e,t){return kt(Ls(e),Ls(t))}function Ls(e){if(W(e)){const t={};for(let n=0;n0)&&!(i&16)){if(i&8){const d=e.vnode.dynamicProps;for(let p=0;p{c=!0;const[v,k]=Zr(p,t,!0);$e(i,v),k&&l.push(...k)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!r&&!c)return me(e)&&s.set(e,Bt),Bt;if(W(r))for(let d=0;d-1,k[1]=N<0||H-1||re(k,"default"))&&l.push(p)}}}const u=[i,l];return me(e)&&s.set(e,u),u}function Oo(e){return e[0]!=="$"}function Bo(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Fo(e,t){return Bo(e)===Bo(t)}function Ho(e,t){return W(t)?t.findIndex(n=>Fo(n,e)):Z(t)&&Fo(t,e)?0:-1}const ei=e=>e[0]==="_"||e==="$stable",ro=e=>W(e)?e.map(Ue):[Ue(e)],cc=(e,t,n)=>{if(t._n)return t;const s=A((...o)=>ro(t(...o)),n);return s._c=!1,s},ti=(e,t,n)=>{const s=e._ctx;for(const o in e){if(ei(o))continue;const r=e[o];if(Z(r))t[o]=cc(o,r,s);else if(r!=null){const i=ro(r);t[o]=()=>i}}},ni=(e,t)=>{const n=ro(t);e.slots.default=()=>n},ac=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=le(t),Mn(t,"_",n)):ti(t,e.slots={})}else e.slots={},t&&ni(e,t);Mn(e.slots,ts,1)},uc=(e,t,n)=>{const{vnode:s,slots:o}=e;let r=!0,i=ge;if(s.shapeFlag&32){const l=t._;l?n&&l===1?r=!1:($e(o,t),!n&&l===1&&delete o._):(r=!t.$stable,ti(t,o)),i=t}else t&&(ni(e,t),i={default:1});if(r)for(const l in o)!ei(l)&&!(l in i)&&delete o[l]};function si(){return{app:null,config:{isNativeTag:Di,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 fc=0;function dc(e,t){return function(s,o=null){Z(s)||(s=Object.assign({},s)),o!=null&&!me(o)&&(o=null);const r=si(),i=new Set;let l=!1;const c=r.app={_uid:fc++,_component:s,_props:o,_container:null,_context:r,_instance:null,version:Ic,get config(){return r.config},set config(u){},use(u,...d){return i.has(u)||(u&&Z(u.install)?(i.add(u),u.install(c,...d)):Z(u)&&(i.add(u),u(c,...d))),c},mixin(u){return r.mixins.includes(u)||r.mixins.push(u),c},component(u,d){return d?(r.components[u]=d,c):r.components[u]},directive(u,d){return d?(r.directives[u]=d,c):r.directives[u]},mount(u,d,p){if(!l){const v=V(s,o);return v.appContext=r,d&&t?t(v,u):e(v,u,p),l=!0,c._container=u,u.__vue_app__=c,lo(v.component)||v.component.proxy}},unmount(){l&&(e(null,c._container),delete c._container.__vue_app__)},provide(u,d){return r.provides[u]=d,c}};return c}}function Fn(e,t,n,s,o=!1){if(W(e)){e.forEach((v,k)=>Fn(v,t&&(W(t)?t[k]:t),n,s,o));return}if(Ut(s)&&!o)return;const r=s.shapeFlag&4?lo(s.component)||s.component.proxy:s.el,i=o?null:r,{i:l,r:c}=e,u=t&&t.r,d=l.refs===ge?l.refs={}:l.refs,p=l.setupState;if(u!=null&&u!==c&&(we(u)?(d[u]=null,re(p,u)&&(p[u]=null)):Ce(u)&&(u.value=null)),Z(c))ht(c,l,12,[i,d]);else{const v=we(c),k=Ce(c);if(v||k){const H=()=>{if(e.f){const N=v?re(p,c)?p[c]:d[c]:c.value;o?W(N)&&Us(N,r):W(N)?N.includes(r)||N.push(r):v?(d[c]=[r],re(p,c)&&(p[c]=d[c])):(c.value=[r],e.k&&(d[e.k]=c.value))}else v?(d[c]=i,re(p,c)&&(p[c]=i)):k&&(c.value=i,e.k&&(d[e.k]=i))};i?(H.id=-1,Ee(H,n)):H()}}}let lt=!1;const Tn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Ln=e=>e.nodeType===8;function hc(e){const{mt:t,p:n,o:{patchProp:s,createText:o,nextSibling:r,parentNode:i,remove:l,insert:c,createComment:u}}=e,d=(b,L)=>{if(!L.hasChildNodes()){n(null,b,L),Nn(),L._vnode=b;return}lt=!1,p(L.firstChild,b,null,null,null),Nn(),L._vnode=b,lt&&console.error("Hydration completed but contains mismatches.")},p=(b,L,I,Y,te,he=!1)=>{const oe=Ln(b)&&b.data==="[",M=()=>N(b,L,I,Y,te,oe),{type:ee,ref:Q,shapeFlag:ie,patchFlag:O}=L;let ne=b.nodeType;L.el=b,O===-2&&(he=!1,L.dynamicChildren=null);let D=null;switch(ee){case Wt:ne!==3?L.children===""?(c(L.el=o(""),i(b),b),D=b):D=M():(b.data!==L.children&&(lt=!0,b.data=L.children),D=r(b));break;case Oe:ne!==8||oe?D=M():D=r(b);break;case zt:if(oe&&(b=r(b),ne=b.nodeType),ne===1||ne===3){D=b;const Me=!L.children.length;for(let fe=0;fe{he=he||!!L.dynamicChildren;const{type:oe,props:M,patchFlag:ee,shapeFlag:Q,dirs:ie}=L,O=oe==="input"&&ie||oe==="option";if(O||ee!==-1){if(ie&&Ye(L,null,I,"created"),M)if(O||!he||ee&48)for(const D in M)(O&&D.endsWith("value")||mn(D)&&!tn(D))&&s(b,D,null,M[D],!1,void 0,I);else M.onClick&&s(b,"onClick",null,M.onClick,!1,void 0,I);let ne;if((ne=M&&M.onVnodeBeforeMount)&&He(ne,I,L),ie&&Ye(L,null,I,"beforeMount"),((ne=M&&M.onVnodeMounted)||ie)&&Rr(()=>{ne&&He(ne,I,L),ie&&Ye(L,null,I,"mounted")},Y),Q&16&&!(M&&(M.innerHTML||M.textContent))){let D=k(b.firstChild,L,b,I,Y,te,he);for(;D;){lt=!0;const Me=D;D=D.nextSibling,l(Me)}}else Q&8&&b.textContent!==L.children&&(lt=!0,b.textContent=L.children)}return b.nextSibling},k=(b,L,I,Y,te,he,oe)=>{oe=oe||!!L.dynamicChildren;const M=L.children,ee=M.length;for(let Q=0;Q{const{slotScopeIds:oe}=L;oe&&(te=te?te.concat(oe):oe);const M=i(b),ee=k(r(b),L,M,I,Y,te,he);return ee&&Ln(ee)&&ee.data==="]"?r(L.anchor=ee):(lt=!0,c(L.anchor=u("]"),M,ee),ee)},N=(b,L,I,Y,te,he)=>{if(lt=!0,L.el=null,he){const ee=X(b);for(;;){const Q=r(b);if(Q&&Q!==ee)l(Q);else break}}const oe=r(b),M=i(b);return l(b),n(null,L,M,oe,I,Y,Tn(M),te),oe},X=b=>{let L=0;for(;b;)if(b=r(b),b&&Ln(b)&&(b.data==="["&&L++,b.data==="]")){if(L===0)return r(b);L--}return b};return[d,p]}const Ee=Rr;function _c(e){return pc(e,hc)}function pc(e,t){const n=Yi();n.__VUE__=!0;const{insert:s,remove:o,patchProp:r,createElement:i,createText:l,createComment:c,setText:u,setElementText:d,parentNode:p,nextSibling:v,setScopeId:k=Ke,insertStaticContent:H}=e,N=(a,f,m,x=null,w=null,C=null,E=!1,P=null,T=!!f.dynamicChildren)=>{if(a===f)return;a&&!Ct(a,f)&&(x=wn(a),We(a,w,C,!0),a=null),f.patchFlag===-2&&(T=!1,f.dynamicChildren=null);const{type:$,ref:z,shapeFlag:B}=f;switch($){case Wt:X(a,f,m,x);break;case Oe:b(a,f,m,x);break;case zt:a==null&&L(f,m,x,E);break;case J:O(a,f,m,x,w,C,E,P,T);break;default:B&1?te(a,f,m,x,w,C,E,P,T):B&6?ne(a,f,m,x,w,C,E,P,T):(B&64||B&128)&&$.process(a,f,m,x,w,C,E,P,T,It)}z!=null&&w&&Fn(z,a&&a.ref,C,f||a,!f)},X=(a,f,m,x)=>{if(a==null)s(f.el=l(f.children),m,x);else{const w=f.el=a.el;f.children!==a.children&&u(w,f.children)}},b=(a,f,m,x)=>{a==null?s(f.el=c(f.children||""),m,x):f.el=a.el},L=(a,f,m,x)=>{[a.el,a.anchor]=H(a.children,f,m,x,a.el,a.anchor)},I=({el:a,anchor:f},m,x)=>{let w;for(;a&&a!==f;)w=v(a),s(a,m,x),a=w;s(f,m,x)},Y=({el:a,anchor:f})=>{let m;for(;a&&a!==f;)m=v(a),o(a),a=m;o(f)},te=(a,f,m,x,w,C,E,P,T)=>{E=E||f.type==="svg",a==null?he(f,m,x,w,C,E,P,T):ee(a,f,w,C,E,P,T)},he=(a,f,m,x,w,C,E,P)=>{let T,$;const{type:z,props:B,shapeFlag:j,transition:G,dirs:se}=a;if(T=a.el=i(a.type,C,B&&B.is,B),j&8?d(T,a.children):j&16&&M(a.children,T,null,x,w,C&&z!=="foreignObject",E,P),se&&Ye(a,null,x,"created"),oe(T,a,a.scopeId,E,x),B){for(const de in B)de!=="value"&&!tn(de)&&r(T,de,null,B[de],C,a.children,x,w,tt);"value"in B&&r(T,"value",null,B.value),($=B.onVnodeBeforeMount)&&He($,x,a)}se&&Ye(a,null,x,"beforeMount");const pe=(!w||w&&!w.pendingBranch)&&G&&!G.persisted;pe&&G.beforeEnter(T),s(T,f,m),(($=B&&B.onVnodeMounted)||pe||se)&&Ee(()=>{$&&He($,x,a),pe&&G.enter(T),se&&Ye(a,null,x,"mounted")},w)},oe=(a,f,m,x,w)=>{if(m&&k(a,m),x)for(let C=0;C{for(let $=T;${const P=f.el=a.el;let{patchFlag:T,dynamicChildren:$,dirs:z}=f;T|=a.patchFlag&16;const B=a.props||ge,j=f.props||ge;let G;m&&wt(m,!1),(G=j.onVnodeBeforeUpdate)&&He(G,m,f,a),z&&Ye(f,a,m,"beforeUpdate"),m&&wt(m,!0);const se=w&&f.type!=="foreignObject";if($?Q(a.dynamicChildren,$,P,m,x,se,C):E||_e(a,f,P,null,m,x,se,C,!1),T>0){if(T&16)ie(P,f,B,j,m,x,w);else if(T&2&&B.class!==j.class&&r(P,"class",null,j.class,w),T&4&&r(P,"style",B.style,j.style,w),T&8){const pe=f.dynamicProps;for(let de=0;de{G&&He(G,m,f,a),z&&Ye(f,a,m,"updated")},x)},Q=(a,f,m,x,w,C,E)=>{for(let P=0;P{if(m!==x){if(m!==ge)for(const P in m)!tn(P)&&!(P in x)&&r(a,P,m[P],null,E,f.children,w,C,tt);for(const P in x){if(tn(P))continue;const T=x[P],$=m[P];T!==$&&P!=="value"&&r(a,P,$,T,E,f.children,w,C,tt)}"value"in x&&r(a,"value",m.value,x.value)}},O=(a,f,m,x,w,C,E,P,T)=>{const $=f.el=a?a.el:l(""),z=f.anchor=a?a.anchor:l("");let{patchFlag:B,dynamicChildren:j,slotScopeIds:G}=f;G&&(P=P?P.concat(G):G),a==null?(s($,m,x),s(z,m,x),M(f.children,m,z,w,C,E,P,T)):B>0&&B&64&&j&&a.dynamicChildren?(Q(a.dynamicChildren,j,m,w,C,E,P),(f.key!=null||w&&f===w.subTree)&&oi(a,f,!0)):_e(a,f,m,z,w,C,E,P,T)},ne=(a,f,m,x,w,C,E,P,T)=>{f.slotScopeIds=P,a==null?f.shapeFlag&512?w.ctx.activate(f,m,x,E,T):D(f,m,x,w,C,E,T):Me(a,f,T)},D=(a,f,m,x,w,C,E)=>{const P=a.component=kc(a,x,w);if(Zn(a)&&(P.ctx.renderer=It),Pc(P),P.asyncDep){if(w&&w.registerDep(P,fe),!a.el){const T=P.subTree=V(Oe);b(null,T,f,m)}return}fe(P,a,f,m,w,C,E)},Me=(a,f,m)=>{const x=f.component=a.component;if(Hl(a,f,m))if(x.asyncDep&&!x.asyncResolved){be(x,f,m);return}else x.next=f,Ml(x.update),x.update();else f.el=a.el,x.vnode=f},fe=(a,f,m,x,w,C,E)=>{const P=()=>{if(a.isMounted){let{next:z,bu:B,u:j,parent:G,vnode:se}=a,pe=z,de;wt(a,!1),z?(z.el=se.el,be(a,z,E)):z=se,B&&us(B),(de=z.props&&z.props.onVnodeBeforeUpdate)&&He(de,G,z,se),wt(a,!0);const xe=fs(a),De=a.subTree;a.subTree=xe,N(De,xe,p(De.el),wn(De),a,w,C),z.el=xe.el,pe===null&&Rl(a,xe.el),j&&Ee(j,w),(de=z.props&&z.props.onVnodeUpdated)&&Ee(()=>He(de,G,z,se),w)}else{let z;const{el:B,props:j}=f,{bm:G,m:se,parent:pe}=a,de=Ut(f);if(wt(a,!1),G&&us(G),!de&&(z=j&&j.onVnodeBeforeMount)&&He(z,pe,f),wt(a,!0),B&&cs){const xe=()=>{a.subTree=fs(a),cs(B,a.subTree,a,w,null)};de?f.type.__asyncLoader().then(()=>!a.isUnmounted&&xe()):xe()}else{const xe=a.subTree=fs(a);N(null,xe,m,x,a,w,C),f.el=xe.el}if(se&&Ee(se,w),!de&&(z=j&&j.onVnodeMounted)){const xe=f;Ee(()=>He(z,pe,xe),w)}(f.shapeFlag&256||pe&&Ut(pe.vnode)&&pe.vnode.shapeFlag&256)&&a.a&&Ee(a.a,w),a.isMounted=!0,f=m=x=null}},T=a.effect=new qs(P,()=>to($),a.scope),$=a.update=()=>T.run();$.id=a.uid,wt(a,!0),$()},be=(a,f,m)=>{f.component=a;const x=a.vnode.props;a.vnode=f,a.next=null,lc(a,f.props,x,m),uc(a,f.children,m),Qt(),Vo(),Xt()},_e=(a,f,m,x,w,C,E,P,T=!1)=>{const $=a&&a.children,z=a?a.shapeFlag:0,B=f.children,{patchFlag:j,shapeFlag:G}=f;if(j>0){if(j&128){yn($,B,m,x,w,C,E,P,T);return}else if(j&256){bt($,B,m,x,w,C,E,P,T);return}}G&8?(z&16&&tt($,w,C),B!==$&&d(m,B)):z&16?G&16?yn($,B,m,x,w,C,E,P,T):tt($,w,C,!0):(z&8&&d(m,""),G&16&&M(B,m,x,w,C,E,P,T))},bt=(a,f,m,x,w,C,E,P,T)=>{a=a||Bt,f=f||Bt;const $=a.length,z=f.length,B=Math.min($,z);let j;for(j=0;jz?tt(a,w,C,!0,!1,B):M(f,m,x,w,C,E,P,T,B)},yn=(a,f,m,x,w,C,E,P,T)=>{let $=0;const z=f.length;let B=a.length-1,j=z-1;for(;$<=B&&$<=j;){const G=a[$],se=f[$]=T?ut(f[$]):Ue(f[$]);if(Ct(G,se))N(G,se,m,null,w,C,E,P,T);else break;$++}for(;$<=B&&$<=j;){const G=a[B],se=f[j]=T?ut(f[j]):Ue(f[j]);if(Ct(G,se))N(G,se,m,null,w,C,E,P,T);else break;B--,j--}if($>B){if($<=j){const G=j+1,se=Gj)for(;$<=B;)We(a[$],w,C,!0),$++;else{const G=$,se=$,pe=new Map;for($=se;$<=j;$++){const Ie=f[$]=T?ut(f[$]):Ue(f[$]);Ie.key!=null&&pe.set(Ie.key,$)}let de,xe=0;const De=j-se+1;let Nt=!1,bo=0;const Jt=new Array(De);for($=0;$=De){We(Ie,w,C,!0);continue}let Ge;if(Ie.key!=null)Ge=pe.get(Ie.key);else for(de=se;de<=j;de++)if(Jt[de-se]===0&&Ct(Ie,f[de])){Ge=de;break}Ge===void 0?We(Ie,w,C,!0):(Jt[Ge-se]=$+1,Ge>=bo?bo=Ge:Nt=!0,N(Ie,f[Ge],m,null,w,C,E,P,T),xe++)}const yo=Nt?vc(Jt):Bt;for(de=yo.length-1,$=De-1;$>=0;$--){const Ie=se+$,Ge=f[Ie],wo=Ie+1{const{el:C,type:E,transition:P,children:T,shapeFlag:$}=a;if($&6){yt(a.component.subTree,f,m,x);return}if($&128){a.suspense.move(f,m,x);return}if($&64){E.move(a,f,m,It);return}if(E===J){s(C,f,m);for(let B=0;BP.enter(C),w);else{const{leave:B,delayLeave:j,afterLeave:G}=P,se=()=>s(C,f,m),pe=()=>{B(C,()=>{se(),G&&G()})};j?j(C,se,pe):pe()}else s(C,f,m)},We=(a,f,m,x=!1,w=!1)=>{const{type:C,props:E,ref:P,children:T,dynamicChildren:$,shapeFlag:z,patchFlag:B,dirs:j}=a;if(P!=null&&Fn(P,null,m,a,!0),z&256){f.ctx.deactivate(a);return}const G=z&1&&j,se=!Ut(a);let pe;if(se&&(pe=E&&E.onVnodeBeforeUnmount)&&He(pe,f,a),z&6)Ii(a.component,m,x);else{if(z&128){a.suspense.unmount(m,x);return}G&&Ye(a,null,f,"beforeUnmount"),z&64?a.type.remove(a,f,m,w,It,x):$&&(C!==J||B>0&&B&64)?tt($,f,m,!1,!0):(C===J&&B&384||!w&&z&16)&&tt(T,f,m),x&&mo(a)}(se&&(pe=E&&E.onVnodeUnmounted)||G)&&Ee(()=>{pe&&He(pe,f,a),G&&Ye(a,null,f,"unmounted")},m)},mo=a=>{const{type:f,el:m,anchor:x,transition:w}=a;if(f===J){Mi(m,x);return}if(f===zt){Y(a);return}const C=()=>{o(m),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(a.shapeFlag&1&&w&&!w.persisted){const{leave:E,delayLeave:P}=w,T=()=>E(m,C);P?P(a.el,C,T):T()}else C()},Mi=(a,f)=>{let m;for(;a!==f;)m=v(a),o(a),a=m;o(f)},Ii=(a,f,m)=>{const{bum:x,scope:w,update:C,subTree:E,um:P}=a;x&&us(x),w.stop(),C&&(C.active=!1,We(E,a,f,m)),P&&Ee(P,f),Ee(()=>{a.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},tt=(a,f,m,x=!1,w=!1,C=0)=>{for(let E=C;Ea.shapeFlag&6?wn(a.component.subTree):a.shapeFlag&128?a.suspense.next():v(a.anchor||a.el),go=(a,f,m)=>{a==null?f._vnode&&We(f._vnode,null,null,!0):N(f._vnode||null,a,f,null,null,null,m),Vo(),Nn(),f._vnode=a},It={p:N,um:We,m:yt,r:mo,mt:D,mc:M,pc:_e,pbc:Q,n:wn,o:e};let ls,cs;return t&&([ls,cs]=t(It)),{render:go,hydrate:ls,createApp:dc(go,ls)}}function wt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function oi(e,t,n=!1){const s=e.children,o=t.children;if(W(s)&&W(o))for(let r=0;r>1,e[n[l]]0&&(t[s]=n[r-1]),n[r]=s)}}for(r=n.length,i=n[r-1];r-- >0;)n[r]=i,i=t[i];return n}const mc=e=>e.__isTeleport,J=Symbol(void 0),Wt=Symbol(void 0),Oe=Symbol(void 0),zt=Symbol(void 0),on=[];let je=null;function h(e=!1){on.push(je=e?null:[])}function gc(){on.pop(),je=on[on.length-1]||null}let hn=1;function Ro(e){hn+=e}function ri(e){return e.dynamicChildren=hn>0?je||Bt:null,gc(),hn>0&&je&&je.push(e),e}function g(e,t,n,s,o,r){return ri(y(e,t,n,s,o,r,!0))}function q(e,t,n,s,o){return ri(V(e,t,n,s,o,!0))}function Hn(e){return e?e.__v_isVNode===!0:!1}function Ct(e,t){return e.type===t.type&&e.key===t.key}const ts="__vInternal",ii=({key:e})=>e??null,En=({ref:e,ref_key:t,ref_for:n})=>e!=null?we(e)||Ce(e)||Z(e)?{i:Se,r:e,k:t,f:!!n}:e:null;function y(e,t=null,n=null,s=0,o=null,r=e===J?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ii(t),ref:t&&En(t),scopeId:Xn,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:r,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Se};return l?(io(c,n),r&128&&e.normalize(c)):n&&(c.shapeFlag|=we(n)?8:16),hn>0&&!i&&je&&(c.patchFlag>0||r&6)&&c.patchFlag!==32&&je.push(c),c}const V=bc;function bc(e,t=null,n=null,s=0,o=null,r=!1){if((!e||e===Gr)&&(e=Oe),Hn(e)){const l=pt(e,t,!0);return n&&io(l,n),hn>0&&!r&&je&&(l.shapeFlag&6?je[je.indexOf(e)]=l:je.push(l)),l.patchFlag|=-2,l}if(Lc(e)&&(e=e.__vccOpts),t){t=yc(t);let{class:l,style:c}=t;l&&!we(l)&&(t.class=ve(l)),me(c)&&(Vr(c)&&!W(c)&&(c=$e({},c)),t.style=Rs(c))}const i=we(e)?1:Dl(e)?128:mc(e)?64:me(e)?4:Z(e)?2:0;return y(e,t,n,s,o,i,r,!0)}function yc(e){return e?Vr(e)||ts in e?$e({},e):e:null}function pt(e,t,n=!1){const{props:s,ref:o,patchFlag:r,children:i}=e,l=t?An(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&ii(l),ref:t&&t.ref?n&&o?W(o)?o.concat(En(t)):[o,En(t)]:En(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==J?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&pt(e.ssContent),ssFallback:e.ssFallback&&pt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Te(e=" ",t=0){return V(Wt,null,e,t)}function wc(e,t){const n=V(zt,null,e);return n.staticCount=t,n}function U(e="",t=!1){return t?(h(),q(Oe,null,e)):V(Oe,null,e)}function Ue(e){return e==null||typeof e=="boolean"?V(Oe):W(e)?V(J,null,e.slice()):typeof e=="object"?ut(e):V(Wt,null,String(e))}function ut(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:pt(e)}function io(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(W(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),io(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(ts in t)?t._ctx=Se:o===3&&Se&&(Se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Z(t)?(t={default:t,_ctx:Se},n=32):(t=String(t),s&64?(n=16,t=[Te(t)]):n=8);e.children=t,e.shapeFlag|=n}function An(...e){const t={};for(let n=0;nye||Se,Gt=e=>{ye=e,e.scope.on()},Vt=()=>{ye&&ye.scope.off(),ye=null};function li(e){return e.vnode.shapeFlag&4}let _n=!1;function Pc(e,t=!1){_n=t;const{props:n,children:s}=e.vnode,o=li(e);ic(e,n,o,t),ac(e,s);const r=o?Cc(e,t):void 0;return _n=!1,r}function Cc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=nn(new Proxy(e.ctx,ec));const{setup:s}=n;if(s){const o=e.setupContext=s.length>1?ai(e):null;Gt(e),Qt();const r=ht(s,e,0,[e.props,o]);if(Xt(),Vt(),vr(r)){if(r.then(Vt,Vt),t)return r.then(i=>{Do(e,i,t)}).catch(i=>{Yn(i,e,0)});e.asyncDep=r}else Do(e,r,t)}else ci(e,t)}function Do(e,t,n){Z(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:me(t)&&(e.setupState=Ir(t)),ci(e,n)}let Uo;function ci(e,t,n){const s=e.type;if(!e.render){if(!t&&Uo&&!s.render){const o=s.template||oo(e).template;if(o){const{isCustomElement:r,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,u=$e($e({isCustomElement:r,delimiters:l},i),c);s.render=Uo(o,u)}}e.render=s.render||Ke}Gt(e),Qt(),tc(e),Xt(),Vt()}function Sc(e){return new Proxy(e.attrs,{get(t,n){return Ae(e,"get","$attrs"),t[n]}})}function ai(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=Sc(e))},slots:e.slots,emit:e.emit,expose:t}}function lo(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ir(nn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in sn)return sn[n](e)},has(t,n){return n in t||n in sn}}))}function Tc(e,t=!0){return Z(e)?e.displayName||e.name:e.name||t&&e.__name}function Lc(e){return Z(e)&&"__vccOpts"in e}const K=(e,t)=>Vl(e,t,_n);function Vc(){return Ec().slots}function Ec(){const e=ns();return e.setupContext||(e.setupContext=ai(e))}function Rn(e,t,n){const s=arguments.length;return s===2?me(t)&&!W(t)?Hn(t)?V(e,null,[t]):V(e,t):V(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Hn(n)&&(n=[n]),V(e,t,n))}const Ac=Symbol(""),Mc=()=>qe(Ac),Ic="3.2.47",Nc="http://www.w3.org/2000/svg",St=typeof document<"u"?document:null,zo=St&&St.createElement("template"),Oc={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 o=t?St.createElementNS(Nc,e):St.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>St.createTextNode(e),createComment:e=>St.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>St.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,r){const i=n?n.previousSibling:t.lastChild;if(o&&(o===r||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===r||!(o=o.nextSibling)););else{zo.innerHTML=s?``:e;const l=zo.content;if(s){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Bc(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 Fc(e,t,n){const s=e.style,o=we(n);if(n&&!o){if(t&&!we(t))for(const r in t)n[r]==null&&Es(s,r,"");for(const r in n)Es(s,r,n[r])}else{const r=s.display;o?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=r)}}const jo=/\s*!important$/;function Es(e,t,n){if(W(n))n.forEach(s=>Es(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Hc(e,t);jo.test(n)?e.setProperty(Yt(s),n.replace(jo,""),"important"):e[s]=n}}const Ko=["Webkit","Moz","ms"],_s={};function Hc(e,t){const n=_s[t];if(n)return n;let s=Je(t);if(s!=="filter"&&s in e)return _s[t]=s;s=qn(s);for(let o=0;ops||(qc.then(()=>ps=0),ps=Date.now());function Gc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Re(Yc(s,n.value),t,5,[s])};return n.value=e,n.attached=Wc(),n}function Yc(e,t){if(W(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>o=>!o._stopped&&s&&s(o))}else return t}const Go=/^on[a-z]/,Qc=(e,t,n,s,o=!1,r,i,l,c)=>{t==="class"?Bc(e,s,o):t==="style"?Fc(e,n,s):mn(t)?Ds(t)||jc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Xc(e,t,s,o))?Dc(e,t,s,r,i,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Rc(e,t,s,o))};function Xc(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&Go.test(t)&&Z(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Go.test(t)&&we(n)?!1:t in e}function Jc(e){const t=ns();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(r=>Ms(r,o))},s=()=>{const o=e(t.proxy);As(t.subTree,o),n(o)};Dr(s),Be(()=>{const o=new MutationObserver(s);o.observe(t.subTree.el.parentNode,{childList:!0}),vt(()=>o.disconnect())})}function As(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{As(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Ms(e.el,t);else if(e.type===J)e.children.forEach(n=>As(n,t));else if(e.type===zt){let{el:n,anchor:s}=e;for(;n&&(Ms(n,t),n!==s);)n=n.nextSibling}}function Ms(e,t){if(e.nodeType===1){const n=e.style;for(const s in t)n.setProperty(`--${s}`,t[s])}}const ct="transition",Zt="animation",ss=(e,{slots:t})=>Rn(zr,Zc(e),t);ss.displayName="Transition";const ui={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ss.props=$e({},zr.props,ui);const xt=(e,t=[])=>{W(e)?e.forEach(n=>n(...t)):e&&e(...t)},Yo=e=>e?W(e)?e.some(t=>t.length>1):e.length>1:!1;function Zc(e){const t={};for(const O in e)O in ui||(t[O]=e[O]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:r=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=r,appearActiveClass:u=i,appearToClass:d=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:v=`${n}-leave-active`,leaveToClass:k=`${n}-leave-to`}=e,H=ea(o),N=H&&H[0],X=H&&H[1],{onBeforeEnter:b,onEnter:L,onEnterCancelled:I,onLeave:Y,onLeaveCancelled:te,onBeforeAppear:he=b,onAppear:oe=L,onAppearCancelled:M=I}=t,ee=(O,ne,D)=>{$t(O,ne?d:l),$t(O,ne?u:i),D&&D()},Q=(O,ne)=>{O._isLeaving=!1,$t(O,p),$t(O,k),$t(O,v),ne&&ne()},ie=O=>(ne,D)=>{const Me=O?oe:L,fe=()=>ee(ne,O,D);xt(Me,[ne,fe]),Qo(()=>{$t(ne,O?c:r),at(ne,O?d:l),Yo(Me)||Xo(ne,s,N,fe)})};return $e(t,{onBeforeEnter(O){xt(b,[O]),at(O,r),at(O,i)},onBeforeAppear(O){xt(he,[O]),at(O,c),at(O,u)},onEnter:ie(!1),onAppear:ie(!0),onLeave(O,ne){O._isLeaving=!0;const D=()=>Q(O,ne);at(O,p),sa(),at(O,v),Qo(()=>{O._isLeaving&&($t(O,p),at(O,k),Yo(Y)||Xo(O,s,X,D))}),xt(Y,[O,D])},onEnterCancelled(O){ee(O,!1),xt(I,[O])},onAppearCancelled(O){ee(O,!0),xt(M,[O])},onLeaveCancelled(O){Q(O),xt(te,[O])}})}function ea(e){if(e==null)return null;if(me(e))return[vs(e.enter),vs(e.leave)];{const t=vs(e);return[t,t]}}function vs(e){return Gi(e)}function at(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function $t(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 Qo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ta=0;function Xo(e,t,n,s){const o=e._endId=++ta,r=()=>{o===e._endId&&s()};if(n)return setTimeout(r,n);const{type:i,timeout:l,propCount:c}=na(e,t);if(!i)return s();const u=i+"end";let d=0;const p=()=>{e.removeEventListener(u,v),r()},v=k=>{k.target===e&&++d>=c&&p()};setTimeout(()=>{d(n[H]||"").split(", "),o=s(`${ct}Delay`),r=s(`${ct}Duration`),i=Jo(o,r),l=s(`${Zt}Delay`),c=s(`${Zt}Duration`),u=Jo(l,c);let d=null,p=0,v=0;t===ct?i>0&&(d=ct,p=i,v=r.length):t===Zt?u>0&&(d=Zt,p=u,v=c.length):(p=Math.max(i,u),d=p>0?i>u?ct:Zt:null,v=d?d===ct?r.length:c.length:0);const k=d===ct&&/\b(transform|all)(,|$)/.test(s(`${ct}Property`).toString());return{type:d,timeout:p,propCount:v,hasTransform:k}}function Jo(e,t){for(;e.lengthZo(n)+Zo(e[s])))}function Zo(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function sa(){return document.body.offsetHeight}const oa=["ctrl","shift","alt","meta"],ra={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)=>oa.some(n=>e[`${n}Key`]&&!t.includes(n))},ia=(e,t)=>(n,...s)=>{for(let o=0;o{const t=ca().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=ua(s);if(o)return n(o,!0,o instanceof SVGElement)},t};function ua(e){return we(e)?document.querySelector(e):e}const F=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},fa="modulepreload",da=function(e){return"/"+e},tr={},ha=function(t,n,s){if(!n||n.length===0)return t();const o=document.getElementsByTagName("link");return Promise.all(n.map(r=>{if(r=da(r),r in tr)return;tr[r]=!0;const i=r.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(!!s)for(let d=o.length-1;d>=0;d--){const p=o[d];if(p.href===r&&(!i||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${l}`))return;const u=document.createElement("link");if(u.rel=i?"stylesheet":fa,i||(u.as="script",u.crossOrigin=""),u.href=r,document.head.appendChild(u),i)return new Promise((d,p)=>{u.addEventListener("load",d),u.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())};const _a=R({__name:"VPBadge",props:{text:null,type:null},setup(e){return(t,n)=>(h(),g("span",{class:ve(["VPBadge",e.type??"tip"])},[S(t.$slots,"default",{},()=>[Te(ce(e.text),1)],!0)],2))}});const pa=F(_a,[["__scopeId","data-v-b3ca8c40"]]),va=JSON.parse('{"lang":"zh-CN","dir":"ltr","title":"FERoad","description":"前端学习,前端进阶,前端面试","base":"/","head":[],"appearance":true,"themeConfig":{"logo":"/logo.svg","siteTitle":"FERoad","repo":"https://github.com/mewcoder/feroad","footer":{"copyright":"Copyright © 2023 mewcoder"},"nav":[{"text":"面试专题","link":"/interview/resume"}],"sidebar":{"/interview/":[{"title":"面试专题","collapsible":true,"items":[{"text":"写好简历","link":"/interview/resume"},{"text":"面试题库","link":"/interview/question"}]}]}},"locales":{},"scrollOffset":90,"cleanUrls":false}'),os=/^[a-z]+:/i,ma=/^pathname:\/\//,nr="vitepress-theme-appearance",fi=/#.*$/,ga=/(index)?\.(md|html)$/,ke=typeof document<"u",di={relativePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0};function Mt(e,t,n=!1){if(t===void 0)return!1;if(e=sr(`/${e}`),n)return new RegExp(t).test(e);if(sr(t)!==e)return!1;const s=t.match(fi);return s?(ke?location.hash:"")===s[0]:!0}function sr(e){return decodeURI(e).replace(fi,"").replace(ga,"")}function hi(e){return os.test(e)}function ba(e,t){var s,o,r,i,l,c,u;const n=Object.keys(e.locales).find(d=>d!=="root"&&!hi(d)&&Mt(t,`/${d}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((o=e.locales[n])==null?void 0:o.dir)??e.dir,title:((r=e.locales[n])==null?void 0:r.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:pi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function _i(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 o=ya(e.title,s);return`${n}${o}`}function ya(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function wa(e,t){const[n,s]=t;if(n!=="meta")return!1;const o=Object.entries(s)[0];return o==null?!1:e.some(([r,i])=>r===n&&i[o[0]]===o[1])}function pi(e,t){return[...e.filter(n=>!wa(t,n)),...t]}const xa=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,$a=/^[a-z]:/i;function or(e){const t=$a.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(xa,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const vi=Symbol(),ft=Cl(va);function ka(e){const t=K(()=>ba(ft.value,e.data.relativePath));return{site:t,theme:K(()=>t.value.themeConfig),page:K(()=>e.data),frontmatter:K(()=>e.data.frontmatter),lang:K(()=>t.value.lang),dir:K(()=>t.value.dir),localeIndex:K(()=>t.value.localeIndex||"root"),title:K(()=>_i(t.value,e.data)),description:K(()=>e.data.description||t.value.description),isDark:ae(!1)}}function mi(){const e=qe(vi);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Pa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function pn(e){return os.test(e)||e.startsWith(".")?e:Pa(ft.value.base,e)}function gi(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ke){const n="/";t=or(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=`./${or(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}const bi=Symbol(),rr="http://a.com",Ca=()=>({path:"/",component:null,data:di});function Sa(e,t){const n=Gn(Ca()),s={route:n,go:o};async function o(l=ke?location.href:"/"){var u,d;await((u=s.onBeforeRouteChange)==null?void 0:u.call(s,l));const c=new URL(l,rr);ft.value.cleanUrls||!c.pathname.endsWith("/")&&!c.pathname.endsWith(".html")&&(c.pathname+=".html",l=c.pathname+c.search+c.hash),ke&&l!==location.href&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",l)),await i(l),await((d=s.onAfterRouteChanged)==null?void 0:d.call(s,l))}let r=null;async function i(l,c=0,u=!1){const d=new URL(l,rr),p=r=d.pathname;try{let v=await e(p);if(r===p){r=null;const{default:k,__pageData:H}=v;if(!k)throw new Error(`Invalid route component: ${k}`);n.path=ke?p:pn(p),n.component=nn(k),n.data=nn(H),ke&&eo(()=>{let N=ft.value.base+H.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ft.value.cleanUrls&&!N.endsWith("/")&&(N+=".html"),N!==d.pathname&&(d.pathname=N,l=N+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!c){let X=null;try{X=document.querySelector(decodeURIComponent(d.hash))}catch(b){console.warn(b)}if(X){ir(X,d.hash);return}}window.scrollTo(0,c)})}}catch(v){if(!/fetch/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!u)try{const k=await fetch(ft.value.base+"hashmap.json");window.__VP_HASH_MAP__=await k.json(),await i(l,c,!0);return}catch{}r===p&&(r=null,n.path=ke?p:pn(p),n.component=t?nn(t):null,n.data=di)}}return ke&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const u=l.target.closest("a");if(u&&!u.closest(".vp-raw")&&(u instanceof SVGElement||!u.download)){const{target:d}=u,{href:p,origin:v,pathname:k,hash:H,search:N}=new URL(u.href instanceof SVGAnimatedString?u.href.animVal:u.href,u.baseURI),X=window.location,b=k.match(/\.\w+$/);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&d!=="_blank"&&v===X.origin&&!(b&&b[0]!==".html")&&(l.preventDefault(),k===X.pathname&&N===X.search?H&&H!==X.hash&&(history.pushState(null,"",H),window.dispatchEvent(new Event("hashchange")),ir(u,H,u.classList.contains("header-anchor"))):o(p))}},{capture:!0}),window.addEventListener("popstate",l=>{i(location.href,l.state&&l.state.scrollPosition||0)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Ta(){const e=qe(bi);if(!e)throw new Error("useRouter() is called without provider.");return e}function mt(){return Ta().route}function ir(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.querySelector(decodeURIComponent(t))}catch(o){console.warn(o)}if(s){let o=ft.value.scrollOffset;typeof o=="string"&&(o=document.querySelector(o).getBoundingClientRect().bottom+24);const r=parseInt(window.getComputedStyle(s).paddingTop,10),i=window.scrollY+s.getBoundingClientRect().top-o+r;!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})}}const La=R({name:"VitePressContent",props:{onContentUpdated:Function},setup(e){const t=mt();return no(()=>{var n;(n=e.onContentUpdated)==null||n.call(e)}),()=>Rn("div",{style:{position:"relative"}},[t.component?Rn(t.component):null])}}),ue=mi;var lr;const gn=typeof window<"u",Va=e=>typeof e=="string",Ea=()=>{};gn&&((lr=window==null?void 0:window.navigator)!=null&&lr.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Aa(e){return typeof e=="function"?e():_(e)}function Ma(e){return e}function yi(e){return br()?(Ji(e),!0):!1}function Ia(e){return typeof e=="function"?K(e):ae(e)}function Na(e,t=!0){ns()?Be(e):t?e():eo(e)}function Oa(e){var t;const n=Aa(e);return(t=n==null?void 0:n.$el)!=null?t:n}const co=gn?window:void 0;gn&&window.document;gn&&window.navigator;gn&&window.location;function Ba(...e){let t,n,s,o;if(Va(e[0])||Array.isArray(e[0])?([n,s,o]=e,t=co):[t,n,s,o]=e,!t)return Ea;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const r=[],i=()=>{r.forEach(d=>d()),r.length=0},l=(d,p,v)=>(d.addEventListener(p,v,o),()=>d.removeEventListener(p,v,o)),c=Xe(()=>Oa(t),d=>{i(),d&&r.push(...n.flatMap(p=>s.map(v=>l(d,p,v))))},{immediate:!0,flush:"post"}),u=()=>{c(),i()};return yi(u),u}function Fa(e,t=!1){const n=ae(),s=()=>n.value=Boolean(e());return s(),Na(s,t),n}function Is(e,t={}){const{window:n=co}=t,s=Fa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const r=ae(!1),i=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",l):o.removeListener(l))},l=()=>{s.value&&(i(),o=n.matchMedia(Ia(e).value),r.value=o.matches,"addEventListener"in o?o.addEventListener("change",l):o.addListener(l))};return Et(l),yi(()=>i()),r}const Ns=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Os="__vueuse_ssr_handlers__";Ns[Os]=Ns[Os]||{};Ns[Os];var cr;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(cr||(cr={}));var Ha=Object.defineProperty,ar=Object.getOwnPropertySymbols,Ra=Object.prototype.hasOwnProperty,Da=Object.prototype.propertyIsEnumerable,ur=(e,t,n)=>t in e?Ha(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ua=(e,t)=>{for(var n in t||(t={}))Ra.call(t,n)&&ur(e,n,t[n]);if(ar)for(var n of ar(t))Da.call(t,n)&&ur(e,n,t[n]);return e};const za={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};Ua({linear:Ma},za);function ja({window:e=co}={}){if(!e)return{x:ae(0),y:ae(0)};const t=ae(e.pageXOffset),n=ae(e.pageYOffset);return Ba(e,"scroll",()=>{t.value=e.pageXOffset,n.value=e.pageYOffset},{capture:!1,passive:!0}),{x:t,y:n}}function Ka(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),s=!0,setTimeout(()=>{s=!1},t))}}function Bs(e){return/^\//.test(e)?e:`/${e}`}function vn(e){if(hi(e))return e.replace(ma,"");const{site:t}=ue(),{pathname:n,search:s,hash:o}=new URL(e,"http://example.com"),r=n.endsWith("/")||n.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${n.replace(/(\.md)?$/,t.value.cleanUrls?"":".html")}${s}${o}`);return pn(r)}function wi(e,t){if(Array.isArray(e))return e;if(e==null)return[];t=Bs(t);const n=Object.keys(e).sort((s,o)=>o.split("/").length-s.split("/").length).find(s=>t.startsWith(Bs(s)));return n?e[n]:[]}function qa(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 Wa(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 Fs(e,t){return Array.isArray(t)?t.some(n=>Fs(e,n)):Mt(e,t.link)?!0:t.items?Fs(e,t.items):!1}function rt(){const e=mt(),{theme:t,frontmatter:n}=ue(),s=Is("(min-width: 960px)"),o=ae(!1),r=K(()=>{const k=t.value.sidebar,H=e.data.relativePath;return k?wi(k,H):[]}),i=K(()=>n.value.sidebar!==!1&&r.value.length>0&&n.value.layout!=="home"),l=K(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),c=K(()=>i.value&&s.value),u=K(()=>i.value?qa(r.value):[]);function d(){o.value=!0}function p(){o.value=!1}function v(){o.value?p():d()}return{isOpen:o,sidebar:r,sidebarGroups:u,hasSidebar:i,hasAside:l,isSidebarEnabled:c,open:d,close:p,toggle:v}}function Ga(e,t){let n;Et(()=>{n=e.value?document.activeElement:void 0}),Be(()=>{window.addEventListener("keyup",s)}),vt(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function Ya(e){const{page:t}=ue(),n=ae(!1),s=K(()=>e.value.collapsed!=null),o=K(()=>!!e.value.link),r=K(()=>Mt(t.value.relativePath,e.value.link)),i=K(()=>r.value?!0:e.value.items?Fs(t.value.relativePath,e.value.items):!1),l=K(()=>!!(e.value.items&&e.value.items.length));Et(()=>{n.value=!!(s.value&&e.value.collapsed)}),Et(()=>{(r.value||i.value)&&(n.value=!1)});function c(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:o,isActiveLink:r,hasActiveLink:i,hasChildren:l,toggle:c}}const Qa=R({__name:"VPSkipLink",setup(e){const t=mt(),n=ae();Xe(()=>t.path,()=>n.value.focus());function s({target:o}){const r=document.querySelector(o.hash);if(r){const i=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",i)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",i),r.focus(),window.scrollTo(0,0)}}return(o,r)=>(h(),g(J,null,[y("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),y("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}});const Xa=F(Qa,[["__scopeId","data-v-95909ad5"]]),Ja={key:0,class:"VPBackdrop"},Za=R({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(h(),q(ss,{name:"fade"},{default:A(()=>[e.show?(h(),g("div",Ja)):U("",!0)]),_:1}))}});const eu=F(Za,[["__scopeId","data-v-d5f875a4"]]);function tu(){const e=ae(!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 r=mt();return Xe(()=>r.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}function bn({removeCurrent:e=!0,correspondingLink:t=!1}={}){const{site:n,localeIndex:s,page:o,theme:r}=ue(),i=K(()=>{var c,u;return{label:(c=n.value.locales[s.value])==null?void 0:c.label,link:((u=n.value.locales[s.value])==null?void 0:u.link)||(s.value==="root"?"/":`/${s.value}/`)}});return{localeLinks:K(()=>Object.entries(n.value.locales).flatMap(([c,u])=>e&&i.value.label===u.label?[]:{text:u.label,link:nu(u.link||(c==="root"?"/":`/${c}/`),r.value.i18nRouting!==!1&&t,o.value.relativePath.slice(i.value.link.length-1),!n.value.cleanUrls)})),currentLang:i}}function nu(e,t,n,s){return t?e.replace(/\/$/,"")+Bs(n.replace(/(^|\/)?index.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const su=["src","alt"],ou={inheritAttrs:!1},ru=R({...ou,__name:"VPImage",props:{image:null,alt:null},setup(e){return(t,n)=>{const s=At("VPImage",!0);return e.image?(h(),g(J,{key:0},[typeof e.image=="string"||"src"in e.image?(h(),g("img",An({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:_(pn)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,su)):(h(),g(J,{key:1},[V(s,An({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),V(s,An({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):U("",!0)}}});const ao=F(ru,[["__scopeId","data-v-ff8ace6f"]]),iu=["href"],lu=R({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=ue(),{hasSidebar:s}=rt(),{currentLang:o}=bn();return(r,i)=>(h(),g("div",{class:ve(["VPNavBarTitle",{"has-sidebar":_(s)}])},[y("a",{class:"title",href:_(vn)(_(o).link)},[S(r.$slots,"nav-bar-title-before",{},void 0,!0),_(n).logo?(h(),q(ao,{key:0,class:"logo",image:_(n).logo},null,8,["image"])):U("",!0),_(n).siteTitle?(h(),g(J,{key:1},[Te(ce(_(n).siteTitle),1)],64)):_(n).siteTitle===void 0?(h(),g(J,{key:2},[Te(ce(_(t).title),1)],64)):U("",!0),S(r.$slots,"nav-bar-title-after",{},void 0,!0)],8,iu)],2))}});const cu=F(lu,[["__scopeId","data-v-2b0d59c2"]]);const au={key:0,class:"VPNavBarSearch"},uu={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},fu={class:"DocSearch-Button-Container"},du=y("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},[y("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),hu={class:"DocSearch-Button-Placeholder"},_u=y("span",{class:"DocSearch-Button-Keys"},[y("kbd",{class:"DocSearch-Button-Key"}),y("kbd",{class:"DocSearch-Button-Key"},"K")],-1),pu=R({__name:"VPNavBarSearch",setup(e){Jc(d=>({c8db8e4c:r.value}));const t=()=>null,{theme:n,localeIndex:s}=ue(),o=ae(!1),r=ae("'Meta'"),i=K(()=>{var d,p,v,k,H,N,X,b;return((H=(k=(v=(p=(d=n.value.algolia)==null?void 0:d.locales)==null?void 0:p[s.value])==null?void 0:v.translations)==null?void 0:k.button)==null?void 0:H.buttonText)||((b=(X=(N=n.value.algolia)==null?void 0:N.translations)==null?void 0:X.button)==null?void 0:b.buttonText)||"Search"}),l=()=>{const d="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{const v=document.createElement("link");v.id=d,v.rel="preconnect",v.href=`https://${n.value.algolia.appId}-dsn.algolia.net`,v.crossOrigin="",document.head.appendChild(v)})};Be(()=>{if(!n.value.algolia)return;l(),r.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'";const d=v=>{v.key==="k"&&(v.ctrlKey||v.metaKey)&&(v.preventDefault(),c(),p())},p=()=>{window.removeEventListener("keydown",d)};window.addEventListener("keydown",d),vt(p)});function c(){o.value||(o.value=!0,setTimeout(u,16))}function u(){const d=new Event("keydown");d.key="k",d.metaKey=!0,window.dispatchEvent(d),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||u()},16)}return(d,p)=>_(n).algolia?(h(),g("div",au,[o.value?(h(),q(_(t),{key:0,algolia:_(n).algolia},null,8,["algolia"])):(h(),g("div",{key:1,id:"docsearch",onClick:c},[y("button",uu,[y("span",fu,[du,y("span",hu,ce(_(i)),1)]),_u])]))])):U("",!0)}});const vu={},mu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",height:"24px",viewBox:"0 0 24 24",width:"24px"},gu=y("path",{d:"M0 0h24v24H0V0z",fill:"none"},null,-1),bu=y("path",{d:"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z"},null,-1),yu=[gu,bu];function wu(e,t){return h(),g("svg",mu,yu)}const xu=F(vu,[["render",wu]]),$u=R({__name:"VPLink",props:{tag:null,href:null,noIcon:{type:Boolean}},setup(e){const t=e,n=K(()=>t.tag??t.href?"a":"span"),s=K(()=>t.href&&os.test(t.href));return(o,r)=>(h(),q(dn(_(n)),{class:ve(["VPLink",{link:e.href}]),href:e.href?_(vn)(e.href):void 0,target:_(s)?"_blank":void 0,rel:_(s)?"noreferrer":void 0},{default:A(()=>[S(o.$slots,"default",{},void 0,!0),_(s)&&!e.noIcon?(h(),q(xu,{key:0,class:"icon"})):U("",!0)]),_:3},8,["class","href","target","rel"]))}});const gt=F($u,[["__scopeId","data-v-8f7dfdec"]]),ku=R({__name:"VPNavBarMenuLink",props:{item:null},setup(e){const{page:t}=ue();return(n,s)=>(h(),q(gt,{class:ve({VPNavBarMenuLink:!0,active:_(Mt)(_(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,noIcon:!0},{default:A(()=>[Te(ce(e.item.text),1)]),_:1},8,["class","href"]))}});const Pu=F(ku,[["__scopeId","data-v-ed97c493"]]),uo=ae();let xi=!1,gs=0;function Cu(e){const t=ae(!1);if(ke){!xi&&Su(),gs++;const n=Xe(uo,s=>{var o,r,i;s===e.el.value||(o=e.el.value)!=null&&o.contains(s)?(t.value=!0,(r=e.onFocus)==null||r.call(e)):(t.value=!1,(i=e.onBlur)==null||i.call(e))});vt(()=>{n(),gs--,gs||Tu()})}return Qs(t)}function Su(){document.addEventListener("focusin",$i),xi=!0,uo.value=document.activeElement}function Tu(){document.removeEventListener("focusin",$i)}function $i(){uo.value=document.activeElement}const Lu={},Vu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Eu=y("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),Au=[Eu];function Mu(e,t){return h(),g("svg",Vu,Au)}const ki=F(Lu,[["render",Mu]]),Iu={},Nu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ou=y("circle",{cx:"12",cy:"12",r:"2"},null,-1),Bu=y("circle",{cx:"19",cy:"12",r:"2"},null,-1),Fu=y("circle",{cx:"5",cy:"12",r:"2"},null,-1),Hu=[Ou,Bu,Fu];function Ru(e,t){return h(),g("svg",Nu,Hu)}const Du=F(Iu,[["render",Ru]]),Uu={class:"VPMenuLink"},zu=R({__name:"VPMenuLink",props:{item:null},setup(e){const{page:t}=ue();return(n,s)=>(h(),g("div",Uu,[V(gt,{class:ve({active:_(Mt)(_(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link},{default:A(()=>[Te(ce(e.item.text),1)]),_:1},8,["class","href"])]))}});const rs=F(zu,[["__scopeId","data-v-a5664333"]]),ju={class:"VPMenuGroup"},Ku={key:0,class:"title"},qu=R({__name:"VPMenuGroup",props:{text:null,items:null},setup(e){return(t,n)=>(h(),g("div",ju,[e.text?(h(),g("p",Ku,ce(e.text),1)):U("",!0),(h(!0),g(J,null,Ve(e.items,s=>(h(),g(J,null,["link"in s?(h(),q(rs,{key:0,item:s},null,8,["item"])):U("",!0)],64))),256))]))}});const Wu=F(qu,[["__scopeId","data-v-3d287a33"]]),Gu={class:"VPMenu"},Yu={key:0,class:"items"},Qu=R({__name:"VPMenu",props:{items:null},setup(e){return(t,n)=>(h(),g("div",Gu,[e.items?(h(),g("div",Yu,[(h(!0),g(J,null,Ve(e.items,s=>(h(),g(J,{key:s.text},["link"in s?(h(),q(rs,{key:0,item:s},null,8,["item"])):(h(),q(Wu,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):U("",!0),S(t.$slots,"default",{},void 0,!0)]))}});const Xu=F(Qu,[["__scopeId","data-v-44f96890"]]),Ju=["aria-expanded","aria-label"],Zu={key:0,class:"text"},ef={class:"menu"},tf=R({__name:"VPFlyout",props:{icon:null,button:null,label:null,items:null},setup(e){const t=ae(!1),n=ae();Cu({el:n,onBlur:s});function s(){t.value=!1}return(o,r)=>(h(),g("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:r[1]||(r[1]=i=>t.value=!0),onMouseleave:r[2]||(r[2]=i=>t.value=!1)},[y("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:r[0]||(r[0]=i=>t.value=!t.value)},[e.button||e.icon?(h(),g("span",Zu,[e.icon?(h(),q(dn(e.icon),{key:0,class:"option-icon"})):U("",!0),Te(" "+ce(e.button)+" ",1),V(ki,{class:"text-icon"})])):(h(),q(Du,{key:1,class:"icon"}))],8,Ju),y("div",ef,[V(Xu,{items:e.items},{default:A(()=>[S(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const fo=F(tf,[["__scopeId","data-v-a3cca9ba"]]),nf=R({__name:"VPNavBarMenuGroup",props:{item:null},setup(e){const{page:t}=ue();return(n,s)=>(h(),q(fo,{class:ve({VPNavBarMenuGroup:!0,active:_(Mt)(_(t).relativePath,e.item.activeMatch,!!e.item.activeMatch)}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),sf=e=>(Ze("data-v-af56e2d4"),e=e(),et(),e),of={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},rf=sf(()=>y("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),lf=R({__name:"VPNavBarMenu",setup(e){const{theme:t}=ue();return(n,s)=>_(t).nav?(h(),g("nav",of,[rf,(h(!0),g(J,null,Ve(_(t).nav,o=>(h(),g(J,{key:o.text},["link"in o?(h(),q(Pu,{key:0,item:o},null,8,["item"])):(h(),q(nf,{key:1,item:o},null,8,["item"]))],64))),128))])):U("",!0)}});const cf=F(lf,[["__scopeId","data-v-af56e2d4"]]),af={},uf={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ff=y("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),df=y("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),hf=[ff,df];function _f(e,t){return h(),g("svg",uf,hf)}const Pi=F(af,[["render",_f]]),pf={class:"items"},vf={class:"title"},mf=R({__name:"VPNavBarTranslations",setup(e){const{localeLinks:t,currentLang:n}=bn({correspondingLink:!0});return(s,o)=>_(t).length&&_(n).label?(h(),q(fo,{key:0,class:"VPNavBarTranslations",icon:Pi},{default:A(()=>[y("div",pf,[y("p",vf,ce(_(n).label),1),(h(!0),g(J,null,Ve(_(t),r=>(h(),q(rs,{key:r.link,item:r},null,8,["item"]))),128))])]),_:1})):U("",!0)}});const gf=F(mf,[["__scopeId","data-v-2e8c55c4"]]);const bf={},yf={class:"VPSwitch",type:"button",role:"switch"},wf={class:"check"},xf={key:0,class:"icon"};function $f(e,t){return h(),g("button",yf,[y("span",wf,[e.$slots.default?(h(),g("span",xf,[S(e.$slots,"default",{},void 0,!0)])):U("",!0)])])}const kf=F(bf,[["render",$f],["__scopeId","data-v-4f746a79"]]),Pf={},Cf={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Sf=wc('',9),Tf=[Sf];function Lf(e,t){return h(),g("svg",Cf,Tf)}const Vf=F(Pf,[["render",Lf]]),Ef={},Af={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Mf=y("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),If=[Mf];function Nf(e,t){return h(),g("svg",Af,If)}const Of=F(Ef,[["render",Nf]]),Bf=R({__name:"VPSwitchAppearance",setup(e){const{site:t,isDark:n}=ue(),s=ae(!1),o=typeof localStorage<"u"?r():()=>{};Be(()=>{s.value=document.documentElement.classList.contains("dark")});function r(){const i=window.matchMedia("(prefers-color-scheme: dark)"),l=document.documentElement.classList;let c=localStorage.getItem(nr),u=t.value.appearance==="dark"&&c==null||(c==="auto"||c==null?i.matches:c==="dark");i.onchange=v=>{c==="auto"&&p(u=v.matches)};function d(){p(u=!u),c=u?i.matches?"auto":"dark":i.matches?"light":"auto",localStorage.setItem(nr,c)}function p(v){const k=document.createElement("style");k.type="text/css",k.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(k),s.value=v,l[v?"add":"remove"]("dark"),window.getComputedStyle(k).opacity,document.head.removeChild(k)}return d}return Xe(s,i=>{n.value=i}),(i,l)=>(h(),q(kf,{class:"VPSwitchAppearance","aria-label":"toggle dark mode","aria-checked":s.value,onClick:_(o)},{default:A(()=>[V(Vf,{class:"sun"}),V(Of,{class:"moon"})]),_:1},8,["aria-checked","onClick"]))}});const ho=F(Bf,[["__scopeId","data-v-6767b96a"]]),Ff={key:0,class:"VPNavBarAppearance"},Hf=R({__name:"VPNavBarAppearance",setup(e){const{site:t}=ue();return(n,s)=>_(t).appearance?(h(),g("div",Ff,[V(ho)])):U("",!0)}});const Rf=F(Hf,[["__scopeId","data-v-47695040"]]),Df={discord:'',facebook:'',github:'',instagram:'',linkedin:'',mastodon:'',slack:'',twitter:'',youtube:''},Uf=["href","innerHTML"],zf=R({__name:"VPSocialLink",props:{icon:null,link:null},setup(e){const t=e,n=K(()=>typeof t.icon=="object"?t.icon.svg:Df[t.icon]);return(s,o)=>(h(),g("a",{class:"VPSocialLink",href:e.link,target:"_blank",rel:"noopener",innerHTML:_(n)},null,8,Uf))}});const jf=F(zf,[["__scopeId","data-v-e8fd947d"]]),Kf={class:"VPSocialLinks"},qf=R({__name:"VPSocialLinks",props:{links:null},setup(e){return(t,n)=>(h(),g("div",Kf,[(h(!0),g(J,null,Ve(e.links,({link:s,icon:o})=>(h(),q(jf,{key:s,icon:o,link:s},null,8,["icon","link"]))),128))]))}});const _o=F(qf,[["__scopeId","data-v-5786735d"]]),Wf=R({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=ue();return(n,s)=>_(t).socialLinks?(h(),q(_o,{key:0,class:"VPNavBarSocialLinks",links:_(t).socialLinks},null,8,["links"])):U("",!0)}});const Gf=F(Wf,[["__scopeId","data-v-50403232"]]),Yf={key:0,class:"group translations"},Qf={class:"trans-title"},Xf={key:1,class:"group"},Jf={class:"item appearance"},Zf={class:"label"},ed={class:"appearance-action"},td={key:2,class:"group"},nd={class:"item social-links"},sd=R({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=ue(),{localeLinks:s,currentLang:o}=bn({correspondingLink:!0}),r=K(()=>s.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(i,l)=>_(r)?(h(),q(fo,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:A(()=>[_(s).length&&_(o).label?(h(),g("div",Yf,[y("p",Qf,ce(_(o).label),1),(h(!0),g(J,null,Ve(_(s),c=>(h(),q(rs,{key:c.link,item:c},null,8,["item"]))),128))])):U("",!0),_(t).appearance?(h(),g("div",Xf,[y("div",Jf,[y("p",Zf,ce(_(n).darkModeSwitchLabel||"Appearance"),1),y("div",ed,[V(ho)])])])):U("",!0),_(n).socialLinks?(h(),g("div",td,[y("div",nd,[V(_o,{class:"social-links-list",links:_(n).socialLinks},null,8,["links"])])])):U("",!0)]),_:1})):U("",!0)}});const od=F(sd,[["__scopeId","data-v-b12f8a5b"]]),rd=e=>(Ze("data-v-1ccf3b66"),e=e(),et(),e),id=["aria-expanded"],ld=rd(()=>y("span",{class:"container"},[y("span",{class:"top"}),y("span",{class:"middle"}),y("span",{class:"bottom"})],-1)),cd=[ld],ad=R({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(h(),g("button",{type:"button",class:ve(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},cd,10,id))}});const ud=F(ad,[["__scopeId","data-v-1ccf3b66"]]),fd=e=>(Ze("data-v-f300cbe4"),e=e(),et(),e),dd={class:"container"},hd={class:"title"},_d={class:"content"},pd=fd(()=>y("div",{class:"curtain"},null,-1)),vd={class:"content-body"},md=R({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const{y:t}=ja(),{hasSidebar:n}=rt(),s=K(()=>({"has-sidebar":n.value,fill:t.value>0}));return(o,r)=>(h(),g("div",{class:ve(["VPNavBar",_(s)])},[y("div",dd,[y("div",hd,[V(cu,null,{"nav-bar-title-before":A(()=>[S(o.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":A(()=>[S(o.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),y("div",_d,[pd,y("div",vd,[S(o.$slots,"nav-bar-content-before",{},void 0,!0),V(pu,{class:"search"}),V(cf,{class:"menu"}),V(gf,{class:"translations"}),V(Rf,{class:"appearance"}),V(Gf,{class:"social-links"}),V(od,{class:"extra"}),S(o.$slots,"nav-bar-content-after",{},void 0,!0),V(ud,{class:"hamburger",active:e.isScreenOpen,onClick:r[0]||(r[0]=i=>o.$emit("toggle-screen"))},null,8,["active"])])])])],2))}});const gd=F(md,[["__scopeId","data-v-f300cbe4"]]);function bd(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1),jt=[],Un=!1,vo=-1,rn=void 0,Tt=void 0,ln=void 0,Ci=function(t){return jt.some(function(n){return!!(n.options.allowTouchMove&&n.options.allowTouchMove(t))})},zn=function(t){var n=t||window.event;return Ci(n.target)||n.touches.length>1?!0:(n.preventDefault&&n.preventDefault(),!1)},yd=function(t){if(ln===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);ln=document.body.style.paddingRight,document.body.style.paddingRight=o+s+"px"}}rn===void 0&&(rn=document.body.style.overflow,document.body.style.overflow="hidden")},wd=function(){ln!==void 0&&(document.body.style.paddingRight=ln,ln=void 0),rn!==void 0&&(document.body.style.overflow=rn,rn=void 0)},xd=function(){return window.requestAnimationFrame(function(){if(Tt===void 0){Tt={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 r=o-window.innerHeight;r&&n>=o&&(document.body.style.top=-(n+r))})},300)}})},$d=function(){if(Tt!==void 0){var t=-parseInt(document.body.style.top,10),n=-parseInt(document.body.style.left,10);document.body.style.position=Tt.position,document.body.style.top=Tt.top,document.body.style.left=Tt.left,window.scrollTo(n,t),Tt=void 0}},kd=function(t){return t?t.scrollHeight-t.scrollTop<=t.clientHeight:!1},Pd=function(t,n){var s=t.targetTouches[0].clientY-vo;return Ci(t.target)?!1:n&&n.scrollTop===0&&s>0||kd(n)&&s<0?zn(t):(t.stopPropagation(),!0)},Si=function(t,n){if(!t){console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");return}if(!jt.some(function(o){return o.targetElement===t})){var s={targetElement:t,options:n||{}};jt=[].concat(bd(jt),[s]),Dn?xd():yd(n),Dn&&(t.ontouchstart=function(o){o.targetTouches.length===1&&(vo=o.targetTouches[0].clientY)},t.ontouchmove=function(o){o.targetTouches.length===1&&Pd(o,t)},Un||(document.addEventListener("touchmove",zn,po?{passive:!1}:void 0),Un=!0))}},Ti=function(){Dn&&(jt.forEach(function(t){t.targetElement.ontouchstart=null,t.targetElement.ontouchmove=null}),Un&&(document.removeEventListener("touchmove",zn,po?{passive:!1}:void 0),Un=!1),vo=-1),Dn?$d():wd(),jt=[]};const Cd=R({__name:"VPNavScreenMenuLink",props:{text:null,link:null},setup(e){const t=qe("close-screen");return(n,s)=>(h(),q(gt,{class:"VPNavScreenMenuLink",href:e.link,onClick:_(t)},{default:A(()=>[Te(ce(e.text),1)]),_:1},8,["href","onClick"]))}});const Sd=F(Cd,[["__scopeId","data-v-0828e23b"]]),Td={},Ld={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Vd=y("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),Ed=[Vd];function Ad(e,t){return h(),g("svg",Ld,Ed)}const Md=F(Td,[["render",Ad]]),Id=R({__name:"VPNavScreenMenuGroupLink",props:{text:null,link:null},setup(e){const t=qe("close-screen");return(n,s)=>(h(),q(gt,{class:"VPNavScreenMenuGroupLink",href:e.link,onClick:_(t)},{default:A(()=>[Te(ce(e.text),1)]),_:1},8,["href","onClick"]))}});const Li=F(Id,[["__scopeId","data-v-54855d6a"]]),Nd={class:"VPNavScreenMenuGroupSection"},Od={key:0,class:"title"},Bd=R({__name:"VPNavScreenMenuGroupSection",props:{text:null,items:null},setup(e){return(t,n)=>(h(),g("div",Nd,[e.text?(h(),g("p",Od,ce(e.text),1)):U("",!0),(h(!0),g(J,null,Ve(e.items,s=>(h(),q(Li,{key:s.text,text:s.text,link:s.link},null,8,["text","link"]))),128))]))}});const Fd=F(Bd,[["__scopeId","data-v-001db4b5"]]),Hd=["aria-controls","aria-expanded"],Rd={class:"button-text"},Dd=["id"],Ud={key:1,class:"group"},zd=R({__name:"VPNavScreenMenuGroup",props:{text:null,items:null},setup(e){const t=e,n=ae(!1),s=K(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(r,i)=>(h(),g("div",{class:ve(["VPNavScreenMenuGroup",{open:n.value}])},[y("button",{class:"button","aria-controls":_(s),"aria-expanded":n.value,onClick:o},[y("span",Rd,ce(e.text),1),V(Md,{class:"button-icon"})],8,Hd),y("div",{id:_(s),class:"items"},[(h(!0),g(J,null,Ve(e.items,l=>(h(),g(J,{key:l.text},["link"in l?(h(),g("div",{key:l.text,class:"item"},[V(Li,{text:l.text,link:l.link},null,8,["text","link"])])):(h(),g("div",Ud,[V(Fd,{text:l.text,items:l.items},null,8,["text","items"])]))],64))),128))],8,Dd)],2))}});const jd=F(zd,[["__scopeId","data-v-97fb4d5c"]]),Kd={key:0,class:"VPNavScreenMenu"},qd=R({__name:"VPNavScreenMenu",setup(e){const{theme:t}=ue();return(n,s)=>_(t).nav?(h(),g("nav",Kd,[(h(!0),g(J,null,Ve(_(t).nav,o=>(h(),g(J,{key:o.text},["link"in o?(h(),q(Sd,{key:0,text:o.text,link:o.link},null,8,["text","link"])):(h(),q(jd,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):U("",!0)}}),Wd={key:0,class:"VPNavScreenAppearance"},Gd={class:"text"},Yd=R({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=ue();return(s,o)=>_(t).appearance?(h(),g("div",Wd,[y("p",Gd,ce(_(n).darkModeSwitchLabel||"Appearance"),1),V(ho)])):U("",!0)}});const Qd=F(Yd,[["__scopeId","data-v-b299f21f"]]),Xd={class:"list"},Jd=R({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=bn({correspondingLink:!0}),s=ae(!1);function o(){s.value=!s.value}return(r,i)=>_(t).length&&_(n).label?(h(),g("div",{key:0,class:ve(["VPNavScreenTranslations",{open:s.value}])},[y("button",{class:"title",onClick:o},[V(Pi,{class:"icon lang"}),Te(" "+ce(_(n).label)+" ",1),V(ki,{class:"icon chevron"})]),y("ul",Xd,[(h(!0),g(J,null,Ve(_(t),l=>(h(),g("li",{key:l.link,class:"item"},[V(gt,{class:"link",href:l.link},{default:A(()=>[Te(ce(l.text),1)]),_:2},1032,["href"])]))),128))])],2)):U("",!0)}});const Zd=F(Jd,[["__scopeId","data-v-b4768349"]]),eh=R({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=ue();return(n,s)=>_(t).socialLinks?(h(),q(_o,{key:0,class:"VPNavScreenSocialLinks",links:_(t).socialLinks},null,8,["links"])):U("",!0)}}),th={class:"container"},nh=R({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=ae(null);function n(){Si(t.value,{reserveScrollBarGap:!0})}function s(){Ti()}return(o,r)=>(h(),q(ss,{name:"fade",onEnter:n,onAfterLeave:s},{default:A(()=>[e.open?(h(),g("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t},[y("div",th,[S(o.$slots,"nav-screen-content-before",{},void 0,!0),V(qd,{class:"menu"}),V(Zd,{class:"translations"}),V(Qd,{class:"appearance"}),V(eh,{class:"social-links"}),S(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):U("",!0)]),_:3}))}});const sh=F(nh,[["__scopeId","data-v-2eac508f"]]),oh={class:"VPNav"},rh=R({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=tu();return Dt("close-screen",n),(o,r)=>(h(),g("header",oh,[V(gd,{"is-screen-open":_(t),onToggleScreen:_(s)},{"nav-bar-title-before":A(()=>[S(o.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":A(()=>[S(o.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":A(()=>[S(o.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":A(()=>[S(o.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),V(sh,{open:_(t)},{"nav-screen-content-before":A(()=>[S(o.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":A(()=>[S(o.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])]))}});const ih=F(rh,[["__scopeId","data-v-5292f7d8"]]),lh={},ch={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ah=y("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),uh=y("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),fh=y("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),dh=y("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),hh=[ah,uh,fh,dh];function _h(e,t){return h(),g("svg",ch,hh)}const ph=F(lh,[["render",_h]]),vh={key:0,class:"VPLocalNav"},mh=["aria-expanded"],gh={class:"menu-text"},bh=R({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t}=ue(),{hasSidebar:n}=rt();function s(){window.scrollTo({top:0,left:0,behavior:"smooth"})}return(o,r)=>_(n)?(h(),g("div",vh,[y("button",{class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:r[0]||(r[0]=i=>o.$emit("open-menu"))},[V(ph,{class:"menu-icon"}),y("span",gh,ce(_(t).sidebarMenuLabel||"Menu"),1)],8,mh),y("a",{class:"top-link",href:"#",onClick:s},ce(_(t).returnToTopLabel||"Return to top"),1)])):U("",!0)}});const yh=F(bh,[["__scopeId","data-v-2b1b9351"]]),wh={},xh={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},$h=y("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),kh=[$h];function Ph(e,t){return h(),g("svg",xh,kh)}const Ch=F(wh,[["render",Ph]]),Sh=e=>(Ze("data-v-abb8e6b0"),e=e(),et(),e),Th=["role"],Lh=Sh(()=>y("div",{class:"indicator"},null,-1)),Vh={key:1,class:"items"},Eh=R({__name:"VPSidebarItem",props:{item:null,depth:null},setup(e){const t=e,{collapsed:n,collapsible:s,isLink:o,isActiveLink:r,hasActiveLink:i,hasChildren:l,toggle:c}=Ya(K(()=>t.item)),u=K(()=>l.value?"section":"div"),d=K(()=>o.value?"a":"div"),p=K(()=>l.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),v=K(()=>o.value?void 0:"button"),k=K(()=>[[`level-${t.depth}`],{collapsible:s.value},{collapsed:n.value},{"is-link":o.value},{"is-active":r.value},{"has-active":i.value}]);function H(){!t.item.link&&c()}function N(){t.item.link&&c()}return(X,b)=>{const L=At("VPSidebarItem",!0);return h(),q(dn(_(u)),{class:ve(["VPSidebarItem",_(k)])},{default:A(()=>[e.item.text?(h(),g("div",{key:0,class:"item",role:_(v),onClick:H},[Lh,V(gt,{tag:_(d),class:"link",href:e.item.link},{default:A(()=>[(h(),q(dn(_(p)),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href"]),e.item.collapsed!=null?(h(),g("div",{key:0,class:"caret",role:"button",onClick:N},[V(Ch,{class:"caret-icon"})])):U("",!0)],8,Th)):U("",!0),e.item.items&&e.item.items.length?(h(),g("div",Vh,[e.depth<5?(h(!0),g(J,{key:0},Ve(e.item.items,I=>(h(),q(L,{key:I.text,item:I,depth:e.depth+1},null,8,["item","depth"]))),128)):U("",!0)])):U("",!0)]),_:1},8,["class"])}}});const Ah=F(Eh,[["__scopeId","data-v-abb8e6b0"]]),Vi=e=>(Ze("data-v-4ce0bd10"),e=e(),et(),e),Mh=Vi(()=>y("div",{class:"curtain"},null,-1)),Ih={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Nh=Vi(()=>y("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Oh=R({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const t=e,{sidebarGroups:n,hasSidebar:s}=rt();let o=ae(null);function r(){Si(o.value,{reserveScrollBarGap:!0})}function i(){Ti()}return Dr(async()=>{var l;t.open?(r(),(l=o.value)==null||l.focus()):i()}),(l,c)=>_(s)?(h(),g("aside",{key:0,class:ve(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:c[0]||(c[0]=ia(()=>{},["stop"]))},[Mh,y("nav",Ih,[Nh,S(l.$slots,"sidebar-nav-before",{},void 0,!0),(h(!0),g(J,null,Ve(_(n),u=>(h(),g("div",{key:u.text,class:"group"},[V(Ah,{item:u,depth:0},null,8,["item"])]))),128)),S(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):U("",!0)}});const Bh=F(Oh,[["__scopeId","data-v-4ce0bd10"]]),Fh={},Hh={class:"VPPage"};function Rh(e,t){const n=At("Content");return h(),g("div",Hh,[V(n)])}const Dh=F(Fh,[["render",Rh]]),Uh=R({__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&&os.test(t.href)),o=K(()=>t.tag?t.tag:t.href?"a":"button");return(r,i)=>(h(),q(dn(_(o)),{class:ve(["VPButton",_(n)]),href:e.href?_(vn)(e.href):void 0,target:_(s)?"_blank":void 0,rel:_(s)?"noreferrer":void 0},{default:A(()=>[Te(ce(e.text),1)]),_:1},8,["class","href","target","rel"]))}});const zh=F(Uh,[["__scopeId","data-v-cefd1ee5"]]),jh=e=>(Ze("data-v-097cd59b"),e=e(),et(),e),Kh={class:"container"},qh={class:"main"},Wh={key:0,class:"name"},Gh={class:"clip"},Yh={key:1,class:"text"},Qh={key:2,class:"tagline"},Xh={key:3,class:"actions"},Jh={key:0,class:"image"},Zh={class:"image-container"},e0=jh(()=>y("div",{class:"image-bg"},null,-1)),t0=R({__name:"VPHero",props:{name:null,text:null,tagline:null,image:null,actions:null},setup(e){const t=qe("hero-image-slot-exists");return(n,s)=>(h(),g("div",{class:ve(["VPHero",{"has-image":e.image||_(t)}])},[y("div",Kh,[y("div",qh,[e.name?(h(),g("h1",Wh,[y("span",Gh,ce(e.name),1)])):U("",!0),e.text?(h(),g("p",Yh,ce(e.text),1)):U("",!0),e.tagline?(h(),g("p",Qh,ce(e.tagline),1)):U("",!0),e.actions?(h(),g("div",Xh,[(h(!0),g(J,null,Ve(e.actions,o=>(h(),g("div",{key:o.link,class:"action"},[V(zh,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link},null,8,["theme","text","href"])]))),128))])):U("",!0)]),e.image||_(t)?(h(),g("div",Jh,[y("div",Zh,[e0,S(n.$slots,"home-hero-image",{},()=>[e.image?(h(),q(ao,{key:0,class:"image-src",image:e.image},null,8,["image"])):U("",!0)],!0)])])):U("",!0)])],2))}});const n0=F(t0,[["__scopeId","data-v-097cd59b"]]),s0=R({__name:"VPHomeHero",setup(e){const{frontmatter:t}=ue();return(n,s)=>_(t).hero?(h(),q(n0,{key:0,class:"VPHomeHero",name:_(t).hero.name,text:_(t).hero.text,tagline:_(t).hero.tagline,image:_(t).hero.image,actions:_(t).hero.actions},{"home-hero-image":A(()=>[S(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):U("",!0)}}),o0={},r0={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},i0=y("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),l0=[i0];function c0(e,t){return h(),g("svg",r0,l0)}const a0=F(o0,[["render",c0]]),u0={class:"box"},f0={key:1,class:"icon"},d0=["innerHTML"],h0=["innerHTML"],_0={key:2,class:"link-text"},p0={class:"link-text-value"},v0=R({__name:"VPFeature",props:{icon:null,title:null,details:null,link:null,linkText:null},setup(e){return(t,n)=>(h(),q(gt,{class:"VPFeature",href:e.link,"no-icon":!0},{default:A(()=>[y("article",u0,[typeof e.icon=="object"?(h(),q(ao,{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?(h(),g("div",f0,ce(e.icon),1)):U("",!0),y("h2",{class:"title",innerHTML:e.title},null,8,d0),y("p",{class:"details",innerHTML:e.details},null,8,h0),e.linkText?(h(),g("div",_0,[y("p",p0,[Te(ce(e.linkText)+" ",1),V(a0,{class:"link-text-icon"})])])):U("",!0)])]),_:1},8,["href"]))}});const m0=F(v0,[["__scopeId","data-v-fdad8e51"]]),g0={key:0,class:"VPFeatures"},b0={class:"container"},y0={class:"items"},w0=R({__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?(h(),g("div",g0,[y("div",b0,[y("div",y0,[(h(!0),g(J,null,Ve(e.features,r=>(h(),g("div",{key:r.title,class:ve(["item",[_(n)]])},[V(m0,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText},null,8,["icon","title","details","link","link-text"])],2))),128))])])])):U("",!0)}});const x0=F(w0,[["__scopeId","data-v-6b2dc790"]]),$0=R({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=ue();return(n,s)=>_(t).features?(h(),q(x0,{key:0,class:"VPHomeFeatures",features:_(t).features},null,8,["features"])):U("",!0)}}),k0={class:"VPHome"},P0=R({__name:"VPHome",setup(e){return(t,n)=>{const s=At("Content");return h(),g("div",k0,[S(t.$slots,"home-hero-before",{},void 0,!0),V(s0,null,{"home-hero-image":A(()=>[S(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),S(t.$slots,"home-hero-after",{},void 0,!0),S(t.$slots,"home-features-before",{},void 0,!0),V($0),S(t.$slots,"home-features-after",{},void 0,!0),V(s)])}}});const C0=F(P0,[["__scopeId","data-v-686333dc"]]);function S0(){const{hasSidebar:e}=rt(),t=Is("(min-width: 960px)"),n=Is("(min-width: 1280px)");return{isAsideEnabled:K(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const T0=71;function L0(e,t){if(e===!1)return[];let n=[];return document.querySelectorAll("h2, h3, h4, h5, h6").forEach(s=>{if(s.textContent&&s.id){let o=s.textContent;if(t===!1){const r=s.cloneNode(!0);for(const i of r.querySelectorAll(".VPBadge"))i.remove();o=r.textContent||""}n.push({level:Number(s.tagName[1]),title:o.replace(/\s+#\s*$/,""),link:`#${s.id}`})}}),V0(n,e)}function V0(e,t){const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2;return E0(e,typeof n=="number"?[n,n]:n==="deep"?[2,6]:n)}function E0(e,t){const n=[];return e=e.map(s=>({...s})),e.forEach((s,o)=>{s.level>=t[0]&&s.level<=t[1]&&A0(o,e,t)&&n.push(s)}),n}function A0(e,t,n){if(e===0)return!0;const s=t[e];for(let o=e-1;o>=0;o--){const r=t[o];if(r.level=n[0]&&r.level<=n[1])return r.children==null&&(r.children=[]),r.children.push(s),!1}return!0}function M0(e,t){const{isAsideEnabled:n}=S0(),s=Ka(r,100);let o=null;Be(()=>{requestAnimationFrame(r),window.addEventListener("scroll",s)}),no(()=>{i(location.hash)}),vt(()=>{window.removeEventListener("scroll",s)});function r(){if(!n.value)return;const l=[].slice.call(e.value.querySelectorAll(".outline-link")),c=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter(k=>l.some(H=>H.hash===k.hash&&k.offsetParent!==null)),u=window.scrollY,d=window.innerHeight,p=document.body.offsetHeight,v=Math.abs(u+d-p)<1;if(c.length&&v){i(c[c.length-1].hash);return}for(let k=0;k{const s=At("VPDocAsideOutlineItem",!0);return h(),g("ul",{class:ve(e.root?"root":"nested")},[(h(!0),g(J,null,Ve(e.headers,({children:o,link:r,title:i})=>(h(),g("li",null,[y("a",{class:"outline-link",href:r,onClick:n[0]||(n[0]=(...l)=>e.onClick&&e.onClick(...l))},ce(i),9,N0),o!=null&&o.length?(h(),q(s,{key:0,headers:o,onClick:e.onClick},null,8,["headers","onClick"])):U("",!0)]))),256))],2)}}});const B0=F(O0,[["__scopeId","data-v-27c78d9b"]]),F0=e=>(Ze("data-v-4adf50f8"),e=e(),et(),e),H0={class:"content"},R0={class:"outline-title"},D0={"aria-labelledby":"doc-outline-aria-label"},U0=F0(()=>y("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),z0=R({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=ue(),s=K(()=>t.value.outline??n.value.outline),o=qe("onContentUpdated");o.value=()=>{r.value=L0(s.value,n.value.outlineBadges)};const r=ae([]),i=K(()=>r.value.length>0),l=ae(),c=ae();M0(l,c);function u({target:d}){const p="#"+d.href.split("#")[1],v=document.querySelector(decodeURIComponent(p));v==null||v.focus()}return(d,p)=>(h(),g("div",{class:ve(["VPDocAsideOutline",{"has-outline":_(i)}]),ref_key:"container",ref:l},[y("div",H0,[y("div",{class:"outline-marker",ref_key:"marker",ref:c},null,512),y("div",R0,ce(typeof _(n).outline=="object"&&!Array.isArray(_(n).outline)&&_(n).outline.label||_(n).outlineTitle||"On this page"),1),y("nav",D0,[U0,V(B0,{headers:r.value,root:!0,onClick:u},null,8,["headers"])])])],2))}});const j0=F(z0,[["__scopeId","data-v-4adf50f8"]]),K0={class:"VPDocAsideCarbonAds"},q0=R({__name:"VPDocAsideCarbonAds",props:{carbonAds:null},setup(e){const t=()=>null;return(n,s)=>(h(),g("div",K0,[V(_(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),W0=e=>(Ze("data-v-6ec2fad3"),e=e(),et(),e),G0={class:"VPDocAside"},Y0=W0(()=>y("div",{class:"spacer"},null,-1)),Q0=R({__name:"VPDocAside",setup(e){const{theme:t}=ue();return(n,s)=>(h(),g("div",G0,[S(n.$slots,"aside-top",{},void 0,!0),S(n.$slots,"aside-outline-before",{},void 0,!0),V(j0),S(n.$slots,"aside-outline-after",{},void 0,!0),Y0,S(n.$slots,"aside-ads-before",{},void 0,!0),_(t).carbonAds?(h(),q(q0,{key:0,"carbon-ads":_(t).carbonAds},null,8,["carbon-ads"])):U("",!0),S(n.$slots,"aside-ads-after",{},void 0,!0),S(n.$slots,"aside-bottom",{},void 0,!0)]))}});const X0=F(Q0,[["__scopeId","data-v-6ec2fad3"]]);function J0(){const{theme:e,page:t}=ue();return K(()=>{const{text:n="Edit this page",pattern:s=""}=e.value.editLink||{},{relativePath:o}=t.value;return{url:s.replace(/:path/g,o),text:n}})}function Z0(){const{page:e,theme:t,frontmatter:n}=ue();return K(()=>{const s=wi(t.value.sidebar,e.value.relativePath),o=Wa(s),r=o.findIndex(i=>Mt(e.value.relativePath,i.link));return{prev:n.value.prev?{...o[r-1],text:n.value.prev}:o[r-1],next:n.value.next?{...o[r+1],text:n.value.next}:o[r+1]}})}const e_={},t_={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},n_=y("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),s_=y("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),o_=[n_,s_];function r_(e,t){return h(),g("svg",t_,o_)}const i_=F(e_,[["render",r_]]),l_={class:"VPLastUpdated"},c_=["datetime"],a_=R({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n}=ue(),s=K(()=>new Date(n.value.lastUpdated)),o=K(()=>s.value.toISOString()),r=ae("");return Be(()=>{Et(()=>{r.value=s.value.toLocaleString(window.navigator.language)})}),(i,l)=>(h(),g("p",l_,[Te(ce(_(t).lastUpdatedText||"Last updated")+": ",1),y("time",{datetime:_(o)},ce(r.value),9,c_)]))}});const u_=F(a_,[["__scopeId","data-v-6141eb6b"]]),f_={key:0,class:"VPDocFooter"},d_={key:0,class:"edit-info"},h_={key:0,class:"edit-link"},__={key:1,class:"last-updated"},p_={key:1,class:"prev-next"},v_={class:"pager"},m_=["href"],g_=["innerHTML"],b_=["innerHTML"],y_=["href"],w_=["innerHTML"],x_=["innerHTML"],$_=R({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=ue(),o=J0(),r=Z0(),i=K(()=>t.value.editLink&&s.value.editLink!==!1),l=K(()=>n.value.lastUpdated&&s.value.lastUpdated!==!1),c=K(()=>i.value||l.value||r.value.prev||r.value.next);return(u,d)=>{var p,v;return _(c)?(h(),g("footer",f_,[_(i)||_(l)?(h(),g("div",d_,[_(i)?(h(),g("div",h_,[V(gt,{class:"edit-link-button",href:_(o).url,"no-icon":!0},{default:A(()=>[V(i_,{class:"edit-link-icon"}),Te(" "+ce(_(o).text),1)]),_:1},8,["href"])])):U("",!0),_(l)?(h(),g("div",__,[V(u_)])):U("",!0)])):U("",!0),_(r).prev||_(r).next?(h(),g("div",p_,[y("div",v_,[_(r).prev?(h(),g("a",{key:0,class:"pager-link prev",href:_(vn)(_(r).prev.link)},[y("span",{class:"desc",innerHTML:((p=_(t).docFooter)==null?void 0:p.prev)||"Previous page"},null,8,g_),y("span",{class:"title",innerHTML:_(r).prev.text},null,8,b_)],8,m_)):U("",!0)]),y("div",{class:ve(["pager",{"has-prev":_(r).prev}])},[_(r).next?(h(),g("a",{key:0,class:"pager-link next",href:_(vn)(_(r).next.link)},[y("span",{class:"desc",innerHTML:((v=_(t).docFooter)==null?void 0:v.next)||"Next page"},null,8,w_),y("span",{class:"title",innerHTML:_(r).next.text},null,8,x_)],8,y_)):U("",!0)],2)])):U("",!0)])):U("",!0)}}});const k_=F($_,[["__scopeId","data-v-536d018a"]]),P_=e=>(Ze("data-v-29f46551"),e=e(),et(),e),C_={class:"container"},S_={key:0,class:"aside"},T_=P_(()=>y("div",{class:"aside-curtain"},null,-1)),L_={class:"aside-container"},V_={class:"aside-content"},E_={class:"content"},A_={class:"content-container"},M_={class:"main"},I_=R({__name:"VPDoc",setup(e){const t=mt(),{hasSidebar:n,hasAside:s}=rt(),o=K(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,"")),r=ae();return Dt("onContentUpdated",r),(i,l)=>{const c=At("Content");return h(),g("div",{class:ve(["VPDoc",{"has-sidebar":_(n),"has-aside":_(s)}])},[y("div",C_,[_(s)?(h(),g("div",S_,[T_,y("div",L_,[y("div",V_,[V(X0,null,{"aside-top":A(()=>[S(i.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":A(()=>[S(i.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":A(()=>[S(i.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":A(()=>[S(i.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":A(()=>[S(i.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":A(()=>[S(i.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])])):U("",!0),y("div",E_,[y("div",A_,[S(i.$slots,"doc-before",{},void 0,!0),y("main",M_,[V(c,{class:ve(["vp-doc",_(o)]),onContentUpdated:r.value},null,8,["class","onContentUpdated"])]),S(i.$slots,"doc-footer-before",{},void 0,!0),V(k_),S(i.$slots,"doc-after",{},void 0,!0)])])])],2)}}});const N_=F(I_,[["__scopeId","data-v-29f46551"]]),O_=R({__name:"VPContent",setup(e){const t=mt(),{frontmatter:n}=ue(),{hasSidebar:s}=rt(),o=qe("NotFound");return(r,i)=>(h(),g("div",{class:ve(["VPContent",{"has-sidebar":_(s),"is-home":_(n).layout==="home"}]),id:"VPContent"},[_(t).component===_(o)?(h(),q(_(o),{key:0})):_(n).layout==="page"?(h(),q(Dh,{key:1})):_(n).layout==="home"?(h(),q(C0,{key:2},{"home-hero-before":A(()=>[S(r.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-image":A(()=>[S(r.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":A(()=>[S(r.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":A(()=>[S(r.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":A(()=>[S(r.$slots,"home-features-after",{},void 0,!0)]),_:3})):(h(),q(N_,{key:3},{"doc-footer-before":A(()=>[S(r.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":A(()=>[S(r.$slots,"doc-before",{},void 0,!0)]),"doc-after":A(()=>[S(r.$slots,"doc-after",{},void 0,!0)]),"aside-top":A(()=>[S(r.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":A(()=>[S(r.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":A(()=>[S(r.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":A(()=>[S(r.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":A(()=>[S(r.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":A(()=>[S(r.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});const B_=F(O_,[["__scopeId","data-v-6b4f7ebb"]]),F_={class:"container"},H_=["innerHTML"],R_=["innerHTML"],D_=R({__name:"VPFooter",setup(e){const{theme:t}=ue(),{hasSidebar:n}=rt();return(s,o)=>_(t).footer?(h(),g("footer",{key:0,class:ve(["VPFooter",{"has-sidebar":_(n)}])},[y("div",F_,[_(t).footer.message?(h(),g("p",{key:0,class:"message",innerHTML:_(t).footer.message},null,8,H_)):U("",!0),_(t).footer.copyright?(h(),g("p",{key:1,class:"copyright",innerHTML:_(t).footer.copyright},null,8,R_)):U("",!0)])],2)):U("",!0)}});const U_=F(D_,[["__scopeId","data-v-9d9a7257"]]),z_={key:0,class:"Layout"},j_=R({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=rt(),o=mt();Xe(()=>o.path,s),Ga(t,s),Dt("close-sidebar",s),Dt("is-sidebar-open",t);const{frontmatter:r}=ue(),i=Vc(),l=K(()=>!!i["home-hero-image"]);return Dt("hero-image-slot-exists",l),(c,u)=>{const d=At("Content");return _(r).layout!==!1?(h(),g("div",z_,[S(c.$slots,"layout-top",{},void 0,!0),V(Xa),V(eu,{class:"backdrop",show:_(t),onClick:_(s)},null,8,["show","onClick"]),V(ih,null,{"nav-bar-title-before":A(()=>[S(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":A(()=>[S(c.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":A(()=>[S(c.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":A(()=>[S(c.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":A(()=>[S(c.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":A(()=>[S(c.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),V(yh,{open:_(t),onOpenMenu:_(n)},null,8,["open","onOpenMenu"]),V(Bh,{open:_(t)},{"sidebar-nav-before":A(()=>[S(c.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":A(()=>[S(c.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),V(B_,null,{"home-hero-before":A(()=>[S(c.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-image":A(()=>[S(c.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":A(()=>[S(c.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":A(()=>[S(c.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":A(()=>[S(c.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":A(()=>[S(c.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":A(()=>[S(c.$slots,"doc-before",{},void 0,!0)]),"doc-after":A(()=>[S(c.$slots,"doc-after",{},void 0,!0)]),"aside-top":A(()=>[S(c.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":A(()=>[S(c.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":A(()=>[S(c.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":A(()=>[S(c.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":A(()=>[S(c.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":A(()=>[S(c.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),V(U_),S(c.$slots,"layout-bottom",{},void 0,!0)])):(h(),q(d,{key:1}))}}});const K_=F(j_,[["__scopeId","data-v-dfa83ff9"]]),is=e=>(Ze("data-v-4677c19e"),e=e(),et(),e),q_={class:"NotFound"},W_=is(()=>y("p",{class:"code"},"404",-1)),G_=is(()=>y("h1",{class:"title"},"PAGE NOT FOUND",-1)),Y_=is(()=>y("div",{class:"divider"},null,-1)),Q_=is(()=>y("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)),X_={class:"action"},J_=["href"],Z_=R({__name:"NotFound",setup(e){const{site:t}=ue(),{localeLinks:n}=bn({removeCurrent:!1}),s=ae("/");return Be(()=>{var r;const o=window.location.pathname.replace(t.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(s.value=((r=n.value.find(({link:i})=>i.startsWith(o)))==null?void 0:r.link)||n.value[0].link)}),(o,r)=>(h(),g("div",q_,[W_,G_,Y_,Q_,y("div",X_,[y("a",{class:"link",href:_(pn)(s.value),"aria-label":"go to home"}," Take me home ",8,J_)])]))}});const e1=F(Z_,[["__scopeId","data-v-4677c19e"]]);const t1={Layout:K_,NotFound:e1,enhanceApp:({app:e})=>{e.component("Badge",pa)}};const Kt={...t1};function n1(e,t){let n=[],s=!0;const o=r=>{if(s){s=!1;return}n.forEach(i=>document.head.removeChild(i)),n=[],r.forEach(i=>{const l=s1(i);document.head.appendChild(l),n.push(l)})};Et(()=>{const r=e.data,i=t.value,l=r&&r.description,c=r&&r.frontmatter.head||[];document.title=_i(i,r),document.querySelector("meta[name=description]").setAttribute("content",l||i.description),o(pi(i.head,r1(c)))})}function s1([e,t,n]){const s=document.createElement(e);for(const o in t)s.setAttribute(o,t[o]);return n&&(s.innerHTML=n),s}function o1(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function r1(e){return e.filter(t=>!o1(t))}const bs=new Set,Ei=()=>document.createElement("link"),i1=e=>{const t=Ei();t.rel="prefetch",t.href=e,document.head.appendChild(t)},l1=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let Vn;const c1=ke&&(Vn=Ei())&&Vn.relList&&Vn.relList.supports&&Vn.relList.supports("prefetch")?i1:l1;function a1(){if(!ke||!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(r=>{r.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!bs.has(c)){bs.add(c);const u=gi(c);c1(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(r=>{const{target:i}=r,{hostname:l,pathname:c}=new URL(r.href instanceof SVGAnimatedString?r.href.animVal:r.href,r.baseURI),u=c.match(/\.\w+$/);u&&u[0]!==".html"||i!=="_blank"&&l===location.hostname&&(c!==location.pathname?n.observe(r):bs.add(c))})})};Be(s);const o=mt();Xe(()=>o.path,s),vt(()=>{n&&n.disconnect()})}const u1=R({setup(e,{slots:t}){const n=ae(!1);return Be(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function f1(){if(ke){const e=new Map;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const o=n.parentElement,r=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!o||!r)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(o.className);let l="";r.querySelectorAll("span.line:not(.diff.remove)").forEach(c=>l+=(c.textContent||"")+`
+`),l=l.slice(0,-1),i&&(l=l.replace(/^ *(\$|>) /gm,"").trim()),d1(l).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const c=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,c)})}})}}async function d1(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(),o=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),o&&(s.removeAllRanges(),s.addRange(o)),n&&n.focus()}}function h1(){ke&&window.addEventListener("click",e=>{var n,s;const t=e.target;if(t.matches(".vp-code-group input")){const o=(n=t.parentElement)==null?void 0:n.parentElement,r=Array.from((o==null?void 0:o.querySelectorAll("input"))||[]).indexOf(t),i=o==null?void 0:o.querySelector('div[class*="language-"].active'),l=(s=o==null?void 0:o.querySelectorAll('div[class*="language-"]'))==null?void 0:s[r];i&&l&&i!==l&&(i.classList.remove("active"),l.classList.add("active"))}})}const Ai=Kt.NotFound||(()=>"404 Not Found"),_1=R({name:"VitePressApp",setup(){const{site:e}=mi();return Be(()=>{Et(()=>{document.documentElement.lang=e.value.lang,document.documentElement.dir=e.value.dir})}),a1(),f1(),h1(),Kt.setup&&Kt.setup(),()=>Rn(Kt.Layout)}});async function p1(){const e=m1(),t=v1();t.provide(bi,e);const n=ka(e.route);return t.provide(vi,n),t.provide("NotFound",Ai),t.component("Content",La),t.component("ClientOnly",u1),Object.defineProperty(t.config.globalProperties,"$frontmatter",{get(){return n.frontmatter.value}}),Kt.enhanceApp&&await Kt.enhanceApp({app:t,router:e,siteData:ft}),{app:t,router:e,data:n}}function v1(){return aa(_1)}function m1(){let e=ke,t;return Sa(n=>{let s=gi(n);return e&&(t=s),(e||t===s)&&(s=s.replace(/\.js$/,".lean.js")),ke&&(e=!1),ha(()=>import(s),[])},Ai)}ke&&p1().then(({app:e,router:t,data:n})=>{t.go().then(()=>{n1(t.route,n.site),e.mount("#app")})});export{F as _,y as a,Te as b,g as c,p1 as createApp,h as o};
diff --git a/assets/index.md.225ffacd.js b/assets/index.md.225ffacd.js
new file mode 100644
index 0000000..67bcaf3
--- /dev/null
+++ b/assets/index.md.225ffacd.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as i,a}from"./app.2599546b.js";const l="/roadmap.jpg",x=JSON.parse('{"title":"前端精进之路","titleTemplate":"FERoad","description":"","frontmatter":{"layout":"home","title":"前端精进之路","titleTemplate":"FERoad","hero":{"name":"前端精进之路","text":"WEB前端进阶知识库","tagline":"世事无常,精进不已","image":{"src":"/home.svg","alt":"VitePress"},"actions":[{"theme":"brand","text":"开始","link":"/interview/resume"},{"theme":"alt","text":"GitHub","link":"https://github.com/mewcoder/feroad"}]},"features":[{"icon":"🧭","title":"学习路线","details":null},{"icon":"🚀","title":"前端进阶","details":null},{"icon":"📡","title":"面试指南","details":null},{"icon":"📚","title":"学习资源","details":null},{"icon":"🛠","title":"工具收集","details":null},{"icon":"📈","title":"技术成长","details":null}]},"headers":[],"relativePath":"index.md"}'),n={name:"index.md"},o=a("img",{src:l,width:"900",style:{margin:"100px auto 0"}},null,-1),s=[o];function r(c,d,m,p,u,_){return i(),e("div",null,s)}const f=t(n,[["render",r]]);export{x as __pageData,f as default};
diff --git a/assets/index.md.225ffacd.lean.js b/assets/index.md.225ffacd.lean.js
new file mode 100644
index 0000000..67bcaf3
--- /dev/null
+++ b/assets/index.md.225ffacd.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as i,a}from"./app.2599546b.js";const l="/roadmap.jpg",x=JSON.parse('{"title":"前端精进之路","titleTemplate":"FERoad","description":"","frontmatter":{"layout":"home","title":"前端精进之路","titleTemplate":"FERoad","hero":{"name":"前端精进之路","text":"WEB前端进阶知识库","tagline":"世事无常,精进不已","image":{"src":"/home.svg","alt":"VitePress"},"actions":[{"theme":"brand","text":"开始","link":"/interview/resume"},{"theme":"alt","text":"GitHub","link":"https://github.com/mewcoder/feroad"}]},"features":[{"icon":"🧭","title":"学习路线","details":null},{"icon":"🚀","title":"前端进阶","details":null},{"icon":"📡","title":"面试指南","details":null},{"icon":"📚","title":"学习资源","details":null},{"icon":"🛠","title":"工具收集","details":null},{"icon":"📈","title":"技术成长","details":null}]},"headers":[],"relativePath":"index.md"}'),n={name:"index.md"},o=a("img",{src:l,width:"900",style:{margin:"100px auto 0"}},null,-1),s=[o];function r(c,d,m,p,u,_){return i(),e("div",null,s)}const f=t(n,[["render",r]]);export{x as __pageData,f 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/interview_question.md.d61bba66.js b/assets/interview_question.md.d61bba66.js
new file mode 100644
index 0000000..9105726
--- /dev/null
+++ b/assets/interview_question.md.d61bba66.js
@@ -0,0 +1 @@
+import{_ as t,c as a,o as s,a as e,b as o}from"./app.2599546b.js";const m=JSON.parse('{"title":"面试题库导航","description":"","frontmatter":{},"headers":[],"relativePath":"interview/question.md"}'),r={name:"interview/question.md"},n=e("h1",{id:"面试题库导航",tabindex:"-1"},[o("面试题库导航 "),e("a",{class:"header-anchor",href:"#面试题库导航","aria-hidden":"true"},"#")],-1),i=[n];function c(d,_,p,h,l,u){return s(),a("div",null,i)}const x=t(r,[["render",c]]);export{m as __pageData,x as default};
diff --git a/assets/interview_question.md.d61bba66.lean.js b/assets/interview_question.md.d61bba66.lean.js
new file mode 100644
index 0000000..9105726
--- /dev/null
+++ b/assets/interview_question.md.d61bba66.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as a,o as s,a as e,b as o}from"./app.2599546b.js";const m=JSON.parse('{"title":"面试题库导航","description":"","frontmatter":{},"headers":[],"relativePath":"interview/question.md"}'),r={name:"interview/question.md"},n=e("h1",{id:"面试题库导航",tabindex:"-1"},[o("面试题库导航 "),e("a",{class:"header-anchor",href:"#面试题库导航","aria-hidden":"true"},"#")],-1),i=[n];function c(d,_,p,h,l,u){return s(),a("div",null,i)}const x=t(r,[["render",c]]);export{m as __pageData,x as default};
diff --git a/assets/interview_resume.md.4045376b.js b/assets/interview_resume.md.4045376b.js
new file mode 100644
index 0000000..91be640
--- /dev/null
+++ b/assets/interview_resume.md.4045376b.js
@@ -0,0 +1 @@
+import{_ as t,c as a,o as r,a as e,b as s}from"./app.2599546b.js";const f=JSON.parse('{"title":"如何写好简历","description":"","frontmatter":{},"headers":[],"relativePath":"interview/resume.md"}'),o={name:"interview/resume.md"},n=e("h1",{id:"如何写好简历",tabindex:"-1"},[s("如何写好简历 "),e("a",{class:"header-anchor",href:"#如何写好简历","aria-hidden":"true"},"#")],-1),c=[n];function i(d,_,m,p,h,l){return r(),a("div",null,c)}const x=t(o,[["render",i]]);export{f as __pageData,x as default};
diff --git a/assets/interview_resume.md.4045376b.lean.js b/assets/interview_resume.md.4045376b.lean.js
new file mode 100644
index 0000000..91be640
--- /dev/null
+++ b/assets/interview_resume.md.4045376b.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as a,o as r,a as e,b as s}from"./app.2599546b.js";const f=JSON.parse('{"title":"如何写好简历","description":"","frontmatter":{},"headers":[],"relativePath":"interview/resume.md"}'),o={name:"interview/resume.md"},n=e("h1",{id:"如何写好简历",tabindex:"-1"},[s("如何写好简历 "),e("a",{class:"header-anchor",href:"#如何写好简历","aria-hidden":"true"},"#")],-1),c=[n];function i(d,_,m,p,h,l){return r(),a("div",null,c)}const x=t(o,[["render",i]]);export{f as __pageData,x as default};
diff --git a/assets/style.d317d956.css b/assets/style.d317d956.css
new file mode 100644
index 0000000..fce24d8
--- /dev/null
+++ b/assets/style.d317d956.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}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-gray: #8e8e93;--vp-c-text-light-1: rgba(60, 60, 67, .92);--vp-c-text-light-2: rgba(60, 60, 67, .7);--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: #eab308;--vp-c-yellow-light: #facc15;--vp-c-yellow-lighter: #fde047;--vp-c-yellow-dark: #ca8a04;--vp-c-yellow-darker: #a16207;--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: #ffffff;--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: "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-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-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-hover-bg: rgba(255, 255, 255, .05);--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);--vp-custom-block-info-code-bg: var(--vp-c-mute);--vp-custom-block-tip-border: var(--vp-c-green-dimm-3);--vp-custom-block-tip-text: var(--vp-c-green);--vp-custom-block-tip-bg: var(--vp-c-green-dimm-1);--vp-custom-block-tip-code-bg: var(--vp-custom-block-tip-bg);--vp-custom-block-warning-border: var(--vp-c-yellow-dimm-3);--vp-custom-block-warning-text: var(--vp-c-yellow);--vp-custom-block-warning-bg: var(--vp-c-yellow-dimm-1);--vp-custom-block-warning-code-bg: var(--vp-custom-block-warning-bg);--vp-custom-block-danger-border: var(--vp-c-red-dimm-3);--vp-custom-block-danger-text: var(--vp-c-red);--vp-custom-block-danger-bg: var(--vp-c-red-dimm-1);--vp-custom-block-danger-code-bg: var(--vp-custom-block-danger-bg);--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);--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)}*,: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:none;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.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:700}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;transition:opacity .25s}.custom-block a:hover{opacity:.6}.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);background-color:var(--vp-code-tab-bg);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 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{color:var(--vp-c-brand-dark)}.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;text-decoration:underline;transition:opacity .25s}.vp-doc .custom-block a:hover{opacity:.6}.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:16px 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:16px;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:8px;right:8px;z-index:3;display:block;justify-content:center;align-items:center;border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-block-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:opacity .4s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover{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;left:-65px;display:flex;justify-content:center;align-items:center;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:6px;right:12px;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-b3ca8c40]{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-b3ca8c40],h2 .VPBadge[data-v-b3ca8c40],h3 .VPBadge[data-v-b3ca8c40],h4 .VPBadge[data-v-b3ca8c40],h5 .VPBadge[data-v-b3ca8c40],h6 .VPBadge[data-v-b3ca8c40]{vertical-align:top}h2 .VPBadge[data-v-b3ca8c40]{border-radius:11px;line-height:20px}.VPBadge.info[data-v-b3ca8c40]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-b3ca8c40]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-b3ca8c40]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-b3ca8c40]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPSkipLink[data-v-95909ad5]{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-95909ad5]:focus{height:auto;width:auto;clip:auto;clip-path:none}.dark .VPSkipLink[data-v-95909ad5]{color:var(--vp-c-green)}@media (min-width: 1280px){.VPSkipLink[data-v-95909ad5]{top:14px;left:16px}}.VPBackdrop[data-v-d5f875a4]{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-d5f875a4],.VPBackdrop.fade-leave-to[data-v-d5f875a4]{opacity:0}.VPBackdrop.fade-leave-active[data-v-d5f875a4]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-d5f875a4]{display:none}}html:not(.dark) .VPImage.dark[data-v-ff8ace6f]{display:none}.dark .VPImage.light[data-v-ff8ace6f]{display:none}.title[data-v-2b0d59c2]{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-2b0d59c2]:hover{opacity:.6}@media (min-width: 960px){.title[data-v-2b0d59c2]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-2b0d59c2]{border-bottom-color:var(--vp-c-divider)}}[data-v-2b0d59c2] .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:"\bb "}.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}}.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}}.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(--c8db8e4c);font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.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)}.icon[data-v-8f7dfdec]{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;fill:var(--vp-c-text-3);transition:fill .25s}.VPNavBarMenuLink[data-v-ed97c493]{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-ed97c493],.VPNavBarMenuLink[data-v-ed97c493]:hover{color:var(--vp-c-brand)}.VPMenuGroup+.VPMenuLink[data-v-a5664333]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-a5664333]{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-a5664333]:hover{color:var(--vp-c-brand);background-color:var(--vp-c-bg-elv-mute)}.link.active[data-v-a5664333]{color:var(--vp-c-brand)}.VPMenuGroup[data-v-3d287a33]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-3d287a33]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-3d287a33]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-3d287a33]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);transition:color .25s}.VPMenu[data-v-44f96890]{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-44f96890] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-44f96890] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-44f96890] .group:last-child{padding-bottom:0}.VPMenu[data-v-44f96890] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-44f96890] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-44f96890] .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-44f96890] .action{padding-left:24px}.VPFlyout[data-v-a3cca9ba]{position:relative}.VPFlyout[data-v-a3cca9ba]:hover{color:var(--vp-c-brand);transition:color .25s}.VPFlyout:hover .text[data-v-a3cca9ba]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-a3cca9ba]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-a3cca9ba]{color:var(--vp-c-brand)}.VPFlyout.active:hover .text[data-v-a3cca9ba]{color:var(--vp-c-brand-dark)}.VPFlyout:hover .menu[data-v-a3cca9ba],.button[aria-expanded=true]+.menu[data-v-a3cca9ba]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-a3cca9ba]{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-a3cca9ba]{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-a3cca9ba]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-a3cca9ba]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-a3cca9ba]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-a3cca9ba]{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-af56e2d4]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-af56e2d4]{display:flex}}.VPNavBarTranslations[data-v-2e8c55c4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-2e8c55c4]{display:flex;align-items:center}}.title[data-v-2e8c55c4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPSwitch[data-v-4f746a79]{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-4f746a79]:hover{border-color:var(--vp-input-hover-border-color)}.check[data-v-4f746a79]{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-4f746a79]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-4f746a79] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-4f746a79] svg{fill:var(--vp-c-text-1);transition:opacity .25s}.sun[data-v-6767b96a]{opacity:1}.moon[data-v-6767b96a],.dark .sun[data-v-6767b96a]{opacity:0}.dark .moon[data-v-6767b96a]{opacity:1}.dark .VPSwitchAppearance[data-v-6767b96a] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-47695040]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-47695040]{display:flex;align-items:center}}.VPSocialLink[data-v-e8fd947d]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-e8fd947d]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-e8fd947d]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-5786735d]{display:flex;flex-wrap:wrap;justify-content:center}.VPNavBarSocialLinks[data-v-50403232]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-50403232]{display:flex;align-items:center}}.VPNavBarExtra[data-v-b12f8a5b]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-b12f8a5b]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-b12f8a5b]{display:none}}.trans-title[data-v-b12f8a5b]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-b12f8a5b],.item.social-links[data-v-b12f8a5b]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-b12f8a5b]{min-width:176px}.appearance-action[data-v-b12f8a5b]{margin-right:-2px}.social-links-list[data-v-b12f8a5b]{margin:-4px -8px}.VPNavBarHamburger[data-v-1ccf3b66]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-1ccf3b66]{display:none}}.container[data-v-1ccf3b66]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-1ccf3b66]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-1ccf3b66]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-1ccf3b66]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-1ccf3b66]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-1ccf3b66]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-1ccf3b66]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-1ccf3b66],.VPNavBarHamburger.active:hover .middle[data-v-1ccf3b66],.VPNavBarHamburger.active:hover .bottom[data-v-1ccf3b66]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-1ccf3b66],.middle[data-v-1ccf3b66],.bottom[data-v-1ccf3b66]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-1ccf3b66]{top:0;left:0;transform:translate(0)}.middle[data-v-1ccf3b66]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-1ccf3b66]{top:12px;left:0;transform:translate(4px)}.VPNavBar[data-v-f300cbe4]{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}.VPNavBar.has-sidebar[data-v-f300cbe4]{border-bottom-color:var(--vp-c-gutter)}@media (min-width: 768px){.VPNavBar[data-v-f300cbe4]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-f300cbe4]{border-bottom-color:transparent;padding:0}.VPNavBar.fill[data-v-f300cbe4]:not(.has-sidebar){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-f300cbe4]{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[data-v-f300cbe4] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-f300cbe4]{max-width:100%}}.title[data-v-f300cbe4]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-f300cbe4]{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-f300cbe4]{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-f300cbe4]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-f300cbe4]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-f300cbe4]{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-f300cbe4]{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-f300cbe4],.VPNavBar.fill .content-body[data-v-f300cbe4]{position:relative;background-color:var(--vp-nav-bg-color)}}.menu+.translations[data-v-f300cbe4]:before,.menu+.appearance[data-v-f300cbe4]:before,.menu+.social-links[data-v-f300cbe4]:before,.translations+.appearance[data-v-f300cbe4]:before,.appearance+.social-links[data-v-f300cbe4]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-f300cbe4]:before,.translations+.appearance[data-v-f300cbe4]:before{margin-right:16px}.appearance+.social-links[data-v-f300cbe4]:before{margin-left:16px}.social-links[data-v-f300cbe4]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-f300cbe4]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-f300cbe4]: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-f300cbe4]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenMenuLink[data-v-0828e23b]{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-0828e23b]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupLink[data-v-54855d6a]{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-54855d6a]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupSection[data-v-001db4b5]{display:block}.title[data-v-001db4b5]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-97fb4d5c]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-97fb4d5c]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-97fb4d5c]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-97fb4d5c]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-97fb4d5c]{padding-bottom:6px;color:var(--vp-c-brand)}.VPNavScreenMenuGroup.open .button-icon[data-v-97fb4d5c]{transform:rotate(45deg)}.button[data-v-97fb4d5c]{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-97fb4d5c]:hover{color:var(--vp-c-brand)}.button-icon[data-v-97fb4d5c]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-97fb4d5c]:first-child{padding-top:0}.group+.group[data-v-97fb4d5c],.group+.item[data-v-97fb4d5c]{padding-top:4px}.VPNavScreenAppearance[data-v-b299f21f]{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-b299f21f]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenTranslations[data-v-b4768349]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-b4768349]{height:auto}.title[data-v-b4768349]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-b4768349]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-b4768349]{margin-right:8px}.icon.chevron[data-v-b4768349]{margin-left:4px}.list[data-v-b4768349]{padding:4px 0 0 24px}.link[data-v-b4768349]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-2eac508f]{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-2eac508f],.VPNavScreen.fade-leave-active[data-v-2eac508f]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-2eac508f],.VPNavScreen.fade-leave-active .container[data-v-2eac508f]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-2eac508f],.VPNavScreen.fade-leave-to[data-v-2eac508f]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-2eac508f],.VPNavScreen.fade-leave-to .container[data-v-2eac508f]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-2eac508f]{display:none}}.container[data-v-2eac508f]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-2eac508f],.menu+.appearance[data-v-2eac508f],.translations+.appearance[data-v-2eac508f]{margin-top:24px}.menu+.social-links[data-v-2eac508f]{margin-top:16px}.appearance+.social-links[data-v-2eac508f]{margin-top:16px}.VPNav[data-v-5292f7d8]{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-5292f7d8]{position:fixed}}.VPLocalNav[data-v-2b1b9351]{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-2b1b9351]{display:none}}.menu[data-v-2b1b9351]{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-2b1b9351]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-2b1b9351]{padding:0 32px}}.menu-icon[data-v-2b1b9351]{margin-right:8px;width:16px;height:16px;fill:currentColor}.top-link[data-v-2b1b9351]{display:block;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.top-link[data-v-2b1b9351]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.top-link[data-v-2b1b9351]{padding:12px 32px 11px}}.VPSidebarItem.level-0[data-v-abb8e6b0]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-abb8e6b0]{padding-bottom:10px}.item[data-v-abb8e6b0]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-abb8e6b0]{cursor:pointer}.indicator[data-v-abb8e6b0]{position:absolute;top:6px;bottom:6px;left:-17px;width:1px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-abb8e6b0],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-abb8e6b0],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-abb8e6b0],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-abb8e6b0]{background-color:var(--vp-c-brand)}.link[data-v-abb8e6b0]{display:block;flex-grow:1}.text[data-v-abb8e6b0]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-abb8e6b0]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-abb8e6b0],.VPSidebarItem.level-2 .text[data-v-abb8e6b0],.VPSidebarItem.level-3 .text[data-v-abb8e6b0],.VPSidebarItem.level-4 .text[data-v-abb8e6b0],.VPSidebarItem.level-5 .text[data-v-abb8e6b0]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-abb8e6b0],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-abb8e6b0],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-abb8e6b0],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-abb8e6b0],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-abb8e6b0],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-abb8e6b0]{color:var(--vp-c-brand)}.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-abb8e6b0],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-abb8e6b0],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-abb8e6b0],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-abb8e6b0],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-abb8e6b0],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-abb8e6b0]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-abb8e6b0],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-abb8e6b0],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-abb8e6b0],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-abb8e6b0],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-abb8e6b0],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-abb8e6b0]{color:var(--vp-c-brand)}.caret[data-v-abb8e6b0]{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-abb8e6b0]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-abb8e6b0]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-abb8e6b0]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-abb8e6b0]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-abb8e6b0],.VPSidebarItem.level-2 .items[data-v-abb8e6b0],.VPSidebarItem.level-3 .items[data-v-abb8e6b0],.VPSidebarItem.level-4 .items[data-v-abb8e6b0],.VPSidebarItem.level-5 .items[data-v-abb8e6b0]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-abb8e6b0]{display:none}.VPSidebar[data-v-4ce0bd10]{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}.VPSidebar.open[data-v-4ce0bd10]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-4ce0bd10]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-4ce0bd10]{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-4ce0bd10]{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-4ce0bd10]{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-4ce0bd10]{outline:0}.group+.group[data-v-4ce0bd10]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-4ce0bd10]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPButton[data-v-cefd1ee5]{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-cefd1ee5]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-cefd1ee5]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-cefd1ee5]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-cefd1ee5]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-cefd1ee5]: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-cefd1ee5]: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-cefd1ee5]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-cefd1ee5]: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-cefd1ee5]: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-cefd1ee5]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-cefd1ee5]: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-cefd1ee5]: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-097cd59b]{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-097cd59b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-097cd59b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-097cd59b]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-097cd59b]{flex-direction:row}}.main[data-v-097cd59b]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-097cd59b]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-097cd59b]{text-align:left}}@media (min-width: 960px){.main[data-v-097cd59b]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-097cd59b]{max-width:592px}}.name[data-v-097cd59b],.text[data-v-097cd59b]{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-097cd59b],.VPHero.has-image .text[data-v-097cd59b]{margin:0 auto}.name[data-v-097cd59b]{color:var(--vp-home-hero-name-color)}.clip[data-v-097cd59b]{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-097cd59b],.text[data-v-097cd59b]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-097cd59b],.text[data-v-097cd59b]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-097cd59b],.VPHero.has-image .text[data-v-097cd59b]{margin:0}}.tagline[data-v-097cd59b]{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-097cd59b]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-097cd59b]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-097cd59b]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-097cd59b]{margin:0}}.actions[data-v-097cd59b]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-097cd59b]{justify-content:center}@media (min-width: 640px){.actions[data-v-097cd59b]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-097cd59b]{justify-content:flex-start}}.action[data-v-097cd59b]{flex-shrink:0;padding:6px}.image[data-v-097cd59b]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-097cd59b]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-097cd59b]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-097cd59b]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-097cd59b]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-097cd59b]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-097cd59b]{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-097cd59b]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-097cd59b]{width:320px;height:320px}}[data-v-097cd59b] .image-src{position:absolute;top:50%;left:50%;max-width:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-097cd59b] .image-src{max-width:256px}}@media (min-width: 960px){[data-v-097cd59b] .image-src{max-width:320px}}.VPFeature[data-v-fdad8e51]{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-fdad8e51]:hover{border-color:var(--vp-c-brand);background-color:var(--vp-c-bg-soft-up)}.box[data-v-fdad8e51]{display:flex;flex-direction:column;padding:24px;height:100%}.VPFeature[data-v-fdad8e51] .VPImage{width:fit-content;margin-bottom:20px}.icon[data-v-fdad8e51]{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-fdad8e51]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-fdad8e51]{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-fdad8e51]{padding-top:8px}.link-text-value[data-v-fdad8e51]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand)}.link-text-icon[data-v-fdad8e51]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-6b2dc790]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-6b2dc790]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-6b2dc790]{padding:0 64px}}.container[data-v-6b2dc790]{margin:0 auto;max-width:1152px}.items[data-v-6b2dc790]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-6b2dc790]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-6b2dc790],.item.grid-4[data-v-6b2dc790],.item.grid-6[data-v-6b2dc790]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-6b2dc790],.item.grid-4[data-v-6b2dc790]{width:50%}.item.grid-3[data-v-6b2dc790],.item.grid-6[data-v-6b2dc790]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-6b2dc790]{width:25%}}.VPHome[data-v-686333dc]{padding-bottom:96px}.VPHome[data-v-686333dc] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-686333dc]{padding-bottom:128px}}.root[data-v-27c78d9b]{position:relative;z-index:1}.nested[data-v-27c78d9b]{padding-left:13px}.outline-link[data-v-27c78d9b]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-27c78d9b]:hover,.outline-link.active[data-v-27c78d9b]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-27c78d9b]{padding-left:13px}.VPDocAsideOutline[data-v-4adf50f8]{display:none}.VPDocAsideOutline.has-outline[data-v-4adf50f8]{display:block}.content[data-v-4adf50f8]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-4adf50f8]{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-4adf50f8]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-6ec2fad3]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-6ec2fad3]{flex-grow:1}.VPDocAside[data-v-6ec2fad3] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-6ec2fad3] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-6ec2fad3] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-6141eb6b]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-6141eb6b]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-536d018a]{margin-top:64px}.edit-info[data-v-536d018a]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-536d018a]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-536d018a]{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-536d018a]:hover{color:var(--vp-c-brand-dark)}.edit-link-icon[data-v-536d018a]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-536d018a]{border-top:1px solid var(--vp-c-divider);padding-top:24px}@media (min-width: 640px){.prev-next[data-v-536d018a]{display:flex}}.pager.has-prev[data-v-536d018a]{padding-top:8px}@media (min-width: 640px){.pager[data-v-536d018a]{display:flex;flex-direction:column;flex-shrink:0;width:50%}.pager.has-prev[data-v-536d018a]{padding-top:0;padding-left:16px}}.pager-link[data-v-536d018a]{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-536d018a]:hover{border-color:var(--vp-c-brand)}.pager-link.next[data-v-536d018a]{margin-left:auto;text-align:right}.desc[data-v-536d018a]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-536d018a]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.VPDoc[data-v-29f46551]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-29f46551]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-29f46551]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-29f46551]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-29f46551]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-29f46551]{display:flex;justify-content:center}.VPDoc .aside[data-v-29f46551]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-29f46551]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-29f46551]{max-width:1104px}}.container[data-v-29f46551]{margin:0 auto;width:100%}.aside[data-v-29f46551]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.aside-container[data-v-29f46551]{position:sticky;top:0;margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1 - 32px);padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px);height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-29f46551]::-webkit-scrollbar{display:none}.aside-curtain[data-v-29f46551]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-29f46551]{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-29f46551]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-29f46551]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-29f46551]{order:1;margin:0;min-width:640px}}.content-container[data-v-29f46551]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-29f46551]{max-width:688px}.VPContent[data-v-6b4f7ebb]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-6b4f7ebb]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-6b4f7ebb]{margin:0}@media (min-width: 960px){.VPContent[data-v-6b4f7ebb]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-6b4f7ebb]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-6b4f7ebb]{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-9d9a7257]{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-9d9a7257]{display:none}@media (min-width: 768px){.VPFooter[data-v-9d9a7257]{padding:32px}}.container[data-v-9d9a7257]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-9d9a7257],.copyright[data-v-9d9a7257]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.message[data-v-9d9a7257]{order:2}.copyright[data-v-9d9a7257]{order:1}.Layout[data-v-dfa83ff9]{display:flex;flex-direction:column;min-height:100vh}.NotFound[data-v-4677c19e]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-4677c19e]{padding:96px 32px 168px}}.code[data-v-4677c19e]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-4677c19e]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-4677c19e]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-4677c19e]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-4677c19e]{padding-top:20px}.link[data-v-4677c19e]{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-4677c19e]:hover{border-color:var(--vp-c-brand-dark);color:var(--vp-c-brand-dark)}.VPHomeSponsors[data-v-23b0d344]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-23b0d344]{margin:0 auto;max-width:1152px}.love[data-v-23b0d344]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-23b0d344]{width:28px;height:28px;fill:currentColor}.message[data-v-23b0d344]{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-23b0d344]{padding-top:32px}.action[data-v-23b0d344]{padding-top:40px;text-align:center}.VPTeamPage[data-v-fa04e061]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-fa04e061]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-fa04e061-s],.VPTeamMembers+.VPTeamPageSection[data-v-fa04e061-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-fa04e061-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-fa04e061-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-fa04e061-s],.VPTeamMembers+.VPTeamPageSection[data-v-fa04e061-s]{margin-top:96px}}.VPTeamMembers[data-v-fa04e061-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-fa04e061-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-fa04e061-s]{padding:0 64px}}.VPTeamPageTitle[data-v-49e1f0de]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-49e1f0de]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-49e1f0de]{padding:80px 64px 48px}}.title[data-v-49e1f0de]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-49e1f0de]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-49e1f0de]{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-49e1f0de]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b74e9801]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b74e9801]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b74e9801]{padding:0 64px}}.title[data-v-b74e9801]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b74e9801]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b74e9801]{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-b74e9801]{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-b74e9801]{padding-top:40px}.VPTeamMembersItem[data-v-fba69fae]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-fba69fae]{padding:32px}.VPTeamMembersItem.small .data[data-v-fba69fae]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-fba69fae]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-fba69fae]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-fba69fae]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-fba69fae]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-fba69fae]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-fba69fae]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-fba69fae]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-fba69fae]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-fba69fae]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-fba69fae]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-fba69fae]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-fba69fae]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-fba69fae]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-fba69fae]{text-align:center}.avatar[data-v-fba69fae]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-fba69fae]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-fba69fae]{margin:0;font-weight:600}.affiliation[data-v-fba69fae]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-fba69fae]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-fba69fae]:hover{color:var(--vp-c-brand)}.desc[data-v-fba69fae]{margin:0 auto}.links[data-v-fba69fae]{display:flex;justify-content:center;height:56px}.sp-link[data-v-fba69fae]{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-fba69fae]:hover,.sp .sp-link.link[data-v-fba69fae]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-fba69fae]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-f25eeb1d]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-f25eeb1d]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-f25eeb1d]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-f25eeb1d]{max-width:876px}.VPTeamMembers.medium .container[data-v-f25eeb1d]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-f25eeb1d]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-f25eeb1d]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-f25eeb1d]{max-width:760px}.container[data-v-f25eeb1d]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--color-5: #ff7a45;--color-3: #ffbb96;--color-4: #ff9c6e;--color-6: #fa541c;--color-7: #d4380d;--vp-c-brand: var(--color-5);--vp-c-brand-light: var(--color-5);--vp-c-brand-dark: var(--color-4);--vp-c-brand-lighter: var(--color-5);--vp-c-brand-darker: var(--color-7);--vp-button-brand-hover-bg: var(--color-4);--vp-home-hero-name-color: var(--color-5);--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: linear-gradient( 90deg, var(--color-5) 20%, var(--color-7) );--vp-home-hero-image-background-image: linear-gradient( -45deg, var(--color-5) 30%, var(--color-3) 10% );--vp-home-hero-image-filter: blur(80px)}.VPFeature .icon{background:transparent;justify-content:left;margin-bottom:0}
diff --git a/docs/.DS_Store b/docs/.DS_Store
deleted file mode 100644
index 0519e34..0000000
Binary files a/docs/.DS_Store and /dev/null differ
diff --git a/docs/.vitepress/.DS_Store b/docs/.vitepress/.DS_Store
deleted file mode 100644
index 252817a..0000000
Binary files a/docs/.vitepress/.DS_Store and /dev/null differ
diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js
deleted file mode 100644
index eae8d6f..0000000
--- a/docs/.vitepress/config.js
+++ /dev/null
@@ -1,126 +0,0 @@
-import { defineConfig } from "vitepress";
-
-export default defineConfig({
- lang: "zh-CN",
- title: "FERoad",
- description: "WEB前端进阶知识库,前端学习,前端进阶,前端面试",
- head: [["link", { rel: "icon", href: "favicon.ico" }]],
- appearance: true,
- // base: '/feroad/',
- themeConfig: {
- logo: "/logo.svg",
- siteTitle: "FERoad",
- repo: "https://github.com/mewcoder/feroad",
- footer: {
- copyright: "Copyright © 2023 mewcoder",
- },
- nav: [
- { text: "面试指南", link: "/interview/resume" },
- { text: "前端进阶", link: "/advanced/note" },
- { text: "技术成长", link: "/grow/infra" },
- { text: "学习资源", link: "/study/book" },
- { text: "工具集合", link: "/tools/website" },
- ],
- socialLinks: [
- { icon: "github", link: "https://github.com/mewcoder/feroad" },
- {
- icon: {
- svg: '',
- },
- link: "https://yuque.com/mewcoder",
- },
- ],
- sidebar: {
- "/interview/": [
- {
- text: "面试指南",
- collapsible: true,
- items: [
- { text: "面试笔记", link: "/interview/note" },
- { text: "面试题库", link: "/interview/question" },
- { text: "写好简历", link: "/interview/resume" },
- { text: "答题套路", link: "/interview/anwser" },
- { text: "面试现场", link: "/interview/interview" },
- ],
- },
- {
- text: "前端百题斩",
- collapsible: true,
- items: [
- { text: "HTML", link: "/interview/1-html" },
- { text: "CSS", link: "/interview/2-css" },
- { text: "JavaScript 基础", link: "/interview/3-js1" },
- { text: "JavaScript 高级", link: "/interview/3-js2" },
- { text: "浏览器", link: "/interview/4-browser" },
- { text: "网络", link: "/interview/5-network" },
- { text: "Vue", link: "/interview/6-vue" },
- { text: "Vue全家桶", link: "/interview/6-vue2" },
- { text: "React", link: "/interview/13-react" },
- { text: "Webpack", link: "/interview/7-webpack" },
- { text: "前端工程化", link: "/interview/8-engineering" },
- { text: "性能优化", link: "/interview/9-performance" },
- { text: "项目", link: "/interview/10-project" },
- { text: "设计", link: "/interview/14-design" },
- { text: "其他", link: "/interview/11-other" },
- ],
- },
- {
- text: "手写",
- collapsible: true,
- items: [
- { text: "打印题", link: "/interview/console" },
- { text: "算法题", link: "/interview/algorithm" },
- { text: "手写题大纲", link: "/interview/handwriting/outline" },
- { text: "JS实现篇", link: "/interview/handwriting/js" },
- { text: "基础应用篇", link: "/interview/handwriting/base" },
- { text: "综合应用篇", link: "/interview/handwriting/enhance" },
- ],
- },
- ],
- "/tools/": [
- {
- text: "",
- collapsible: true,
- items: [{ text: "在线网站", link: "/tools/website" }],
- },
- ],
- "/study/": [
- {
- text: "",
- collapsible: true,
- items: [
- { text: "好书推荐", link: "/study/book" },
- { text: "小册推荐", link: "/study/booklet" },
- { text: "免费好课", link: "/study/lesson" },
- ],
- },
- ],
- "/grow/": [
- {
- text: "职业发展",
- collapsible: true,
- items: [
- { text: "前端基建", link: "/grow/infra" },
- { text: "面试跳槽", link: "/grow/gop" },
- { text: "职业规划", link: "/grow/promotion" },
- ],
- },
- {
- text: "技术视野",
- collapsible: true,
- items: [
- { text: "前端趋势", link: "/grow/trend" },
- { text: "技术新闻", link: "/grow/news" },
- ],
- },
- ],
- "/advanced/": [
- {
- text: "",
- collapsible: true,
- items: [{ text: "笔记", link: "/advanced/note" }],
- },
- ],
- },
- },
-});
diff --git a/docs/.vitepress/theme/LinkCard.vue b/docs/.vitepress/theme/LinkCard.vue
deleted file mode 100644
index 504c7c9..0000000
--- a/docs/.vitepress/theme/LinkCard.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css
deleted file mode 100644
index fe54b75..0000000
--- a/docs/.vitepress/theme/custom.css
+++ /dev/null
@@ -1,47 +0,0 @@
-:root {
- --color-5: #ff7a45;
- --color-3: #ffbb96;
- --color-4: #ff9c6e;
- --color-6: #fa541c;
- --color-7: #d4380d;
- --vp-c-brand: var(--color-5);
- --vp-c-brand-light: var(--color-5);
- --vp-c-brand-dark: var(--color-4);
- --vp-c-brand-lighter: var(--color-5);
- --vp-c-brand-darker: var(--color-7);
- --vp-button-brand-hover-bg: var(--color-4);
- --vp-home-hero-name-color: var(--color-5);
- --vp-home-hero-name-color: transparent;
- --vp-home-hero-name-background: linear-gradient(
- 90deg,
- var(--color-5) 20%,
- var(--color-7)
- );
- --vp-home-hero-image-background-image: linear-gradient(
- -45deg,
- var(--color-5) 30%,
- var(--color-3) 10%
- );
- --vp-home-hero-image-filter: blur(80px);
-}
-
-.VPFeature .icon {
- background: transparent;
- justify-content: left;
- margin-bottom: 0;
-}
-
-::-webkit-scrollbar {
- width: 8px;
- height: 8px;
-}
-
-::-webkit-scrollbar-thumb {
- background-color: #ccc;
- border-radius: 8px;
-}
-
-html.dark ::-webkit-scrollbar-thumb {
- background-color: #999;
- border-radius: 8px;
-}
diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js
deleted file mode 100644
index 380eafc..0000000
--- a/docs/.vitepress/theme/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import DefaultTheme from "vitepress/theme";
-import "./custom.css";
-import LinkCard from "./LinkCard.vue";
-
-export default {
- ...DefaultTheme,
- enhanceApp({ app }) {
- app.component("LinkCard", LinkCard);
- },
-};
-
-/*
- 颜色: https://ant.design/docs/spec/colors-cn
- 插画:https://undraw.co/
-*/
diff --git a/docs/.vitepress/theme/link.js b/docs/.vitepress/theme/link.js
deleted file mode 100644
index e882379..0000000
--- a/docs/.vitepress/theme/link.js
+++ /dev/null
@@ -1,269 +0,0 @@
-/**
- * Creating element
- * @param {String} name Element Name
- * @param {String} className Element className
- * @returns {HTMLElement}
- */
-function createElement(name, className) {
- var dom = document.createElement(name);
- if (className) dom.className = className;
- return dom;
-}
-/**
- * Creates svg element
- * @param {String} name Element Name
- * @returns {SVGElementTagNameMap}
- */
-
-function createSVG(name) {
- return document.createElementNS("http://www.w3.org/2000/svg", name);
-}
-/**
- * Set element attribute
- * @param {HTMLElement} el Element
- * @param {Object} obj Objects of key-value pairs
- */
-
-function setAttribute(el, obj) {
- for (var key in obj) {
- el.setAttribute(key, obj[key]);
- }
-}
-/**
- * Append child node or element
- * @param {HTMLElement} el Element
- * @param {Node} child The node to append to the given parent node (commonly an element).
- */
-
-function appendChild(el, child) {
- el.appendChild(child);
-}
-/**
- * Remove '/' and '/index.html'
- * @param {String} params
- * @returns { String }
- */
-
-function indexHandler(params) {
- var path = params.replace(/(\/index\.html|\/)*$/gi, "");
- if (path.length === 0) path += "/";
- return path;
-}
-/**
- * @param {Object} param
- * @param {Array} requiredParams
- */
-
-function verifyParams(param, requiredParams) {
- for (var index in requiredParams) {
- var requiredParam = requiredParams[index];
-
- if (!param[requiredParam]) {
- throw new Error("Parameter '".concat(requiredParam, "' not legal"));
- }
- }
-}
-/**
- * Determine if it is a ['https://', 'http://', '//'] protocol
- * @param {String} url Website url
- * @returns {Boolean}
- */
-
-function isHttp(url) {
- return /^(https?:)?\/\//g.test(url);
-}
-
-var styles =
- ".card-link{position:relative;width:100%;min-width:200px;max-width:400px;height:80px;margin:20px auto;border-radius:12px;overflow:hidden;}.card-link .card-link-content{text-decoration:none;position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:space-around;padding:12px;background-color:hsla(0,0%,96.5%,0.88);box-sizing:border-box;}.card-link [cardlink-left] .card-link-text{order:1;}.card-link [cardlink-left] .card-link-icon{margin:0 8px 0 0;}.card-link .card-link-text{flex:1;}.card-link .card-link-title{max-height:40px;font-size:16px;font-weight:500;line-height:1.25;color:#121212;margin:0 0 5px;letter-spacing:0.2px;word-break:break-all;display:-webkit-box;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;}.card-link .card-link-url{display:-webkit-box;font-size:13px;color:#999;margin:0;line-height:1.3;overflow:hidden;word-break:break-word;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:1;}.card-link .card-link-url svg{float:left;margin:2px 5px 0 0;}.card-link .card-link-icon{width:60px;height:60px;margin:0 0 0 8px;overflow:hidden;border-radius:6px;object-fit:contain;}";
-
-var style = createElement("style");
-style.textContent = styles;
-document.head.appendChild(style);
-
-/**
- * Create card link icon
- * @param {String} icon Icon URL
- * @returns {SVGElementTagNameMap}
- */
-
-function createIcon(icon) {
- var svg = createSVG("svg");
- svg.classList.add("card-link-icon");
- svg.style.background = "#ebebeb";
- setAttribute(svg, {
- fill: "#d4d4d4",
- viewBox: "0 0 1024 1024",
- });
- var path = createSVG("path");
- setAttribute(path, {
- // eslint-disable-next-line max-len
- d: "M177.152 384a357.546667 357.546667 0 0 0-23.552 128 357.546667 357.546667 0 0 0 23.552 128h140.245333a791.808 791.808 0 0 1-10.197333-128c0-44.714667 3.584-87.722667 10.197333-128H177.152z m24.405333-51.2h126.250667c15.786667-65.024 40.021333-120.405333 69.76-160.554667A359.466667 359.466667 0 0 0 201.557333 332.8zM844.8 378.709333V384h-138.197333c6.613333 40.277333 10.197333 83.285333 10.197333 128s-3.584 87.722667-10.197333 128H844.8v5.290667c16.512-41.216 25.6-86.186667 25.6-133.290667a357.418667 357.418667 0 0 0-25.6-133.290667zM822.442667 332.8a359.466667 359.466667 0 0 0-196.010667-160.554667c29.738667 40.149333 53.930667 95.573333 69.76 160.554667h126.293333zM369.365333 384a736.042667 736.042667 0 0 0-10.965333 128c0 45.354667 3.968 88.448 10.965333 128h285.269334c6.997333-39.552 10.965333-82.645333 10.965333-128s-3.968-88.448-10.965333-128H369.365333z m11.264-51.2h262.741334c-28.586667-108.032-80.725333-179.2-131.370667-179.2-50.645333 0-102.741333 71.168-131.370667 179.2z m-179.072 358.4a359.466667 359.466667 0 0 0 196.010667 160.554667c-29.738667-40.149333-53.930667-95.573333-69.76-160.554667h-126.293333z m620.885334 0h-126.250667c-15.786667 65.024-40.021333 120.405333-69.76 160.554667a359.466667 359.466667 0 0 0 196.010667-160.554667z m-441.813334 0c28.586667 108.032 80.725333 179.2 131.370667 179.2 50.645333 0 102.741333-71.168 131.370667-179.2H380.629333zM512 921.6a409.6 409.6 0 1 1 0-819.2 409.6 409.6 0 0 1 0 819.2z",
- });
- appendChild(svg, path);
-
- if (icon) {
- var img = createElement("img", "card-link-icon");
- img.src = icon; // If icon is valid, replace `svgIcon` with `imgIcon`
-
- img.onload = function () {
- img.onload = null;
- svg.parentNode.replaceChild(img, svg);
- };
- }
-
- return svg;
-}
-/**
- * Creating a Document Object Model
- * @param {String} title Website title
- * @param {String} link Website address
- * @param {String} icon Website icon
- * @returns {HTMLElement}
- */
-// eslint-disable-next-line max-statements
-
-function createDOM(title, link, icon) {
- var wrapDOM = createElement("div", "card-link");
- var iconDOM = createIcon(icon);
- var aDOM = createElement("a", "card-link-content");
- aDOM.href = link;
- var textDOM = createElement("div", "card-link-text");
- var titleDOM = createElement("span", "card-link-title");
- titleDOM.textContent = title;
- var linkDOM = createElement("span", "card-link-url");
- var linkSvgDOM = createSVG("svg");
- setAttribute(linkSvgDOM, {
- width: 14,
- height: 14,
- viewBox: "0 0 24 24",
- fill: "currentColor",
- });
- var linkPathDOM = createSVG("path");
- setAttribute(linkPathDOM, {
- // eslint-disable-next-line max-len
- d: "M5.327 18.883a3.005 3.005 0 010-4.25l2.608-2.607a.75.75 0 10-1.06-1.06l-2.608 2.607a4.505 4.505 0 006.37 6.37l2.608-2.607a.75.75 0 00-1.06-1.06l-2.608 2.607a3.005 3.005 0 01-4.25 0zm5.428-11.799a.75.75 0 001.06 1.06L14.48 5.48a3.005 3.005 0 014.25 4.25l-2.665 2.665a.75.75 0 001.061 1.06l2.665-2.664a4.505 4.505 0 00-6.371-6.372l-2.665 2.665zm5.323 2.117a.75.75 0 10-1.06-1.06l-7.072 7.07a.75.75 0 001.061 1.06l7.071-7.07z",
- });
- appendChild(linkSvgDOM, linkPathDOM);
- appendChild(linkDOM, linkSvgDOM);
- appendChild(linkDOM, document.createTextNode(link));
- appendChild(textDOM, titleDOM);
- appendChild(textDOM, linkDOM);
- appendChild(aDOM, textDOM);
- appendChild(aDOM, iconDOM);
- appendChild(wrapDOM, aDOM);
- return wrapDOM;
-}
-
-function renderer(el, title, link, icon) {
- var dom = createDOM(title, link, icon); // Reset the attribute
-
- Array.from(el.attributes).forEach(function (attr) {
- dom.querySelector("a").setAttribute(attr.name, attr.value);
- });
- el.parentNode.replaceChild(dom, el);
-}
-
-/**
- * Get info
- * @param {String} html String type html
- * @param {String} link Website address
- */
-// eslint-disable-next-line max-statements
-
-function parse(html, link) {
- try {
- var title, icon;
- var doc = new DOMParser().parseFromString(html, "text/html"); // If there is no title, no card link is generated
-
- title = doc.querySelector("title");
-
- if (title) {
- title = title.textContent; // Get the src of the first img tag in the body tag
-
- icon = doc.querySelector("body img");
- icon = icon && icon.getAttribute("src");
- if (/^data:image/.test(icon)) icon = ""; // If there is no src then get the site icon
-
- if (!icon) {
- var links = [].slice.call(doc.querySelectorAll("link[rel][href]"));
- icon = links.find(function (_el) {
- return _el.rel.includes("icon");
- });
- icon = icon && icon.getAttribute("href");
- } // If `icon` is not the ['https://', 'http://', '//'] protocol, splice on the `origin` of the a tag
-
- if (icon && !isHttp(icon)) icon = new URL(link).origin + icon;
- return {
- title: title,
- link: link,
- icon: icon,
- };
- }
- } catch (error) {
- // eslint-disable-next-line no-console
- console.warn("CardLink Error: Failed to parse", error);
- }
-
- return {};
-}
-
-var proxyHandler = {
- set: function set(target, name, value) {
- verifyParams(value, ["title", "link"]);
- name = indexHandler(name);
- target[name] = value;
- return true;
- },
-};
-cardLink.cache = new Proxy({}, proxyHandler);
-
-function fetchPage(link, callback) {
- var server = cardLink.server; // eslint-disable-next-line no-console
- fetch(server + link)
- .then(function (result) {
- return result.text();
- })
- .then(callback)
- ["catch"](function (error) {
- console.error("CardLink Error:", error);
- });
-}
-/**
- * Create card links
- * @param {NodeList} nodes A collection of nodes or a collection of arrays,
- * if it is an array then the array must always contain node element
- */
-
-function cardLink(nodes) {
- // If the `nodes` do not contain a `forEach` method, then the default `a[cardlink]` is used
- nodes =
- "forEach" in (nodes || {})
- ? nodes
- : document.querySelectorAll("a[cardlink]");
- nodes.forEach(function (el) {
- // If it is not a tag element then it is not processed
- if (el.nodeType !== 1) return;
- el.removeAttribute("cardlink");
- var href = el.href;
- var cache = cardLink.cache[href];
- if (cache) return renderer(el, cache.title, cache.link, cache.icon);
-
- if (isHttp(href)) {
- fetchPage(href, function (html) {
- var _parse = parse(html, href),
- title = _parse.title,
- link = _parse.link,
- icon = _parse.icon;
-
- cardLink.cache[link] = {
- title: title,
- link: link,
- icon: icon,
- };
- renderer(el, title, link, icon);
- });
- }
- });
-}
-
-export { cardLink as default };
diff --git a/docs/advanced/note.md b/docs/advanced/note.md
deleted file mode 100644
index a910730..0000000
--- a/docs/advanced/note.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# 模块联邦
-
-- 模块联邦(module-federation)解决了什么问题?
-
-如何解决应用间代码共享的问题?
-
-- 使用 git-subtree 还是all-in-one,打包速度会慢,不够独立
-- npm 发包,改动源码则需要构建-发布,所有依赖的项目都要更新一遍非常麻烦。
-
-- 使用模块联邦,模块独立开发部署,依赖模块可以动态更新,相当于预构建,
-
-
-
-- DLL 是将稳定的依赖打包提前编译,提高打包速度
-- external 是为了替换公共的cdn库,减少打包体积,依赖关系需要手动管理
-
-缺点:
-
-- 不存在版本管理
-- 去中心化后,如何管理和维护
-
-- 工具链强绑定,如何通用起来,`hel-mirco`
-
-
-
-- npm
-- cdn 只是技术,不是方案
-- monorepo 避免node_module 冗余,方便互相依赖
-- git subtree/submodule
-
-- 微前端:应用级别的拆分
-
-
-
-> [一文通透讲解webpack5 module federation](https://juejin.cn/post/7048125682861703181)
->
-> http://www.alloyteam.com/2020/04/14338/
-
-
-
-微前端
-
-> [对比多种微前端方案](https://github.com/efoxTeam/emp/wiki/%E3%80%8A%E5%AF%B9%E6%AF%94%E5%A4%9A%E7%A7%8D%E5%BE%AE%E5%89%8D%E7%AB%AF%E6%96%B9%E6%A1%88%E3%80%8B)
-
-
-
-- 技术栈无关性
-- 代码隔离
-- 通信
\ No newline at end of file
diff --git a/docs/grow/gop.md b/docs/grow/gop.md
deleted file mode 100644
index b7d9d3c..0000000
--- a/docs/grow/gop.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# 面试跳槽
-
-- [堂主-如何考察候选人的能力与潜力](https://juejin.cn/post/6844904196706140167)
-
-- [完颜-蚂蚁金服如何面试候选人](https://juejin.cn/post/6844904197675221005)
-
-- [贵重-钉钉如何考察前端候选人](https://juejin.cn/post/6850418120788705293)
-
-- [伐薪-1688 如何考察候选人](https://juejin.cn/post/6850037275758329870)
-
-- [额台-天猫精灵如何面试候选人](https://juejin.cn/post/6847902224358588424)
-
-- [假发-如何拿下钉钉 P7 前端 Offer](https://juejin.cn/post/6850418120780316685)
-
-- [寻知-拿下天猫精灵 P7 Offer](https://juejin.cn/post/6847902222634713096)
-
-- [老邬-如何拿下阿里巴巴 P6 的前端 Offer](https://juejin.cn/post/6844904181854109710)
-
-- [井葵-如何拿下蚂蚁金服 P6 的前端 Offer](https://juejin.cn/post/6844904197675040775)
-
-- [天羽-如何借助 5 道算法题入职 Leetcode](https://juejin.cn/post/6844904194084700174)
-
-- [句号-如何拿下政采云 P6 前端 Offer](https://juejin.cn/post/6844904196701962254)
diff --git a/docs/grow/infra.md b/docs/grow/infra.md
deleted file mode 100644
index 91c3d98..0000000
--- a/docs/grow/infra.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# 前端基建&团队建设
-
-## 搞基建
-
-- [前端搞基建|第二届前端早早聊大会讲师答疑合集](https://zhuanlan.zhihu.com/p/148622006)
-
-- [堂主 - 如何推动前端团队的基础设施建设](https://juejin.cn/post/6844904087662624781)
-
-- [Scott - 如何在人单力薄时立项推动基建](https://juejin.cn/post/6844904088824446990)
-
-- [崇志 - 如何设计大型前端团队基建路线 ](https://juejin.cn/post/6844904096172867597)
-
-- [芋头 - 如何在大前端团队实现基建价值突破](https://juejin.cn/post/6844904093564010503)
-
-- [小爝 - 如何推动基础架构项目落地](https://juejin.cn/post/6844904084881801230)
-
-## 管理
-
-- [志遥 - 如何在小型前端团队的管理中踩坑](https://juejin.cn/post/6844904049163108360)
-
-- [Scott - 如何在中小前端团队中完成管理转型](https://juejin.cn/post/6844904049989713933)
-
-## 其他
-
-- [前端小团队如何搞基础设施建设?](https://juejin.cn/post/6917057999328509959)
-- [分析前端业务团队如何进行技术建设](https://juejin.cn/post/7124309631718916103)
\ No newline at end of file
diff --git a/docs/grow/news.md b/docs/grow/news.md
deleted file mode 100644
index ab36f66..0000000
--- a/docs/grow/news.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# 技术新闻
-
-- [webContainer 发布 1.0](https://juejin.cn/post/7201464975722332216)
diff --git a/docs/grow/promotion.md b/docs/grow/promotion.md
deleted file mode 100644
index 8755222..0000000
--- a/docs/grow/promotion.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# 前端晋升&职业规划
-
-## 职业规划
-
-- [堂主-如何在初级到专家的路上打破成长瓶颈](https://juejin.cn/post/6844904133254725640)
-- [远舟-如何做出专家级别的技术与技术产品规划](https://juejin.cn/post/6844904134965985293)
-- [城池-如何对 P5/P6/P7 做职业规划和技术培养](https://juejin.cn/post/6844904135297335304)
-- [贵重-如何在团队中培养出更多的前端技术专家](https://juejin.cn/post/6844904136295579662)
\ No newline at end of file
diff --git a/docs/grow/trend.md b/docs/grow/trend.md
deleted file mode 100644
index e8501c3..0000000
--- a/docs/grow/trend.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# 前端趋势
-
-- [2023 年前端十大 Web 发展趋势](https://www.infoq.cn/article/PoZLOO8QEf98GoDzV7Nr')
-- [狼叔-2022 大前端总结和 2023 就业分析](https://juejin.cn/post/7196110128038690876)
-- [站在 2023 年,如何看待「前端已死」的观点?](https://www.zhihu.com/question/584477499/answer/2901828456)
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644
index 82b61f5..0000000
--- a/docs/index.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-layout: home
-
-title: 前端精进之路
-titleTemplate: FERoad
-
-hero:
- name: 前端精进之路
- text: WEB前端进阶知识库
- tagline: 世事无常,精进不已( 🚧 疯狂建设中...)
- image:
- src: /home.svg
- alt: VitePress
- actions:
- - theme: brand
- text: 🎯 开始精进
- link: /interview/resume
- - theme: alt
- text: ⭐️ 点个Star
- link: https://github.com/mewcoder/feroad
-features:
- - icon: 🧭
- title: 学习路线
- details:
- - icon: 🚀
- title: 前端进阶
- details:
- - icon: 📡
- title: 面试指南
- details:
- - icon: 📚
- title: 学习资源
- details:
- - icon: 🛠
- title: 工具集合
- details:
- - icon: 📈
- title: 技术成长
- details:
----
-
-
-

-
diff --git a/docs/interview/.DS_Store b/docs/interview/.DS_Store
deleted file mode 100644
index def2c1d..0000000
Binary files a/docs/interview/.DS_Store and /dev/null differ
diff --git a/docs/interview/1-html.md b/docs/interview/1-html.md
deleted file mode 100644
index f8c886e..0000000
--- a/docs/interview/1-html.md
+++ /dev/null
@@ -1,118 +0,0 @@
-# HTML
-
-## 1. async 和 defer 区别
-
-- 两个都是异步加载 JS 脚本,不阻塞 html 解析
-- defer 是先加载,等到 dom 解析完,在 DOMContentLoaded 事件**之前**执行脚本
-- async 是加载完立即执行
-- type="module"的效果等同于 defer
-
-## href 和 src 区别
-
-- href 用于建立当前页面与引用资源之间的关系(链接)如 a / link,
-- src 则会替换当前标签,如 img / script / iframe
-
-## meta 标签有哪些
-
-```html
-
-
-
-
-```
-
-## HTML5 新特性
-
-- 语义化标签(对机器和开发者友好)
-- canvas/svg
-- localStorage / sessionStorage
-- websocket
-- history api
- - puhState / replaceState 方法
- - popState 事件,上述两个方法不会触发
-- 拖拽/媒体/表单增强/定位相关
-
-## DOM
-
-### offsetHeight/scrollHeight/clientHeight 区别
-
-- style.width 的返回值是字符串,并且带有单位
-- offsetHeight/offsetWidth :border + padding + content
-- clientHeight/clientWidth :padding + content
-- scrollHeight/scrollWidth :padding + 实际内容的尺寸
-- scrollTop/scrollLeft : DOM 内部元素滚动的距离
-
-
-
-- window.innerHeight:**可视区域高度**
-- document.documentElement.clientHeight:**可视区域高度,**不包含滚动条
-- document.documentElement.scrollHeight:html 元素高度
-- document.body.clientHeight:body 元素高度
-
-### getBoundingClientRect
-
-返回 left、top、right、bottom、x、y、width 和 height 这几个以像素为单位的只读属性描述整个矩形的位置和大小。除了 width 和 height 以外的属性是相对于视图窗口的左上角来计算的。
-
-
-
-### property 和 attribute 区别
-
-- property:每个 DOM 节点都是 JS 对象,操作 property 是 JS 范畴的
-- attribute:是 DOM 上的属性
-
-两者之间的区别是:
-
-- 自定义的 property 与 attribute 不同步,不相等
-- 非自定义的 DOM property 与 attributes 是有条件同步的(如 value 不会同步)
-
-### DOM 常用操作
-
-```javascript
-getElementById; // 按照 id 查询
-getElementsByTagName; // 按照标签名查询
-getElementsByClassName; // 按照类名查询
-
-// 按照选择器查询
-querySelector;
-querySelectorAll;
-```
-
-```javascript
-node.parentNode // 父级节点
-parentNode.childNodes(标准) // 子节点
-parentNode.children(非标准放心使用)
-
-
-node.nextSibling // 返回当前元素的下一个兄弟元素节点,找不到则返回null。同样,也是包含所有的节点
-node.previousSibling // 可能是文本节点
-
-node.nextElementSibling // 返回当前元素下一个兄弟元素节点,找不到则返回null。 兼容性问题
-node.previousElementSibling
-```
-
-```javascript
-// 创建节点
-document.createElement("tagName");
-
-// 将一个节点添加到指定父节点的子节点列表末尾。
-node.appendChild(child);
-
-// 将一个节点添加到父节点的指定子节点前面。
-node.insertBefore(child, 指定元素);
-
-// 删除node。
-node.remove();
-
-// node.removeChild() 方法从 DOM 中删除一个子节点,返回删除的节点。
-node.removeChild(child);
-
-// 方法返回调用该方法的节点的一个副本。 也称为克隆节点/拷贝节点
-node.cloneNode();
-```
-
-## 如何判断一个元素是否在可视区域中?
-
-[http://fanyouf.gitee.io/interview/nb/03.html#%E4%B8%80%E3%80%81%E7%94%A8%E9%80%94](http://fanyouf.gitee.io/interview/nb/03.html#%E4%B8%80%E3%80%81%E7%94%A8%E9%80%94)
diff --git a/docs/interview/10-project.md b/docs/interview/10-project.md
deleted file mode 100644
index 22fca10..0000000
--- a/docs/interview/10-project.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# 项目
-
-## 1.Vue怎么做权限管理?
-
-1. 权限管理一般需求是**页面权限**和**按钮权限**的管理
-
-2. 具体实现的时候分后端和前端两种方案:
-
- 前端方案会**把所有路由信息在前端配置**,通过路由守卫要求用户登录,用户**登录后根据角色过滤出路由表**。比如我会配置一个`asyncRoutes`数组,需要认证的页面在其路由的`meta`中添加一个`roles`字段,等获取用户角色之后取两者的交集,若结果不为空则说明可以访问。此过滤过程结束,剩下的路由就是该用户能访问的页面,**最后通过`router.addRoutes(accessRoutes)`方式动态添加路由**即可。
-
- 后端方案会**把所有页面路由信息存在数据库**中,用户登录的时候根据其角色**查询得到其能访问的所有页面路由信息**返回给前端,前端**再通过`addRoutes`动态添加路由**信息
-
- 按钮权限的控制通常会**实现一个指令**,例如`v-permission`,**将按钮要求角色通过值传给v-permission指令**,在指令的`moutned`钩子中可以**判断当前用户角色和按钮是否存在交集**,有则保留按钮,无则移除按钮。
-
-3. 纯前端方案的优点是实现简单,不需要额外权限管理页面,但是维护起来问题比较大,有新的页面和角色需求就要修改前端代码重新打包部署;服务端方案就不存在这个问题,通过专门的角色和权限管理页面,配置页面和按钮权限信息到数据库,应用每次登陆时获取的都是最新的路由信息,可谓一劳永逸!
-
-
-
-## 2.从0到1自己构架一个vue项目
-
-1. 从0创建一个项目我大致会做以下事情:项目构建、引入必要插件、代码规范、提交规范、常用库和组件
-2. 目前 vue3 项目我会用 vite 或者 create-vue 创建项目
-3. 接下来引入必要插件:路由插件 vue-router、状态管理 vuex/pinia、ui库我比较喜欢 element-plus 和 antd-vue、http工具我会选axios
-4. 其他比较常用的库有 vueuse,nprogress,图标可以使用 vite-svg-loader
-5. 下面是代码规范:结合 prettier 和 eslint 即可
-6. 最后是提交规范,可以使用husky,lint-staged,commitlint
-
-7. 目录结构: api/compontes/asserts/views/router/store/utils
-
-## 3. Vue 大数据量优化
-
-1. 在大型企业级项目中经常需要渲染大量数据,此时很容易出现卡顿的情况。比如大数据量的表格、树。
-2. 处理时要根据情况做不通处理:
- - 可以采取分页的方式获取,避免渲染大量数据
- - [vue-virtual-scroller](https://github.com/Akryum/vue-virtual-scroller)等虚拟滚动方案,只渲染视口范围内的数据
- - 如果不需要更新,可以使用`v-once`方式只渲染一次
- - 通过[v-memo](https://vuejs.org/api/built-in-directives.html#v-memo)可以缓存结果,结合`v-for`使用,避免数据变化时不必要的VNode创建
- - 可以采用懒加载方式,在用户需要的时候再加载数据,比如tree组件子树的懒加载
-3. 总之,还是要看具体需求,首先从设计上避免大数据获取和渲染;实在需要这样做可以采用虚表的方式优化渲染;最后优化更新,如果不需要更新可以 v-once处理,需要更新可以 v-memo 进一步优化大数据更新性能。其他可以采用的是交互方式优化,虚拟滚动、懒加载等方案。
\ No newline at end of file
diff --git a/docs/interview/11-other.md b/docs/interview/11-other.md
deleted file mode 100644
index 670ce9b..0000000
--- a/docs/interview/11-other.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# 其他
-
-## 讲一下微前端方案?
-
-微前端的核心价值:
-
-- 独立开发和部署
-- 技术栈无关
-- 微应用之间隔离
-
-微前端框架解决的问题:
-
-- 目标:像 iframe 一样接入简单和隔离
-- 通信方便和路由同步
-
-- iframe
-
- - 优点:原生隔离方案,简单;不考虑体验,完美
- - 缺点:
- - 加载慢,白屏时间长
- - url 不同步,刷新丢失
- - 通信不方便 postMessage
-
-- qiankun
- - 优点:共享数据和状态方便,支持预加载
- - 缺点:
- - 有改造成本,主应用和子应用都要配置
- - 父子公用路由
-- single-mpa
-
-- EMP
-
-- [无界](https://wujie-micro.github.io/doc/)
-
- - 优点:
-
- - js 隔离使用 iframe,html+css 使用 web components
- - 子应用无需改造
-
- - 缺点:web components 兼容性
-
-JS 隔离:
-
-- Proxy 代理:创建一个 proxy 来代理 window
-- 快照沙箱:对 window 属性进行快照
-
-样式隔离:
-
-- CSS-Modules
-
-- 真正的隔离 Shadow DOM
-
-## 方案的落地,以微前端举例:
-
-微前端不止拆的代码和工程,而是业务,需要划分业务和确定边界。
-
-- 1.验证原型 验证技术方案可行性
-- 2.成本/收益评估
-- 3.迭代计划
-- 4.事故预案 盘点风险,做好预案
-
-聊一聊你对模块联邦的看法
-
-## WebAssembly(WASM)
-
-WASM 是一种新的二进制格式,可以直接在浏览器中运行;可以将 C/C++、Rust 等语言编译成 WASM,可以让浏览器直接运行。
-一些应用:
-
-- monaco-editor
-- WebContainer(stackblitz)
-- 视频播放器插件
diff --git a/docs/interview/12-node.md b/docs/interview/12-node.md
deleted file mode 100644
index ebb0513..0000000
--- a/docs/interview/12-node.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Node
-
-## 事件循环
-
-Node 的事件循环是由 libuv 实现的,每一轮的事件循环有6个阶段,每个阶段都有一个FIFO的执行回调的队列。
-
-关键阶段:**timers**: setTimout/setInterval 、**poll**: 执行回调 / 检查定时器 、 **check**:setImmediate
-
-- Node11调整与浏览器结果一致,每执行完一个 timers类任务 就执行微任务
-
- - 之前是:所有 timers 类任务 都执行完了,再执行微任务
-
-- process.nextTick 是一个单独的队列,每个阶段执行完 都会执行 process.nextTick 的队列,优先级大于Promise
-
-- setImmediate 和 setTimeout
-
- - 在 poll 处理的回调中 先 setImmediate 后 setTimeout ,否则(在主脚本)顺序是不确定的
-
-
\ No newline at end of file
diff --git a/docs/interview/12-typescipt.md b/docs/interview/12-typescipt.md
deleted file mode 100644
index 2b850f8..0000000
--- a/docs/interview/12-typescipt.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# TypeScript
-
-## TypeScript 的优势
-
-- TS 是 JS 的超级,支持 ESNext 新特性,引入了静态类型系统
-- 可读性:代码可读性更高,IDE 提示
-- 安全性:静态类型检查,增加代码健壮性可以减少错误,比如 undefined 等
-- 可维护性:更利于维护和重构,利于协作
-- 支持 ESNext 新特性,社区活跃
-
-缺点:
-
-- 有一定的学习成本,短期可能增加开发成本,代码量更多,而且需要编译,需要权衡
-
-## interface 和 type
-
-- interface 是一种数据结构的描述,比如对象;interface 可以多次定义并能够合并,可以被类实现
-- type 是类型别名,是一种表达式;type 可以声明基本类型别名,联合类型,交叉类型、元组等类型,能进行类型编程
-- 用 interface 描述数据结构,用 type 描述类型关系;能用 interface 实现,就用 interface , 如果不能就用 type
-
-## infer
-
-```typescript
-type ReturnType = T extends (...args: any[]) => infer R ? R : any;
-```
-
-在 extends 后面的类型表达式中使用 infer 来声明一个类型变量占位符
-
-## 协变和逆变
-
-协变: 子类赋值给父类是安全的,因为子类上包含了父类所有的属性和方法;那么复合类型如何 Array、Promise 也遵循这种规则
-
-```ts
-let animal: Animal;
-let dog: Dog;
-
-animal = dog; // ✔
-
-let animals: Array;
-let dogs: Array;
-
-animals = dogs; // ✔
-```
-
-逆变:作为函数参数时,处理父类的函数是可以赋值给处理子类的函数,因为传入的参数是子类,子类上包含了父类的所有属性和方法
-
-```ts
-let handleAnimal = (animal: Animal) => {};
-let handleDog = (dog: Dog) => {};
-
-handleAnimal = handleDog; // ❌
-handleDog = handleAnimal; // ✔
-```
-
-双向协变:TS 类型系统允许函数参数是双向协变(bivariant),这意味着参数可以被看作是协变或逆变的,这是出于实用性考虑的一个妥协。
-
-> 只有开启了--strictFunctionTypes 或者--strict 模式,ts 才对函数参数类型进行逆变检查。
->
-> [为什么函数参数是双向协变的?](https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-function-parameters-bivariant)
-
-## 参考
-
-> [参考](https://juejin.cn/post/7236319311099297853)
diff --git a/docs/interview/13-react.md b/docs/interview/13-react.md
deleted file mode 100644
index 16858be..0000000
--- a/docs/interview/13-react.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# React
-
-## React 版本差异
-
-- 16.3:fiber
-- 16.8:hooks
-- 17:过渡版本
-- 18:concurrent mode
-- 19:编译(自动 memo 化), RSC的更新
-
-## setState 是同步还是异步
-
-- 所谓同步异步是指调用 setState 之后状态是否立即发生改变,比如调用之后读取到的 state 是不是最新的。
-
-- react18 之前(半自动批处理)::setState 只在合成事件和钩子函数中是异步的,在原生事件和 setTimeout 中都是同步的。
-- React18(自动批处理):是异步的
-
-> 注意 vue 数据是可变的, nextTick() 是为了等待 DOM 更新,
-
-## hooks 的使用限制
-
-只能在函数组件中使用,不要在 React 的循环、条件或嵌套函数中使用;
-
-React 中每个组件都有一个对应的 FiberNode,其实就是一个对象,这个对象是有个属性叫 memoizedState。当组件是函数组件的时候,fiber.memoizedState 上存储的就是 Hooks 单链表。
-
-单链表的每个 hook 节点没有名字或者 key,因为除了它们的顺序,我们无法记录它们的唯一性。因此为了确保某个 Hook 是它本身,我们不能破坏这个链表的稳定性。
-保证 Hook 调用的顺序在每次渲染时都是相同的:
-
-## fiber 和并发
-
-可中断
diff --git a/docs/interview/14-design.md b/docs/interview/14-design.md
deleted file mode 100644
index fd28e44..0000000
--- a/docs/interview/14-design.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# 设计
-
-## 埋点方案
-
-- ajax 可能跨域
-- img 上报
-- `navigator.sendBeacon(url, data)`:
- 它允许网页在用户导航离开页面或关闭浏览器时异步发送少量数据到服务器(POST请求)。
-
-## 拖拽的实现
-
-
diff --git a/docs/interview/15-scene.md b/docs/interview/15-scene.md
deleted file mode 100644
index 68d3bce..0000000
--- a/docs/interview/15-scene.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# 场景题
-
-## 前端怎么解决高并发问题
-
-前端能做的:
-
-- 静态资源通过 CDN、并对静态资源进行合并和压缩
-- 前端缓存(强缓存和浏览器存储),避免重复请求
-- 异步加载和懒加载(图片和数据)
-- 减少重复请求,防抖节流等;限制某些接口的请求频率
-- 接口优化,合并请求和压缩数据
-
-服务端:接口优化、负载均衡、热点数据缓存、数据库查询优化、集群扩容
-
-## b 端项目大数据量性能优化
-
-- 数据分片
-- 虚拟滚动
-
-图表数据卡顿
-
-- 使用增量渲染代替全量渲染
-- 图表过多懒加载
-- 折线图 LTTB 降采样
-
-https://juejin.cn/post/7280007832701927443
-https://juejin.cn/post/7145488193314357255
diff --git a/docs/interview/2-css.md b/docs/interview/2-css.md
deleted file mode 100644
index 0536154..0000000
--- a/docs/interview/2-css.md
+++ /dev/null
@@ -1,278 +0,0 @@
-# CSS
-
-## 01. 盒模型
-
-`box-sizing: content-box / border-box`
-
-- 标准盒模型( content-box )
- 盒子实际的宽度是 = 设置的宽高 + padding + border
-- IE 盒模型( border-box)
- 盒子实际的宽度是 = 设置的宽高(包含 padding border)
-
-## 02. position
-
-- static:默认值
-- relative:相对元素自身位置
-- absolute:相对最近(relative/absolute/fixed)的祖先元素,找不到则相对于根元素。
-- fixed:相对屏幕视口(viewport)(当祖先元素具有`transform`属性且不为 none 时,就会相对于祖先元素指定坐标,而不是浏览器窗口)
-- absolute/fixed 脱离文档流
-- sticky:粘性定位,当元素在可视范围内为 relative,超出则为 fixed,必须指定 top 、left、right、bottom 其中一个才生效。
-
-## 03. 伪类/伪元素
-
-- 伪类选择器:选择处于特定状态的元素的选择器,`:hover` / `:first-child`
-- 伪元素选择器:用于设置元素指定部分的样式或者创建虚拟元素, `::before` / `::first-line`
-
-## 04. 选择器优先级
-
-- `!important`
-- 内联样式(权重 1000)
-- ID 选择器(权重 100)
-- 类选择器 = 伪类选择器 = 属性选择器(权重 10)
-- 标签选择器 = 伪元素选择器(权重 1)
-
-```css
-// 属性选择器
-a[href="https://example.org"]
-{
- color: green;
-}
-```
-
-## 05. 清除浮动
-
-父元素不写高度时,子元素浮动后,脱离文档流,父元素会发生高度塌陷(造成父元素高度为 0)
-
-**解决高度塌陷:**
-
-- 为父元素设置 `overflow:hidden` 属性,缺点:会隐藏超出的内容
-- 添加一个 `clear:both` 的块级元素,缺点:多余元素
-- 父元素也浮动,缺点:产生新的浮动影响
-- 完美方案:**父级末尾添加伪元素**
-
-```css
-父元素::after {
- content: "";
- display: block;
- clear: both;
- height: 0;
-}
-```
-
-## 06. BFC
-
-块级格式化上下文;独立的渲染区域;只有块级元素参与,它规定了内部的块级元素如何布局;
-
-**布局规则**:
-
-- BFC 内部不影响外部,外部也不影响内部
-- 内部的 Box 会在垂直方向,一个接一个地放置
-- Box 垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠,水平方向的 margin 不会重叠
-- 计算 BFC 的高度时,浮动元素计算在内
-
-**形成 BFC**:
-
-- 根元素
-- overflow 除了 visible 以外的值 (hidden、auto、scroll)
-- float:left/right,不是 none
-- position:abolute/fixed
-- display:inline-block、flex、grid、table-cell
-
-**应用**:
-
-- 阻止外边距重叠
-- 包含内部浮动(防止高度塌陷)
-- 排除外部浮动(左浮动右 BFC,防止重叠)
-
-**IFC**:
-
-- display 属性为 inline, inline-block 会形成 行内格式化上下文
-- 在行内格式化上下文中,元素一个接一个地水平排列,起点是包含块的顶部。水平方向上的 `margin`,`border` 和 `padding`在框之间得到保留。框在垂直方向上可以以不同的方式对齐:它们的顶部或底部对齐,或根据其中文字的基线对齐。
-- 应用:
- - 水平居中: `text-align:center`
- - 垂直居中:`vertical-align: middle`
-
-## 07.flex
-
-弹性布局,flex 容器所有子元素都会成为它的 item。有两个轴,主轴和交叉轴,默认沿水平主轴
-
-- 容器属性(父)
- - display:flex
- - flex-direction:row / row-reverse / column / column-reverse
- - flex-wrap: nowrap / wrap
- - justify-conternt: flex-start / flex-end / center / space-between / space-around(两边留空,等距离分布)
- - align-items:flex-start / flex-end / center / baseline / stretch(拉伸)
-- item 属性(子)
- - order 顺序
- - flex-grow 默认 0,不放大
- - flex-shrink 默认为 1,缩小
- - flex-basis 默认 auto,初始大小
- - flex(上面 3 个的简写)
- - flex:1:1 1 0
- - flex: none: 0 0 auto
- - flex: auto: 1 1 auto
- - align-self
- - 单个对齐,参数见 align-items
-
-## 08.居中
-
-- 行内元素 :水平:`text-align:center` 单行文本垂直:`line-height=height` ;
-
-- 块级元素
-
- - flex: `display: flex; justify-content:center; align-items:center;`
-
- - 绝对定位+transform:top/left 50% + transform: translate(-50%, -50%);
-
- - 绝对定位+负 margin:需要设置宽高,top/left 50% + margin 负值宽高的一半
-
- - 绝对定位+margin:auto:需要设置宽高,四个方向为 0,margin:auto
-
-## 09.三角形
-
-设置 border-color 对应的地方为透明 transparent
-
-```css
-div {
- width: 0;
- height: 0;
- border: 100px solid;
- border-color: orange blue red green;
-}
-```
-
-## 10.自适应正方形
-
-1. 高度用 vw,宽度用百分比:width: 100%; height: 100vw;
-
-```css
-.square {
- width: 10%;
- height: 10vw;
- background: tomato;
-}
-```
-
-2. 利用元素的 margin/padding 百分比是相对父元素 width 的特性来实现
-
-```css
-.square {
- width: 20%;
- height: 0;
- padding-top: 20%;
- background: orange;
-}
-```
-
-3. 伪元素设置 margin-top 百分比,BFC
-
-```css
-.square {
- width: 30%;
- overflow: hidden;
- background: yellow;
-}
-.square::after {
- content: "";
- display: block;
- margin-top: 100%;
-}
-```
-
-## 11. display: none / visibility:hidden / opacity:0
-
-- `display:none`会让元素完全从渲染树中消失,渲染时不会占据任何空间,会造成重排。
-- `visibility:hidden`不会让元素从渲染树中消失,渲染的元素还会占据相应的空间,只是内容不可见,只造成重绘。占据空间,无法交互。
-- `opacity:0`占据空间,可以交互。
-
-## 12. 硬件加速
-
-触发 gpu 渲染会新建一个图层,把该元素样式的计算交给 gpu。
-
-1. transform
-2. opacity
-3. filter
-4. will-change
-
-```css
-will-change: transform;
-transform: translate3d(0, 0, 0);
-```
-
-## 13. 重排重绘
-
-重排:DOM 元素的几何信息(大小和位置)发生变化,或者获取几何信息有关的属性。
-重绘:DOM 元素的外观(颜色等)发生变化,
-
-优化措施:
-
-- 合并对 DOM/样式 的操作
- - 用 class 样式集中改变
- - 使用 documentFragment
-- 脱离文档流
-- 图片定宽高
-- CSS3 的 GPU 加速(transform/opcity/filter/will-change)
-
-## 14 效果和动画
-
-- tansform
- - translate(x,y) 移动
- - scale(x,y) 缩放
- - rotate(angle) 顺时针旋转 默认 Z 轴
-- transition 过渡效果
- - 属性名
- - 持续时间
- - 速度曲线
- - 延迟时间
-- animation 动画
- - 关键帧名 `keyframes`
- - 持续时间
- - 速度曲线
- - 延时时间
-
-## 15. 1px 问题
-
-该问题主要在高分辨率屏幕下的问题,当逻辑像素是 1px 时,在 DPR 为 2 的 设备上显示为 2px 的物理像素
-
-1. 伪元素先放大后缩小 `transform: scale(0.5)`
-
-```css
-#container[data-device="2"] {
- position: relative;
-}
-#container[data-device="2"]::after {
- position: absolute;
- top: 0;
- left: 0;
- width: 200%;
- height: 200%;
- content: "";
- transform: scale(0.5);
- transform-origin: left top;
- box-sizing: border-box;
- border: 1px solid #333;
-}
-```
-
-2. viewport 缩放
-
-```html
-
-```
-
-整个页面进行了缩放
-
-## 16. 小于 12 的字体
-
-- `transform: scale(0.8)` 缩放整个元素
-- `zoom: 0.8` IE 专有
-- 新的浏览器版本
-
-## 17. flex 和 grid 布局的区别
-
-- Flex 主要用于一维布局,即沿着一个轴(主轴/交叉轴)进行布局,适合于构建灵活的、动态的布局结构。适用于那些需要在一条轴上对齐元素的情况。
-
-- Grid 布局则主要用于二维布局,可以同时定义行和列,适合于构建网格布局结构。适用于需要在两个方向上对齐元素的情况。
diff --git a/docs/interview/3-js1.md b/docs/interview/3-js1.md
deleted file mode 100644
index 5da50f4..0000000
--- a/docs/interview/3-js1.md
+++ /dev/null
@@ -1,311 +0,0 @@
-# JavaSript 基础
-
-## 01. 数据类型判断
-
-> 7 个基本数据类型:boolean / number / string / undefined / null / symbol / bigint(ES2020)
-> 引用数据类型:object
-> undefined 不是关键字,而是全局变量
-
-**方法 1:typeof** 运算符
-undefined / string / number / boolean / symbol / bigint / **function** / **object**
-
-- 特点:可以识别 function,null 会被识别为 object [历史遗留问题](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof#typeof_null)
-
-**方法 2:instanceof** 运算符
-
-- 特点:判断对象是否为构造函数的实例,原理是判断对象的原型链上是否存在构造函数的原型对象
-
-```javascript
-function myInstanceof(obj, Fn){
- let proto = Object.getPrototypeOf(obj) // obj.__proto__
- while(proto){
- if(proto===Fn.prototype){
- reture true
- }
- proto=Object.getPrototypeOf(proto)
- }
- return false
-}
-```
-
-- isPrototypeOf 类似:
-
- - 判断对象是否存在于指定原型对象的原型链中
- - `Object.prototype.isPrototypeOf(obj)`
-
- ```js
- Object.prototype._isPrototypeOf = function (obj) {
- obj = obj.__proto__;
- while (obj) {
- if (obj === this) return true;
- obj = obj.__proto__;
- }
- return false;
- };
- ```
-
-**方法 3:constructor**
-
-- 原理是通过访问对象实例上的 constructor 属性对象的构造函数
-- undefined 和 null 没有构造函数
-- 容易伪造,不适合做类型判断
-- 跨窗口下,instanceof 和 constructor 判断都会有问题
-
-**方法 4:Object.prototype.toStrinig.call()**
-
-- `Object.prototype.toString.call(obj).slice(8,-1)`
-- 不能检测非原生构造函数的构造函数名
-
-**总结:**
-
-- 基本类型或者内置对象使用 `Object.prototype.toStrinig.call()`
-- 自定义类型使用 instanceof
-
-**扩展 - Object.prototype.toString 原理**
-
-- 由于大多数对象都重写了 toString 方法,所以要使用 Object 原型上的 toString 方法
-- undefined 和 null 直接返回,内置对象需要各自判断
-- ES 新增的对象,都是写了`[Symbol.toStringTag]` 属性
-
-> [Object.prototype.toString](https://tc39.es/ecma262/#sec-object.prototype.tostring)
-
-## 02. 判断数组
-
-- `Array.isArray(arr)`
-- `Object.prototype.toString.call(arr)`
-- `arr instanceof Array`
-- `arr.constructor===Array`
-- `Array.prototype.isPrototypeOf(arr)`
-
-## 03.数值精度
-
-- 在 JavaScript 中, Number 是一种 定义为 64 位双精度浮点型 (IEEE 754)的数字数据类型
-- 64 位 = 1 位符号位 + 11 位指数位 + 52 位小数位
-
-**大数精度问题**
-
-- `Number.MIN_SAFE_INTEGER` = -(2^53-1)
-- `Number.MAX_SAFE_INTEGER` = 2^53-1
-- `Number.isSafeInteger()`
-- 使用 ES2020 的 bigint 类型 做大数计算
-
-**浮点数精度问题**
-
-- 十进制的小数转为二进制时采用的方法时**乘二取整法**,可能会出现无限循环的二进制数。
-- 转为整数计算,或者转为字符串计算
-
-```js
-/**
- * 精确加法
- */
-function add(num1, num2) {
- const num1Digits = (num1.toString().split(".")[1] || "").length;
- const num2Digits = (num2.toString().split(".")[1] || "").length;
- const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));
- return (num1 * baseNum + num2 * baseNum) / baseNum;
-}
-```
-
-- 使用类库计算如 number-precision.js、Math.js、BigDecimal.js
-
-**相关 API**
-
-- `numObj.toPrecision()` 四舍五入-不可靠 /`numObj.toFixed()` 返回指定小数位数
-- `Math.floor()`向下取整 /` Math.ceil()`向上取整 /`Math.round()` 四舍五入
-
-## 04. 类型转换
-
-**隐式类型转换**
-
-- `==`更倾向 number
-- `+`更倾向转为 string
-- 转为 string 时:"undefined","null","true"/ "false"
-- 转为 number 时:null 为 0,undefined 为 NaN,boolean 为 1/0,symbol 报错
-
-对象会按优先级调用 `[Symbol.toPrimitive]`/ `valueof` / `toString` 方法
-
-**强制类型转换**
-
-- `Number()` 较严格,有非数字的字符串就会转为 NaN
-- `parseInt()`
-- `parseFloat()`
-
-## 05. Object.is
-
-使用 Object.is 来进行相等判断时,一般情况下和三等号的判断相同,它处理了一些特殊的情况,比如 -0 和 +0 不再相等,两个 NaN 是相等的。
-
-```jsx
-Object.is = function (x, y) {
- if (x === y) {
- // +0不等于-0
- return x !== 0 || 1 / x === 1 / y;
- } else {
- // 针对 NaN 等于 NaN
- return x !== x && y !== y;
- }
-};
-```
-
-## 06. 变量提升
-
-- 变量提升:是指在代码执行过程中,引擎把变量的声明部分`var`和函数的声明部分`function`提升到代码开头的 “行为”。变量被提升后,变量的值是 undefined。但实际上变量和函数声明在代码里的位置是不会改变的,而且是在预编译阶段被 JS 引擎放入内存中的,存在执行上下文的变量环境中。
-- 暂时性死区:在用 let/const 命令声明变量之前,该变量都是不可用的(uninitialized)。这在语法上称为 “暂时性死区”( temporal dead zone,简称 TDZ)
-
-## 07. 作用域
-
-作用域控制着变量和函数的可见性和生命周期,是声明时就决定的,是词法作用域(静态作用域)。分为:
-
-- `全局作用域`中的对象在代码中的任何地方都能访问,其生命周期伴随着页面的生命周期。
-- `函数作用域`就是在函数内部定义的变量或者函数,定义的变量或者函数只能在函数内部被访问。函数执行结束之后,函数内部定义的变量会被销毁。
-- `块级作用域`就是使用一对大括号包裹的一段代码,块级作用域就是通过词法环境的栈结构来实现的。使用 let/const 使用,{ }内部变量不会覆盖外部的
-
-## 08.作用域链
-
-- 作用域链就是将一个个作用域串起来,实现变量查找的路径。
-- 在 JavaScript 执行过程中,其作用域链是由词法作用域决定的。词法作用域就是指查找作用域的顺序是按照函数定义时的位置来决定的 ,所以词法作用域是静态的作用域。
-- 每个执行上下文的变量环境中,都包含了一个外部引用,用来指向外部的执行上下文,我们把这个外部引用称为 **outer**
-
-## 09. 闭包
-
-- 闭包的形成源于词法作用域 和 函数可以作为值传递
-- 当函数可以访问并记住所在的词法作用域时,就产生了闭包,即使函数在当前词法作用域之外执行。
-- 闭包和作用域链相关,函数内部是可以读取外部作用域的变量的,但是从函数外部不可以之间读取内部的局部变量的;函数内部定义一个函数使用了局部变量并返回和被引用,这个局部变量会始终保存在内存中。
-- 从 JS 引擎角度,JS 遇到内部函数,对其进行快速的词法扫描,发现内部函数引用了外部函数的变量,会在堆空间创建 closure(外部函数) 对象。
-- 应用:私有化数据,缓存变量
-
-## 10. 执行上下文
-
-执行上下文就是当前 JavaScript 代码被解析和执行时所在环境的抽象概念。 分为:
-
-- `全局执行上下文`
-- `函数执行上下文`
-- `Eval 函数执行上下文`
-
-执行上下文栈,“调用栈”,被用来存储代码运行时创建的所有执行上下文。
-
-变量环境是用来登记 var function 变量声明,词法环境是用来登记 let const class 等变量声明。块级作用域就是通过词法环境的栈结构来实现的,而变量提升是通过变量环境来实现。
-
-
-执行上下文是代码执行之前创建的。this 的指向是执行时确定的。
-
-## 11.this
-
-this 是和执行上下文绑定的,每个执行上下文都有一个 this,运行时才决定 this 的指向。
-
-1. 当函数作为对象的方法调用时,函数中的 this 就是该对象;
-
-2. 当函数被直接调用时,在严格模式下,this 值是 undefined,非严格模式下 this 指向的是全局对象;
-
-3. 箭头函数继承上一层作用域的 this
-
-4. 当构造函数 new 时,this 指向新创建的对象
-
-5. 使用 call / apply / bind 指定 this
-
- 
-
-**关联知识**:call / apply / bind 实现
-
-## 12.原型和原型链
-
-**概念**:每个对象都有属性`__proto__`指向它的构造函数的 `prototype`,原型对象也是对象也有`__proto__`,层层向上指向`Object.prototype`,最终指向`null`。当访问对象的某个属性或方法自身不存在时,会通过这个原型链层层向上找,JS 的继承就是通过原型链实现的。
-
-**关联知识**:`new` / `instanceof` / `Object.create` 的实现和`寄生组合继承`的实现
-
-**理解**:
-
-- `prototype`(原型对象)是构造函数的属性,`__proto__`是任何对象的属性,指向该对象的构造函数的`prototype`。
-- `prototype` 有 `constructor` 属性,指向构造函数
-- 构造函数也是对象,构造函数的`__proto__`的属性指向构造函数 `Function.prototype`
-- `Function.prototype`对象,其`__proto__`属性指向构造函数 `Obejct.prototype`
-
-
-
-## 13.继承的方式(todo)
-
-
-
-> 简单叙述,详细请看手写实现
-
-1. 原型链继承: `Child.prototype = new Parent()`;
-
- 缺点:所有实例对象共享一个原型对象,子类创建实例时没法传参
-
-2. 构造函数继承:`function Child () { Parent.call(this) }`
-
- 缺点:不能继承父类原型属性或者方法
-
-3. 组合继承:
-
-```javascript
-function Child(name, age) {
- Parent.call(this, name); // 第二次调用 Parent()
- this.age = age;
-}
-
-Child.prototype = new Parent(); // 第一次调用 Parent()
-Child.prototype.constructor = Child; // 手动挂上构造器,指向自己的构造函数
-```
-
-缺点:构造函数多调用了一次
-
-4. 原型式继承: 基于已有的对象来创建新的对象,使用`Object.create`方法`const person = Object.create(parent)`,缺点与原型链继承相同
-5. 寄生式继承:对原型式继承获得的对象,再进行扩展。缺点是没有办法实现函数的复用
-6. 寄生组合式继承:
-
-```javascript
-function Child(name, age) {
- Parent.call(this, name); // 调用 Parent()
- this.age = age;
-}
-
-function inherit(Child, Parent) {
- // 这里改用 Object.create 就可以减少组合继承中多进行一次构造的过程
- Child.prototype = Object.create(Parent.prototype);
- Child.prototype.constructor = Child; // 手动挂上构造器,指向自己的构造函数
-}
-```
-
-## 问题
-
-### 问题链 1:let/const -> 作用域 -> 闭包 -> 垃圾回收
-
-**1.1 let/const 和 var 有什么区别?**
-
-- 概念:使用 var 声明的变量,可以在声明之前使用,其值为`undefined` 这个行为称为变量提升;ES6 提出了 let/const,在声明之前都是不可用的,成为暂时性死区。
-- 解释:let/const 有着更严格的作用域规则,尽量避免使用 var。
-
-- 引申
-
- - let/const 对应 **块级作用域** ,所谓作用域就是变量和函数的可访问性和生命周期。块级作用域是 ES6 新增的,在大括号内部声明 let/const 只在内部有效。
- - JS 是词法作用域,作用域是在编写代码时就决定的,还有函数作用域和全局作用域;
-
-**1.2 说一下闭包**
-
-- 概念:闭包的概念离不开作用域的概念,JS 是词法作用域, 函数内部可以访问外部作用域的变量。如果在一个 a 函数内部定义一个函数 b 并返回,而函数 b 引用了函数 a 的变量。此时 a 函数赋值给某个变量。从调用栈的角度讲,函数 a 执行完应该就销毁了,但引用的变量会保存在堆内存中。
-- 应用:私有化数据,缓存数据
-- 引申:闭包会引起内存泄漏吗
- - 使用闭包就是在利用其特性缓存数据,合理使用并不会
- - 早期 IE 使用的垃圾回收机制-引用计数算法 会造成循环引用问题,才会造成内存泄漏。
-
-**1.3 垃圾回收机制**
-
-- 使用标记-清除算法,通过判断对象的可达性进行清除。
-- 分代回收机制:
-
- - 新生代:存活时间短,空间小,复制算法,晋升机制
- - 老年代:存活时间长,整理算法
-
-- 全停顿:v8 做了一些优化,增量标记(三色标记法、利用浏览器空闲时间)
-
-**1.4 防止内存泄漏的措施**:
-
-- 避免使用全局变量
-- 清除定时器/事件绑定/dom 引用
-- 滥用闭包
-- console.log 不会,打开 F12 才会引用
-
-排查
-
-- `Performance`:memory 折线一直上升,定位函数
-- `Memory`:内存快照
diff --git a/docs/interview/3-js2.md b/docs/interview/3-js2.md
deleted file mode 100644
index 7139dae..0000000
--- a/docs/interview/3-js2.md
+++ /dev/null
@@ -1,74 +0,0 @@
-# JavaSript 高级
-
-## 箭头函数
-
-- 箭头函数不会创建自己的 this,从上一层作用域继承 this
-- call / apply / bind 方法不能改变箭头函数中 this 的指向
-- 没有 arguments
-- 没有 prototype 不能 new
-- 不能使用 yield 命令,箭头函数不能用作 Generator 函数
-
-## WeakSet/WeakMap
-
-- WeakSet 的成员要求是对象,WeakMap 的键要求是对象。
-- WeakSet 中的对象都是**弱引用**,如果 WeakSet 中的某个对象不可达(引用置为 null)了,WeakSet 中的该对象会被回收掉。
-- WeakMap 实例仅有 has()、set()、get()、delete()操作方法,没有 size 属性以及 keys()、values()、entries()方法,所以不能获取其所有键值,也就不能迭代。
-- WeakSet/WeakMap 没有部署 Iterator 接口,所以不能用 for...of 遍历。因为 size 取决于垃圾回收机制。
-- 场景
- - WeakSet:保存 dom 节点
- - WeakMap: 给 dom 添加处理函数
-
-## 垃圾回收机制
-
-- 堆
-- 引用计数法/标记清除法(可达性分析)
-- 代价假说,新生代,老年代
-- 单线程-全停顿 v8 做了一些优化,增量标记(三色标记法、利用浏览器空闲时间),惰性清理(写屏障),并发并行,目的是减少堆主线程的影响
-
-## CJS 和 ESM 模块化对比
-
-- CJS 模块是运行时加载,ESM 是编译时输出接口
-- CJS 模块输出的是值的拷贝,ESM 输出的是值的引用
-- CJS 模块为同步加载,ESM 支持异步加载
-- CJS 是单个值导出,ESM 可以导出多个
-- CJS 模块的 this 是当前模块,ESM 的 this 是 undefined
-
-## for 循环问题
-
-- var for 里面定义的变量渗透到了外部
-- let 块级作用域,每次循环重新声明一个变量
-
-
-
-## 迭代器和生成器
-
-生成器是一种返回迭代器对象的函数
-
-
-
-## Promise
-
-
-
-
-
-## ES新特性
-
-2022:class
-
-2021:Promise.any
-
-2020:bigint、import 动态导入、可选链、Promise.allSettled、GlobalThis
-
-2019:flat
-
-2018:for-await-of、Promise.finally
-
-2017:async/await
-
-2016:includes
-
-2015:class、esm、=>、let/const、解构赋值、rest、Promise
-
-
-
diff --git a/docs/interview/4-browser.md b/docs/interview/4-browser.md
deleted file mode 100644
index 7f381f2..0000000
--- a/docs/interview/4-browser.md
+++ /dev/null
@@ -1,177 +0,0 @@
-# 浏览器
-
-## 1.浏览器进程有哪些
-
-浏览器是多进程架构的,每个标签页是独立的渲染进程
-
-- 浏览器主进
-- **渲染进程**
- - GUI 渲染线程:渲染页面,和 JS 引擎互斥
- - JS 引擎线程:执行 JS 代码
- - 事件触发线程:主要用来控制事件循环,比如 JS 执行遇到计时器,AJAX 异步请求等,就会将对应任务添加到事件触发线程。在对应事件符合触发条件触发时,就把事件添加到待处理队列的队尾,等 JS 引擎处理
- - 定时触发器线程: setTimeout/setInterval
- - 异步 HTTP 请求线程:
-- GPU 进程
-- 网络进程
-- 插件进程
-
-## 2.事件循环机制
-
-JS 是单线程的语言,只有一个执行栈,先执行当前任务,遇到异步事件就放入任务队列中,分为宏任务和微任务,当前宏任务执行完会处理所有的微任务,再从宏任务队列中取一个开始下一个宏任务。
-
-- 渲染是下一个宏任务执行前 [https://zhuanlan.zhihu.com/p/78113300](https://zhuanlan.zhihu.com/p/78113300)
-
-
-
-宏任务:script 标签 / 交互事件
-
-- `setTimeout()` / `setInterval()` /`requestAnimationFrame()` / **Node**: `setImmediate()`
-
-微任务:
-
-- `Promise()` / `MutationObserver()` / `queueMicrotask()` / **Node**: `process.nextTick()`
-
-Node:
-
-- `Node11`开始,每执行完一个 `timers` 类回调,例如 `setTimeout` /`setImmediate` 之后,都会把微任务给执行掉(promise 等)
-
-## 3.浏览器存储
-
-**Cookie**:
-
-主要用于,会话状态管理,用户跟踪。
-缺点:空间小 4K 限制;网络请求会携带影响性能;安全和隐私问题,如 CSRF
-
-- `Domain`/`Path` 定义了 Cookie 的作用域
-- 可设置有效期(`Expires`/`Max-Age`)
-- `HttpOnly` 限制 JS 访问(`document.cookie`),减少 XSS 风险
-- `Secure` 标记为只能通过 HTTPS 发送
-
-第三方 Cookie 的问题:
-
-- `SameSite` 限制三方 Cookie 在跨站(顶级域名不同)请求时不会被发送,http 不支持,需要同时设置`Secure`
- - `Strict` 不允许跨站
- - `Lax` 允许部分请求,如 `a`、`link`
- - `None` 不限制
- - Chrome 80+ 默认是 `Lax`
-- Chrome 新版本浏览器停用第三方 Cookie
-- Chrome 114 增加了 Cookie 独立分区 新属性,`Partitioned`, 第三方 cookie 可以用。 跨站不共享
-
-> 操作:document.cookie 读取/或写入,写入是追加
-
-**LocalStorage/SessionStorage**:5M
-
-- 浏览器提供的本地存储方法,同源策略,API 简单
-- SessionStorage:当前窗口关闭就失效了,多个同源页面不共享
-- localStorage:永久保存,同源页面共享
-- 缺点:空间小,只能存字符串
-
-> 方法:setItem/getItem/removeItem/clear
-
-**IndexedDB**:用于客户端存储大量结构化数据,采用键值存储,接近 NoSQL 数据库,同源策略,支持异步,支持事务,空间大(不少于 250M)
-
-## 4.怎么解决跨域问题
-
-同源策略指的是:协议+域名+端口
-
-**JSONP(手写)**
-
-- 前端构建一个全局函数的回调 promise
-- 服务端返回一个传入数据的调用函数的字符串,浏览器接收后执行
-
-> 仅支持 get,不安全
-
-**CORS**
-跨域资源共享(CORS,Cross-Origin Resource Sharing)
-在服务端允许跨域的情况下,通过 HTTP 响应头告诉浏览器当前请求允许跨域。
-
-`简单请求`:
-
-- 请求方法为 **GET**、**POST**、**HEAD**。
-- 请求头只能使用下面的字段:
- - Accept
- - Accept-Language
- - Content-Type (只限于 text/plain、multipart/form-data、application/x-www-form-urlencoded)
- - Content-Language
-
-任意一条要求不符合的即为`非简单请求`
-
-- 非简单请求会先发个预检请求(Preflight)
-
-```
-- 简单请求:
-请求头:Origin
-响应头:Access-Control-Allow-Origin
-
-
-- 预检请求
-请求头:Method:OPTIONS
-Access-Control-Request-Headers:content-type
-Access-Control-Request-Methods:POST
-
-响应头:
-Access-Control-Allow-Headers: content-type
-Access-Control-Allow-Origin: *
-Access-Control-Request-Methods: POST,GET,OPTIONS
-```
-
-- CORS 携带 Cookie
- - 预检的响应头里要 `Access-Control-Allow-Credentials: true`
- - `Access-Control-Allow-Origin 不能为空
- - 在请求中设置 `withCredentials`
-
-**代理转发**
-
-- 正向代理
-- 反向代理
-
-## 5.浏览器缓存
-
-浏览器缓存查找优先级:Service Worker / Memory Cache(浏览器自己控制) / Disk Cache(**HTTP 缓存**) / Push Cache(HTTP2)
-
-**HTTP 缓存**:
-**强缓存**:
-
-- 1.0 响应头 `Expires`
-- `Pragma:nocache`
-- 1.1 `Cache-Control: max-age=120;no-store/no-cache;private/public`
-- 没有缓存,浏览器会启发式缓存,
-
-**协商缓存**:
-
-- `Last-modified / If-Modified-Since`
-- `Etag / If-None-Match`
-
-F5: html 走`max-age=0`, 其他走缓存机制
-
-ctrl+F5: `Cache-Control:no-cache;Pragma:no-cache`
-
-`max-age=0`会走协商缓存,`no-cache` 重新请求
-
-## 6.浏览器渲染过程
-
-关键渲染路径(CRP):创建 DOM 树/创建 CSSOM 树 - 生成渲染树 - 布局 - 绘制
-
-
-
-- 解析 HTML 和 CSS 分别生成 `DOM 树`和 `CSSOM 树`
-- 组装成 `render 树`,只添加可见的节点
-- `布局Layout` :计算出 节点的布局信息(大小和位置),生产布局树
-- 通过布局树,进行分层生成图层树
-- `绘制`:为每个图层生成绘制列表,绘制节点的外观(颜色等)等
-- `合成`:将图层划分图块,光栅化(转位图),发送绘制命令浏览进程,渲染显示
-
-> 结合性能优化回答
-
-> CSS 会阻塞渲染吗
->
-> - CSS 不会阻塞 DOM 解析(link 在 head 中)
-> - CSS 会阻塞 DOM 树的渲染(阻塞 render tree 的形成)
-> - 会阻塞后面的 JS 的执行(JS 可以更改 DOM 样式)
-
-## 7.rAF/rIC
-
-- `requestAnimationFrame`:告诉浏览器在下一次绘制之前执行
-- `requestIdleCallback`:在浏览器空闲的事件执行
-
-
diff --git a/docs/interview/5-network.md b/docs/interview/5-network.md
deleted file mode 100644
index cb3cc53..0000000
--- a/docs/interview/5-network.md
+++ /dev/null
@@ -1,177 +0,0 @@
-# 计算机网络
-
-## 1.TCP 和 UDP 区别
-
-- `TCP` 面向连接,`UDP` 不需要建立连接
-- `TCP` 是面向字节流的(可分割),`UDP` 是面向报文的
-- `TCP` 只能一对一通信,`UDP` 支持一对一,一对多,多对一,多对多
-- `TCP` 可靠传输,使用流量控制和拥塞控制,`UDP` 不可靠
-- `TCP` 头部开销大(20-60 字节),`UDP` 头部开销小(8 字节)
-
-## 2.HTTP 状态码
-
-- 1××:中间状态
- - `101` Switching Protocols
-- 2××:成功
- - `200` OK
- - `204` No Content:不返回 body,埋点上报
- - `206` Partial Content
-- 3xx:重定向
- - `301` 永久重定向
- - `302` 临时重定向 ;效果和 301 一样,只是语义不一样
- - `304` 缓存重定向 协商缓存验证
-- 4xx:客户端错误
- - `400` Bad Request:通用的错误码
- - `401` unauthorized 未授权
- - `403` Forbidden
- - `404` Not Found
- - `405` Method Not Allowed
-- 5xx:服务器错误
- - `500` Internal Server Error:通用的错误码
- - `502` Bad Gateway:网关/代理错误
- - `503` Service Unavailable 服务不可用
-
-## 3.HTTP2 的特性
-
-- 二进制帧
-- 多路复用
-- 头部压缩
-- 服务器推送
-
-**多路复用**:
-
-- `HTTP/1.1`:同⼀时间⼀个 TCP 连接只能处理⼀个请求, 采⽤⼀问⼀答的形式, 上⼀个请求响应后才能处理下⼀个请求。由于浏览器最⼤ TCP 连接数的限制, 所以有了最⼤并发请求数的限制.
-- `HTTP/2.0`:同域名下所有通信都在单个连接上完成,消除了因多个 TCP 连接⽽带来的延时和内存消耗。单个连接上可以并⾏交错的请求和响应,之间互不干扰。
-
-为什么 `HTTP/1.1` 不能实现多路复⽤?
-
-- `HTTP/2` 是基于⼆进制“帧”的协议,`HTTP/1.1` 是基于(报文)“⽂本分割”解析的协议。
-- `HTTP1.1` 的报⽂结构中, 服务器需要不断的读⼊字节,直到遇到换⾏符, 或者说⼀个空⽩⾏. 处理顺序是串⾏的, ⼀个请求和⼀个响应需要通过⼀问⼀答的形式才能对应起来。
-- `HTTP2.0` 中,有两个⾮常重要的概念,分别是`帧(frame)`和`流(stream)`。帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。
-- `多路复⽤`,就是在⼀个 `TCP` 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极⼤的提⾼传输性能。
-
-## 4.HTTPS 的原理
-
-HTTPS 其实就是 HTTP+TLS 的传输方式,TLS 叫传输层安全,之前叫 SSL(安全套接层)。
-
-因为 HTTP 属于明文传输,可以被截取到。那么就需要对传输报文进行加密,加密方式有两种:非对称和对称。对称就是同一个密钥进行加密解密,非对称就是有一组公私密钥,可以互相加解密。
-
-那么 TLS 是怎么做的呢?
-
-因为非对称加密的效率不高,对 HTTP 报文一般采用对称加密,然后通过非对称加密传输这个会话密钥。
-
-比如客户端生成一个`会话密钥`通过一个`公钥`加密,服务端通过`私钥`解密获得会话密钥,就可以安全地传输报文了。
-
-但是这个公钥不能安全地传输到客户端手里,即使加密也需要对应的密钥进行传输,现在的通过 `CA机构` 解决这个密钥的信任问题。
-
-1. 服务端向 `CA机构`申请一个证书,这个证书,就是用 `CA机构的私钥` 加密过的 `网站的公钥`。
-2. 然后客户端请求得到这个证书,通过预装在客户端的 `CA机构的公钥` 进行解密和验证签名,得到这个`网站的公钥`。
-3. 简单的讲,客户端就可以生成一个`会话密钥`通过`网站的公钥`加密传输给服务端,服务端通过`网站的私钥`解密后就得到了这个`会话密钥`。
-
-但是,真实情况不是这个简单流程(RSA),有密钥交换算法,比如 ECDHE,在请求返回证书的过程,服务端和客户端会分别交互两个随机数,然后自个通过协商好的算法参数生成第三个随机数,再通过这个三个随机数生成会话密钥,这个密钥是不需要传输的,两边都知道,之后就可以加密传输了。
-
-## 5.从输入 URL 到显示页面
-
-- 浏览器处理 URL
- - 浏览器进程
-- 网络进程 发起请求
- - 检查缓存
- - DNS 查找
- - HTTP(S) / TCP 连接
-- 响应请求,渲染进程渲染页面
-- **关键渲染路径**
-
-## 6.DNS 解析
-
-**DNS(Domain Name System,域名系统)是一个将域名和 IP 地址相互映射的分布式服务**
-缓存:浏览器-操作系统-路由器-本地域名服务
-
-1. 客户端发送请求给本地域名服务器,如果没有继续(递归)
-2. 本地域名服务器,向**根域名服务器**,返回**顶级域名服务器**地址,然后请求拿到**权威域名服务器**,最后请求拿到 IP 返回给客户端(迭代)
-
-一般我们向本地 DNS 服务器发送请求的方式就是**递归查询**,因为我们只需要发出一次请求,然后本地 DNS 服务器返回给我们最终的请求结果。而本地 DNS 服务器向其他域名服务器请求的过程是**迭代查询**的过程,因为每一次域名服务器只返回单次查询的结果,下一级的查询由本地 DNS 服务器自己进行。
-
-## 7.长连接/长轮询/短轮询/websocket
-
-- 长连接:`Connection:keep-alive`
-
-- 长轮询:服务端将请求挂起一定的时间再返回(微信二维码)
-
-- 短轮询:客户端每隔一段时间发送请求
-
-- websocket:全双工的协议,可以相互收发消息。
-
-- EventSource:server 到 client,支持文本
-
-## 8.CSRF
-
-**csrf:跨站请求伪造(Cross—Site Request Forgery)**
-攻击者利用 HTTP 请求会自动携带 cookie 的特定,利用用户的登陆状态发送恶意请求。
-方法:自动发起 get/post 请求;诱导点击
-
-CSRF 的过程:
-
-- 用户登录了 `a.com` ,有了 cookie
-- 黑客引诱用户访问 `b.com` 网页,偷偷让用户访问了 `a.com/api/xxx`(干某件事)
-- `a.com` api 接口收到请求 cookie ,误以为是真实用户的请求,就受理了
-
-**防御**:
-
-- CSRF token 验证
-- HTTP 请求头的 referer 字段(可以伪造),Origin(不含具体 url)
-- SameSite 限制 Cookie 在跨站请求时不会被发送
- - Strict,必须是相同站点
- - Lax 宽松,允许部分类型,比如 a 链接
- - None 不限制
-
-## 9.XSS
-
-**XSS:跨站脚本(Cross Site Scripting)**
-
-- **存储型**:将恶意代码存在服务器,请求含有恶意代码的页面。
-- **反射型**:构建含有恶意代码的 url,服务器不存储,后端直接返回到页面。
-- **DOM 型**:前端解析恶意代码执行,相比前两者,属于前端的漏洞。
-
-**防御**:
-
-- 本质是防止恶意脚本的注入
-- 存储型和反射性:改成纯前端渲染, 对输入内容进行转义和过滤
-- DOM 型:谨慎 innerHTML/ v-html ,字符串做代码执行的 eval,Function
-- CSP 内容安全策略 Content-Security-Policy,白名单告诉浏览器认可的资源来源,http 响应头/meta
-- 很多 XSS 盗取是 cookie 的,可以设置 Cookie 的 HttpOnly
-
-## 10.前端鉴权方案有哪些
-
-概念:鉴权(`Authentication`):验证用户是否拥有访问系统的权利
-
-常见的鉴权方式有以下几种方式:
-
-1. `基本认证方案` 不安全,密码容易泄露
-2. `session-cookie` session 需要存储, 依赖 cookie ,不安全:CSRF
-3. `token` 前端存储 token,避免 CSRF,为了减少 token 被盗风险,缩短有效期,使用`Access Token`和`Refresh Token`(用于获取前者,时效长)
-4. `JWT` token 验证服务端需要查询用户信息鉴权,JWT 的 Payload 负载中存储常用信息,服务端不存储状态,一旦签发无法废除
- JWT 由三部分组成: Header 头部、 Payload 负载 和 Signature 签名, 对这个 JSON 对象加密,
-5. `SSO`
- - 同域:设置 Cookie 的 Domain 为 .baidu.com
- - 不同域:SSO.com 返回 token 验证 token 跳转
-6. `OAuth2.0` 略
-
-> - [一文教你搞定所有前端鉴权与后端鉴权方案,让你不再迷惘](https://juejin.cn/post/7129298214959710244#heading-26)
-> - [前端鉴权的兄弟们:cookie、session、token、jwt、单点登录](https://juejin.cn/post/6898630134530752520)
-
-## 11.http 头部有哪些
-
-- 基础
-
- - `Accept` | `Content-Type` 内容类型
- - `Accept-Encoding` | `Content-Encoding` 编码方式
- - `Connection:Keep-Alive` 长连接
- - `Host` 主机名
- - `User-Agent` 浏览器信息
- - `Referer` 来源页面
-
-- Cookie:`Cookie` | `Set-Cookie`
-- 缓存
-- CORS
-
-## 12.cookie 有哪些字段
diff --git a/docs/interview/6-vue.md b/docs/interview/6-vue.md
deleted file mode 100644
index b1f980c..0000000
--- a/docs/interview/6-vue.md
+++ /dev/null
@@ -1,357 +0,0 @@
-# Vue
-
-> 以Vue3为开头,引出下面的话题
-
-## 1.说一下 Vue3 新特性
-
-1. **API 方面**:
-
-- Composition API 更好的逻辑组织和逻辑复用
-- Teleport 传送⻔、Fragments ⽚段、SFC的CSS变量、Suspense等
-- 自定义渲染器等
-
-2. **性能方面**:
-
-- 速度
-
- - 基于 Proxy 的响应式系统
-
- - 编译优化:静态标记、静态提升等
-
- - diff 算法优化
-
-- 体积:引入 Tree-shaking
-
-3. **维护性**:
-
-- TypeScript:更好的类型检查和类型推导,也省去了维护 d.ts 的麻烦
-
-- Monorepo:响应式库可以单独使用
-
-> 引申:
->
-> - Composition API
-> - Proxy响应式
-> - Diff
-> - Tree-shaking
-> - Monorepo
-
-## 2. 说一下 Composition API 的优势
-
-和 Options API 对比,分两个方面
-
-- 代码组织:Options API 代码长了要跳来跳去
-- 逻辑复用:mixins 来源不明 命名冲突
-
-还有就是函数式的优势
-
-- 更简洁清晰:没有了 this 的指向不明的问题
-- 函数更好的类型推断 :vue2 使用TS `vue-class-component` 提供的 Class API,依赖装饰器的提案不稳定
-
-
-
-Composition API 包括:
-
-- 响应式相关(ref、reactive、computed、watch 等)
-- 生命周期钩子(onMounted 和 onUnmounted 等)
-- provide、inject 等
-
-
-
-与React Hooks 对比:
-
-- 灵感来源
-- React Hooks 组件更新时都会重新调用,而 Vue 是基于响应式系统的
- - 只执行一次,会自动收集依赖,可避免不必要的更新
-
-
-
-## 3. vue 响应式理解⭐
-
-- 概念:追踪**对象属性**的读写,就等在 get 的时候进行依赖收集,set 的时候做出响应。
-- Vue2 中 对象使用`Object.defineProperty` 对属性进行劫持,多层对象是**递归**实现劫持的;数组是通过重写数据的 7 个原型方法。
-- **缺点**:
- - 对象无法监听到新增和删除属性,需要使 `$set`/`$delete`;
- - 数组无法监听索引(出于性能考虑)和长度变化;
- - 嵌套对象需要深层监听,性能问题
- - 不支持`Map`/`Set`
-
-- Vue3 使用 `Proxy` 对对象进行代理,是对整个对象进行监听,拦截 set/get 行为,解决 Vue2 的问题,性能更好,不兼容IE
-
-```js
-function reactive(obj) {
- return new Proxy(obj, {
- get(target, key) {
- track(target, key)// 收集依赖
- return target[key]
- },
- set(target, key, value) {
- target[key] = value
- trigger(target, key)// 触发响应
- }
- })
-}
-
-// todo 完善版本
-```
-
-Proxy的优势:
-
-- 监听整个对象即可,不需要遍历监听每个属性
-- 更方便的监听数据
-
-
-
-**设计模式:观察者模式**
-
-> 为什么不是发布订阅模式,观察者和被观察者是存在直接关联的(观察者是Watcher实例),发布订阅是有中心的,Vue中的事件绑定机制是发布订阅模式 `$on/$emit`
-
-
-
-**细节**
-
-Vue2 中,每个属性都有自己的`Dep`实例,`subs` 存放它所依赖的`watcher`,属性`set`后通知对应的 `watcher`去更新`dep.notify`
-
-- 渲染watcher:视图初始化时,`render`函数运行,触发属性的`get`,收集依赖`dep.depend`
-- 自定义watcher
-- 计算watcher
-
-> [为什么Watcher 要收集 Dep 实例](https://juejin.cn/post/6995079895470571551)
-
-- 渲染watcher:重新渲染,方便清除无用的依赖` dep.removeSub(this)`
-- 自定义watcher:`vm.$watch` 返回一个取消观察函数,目的同上
-- 计算watcher:计算watcher不仅要收集自己的依赖,还要让自己依赖的值收集渲染watcher,才可以让视图响应更新
-
-
-
-## 4. 虚拟DOM和Diff
-
-**虚拟DOM**:
-
-- 虚拟DOM 就是用 JS 对象来描述真实的DOM,是一种抽象
-- 直接操作 DOM 是有限制,如diff/clone,通过 JS 操作对象更方便;频繁的操作dom会引发重排和重绘,通过patch方法(diff)渲染的页面,可以减少dom 直接操作的次数。
-- 实现跨平台,通过 vdom 可以渲染到不同的平台。
-
-
-
-**diff算法**:
-
-- 首先 dom diff 是同层比较,不考虑跨层的情况
-- 先比较是否是相同节点 key tag,相同节点比较属性,并复用老节点,然后比较儿子节点:
-- Vue2 是双端比较,两个列表的头尾相互比较,对比的过程中逐渐向内靠拢,直到某一个列表遍历完成。
-- Vu3 是头和头比,尾和尾比,剩余的基于最长递增子序列进行增/删/移
-
-
-
-**key的作用**
-
-key的作用是为了更高效的更新DOM,diff 算法的目标就是尽可能复用原来对应的节点,减少dom操作量。
-
-key 就是 vnode 的唯一 id,在dom diff 的过程中,通过key 找到对应原型的节点,来减少dom操作量,提升视图更新的性能。
-
-- 若不设置 key,就是 undefined,diff算法会认为是相同节点,会就地复用元素,会增加dom操作量,而且在元素有状态的情况下会造成渲染错误(隐蔽性bug)。
-- 使用数组 index 作为 key,如果列表的顺序会发生变化,和不写 key 区别不大。
-
-
-
-## 5. 模板编译原理
-
-Vue2的过程是 parse -> optimize -> genarate
-
-optimize:优化原始 AST,标记静态节点。
-
-
-
-Vue3 更加标准化,中间过程为 transform
-
-1. parse:compilter 会对 template 进行解析,得到抽象语法树AST,
-2. transform:遍历 AST 进行 转换
-3. generate: 生成render函数,render函数是返回虚拟DOM的函数
-
-
-
-vue3的编译优化:编译阶段尽可能提取关键信息
-
-- patchFlag 对节点打上标记,为 runtime patch 提供依据,实现静态提升和靶向更新。
-- 静态提升: 将纯静态节点提升到渲染函数外部,在渲染函数内部保持对静态节点的引用即可
-- Block:dynamicChildren 收集子代所有的动态节点,无需层级遍历,做到靶向更新。
- - Block Tree: 为了解决如v -if v-for 导致的DOM结构不稳定问题
-- 缓存模板中的内联事件处理函数,避免函数重新创建
-
-https://zhuanlan.zhihu.com/p/150732926
-
-
-
-
-
-## nextTick
-
-- Vue 是异步更新策略,数据变化,vue不会立即更新 dom,是开启一个队列,同一个事件循环里发生的变化会异步的批量更新。如果同一个 watcher 被多次触发,避免频繁的DOM更新。
-- 要获取到更新后的 DOM,需要使用 `nextTick`,用户传入的回调函数被添加到刷新函数(`flushSchedulerQueue`)的后面
-- 降级处理 微任务(promise->MutationObserver)->宏任务(setImmediate->setTimeout )
-
-> 微任务(当前宏任务还没结束)为什么能获取更新后的dom,这里的dom更新结果是在内存中也能获取到,虽然浏览器可能还没渲染出来(宏任务每轮结束完也不一定会伴随着页面更新渲染)。
-
-
-
-
-
-## MVVM概念
-
-1. Model模型层、View视图层、ViewModel 视图模型层,用来连接 Model 和 View
-2. **数据驱动视图,视图响应改变数据**。
-3. Vue 可以看作是 MVVM 框架,Vue 实例的变量名用的是 vm (ViewModel 的缩写) ;但没有完全遵循 MVVM 模型,Vue 中可以通过 `$ref`直接去操作视图,这一点上违背了 MVVM。
-
-
-
-## 双向绑定
-
-- 解释:
-
-1. vue 中双向绑定使用指令 `v-model`,可以绑定数据到视图,对应的视图变化也会改变该数据。
-2. `v-model` 是语法糖,默认情况下相当于`:value`和`@input`。v-model 经过**模板编译**被转换为属性 `value` 和一个事件监听,事件回调函数中会做相应变量更新操作。
-
-- 使用
-
-1. 通常在原生表单项上使⽤ `v-model` ,也可以在自定义组件上使用
-2. `v-model` 只能去绑定一个变量,使用 `.sync` 可以实现多个变量的双向绑定
-3. Vue3 的 `v-model` 有更新,类似`.sync`,默认的 `v-model` 相当于`:modelValue`和`@update:modelValue`
-
-- 优点
-
-1. 使用 `v-model` 可以减少事件回调函数代码,方便绑定和更新数据
-
-```jsx
-
-
-
-
- // 子组件触发更新
-this.$emit('update:title', newValue)
-```
-
-```JSX
-
-
-
-
-
-
-
-
-```
-
-> Vue中的单向数据流是指数据的流向只能从父组件向子组件,子组件不能直接修改父组件中的数据,而是通过触发父组件中的事件来实现数据的修改
-
-
-
--
-
-
-
-## 组件通信方式
-
-- 父子组件 props /$emit- ~~$on~~/ $ref / $parent - $~~children~~/ $refs / $attrs ~~$listeners~~
-- 兄弟组件 $parent / $root / eventbus / vuex
-- 跨层级关系 provide + inject / eventbus / vuex
-
-> $on 实现原理是发布订阅模式,vue3没法直接用on/emit 实现eventbus,可以使用 mitt 或 tiny-emitter 插件
-
-
-
-## Vue 生命周期
-
-- 生命周期钩子就是回调函数而已,当创建组件实例的过程中会调用对应的钩子,钩子函数维护成数组的形式。
-- 分为组件的
- - 创建前后(beforeCreate/created)
- - 挂载前后(beforeMount/mounted)
- - 更新前后(beforeUpdate/updated)
- - 销毁前后(beforeDestory/destroyed Vue3: beforeUmounted/unmounted)
-- keep-alive激活时(activated/deactivated)
-- 捕获后代组件错误(errorCaptued)
-- 父子组件,创建是自上而下,挂载是自下而上。
-
-> setup位于 beforeCreate 和 created 之间
-
-
-
-## v-if 和 v-for
-
-- 实践中不应该把 v-for 和 v-if 放⼀起
-- Vue2 中 for 比 if 的优先级高,如果放在一起使用,会遍历整个列表逐个判断;推荐使用 computed 计算属性;
-- Vue3 中 if 比 for 的优先级高。
-
-
-
-## v-if 和 v-show
-
-- v-if 如果条件不成立则不会渲染当前指令所在节点的 dom 元素
-- v-show 是改变的元素的`display:none`
-- 频繁切换的就用 v-show
-
-
-
-## computed和watch
-
-- computed 依赖响应式的数据产生新数据,具有缓存性,只有依赖的响应式数据变化时才会重新求值。
-- watch 用来监听某个响应式数据的变化并执行对应的回调函数,是命令式的。
-
-
-
-## 组件扩展方法
-
-- mixins
-
-```javascript
-// 全局混⼊:将混⼊对象传⼊
-Vue.mixin(mymixin)
-
-// 局部混⼊:做数组项设置到mixins选项,仅作⽤于当前组件
-const Comp = {
- mixins: [mymixin]
-}
-```
-
-- slot 默认插槽/具名插槽/作用域插槽
-- extends (组件的继承,类似于mixins)
- - 创建一个“Vue子类”,参数是一个包含组件选项的对象。在实际业务开发中我们很少使用,但是在一些独立组件开发场景中,例如要实现一个类似于提示组件,可以像调用函数使用它,传参和挂载
-- 合并策略:
- - 同名钩子函数合到一个数组,混入的在前面
- - 为对象的选项,**冲突以当前组件的为准**
-- 混入的数据和方法不好判断来源而且容易冲突,composition-api 利用独立的响应式模块方便使用响应式数据和编写独立的逻辑,更有利于逻辑抽离,方便可读性和可维护性。
-
-
-
-## 组件data为什么必须是个函数?
-
-组件可能被多次实例化,调用 data 函数返回一个对象作为组件的数据源,这样可以保证**相同组件 不同实例 **间数据互不影响。
-
-
-
-## slot实现原理
-
-- 分为普通插槽和作用域插槽
-- 作用域插槽的就是让插槽内容能够访问子组件中的数据
-- 父组件把插槽编译成返回 vnode的函数,子组件渲染时,调用执行
-
-[https://zhuanlan.zhihu.com/p/126286014](https://zhuanlan.zhihu.com/p/126286014)
-
-
-
-## keep-alive⭐
-
-- 开发中缓存组件使⽤keep-alive组件,keep-alive是vue内置组件,keep-alive包裹动态组件component时,会缓存不活动的组件实例,⽽不是销毁它们,这样在组件切换过程中将状态保留在内存中,防⽌重复渲染。
-
-- 结合属性include和exclude可以明确指定缓存哪些组件或排除缓存指定组件,集合vue-router缓存页面
-
-- activated 和 deactivated 钩子
-
-- keep-alive是⼀个通⽤组件,它内部定义了⼀个map,缓存创建过的组件实例,它返回的渲染函数内部会查找
-
- 内嵌的component组件对应组件的vnode,如果该组件在map中存在就直接返回它。由于component的is属
-
- 性是个响应式数据,因此只要它变化,keep-alive的render函数就会重新执⾏。
-
diff --git a/docs/interview/6-vue2.md b/docs/interview/6-vue2.md
deleted file mode 100644
index 6c4b812..0000000
--- a/docs/interview/6-vue2.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# Vue全家桶和应用
-
-## 怎么实现路由懒加载
-
-当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就会更加高效。
-
-```js
-const router = createRouter({
- // ...
- routes: [{ path: '/users/:id', component: () => import('./views/UserDetails.vue') }],
-})
-```
-
-动态导入的路由组件,webpack会进行代码分割
-
-
-
-## 如何实现一个路由
-
-一个SPA应用的路由需要解决的问题是**页面跳转内容改变同时不刷新**,同时路由还需要以插件形式存在,所以:
-
-1. router实例化的时候保存用户传入的配置项和路由表,运行时要
- - 监听 hash或者 popstate 事件
- - 回调里根据 path 匹配对应路由
-2. 将router定义成一个Vue插件,即实现install方法,内部做两件事:
- - 实现两个全局组件:router-link和router-view,分别实现页面跳转和内容显示
- - 定义两个全局变量:$route和$router,组件内可以访问当前路由和路由器实例
-
-
-
-## Vue-Loader是什么
-
-1. `vue-loader`是用于处理单文件组件(SFC,Single-File Component)的 webpack loader
-2. 因为有了`vue-loader`,我们就可以在项目中编写SFC格式的Vue组件,我们可以把代码分割为、`
+
+
+
+
+
+
+
+