From 3ad8227cba4b586c22f5bc51e325431fbefa9dd5 Mon Sep 17 00:00:00 2001 From: github-actions-bot Date: Sun, 28 Apr 2024 23:01:50 +0000 Subject: [PATCH] Updates --- 404.html | 4 +-- assets/{app.B19vytJn.js => app.C_wKSS0F.js} | 2 +- assets/chunks/framework.NdlCD-r1.js | 17 ----------- assets/chunks/framework.yUIHRp4d.js | 17 +++++++++++ .../{theme.DZC8u-4H.js => theme.df5FdJ9M.js} | 2 +- ....lean.js => examples_index.md.BVeRSTQC.js} | 2 +- ....js => examples_index.md.BVeRSTQC.lean.js} | 2 +- ...> getting-started_concepts.md.CZm4ephB.js} | 2 +- ...ting-started_concepts.md.CZm4ephB.lean.js} | 2 +- ...s => getting-started_index.md.B6hd8HOL.js} | 2 +- ...getting-started_index.md.B6hd8HOL.lean.js} | 2 +- ...ng-started_server_emulator.md.BmRo6yYD.js} | 2 +- ...arted_server_emulator.md.BmRo6yYD.lean.js} | 2 +- ...arted_server_microfrontend.md.B40AFEAX.js} | 2 +- ..._server_microfrontend.md.B40AFEAX.lean.js} | 2 +- ...-started_server_publishing.md.D04JeNly.js} | 2 +- ...ted_server_publishing.md.D04JeNly.lean.js} | 2 +- ...tting-started_server_setup.md.DB5ZqlDD.js} | 2 +- ...-started_server_setup.md.DB5ZqlDD.lean.js} | 2 +- ...ing-started_server_tooling.md.CuSINiVK.js} | 2 +- ...tarted_server_tooling.md.CuSINiVK.lean.js} | 2 +- ...-started_spa_configuration.md.DtLWR4eQ.js} | 2 +- ...ted_spa_configuration.md.DtLWR4eQ.lean.js} | 2 +- ...ting-started_spa_debugging.md.CKL5AfBJ.js} | 2 +- ...started_spa_debugging.md.CKL5AfBJ.lean.js} | 2 +- ...d_spa_dependency-injection.md.CtKDFgoc.js} | 2 +- ..._dependency-injection.md.CtKDFgoc.lean.js} | 2 +- ...ing-started_spa_extensions.md.BsSgoO13.js} | 2 +- ...tarted_spa_extensions.md.BsSgoO13.lean.js} | 2 +- ...g-started_spa_localization.md.z8BihB5c.js} | 2 +- ...rted_spa_localization.md.z8BihB5c.lean.js} | 2 +- ...-started_spa_microfrontend.md.BTLcZsBe.js} | 2 +- ...ted_spa_microfrontend.md.BTLcZsBe.lean.js} | 2 +- ...arted_spa_other-components.md.C08vUzW9.js} | 2 +- ..._spa_other-components.md.C08vUzW9.lean.js} | 2 +- ... getting-started_spa_pages.md.dtMv85N4.js} | 2 +- ...ing-started_spa_pages.md.dtMv85N4.lean.js} | 2 +- ...ing-started_spa_parameters.md.jOI69umJ.js} | 2 +- ...tarted_spa_parameters.md.jOI69umJ.lean.js} | 2 +- ...-started_spa_pilet-service.md.DZAsk7XN.js} | 2 +- ...ted_spa_pilet-service.md.DZAsk7XN.lean.js} | 2 +- ...ting-started_spa_providers.md.C1_eXZdD.js} | 2 +- ...started_spa_providers.md.C1_eXZdD.lean.js} | 2 +- ...ing-started_spa_publishing.md.BW0W7nWK.js} | 2 +- ...tarted_spa_publishing.md.BW0W7nWK.lean.js} | 2 +- ...> getting-started_spa_root.md.CxW_mOT8.js} | 2 +- ...ting-started_spa_root.md.CxW_mOT8.lean.js} | 2 +- ... getting-started_spa_setup.md.BIMiJ6fa.js} | 2 +- ...ing-started_spa_setup.md.BIMiJ6fa.lean.js} | 2 +- ....CSImJXsp.js => guides_faq.md.CGQ9K78l.js} | 2 +- ...lean.js => guides_faq.md.CGQ9K78l.lean.js} | 2 +- ...5UiJl.js => guides_helpers.md.DKuUSSRm.js} | 2 +- ....js => guides_helpers.md.DKuUSSRm.lean.js} | 2 +- ...3VZPgkZ.js => guides_index.md.C1HP3G2z.js} | 2 +- ...an.js => guides_index.md.C1HP3G2z.lean.js} | 2 +- assets/guides_roadmap.md.CLQWjDQM.js | 1 + assets/guides_roadmap.md.CLQWjDQM.lean.js | 1 + ....md.CEUWjG_j.js => imprint.md.CALtOqGV.js} | 2 +- ..._j.lean.js => imprint.md.CALtOqGV.lean.js} | 2 +- ...ex.md.BP3xTXjF.js => index.md.BI9PuDs7.js} | 2 +- ...TXjF.lean.js => index.md.BI9PuDs7.lean.js} | 2 +- examples/index.html | 12 ++++---- getting-started/concepts.html | 12 ++++---- getting-started/index.html | 12 ++++---- getting-started/server/emulator.html | 12 ++++---- getting-started/server/microfrontend.html | 14 ++++----- getting-started/server/publishing.html | 12 ++++---- getting-started/server/setup.html | 14 ++++----- getting-started/server/tooling.html | 12 ++++---- getting-started/spa/configuration.html | 14 ++++----- getting-started/spa/debugging.html | 14 ++++----- getting-started/spa/dependency-injection.html | 14 ++++----- getting-started/spa/extensions.html | 14 ++++----- getting-started/spa/localization.html | 14 ++++----- getting-started/spa/microfrontend.html | 14 ++++----- getting-started/spa/other-components.html | 14 ++++----- getting-started/spa/pages.html | 14 ++++----- getting-started/spa/parameters.html | 14 ++++----- getting-started/spa/pilet-service.html | 14 ++++----- getting-started/spa/providers.html | 14 ++++----- getting-started/spa/publishing.html | 12 ++++---- getting-started/spa/root.html | 14 ++++----- getting-started/spa/setup.html | 12 ++++---- guides/faq.html | 12 ++++---- guides/helpers.html | 12 ++++---- guides/index.html | 12 ++++---- guides/roadmap.html | 30 +++++++++++++++++++ hashmap.json | 2 +- imprint.html | 10 +++---- index.html | 10 +++---- 90 files changed, 282 insertions(+), 250 deletions(-) rename assets/{app.B19vytJn.js => app.C_wKSS0F.js} (90%) delete mode 100644 assets/chunks/framework.NdlCD-r1.js create mode 100644 assets/chunks/framework.yUIHRp4d.js rename assets/chunks/{theme.DZC8u-4H.js => theme.df5FdJ9M.js} (99%) rename assets/{examples_index.md.BZpxqBm7.lean.js => examples_index.md.BVeRSTQC.js} (77%) rename assets/{examples_index.md.BZpxqBm7.js => examples_index.md.BVeRSTQC.lean.js} (77%) rename assets/{getting-started_concepts.md.CIKcgNgX.js => getting-started_concepts.md.CZm4ephB.js} (96%) rename assets/{getting-started_concepts.md.CIKcgNgX.lean.js => getting-started_concepts.md.CZm4ephB.lean.js} (57%) rename assets/{getting-started_index.md.uW-pn0Vt.js => getting-started_index.md.B6hd8HOL.js} (91%) rename assets/{getting-started_index.md.uW-pn0Vt.lean.js => getting-started_index.md.B6hd8HOL.lean.js} (57%) rename assets/{getting-started_server_emulator.md.DxDB9wWc.js => getting-started_server_emulator.md.BmRo6yYD.js} (95%) rename assets/{getting-started_server_emulator.md.DxDB9wWc.lean.js => getting-started_server_emulator.md.BmRo6yYD.lean.js} (60%) rename assets/{getting-started_server_microfrontend.md.C49RkuTw.js => getting-started_server_microfrontend.md.B40AFEAX.js} (99%) rename assets/{getting-started_server_microfrontend.md.C49RkuTw.lean.js => getting-started_server_microfrontend.md.B40AFEAX.lean.js} (61%) rename assets/{getting-started_server_publishing.md.DOPJL4Ub.js => getting-started_server_publishing.md.D04JeNly.js} (96%) rename assets/{getting-started_server_publishing.md.DOPJL4Ub.lean.js => getting-started_server_publishing.md.D04JeNly.lean.js} (61%) rename assets/{getting-started_server_setup.md.C7UtS3zP.js => getting-started_server_setup.md.DB5ZqlDD.js} (99%) rename assets/{getting-started_server_setup.md.C7UtS3zP.lean.js => getting-started_server_setup.md.DB5ZqlDD.lean.js} (58%) rename assets/{getting-started_server_tooling.md.B-ySUDg6.js => getting-started_server_tooling.md.CuSINiVK.js} (97%) rename assets/{getting-started_server_tooling.md.B-ySUDg6.lean.js => getting-started_server_tooling.md.CuSINiVK.lean.js} (60%) rename assets/{getting-started_spa_configuration.md.BS8t4z6M.js => getting-started_spa_configuration.md.DtLWR4eQ.js} (99%) rename assets/{getting-started_spa_configuration.md.BS8t4z6M.lean.js => getting-started_spa_configuration.md.DtLWR4eQ.lean.js} (60%) rename assets/{getting-started_spa_debugging.md.BoFBmjfA.js => getting-started_spa_debugging.md.CKL5AfBJ.js} (94%) rename assets/{getting-started_spa_debugging.md.BoFBmjfA.lean.js => getting-started_spa_debugging.md.CKL5AfBJ.lean.js} (60%) rename assets/{getting-started_spa_dependency-injection.md.BH-CNyRz.js => getting-started_spa_dependency-injection.md.CtKDFgoc.js} (97%) rename assets/{getting-started_spa_dependency-injection.md.BH-CNyRz.lean.js => getting-started_spa_dependency-injection.md.CtKDFgoc.lean.js} (62%) rename assets/{getting-started_spa_extensions.md.5BTasQ18.js => getting-started_spa_extensions.md.BsSgoO13.js} (96%) rename assets/{getting-started_spa_extensions.md.5BTasQ18.lean.js => getting-started_spa_extensions.md.BsSgoO13.lean.js} (59%) rename assets/{getting-started_spa_localization.md.eD6xa63-.js => getting-started_spa_localization.md.z8BihB5c.js} (96%) rename assets/{getting-started_spa_localization.md.eD6xa63-.lean.js => getting-started_spa_localization.md.z8BihB5c.lean.js} (59%) rename assets/{getting-started_spa_microfrontend.md.CcqOFkdf.js => getting-started_spa_microfrontend.md.BTLcZsBe.js} (95%) rename assets/{getting-started_spa_microfrontend.md.CcqOFkdf.lean.js => getting-started_spa_microfrontend.md.BTLcZsBe.lean.js} (60%) rename assets/{getting-started_spa_other-components.md.DgWQvoBv.js => getting-started_spa_other-components.md.C08vUzW9.js} (98%) rename assets/{getting-started_spa_other-components.md.DgWQvoBv.lean.js => getting-started_spa_other-components.md.C08vUzW9.lean.js} (63%) rename assets/{getting-started_spa_pages.md.COgeZlBh.js => getting-started_spa_pages.md.dtMv85N4.js} (98%) rename assets/{getting-started_spa_pages.md.COgeZlBh.lean.js => getting-started_spa_pages.md.dtMv85N4.lean.js} (57%) rename assets/{getting-started_spa_parameters.md.DQV7ZUjt.js => getting-started_spa_parameters.md.jOI69umJ.js} (98%) rename assets/{getting-started_spa_parameters.md.DQV7ZUjt.lean.js => getting-started_spa_parameters.md.jOI69umJ.lean.js} (59%) rename assets/{getting-started_spa_pilet-service.md.DQWcnSsb.js => getting-started_spa_pilet-service.md.DZAsk7XN.js} (99%) rename assets/{getting-started_spa_pilet-service.md.DQWcnSsb.lean.js => getting-started_spa_pilet-service.md.DZAsk7XN.lean.js} (60%) rename assets/{getting-started_spa_providers.md.BuNaLMOO.js => getting-started_spa_providers.md.C1_eXZdD.js} (94%) rename assets/{getting-started_spa_providers.md.BuNaLMOO.lean.js => getting-started_spa_providers.md.C1_eXZdD.lean.js} (59%) rename assets/{getting-started_spa_publishing.md.0INpKX_n.js => getting-started_spa_publishing.md.BW0W7nWK.js} (85%) rename assets/{getting-started_spa_publishing.md.0INpKX_n.lean.js => getting-started_spa_publishing.md.BW0W7nWK.lean.js} (85%) rename assets/{getting-started_spa_root.md.BrwiLAN8.js => getting-started_spa_root.md.CxW_mOT8.js} (97%) rename assets/{getting-started_spa_root.md.BrwiLAN8.lean.js => getting-started_spa_root.md.CxW_mOT8.lean.js} (57%) rename assets/{getting-started_spa_setup.md.DkbzmbTn.js => getting-started_spa_setup.md.BIMiJ6fa.js} (83%) rename assets/{getting-started_spa_setup.md.DkbzmbTn.lean.js => getting-started_spa_setup.md.BIMiJ6fa.lean.js} (57%) rename assets/{guides_faq.md.CSImJXsp.js => guides_faq.md.CGQ9K78l.js} (88%) rename assets/{guides_faq.md.CSImJXsp.lean.js => guides_faq.md.CGQ9K78l.lean.js} (88%) rename assets/{guides_helpers.md.BMq5UiJl.js => guides_helpers.md.DKuUSSRm.js} (77%) rename assets/{guides_helpers.md.BMq5UiJl.lean.js => guides_helpers.md.DKuUSSRm.lean.js} (77%) rename assets/{guides_index.md.D3VZPgkZ.js => guides_index.md.C1HP3G2z.js} (76%) rename assets/{guides_index.md.D3VZPgkZ.lean.js => guides_index.md.C1HP3G2z.lean.js} (76%) create mode 100644 assets/guides_roadmap.md.CLQWjDQM.js create mode 100644 assets/guides_roadmap.md.CLQWjDQM.lean.js rename assets/{imprint.md.CEUWjG_j.js => imprint.md.CALtOqGV.js} (89%) rename assets/{imprint.md.CEUWjG_j.lean.js => imprint.md.CALtOqGV.lean.js} (55%) rename assets/{index.md.BP3xTXjF.js => index.md.BI9PuDs7.js} (91%) rename assets/{index.md.BP3xTXjF.lean.js => index.md.BI9PuDs7.lean.js} (91%) create mode 100644 guides/roadmap.html diff --git a/404.html b/404.html index def57ea..ab407a6 100644 --- a/404.html +++ b/404.html @@ -8,7 +8,7 @@ - + @@ -21,7 +21,7 @@
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.

Released under the MIT License.

- + \ No newline at end of file diff --git a/assets/app.B19vytJn.js b/assets/app.C_wKSS0F.js similarity index 90% rename from assets/app.B19vytJn.js rename to assets/app.C_wKSS0F.js index 536514a..737dd76 100644 --- a/assets/app.B19vytJn.js +++ b/assets/app.C_wKSS0F.js @@ -1 +1 @@ -import{j as o,a3 as p,a4 as u,a5 as l,a6 as c,a7 as f,a8 as d,a9 as m,aa as h,ab as g,ac as A,ad as P,d as _,u as v,l as y,z as C,ae as E,af as b,ag as w,ah as R}from"./chunks/framework.NdlCD-r1.js";import{t as S}from"./chunks/theme.DZC8u-4H.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),T=_({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&E(),b(),w(),s.setup&&s.setup(),()=>R(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=L(),a=j();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return h(T)}function L(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=P(()=>import(n),[])),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{D as createApp}; +import{j as o,a3 as p,a4 as u,a5 as l,a6 as c,a7 as f,a8 as d,a9 as m,aa as h,ab as g,ac as A,ad as P,d as _,u as v,l as y,z as C,ae as E,af as b,ag as w,ah as R}from"./chunks/framework.yUIHRp4d.js";import{t as S}from"./chunks/theme.df5FdJ9M.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),T=_({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&E(),b(),w(),s.setup&&s.setup(),()=>R(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=L(),a=j();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return h(T)}function L(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=P(()=>import(n),[])),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/assets/chunks/framework.NdlCD-r1.js b/assets/chunks/framework.NdlCD-r1.js deleted file mode 100644 index 496d906..0000000 --- a/assets/chunks/framework.NdlCD-r1.js +++ /dev/null @@ -1,17 +0,0 @@ -/** -* @vue/shared v3.4.25 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function gs(e,t){const n=new Set(e.split(","));return t?s=>n.has(s.toLowerCase()):s=>n.has(s)}const te={},_t=[],xe=()=>{},co=()=>!1,Ut=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ms=e=>e.startsWith("onUpdate:"),re=Object.assign,_s=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},ao=Object.prototype.hasOwnProperty,Y=(e,t)=>ao.call(e,t),U=Array.isArray,yt=e=>yn(e)==="[object Map]",Fr=e=>yn(e)==="[object Set]",K=e=>typeof e=="function",ne=e=>typeof e=="string",ft=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",$r=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),Hr=Object.prototype.toString,yn=e=>Hr.call(e),uo=e=>yn(e).slice(8,-1),jr=e=>yn(e)==="[object Object]",ys=e=>ne(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bt=gs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),bn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},fo=/-(\w)/g,Me=bn(e=>e.replace(fo,(t,n)=>n?n.toUpperCase():"")),ho=/\B([A-Z])/g,dt=bn(e=>e.replace(ho,"-$1").toLowerCase()),vn=bn(e=>e.charAt(0).toUpperCase()+e.slice(1)),rn=bn(e=>e?`on${vn(e)}`:""),Qe=(e,t)=>!Object.is(e,t),Hn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},po=e=>{const t=parseFloat(e);return isNaN(t)?e:t},go=e=>{const t=ne(e)?Number(e):NaN;return isNaN(t)?e:t};let ks;const Dr=()=>ks||(ks=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function bs(e){if(U(e)){const t={};for(let n=0;n{if(n){const s=n.split(_o);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function vs(e){let t="";if(ne(e))t=e;else if(U(e))for(let n=0;nne(e)?e:e==null?"":U(e)||Z(e)&&(e.toString===Hr||!K(e.toString))?JSON.stringify(e,Br,2):String(e),Br=(e,t)=>t&&t.__v_isRef?Br(e,t.value):yt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[jn(s,i)+" =>"]=r,n),{})}:Fr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>jn(n))}:ft(t)?jn(t):Z(t)&&!U(t)&&!jr(t)?String(t):t,jn=(e,t="")=>{var n;return ft(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.4.25 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let be;class Eo{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=be,!t&&be&&(this.index=(be.scopes||(be.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=be;try{return be=this,t()}finally{be=n}}}on(){be=this}off(){be=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),tt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Xe,n=ct;try{return Xe=!0,ct=this,this._runnings++,Ks(this),this.fn()}finally{Ws(this),this._runnings--,ct=n,Xe=t}}stop(){var t;this.active&&(Ks(this),Ws(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function So(e){return e.value}function Ks(e){e._trackId++,e._depsLength=0}function Ws(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},un=new WeakMap,at=Symbol(""),ss=Symbol("");function _e(e,t,n){if(Xe&&ct){let s=un.get(e);s||un.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=zr(()=>s.delete(n))),qr(ct,r)}}function He(e,t,n,s,r,i){const o=un.get(e);if(!o)return;let l=[];if(t==="clear")l=[...o.values()];else if(n==="length"&&U(e)){const c=Number(s);o.forEach((u,d)=>{(d==="length"||!ft(d)&&d>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":U(e)?ys(n)&&l.push(o.get("length")):(l.push(o.get(at)),yt(e)&&l.push(o.get(ss)));break;case"delete":U(e)||(l.push(o.get(at)),yt(e)&&l.push(o.get(ss)));break;case"set":yt(e)&&l.push(o.get(at));break}Es();for(const c of l)c&&Gr(c,4);Cs()}function To(e,t){var n;return(n=un.get(e))==null?void 0:n.get(t)}const Ao=gs("__proto__,__v_isRef,__isVue"),Xr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ft)),qs=Ro();function Ro(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=J(this);for(let i=0,o=this.length;i{e[t]=function(...n){et(),Es();const s=J(this)[t].apply(this,n);return Cs(),tt(),s}}),e}function Oo(e){ft(e)||(e=String(e));const t=J(this);return _e(t,"has",e),t.hasOwnProperty(e)}class Yr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Bo:ei:i?Zr:Qr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=U(t);if(!r){if(o&&Y(qs,n))return Reflect.get(qs,n,s);if(n==="hasOwnProperty")return Oo}const l=Reflect.get(t,n,s);return(ft(n)?Xr.has(n):Ao(n))||(r||_e(t,"get",n),i)?l:he(l)?o&&ys(n)?l:l.value:Z(l)?r?Cn(l):En(l):l}}class Jr extends Yr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=Ft(i);if(!fn(s)&&!Ft(s)&&(i=J(i),s=J(s)),!U(t)&&he(i)&&!he(s))return c?!1:(i.value=s,!0)}const o=U(t)&&ys(n)?Number(n)e,wn=e=>Reflect.getPrototypeOf(e);function Wt(e,t,n=!1,s=!1){e=e.__v_raw;const r=J(e),i=J(t);n||(Qe(t,i)&&_e(r,"get",t),_e(r,"get",i));const{has:o}=wn(r),l=s?xs:n?As:$t;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function qt(e,t=!1){const n=this.__v_raw,s=J(n),r=J(e);return t||(Qe(e,r)&&_e(s,"has",e),_e(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function Gt(e,t=!1){return e=e.__v_raw,!t&&_e(J(e),"iterate",at),Reflect.get(e,"size",e)}function Gs(e){e=J(e);const t=J(this);return wn(t).has.call(t,e)||(t.add(e),He(t,"add",e,e)),this}function zs(e,t){t=J(t);const n=J(this),{has:s,get:r}=wn(n);let i=s.call(n,e);i||(e=J(e),i=s.call(n,e));const o=r.call(n,e);return n.set(e,t),i?Qe(t,o)&&He(n,"set",e,t):He(n,"add",e,t),this}function Xs(e){const t=J(this),{has:n,get:s}=wn(t);let r=n.call(t,e);r||(e=J(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&He(t,"delete",e,void 0),i}function Ys(){const e=J(this),t=e.size!==0,n=e.clear();return t&&He(e,"clear",void 0,void 0),n}function zt(e,t){return function(s,r){const i=this,o=i.__v_raw,l=J(o),c=t?xs:e?As:$t;return!e&&_e(l,"iterate",at),o.forEach((u,d)=>s.call(r,c(u),c(d),i))}}function Xt(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),o=yt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),d=n?xs:t?As:$t;return!t&&_e(i,"iterate",c?ss:at),{next(){const{value:h,done:p}=u.next();return p?{value:h,done:p}:{value:l?[d(h[0]),d(h[1])]:d(h),done:p}},[Symbol.iterator](){return this}}}}function Ue(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function No(){const e={get(i){return Wt(this,i)},get size(){return Gt(this)},has:qt,add:Gs,set:zs,delete:Xs,clear:Ys,forEach:zt(!1,!1)},t={get(i){return Wt(this,i,!1,!0)},get size(){return Gt(this)},has:qt,add:Gs,set:zs,delete:Xs,clear:Ys,forEach:zt(!1,!0)},n={get(i){return Wt(this,i,!0)},get size(){return Gt(this,!0)},has(i){return qt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:zt(!0,!1)},s={get(i){return Wt(this,i,!0,!0)},get size(){return Gt(this,!0)},has(i){return qt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:zt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Xt(i,!1,!1),n[i]=Xt(i,!0,!1),t[i]=Xt(i,!1,!0),s[i]=Xt(i,!0,!0)}),[e,n,t,s]}const[Fo,$o,Ho,jo]=No();function Ss(e,t){const n=t?e?jo:Ho:e?$o:Fo;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Y(n,r)&&r in s?n:s,r,i)}const Vo={get:Ss(!1,!1)},Do={get:Ss(!1,!0)},Uo={get:Ss(!0,!1)};const Qr=new WeakMap,Zr=new WeakMap,ei=new WeakMap,Bo=new WeakMap;function ko(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ko(e){return e.__v_skip||!Object.isExtensible(e)?0:ko(uo(e))}function En(e){return Ft(e)?e:Ts(e,!1,Io,Vo,Qr)}function Wo(e){return Ts(e,!1,Mo,Do,Zr)}function Cn(e){return Ts(e,!0,Po,Uo,ei)}function Ts(e,t,n,s,r){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Ko(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function Rt(e){return Ft(e)?Rt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ft(e){return!!(e&&e.__v_isReadonly)}function fn(e){return!!(e&&e.__v_isShallow)}function ti(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function on(e){return Object.isExtensible(e)&&Vr(e,"__v_skip",!0),e}const $t=e=>Z(e)?En(e):e,As=e=>Z(e)?Cn(e):e;class ni{constructor(t,n,s,r){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new ws(()=>t(this._value),()=>Ot(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Qe(t._value,t._value=t.effect.run())&&Ot(t,4),Rs(t),t.effect._dirtyLevel>=2&&Ot(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function qo(e,t,n=!1){let s,r;const i=K(e);return i?(s=e,r=xe):(s=e.get,r=e.set),new ni(s,r,i||!r,n)}function Rs(e){var t;Xe&&ct&&(e=J(e),qr(ct,(t=e.dep)!=null?t:e.dep=zr(()=>e.dep=void 0,e instanceof ni?e:void 0)))}function Ot(e,t=4,n){e=J(e);const s=e.dep;s&&Gr(s,t)}function he(e){return!!(e&&e.__v_isRef===!0)}function fe(e){return ri(e,!1)}function si(e){return ri(e,!0)}function ri(e,t){return he(e)?e:new Go(e,t)}class Go{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:$t(t)}get value(){return Rs(this),this._value}set value(t){const n=this.__v_isShallow||fn(t)||Ft(t);t=n?t:J(t),Qe(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:$t(t),Ot(this,4))}}function ii(e){return he(e)?e.value:e}const zo={get:(e,t,n)=>ii(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return he(r)&&!he(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function oi(e){return Rt(e)?e:new Proxy(e,zo)}class Xo{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>Rs(this),()=>Ot(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Yo(e){return new Xo(e)}class Jo{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return To(J(this._object),this._key)}}class Qo{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Zo(e,t,n){return he(e)?e:K(e)?new Qo(e):Z(e)&&arguments.length>1?el(e,t,n):fe(e)}function el(e,t,n){const s=e[t];return he(s)?s:new Jo(e,t,n)}/** -* @vue/runtime-core v3.4.25 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Ye(e,t,n,s){try{return s?e(...s):e()}catch(r){xn(r,t,n)}}function Se(e,t,n,s){if(K(e)){const r=Ye(e,t,n,s);return r&&$r(r)&&r.catch(i=>{xn(i,t,n)}),r}if(U(e)){const r=[];for(let i=0;i>>1,r=ue[s],i=jt(r);iPe&&ue.splice(t,1)}function rl(e){U(e)?vt.push(...e):(!We||!We.includes(e,e.allowRecurse?ot+1:ot))&&vt.push(e),ci()}function Js(e,t,n=Ht?Pe+1:0){for(;njt(n)-jt(s));if(vt.length=0,We){We.push(...t);return}for(We=t,ot=0;ote.id==null?1/0:e.id,il=(e,t)=>{const n=jt(e)-jt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ai(e){rs=!1,Ht=!0,ue.sort(il);try{for(Pe=0;Pene(v)?v.trim():v)),h&&(r=n.map(po))}let l,c=s[l=rn(t)]||s[l=rn(Me(t))];!c&&i&&(c=s[l=rn(dt(t))]),c&&Se(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Se(u,e,6,r)}}function ui(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!K(e)){const c=u=>{const d=ui(u,t,!0);d&&(l=!0,re(o,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(Z(e)&&s.set(e,null),null):(U(i)?i.forEach(c=>o[c]=null):re(o,i),Z(e)&&s.set(e,o),o)}function Tn(e,t){return!e||!Ut(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,dt(t))||Y(e,t))}let de=null,An=null;function hn(e){const t=de;return de=e,An=e&&e.type.__scopeId||null,t}function ja(e){An=e}function Va(){An=null}function ll(e,t=de,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&ar(-1);const i=hn(t);let o;try{o=e(...r)}finally{hn(i),s._d&&ar(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Vn(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:u,renderCache:d,props:h,data:p,setupState:v,ctx:O,inheritAttrs:M}=e,B=hn(e);let q,G;try{if(n.shapeFlag&4){const _=r||s,P=_;q=Ae(u.call(P,_,d,h,v,p,O)),G=l}else{const _=t;q=Ae(_.length>1?_(h,{attrs:l,slots:o,emit:c}):_(h,null)),G=t.props?l:cl(l)}}catch(_){Mt.length=0,xn(_,e,1),q=ae(ve)}let m=q;if(G&&M!==!1){const _=Object.keys(G),{shapeFlag:P}=m;_.length&&P&7&&(i&&_.some(ms)&&(G=al(G,i)),m=Ze(m,G))}return n.dirs&&(m=Ze(m),m.dirs=m.dirs?m.dirs.concat(n.dirs):n.dirs),n.transition&&(m.transition=n.transition),q=m,hn(B),q}const cl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ut(n))&&((t||(t={}))[n]=e[n]);return t},al=(e,t)=>{const n={};for(const s in e)(!ms(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function ul(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Qs(s,o,u):!!o;if(c&8){const d=t.dynamicProps;for(let h=0;he.__isSuspense;function hi(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):rl(e)}const hl=Symbol.for("v-scx"),pl=()=>Et(hl);function pi(e,t){return Rn(e,null,t)}function Ba(e,t){return Rn(e,null,{flush:"post"})}const Yt={};function je(e,t,n){return Rn(e,t,n)}function Rn(e,t,{immediate:n,deep:s,flush:r,once:i,onTrack:o,onTrigger:l}=te){if(t&&i){const L=t;t=(...V)=>{L(...V),P()}}const c=ce,u=L=>s===!0?L:gt(L,s===!1?1:void 0);let d,h=!1,p=!1;if(he(e)?(d=()=>e.value,h=fn(e)):Rt(e)?(d=()=>u(e),h=!0):U(e)?(p=!0,h=e.some(L=>Rt(L)||fn(L)),d=()=>e.map(L=>{if(he(L))return L.value;if(Rt(L))return u(L);if(K(L))return Ye(L,c,2)})):K(e)?t?d=()=>Ye(e,c,2):d=()=>(v&&v(),Se(e,c,3,[O])):d=xe,t&&s){const L=d;d=()=>gt(L())}let v,O=L=>{v=m.onStop=()=>{Ye(L,c,4),v=m.onStop=void 0}},M;if(Mn)if(O=xe,t?n&&Se(t,c,3,[d(),p?[]:void 0,O]):d(),r==="sync"){const L=pl();M=L.__watcherHandles||(L.__watcherHandles=[])}else return xe;let B=p?new Array(e.length).fill(Yt):Yt;const q=()=>{if(!(!m.active||!m.dirty))if(t){const L=m.run();(s||h||(p?L.some((V,A)=>Qe(V,B[A])):Qe(L,B)))&&(v&&v(),Se(t,c,3,[L,B===Yt?void 0:p&&B[0]===Yt?[]:B,O]),B=L)}else m.run()};q.allowRecurse=!!t;let G;r==="sync"?G=q:r==="post"?G=()=>ge(q,c&&c.suspense):(q.pre=!0,c&&(q.id=c.uid),G=()=>Ls(q));const m=new ws(d,xe,G),_=kr(),P=()=>{m.stop(),_&&_s(_.effects,m)};return t?n?q():B=m.run():r==="post"?ge(m.run.bind(m),c&&c.suspense):m.run(),M&&M.push(P),P}function gl(e,t,n){const s=this.proxy,r=ne(e)?e.includes(".")?gi(s,e):()=>s[e]:e.bind(s,s);let i;K(t)?i=t:(i=t.handler,n=t);const o=Bt(this),l=Rn(r,i.bind(s),n);return o(),l}function gi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r0){if(n>=t)return e;n++}if(s=s||new Set,s.has(e))return e;if(s.add(e),he(e))gt(e.value,t,n,s);else if(U(e))for(let r=0;r{gt(r,t,n,s)});else if(jr(e))for(const r in e)gt(e[r],t,n,s);return e}function Ie(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;o{e.isMounted=!0}),wi(()=>{e.isUnmounting=!0}),e}const we=[Function,Array],mi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:we,onEnter:we,onAfterEnter:we,onEnterCancelled:we,onBeforeLeave:we,onLeave:we,onAfterLeave:we,onLeaveCancelled:we,onBeforeAppear:we,onAppear:we,onAfterAppear:we,onAppearCancelled:we},_l={name:"BaseTransition",props:mi,setup(e,{slots:t}){const n=Pn(),s=ml();return()=>{const r=t.default&&yi(t.default(),!0);if(!r||!r.length)return;let i=r[0];if(r.length>1){for(const p of r)if(p.type!==ve){i=p;break}}const o=J(e),{mode:l}=o;if(s.isLeaving)return Dn(i);const c=er(i);if(!c)return Dn(i);const u=is(c,o,s,n);os(c,u);const d=n.subTree,h=d&&er(d);if(h&&h.type!==ve&&!lt(c,h)){const p=is(h,o,s,n);if(os(h,p),l==="out-in")return s.isLeaving=!0,p.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Dn(i);l==="in-out"&&c.type!==ve&&(p.delayLeave=(v,O,M)=>{const B=_i(s,h);B[String(h.key)]=h,v[qe]=()=>{O(),v[qe]=void 0,delete u.delayedLeave},u.delayedLeave=M})}return i}}},yl=_l;function _i(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 is(e,t,n,s){const{appear:r,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:h,onLeave:p,onAfterLeave:v,onLeaveCancelled:O,onBeforeAppear:M,onAppear:B,onAfterAppear:q,onAppearCancelled:G}=t,m=String(e.key),_=_i(n,e),P=(A,j)=>{A&&Se(A,s,9,j)},L=(A,j)=>{const E=j[1];P(A,j),U(A)?A.every(D=>D.length<=1)&&E():A.length<=1&&E()},V={mode:i,persisted:o,beforeEnter(A){let j=l;if(!n.isMounted)if(r)j=M||l;else return;A[qe]&&A[qe](!0);const E=_[m];E&<(e,E)&&E.el[qe]&&E.el[qe](),P(j,[A])},enter(A){let j=c,E=u,D=d;if(!n.isMounted)if(r)j=B||c,E=q||u,D=G||d;else return;let S=!1;const W=A[Jt]=ie=>{S||(S=!0,ie?P(D,[A]):P(E,[A]),V.delayedLeave&&V.delayedLeave(),A[Jt]=void 0)};j?L(j,[A,W]):W()},leave(A,j){const E=String(e.key);if(A[Jt]&&A[Jt](!0),n.isUnmounting)return j();P(h,[A]);let D=!1;const S=A[qe]=W=>{D||(D=!0,j(),W?P(O,[A]):P(v,[A]),A[qe]=void 0,_[E]===e&&delete _[E])};_[E]=e,p?L(p,[A,S]):S()},clone(A){return is(A,t,n,s)}};return V}function Dn(e){if(On(e))return e=Ze(e),e.children=null,e}function er(e){if(!On(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&K(n.default))return n.default()}}function os(e,t){e.shapeFlag&6&&e.component?os(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 yi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,On=e=>e.type.__isKeepAlive;function bl(e,t){vi(e,"a",t)}function vl(e,t){vi(e,"da",t)}function vi(e,t,n=ce){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Ln(t,s,n),n){let r=n.parent;for(;r&&r.parent;)On(r.parent.vnode)&&wl(s,t,n,r),r=r.parent}}function wl(e,t,n,s){const r=Ln(t,e,s,!0);In(()=>{_s(s[t],r)},n)}function Ln(e,t,n=ce,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;et();const l=Bt(n),c=Se(t,n,e,o);return l(),tt(),c});return s?r.unshift(i):r.push(i),i}}const De=e=>(t,n=ce)=>(!Mn||e==="sp")&&Ln(e,(...s)=>t(...s),n),El=De("bm"),xt=De("m"),Cl=De("bu"),xl=De("u"),wi=De("bum"),In=De("um"),Sl=De("sp"),Tl=De("rtg"),Al=De("rtc");function Rl(e,t=ce){Ln("ec",e,t)}function ka(e,t,n,s){let r;const i=n&&n[s];if(U(e)||ne(e)){r=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i&&i[l]));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,c=o.length;lmn(t)?!(t.type===ve||t.type===me&&!Ei(t.children)):!0)?e:null}function Wa(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:rn(s)]=e[s];return n}const ls=e=>e?Bi(e)?Fs(e)||e.proxy:ls(e.parent):null,Lt=re(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ls(e.parent),$root:e=>ls(e.root),$emit:e=>e.emit,$options:e=>Ps(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Ls(e.update)}),$nextTick:e=>e.n||(e.n=Sn.bind(e.proxy)),$watch:e=>gl.bind(e)}),Un=(e,t)=>e!==te&&!e.__isScriptSetup&&Y(e,t),Ol={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Un(s,t))return o[t]=1,s[t];if(r!==te&&Y(r,t))return o[t]=2,r[t];if((u=e.propsOptions[0])&&Y(u,t))return o[t]=3,i[t];if(n!==te&&Y(n,t))return o[t]=4,n[t];cs&&(o[t]=0)}}const d=Lt[t];let h,p;if(d)return t==="$attrs"&&_e(e.attrs,"get",""),d(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==te&&Y(n,t))return o[t]=4,n[t];if(p=c.config.globalProperties,Y(p,t))return p[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Un(r,t)?(r[t]=n,!0):s!==te&&Y(s,t)?(s[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==te&&Y(e,o)||Un(t,o)||(l=i[0])&&Y(l,o)||Y(s,o)||Y(Lt,o)||Y(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function qa(){return Ll().slots}function Ll(){const e=Pn();return e.setupContext||(e.setupContext=Ki(e))}function tr(e){return U(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let cs=!0;function Il(e){const t=Ps(e),n=e.proxy,s=e.ctx;cs=!1,t.beforeCreate&&nr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:d,beforeMount:h,mounted:p,beforeUpdate:v,updated:O,activated:M,deactivated:B,beforeDestroy:q,beforeUnmount:G,destroyed:m,unmounted:_,render:P,renderTracked:L,renderTriggered:V,errorCaptured:A,serverPrefetch:j,expose:E,inheritAttrs:D,components:S,directives:W,filters:ie}=t;if(u&&Pl(u,s,null),o)for(const X in o){const F=o[X];K(F)&&(s[X]=F.bind(n))}if(r){const X=r.call(n,n);Z(X)&&(e.data=En(X))}if(cs=!0,i)for(const X in i){const F=i[X],Fe=K(F)?F.bind(n,n):K(F.get)?F.get.bind(n,n):xe,kt=!K(F)&&K(F.set)?F.set.bind(n):xe,nt=se({get:Fe,set:kt});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>nt.value,set:Oe=>nt.value=Oe})}if(l)for(const X in l)Ci(l[X],s,n,X);if(c){const X=K(c)?c.call(n):c;Reflect.ownKeys(X).forEach(F=>{jl(F,X[F])})}d&&nr(d,e,"c");function $(X,F){U(F)?F.forEach(Fe=>X(Fe.bind(n))):F&&X(F.bind(n))}if($(El,h),$(xt,p),$(Cl,v),$(xl,O),$(bl,M),$(vl,B),$(Rl,A),$(Al,L),$(Tl,V),$(wi,G),$(In,_),$(Sl,j),U(E))if(E.length){const X=e.exposed||(e.exposed={});E.forEach(F=>{Object.defineProperty(X,F,{get:()=>n[F],set:Fe=>n[F]=Fe})})}else e.exposed||(e.exposed={});P&&e.render===xe&&(e.render=P),D!=null&&(e.inheritAttrs=D),S&&(e.components=S),W&&(e.directives=W)}function Pl(e,t,n=xe){U(e)&&(e=as(e));for(const s in e){const r=e[s];let i;Z(r)?"default"in r?i=Et(r.from||s,r.default,!0):i=Et(r.from||s):i=Et(r),he(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function nr(e,t,n){Se(U(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ci(e,t,n,s){const r=s.includes(".")?gi(n,s):()=>n[s];if(ne(e)){const i=t[e];K(i)&&je(r,i)}else if(K(e))je(r,e.bind(n));else if(Z(e))if(U(e))e.forEach(i=>Ci(i,t,n,s));else{const i=K(e.handler)?e.handler.bind(n):t[e.handler];K(i)&&je(r,i,e)}}function Ps(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>pn(c,u,o,!0)),pn(c,t,o)),Z(t)&&i.set(t,c),c}function pn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&pn(e,i,n,!0),r&&r.forEach(o=>pn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Ml[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Ml={data:sr,props:rr,emits:rr,methods:At,computed:At,beforeCreate:pe,created:pe,beforeMount:pe,mounted:pe,beforeUpdate:pe,updated:pe,beforeDestroy:pe,beforeUnmount:pe,destroyed:pe,unmounted:pe,activated:pe,deactivated:pe,errorCaptured:pe,serverPrefetch:pe,components:At,directives:At,watch:Fl,provide:sr,inject:Nl};function sr(e,t){return t?e?function(){return re(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Nl(e,t){return At(as(e),as(t))}function as(e){if(U(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(s&&s.proxy):t}}const Si={},Ti=()=>Object.create(Si),Ai=e=>Object.getPrototypeOf(e)===Si;function Vl(e,t,n,s=!1){const r={},i=Ti();e.propsDefaults=Object.create(null),Ri(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Wo(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Dl(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=J(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const d=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[p,v]=Oi(h,t,!0);re(o,p),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!c)return Z(e)&&s.set(e,_t),_t;if(U(i))for(let d=0;d-1,v[1]=M<0||O-1||Y(v,"default"))&&l.push(h)}}}const u=[o,l];return Z(e)&&s.set(e,u),u}function ir(e){return e[0]!=="$"&&!bt(e)}function or(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function lr(e,t){return or(e)===or(t)}function cr(e,t){return U(t)?t.findIndex(n=>lr(n,e)):K(t)&&lr(t,e)?0:-1}const Li=e=>e[0]==="_"||e==="$stable",Ms=e=>U(e)?e.map(Ae):[Ae(e)],Ul=(e,t,n)=>{if(t._n)return t;const s=ll((...r)=>Ms(t(...r)),n);return s._c=!1,s},Ii=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Li(r))continue;const i=e[r];if(K(i))t[r]=Ul(r,i,s);else if(i!=null){const o=Ms(i);t[r]=()=>o}}},Pi=(e,t)=>{const n=Ms(t);e.slots.default=()=>n},Bl=(e,t)=>{const n=e.slots=Ti();if(e.vnode.shapeFlag&32){const s=t._;s?(re(n,t),Vr(n,"_",s)):Ii(t,n)}else t&&Pi(e,t)},kl=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(re(r,t),!n&&l===1&&delete r._):(i=!t.$stable,Ii(t,r)),o=t}else t&&(Pi(e,t),o={default:1});if(i)for(const l in r)!Li(l)&&o[l]==null&&delete r[l]};function gn(e,t,n,s,r=!1){if(U(e)){e.forEach((p,v)=>gn(p,t&&(U(t)?t[v]:t),n,s,r));return}if(wt(s)&&!r)return;const i=s.shapeFlag&4?Fs(s.component)||s.component.proxy:s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,d=l.refs===te?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==c&&(ne(u)?(d[u]=null,Y(h,u)&&(h[u]=null)):he(u)&&(u.value=null)),K(c))Ye(c,l,12,[o,d]);else{const p=ne(c),v=he(c);if(p||v){const O=()=>{if(e.f){const M=p?Y(h,c)?h[c]:d[c]:c.value;r?U(M)&&_s(M,i):U(M)?M.includes(i)||M.push(i):p?(d[c]=[i],Y(h,c)&&(h[c]=d[c])):(c.value=[i],e.k&&(d[e.k]=c.value))}else p?(d[c]=o,Y(h,c)&&(h[c]=o)):v&&(c.value=o,e.k&&(d[e.k]=o))};o?(O.id=-1,ge(O,n)):O()}}}let Be=!1;const Kl=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Wl=e=>e.namespaceURI.includes("MathML"),Qt=e=>{if(Kl(e))return"svg";if(Wl(e))return"mathml"},Zt=e=>e.nodeType===8;function ql(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,d=(m,_)=>{if(!_.hasChildNodes()){n(null,m,_),dn(),_._vnode=m;return}Be=!1,h(_.firstChild,m,null,null,null),dn(),_._vnode=m,Be&&console.error("Hydration completed but contains mismatches.")},h=(m,_,P,L,V,A=!1)=>{A=A||!!_.dynamicChildren;const j=Zt(m)&&m.data==="[",E=()=>M(m,_,P,L,V,j),{type:D,ref:S,shapeFlag:W,patchFlag:ie}=_;let le=m.nodeType;_.el=m,ie===-2&&(A=!1,_.dynamicChildren=null);let $=null;switch(D){case Ct:le!==3?_.children===""?(c(_.el=r(""),o(m),m),$=m):$=E():(m.data!==_.children&&(Be=!0,m.data=_.children),$=i(m));break;case ve:G(m)?($=i(m),q(_.el=m.content.firstChild,m,P)):le!==8||j?$=E():$=i(m);break;case Pt:if(j&&(m=i(m),le=m.nodeType),le===1||le===3){$=m;const X=!_.children.length;for(let F=0;F<_.staticCount;F++)X&&(_.children+=$.nodeType===1?$.outerHTML:$.data),F===_.staticCount-1&&(_.anchor=$),$=i($);return j?i($):$}else E();break;case me:j?$=O(m,_,P,L,V,A):$=E();break;default:if(W&1)(le!==1||_.type.toLowerCase()!==m.tagName.toLowerCase())&&!G(m)?$=E():$=p(m,_,P,L,V,A);else if(W&6){_.slotScopeIds=V;const X=o(m);if(j?$=B(m):Zt(m)&&m.data==="teleport start"?$=B(m,m.data,"teleport end"):$=i(m),t(_,X,null,P,L,Qt(X),A),wt(_)){let F;j?(F=ae(me),F.anchor=$?$.previousSibling:X.lastChild):F=m.nodeType===3?Ui(""):ae("div"),F.el=m,_.component.subTree=F}}else W&64?le!==8?$=E():$=_.type.hydrate(m,_,P,L,V,A,e,v):W&128&&($=_.type.hydrate(m,_,P,L,Qt(o(m)),V,A,e,h))}return S!=null&&gn(S,null,L,_),$},p=(m,_,P,L,V,A)=>{A=A||!!_.dynamicChildren;const{type:j,props:E,patchFlag:D,shapeFlag:S,dirs:W,transition:ie}=_,le=j==="input"||j==="option";if(le||D!==-1){W&&Ie(_,null,P,"created");let $=!1;if(G(m)){$=Mi(L,ie)&&P&&P.vnode.props&&P.vnode.props.appear;const F=m.content.firstChild;$&&ie.beforeEnter(F),q(F,m,P),_.el=m=F}if(S&16&&!(E&&(E.innerHTML||E.textContent))){let F=v(m.firstChild,_,m,P,L,V,A);for(;F;){Be=!0;const Fe=F;F=F.nextSibling,l(Fe)}}else S&8&&m.textContent!==_.children&&(Be=!0,m.textContent=_.children);if(E)if(le||!A||D&48)for(const F in E)(le&&(F.endsWith("value")||F==="indeterminate")||Ut(F)&&!bt(F)||F[0]===".")&&s(m,F,null,E[F],void 0,void 0,P);else E.onClick&&s(m,"onClick",null,E.onClick,void 0,void 0,P);let X;(X=E&&E.onVnodeBeforeMount)&&Ee(X,P,_),W&&Ie(_,null,P,"beforeMount"),((X=E&&E.onVnodeMounted)||W||$)&&hi(()=>{X&&Ee(X,P,_),$&&ie.enter(m),W&&Ie(_,null,P,"mounted")},L)}return m.nextSibling},v=(m,_,P,L,V,A,j)=>{j=j||!!_.dynamicChildren;const E=_.children,D=E.length;for(let S=0;S{const{slotScopeIds:j}=_;j&&(V=V?V.concat(j):j);const E=o(m),D=v(i(m),_,E,P,L,V,A);return D&&Zt(D)&&D.data==="]"?i(_.anchor=D):(Be=!0,c(_.anchor=u("]"),E,D),D)},M=(m,_,P,L,V,A)=>{if(Be=!0,_.el=null,A){const D=B(m);for(;;){const S=i(m);if(S&&S!==D)l(S);else break}}const j=i(m),E=o(m);return l(m),n(null,_,E,j,P,L,Qt(E),V),j},B=(m,_="[",P="]")=>{let L=0;for(;m;)if(m=i(m),m&&Zt(m)&&(m.data===_&&L++,m.data===P)){if(L===0)return i(m);L--}return m},q=(m,_,P)=>{const L=_.parentNode;L&&L.replaceChild(m,_);let V=P;for(;V;)V.vnode.el===_&&(V.vnode.el=V.subTree.el=m),V=V.parent},G=m=>m.nodeType===1&&m.tagName.toLowerCase()==="template";return[d,h]}const ge=hi;function Gl(e){return zl(e,ql)}function zl(e,t){const n=Dr();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:d,parentNode:h,nextSibling:p,setScopeId:v=xe,insertStaticContent:O}=e,M=(a,f,g,y=null,b=null,x=null,R=void 0,C=null,T=!!f.dynamicChildren)=>{if(a===f)return;a&&!lt(a,f)&&(y=Kt(a),Oe(a,b,x,!0),a=null),f.patchFlag===-2&&(T=!1,f.dynamicChildren=null);const{type:w,ref:I,shapeFlag:H}=f;switch(w){case Ct:B(a,f,g,y);break;case ve:q(a,f,g,y);break;case Pt:a==null&&G(f,g,y,R);break;case me:S(a,f,g,y,b,x,R,C,T);break;default:H&1?P(a,f,g,y,b,x,R,C,T):H&6?W(a,f,g,y,b,x,R,C,T):(H&64||H&128)&&w.process(a,f,g,y,b,x,R,C,T,ht)}I!=null&&b&&gn(I,a&&a.ref,x,f||a,!f)},B=(a,f,g,y)=>{if(a==null)s(f.el=l(f.children),g,y);else{const b=f.el=a.el;f.children!==a.children&&u(b,f.children)}},q=(a,f,g,y)=>{a==null?s(f.el=c(f.children||""),g,y):f.el=a.el},G=(a,f,g,y)=>{[a.el,a.anchor]=O(a.children,f,g,y,a.el,a.anchor)},m=({el:a,anchor:f},g,y)=>{let b;for(;a&&a!==f;)b=p(a),s(a,g,y),a=b;s(f,g,y)},_=({el:a,anchor:f})=>{let g;for(;a&&a!==f;)g=p(a),r(a),a=g;r(f)},P=(a,f,g,y,b,x,R,C,T)=>{f.type==="svg"?R="svg":f.type==="math"&&(R="mathml"),a==null?L(f,g,y,b,x,R,C,T):j(a,f,b,x,R,C,T)},L=(a,f,g,y,b,x,R,C)=>{let T,w;const{props:I,shapeFlag:H,transition:N,dirs:k}=a;if(T=a.el=o(a.type,x,I&&I.is,I),H&8?d(T,a.children):H&16&&A(a.children,T,null,y,b,Bn(a,x),R,C),k&&Ie(a,null,y,"created"),V(T,a,a.scopeId,R,y),I){for(const Q in I)Q!=="value"&&!bt(Q)&&i(T,Q,null,I[Q],x,a.children,y,b,$e);"value"in I&&i(T,"value",null,I.value,x),(w=I.onVnodeBeforeMount)&&Ee(w,y,a)}k&&Ie(a,null,y,"beforeMount");const z=Mi(b,N);z&&N.beforeEnter(T),s(T,f,g),((w=I&&I.onVnodeMounted)||z||k)&&ge(()=>{w&&Ee(w,y,a),z&&N.enter(T),k&&Ie(a,null,y,"mounted")},b)},V=(a,f,g,y,b)=>{if(g&&v(a,g),y)for(let x=0;x{for(let w=T;w{const C=f.el=a.el;let{patchFlag:T,dynamicChildren:w,dirs:I}=f;T|=a.patchFlag&16;const H=a.props||te,N=f.props||te;let k;if(g&&st(g,!1),(k=N.onVnodeBeforeUpdate)&&Ee(k,g,f,a),I&&Ie(f,a,g,"beforeUpdate"),g&&st(g,!0),w?E(a.dynamicChildren,w,C,g,y,Bn(f,b),x):R||F(a,f,C,null,g,y,Bn(f,b),x,!1),T>0){if(T&16)D(C,f,H,N,g,y,b);else if(T&2&&H.class!==N.class&&i(C,"class",null,N.class,b),T&4&&i(C,"style",H.style,N.style,b),T&8){const z=f.dynamicProps;for(let Q=0;Q{k&&Ee(k,g,f,a),I&&Ie(f,a,g,"updated")},y)},E=(a,f,g,y,b,x,R)=>{for(let C=0;C{if(g!==y){if(g!==te)for(const C in g)!bt(C)&&!(C in y)&&i(a,C,g[C],null,R,f.children,b,x,$e);for(const C in y){if(bt(C))continue;const T=y[C],w=g[C];T!==w&&C!=="value"&&i(a,C,w,T,R,f.children,b,x,$e)}"value"in y&&i(a,"value",g.value,y.value,R)}},S=(a,f,g,y,b,x,R,C,T)=>{const w=f.el=a?a.el:l(""),I=f.anchor=a?a.anchor:l("");let{patchFlag:H,dynamicChildren:N,slotScopeIds:k}=f;k&&(C=C?C.concat(k):k),a==null?(s(w,g,y),s(I,g,y),A(f.children||[],g,I,b,x,R,C,T)):H>0&&H&64&&N&&a.dynamicChildren?(E(a.dynamicChildren,N,g,b,x,R,C),(f.key!=null||b&&f===b.subTree)&&Ni(a,f,!0)):F(a,f,g,I,b,x,R,C,T)},W=(a,f,g,y,b,x,R,C,T)=>{f.slotScopeIds=C,a==null?f.shapeFlag&512?b.ctx.activate(f,g,y,R,T):ie(f,g,y,b,x,R,T):le(a,f,T)},ie=(a,f,g,y,b,x,R)=>{const C=a.component=sc(a,y,b);if(On(a)&&(C.ctx.renderer=ht),rc(C),C.asyncDep){if(b&&b.registerDep(C,$),!a.el){const T=C.subTree=ae(ve);q(null,T,f,g)}}else $(C,a,f,g,b,x,R)},le=(a,f,g)=>{const y=f.component=a.component;if(ul(a,f,g))if(y.asyncDep&&!y.asyncResolved){X(y,f,g);return}else y.next=f,sl(y.update),y.effect.dirty=!0,y.update();else f.el=a.el,y.vnode=f},$=(a,f,g,y,b,x,R)=>{const C=()=>{if(a.isMounted){let{next:I,bu:H,u:N,parent:k,vnode:z}=a;{const pt=Fi(a);if(pt){I&&(I.el=z.el,X(a,I,R)),pt.asyncDep.then(()=>{a.isUnmounted||C()});return}}let Q=I,ee;st(a,!1),I?(I.el=z.el,X(a,I,R)):I=z,H&&Hn(H),(ee=I.props&&I.props.onVnodeBeforeUpdate)&&Ee(ee,k,I,z),st(a,!0);const oe=Vn(a),Te=a.subTree;a.subTree=oe,M(Te,oe,h(Te.el),Kt(Te),a,b,x),I.el=oe.el,Q===null&&fl(a,oe.el),N&&ge(N,b),(ee=I.props&&I.props.onVnodeUpdated)&&ge(()=>Ee(ee,k,I,z),b)}else{let I;const{el:H,props:N}=f,{bm:k,m:z,parent:Q}=a,ee=wt(f);if(st(a,!1),k&&Hn(k),!ee&&(I=N&&N.onVnodeBeforeMount)&&Ee(I,Q,f),st(a,!0),H&&$n){const oe=()=>{a.subTree=Vn(a),$n(H,a.subTree,a,b,null)};ee?f.type.__asyncLoader().then(()=>!a.isUnmounted&&oe()):oe()}else{const oe=a.subTree=Vn(a);M(null,oe,g,y,a,b,x),f.el=oe.el}if(z&&ge(z,b),!ee&&(I=N&&N.onVnodeMounted)){const oe=f;ge(()=>Ee(I,Q,oe),b)}(f.shapeFlag&256||Q&&wt(Q.vnode)&&Q.vnode.shapeFlag&256)&&a.a&&ge(a.a,b),a.isMounted=!0,f=g=y=null}},T=a.effect=new ws(C,xe,()=>Ls(w),a.scope),w=a.update=()=>{T.dirty&&T.run()};w.id=a.uid,st(a,!0),w()},X=(a,f,g)=>{f.component=a;const y=a.vnode.props;a.vnode=f,a.next=null,Dl(a,f.props,y,g),kl(a,f.children,g),et(),Js(a),tt()},F=(a,f,g,y,b,x,R,C,T=!1)=>{const w=a&&a.children,I=a?a.shapeFlag:0,H=f.children,{patchFlag:N,shapeFlag:k}=f;if(N>0){if(N&128){kt(w,H,g,y,b,x,R,C,T);return}else if(N&256){Fe(w,H,g,y,b,x,R,C,T);return}}k&8?(I&16&&$e(w,b,x),H!==w&&d(g,H)):I&16?k&16?kt(w,H,g,y,b,x,R,C,T):$e(w,b,x,!0):(I&8&&d(g,""),k&16&&A(H,g,y,b,x,R,C,T))},Fe=(a,f,g,y,b,x,R,C,T)=>{a=a||_t,f=f||_t;const w=a.length,I=f.length,H=Math.min(w,I);let N;for(N=0;NI?$e(a,b,x,!0,!1,H):A(f,g,y,b,x,R,C,T,H)},kt=(a,f,g,y,b,x,R,C,T)=>{let w=0;const I=f.length;let H=a.length-1,N=I-1;for(;w<=H&&w<=N;){const k=a[w],z=f[w]=T?Ge(f[w]):Ae(f[w]);if(lt(k,z))M(k,z,g,null,b,x,R,C,T);else break;w++}for(;w<=H&&w<=N;){const k=a[H],z=f[N]=T?Ge(f[N]):Ae(f[N]);if(lt(k,z))M(k,z,g,null,b,x,R,C,T);else break;H--,N--}if(w>H){if(w<=N){const k=N+1,z=kN)for(;w<=H;)Oe(a[w],b,x,!0),w++;else{const k=w,z=w,Q=new Map;for(w=z;w<=N;w++){const ye=f[w]=T?Ge(f[w]):Ae(f[w]);ye.key!=null&&Q.set(ye.key,w)}let ee,oe=0;const Te=N-z+1;let pt=!1,Ds=0;const St=new Array(Te);for(w=0;w=Te){Oe(ye,b,x,!0);continue}let Le;if(ye.key!=null)Le=Q.get(ye.key);else for(ee=z;ee<=N;ee++)if(St[ee-z]===0&<(ye,f[ee])){Le=ee;break}Le===void 0?Oe(ye,b,x,!0):(St[Le-z]=w+1,Le>=Ds?Ds=Le:pt=!0,M(ye,f[Le],g,null,b,x,R,C,T),oe++)}const Us=pt?Xl(St):_t;for(ee=Us.length-1,w=Te-1;w>=0;w--){const ye=z+w,Le=f[ye],Bs=ye+1{const{el:x,type:R,transition:C,children:T,shapeFlag:w}=a;if(w&6){nt(a.component.subTree,f,g,y);return}if(w&128){a.suspense.move(f,g,y);return}if(w&64){R.move(a,f,g,ht);return}if(R===me){s(x,f,g);for(let H=0;HC.enter(x),b);else{const{leave:H,delayLeave:N,afterLeave:k}=C,z=()=>s(x,f,g),Q=()=>{H(x,()=>{z(),k&&k()})};N?N(x,z,Q):Q()}else s(x,f,g)},Oe=(a,f,g,y=!1,b=!1)=>{const{type:x,props:R,ref:C,children:T,dynamicChildren:w,shapeFlag:I,patchFlag:H,dirs:N}=a;if(C!=null&&gn(C,null,g,a,!0),I&256){f.ctx.deactivate(a);return}const k=I&1&&N,z=!wt(a);let Q;if(z&&(Q=R&&R.onVnodeBeforeUnmount)&&Ee(Q,f,a),I&6)lo(a.component,g,y);else{if(I&128){a.suspense.unmount(g,y);return}k&&Ie(a,null,f,"beforeUnmount"),I&64?a.type.remove(a,f,g,b,ht,y):w&&(x!==me||H>0&&H&64)?$e(w,f,g,!1,!0):(x===me&&H&384||!b&&I&16)&&$e(T,f,g),y&&js(a)}(z&&(Q=R&&R.onVnodeUnmounted)||k)&&ge(()=>{Q&&Ee(Q,f,a),k&&Ie(a,null,f,"unmounted")},g)},js=a=>{const{type:f,el:g,anchor:y,transition:b}=a;if(f===me){oo(g,y);return}if(f===Pt){_(a);return}const x=()=>{r(g),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:R,delayLeave:C}=b,T=()=>R(g,x);C?C(a.el,x,T):T()}else x()},oo=(a,f)=>{let g;for(;a!==f;)g=p(a),r(a),a=g;r(f)},lo=(a,f,g)=>{const{bum:y,scope:b,update:x,subTree:R,um:C}=a;y&&Hn(y),b.stop(),x&&(x.active=!1,Oe(R,a,f,g)),C&&ge(C,f),ge(()=>{a.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},$e=(a,f,g,y=!1,b=!1,x=0)=>{for(let R=x;Ra.shapeFlag&6?Kt(a.component.subTree):a.shapeFlag&128?a.suspense.next():p(a.anchor||a.el);let Nn=!1;const Vs=(a,f,g)=>{a==null?f._vnode&&Oe(f._vnode,null,null,!0):M(f._vnode||null,a,f,null,null,null,g),Nn||(Nn=!0,Js(),dn(),Nn=!1),f._vnode=a},ht={p:M,um:Oe,m:nt,r:js,mt:ie,mc:A,pc:F,pbc:E,n:Kt,o:e};let Fn,$n;return t&&([Fn,$n]=t(ht)),{render:Vs,hydrate:Fn,createApp:Hl(Vs,Fn)}}function Bn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function st({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Mi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ni(e,t,n=!1){const s=e.children,r=t.children;if(U(s)&&U(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Fi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Fi(t)}const Yl=e=>e.__isTeleport,me=Symbol.for("v-fgt"),Ct=Symbol.for("v-txt"),ve=Symbol.for("v-cmt"),Pt=Symbol.for("v-stc"),Mt=[];let Re=null;function $i(e=!1){Mt.push(Re=e?null:[])}function Jl(){Mt.pop(),Re=Mt[Mt.length-1]||null}let Vt=1;function ar(e){Vt+=e}function Hi(e){return e.dynamicChildren=Vt>0?Re||_t:null,Jl(),Vt>0&&Re&&Re.push(e),e}function Ga(e,t,n,s,r,i){return Hi(Di(e,t,n,s,r,i,!0))}function ji(e,t,n,s,r){return Hi(ae(e,t,n,s,r,!0))}function mn(e){return e?e.__v_isVNode===!0:!1}function lt(e,t){return e.type===t.type&&e.key===t.key}const Vi=({key:e})=>e??null,ln=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ne(e)||he(e)||K(e)?{i:de,r:e,k:t,f:!!n}:e:null);function Di(e,t=null,n=null,s=0,r=null,i=e===me?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Vi(t),ref:t&&ln(t),scopeId:An,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(Ns(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ne(n)?8:16),Vt>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const ae=Ql;function Ql(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===fi)&&(e=ve),mn(e)){const l=Ze(e,t,!0);return n&&Ns(l,n),Vt>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag|=-2,l}if(cc(e)&&(e=e.__vccOpts),t){t=Zl(t);let{class:l,style:c}=t;l&&!ne(l)&&(t.class=vs(l)),Z(c)&&(ti(c)&&!U(c)&&(c=re({},c)),t.style=bs(c))}const o=ne(e)?1:dl(e)?128:Yl(e)?64:Z(e)?4:K(e)?2:0;return Di(e,t,n,s,r,o,i,!0)}function Zl(e){return e?ti(e)||Ai(e)?re({},e):e:null}function Ze(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:o}=e,l=t?ec(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Vi(l),ref:t&&t.ref?n&&r?U(r)?r.concat(ln(t)):[r,ln(t)]:ln(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ze(e.ssContent),ssFallback:e.ssFallback&&Ze(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ui(e=" ",t=0){return ae(Ct,null,e,t)}function za(e,t){const n=ae(Pt,null,e);return n.staticCount=t,n}function Xa(e="",t=!1){return t?($i(),ji(ve,null,e)):ae(ve,null,e)}function Ae(e){return e==null||typeof e=="boolean"?ae(ve):U(e)?ae(me,null,e.slice()):typeof e=="object"?Ge(e):ae(Ct,null,String(e))}function Ge(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ze(e)}function Ns(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(U(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Ns(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Ai(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[Ui(t)]):n=8);e.children=t,e.shapeFlag|=n}function ec(...e){const t={};for(let n=0;nce||de;let _n,fs;{const e=Dr(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};_n=t("__VUE_INSTANCE_SETTERS__",n=>ce=n),fs=t("__VUE_SSR_SETTERS__",n=>Mn=n)}const Bt=e=>{const t=ce;return _n(e),e.scope.on(),()=>{e.scope.off(),_n(t)}},ur=()=>{ce&&ce.scope.off(),_n(null)};function Bi(e){return e.vnode.shapeFlag&4}let Mn=!1;function rc(e,t=!1){t&&fs(t);const{props:n,children:s}=e.vnode,r=Bi(e);Vl(e,n,r,t),Bl(e,s);const i=r?ic(e,t):void 0;return t&&fs(!1),i}function ic(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ol);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Ki(e):null,i=Bt(e);et();const o=Ye(s,e,0,[e.props,r]);if(tt(),i(),$r(o)){if(o.then(ur,ur),t)return o.then(l=>{fr(e,l,t)}).catch(l=>{xn(l,e,0)});e.asyncDep=o}else fr(e,o,t)}else ki(e,t)}function fr(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=oi(t)),ki(e,n)}let dr;function ki(e,t,n){const s=e.type;if(!e.render){if(!t&&dr&&!s.render){const r=s.template||Ps(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,u=re(re({isCustomElement:i,delimiters:l},o),c);s.render=dr(r,u)}}e.render=s.render||xe}{const r=Bt(e);et();try{Il(e)}finally{tt(),r()}}}const oc={get(e,t){return _e(e,"get",""),e[t]}};function Ki(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,oc),slots:e.slots,emit:e.emit,expose:t}}function Fs(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(oi(on(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Lt)return Lt[n](e)},has(t,n){return n in t||n in Lt}}))}function lc(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function cc(e){return K(e)&&"__vccOpts"in e}const se=(e,t)=>qo(e,t,Mn);function ds(e,t,n){const s=arguments.length;return s===2?Z(t)&&!U(t)?mn(t)?ae(e,null,[t]):ae(e,t):ae(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&mn(n)&&(n=[n]),ae(e,t,n))}const ac="3.4.25";/** -* @vue/runtime-dom v3.4.25 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/const uc="http://www.w3.org/2000/svg",fc="http://www.w3.org/1998/Math/MathML",ze=typeof document<"u"?document:null,hr=ze&&ze.createElement("template"),dc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?ze.createElementNS(uc,e):t==="mathml"?ze.createElementNS(fc,e):ze.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>ze.createTextNode(e),createComment:e=>ze.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ze.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{hr.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=hr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ke="transition",Tt="animation",Dt=Symbol("_vtc"),Wi=(e,{slots:t})=>ds(yl,hc(e),t);Wi.displayName="Transition";const qi={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};Wi.props=re({},mi,qi);const rt=(e,t=[])=>{U(e)?e.forEach(n=>n(...t)):e&&e(...t)},pr=e=>e?U(e)?e.some(t=>t.length>1):e.length>1:!1;function hc(e){const t={};for(const S in e)S in qi||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:d=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,O=pc(r),M=O&&O[0],B=O&&O[1],{onBeforeEnter:q,onEnter:G,onEnterCancelled:m,onLeave:_,onLeaveCancelled:P,onBeforeAppear:L=q,onAppear:V=G,onAppearCancelled:A=m}=t,j=(S,W,ie)=>{it(S,W?d:l),it(S,W?u:o),ie&&ie()},E=(S,W)=>{S._isLeaving=!1,it(S,h),it(S,v),it(S,p),W&&W()},D=S=>(W,ie)=>{const le=S?V:G,$=()=>j(W,S,ie);rt(le,[W,$]),gr(()=>{it(W,S?c:i),Ke(W,S?d:l),pr(le)||mr(W,s,M,$)})};return re(t,{onBeforeEnter(S){rt(q,[S]),Ke(S,i),Ke(S,o)},onBeforeAppear(S){rt(L,[S]),Ke(S,c),Ke(S,u)},onEnter:D(!1),onAppear:D(!0),onLeave(S,W){S._isLeaving=!0;const ie=()=>E(S,W);Ke(S,h),Ke(S,p),_c(),gr(()=>{S._isLeaving&&(it(S,h),Ke(S,v),pr(_)||mr(S,s,B,ie))}),rt(_,[S,ie])},onEnterCancelled(S){j(S,!1),rt(m,[S])},onAppearCancelled(S){j(S,!0),rt(A,[S])},onLeaveCancelled(S){E(S),rt(P,[S])}})}function pc(e){if(e==null)return null;if(Z(e))return[kn(e.enter),kn(e.leave)];{const t=kn(e);return[t,t]}}function kn(e){return go(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Dt]||(e[Dt]=new Set)).add(t)}function it(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Dt];n&&(n.delete(t),n.size||(e[Dt]=void 0))}function gr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let gc=0;function mr(e,t,n,s){const r=e._endId=++gc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=mc(e,t);if(!o)return s();const u=o+"end";let d=0;const h=()=>{e.removeEventListener(u,p),i()},p=v=>{v.target===e&&++d>=c&&h()};setTimeout(()=>{d(n[O]||"").split(", "),r=s(`${ke}Delay`),i=s(`${ke}Duration`),o=_r(r,i),l=s(`${Tt}Delay`),c=s(`${Tt}Duration`),u=_r(l,c);let d=null,h=0,p=0;t===ke?o>0&&(d=ke,h=o,p=i.length):t===Tt?u>0&&(d=Tt,h=u,p=c.length):(h=Math.max(o,u),d=h>0?o>u?ke:Tt:null,p=d?d===ke?i.length:c.length:0);const v=d===ke&&/\b(transform|all)(,|$)/.test(s(`${ke}Property`).toString());return{type:d,timeout:h,propCount:p,hasTransform:v}}function _r(e,t){for(;e.lengthyr(n)+yr(e[s])))}function yr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function _c(){return document.body.offsetHeight}function yc(e,t,n){const s=e[Dt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const br=Symbol("_vod"),bc=Symbol("_vsh"),vc=Symbol(""),wc=/(^|;)\s*display\s*:/;function Ec(e,t,n){const s=e.style,r=ne(n);let i=!1;if(n&&!r){if(t)if(ne(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&cn(s,l,"")}else for(const o in t)n[o]==null&&cn(s,o,"");for(const o in n)o==="display"&&(i=!0),cn(s,o,n[o])}else if(r){if(t!==n){const o=s[vc];o&&(n+=";"+o),s.cssText=n,i=wc.test(n)}}else t&&e.removeAttribute("style");br in e&&(e[br]=i?s.display:"",e[bc]&&(s.display="none"))}const vr=/\s*!important$/;function cn(e,t,n){if(U(n))n.forEach(s=>cn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Cc(e,t);vr.test(n)?e.setProperty(dt(s),n.replace(vr,""),"important"):e[s]=n}}const wr=["Webkit","Moz","ms"],Kn={};function Cc(e,t){const n=Kn[t];if(n)return n;let s=Me(t);if(s!=="filter"&&s in e)return Kn[t]=s;s=vn(s);for(let r=0;rWn||(Lc.then(()=>Wn=0),Wn=Date.now());function Pc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Se(Mc(s,n.value),t,5,[s])};return n.value=e,n.attached=Ic(),n}function Mc(e,t){if(U(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Sr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Nc=(e,t,n,s,r,i,o,l,c)=>{const u=r==="svg";t==="class"?yc(e,s,u):t==="style"?Ec(e,n,s):Ut(t)?ms(t)||Rc(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Fc(e,t,s,u))?Sc(e,t,s,i,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),xc(e,t,s,u))};function Fc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Sr(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Sr(t)&&ne(n)?!1:t in e}const $c=["ctrl","shift","alt","meta"],Hc={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)=>$c.some(n=>e[`${n}Key`]&&!t.includes(n))},Ya=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=dt(r.key);if(t.some(o=>o===i||jc[o]===i))return e(r)})},Vc=re({patchProp:Nc},dc);let qn,Tr=!1;function Dc(){return qn=Tr?qn:Gl(Vc),Tr=!0,qn}const Qa=(...e)=>{const t=Dc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Bc(s);if(r)return n(r,!0,Uc(r))},t};function Uc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Bc(e){return ne(e)?document.querySelector(e):e}const Za=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},kc="modulepreload",Kc=function(e){return"/"+e},Ar={},eu=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){const i=document.getElementsByTagName("link"),o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.all(n.map(c=>{if(c=Kc(c),c in Ar)return;Ar[c]=!0;const u=c.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(!!s)for(let v=i.length-1;v>=0;v--){const O=i[v];if(O.href===c&&(!u||O.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${c}"]${d}`))return;const p=document.createElement("link");if(p.rel=u?"stylesheet":kc,u||(p.as="script",p.crossOrigin=""),p.href=c,l&&p.setAttribute("nonce",l),document.head.appendChild(p),u)return new Promise((v,O)=>{p.addEventListener("load",v),p.addEventListener("error",()=>O(new Error(`Unable to preload CSS for ${c}`)))})}))}return r.then(()=>t()).catch(i=>{const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i})},Wc=window.__VP_SITE_DATA__;function $s(e){return kr()?(xo(e),!0):!1}function Je(e){return typeof e=="function"?e():ii(e)}const Gi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const qc=Object.prototype.toString,Gc=e=>qc.call(e)==="[object Object]",Nt=()=>{},hs=zc();function zc(){var e,t;return Gi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Xc(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const zi=e=>e();function Yc(e=zi){const t=fe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:Cn(t),pause:n,resume:s,eventFilter:r}}function Jc(e){return e||Pn()}function Xi(...e){if(e.length!==1)return Zo(...e);const t=e[0];return typeof t=="function"?Cn(Yo(()=>({get:t,set:Nt}))):fe(t)}function Qc(e,t,n={}){const{eventFilter:s=zi,...r}=n;return je(e,Xc(s,t),r)}function Zc(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Yc(s);return{stop:Qc(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function Hs(e,t=!0,n){Jc()?xt(e,n):t?e():Sn(e)}function mt(e){var t;const n=Je(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Ne=Gi?window:void 0;function Ve(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=Ne):[t,n,s,r]=e,!t)return Nt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(d=>d()),i.length=0},l=(d,h,p,v)=>(d.addEventListener(h,p,v),()=>d.removeEventListener(h,p,v)),c=je(()=>[mt(t),Je(r)],([d,h])=>{if(o(),!d)return;const p=Gc(h)?{...h}:h;i.push(...n.flatMap(v=>s.map(O=>l(d,v,O,p))))},{immediate:!0,flush:"post"}),u=()=>{c(),o()};return $s(u),u}let Rr=!1;function tu(e,t,n={}){const{window:s=Ne,ignore:r=[],capture:i=!0,detectIframe:o=!1}=n;if(!s)return Nt;hs&&!Rr&&(Rr=!0,Array.from(s.document.body.children).forEach(p=>p.addEventListener("click",Nt)),s.document.documentElement.addEventListener("click",Nt));let l=!0;const c=p=>r.some(v=>{if(typeof v=="string")return Array.from(s.document.querySelectorAll(v)).some(O=>O===p.target||p.composedPath().includes(O));{const O=mt(v);return O&&(p.target===O||p.composedPath().includes(O))}}),d=[Ve(s,"click",p=>{const v=mt(e);if(!(!v||v===p.target||p.composedPath().includes(v))){if(p.detail===0&&(l=!c(p)),!l){l=!0;return}t(p)}},{passive:!0,capture:i}),Ve(s,"pointerdown",p=>{const v=mt(e);l=!c(p)&&!!(v&&!p.composedPath().includes(v))},{passive:!0}),o&&Ve(s,"blur",p=>{setTimeout(()=>{var v;const O=mt(e);((v=s.document.activeElement)==null?void 0:v.tagName)==="IFRAME"&&!(O!=null&&O.contains(s.document.activeElement))&&t(p)},0)})].filter(Boolean);return()=>d.forEach(p=>p())}function ea(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function nu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Ne,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=ea(t);return Ve(r,i,d=>{d.repeat&&Je(l)||c(d)&&n(d)},o)}function ta(){const e=fe(!1),t=Pn();return t&&xt(()=>{e.value=!0},t),e}function na(e){const t=ta();return se(()=>(t.value,!!e()))}function Yi(e,t={}){const{window:n=Ne}=t,s=na(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=fe(!1),o=u=>{i.value=u.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=pi(()=>{s.value&&(l(),r=n.matchMedia(Je(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return $s(()=>{c(),l(),r=void 0}),i}const en=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},tn="__vueuse_ssr_handlers__",sa=ra();function ra(){return tn in en||(en[tn]=en[tn]||{}),en[tn]}function Ji(e,t){return sa[e]||t}function ia(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const oa={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Or="vueuse-storage";function la(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:d,window:h=Ne,eventFilter:p,onError:v=E=>{console.error(E)},initOnMounted:O}=s,M=(d?si:fe)(typeof t=="function"?t():t);if(!n)try{n=Ji("getDefaultStorage",()=>{var E;return(E=Ne)==null?void 0:E.localStorage})()}catch(E){v(E)}if(!n)return M;const B=Je(t),q=ia(B),G=(r=s.serializer)!=null?r:oa[q],{pause:m,resume:_}=Zc(M,()=>L(M.value),{flush:i,deep:o,eventFilter:p});h&&l&&Hs(()=>{Ve(h,"storage",A),Ve(h,Or,j),O&&A()}),O||A();function P(E,D){h&&h.dispatchEvent(new CustomEvent(Or,{detail:{key:e,oldValue:E,newValue:D,storageArea:n}}))}function L(E){try{const D=n.getItem(e);if(E==null)P(D,null),n.removeItem(e);else{const S=G.write(E);D!==S&&(n.setItem(e,S),P(D,S))}}catch(D){v(D)}}function V(E){const D=E?E.newValue:n.getItem(e);if(D==null)return c&&B!=null&&n.setItem(e,G.write(B)),B;if(!E&&u){const S=G.read(D);return typeof u=="function"?u(S,B):q==="object"&&!Array.isArray(S)?{...B,...S}:S}else return typeof D!="string"?D:G.read(D)}function A(E){if(!(E&&E.storageArea!==n)){if(E&&E.key==null){M.value=B;return}if(!(E&&E.key!==e)){m();try{(E==null?void 0:E.newValue)!==G.write(M.value)&&(M.value=V(E))}catch(D){v(D)}finally{E?Sn(_):_()}}}}function j(E){A(E.detail)}return M}function Qi(e){return Yi("(prefers-color-scheme: dark)",e)}function ca(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=Ne,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:d=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},p=Qi({window:r}),v=se(()=>p.value?"dark":"light"),O=c||(o==null?Xi(s):la(o,s,i,{window:r,listenToStorageChanges:l})),M=se(()=>O.value==="auto"?v.value:O.value),B=Ji("updateHTMLAttrs",(_,P,L)=>{const V=typeof _=="string"?r==null?void 0:r.document.querySelector(_):mt(_);if(!V)return;let A;if(d&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),r.document.head.appendChild(A)),P==="class"){const j=L.split(/\s/g);Object.values(h).flatMap(E=>(E||"").split(/\s/g)).filter(Boolean).forEach(E=>{j.includes(E)?V.classList.add(E):V.classList.remove(E)})}else V.setAttribute(P,L);d&&(r.getComputedStyle(A).opacity,document.head.removeChild(A))});function q(_){var P;B(t,n,(P=h[_])!=null?P:_)}function G(_){e.onChanged?e.onChanged(_,q):q(_)}je(M,G,{flush:"post",immediate:!0}),Hs(()=>G(M.value));const m=se({get(){return u?O.value:M.value},set(_){O.value=_}});try{return Object.assign(m,{store:O,system:v,state:M})}catch{return m}}function aa(e={}){const{valueDark:t="dark",valueLight:n="",window:s=Ne}=e,r=ca({...e,onChanged:(l,c)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=se(()=>r.system?r.system.value:Qi({window:s}).value?"dark":"light");return se({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function Gn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Zi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const nn=new WeakMap;function su(e,t=!1){const n=fe(t);let s=null;je(Xi(e),o=>{const l=Gn(Je(o));if(l){const c=l;nn.get(c)||nn.set(c,c.style.overflow),n.value&&(c.style.overflow="hidden")}},{immediate:!0});const r=()=>{const o=Gn(Je(e));!o||n.value||(hs&&(s=Ve(o,"touchmove",l=>{ua(l)},{passive:!1})),o.style.overflow="hidden",n.value=!0)},i=()=>{var o;const l=Gn(Je(e));!l||!n.value||(hs&&(s==null||s()),l.style.overflow=(o=nn.get(l))!=null?o:"",nn.delete(l),n.value=!1)};return $s(i),se({get(){return n.value},set(o){o?r():i()}})}function ru(e={}){const{window:t=Ne,behavior:n="auto"}=e;if(!t)return{x:fe(0),y:fe(0)};const s=fe(t.scrollX),r=fe(t.scrollY),i=se({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=se({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Ve(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function iu(e={}){const{window:t=Ne,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0}=e,o=fe(n),l=fe(s),c=()=>{t&&(i?(o.value=t.innerWidth,l.value=t.innerHeight):(o.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(c(),Hs(c),Ve("resize",c,{passive:!0}),r){const u=Yi("(orientation: portrait)");je(u,()=>c())}return{width:o,height:l}}var zn={BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},Xn={};const eo=/^(?:[a-z]+:|\/\/)/i,fa="vitepress-theme-appearance",da=/#.*$/,ha=/[?#].*$/,pa=/(?:(^|\/)index)?\.(?:md|html)$/,Ce=typeof document<"u",to={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function ga(e,t,n=!1){if(t===void 0)return!1;if(e=Lr(`/${e}`),n)return new RegExp(t).test(e);if(Lr(t)!==e)return!1;const s=t.match(da);return s?(Ce?location.hash:"")===s[0]:!0}function Lr(e){return decodeURI(e).replace(ha,"").replace(pa,"$1")}function ma(e){return eo.test(e)}function _a(e,t){var s,r,i,o,l,c,u;const n=Object.keys(e.locales).find(d=>d!=="root"&&!ma(d)&&ga(t,`/${d}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:so(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function no(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=ya(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function ya(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ba(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function so(e,t){return[...e.filter(n=>!ba(t,n)),...t]}const va=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,wa=/^[a-z]:/i;function Ir(e){const t=wa.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(va,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Yn=new Set;function Ea(e){if(Yn.size===0){const n=typeof process=="object"&&(Xn==null?void 0:Xn.VITE_EXTRA_EXTENSIONS)||(zn==null?void 0:zn.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Yn.add(s))}const t=e.split(".").pop();return t==null||!Yn.has(t.toLowerCase())}const Ca=Symbol(),ut=si(Wc);function ou(e){const t=se(()=>_a(ut.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?fe(!0):n?aa({storageKey:fa,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):fe(!1);return{site:t,theme:se(()=>t.value.themeConfig),page:se(()=>e.data),frontmatter:se(()=>e.data.frontmatter),params:se(()=>e.data.params),lang:se(()=>t.value.lang),dir:se(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:se(()=>t.value.localeIndex||"root"),title:se(()=>no(t.value,e.data)),description:se(()=>e.data.description||t.value.description),isDark:s}}function xa(){const e=Et(Ca);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Sa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Pr(e){return eo.test(e)||!e.startsWith("/")?e:Sa(ut.value.base,e)}function Ta(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ce){const n="/";t=Ir(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${Ir(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let an=[];function lu(e){an.push(e),In(()=>{an=an.filter(t=>t!==e)})}function Aa(){let e=ut.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Mr(e,n);else if(Array.isArray(e))for(const s of e){const r=Mr(s,n);if(r){t=r;break}}return t}function Mr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Ra=Symbol(),ps="http://a.com",Oa=()=>({path:"/",component:null,data:to});function cu(e,t){const n=En(Oa()),s={route:n,go:r};async function r(l=Ce?location.href:"/"){var c,u;if(l=Jn(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1){if(Ce){const d=new URL(location.href);l!==Jn(d.href)&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",l),new URL(l,ps).hash!==d.hash&&window.dispatchEvent(new Event("hashchange")))}await o(l),await((u=s.onAfterRouteChanged)==null?void 0:u.call(s,l))}}let i=null;async function o(l,c=0,u=!1){var p;if(await((p=s.onBeforePageLoad)==null?void 0:p.call(s,l))===!1)return;const d=new URL(l,ps),h=i=d.pathname;try{let v=await e(h);if(!v)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:O,__pageData:M}=v;if(!O)throw new Error(`Invalid route component: ${O}`);n.path=Ce?h:Pr(h),n.component=on(O),n.data=on(M),Ce&&Sn(()=>{let B=ut.value.base+M.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ut.value.cleanUrls&&!B.endsWith("/")&&(B+=".html"),B!==d.pathname&&(d.pathname=B,l=B+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!c){let q=null;try{q=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(G){console.warn(G)}if(q){Nr(q,d.hash);return}}window.scrollTo(0,c)})}}catch(v){if(!/fetch|Page not found/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!u)try{const O=await fetch(ut.value.base+"hashmap.json");window.__VP_HASH_MAP__=await O.json(),await o(l,c,!0);return}catch{}i===h&&(i=null,n.path=Ce?h:Pr(h),n.component=t?on(t):null,n.data=to)}}return Ce&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const u=l.target.closest("a");if(u&&!u.closest(".vp-raw")&&(u instanceof SVGElement||!u.download)){const{target:d}=u,{href:h,origin:p,pathname:v,hash:O,search:M}=new URL(u.href instanceof SVGAnimatedString?u.href.animVal:u.href,u.baseURI),B=new URL(location.href);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!d&&p===B.origin&&Ea(v)&&(l.preventDefault(),v===B.pathname&&M===B.search?(O!==B.hash&&(history.pushState(null,"",h),window.dispatchEvent(new Event("hashchange"))),O?Nr(u,O,u.classList.contains("header-anchor")):window.scrollTo(0,0)):r(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;await o(Jn(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function La(){const e=Et(Ra);if(!e)throw new Error("useRouter() is called without provider.");return e}function ro(){return La().route}function Nr(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-Aa()+i;requestAnimationFrame(r)}}function Jn(e){const t=new URL(e,ps);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ut.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const Qn=()=>an.forEach(e=>e()),au=bi({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=ro(),{site:n}=xa();return()=>ds(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?ds(t.component,{onVnodeMounted:Qn,onVnodeUpdated:Qn,onVnodeUnmounted:Qn}):"404 Page Not Found"])}}),uu=bi({setup(e,{slots:t}){const n=fe(!1);return xt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function fu(){Ce&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(u=>u.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function du(){if(Ce){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(d=>d.remove());let u=c.textContent||"";o&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),Ia(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const d=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,d)})}})}}async function Ia(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function hu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=Zn(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const o=i.map(Zn);s.forEach((l,c)=>{const u=o.findIndex(d=>d==null?void 0:d.isEqualNode(l??null));u!==-1?delete o[u]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};pi(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=no(o,i);u!==document.title&&(document.title=u);const d=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==d&&h.setAttribute("content",d):Zn(["meta",{name:"description",content:d}]),r(so(o.head,Ma(c)))})}function Zn([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Pa(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Ma(e){return e.filter(t=>!Pa(t))}const es=new Set,io=()=>document.createElement("link"),Na=e=>{const t=io();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Fa=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let sn;const $a=Ce&&(sn=io())&&sn.relList&&sn.relList.supports&&sn.relList.supports("prefetch")?Na:Fa;function pu(){if(!Ce||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!es.has(c)){es.add(c);const u=Ta(c);u&&$a(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):es.add(l))})})};xt(s);const r=ro();je(()=>r.path,s),In(()=>{n&&n.disconnect()})}export{Wa as $,In as A,Ba as B,xl as C,Aa as D,Da as E,me as F,ka as G,si as H,lu as I,ae as J,Ua as K,eo as L,ro as M,ec as N,Et as O,iu as P,bs as Q,tu as R,nu as S,Wi as T,Sn as U,ru as V,Cn as W,su as X,jl as Y,Ja as Z,Za as _,Ui as a,Ya as a0,qa as a1,za as a2,hu as a3,Ra as a4,ou as a5,Ca as a6,au as a7,uu as a8,ut as a9,Qa as aa,cu as ab,Ta as ac,eu as ad,pu as ae,du as af,fu as ag,ds as ah,ji as b,Ga as c,bi as d,Xa as e,Ea as f,Pr as g,fe as h,ma as i,Ce as j,se as k,xt as l,Di as m,vs as n,$i as o,ii as p,ja as q,Ka as r,Va as s,Ha as t,xa as u,ga as v,ll as w,Yi as x,je as y,pi as z}; diff --git a/assets/chunks/framework.yUIHRp4d.js b/assets/chunks/framework.yUIHRp4d.js new file mode 100644 index 0000000..653fe55 --- /dev/null +++ b/assets/chunks/framework.yUIHRp4d.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.25 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function gs(e,t){const n=new Set(e.split(","));return s=>n.has(s)}const te={},_t=[],xe=()=>{},co=()=>!1,Ut=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ms=e=>e.startsWith("onUpdate:"),re=Object.assign,_s=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},ao=Object.prototype.hasOwnProperty,Y=(e,t)=>ao.call(e,t),U=Array.isArray,yt=e=>yn(e)==="[object Map]",Nr=e=>yn(e)==="[object Set]",K=e=>typeof e=="function",ne=e=>typeof e=="string",ft=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Fr=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),$r=Object.prototype.toString,yn=e=>$r.call(e),uo=e=>yn(e).slice(8,-1),Hr=e=>yn(e)==="[object Object]",ys=e=>ne(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bt=gs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),bn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},fo=/-(\w)/g,Me=bn(e=>e.replace(fo,(t,n)=>n?n.toUpperCase():"")),ho=/\B([A-Z])/g,dt=bn(e=>e.replace(ho,"-$1").toLowerCase()),vn=bn(e=>e.charAt(0).toUpperCase()+e.slice(1)),rn=bn(e=>e?`on${vn(e)}`:""),Qe=(e,t)=>!Object.is(e,t),Hn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},po=e=>{const t=parseFloat(e);return isNaN(t)?e:t},go=e=>{const t=ne(e)?Number(e):NaN;return isNaN(t)?e:t};let Bs;const Vr=()=>Bs||(Bs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function bs(e){if(U(e)){const t={};for(let n=0;n{if(n){const s=n.split(_o);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function vs(e){let t="";if(ne(e))t=e;else if(U(e))for(let n=0;nne(e)?e:e==null?"":U(e)||Z(e)&&(e.toString===$r||!K(e.toString))?JSON.stringify(e,Ur,2):String(e),Ur=(e,t)=>t&&t.__v_isRef?Ur(e,t.value):yt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[jn(s,i)+" =>"]=r,n),{})}:Nr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>jn(n))}:ft(t)?jn(t):Z(t)&&!U(t)&&!Hr(t)?String(t):t,jn=(e,t="")=>{var n;return ft(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.25 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let be;class Eo{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=be,!t&&be&&(this.index=(be.scopes||(be.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=be;try{return be=this,t()}finally{be=n}}}on(){be=this}off(){be=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),tt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Xe,n=ct;try{return Xe=!0,ct=this,this._runnings++,ks(this),this.fn()}finally{Ks(this),this._runnings--,ct=n,Xe=t}}stop(){var t;this.active&&(ks(this),Ks(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function So(e){return e.value}function ks(e){e._trackId++,e._depsLength=0}function Ks(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},un=new WeakMap,at=Symbol(""),ss=Symbol("");function _e(e,t,n){if(Xe&&ct){let s=un.get(e);s||un.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=Gr(()=>s.delete(n))),Wr(ct,r)}}function He(e,t,n,s,r,i){const o=un.get(e);if(!o)return;let l=[];if(t==="clear")l=[...o.values()];else if(n==="length"&&U(e)){const c=Number(s);o.forEach((u,f)=>{(f==="length"||!ft(f)&&f>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":U(e)?ys(n)&&l.push(o.get("length")):(l.push(o.get(at)),yt(e)&&l.push(o.get(ss)));break;case"delete":U(e)||(l.push(o.get(at)),yt(e)&&l.push(o.get(ss)));break;case"set":yt(e)&&l.push(o.get(at));break}Es();for(const c of l)c&&qr(c,4);Cs()}function To(e,t){var n;return(n=un.get(e))==null?void 0:n.get(t)}const Ao=gs("__proto__,__v_isRef,__isVue"),zr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ft)),Ws=Ro();function Ro(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=J(this);for(let i=0,o=this.length;i{e[t]=function(...n){et(),Es();const s=J(this)[t].apply(this,n);return Cs(),tt(),s}}),e}function Oo(e){ft(e)||(e=String(e));const t=J(this);return _e(t,"has",e),t.hasOwnProperty(e)}class Xr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Bo:Zr:i?Qr:Jr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=U(t);if(!r){if(o&&Y(Ws,n))return Reflect.get(Ws,n,s);if(n==="hasOwnProperty")return Oo}const l=Reflect.get(t,n,s);return(ft(n)?zr.has(n):Ao(n))||(r||_e(t,"get",n),i)?l:he(l)?o&&ys(n)?l:l.value:Z(l)?r?Cn(l):En(l):l}}class Yr extends Xr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=Ft(i);if(!fn(s)&&!Ft(s)&&(i=J(i),s=J(s)),!U(t)&&he(i)&&!he(s))return c?!1:(i.value=s,!0)}const o=U(t)&&ys(n)?Number(n)e,wn=e=>Reflect.getPrototypeOf(e);function Wt(e,t,n=!1,s=!1){e=e.__v_raw;const r=J(e),i=J(t);n||(Qe(t,i)&&_e(r,"get",t),_e(r,"get",i));const{has:o}=wn(r),l=s?xs:n?As:$t;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function qt(e,t=!1){const n=this.__v_raw,s=J(n),r=J(e);return t||(Qe(e,r)&&_e(s,"has",e),_e(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function Gt(e,t=!1){return e=e.__v_raw,!t&&_e(J(e),"iterate",at),Reflect.get(e,"size",e)}function qs(e){e=J(e);const t=J(this);return wn(t).has.call(t,e)||(t.add(e),He(t,"add",e,e)),this}function Gs(e,t){t=J(t);const n=J(this),{has:s,get:r}=wn(n);let i=s.call(n,e);i||(e=J(e),i=s.call(n,e));const o=r.call(n,e);return n.set(e,t),i?Qe(t,o)&&He(n,"set",e,t):He(n,"add",e,t),this}function zs(e){const t=J(this),{has:n,get:s}=wn(t);let r=n.call(t,e);r||(e=J(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&He(t,"delete",e,void 0),i}function Xs(){const e=J(this),t=e.size!==0,n=e.clear();return t&&He(e,"clear",void 0,void 0),n}function zt(e,t){return function(s,r){const i=this,o=i.__v_raw,l=J(o),c=t?xs:e?As:$t;return!e&&_e(l,"iterate",at),o.forEach((u,f)=>s.call(r,c(u),c(f),i))}}function Xt(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),o=yt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),f=n?xs:t?As:$t;return!t&&_e(i,"iterate",c?ss:at),{next(){const{value:h,done:m}=u.next();return m?{value:h,done:m}:{value:l?[f(h[0]),f(h[1])]:f(h),done:m}},[Symbol.iterator](){return this}}}}function Ue(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function No(){const e={get(i){return Wt(this,i)},get size(){return Gt(this)},has:qt,add:qs,set:Gs,delete:zs,clear:Xs,forEach:zt(!1,!1)},t={get(i){return Wt(this,i,!1,!0)},get size(){return Gt(this)},has:qt,add:qs,set:Gs,delete:zs,clear:Xs,forEach:zt(!1,!0)},n={get(i){return Wt(this,i,!0)},get size(){return Gt(this,!0)},has(i){return qt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:zt(!0,!1)},s={get(i){return Wt(this,i,!0,!0)},get size(){return Gt(this,!0)},has(i){return qt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:zt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Xt(i,!1,!1),n[i]=Xt(i,!0,!1),t[i]=Xt(i,!1,!0),s[i]=Xt(i,!0,!0)}),[e,n,t,s]}const[Fo,$o,Ho,jo]=No();function Ss(e,t){const n=t?e?jo:Ho:e?$o:Fo;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Y(n,r)&&r in s?n:s,r,i)}const Vo={get:Ss(!1,!1)},Do={get:Ss(!1,!0)},Uo={get:Ss(!0,!1)};const Jr=new WeakMap,Qr=new WeakMap,Zr=new WeakMap,Bo=new WeakMap;function ko(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ko(e){return e.__v_skip||!Object.isExtensible(e)?0:ko(uo(e))}function En(e){return Ft(e)?e:Ts(e,!1,Lo,Vo,Jr)}function Wo(e){return Ts(e,!1,Mo,Do,Qr)}function Cn(e){return Ts(e,!0,Po,Uo,Zr)}function Ts(e,t,n,s,r){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Ko(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function Rt(e){return Ft(e)?Rt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ft(e){return!!(e&&e.__v_isReadonly)}function fn(e){return!!(e&&e.__v_isShallow)}function ei(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function on(e){return Object.isExtensible(e)&&jr(e,"__v_skip",!0),e}const $t=e=>Z(e)?En(e):e,As=e=>Z(e)?Cn(e):e;class ti{constructor(t,n,s,r){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new ws(()=>t(this._value),()=>Ot(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Qe(t._value,t._value=t.effect.run())&&Ot(t,4),Rs(t),t.effect._dirtyLevel>=2&&Ot(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function qo(e,t,n=!1){let s,r;const i=K(e);return i?(s=e,r=xe):(s=e.get,r=e.set),new ti(s,r,i||!r,n)}function Rs(e){var t;Xe&&ct&&(e=J(e),Wr(ct,(t=e.dep)!=null?t:e.dep=Gr(()=>e.dep=void 0,e instanceof ti?e:void 0)))}function Ot(e,t=4,n){e=J(e);const s=e.dep;s&&qr(s,t)}function he(e){return!!(e&&e.__v_isRef===!0)}function fe(e){return si(e,!1)}function ni(e){return si(e,!0)}function si(e,t){return he(e)?e:new Go(e,t)}class Go{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:$t(t)}get value(){return Rs(this),this._value}set value(t){const n=this.__v_isShallow||fn(t)||Ft(t);t=n?t:J(t),Qe(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:$t(t),Ot(this,4))}}function ri(e){return he(e)?e.value:e}const zo={get:(e,t,n)=>ri(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return he(r)&&!he(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ii(e){return Rt(e)?e:new Proxy(e,zo)}class Xo{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>Rs(this),()=>Ot(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Yo(e){return new Xo(e)}class Jo{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return To(J(this._object),this._key)}}class Qo{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Zo(e,t,n){return he(e)?e:K(e)?new Qo(e):Z(e)&&arguments.length>1?el(e,t,n):fe(e)}function el(e,t,n){const s=e[t];return he(s)?s:new Jo(e,t,n)}/** +* @vue/runtime-core v3.4.25 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ye(e,t,n,s){try{return s?e(...s):e()}catch(r){xn(r,t,n)}}function Se(e,t,n,s){if(K(e)){const r=Ye(e,t,n,s);return r&&Fr(r)&&r.catch(i=>{xn(i,t,n)}),r}if(U(e)){const r=[];for(let i=0;i>>1,r=ue[s],i=jt(r);iPe&&ue.splice(t,1)}function rl(e){U(e)?vt.push(...e):(!We||!We.includes(e,e.allowRecurse?ot+1:ot))&&vt.push(e),li()}function Ys(e,t,n=Ht?Pe+1:0){for(;njt(n)-jt(s));if(vt.length=0,We){We.push(...t);return}for(We=t,ot=0;ote.id==null?1/0:e.id,il=(e,t)=>{const n=jt(e)-jt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ci(e){rs=!1,Ht=!0,ue.sort(il);try{for(Pe=0;Pene(w)?w.trim():w)),h&&(r=n.map(po))}let l,c=s[l=rn(t)]||s[l=rn(Me(t))];!c&&i&&(c=s[l=rn(dt(t))]),c&&Se(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Se(u,e,6,r)}}function ai(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!K(e)){const c=u=>{const f=ai(u,t,!0);f&&(l=!0,re(o,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(Z(e)&&s.set(e,null),null):(U(i)?i.forEach(c=>o[c]=null):re(o,i),Z(e)&&s.set(e,o),o)}function Tn(e,t){return!e||!Ut(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,dt(t))||Y(e,t))}let de=null,An=null;function hn(e){const t=de;return de=e,An=e&&e.type.__scopeId||null,t}function ja(e){An=e}function Va(){An=null}function ll(e,t=de,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&cr(-1);const i=hn(t);let o;try{o=e(...r)}finally{hn(i),s._d&&cr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Vn(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:u,renderCache:f,props:h,data:m,setupState:w,ctx:I,inheritAttrs:M}=e,B=hn(e);let q,G;try{if(n.shapeFlag&4){const _=r||s,P=_;q=Ae(u.call(P,_,f,h,w,m,I)),G=l}else{const _=t;q=Ae(_.length>1?_(h,{attrs:l,slots:o,emit:c}):_(h,null)),G=t.props?l:cl(l)}}catch(_){Mt.length=0,xn(_,e,1),q=ae(ve)}let g=q;if(G&&M!==!1){const _=Object.keys(G),{shapeFlag:P}=g;_.length&&P&7&&(i&&_.some(ms)&&(G=al(G,i)),g=Ze(g,G))}return n.dirs&&(g=Ze(g),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),q=g,hn(B),q}const cl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ut(n))&&((t||(t={}))[n]=e[n]);return t},al=(e,t)=>{const n={};for(const s in e)(!ms(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function ul(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Js(s,o,u):!!o;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function hi(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):rl(e)}const hl=Symbol.for("v-scx"),pl=()=>Et(hl);function pi(e,t){return Rn(e,null,t)}function Ba(e,t){return Rn(e,null,{flush:"post"})}const Yt={};function je(e,t,n){return Rn(e,t,n)}function Rn(e,t,{immediate:n,deep:s,flush:r,once:i,onTrack:o,onTrigger:l}=te){if(t&&i){const O=t;t=(...V)=>{O(...V),P()}}const c=ce,u=O=>s===!0?O:gt(O,s===!1?1:void 0);let f,h=!1,m=!1;if(he(e)?(f=()=>e.value,h=fn(e)):Rt(e)?(f=()=>u(e),h=!0):U(e)?(m=!0,h=e.some(O=>Rt(O)||fn(O)),f=()=>e.map(O=>{if(he(O))return O.value;if(Rt(O))return u(O);if(K(O))return Ye(O,c,2)})):K(e)?t?f=()=>Ye(e,c,2):f=()=>(w&&w(),Se(e,c,3,[I])):f=xe,t&&s){const O=f;f=()=>gt(O())}let w,I=O=>{w=g.onStop=()=>{Ye(O,c,4),w=g.onStop=void 0}},M;if(Mn)if(I=xe,t?n&&Se(t,c,3,[f(),m?[]:void 0,I]):f(),r==="sync"){const O=pl();M=O.__watcherHandles||(O.__watcherHandles=[])}else return xe;let B=m?new Array(e.length).fill(Yt):Yt;const q=()=>{if(!(!g.active||!g.dirty))if(t){const O=g.run();(s||h||(m?O.some((V,A)=>Qe(V,B[A])):Qe(O,B)))&&(w&&w(),Se(t,c,3,[O,B===Yt?void 0:m&&B[0]===Yt?[]:B,I]),B=O)}else g.run()};q.allowRecurse=!!t;let G;r==="sync"?G=q:r==="post"?G=()=>ge(q,c&&c.suspense):(q.pre=!0,c&&(q.id=c.uid),G=()=>Is(q));const g=new ws(f,xe,G),_=Br(),P=()=>{g.stop(),_&&_s(_.effects,g)};return t?n?q():B=g.run():r==="post"?ge(g.run.bind(g),c&&c.suspense):g.run(),M&&M.push(P),P}function gl(e,t,n){const s=this.proxy,r=ne(e)?e.includes(".")?gi(s,e):()=>s[e]:e.bind(s,s);let i;K(t)?i=t:(i=t.handler,n=t);const o=Bt(this),l=Rn(r,i.bind(s),n);return o(),l}function gi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r0){if(n>=t)return e;n++}if(s=s||new Set,s.has(e))return e;if(s.add(e),he(e))gt(e.value,t,n,s);else if(U(e))for(let r=0;r{gt(r,t,n,s)});else if(Hr(e))for(const r in e)gt(e[r],t,n,s);return e}function Le(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;o{e.isMounted=!0}),wi(()=>{e.isUnmounting=!0}),e}const we=[Function,Array],mi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:we,onEnter:we,onAfterEnter:we,onEnterCancelled:we,onBeforeLeave:we,onLeave:we,onAfterLeave:we,onLeaveCancelled:we,onBeforeAppear:we,onAppear:we,onAfterAppear:we,onAppearCancelled:we},_l={name:"BaseTransition",props:mi,setup(e,{slots:t}){const n=Pn(),s=ml();return()=>{const r=t.default&&yi(t.default(),!0);if(!r||!r.length)return;let i=r[0];if(r.length>1){for(const m of r)if(m.type!==ve){i=m;break}}const o=J(e),{mode:l}=o;if(s.isLeaving)return Dn(i);const c=Zs(i);if(!c)return Dn(i);const u=is(c,o,s,n);os(c,u);const f=n.subTree,h=f&&Zs(f);if(h&&h.type!==ve&&!lt(c,h)){const m=is(h,o,s,n);if(os(h,m),l==="out-in")return s.isLeaving=!0,m.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Dn(i);l==="in-out"&&c.type!==ve&&(m.delayLeave=(w,I,M)=>{const B=_i(s,h);B[String(h.key)]=h,w[qe]=()=>{I(),w[qe]=void 0,delete u.delayedLeave},u.delayedLeave=M})}return i}}},yl=_l;function _i(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 is(e,t,n,s){const{appear:r,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:h,onLeave:m,onAfterLeave:w,onLeaveCancelled:I,onBeforeAppear:M,onAppear:B,onAfterAppear:q,onAppearCancelled:G}=t,g=String(e.key),_=_i(n,e),P=(A,j)=>{A&&Se(A,s,9,j)},O=(A,j)=>{const E=j[1];P(A,j),U(A)?A.every(D=>D.length<=1)&&E():A.length<=1&&E()},V={mode:i,persisted:o,beforeEnter(A){let j=l;if(!n.isMounted)if(r)j=M||l;else return;A[qe]&&A[qe](!0);const E=_[g];E&<(e,E)&&E.el[qe]&&E.el[qe](),P(j,[A])},enter(A){let j=c,E=u,D=f;if(!n.isMounted)if(r)j=B||c,E=q||u,D=G||f;else return;let S=!1;const W=A[Jt]=ie=>{S||(S=!0,ie?P(D,[A]):P(E,[A]),V.delayedLeave&&V.delayedLeave(),A[Jt]=void 0)};j?O(j,[A,W]):W()},leave(A,j){const E=String(e.key);if(A[Jt]&&A[Jt](!0),n.isUnmounting)return j();P(h,[A]);let D=!1;const S=A[qe]=W=>{D||(D=!0,j(),W?P(I,[A]):P(w,[A]),A[qe]=void 0,_[E]===e&&delete _[E])};_[E]=e,m?O(m,[A,S]):S()},clone(A){return is(A,t,n,s)}};return V}function Dn(e){if(On(e))return e=Ze(e),e.children=null,e}function Zs(e){if(!On(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&K(n.default))return n.default()}}function os(e,t){e.shapeFlag&6&&e.component?os(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 yi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,On=e=>e.type.__isKeepAlive;function bl(e,t){vi(e,"a",t)}function vl(e,t){vi(e,"da",t)}function vi(e,t,n=ce){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(In(t,s,n),n){let r=n.parent;for(;r&&r.parent;)On(r.parent.vnode)&&wl(s,t,n,r),r=r.parent}}function wl(e,t,n,s){const r=In(t,e,s,!0);Ln(()=>{_s(s[t],r)},n)}function In(e,t,n=ce,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;et();const l=Bt(n),c=Se(t,n,e,o);return l(),tt(),c});return s?r.unshift(i):r.push(i),i}}const De=e=>(t,n=ce)=>(!Mn||e==="sp")&&In(e,(...s)=>t(...s),n),El=De("bm"),xt=De("m"),Cl=De("bu"),xl=De("u"),wi=De("bum"),Ln=De("um"),Sl=De("sp"),Tl=De("rtg"),Al=De("rtc");function Rl(e,t=ce){In("ec",e,t)}function ka(e,t,n,s){let r;const i=n;if(U(e)||ne(e)){r=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,c=o.length;lmn(t)?!(t.type===ve||t.type===me&&!Ei(t.children)):!0)?e:null}function Wa(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:rn(s)]=e[s];return n}const ls=e=>e?Bi(e)?Ns(e)||e.proxy:ls(e.parent):null,It=re(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ls(e.parent),$root:e=>ls(e.root),$emit:e=>e.emit,$options:e=>Ls(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Is(e.update)}),$nextTick:e=>e.n||(e.n=Sn.bind(e.proxy)),$watch:e=>gl.bind(e)}),Un=(e,t)=>e!==te&&!e.__isScriptSetup&&Y(e,t),Ol={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const w=o[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Un(s,t))return o[t]=1,s[t];if(r!==te&&Y(r,t))return o[t]=2,r[t];if((u=e.propsOptions[0])&&Y(u,t))return o[t]=3,i[t];if(n!==te&&Y(n,t))return o[t]=4,n[t];cs&&(o[t]=0)}}const f=It[t];let h,m;if(f)return t==="$attrs"&&_e(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==te&&Y(n,t))return o[t]=4,n[t];if(m=c.config.globalProperties,Y(m,t))return m[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Un(r,t)?(r[t]=n,!0):s!==te&&Y(s,t)?(s[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==te&&Y(e,o)||Un(t,o)||(l=i[0])&&Y(l,o)||Y(s,o)||Y(It,o)||Y(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function qa(){return Il().slots}function Il(){const e=Pn();return e.setupContext||(e.setupContext=Ki(e))}function er(e){return U(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let cs=!0;function Ll(e){const t=Ls(e),n=e.proxy,s=e.ctx;cs=!1,t.beforeCreate&&tr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:f,beforeMount:h,mounted:m,beforeUpdate:w,updated:I,activated:M,deactivated:B,beforeDestroy:q,beforeUnmount:G,destroyed:g,unmounted:_,render:P,renderTracked:O,renderTriggered:V,errorCaptured:A,serverPrefetch:j,expose:E,inheritAttrs:D,components:S,directives:W,filters:ie}=t;if(u&&Pl(u,s,null),o)for(const X in o){const F=o[X];K(F)&&(s[X]=F.bind(n))}if(r){const X=r.call(n,n);Z(X)&&(e.data=En(X))}if(cs=!0,i)for(const X in i){const F=i[X],Fe=K(F)?F.bind(n,n):K(F.get)?F.get.bind(n,n):xe,kt=!K(F)&&K(F.set)?F.set.bind(n):xe,nt=se({get:Fe,set:kt});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>nt.value,set:Oe=>nt.value=Oe})}if(l)for(const X in l)Ci(l[X],s,n,X);if(c){const X=K(c)?c.call(n):c;Reflect.ownKeys(X).forEach(F=>{jl(F,X[F])})}f&&tr(f,e,"c");function $(X,F){U(F)?F.forEach(Fe=>X(Fe.bind(n))):F&&X(F.bind(n))}if($(El,h),$(xt,m),$(Cl,w),$(xl,I),$(bl,M),$(vl,B),$(Rl,A),$(Al,O),$(Tl,V),$(wi,G),$(Ln,_),$(Sl,j),U(E))if(E.length){const X=e.exposed||(e.exposed={});E.forEach(F=>{Object.defineProperty(X,F,{get:()=>n[F],set:Fe=>n[F]=Fe})})}else e.exposed||(e.exposed={});P&&e.render===xe&&(e.render=P),D!=null&&(e.inheritAttrs=D),S&&(e.components=S),W&&(e.directives=W)}function Pl(e,t,n=xe){U(e)&&(e=as(e));for(const s in e){const r=e[s];let i;Z(r)?"default"in r?i=Et(r.from||s,r.default,!0):i=Et(r.from||s):i=Et(r),he(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function tr(e,t,n){Se(U(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ci(e,t,n,s){const r=s.includes(".")?gi(n,s):()=>n[s];if(ne(e)){const i=t[e];K(i)&&je(r,i)}else if(K(e))je(r,e.bind(n));else if(Z(e))if(U(e))e.forEach(i=>Ci(i,t,n,s));else{const i=K(e.handler)?e.handler.bind(n):t[e.handler];K(i)&&je(r,i,e)}}function Ls(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>pn(c,u,o,!0)),pn(c,t,o)),Z(t)&&i.set(t,c),c}function pn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&pn(e,i,n,!0),r&&r.forEach(o=>pn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Ml[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Ml={data:nr,props:sr,emits:sr,methods:At,computed:At,beforeCreate:pe,created:pe,beforeMount:pe,mounted:pe,beforeUpdate:pe,updated:pe,beforeDestroy:pe,beforeUnmount:pe,destroyed:pe,unmounted:pe,activated:pe,deactivated:pe,errorCaptured:pe,serverPrefetch:pe,components:At,directives:At,watch:Fl,provide:nr,inject:Nl};function nr(e,t){return t?e?function(){return re(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Nl(e,t){return At(as(e),as(t))}function as(e){if(U(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(s&&s.proxy):t}}const Si={},Ti=()=>Object.create(Si),Ai=e=>Object.getPrototypeOf(e)===Si;function Vl(e,t,n,s=!1){const r={},i=Ti();e.propsDefaults=Object.create(null),Ri(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Wo(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Dl(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=J(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[m,w]=Oi(h,t,!0);re(o,m),w&&l.push(...w)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return Z(e)&&s.set(e,_t),_t;if(U(i))for(let f=0;f-1,w[1]=M<0||I-1||Y(w,"default"))&&l.push(h)}}}const u=[o,l];return Z(e)&&s.set(e,u),u}function rr(e){return e[0]!=="$"&&!bt(e)}function ir(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function or(e,t){return ir(e)===ir(t)}function lr(e,t){return U(t)?t.findIndex(n=>or(n,e)):K(t)&&or(t,e)?0:-1}const Ii=e=>e[0]==="_"||e==="$stable",Ps=e=>U(e)?e.map(Ae):[Ae(e)],Ul=(e,t,n)=>{if(t._n)return t;const s=ll((...r)=>Ps(t(...r)),n);return s._c=!1,s},Li=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Ii(r))continue;const i=e[r];if(K(i))t[r]=Ul(r,i,s);else if(i!=null){const o=Ps(i);t[r]=()=>o}}},Pi=(e,t)=>{const n=Ps(t);e.slots.default=()=>n},Bl=(e,t)=>{const n=e.slots=Ti();if(e.vnode.shapeFlag&32){const s=t._;s?(re(n,t),jr(n,"_",s)):Li(t,n)}else t&&Pi(e,t)},kl=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(re(r,t),!n&&l===1&&delete r._):(i=!t.$stable,Li(t,r)),o=t}else t&&(Pi(e,t),o={default:1});if(i)for(const l in r)!Ii(l)&&o[l]==null&&delete r[l]};function gn(e,t,n,s,r=!1){if(U(e)){e.forEach((m,w)=>gn(m,t&&(U(t)?t[w]:t),n,s,r));return}if(wt(s)&&!r)return;const i=s.shapeFlag&4?Ns(s.component)||s.component.proxy:s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,f=l.refs===te?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==c&&(ne(u)?(f[u]=null,Y(h,u)&&(h[u]=null)):he(u)&&(u.value=null)),K(c))Ye(c,l,12,[o,f]);else{const m=ne(c),w=he(c);if(m||w){const I=()=>{if(e.f){const M=m?Y(h,c)?h[c]:f[c]:c.value;r?U(M)&&_s(M,i):U(M)?M.includes(i)||M.push(i):m?(f[c]=[i],Y(h,c)&&(h[c]=f[c])):(c.value=[i],e.k&&(f[e.k]=c.value))}else m?(f[c]=o,Y(h,c)&&(h[c]=o)):w&&(c.value=o,e.k&&(f[e.k]=o))};o?(I.id=-1,ge(I,n)):I()}}}let Be=!1;const Kl=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Wl=e=>e.namespaceURI.includes("MathML"),Qt=e=>{if(Kl(e))return"svg";if(Wl(e))return"mathml"},Zt=e=>e.nodeType===8;function ql(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,f=(g,_)=>{if(!_.hasChildNodes()){n(null,g,_),dn(),_._vnode=g;return}Be=!1,h(_.firstChild,g,null,null,null),dn(),_._vnode=g,Be&&console.error("Hydration completed but contains mismatches.")},h=(g,_,P,O,V,A=!1)=>{A=A||!!_.dynamicChildren;const j=Zt(g)&&g.data==="[",E=()=>M(g,_,P,O,V,j),{type:D,ref:S,shapeFlag:W,patchFlag:ie}=_;let le=g.nodeType;_.el=g,ie===-2&&(A=!1,_.dynamicChildren=null);let $=null;switch(D){case Ct:le!==3?_.children===""?(c(_.el=r(""),o(g),g),$=g):$=E():(g.data!==_.children&&(Be=!0,g.data=_.children),$=i(g));break;case ve:G(g)?($=i(g),q(_.el=g.content.firstChild,g,P)):le!==8||j?$=E():$=i(g);break;case Pt:if(j&&(g=i(g),le=g.nodeType),le===1||le===3){$=g;const X=!_.children.length;for(let F=0;F<_.staticCount;F++)X&&(_.children+=$.nodeType===1?$.outerHTML:$.data),F===_.staticCount-1&&(_.anchor=$),$=i($);return j?i($):$}else E();break;case me:j?$=I(g,_,P,O,V,A):$=E();break;default:if(W&1)(le!==1||_.type.toLowerCase()!==g.tagName.toLowerCase())&&!G(g)?$=E():$=m(g,_,P,O,V,A);else if(W&6){_.slotScopeIds=V;const X=o(g);if(j?$=B(g):Zt(g)&&g.data==="teleport start"?$=B(g,g.data,"teleport end"):$=i(g),t(_,X,null,P,O,Qt(X),A),wt(_)){let F;j?(F=ae(me),F.anchor=$?$.previousSibling:X.lastChild):F=g.nodeType===3?Ui(""):ae("div"),F.el=g,_.component.subTree=F}}else W&64?le!==8?$=E():$=_.type.hydrate(g,_,P,O,V,A,e,w):W&128&&($=_.type.hydrate(g,_,P,O,Qt(o(g)),V,A,e,h))}return S!=null&&gn(S,null,O,_),$},m=(g,_,P,O,V,A)=>{A=A||!!_.dynamicChildren;const{type:j,props:E,patchFlag:D,shapeFlag:S,dirs:W,transition:ie}=_,le=j==="input"||j==="option";if(le||D!==-1){W&&Le(_,null,P,"created");let $=!1;if(G(g)){$=Mi(O,ie)&&P&&P.vnode.props&&P.vnode.props.appear;const F=g.content.firstChild;$&&ie.beforeEnter(F),q(F,g,P),_.el=g=F}if(S&16&&!(E&&(E.innerHTML||E.textContent))){let F=w(g.firstChild,_,g,P,O,V,A);for(;F;){Be=!0;const Fe=F;F=F.nextSibling,l(Fe)}}else S&8&&g.textContent!==_.children&&(Be=!0,g.textContent=_.children);if(E)if(le||!A||D&48)for(const F in E)(le&&(F.endsWith("value")||F==="indeterminate")||Ut(F)&&!bt(F)||F[0]===".")&&s(g,F,null,E[F],void 0,void 0,P);else E.onClick&&s(g,"onClick",null,E.onClick,void 0,void 0,P);let X;(X=E&&E.onVnodeBeforeMount)&&Ee(X,P,_),W&&Le(_,null,P,"beforeMount"),((X=E&&E.onVnodeMounted)||W||$)&&hi(()=>{X&&Ee(X,P,_),$&&ie.enter(g),W&&Le(_,null,P,"mounted")},O)}return g.nextSibling},w=(g,_,P,O,V,A,j)=>{j=j||!!_.dynamicChildren;const E=_.children,D=E.length;for(let S=0;S{const{slotScopeIds:j}=_;j&&(V=V?V.concat(j):j);const E=o(g),D=w(i(g),_,E,P,O,V,A);return D&&Zt(D)&&D.data==="]"?i(_.anchor=D):(Be=!0,c(_.anchor=u("]"),E,D),D)},M=(g,_,P,O,V,A)=>{if(Be=!0,_.el=null,A){const D=B(g);for(;;){const S=i(g);if(S&&S!==D)l(S);else break}}const j=i(g),E=o(g);return l(g),n(null,_,E,j,P,O,Qt(E),V),j},B=(g,_="[",P="]")=>{let O=0;for(;g;)if(g=i(g),g&&Zt(g)&&(g.data===_&&O++,g.data===P)){if(O===0)return i(g);O--}return g},q=(g,_,P)=>{const O=_.parentNode;O&&O.replaceChild(g,_);let V=P;for(;V;)V.vnode.el===_&&(V.vnode.el=V.subTree.el=g),V=V.parent},G=g=>g.nodeType===1&&g.tagName.toLowerCase()==="template";return[f,h]}const ge=hi;function Gl(e){return zl(e,ql)}function zl(e,t){const n=Vr();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:f,parentNode:h,nextSibling:m,setScopeId:w=xe,insertStaticContent:I}=e,M=(a,d,p,y=null,b=null,x=null,R=void 0,C=null,T=!!d.dynamicChildren)=>{if(a===d)return;a&&!lt(a,d)&&(y=Kt(a),Oe(a,b,x,!0),a=null),d.patchFlag===-2&&(T=!1,d.dynamicChildren=null);const{type:v,ref:L,shapeFlag:H}=d;switch(v){case Ct:B(a,d,p,y);break;case ve:q(a,d,p,y);break;case Pt:a==null&&G(d,p,y,R);break;case me:S(a,d,p,y,b,x,R,C,T);break;default:H&1?P(a,d,p,y,b,x,R,C,T):H&6?W(a,d,p,y,b,x,R,C,T):(H&64||H&128)&&v.process(a,d,p,y,b,x,R,C,T,ht)}L!=null&&b&&gn(L,a&&a.ref,x,d||a,!d)},B=(a,d,p,y)=>{if(a==null)s(d.el=l(d.children),p,y);else{const b=d.el=a.el;d.children!==a.children&&u(b,d.children)}},q=(a,d,p,y)=>{a==null?s(d.el=c(d.children||""),p,y):d.el=a.el},G=(a,d,p,y)=>{[a.el,a.anchor]=I(a.children,d,p,y,a.el,a.anchor)},g=({el:a,anchor:d},p,y)=>{let b;for(;a&&a!==d;)b=m(a),s(a,p,y),a=b;s(d,p,y)},_=({el:a,anchor:d})=>{let p;for(;a&&a!==d;)p=m(a),r(a),a=p;r(d)},P=(a,d,p,y,b,x,R,C,T)=>{d.type==="svg"?R="svg":d.type==="math"&&(R="mathml"),a==null?O(d,p,y,b,x,R,C,T):j(a,d,b,x,R,C,T)},O=(a,d,p,y,b,x,R,C)=>{let T,v;const{props:L,shapeFlag:H,transition:N,dirs:k}=a;if(T=a.el=o(a.type,x,L&&L.is,L),H&8?f(T,a.children):H&16&&A(a.children,T,null,y,b,Bn(a,x),R,C),k&&Le(a,null,y,"created"),V(T,a,a.scopeId,R,y),L){for(const Q in L)Q!=="value"&&!bt(Q)&&i(T,Q,null,L[Q],x,a.children,y,b,$e);"value"in L&&i(T,"value",null,L.value,x),(v=L.onVnodeBeforeMount)&&Ee(v,y,a)}k&&Le(a,null,y,"beforeMount");const z=Mi(b,N);z&&N.beforeEnter(T),s(T,d,p),((v=L&&L.onVnodeMounted)||z||k)&&ge(()=>{v&&Ee(v,y,a),z&&N.enter(T),k&&Le(a,null,y,"mounted")},b)},V=(a,d,p,y,b)=>{if(p&&w(a,p),y)for(let x=0;x{for(let v=T;v{const C=d.el=a.el;let{patchFlag:T,dynamicChildren:v,dirs:L}=d;T|=a.patchFlag&16;const H=a.props||te,N=d.props||te;let k;if(p&&st(p,!1),(k=N.onVnodeBeforeUpdate)&&Ee(k,p,d,a),L&&Le(d,a,p,"beforeUpdate"),p&&st(p,!0),v?E(a.dynamicChildren,v,C,p,y,Bn(d,b),x):R||F(a,d,C,null,p,y,Bn(d,b),x,!1),T>0){if(T&16)D(C,d,H,N,p,y,b);else if(T&2&&H.class!==N.class&&i(C,"class",null,N.class,b),T&4&&i(C,"style",H.style,N.style,b),T&8){const z=d.dynamicProps;for(let Q=0;Q{k&&Ee(k,p,d,a),L&&Le(d,a,p,"updated")},y)},E=(a,d,p,y,b,x,R)=>{for(let C=0;C{if(p!==y){if(p!==te)for(const C in p)!bt(C)&&!(C in y)&&i(a,C,p[C],null,R,d.children,b,x,$e);for(const C in y){if(bt(C))continue;const T=y[C],v=p[C];T!==v&&C!=="value"&&i(a,C,v,T,R,d.children,b,x,$e)}"value"in y&&i(a,"value",p.value,y.value,R)}},S=(a,d,p,y,b,x,R,C,T)=>{const v=d.el=a?a.el:l(""),L=d.anchor=a?a.anchor:l("");let{patchFlag:H,dynamicChildren:N,slotScopeIds:k}=d;k&&(C=C?C.concat(k):k),a==null?(s(v,p,y),s(L,p,y),A(d.children||[],p,L,b,x,R,C,T)):H>0&&H&64&&N&&a.dynamicChildren?(E(a.dynamicChildren,N,p,b,x,R,C),(d.key!=null||b&&d===b.subTree)&&Ni(a,d,!0)):F(a,d,p,L,b,x,R,C,T)},W=(a,d,p,y,b,x,R,C,T)=>{d.slotScopeIds=C,a==null?d.shapeFlag&512?b.ctx.activate(d,p,y,R,T):ie(d,p,y,b,x,R,T):le(a,d,T)},ie=(a,d,p,y,b,x,R)=>{const C=a.component=sc(a,y,b);if(On(a)&&(C.ctx.renderer=ht),rc(C),C.asyncDep){if(b&&b.registerDep(C,$),!a.el){const T=C.subTree=ae(ve);q(null,T,d,p)}}else $(C,a,d,p,b,x,R)},le=(a,d,p)=>{const y=d.component=a.component;if(ul(a,d,p))if(y.asyncDep&&!y.asyncResolved){X(y,d,p);return}else y.next=d,sl(y.update),y.effect.dirty=!0,y.update();else d.el=a.el,y.vnode=d},$=(a,d,p,y,b,x,R)=>{const C=()=>{if(a.isMounted){let{next:L,bu:H,u:N,parent:k,vnode:z}=a;{const pt=Fi(a);if(pt){L&&(L.el=z.el,X(a,L,R)),pt.asyncDep.then(()=>{a.isUnmounted||C()});return}}let Q=L,ee;st(a,!1),L?(L.el=z.el,X(a,L,R)):L=z,H&&Hn(H),(ee=L.props&&L.props.onVnodeBeforeUpdate)&&Ee(ee,k,L,z),st(a,!0);const oe=Vn(a),Te=a.subTree;a.subTree=oe,M(Te,oe,h(Te.el),Kt(Te),a,b,x),L.el=oe.el,Q===null&&fl(a,oe.el),N&&ge(N,b),(ee=L.props&&L.props.onVnodeUpdated)&&ge(()=>Ee(ee,k,L,z),b)}else{let L;const{el:H,props:N}=d,{bm:k,m:z,parent:Q}=a,ee=wt(d);if(st(a,!1),k&&Hn(k),!ee&&(L=N&&N.onVnodeBeforeMount)&&Ee(L,Q,d),st(a,!0),H&&$n){const oe=()=>{a.subTree=Vn(a),$n(H,a.subTree,a,b,null)};ee?d.type.__asyncLoader().then(()=>!a.isUnmounted&&oe()):oe()}else{const oe=a.subTree=Vn(a);M(null,oe,p,y,a,b,x),d.el=oe.el}if(z&&ge(z,b),!ee&&(L=N&&N.onVnodeMounted)){const oe=d;ge(()=>Ee(L,Q,oe),b)}(d.shapeFlag&256||Q&&wt(Q.vnode)&&Q.vnode.shapeFlag&256)&&a.a&&ge(a.a,b),a.isMounted=!0,d=p=y=null}},T=a.effect=new ws(C,xe,()=>Is(v),a.scope),v=a.update=()=>{T.dirty&&T.run()};v.id=a.uid,st(a,!0),v()},X=(a,d,p)=>{d.component=a;const y=a.vnode.props;a.vnode=d,a.next=null,Dl(a,d.props,y,p),kl(a,d.children,p),et(),Ys(a),tt()},F=(a,d,p,y,b,x,R,C,T=!1)=>{const v=a&&a.children,L=a?a.shapeFlag:0,H=d.children,{patchFlag:N,shapeFlag:k}=d;if(N>0){if(N&128){kt(v,H,p,y,b,x,R,C,T);return}else if(N&256){Fe(v,H,p,y,b,x,R,C,T);return}}k&8?(L&16&&$e(v,b,x),H!==v&&f(p,H)):L&16?k&16?kt(v,H,p,y,b,x,R,C,T):$e(v,b,x,!0):(L&8&&f(p,""),k&16&&A(H,p,y,b,x,R,C,T))},Fe=(a,d,p,y,b,x,R,C,T)=>{a=a||_t,d=d||_t;const v=a.length,L=d.length,H=Math.min(v,L);let N;for(N=0;NL?$e(a,b,x,!0,!1,H):A(d,p,y,b,x,R,C,T,H)},kt=(a,d,p,y,b,x,R,C,T)=>{let v=0;const L=d.length;let H=a.length-1,N=L-1;for(;v<=H&&v<=N;){const k=a[v],z=d[v]=T?Ge(d[v]):Ae(d[v]);if(lt(k,z))M(k,z,p,null,b,x,R,C,T);else break;v++}for(;v<=H&&v<=N;){const k=a[H],z=d[N]=T?Ge(d[N]):Ae(d[N]);if(lt(k,z))M(k,z,p,null,b,x,R,C,T);else break;H--,N--}if(v>H){if(v<=N){const k=N+1,z=kN)for(;v<=H;)Oe(a[v],b,x,!0),v++;else{const k=v,z=v,Q=new Map;for(v=z;v<=N;v++){const ye=d[v]=T?Ge(d[v]):Ae(d[v]);ye.key!=null&&Q.set(ye.key,v)}let ee,oe=0;const Te=N-z+1;let pt=!1,Vs=0;const St=new Array(Te);for(v=0;v=Te){Oe(ye,b,x,!0);continue}let Ie;if(ye.key!=null)Ie=Q.get(ye.key);else for(ee=z;ee<=N;ee++)if(St[ee-z]===0&<(ye,d[ee])){Ie=ee;break}Ie===void 0?Oe(ye,b,x,!0):(St[Ie-z]=v+1,Ie>=Vs?Vs=Ie:pt=!0,M(ye,d[Ie],p,null,b,x,R,C,T),oe++)}const Ds=pt?Xl(St):_t;for(ee=Ds.length-1,v=Te-1;v>=0;v--){const ye=z+v,Ie=d[ye],Us=ye+1{const{el:x,type:R,transition:C,children:T,shapeFlag:v}=a;if(v&6){nt(a.component.subTree,d,p,y);return}if(v&128){a.suspense.move(d,p,y);return}if(v&64){R.move(a,d,p,ht);return}if(R===me){s(x,d,p);for(let H=0;HC.enter(x),b);else{const{leave:H,delayLeave:N,afterLeave:k}=C,z=()=>s(x,d,p),Q=()=>{H(x,()=>{z(),k&&k()})};N?N(x,z,Q):Q()}else s(x,d,p)},Oe=(a,d,p,y=!1,b=!1)=>{const{type:x,props:R,ref:C,children:T,dynamicChildren:v,shapeFlag:L,patchFlag:H,dirs:N}=a;if(C!=null&&gn(C,null,p,a,!0),L&256){d.ctx.deactivate(a);return}const k=L&1&&N,z=!wt(a);let Q;if(z&&(Q=R&&R.onVnodeBeforeUnmount)&&Ee(Q,d,a),L&6)lo(a.component,p,y);else{if(L&128){a.suspense.unmount(p,y);return}k&&Le(a,null,d,"beforeUnmount"),L&64?a.type.remove(a,d,p,b,ht,y):v&&(x!==me||H>0&&H&64)?$e(v,d,p,!1,!0):(x===me&&H&384||!b&&L&16)&&$e(T,d,p),y&&Hs(a)}(z&&(Q=R&&R.onVnodeUnmounted)||k)&&ge(()=>{Q&&Ee(Q,d,a),k&&Le(a,null,d,"unmounted")},p)},Hs=a=>{const{type:d,el:p,anchor:y,transition:b}=a;if(d===me){oo(p,y);return}if(d===Pt){_(a);return}const x=()=>{r(p),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:R,delayLeave:C}=b,T=()=>R(p,x);C?C(a.el,x,T):T()}else x()},oo=(a,d)=>{let p;for(;a!==d;)p=m(a),r(a),a=p;r(d)},lo=(a,d,p)=>{const{bum:y,scope:b,update:x,subTree:R,um:C}=a;y&&Hn(y),b.stop(),x&&(x.active=!1,Oe(R,a,d,p)),C&&ge(C,d),ge(()=>{a.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},$e=(a,d,p,y=!1,b=!1,x=0)=>{for(let R=x;Ra.shapeFlag&6?Kt(a.component.subTree):a.shapeFlag&128?a.suspense.next():m(a.anchor||a.el);let Nn=!1;const js=(a,d,p)=>{a==null?d._vnode&&Oe(d._vnode,null,null,!0):M(d._vnode||null,a,d,null,null,null,p),Nn||(Nn=!0,Ys(),dn(),Nn=!1),d._vnode=a},ht={p:M,um:Oe,m:nt,r:Hs,mt:ie,mc:A,pc:F,pbc:E,n:Kt,o:e};let Fn,$n;return t&&([Fn,$n]=t(ht)),{render:js,hydrate:Fn,createApp:Hl(js,Fn)}}function Bn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function st({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Mi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ni(e,t,n=!1){const s=e.children,r=t.children;if(U(s)&&U(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Fi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Fi(t)}const Yl=e=>e.__isTeleport,me=Symbol.for("v-fgt"),Ct=Symbol.for("v-txt"),ve=Symbol.for("v-cmt"),Pt=Symbol.for("v-stc"),Mt=[];let Re=null;function $i(e=!1){Mt.push(Re=e?null:[])}function Jl(){Mt.pop(),Re=Mt[Mt.length-1]||null}let Vt=1;function cr(e){Vt+=e}function Hi(e){return e.dynamicChildren=Vt>0?Re||_t:null,Jl(),Vt>0&&Re&&Re.push(e),e}function Ga(e,t,n,s,r,i){return Hi(Di(e,t,n,s,r,i,!0))}function ji(e,t,n,s,r){return Hi(ae(e,t,n,s,r,!0))}function mn(e){return e?e.__v_isVNode===!0:!1}function lt(e,t){return e.type===t.type&&e.key===t.key}const Vi=({key:e})=>e??null,ln=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ne(e)||he(e)||K(e)?{i:de,r:e,k:t,f:!!n}:e:null);function Di(e,t=null,n=null,s=0,r=null,i=e===me?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Vi(t),ref:t&&ln(t),scopeId:An,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(Ms(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ne(n)?8:16),Vt>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const ae=Ql;function Ql(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===fi)&&(e=ve),mn(e)){const l=Ze(e,t,!0);return n&&Ms(l,n),Vt>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag|=-2,l}if(cc(e)&&(e=e.__vccOpts),t){t=Zl(t);let{class:l,style:c}=t;l&&!ne(l)&&(t.class=vs(l)),Z(c)&&(ei(c)&&!U(c)&&(c=re({},c)),t.style=bs(c))}const o=ne(e)?1:dl(e)?128:Yl(e)?64:Z(e)?4:K(e)?2:0;return Di(e,t,n,s,r,o,i,!0)}function Zl(e){return e?ei(e)||Ai(e)?re({},e):e:null}function Ze(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:o}=e,l=t?ec(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Vi(l),ref:t&&t.ref?n&&r?U(r)?r.concat(ln(t)):[r,ln(t)]:ln(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ze(e.ssContent),ssFallback:e.ssFallback&&Ze(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ui(e=" ",t=0){return ae(Ct,null,e,t)}function za(e,t){const n=ae(Pt,null,e);return n.staticCount=t,n}function Xa(e="",t=!1){return t?($i(),ji(ve,null,e)):ae(ve,null,e)}function Ae(e){return e==null||typeof e=="boolean"?ae(ve):U(e)?ae(me,null,e.slice()):typeof e=="object"?Ge(e):ae(Ct,null,String(e))}function Ge(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ze(e)}function Ms(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(U(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Ms(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Ai(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[Ui(t)]):n=8);e.children=t,e.shapeFlag|=n}function ec(...e){const t={};for(let n=0;nce||de;let _n,fs;{const e=Vr(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};_n=t("__VUE_INSTANCE_SETTERS__",n=>ce=n),fs=t("__VUE_SSR_SETTERS__",n=>Mn=n)}const Bt=e=>{const t=ce;return _n(e),e.scope.on(),()=>{e.scope.off(),_n(t)}},ar=()=>{ce&&ce.scope.off(),_n(null)};function Bi(e){return e.vnode.shapeFlag&4}let Mn=!1;function rc(e,t=!1){t&&fs(t);const{props:n,children:s}=e.vnode,r=Bi(e);Vl(e,n,r,t),Bl(e,s);const i=r?ic(e,t):void 0;return t&&fs(!1),i}function ic(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ol);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Ki(e):null,i=Bt(e);et();const o=Ye(s,e,0,[e.props,r]);if(tt(),i(),Fr(o)){if(o.then(ar,ar),t)return o.then(l=>{ur(e,l,t)}).catch(l=>{xn(l,e,0)});e.asyncDep=o}else ur(e,o,t)}else ki(e,t)}function ur(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=ii(t)),ki(e,n)}let fr;function ki(e,t,n){const s=e.type;if(!e.render){if(!t&&fr&&!s.render){const r=s.template||Ls(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,u=re(re({isCustomElement:i,delimiters:l},o),c);s.render=fr(r,u)}}e.render=s.render||xe}{const r=Bt(e);et();try{Ll(e)}finally{tt(),r()}}}const oc={get(e,t){return _e(e,"get",""),e[t]}};function Ki(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,oc),slots:e.slots,emit:e.emit,expose:t}}function Ns(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(ii(on(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in It)return It[n](e)},has(t,n){return n in t||n in It}}))}function lc(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function cc(e){return K(e)&&"__vccOpts"in e}const se=(e,t)=>qo(e,t,Mn);function ds(e,t,n){const s=arguments.length;return s===2?Z(t)&&!U(t)?mn(t)?ae(e,null,[t]):ae(e,t):ae(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&mn(n)&&(n=[n]),ae(e,t,n))}const ac="3.4.25";/** +* @vue/runtime-dom v3.4.25 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const uc="http://www.w3.org/2000/svg",fc="http://www.w3.org/1998/Math/MathML",ze=typeof document<"u"?document:null,dr=ze&&ze.createElement("template"),dc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?ze.createElementNS(uc,e):t==="mathml"?ze.createElementNS(fc,e):ze.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>ze.createTextNode(e),createComment:e=>ze.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ze.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{dr.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=dr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ke="transition",Tt="animation",Dt=Symbol("_vtc"),Wi=(e,{slots:t})=>ds(yl,hc(e),t);Wi.displayName="Transition";const qi={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};Wi.props=re({},mi,qi);const rt=(e,t=[])=>{U(e)?e.forEach(n=>n(...t)):e&&e(...t)},hr=e=>e?U(e)?e.some(t=>t.length>1):e.length>1:!1;function hc(e){const t={};for(const S in e)S in qi||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,I=pc(r),M=I&&I[0],B=I&&I[1],{onBeforeEnter:q,onEnter:G,onEnterCancelled:g,onLeave:_,onLeaveCancelled:P,onBeforeAppear:O=q,onAppear:V=G,onAppearCancelled:A=g}=t,j=(S,W,ie)=>{it(S,W?f:l),it(S,W?u:o),ie&&ie()},E=(S,W)=>{S._isLeaving=!1,it(S,h),it(S,w),it(S,m),W&&W()},D=S=>(W,ie)=>{const le=S?V:G,$=()=>j(W,S,ie);rt(le,[W,$]),pr(()=>{it(W,S?c:i),Ke(W,S?f:l),hr(le)||gr(W,s,M,$)})};return re(t,{onBeforeEnter(S){rt(q,[S]),Ke(S,i),Ke(S,o)},onBeforeAppear(S){rt(O,[S]),Ke(S,c),Ke(S,u)},onEnter:D(!1),onAppear:D(!0),onLeave(S,W){S._isLeaving=!0;const ie=()=>E(S,W);Ke(S,h),Ke(S,m),_c(),pr(()=>{S._isLeaving&&(it(S,h),Ke(S,w),hr(_)||gr(S,s,B,ie))}),rt(_,[S,ie])},onEnterCancelled(S){j(S,!1),rt(g,[S])},onAppearCancelled(S){j(S,!0),rt(A,[S])},onLeaveCancelled(S){E(S),rt(P,[S])}})}function pc(e){if(e==null)return null;if(Z(e))return[kn(e.enter),kn(e.leave)];{const t=kn(e);return[t,t]}}function kn(e){return go(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Dt]||(e[Dt]=new Set)).add(t)}function it(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Dt];n&&(n.delete(t),n.size||(e[Dt]=void 0))}function pr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let gc=0;function gr(e,t,n,s){const r=e._endId=++gc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=mc(e,t);if(!o)return s();const u=o+"end";let f=0;const h=()=>{e.removeEventListener(u,m),i()},m=w=>{w.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[I]||"").split(", "),r=s(`${ke}Delay`),i=s(`${ke}Duration`),o=mr(r,i),l=s(`${Tt}Delay`),c=s(`${Tt}Duration`),u=mr(l,c);let f=null,h=0,m=0;t===ke?o>0&&(f=ke,h=o,m=i.length):t===Tt?u>0&&(f=Tt,h=u,m=c.length):(h=Math.max(o,u),f=h>0?o>u?ke:Tt:null,m=f?f===ke?i.length:c.length:0);const w=f===ke&&/\b(transform|all)(,|$)/.test(s(`${ke}Property`).toString());return{type:f,timeout:h,propCount:m,hasTransform:w}}function mr(e,t){for(;e.length_r(n)+_r(e[s])))}function _r(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function _c(){return document.body.offsetHeight}function yc(e,t,n){const s=e[Dt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const yr=Symbol("_vod"),bc=Symbol("_vsh"),vc=Symbol(""),wc=/(^|;)\s*display\s*:/;function Ec(e,t,n){const s=e.style,r=ne(n);let i=!1;if(n&&!r){if(t)if(ne(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&cn(s,l,"")}else for(const o in t)n[o]==null&&cn(s,o,"");for(const o in n)o==="display"&&(i=!0),cn(s,o,n[o])}else if(r){if(t!==n){const o=s[vc];o&&(n+=";"+o),s.cssText=n,i=wc.test(n)}}else t&&e.removeAttribute("style");yr in e&&(e[yr]=i?s.display:"",e[bc]&&(s.display="none"))}const br=/\s*!important$/;function cn(e,t,n){if(U(n))n.forEach(s=>cn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Cc(e,t);br.test(n)?e.setProperty(dt(s),n.replace(br,""),"important"):e[s]=n}}const vr=["Webkit","Moz","ms"],Kn={};function Cc(e,t){const n=Kn[t];if(n)return n;let s=Me(t);if(s!=="filter"&&s in e)return Kn[t]=s;s=vn(s);for(let r=0;rWn||(Ic.then(()=>Wn=0),Wn=Date.now());function Pc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Se(Mc(s,n.value),t,5,[s])};return n.value=e,n.attached=Lc(),n}function Mc(e,t){if(U(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const xr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Nc=(e,t,n,s,r,i,o,l,c)=>{const u=r==="svg";t==="class"?yc(e,s,u):t==="style"?Ec(e,n,s):Ut(t)?ms(t)||Rc(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Fc(e,t,s,u))?Sc(e,t,s,i,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),xc(e,t,s,u))};function Fc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&xr(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return xr(t)&&ne(n)?!1:t in e}const $c=["ctrl","shift","alt","meta"],Hc={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)=>$c.some(n=>e[`${n}Key`]&&!t.includes(n))},Ya=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=dt(r.key);if(t.some(o=>o===i||jc[o]===i))return e(r)})},Vc=re({patchProp:Nc},dc);let qn,Sr=!1;function Dc(){return qn=Sr?qn:Gl(Vc),Sr=!0,qn}const Qa=(...e)=>{const t=Dc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Bc(s);if(r)return n(r,!0,Uc(r))},t};function Uc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Bc(e){return ne(e)?document.querySelector(e):e}const Za=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},kc="modulepreload",Kc=function(e){return"/"+e},Tr={},eu=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),o=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));r=Promise.all(n.map(l=>{if(l=Kc(l),l in Tr)return;Tr[l]=!0;const c=l.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":kc,c||(f.as="script",f.crossOrigin=""),f.href=l,o&&f.setAttribute("nonce",o),document.head.appendChild(f),c)return new Promise((h,m)=>{f.addEventListener("load",h),f.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${l}`)))})}))}return r.then(()=>t()).catch(i=>{const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i})},Wc=window.__VP_SITE_DATA__;function Fs(e){return Br()?(xo(e),!0):!1}function Je(e){return typeof e=="function"?e():ri(e)}const Gi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const qc=Object.prototype.toString,Gc=e=>qc.call(e)==="[object Object]",Nt=()=>{},hs=zc();function zc(){var e,t;return Gi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Xc(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const zi=e=>e();function Yc(e=zi){const t=fe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:Cn(t),pause:n,resume:s,eventFilter:r}}function Jc(e){return Pn()}function Xi(...e){if(e.length!==1)return Zo(...e);const t=e[0];return typeof t=="function"?Cn(Yo(()=>({get:t,set:Nt}))):fe(t)}function Qc(e,t,n={}){const{eventFilter:s=zi,...r}=n;return je(e,Xc(s,t),r)}function Zc(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Yc(s);return{stop:Qc(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function $s(e,t=!0,n){Jc()?xt(e,n):t?e():Sn(e)}function mt(e){var t;const n=Je(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Ne=Gi?window:void 0;function Ve(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=Ne):[t,n,s,r]=e,!t)return Nt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(f=>f()),i.length=0},l=(f,h,m,w)=>(f.addEventListener(h,m,w),()=>f.removeEventListener(h,m,w)),c=je(()=>[mt(t),Je(r)],([f,h])=>{if(o(),!f)return;const m=Gc(h)?{...h}:h;i.push(...n.flatMap(w=>s.map(I=>l(f,w,I,m))))},{immediate:!0,flush:"post"}),u=()=>{c(),o()};return Fs(u),u}let Ar=!1;function tu(e,t,n={}){const{window:s=Ne,ignore:r=[],capture:i=!0,detectIframe:o=!1}=n;if(!s)return Nt;hs&&!Ar&&(Ar=!0,Array.from(s.document.body.children).forEach(m=>m.addEventListener("click",Nt)),s.document.documentElement.addEventListener("click",Nt));let l=!0;const c=m=>r.some(w=>{if(typeof w=="string")return Array.from(s.document.querySelectorAll(w)).some(I=>I===m.target||m.composedPath().includes(I));{const I=mt(w);return I&&(m.target===I||m.composedPath().includes(I))}}),f=[Ve(s,"click",m=>{const w=mt(e);if(!(!w||w===m.target||m.composedPath().includes(w))){if(m.detail===0&&(l=!c(m)),!l){l=!0;return}t(m)}},{passive:!0,capture:i}),Ve(s,"pointerdown",m=>{const w=mt(e);l=!c(m)&&!!(w&&!m.composedPath().includes(w))},{passive:!0}),o&&Ve(s,"blur",m=>{setTimeout(()=>{var w;const I=mt(e);((w=s.document.activeElement)==null?void 0:w.tagName)==="IFRAME"&&!(I!=null&&I.contains(s.document.activeElement))&&t(m)},0)})].filter(Boolean);return()=>f.forEach(m=>m())}function ea(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function nu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Ne,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=ea(t);return Ve(r,i,f=>{f.repeat&&Je(l)||c(f)&&n(f)},o)}function ta(){const e=fe(!1),t=Pn();return t&&xt(()=>{e.value=!0},t),e}function na(e){const t=ta();return se(()=>(t.value,!!e()))}function Yi(e,t={}){const{window:n=Ne}=t,s=na(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=fe(!1),o=u=>{i.value=u.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=pi(()=>{s.value&&(l(),r=n.matchMedia(Je(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return Fs(()=>{c(),l(),r=void 0}),i}const en=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},tn="__vueuse_ssr_handlers__",sa=ra();function ra(){return tn in en||(en[tn]=en[tn]||{}),en[tn]}function Ji(e,t){return sa[e]||t}function ia(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const oa={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Rr="vueuse-storage";function la(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:h=Ne,eventFilter:m,onError:w=E=>{console.error(E)},initOnMounted:I}=s,M=(f?ni:fe)(typeof t=="function"?t():t);if(!n)try{n=Ji("getDefaultStorage",()=>{var E;return(E=Ne)==null?void 0:E.localStorage})()}catch(E){w(E)}if(!n)return M;const B=Je(t),q=ia(B),G=(r=s.serializer)!=null?r:oa[q],{pause:g,resume:_}=Zc(M,()=>O(M.value),{flush:i,deep:o,eventFilter:m});h&&l&&$s(()=>{Ve(h,"storage",A),Ve(h,Rr,j),I&&A()}),I||A();function P(E,D){h&&h.dispatchEvent(new CustomEvent(Rr,{detail:{key:e,oldValue:E,newValue:D,storageArea:n}}))}function O(E){try{const D=n.getItem(e);if(E==null)P(D,null),n.removeItem(e);else{const S=G.write(E);D!==S&&(n.setItem(e,S),P(D,S))}}catch(D){w(D)}}function V(E){const D=E?E.newValue:n.getItem(e);if(D==null)return c&&B!=null&&n.setItem(e,G.write(B)),B;if(!E&&u){const S=G.read(D);return typeof u=="function"?u(S,B):q==="object"&&!Array.isArray(S)?{...B,...S}:S}else return typeof D!="string"?D:G.read(D)}function A(E){if(!(E&&E.storageArea!==n)){if(E&&E.key==null){M.value=B;return}if(!(E&&E.key!==e)){g();try{(E==null?void 0:E.newValue)!==G.write(M.value)&&(M.value=V(E))}catch(D){w(D)}finally{E?Sn(_):_()}}}}function j(E){A(E.detail)}return M}function Qi(e){return Yi("(prefers-color-scheme: dark)",e)}function ca(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=Ne,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=Qi({window:r}),w=se(()=>m.value?"dark":"light"),I=c||(o==null?Xi(s):la(o,s,i,{window:r,listenToStorageChanges:l})),M=se(()=>I.value==="auto"?w.value:I.value),B=Ji("updateHTMLAttrs",(_,P,O)=>{const V=typeof _=="string"?r==null?void 0:r.document.querySelector(_):mt(_);if(!V)return;let A;if(f&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),r.document.head.appendChild(A)),P==="class"){const j=O.split(/\s/g);Object.values(h).flatMap(E=>(E||"").split(/\s/g)).filter(Boolean).forEach(E=>{j.includes(E)?V.classList.add(E):V.classList.remove(E)})}else V.setAttribute(P,O);f&&(r.getComputedStyle(A).opacity,document.head.removeChild(A))});function q(_){var P;B(t,n,(P=h[_])!=null?P:_)}function G(_){e.onChanged?e.onChanged(_,q):q(_)}je(M,G,{flush:"post",immediate:!0}),$s(()=>G(M.value));const g=se({get(){return u?I.value:M.value},set(_){I.value=_}});try{return Object.assign(g,{store:I,system:w,state:M})}catch{return g}}function aa(e={}){const{valueDark:t="dark",valueLight:n="",window:s=Ne}=e,r=ca({...e,onChanged:(l,c)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=se(()=>r.system?r.system.value:Qi({window:s}).value?"dark":"light");return se({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function Gn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Zi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const nn=new WeakMap;function su(e,t=!1){const n=fe(t);let s=null;je(Xi(e),o=>{const l=Gn(Je(o));if(l){const c=l;nn.get(c)||nn.set(c,c.style.overflow),n.value&&(c.style.overflow="hidden")}},{immediate:!0});const r=()=>{const o=Gn(Je(e));!o||n.value||(hs&&(s=Ve(o,"touchmove",l=>{ua(l)},{passive:!1})),o.style.overflow="hidden",n.value=!0)},i=()=>{var o;const l=Gn(Je(e));!l||!n.value||(hs&&(s==null||s()),l.style.overflow=(o=nn.get(l))!=null?o:"",nn.delete(l),n.value=!1)};return Fs(i),se({get(){return n.value},set(o){o?r():i()}})}function ru(e={}){const{window:t=Ne,behavior:n="auto"}=e;if(!t)return{x:fe(0),y:fe(0)};const s=fe(t.scrollX),r=fe(t.scrollY),i=se({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=se({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Ve(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function iu(e={}){const{window:t=Ne,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0}=e,o=fe(n),l=fe(s),c=()=>{t&&(i?(o.value=t.innerWidth,l.value=t.innerHeight):(o.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(c(),$s(c),Ve("resize",c,{passive:!0}),r){const u=Yi("(orientation: portrait)");je(u,()=>c())}return{width:o,height:l}}var zn={BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},Xn={};const eo=/^(?:[a-z]+:|\/\/)/i,fa="vitepress-theme-appearance",da=/#.*$/,ha=/[?#].*$/,pa=/(?:(^|\/)index)?\.(?:md|html)$/,Ce=typeof document<"u",to={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function ga(e,t,n=!1){if(t===void 0)return!1;if(e=Or(`/${e}`),n)return new RegExp(t).test(e);if(Or(t)!==e)return!1;const s=t.match(da);return s?(Ce?location.hash:"")===s[0]:!0}function Or(e){return decodeURI(e).replace(ha,"").replace(pa,"$1")}function ma(e){return eo.test(e)}function _a(e,t){var s,r,i,o,l,c,u;const n=Object.keys(e.locales).find(f=>f!=="root"&&!ma(f)&&ga(t,`/${f}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:so(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function no(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=ya(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function ya(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ba(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function so(e,t){return[...e.filter(n=>!ba(t,n)),...t]}const va=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,wa=/^[a-z]:/i;function Ir(e){const t=wa.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(va,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Yn=new Set;function Ea(e){if(Yn.size===0){const n=typeof process=="object"&&(Xn==null?void 0:Xn.VITE_EXTRA_EXTENSIONS)||(zn==null?void 0:zn.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Yn.add(s))}const t=e.split(".").pop();return t==null||!Yn.has(t.toLowerCase())}const Ca=Symbol(),ut=ni(Wc);function ou(e){const t=se(()=>_a(ut.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?fe(!0):n?aa({storageKey:fa,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):fe(!1);return{site:t,theme:se(()=>t.value.themeConfig),page:se(()=>e.data),frontmatter:se(()=>e.data.frontmatter),params:se(()=>e.data.params),lang:se(()=>t.value.lang),dir:se(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:se(()=>t.value.localeIndex||"root"),title:se(()=>no(t.value,e.data)),description:se(()=>e.data.description||t.value.description),isDark:s}}function xa(){const e=Et(Ca);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Sa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Lr(e){return eo.test(e)||!e.startsWith("/")?e:Sa(ut.value.base,e)}function Ta(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ce){const n="/";t=Ir(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${Ir(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let an=[];function lu(e){an.push(e),Ln(()=>{an=an.filter(t=>t!==e)})}function Aa(){let e=ut.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Pr(e,n);else if(Array.isArray(e))for(const s of e){const r=Pr(s,n);if(r){t=r;break}}return t}function Pr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Ra=Symbol(),ps="http://a.com",Oa=()=>({path:"/",component:null,data:to});function cu(e,t){const n=En(Oa()),s={route:n,go:r};async function r(l=Ce?location.href:"/"){var c,u;if(l=Jn(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1){if(Ce){const f=new URL(location.href);l!==Jn(f.href)&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",l),new URL(l,ps).hash!==f.hash&&window.dispatchEvent(new Event("hashchange")))}await o(l),await((u=s.onAfterRouteChanged)==null?void 0:u.call(s,l))}}let i=null;async function o(l,c=0,u=!1){var m;if(await((m=s.onBeforePageLoad)==null?void 0:m.call(s,l))===!1)return;const f=new URL(l,ps),h=i=f.pathname;try{let w=await e(h);if(!w)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:I,__pageData:M}=w;if(!I)throw new Error(`Invalid route component: ${I}`);n.path=Ce?h:Lr(h),n.component=on(I),n.data=on(M),Ce&&Sn(()=>{let B=ut.value.base+M.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ut.value.cleanUrls&&!B.endsWith("/")&&(B+=".html"),B!==f.pathname&&(f.pathname=B,l=B+f.search+f.hash,history.replaceState(null,"",l)),f.hash&&!c){let q=null;try{q=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(G){console.warn(G)}if(q){Mr(q,f.hash);return}}window.scrollTo(0,c)})}}catch(w){if(!/fetch|Page not found/.test(w.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(w),!u)try{const I=await fetch(ut.value.base+"hashmap.json");window.__VP_HASH_MAP__=await I.json(),await o(l,c,!0);return}catch{}i===h&&(i=null,n.path=Ce?h:Lr(h),n.component=t?on(t):null,n.data=to)}}return Ce&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const u=l.target.closest("a");if(u&&!u.closest(".vp-raw")&&(u instanceof SVGElement||!u.download)){const{target:f}=u,{href:h,origin:m,pathname:w,hash:I,search:M}=new URL(u.href instanceof SVGAnimatedString?u.href.animVal:u.href,u.baseURI),B=new URL(location.href);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!f&&m===B.origin&&Ea(w)&&(l.preventDefault(),w===B.pathname&&M===B.search?(I!==B.hash&&(history.pushState(null,"",h),window.dispatchEvent(new Event("hashchange"))),I?Mr(u,I,u.classList.contains("header-anchor")):window.scrollTo(0,0)):r(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;await o(Jn(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Ia(){const e=Et(Ra);if(!e)throw new Error("useRouter() is called without provider.");return e}function ro(){return Ia().route}function Mr(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-Aa()+i;requestAnimationFrame(r)}}function Jn(e){const t=new URL(e,ps);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ut.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const Qn=()=>an.forEach(e=>e()),au=bi({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=ro(),{site:n}=xa();return()=>ds(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?ds(t.component,{onVnodeMounted:Qn,onVnodeUpdated:Qn,onVnodeUnmounted:Qn}):"404 Page Not Found"])}}),uu=bi({setup(e,{slots:t}){const n=fe(!1);return xt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function fu(){Ce&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(u=>u.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function du(){if(Ce){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let u=c.textContent||"";o&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),La(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function La(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function hu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=Zn(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const o=i.map(Zn);s.forEach((l,c)=>{const u=o.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));u!==-1?delete o[u]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};pi(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=no(o,i);u!==document.title&&(document.title=u);const f=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):Zn(["meta",{name:"description",content:f}]),r(so(o.head,Ma(c)))})}function Zn([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Pa(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Ma(e){return e.filter(t=>!Pa(t))}const es=new Set,io=()=>document.createElement("link"),Na=e=>{const t=io();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Fa=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let sn;const $a=Ce&&(sn=io())&&sn.relList&&sn.relList.supports&&sn.relList.supports("prefetch")?Na:Fa;function pu(){if(!Ce||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!es.has(c)){es.add(c);const u=Ta(c);u&&$a(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):es.add(l))})})};xt(s);const r=ro();je(()=>r.path,s),Ln(()=>{n&&n.disconnect()})}export{Wa as $,Ln as A,Ba as B,xl as C,Aa as D,Da as E,me as F,ka as G,ni as H,lu as I,ae as J,Ua as K,eo as L,ro as M,ec as N,Et as O,iu as P,bs as Q,tu as R,nu as S,Wi as T,Sn as U,ru as V,Cn as W,su as X,jl as Y,Ja as Z,Za as _,Ui as a,Ya as a0,qa as a1,za as a2,hu as a3,Ra as a4,ou as a5,Ca as a6,au as a7,uu as a8,ut as a9,Qa as aa,cu as ab,Ta as ac,eu as ad,pu as ae,du as af,fu as ag,ds as ah,ji as b,Ga as c,bi as d,Xa as e,Ea as f,Lr as g,fe as h,ma as i,Ce as j,se as k,xt as l,Di as m,vs as n,$i as o,ri as p,ja as q,Ka as r,Va as s,Ha as t,xa as u,ga as v,ll as w,Yi as x,je as y,pi as z}; diff --git a/assets/chunks/theme.DZC8u-4H.js b/assets/chunks/theme.df5FdJ9M.js similarity index 99% rename from assets/chunks/theme.DZC8u-4H.js rename to assets/chunks/theme.df5FdJ9M.js index 6e4a552..1e48eb6 100644 --- a/assets/chunks/theme.DZC8u-4H.js +++ b/assets/chunks/theme.df5FdJ9M.js @@ -1 +1 @@ -import{d as _,o as a,c,r as l,n as T,a as F,t as S,b,w as d,T as de,e as f,_ as k,u as Oe,i as Ue,f as Ge,g as ve,h as w,j as J,k as $,l as z,m as v,p as i,q as C,s as H,v as j,x as ie,y as q,z as x,A as pe,B as ye,C as je,D as ze,E as W,F as M,G as E,H as Pe,I as ee,J as m,K as R,L as Ve,M as te,N as Q,O as oe,P as qe,Q as Le,R as We,S as Ke,U as Re,V as Se,W as Je,X as we,Y as Ie,Z as Ye,$ as Qe,a0 as Xe,a1 as Ze}from"./framework.NdlCD-r1.js";const xe=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:T(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[F(S(e.text),1)])],2))}}),et={key:0,class:"VPBackdrop"},tt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),b(de,{name:"fade"},{default:d(()=>[e.show?(a(),c("div",et)):f("",!0)]),_:1}))}}),ot=k(tt,[["__scopeId","data-v-54a304ca"]]),V=Oe;function st(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function he(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ue(o)||o.startsWith("#")||!n.startsWith("http")||!Ge(e))return o;const{site:r}=V(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${s}`);return ve(u)}const fe=w(J?location.hash:"");J&&window.addEventListener("hashchange",()=>{fe.value=location.hash});function Y({removeCurrent:o=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:s,page:n,theme:r}=V(),u=$(()=>{var p,g;return{label:(p=t.value.locales[s.value])==null?void 0:p.label,link:((g=t.value.locales[s.value])==null?void 0:g.link)||(s.value==="root"?"/":`/${s.value}/`)}});return{localeLinks:$(()=>Object.entries(t.value.locales).flatMap(([p,g])=>o&&u.value.label===g.label?[]:{text:g.label,link:nt(g.link||(p==="root"?"/":`/${p}/`),r.value.i18nRouting!==!1&&e,n.value.relativePath.slice(u.value.link.length-1),!t.value.cleanUrls)+fe.value})),currentLang:u}}function nt(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const at=o=>(C("data-v-b9c0c15a"),o=o(),H(),o),rt={class:"NotFound"},it={class:"code"},lt={class:"title"},ct=at(()=>v("div",{class:"divider"},null,-1)),ut={class:"quote"},dt={class:"action"},vt=["href","aria-label"],pt=_({__name:"NotFound",setup(o){const{site:e,theme:t}=V(),{localeLinks:s}=Y({removeCurrent:!1}),n=w("/");return z(()=>{var u;const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");s.value.length&&(n.value=((u=s.value.find(({link:h})=>h.startsWith(r)))==null?void 0:u.link)||s.value[0].link)}),(r,u)=>{var h,p,g,y,P;return a(),c("div",rt,[v("p",it,S(((h=i(t).notFound)==null?void 0:h.code)??"404"),1),v("h1",lt,S(((p=i(t).notFound)==null?void 0:p.title)??"PAGE NOT FOUND"),1),ct,v("blockquote",ut,S(((g=i(t).notFound)==null?void 0:g.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",dt,[v("a",{class:"link",href:i(ve)(n.value),"aria-label":((y=i(t).notFound)==null?void 0:y.linkLabel)??"go to home"},S(((P=i(t).notFound)==null?void 0:P.linkText)??"Take me home"),9,vt)])])}}}),ht=k(pt,[["__scopeId","data-v-b9c0c15a"]]);function Te(o,e){if(Array.isArray(o))return X(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,r)=>r.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?X(s):X(s.items,s.base)}function ft(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function _t(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):j(o,e.link)?!0:e.items?ce(o,e.items):!1}function X(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=X(s.items,n)),s})}function O(){const{frontmatter:o,page:e,theme:t}=V(),s=ie("(min-width: 960px)"),n=w(!1),r=$(()=>{const B=t.value.sidebar,L=e.value.relativePath;return B?Te(B,L):[]}),u=w(r.value);q(r,(B,L)=>{JSON.stringify(B)!==JSON.stringify(L)&&(u.value=r.value)});const h=$(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),p=$(()=>g?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),g=$(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),y=$(()=>h.value&&s.value),P=$(()=>h.value?ft(u.value):[]);function I(){n.value=!0}function N(){n.value=!1}function A(){n.value?N():I()}return{isOpen:n,sidebar:u,sidebarGroups:P,hasSidebar:h,hasAside:g,leftAside:p,isSidebarEnabled:y,open:I,close:N,toggle:A}}function mt(o,e){let t;x(()=>{t=o.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function kt(o){const{page:e}=V(),t=w(!1),s=$(()=>o.value.collapsed!=null),n=$(()=>!!o.value.link),r=w(!1),u=()=>{r.value=j(e.value.relativePath,o.value.link)};q([e,o,fe],u),z(u);const h=$(()=>r.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),p=$(()=>!!(o.value.items&&o.value.items.length));x(()=>{t.value=!!(s.value&&o.value.collapsed)}),ye(()=>{(r.value||h.value)&&(t.value=!1)});function g(){s.value&&(t.value=!t.value)}return{collapsed:t,collapsible:s,isLink:n,isActiveLink:r,hasActiveLink:h,hasChildren:p,toggle:g}}function bt(){const{hasSidebar:o}=O(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:$(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ne(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:$t(t),link:"#"+t.id,level:s}});return gt(e,o)}function $t(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function gt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=s&&u.level<=n),ue.length=0;for(const{element:u,link:h}of o)ue.push({element:u,link:h});const r=[];e:for(let u=0;u=0;p--){const g=o[p];if(g.level{requestAnimationFrame(r),window.addEventListener("scroll",s)}),je(()=>{u(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function r(){if(!t.value)return;const h=window.scrollY,p=window.innerHeight,g=document.body.offsetHeight,y=Math.abs(h+p-g)<1,P=ue.map(({element:N,link:A})=>({link:A,top:Pt(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!P.length){u(null);return}if(h<1){u(null);return}if(y){u(P[P.length-1].link);return}let I=null;for(const{link:N,top:A}of P){if(A>h+ze()+4)break;I=N}u(I)}function u(h){n&&n.classList.remove("active"),h==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const p=n;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Pt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Vt=["href","title"],Lt=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=W("VPDocOutlineItem",!0);return a(),c("ul",{class:T(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,E(t.headers,({children:r,link:u,title:h})=>(a(),c("li",null,[v("a",{class:"outline-link",href:u,onClick:e,title:h},S(h),9,Vt),r!=null&&r.length?(a(),b(n,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Me=k(Lt,[["__scopeId","data-v-53c99d69"]]),St=o=>(C("data-v-6b52fe58"),o=o(),H(),o),wt={class:"content"},It={class:"outline-title",role:"heading","aria-level":"2"},Tt={"aria-labelledby":"doc-outline-aria-label"},Nt=St(()=>v("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Mt=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=V(),s=Pe([]);ee(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=w(),r=w();return yt(n,r),(u,h)=>(a(),c("div",{class:T(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n,role:"navigation"},[v("div",wt,[v("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),v("div",It,S(i(Ne)(i(t))),1),v("nav",Tt,[Nt,m(Me,{headers:s.value,root:!0},null,8,["headers"])])])],2))}}),At=k(Mt,[["__scopeId","data-v-6b52fe58"]]),Bt={class:"VPDocAsideCarbonAds"},Ct=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),c("div",Bt,[m(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Ht=o=>(C("data-v-cb998dce"),o=o(),H(),o),Et={class:"VPDocAside"},Ft=Ht(()=>v("div",{class:"spacer"},null,-1)),Dt=_({__name:"VPDocAside",setup(o){const{theme:e}=V();return(t,s)=>(a(),c("div",Et,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(At),l(t.$slots,"aside-outline-after",{},void 0,!0),Ft,l(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),b(Ct,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ot=k(Dt,[["__scopeId","data-v-cb998dce"]]);function Ut(){const{theme:o,page:e}=V();return $(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Gt(){const{page:o,theme:e,frontmatter:t}=V();return $(()=>{var g,y,P,I,N,A,B,L;const s=Te(e.value.sidebar,o.value.relativePath),n=_t(s),r=jt(n,U=>U.link.replace(/[?#].*$/,"")),u=r.findIndex(U=>j(o.value.relativePath,U.link)),h=((g=e.value.docFooter)==null?void 0:g.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((y=e.value.docFooter)==null?void 0:y.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((P=r[u-1])==null?void 0:P.docFooterText)??((I=r[u-1])==null?void 0:I.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((N=r[u-1])==null?void 0:N.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=r[u+1])==null?void 0:A.docFooterText)??((B=r[u+1])==null?void 0:B.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((L=r[u+1])==null?void 0:L.link)}}})}function jt(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=$(()=>e.tag??(e.href?"a":"span")),s=$(()=>e.href&&Ve.test(e.href));return(n,r)=>(a(),b(R(t.value),{class:T(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?i(he)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:d(()=>[l(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),zt={class:"VPLastUpdated"},qt=["datetime"],Wt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,frontmatter:s,lang:n}=V(),r=$(()=>new Date(s.value.lastUpdated??t.value.lastUpdated)),u=$(()=>r.value.toISOString()),h=w("");return z(()=>{x(()=>{var p,g,y;h.value=new Intl.DateTimeFormat((g=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&g.forceLocale?n.value:void 0,((y=e.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(p,g)=>{var y;return a(),c("p",zt,[F(S(((y=i(e).lastUpdated)==null?void 0:y.text)||i(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:u.value},S(h.value),9,qt)])}}}),Kt=k(Wt,[["__scopeId","data-v-19a7ae4e"]]),Rt=o=>(C("data-v-b77f9094"),o=o(),H(),o),Jt={key:0,class:"VPDocFooter"},Yt={key:0,class:"edit-info"},Qt={key:0,class:"edit-link"},Xt=Rt(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Zt={key:1,class:"last-updated"},xt={key:1,class:"prev-next"},eo={class:"pager"},to=["innerHTML"],oo=["innerHTML"],so={class:"pager"},no=["innerHTML"],ao=["innerHTML"],ro=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=V(),n=Ut(),r=Gt(),u=$(()=>e.value.editLink&&s.value.editLink!==!1),h=$(()=>t.value.lastUpdated&&s.value.lastUpdated!==!1),p=$(()=>u.value||h.value||r.value.prev||r.value.next);return(g,y)=>{var P,I,N,A;return p.value?(a(),c("footer",Jt,[l(g.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Yt,[u.value?(a(),c("div",Qt,[m(D,{class:"edit-link-button",href:i(n).url,"no-icon":!0},{default:d(()=>[Xt,F(" "+S(i(n).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",Zt,[m(Kt)])):f("",!0)])):f("",!0),(P=i(r).prev)!=null&&P.link||(I=i(r).next)!=null&&I.link?(a(),c("nav",xt,[v("div",eo,[(N=i(r).prev)!=null&&N.link?(a(),b(D,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:d(()=>{var B;return[v("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,to),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,oo)]}),_:1},8,["href"])):f("",!0)]),v("div",so,[(A=i(r).next)!=null&&A.link?(a(),b(D,{key:0,class:"pager-link next",href:i(r).next.link},{default:d(()=>{var B;return[v("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.next)||"Next page"},null,8,no),v("span",{class:"title",innerHTML:i(r).next.text},null,8,ao)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),io=k(ro,[["__scopeId","data-v-b77f9094"]]),lo=o=>(C("data-v-e6f2a212"),o=o(),H(),o),co={class:"container"},uo=lo(()=>v("div",{class:"aside-curtain"},null,-1)),vo={class:"aside-container"},po={class:"aside-content"},ho={class:"content"},fo={class:"content-container"},_o={class:"main"},mo=_({__name:"VPDoc",setup(o){const{theme:e}=V(),t=te(),{hasSidebar:s,hasAside:n,leftAside:r}=O(),u=$(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,p)=>{const g=W("Content");return a(),c("div",{class:T(["VPDoc",{"has-sidebar":i(s),"has-aside":i(n)}])},[l(h.$slots,"doc-top",{},void 0,!0),v("div",co,[i(n)?(a(),c("div",{key:0,class:T(["aside",{"left-aside":i(r)}])},[uo,v("div",vo,[v("div",po,[m(Ot,null,{"aside-top":d(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),v("div",ho,[v("div",fo,[l(h.$slots,"doc-before",{},void 0,!0),v("main",_o,[m(g,{class:T(["vp-doc",[u.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(io,null,{"doc-footer-before":d(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),ko=k(mo,[["__scopeId","data-v-e6f2a212"]]),bo=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=$(()=>e.href&&Ve.test(e.href)),s=$(()=>e.tag||e.href?"a":"button");return(n,r)=>(a(),b(R(s.value),{class:T(["VPButton",[n.size,n.theme]]),href:n.href?i(he)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:d(()=>[F(S(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),$o=k(bo,[["__scopeId","data-v-c9cf0e3c"]]),go=["src","alt"],yo=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=W("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",Q({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,go)):(a(),c(M,{key:1},[m(s,Q({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(s,Q({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),Z=k(yo,[["__scopeId","data-v-ab19afbb"]]),Po=o=>(C("data-v-b10c5094"),o=o(),H(),o),Vo={class:"container"},Lo={class:"main"},So={key:0,class:"name"},wo=["innerHTML"],Io=["innerHTML"],To=["innerHTML"],No={key:0,class:"actions"},Mo={key:0,class:"image"},Ao={class:"image-container"},Bo=Po(()=>v("div",{class:"image-bg"},null,-1)),Co=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=oe("hero-image-slot-exists");return(t,s)=>(a(),c("div",{class:T(["VPHero",{"has-image":t.image||i(e)}])},[v("div",Vo,[v("div",Lo,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",So,[v("span",{innerHTML:t.name,class:"clip"},null,8,wo)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,Io)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,To)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",No,[(a(!0),c(M,null,E(t.actions,n=>(a(),c("div",{key:n.link,class:"action"},[m($o,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),c("div",Mo,[v("div",Ao,[Bo,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),b(Z,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Ho=k(Co,[["__scopeId","data-v-b10c5094"]]),Eo=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=V();return(t,s)=>i(e).hero?(a(),b(Ho,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Fo=o=>(C("data-v-bd37d1a2"),o=o(),H(),o),Do={class:"box"},Oo={key:0,class:"icon"},Uo=["innerHTML"],Go=["innerHTML"],jo=["innerHTML"],zo={key:4,class:"link-text"},qo={class:"link-text-value"},Wo=Fo(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Ko=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),b(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:d(()=>[v("article",Do,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Oo,[m(Z,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),b(Z,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Uo)):f("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Go),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,jo)):f("",!0),e.linkText?(a(),c("div",zo,[v("p",qo,[F(S(e.linkText)+" ",1),Wo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Ro=k(Ko,[["__scopeId","data-v-bd37d1a2"]]),Jo={key:0,class:"VPFeatures"},Yo={class:"container"},Qo={class:"items"},Xo=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=$(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),c("div",Jo,[v("div",Yo,[v("div",Qo,[(a(!0),c(M,null,E(s.features,r=>(a(),c("div",{key:r.title,class:T(["item",[t.value]])},[m(Ro,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),Zo=k(Xo,[["__scopeId","data-v-b1eea84a"]]),xo=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=V();return(t,s)=>i(e).features?(a(),b(Zo,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):f("",!0)}}),es=_({__name:"VPHomeContent",setup(o){const{width:e}=qe({includeScrollbar:!1});return(t,s)=>(a(),c("div",{class:"vp-doc container",style:Le(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),ts=k(es,[["__scopeId","data-v-d59ac166"]]),os={class:"VPHome"},ss=_({__name:"VPHome",setup(o){const{frontmatter:e}=V();return(t,s)=>{const n=W("Content");return a(),c("div",os,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Eo,null,{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(xo),l(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),b(ts,{key:0},{default:d(()=>[m(n)]),_:1})):(a(),b(n,{key:1}))])}}}),ns=k(ss,[["__scopeId","data-v-07b1ad08"]]),as={},rs={class:"VPPage"};function is(o,e){const t=W("Content");return a(),c("div",rs,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const ls=k(as,[["render",is]]),cs=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=V(),{hasSidebar:s}=O();return(n,r)=>(a(),c("div",{class:T(["VPContent",{"has-sidebar":i(s),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?l(n.$slots,"not-found",{key:0},()=>[m(ht)],!0):i(t).layout==="page"?(a(),b(ls,{key:1},{"page-top":d(()=>[l(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),b(ns,{key:2},{"home-hero-before":d(()=>[l(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),b(R(i(t).layout),{key:3})):(a(),b(ko,{key:4},{"doc-top":d(()=>[l(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":d(()=>[l(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":d(()=>[l(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":d(()=>[l(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":d(()=>[l(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),us=k(cs,[["__scopeId","data-v-9a6c75ad"]]),ds={class:"container"},vs=["innerHTML"],ps=["innerHTML"],hs=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=O();return(n,r)=>i(e).footer&&i(t).footer!==!1?(a(),c("footer",{key:0,class:T(["VPFooter",{"has-sidebar":i(s)}])},[v("div",ds,[i(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,vs)):f("",!0),i(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,ps)):f("",!0)])],2)):f("",!0)}}),fs=k(hs,[["__scopeId","data-v-566314d4"]]);function _s(){const{theme:o,frontmatter:e}=V(),t=Pe([]),s=$(()=>t.value.length>0);return ee(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const ms=o=>(C("data-v-0b5c97a1"),o=o(),H(),o),ks=ms(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),bs={class:"header"},$s={class:"outline"},gs=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=V(),s=w(!1),n=w(0),r=w(),u=w();We(r,()=>{s.value=!1}),Ke("Escape",()=>{s.value=!1}),ee(()=>{s.value=!1});function h(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function p(y){y.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Re(()=>{s.value=!1}))}function g(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,P)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Le({"--vp-vh":n.value+"px"}),ref_key:"main",ref:r},[y.headers.length>0?(a(),c("button",{key:0,onClick:h,class:T({open:s.value})},[F(S(i(Ne)(i(t)))+" ",1),ks],2)):(a(),c("button",{key:1,onClick:g},S(i(t).returnToTopLabel||"Return to top"),1)),m(de,{name:"flyout"},{default:d(()=>[s.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:p},[v("div",bs,[v("a",{class:"top-link",href:"#",onClick:g},S(i(t).returnToTopLabel||"Return to top"),1)]),v("div",$s,[m(Me,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),ys=k(gs,[["__scopeId","data-v-0b5c97a1"]]),Ps=o=>(C("data-v-2488c25a"),o=o(),H(),o),Vs={class:"container"},Ls=["aria-expanded"],Ss=Ps(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),ws={class:"menu-text"},Is=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=O(),{headers:n}=_s(),{y:r}=Se(),u=w(0);z(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ee(()=>{n.value=_e(t.value.outline??e.value.outline)});const h=$(()=>n.value.length===0),p=$(()=>h.value&&!s.value),g=$(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:h.value,fixed:p.value}));return(y,P)=>i(t).layout!=="home"&&(!p.value||i(r)>=u.value)?(a(),c("div",{key:0,class:T(g.value)},[v("div",Vs,[i(s)?(a(),c("button",{key:0,class:"menu","aria-expanded":y.open,"aria-controls":"VPSidebarNav",onClick:P[0]||(P[0]=I=>y.$emit("open-menu"))},[Ss,v("span",ws,S(i(e).sidebarMenuLabel||"Menu"),1)],8,Ls)):f("",!0),m(ys,{headers:i(n),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Ts=k(Is,[["__scopeId","data-v-2488c25a"]]);function Ns(){const o=w(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const r=te();return q(()=>r.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const Ms={},As={class:"VPSwitch",type:"button",role:"switch"},Bs={class:"check"},Cs={key:0,class:"icon"};function Hs(o,e){return a(),c("button",As,[v("span",Bs,[o.$slots.default?(a(),c("span",Cs,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Es=k(Ms,[["render",Hs],["__scopeId","data-v-b4ccac88"]]),Ae=o=>(C("data-v-7df97737"),o=o(),H(),o),Fs=Ae(()=>v("span",{class:"vpi-sun sun"},null,-1)),Ds=Ae(()=>v("span",{class:"vpi-moon moon"},null,-1)),Os=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=V(),s=oe("toggle-appearance",()=>{e.value=!e.value}),n=$(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,u)=>(a(),b(Es,{title:n.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(s)},{default:d(()=>[Fs,Ds]),_:1},8,["title","aria-checked","onClick"]))}}),me=k(Os,[["__scopeId","data-v-7df97737"]]),Us={key:0,class:"VPNavBarAppearance"},Gs=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=V();return(t,s)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),c("div",Us,[m(me)])):f("",!0)}}),js=k(Gs,[["__scopeId","data-v-283b26e9"]]),ke=w();let Be=!1,re=0;function zs(o){const e=w(!1);if(J){!Be&&qs(),re++;const t=q(ke,s=>{var n,r,u;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(r=o.onFocus)==null||r.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});pe(()=>{t(),re--,re||Ws()})}return Je(e)}function qs(){document.addEventListener("focusin",Ce),Be=!0,ke.value=document.activeElement}function Ws(){document.removeEventListener("focusin",Ce)}function Ce(){ke.value=document.activeElement}const Ks={class:"VPMenuLink"},Rs=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),c("div",Ks,[m(D,{class:T({active:i(j)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:d(()=>[F(S(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=k(Rs,[["__scopeId","data-v-f51f088d"]]),Js={class:"VPMenuGroup"},Ys={key:0,class:"title"},Qs=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Js,[e.text?(a(),c("p",Ys,S(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,s=>(a(),c(M,null,["link"in s?(a(),b(se,{key:0,item:s},null,8,["item"])):f("",!0)],64))),256))]))}}),Xs=k(Qs,[["__scopeId","data-v-a6b0397c"]]),Zs={class:"VPMenu"},xs={key:0,class:"items"},en=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",Zs,[e.items?(a(),c("div",xs,[(a(!0),c(M,null,E(e.items,s=>(a(),c(M,{key:s.text},["link"in s?(a(),b(se,{key:0,item:s},null,8,["item"])):(a(),b(Xs,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),tn=k(en,[["__scopeId","data-v-e42ed9b3"]]),on=o=>(C("data-v-af5898d3"),o=o(),H(),o),sn=["aria-expanded","aria-label"],nn={key:0,class:"text"},an=["innerHTML"],rn=on(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),ln={key:1,class:"vpi-more-horizontal icon"},cn={class:"menu"},un=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=w(!1),t=w();zs({el:t,onBlur:s});function s(){e.value=!1}return(n,r)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=u=>e.value=!0),onMouseleave:r[2]||(r[2]=u=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:r[0]||(r[0]=u=>e.value=!e.value)},[n.button||n.icon?(a(),c("span",nn,[n.icon?(a(),c("span",{key:0,class:T([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),c("span",{key:1,innerHTML:n.button},null,8,an)):f("",!0),rn])):(a(),c("span",ln))],8,sn),v("div",cn,[m(tn,{items:n.items},{default:d(()=>[l(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=k(un,[["__scopeId","data-v-af5898d3"]]),dn=["href","aria-label","innerHTML"],vn=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=$(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),c("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,dn))}}),pn=k(vn,[["__scopeId","data-v-358b6670"]]),hn={class:"VPSocialLinks"},fn=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",hn,[(a(!0),c(M,null,E(e.links,({link:s,icon:n,ariaLabel:r})=>(a(),b(pn,{key:s,icon:n,link:s,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=k(fn,[["__scopeId","data-v-e71e869c"]]),_n={key:0,class:"group translations"},mn={class:"trans-title"},kn={key:1,class:"group"},bn={class:"item appearance"},$n={class:"label"},gn={class:"appearance-action"},yn={key:2,class:"group"},Pn={class:"item social-links"},Vn=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=V(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),r=$(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>r.value?(a(),b(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:d(()=>[i(s).length&&i(n).label?(a(),c("div",_n,[v("p",mn,S(i(n).label),1),(a(!0),c(M,null,E(i(s),p=>(a(),b(se,{key:p.link,item:p},null,8,["item"]))),128))])):f("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(a(),c("div",kn,[v("div",bn,[v("p",$n,S(i(t).darkModeSwitchLabel||"Appearance"),1),v("div",gn,[m(me)])])])):f("",!0),i(t).socialLinks?(a(),c("div",yn,[v("div",Pn,[m($e,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Ln=k(Vn,[["__scopeId","data-v-8e87c032"]]),Sn=o=>(C("data-v-6bee1efd"),o=o(),H(),o),wn=["aria-expanded"],In=Sn(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),Tn=[In],Nn=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},Tn,10,wn))}}),Mn=k(Nn,[["__scopeId","data-v-6bee1efd"]]),An=["innerHTML"],Bn=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),b(D,{class:T({VPNavBarMenuLink:!0,active:i(j)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:d(()=>[v("span",{innerHTML:t.item.text},null,8,An)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Cn=k(Bn,[["__scopeId","data-v-08fbf4b6"]]),Hn=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=V(),s=r=>"link"in r?j(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(s),n=$(()=>s(e.item));return(r,u)=>(a(),b(be,{class:T({VPNavBarMenuGroup:!0,active:i(j)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||n.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),En=o=>(C("data-v-f732b5d0"),o=o(),H(),o),Fn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Dn=En(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),On=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=V();return(t,s)=>i(e).nav?(a(),c("nav",Fn,[Dn,(a(!0),c(M,null,E(i(e).nav,n=>(a(),c(M,{key:n.text},["link"in n?(a(),b(Cn,{key:0,item:n},null,8,["item"])):(a(),b(Hn,{key:1,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),Un=k(On,[["__scopeId","data-v-f732b5d0"]]);function Gn(o){const{localeIndex:e,theme:t}=V();function s(n){var A,B,L;const r=n.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",p=h&&((L=(B=u.locales)==null?void 0:B[e.value])==null?void 0:L.translations)||null,g=h&&u.translations||null;let y=p,P=g,I=o;const N=r.pop();for(const U of r){let G=null;const K=I==null?void 0:I[U];K&&(G=I=K);const ne=P==null?void 0:P[U];ne&&(G=P=ne);const ae=y==null?void 0:y[U];ae&&(G=y=ae),K||(I=G),ne||(P=G),ae||(y=G)}return(y==null?void 0:y[N])??(P==null?void 0:P[N])??(I==null?void 0:I[N])??""}return s}const jn=["aria-label"],zn={class:"DocSearch-Button-Container"},qn=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Wn={class:"DocSearch-Button-Placeholder"},Kn=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=Gn({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[v("span",zn,[qn,v("span",Wn,S(i(t)("button.buttonText")),1)]),Kn],8,jn))}}),Rn={class:"VPNavBarSearch"},Jn={id:"local-search"},Yn={key:1,id:"docsearch"},Qn=_({__name:"VPNavBarSearch",setup(o){const e=()=>null,t=()=>null,{theme:s}=V(),n=w(!1),r=w(!1);z(()=>{});function u(){n.value||(n.value=!0,setTimeout(h,16))}function h(){const y=new Event("keydown");y.key="k",y.metaKey=!0,window.dispatchEvent(y),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}const p=w(!1),g="";return(y,P)=>{var I;return a(),c("div",Rn,[i(g)==="local"?(a(),c(M,{key:0},[p.value?(a(),b(i(e),{key:0,onClose:P[0]||(P[0]=N=>p.value=!1)})):f("",!0),v("div",Jn,[m(ge,{onClick:P[1]||(P[1]=N=>p.value=!0)})])],64)):i(g)==="algolia"?(a(),c(M,{key:1},[n.value?(a(),b(i(t),{key:0,algolia:((I=i(s).search)==null?void 0:I.options)??i(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=N=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),c("div",Yn,[m(ge,{onClick:u})]))],64)):f("",!0)])}}}),Xn=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>i(e).socialLinks?(a(),b($e,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Zn=k(Xn,[["__scopeId","data-v-ef6192dc"]]),xn=["href","rel","target"],ea={key:1},ta={key:2},oa=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=V(),{hasSidebar:s}=O(),{currentLang:n}=Y(),r=$(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),u=$(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),h=$(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,g)=>(a(),c("div",{class:T(["VPNavBarTitle",{"has-sidebar":i(s)}])},[v("a",{class:"title",href:r.value??i(he)(i(n).link),rel:u.value,target:h.value},[l(p.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),b(Z,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):f("",!0),i(t).siteTitle?(a(),c("span",ea,S(i(t).siteTitle),1)):i(t).siteTitle===void 0?(a(),c("span",ta,S(i(e).title),1)):f("",!0),l(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,xn)],2))}}),sa=k(oa,[["__scopeId","data-v-0ad69264"]]),na={class:"items"},aa={class:"title"},ra=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=V(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,r)=>i(t).length&&i(s).label?(a(),b(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:d(()=>[v("div",na,[v("p",aa,S(i(s).label),1),(a(!0),c(M,null,E(i(t),u=>(a(),b(se,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),ia=k(ra,[["__scopeId","data-v-acee064b"]]),la=o=>(C("data-v-844edcde"),o=o(),H(),o),ca={class:"wrapper"},ua={class:"container"},da={class:"title"},va={class:"content"},pa={class:"content-body"},ha=la(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),fa=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const{y:e}=Se(),{hasSidebar:t}=O(),{frontmatter:s}=V(),n=w({});return ye(()=>{n.value={"has-sidebar":t.value,home:s.value.layout==="home",top:e.value===0}}),(r,u)=>(a(),c("div",{class:T(["VPNavBar",n.value])},[v("div",ca,[v("div",ua,[v("div",da,[m(sa,null,{"nav-bar-title-before":d(()=>[l(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",va,[v("div",pa,[l(r.$slots,"nav-bar-content-before",{},void 0,!0),m(Qn,{class:"search"}),m(Un,{class:"menu"}),m(ia,{class:"translations"}),m(js,{class:"appearance"}),m(Zn,{class:"social-links"}),m(Ln,{class:"extra"}),l(r.$slots,"nav-bar-content-after",{},void 0,!0),m(Mn,{class:"hamburger",active:r.isScreenOpen,onClick:u[0]||(u[0]=h=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),ha],2))}}),_a=k(fa,[["__scopeId","data-v-844edcde"]]),ma={key:0,class:"VPNavScreenAppearance"},ka={class:"text"},ba=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=V();return(s,n)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),c("div",ma,[v("p",ka,S(i(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),$a=k(ba,[["__scopeId","data-v-338d9b48"]]),ga=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,s)=>(a(),b(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:d(()=>[F(S(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),ya=k(ga,[["__scopeId","data-v-fe523e3d"]]),Pa=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,s)=>(a(),b(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:d(()=>[F(S(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),He=k(Pa,[["__scopeId","data-v-aea78dd1"]]),Va={class:"VPNavScreenMenuGroupSection"},La={key:0,class:"title"},Sa=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Va,[e.text?(a(),c("p",La,S(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,s=>(a(),b(He,{key:s.text,item:s},null,8,["item"]))),128))]))}}),wa=k(Sa,[["__scopeId","data-v-f60dbfa7"]]),Ia=o=>(C("data-v-d2212c70"),o=o(),H(),o),Ta=["aria-controls","aria-expanded"],Na=["innerHTML"],Ma=Ia(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Aa=["id"],Ba={key:1,class:"group"},Ca=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=w(!1),s=$(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(r,u)=>(a(),c("div",{class:T(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[v("span",{class:"button-text",innerHTML:r.text},null,8,Na),Ma],8,Ta),v("div",{id:s.value,class:"items"},[(a(!0),c(M,null,E(r.items,h=>(a(),c(M,{key:h.text},["link"in h?(a(),c("div",{key:h.text,class:"item"},[m(He,{item:h},null,8,["item"])])):(a(),c("div",Ba,[m(wa,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Aa)],2))}}),Ha=k(Ca,[["__scopeId","data-v-d2212c70"]]),Ea={key:0,class:"VPNavScreenMenu"},Fa=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=V();return(t,s)=>i(e).nav?(a(),c("nav",Ea,[(a(!0),c(M,null,E(i(e).nav,n=>(a(),c(M,{key:n.text},["link"in n?(a(),b(ya,{key:0,item:n},null,8,["item"])):(a(),b(Ha,{key:1,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Da=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>i(e).socialLinks?(a(),b($e,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Ee=o=>(C("data-v-516e4bc3"),o=o(),H(),o),Oa=Ee(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Ua=Ee(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ga={class:"list"},ja=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=w(!1);function n(){s.value=!s.value}return(r,u)=>i(e).length&&i(t).label?(a(),c("div",{key:0,class:T(["VPNavScreenTranslations",{open:s.value}])},[v("button",{class:"title",onClick:n},[Oa,F(" "+S(i(t).label)+" ",1),Ua]),v("ul",Ga,[(a(!0),c(M,null,E(i(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(D,{class:"link",href:h.link},{default:d(()=>[F(S(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),za=k(ja,[["__scopeId","data-v-516e4bc3"]]),qa={class:"container"},Wa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=w(null),t=we(J?document.body:null);return(s,n)=>(a(),b(de,{name:"fade",onEnter:n[0]||(n[0]=r=>t.value=!0),onAfterLeave:n[1]||(n[1]=r=>t.value=!1)},{default:d(()=>[s.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",qa,[l(s.$slots,"nav-screen-content-before",{},void 0,!0),m(Fa,{class:"menu"}),m(za,{class:"translations"}),m($a,{class:"appearance"}),m(Da,{class:"social-links"}),l(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ka=k(Wa,[["__scopeId","data-v-57cce842"]]),Ra={key:0,class:"VPNav"},Ja=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=Ns(),{frontmatter:n}=V(),r=$(()=>n.value.navbar!==!1);return Ie("close-screen",t),x(()=>{J&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(u,h)=>r.value?(a(),c("header",Ra,[m(_a,{"is-screen-open":i(e),onToggleScreen:i(s)},{"nav-bar-title-before":d(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Ka,{open:i(e)},{"nav-screen-content-before":d(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Ya=k(Ja,[["__scopeId","data-v-7ad780c2"]]),Fe=o=>(C("data-v-c24f735a"),o=o(),H(),o),Qa=["role","tabindex"],Xa=Fe(()=>v("div",{class:"indicator"},null,-1)),Za=Fe(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),xa=[Za],er={key:1,class:"items"},tr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:r,hasActiveLink:u,hasChildren:h,toggle:p}=kt($(()=>e.item)),g=$(()=>h.value?"section":"div"),y=$(()=>n.value?"a":"div"),P=$(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),I=$(()=>n.value?void 0:"button"),N=$(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":r.value},{"has-active":u.value}]);function A(L){"key"in L&&L.key!=="Enter"||!e.item.link&&p()}function B(){e.item.link&&p()}return(L,U)=>{const G=W("VPSidebarItem",!0);return a(),b(R(g.value),{class:T(["VPSidebarItem",N.value])},{default:d(()=>[L.item.text?(a(),c("div",Q({key:0,class:"item",role:I.value},Qe(L.item.items?{click:A,keydown:A}:{},!0),{tabindex:L.item.items&&0}),[Xa,L.item.link?(a(),b(D,{key:0,tag:y.value,class:"link",href:L.item.link,rel:L.item.rel,target:L.item.target},{default:d(()=>[(a(),b(R(P.value),{class:"text",innerHTML:L.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),b(R(P.value),{key:1,class:"text",innerHTML:L.item.text},null,8,["innerHTML"])),L.item.collapsed!=null&&L.item.items&&L.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:Ye(B,["enter"]),tabindex:"0"},xa,32)):f("",!0)],16,Qa)):f("",!0),L.item.items&&L.item.items.length?(a(),c("div",er,[L.depth<5?(a(!0),c(M,{key:0},E(L.item.items,K=>(a(),b(G,{key:K.text,item:K,depth:L.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),or=k(tr,[["__scopeId","data-v-c24f735a"]]),De=o=>(C("data-v-4871f9f5"),o=o(),H(),o),sr=De(()=>v("div",{class:"curtain"},null,-1)),nr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},ar=De(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),rr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=O(),s=o,n=w(null),r=we(J?document.body:null);return q([s,n],()=>{var u;s.open?(r.value=!0,(u=n.value)==null||u.focus()):r.value=!1},{immediate:!0,flush:"post"}),(u,h)=>i(t)?(a(),c("aside",{key:0,class:T(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:n,onClick:h[0]||(h[0]=Xe(()=>{},["stop"]))},[sr,v("nav",nr,[ar,l(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),c(M,null,E(i(e),p=>(a(),c("div",{key:p.text,class:"group"},[m(or,{item:p,depth:0},null,8,["item"])]))),128)),l(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),ir=k(rr,[["__scopeId","data-v-4871f9f5"]]),lr=_({__name:"VPSkipLink",setup(o){const e=te(),t=w();q(()=>e.path,()=>t.value.focus());function s({target:n}){const r=document.getElementById(decodeURIComponent(n.hash).slice(1));if(r){const u=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",u)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",u),r.focus(),window.scrollTo(0,0)}}return(n,r)=>(a(),c(M,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),cr=k(lr,[["__scopeId","data-v-c8291ffa"]]),ur=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=O(),n=te();q(()=>n.path,s),mt(e,s);const{frontmatter:r}=V(),u=Ze(),h=$(()=>!!u["home-hero-image"]);return Ie("hero-image-slot-exists",h),(p,g)=>{const y=W("Content");return i(r).layout!==!1?(a(),c("div",{key:0,class:T(["Layout",i(r).pageClass])},[l(p.$slots,"layout-top",{},void 0,!0),m(cr),m(ot,{class:"backdrop",show:i(e),onClick:i(s)},null,8,["show","onClick"]),m(Ya,null,{"nav-bar-title-before":d(()=>[l(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":d(()=>[l(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Ts,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),m(ir,{open:i(e)},{"sidebar-nav-before":d(()=>[l(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":d(()=>[l(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(us,null,{"page-top":d(()=>[l(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":d(()=>[l(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":d(()=>[l(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":d(()=>[l(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":d(()=>[l(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":d(()=>[l(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(fs),l(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),b(y,{key:1}))}}}),dr=k(ur,[["__scopeId","data-v-d8b57b2d"]]),pr={Layout:dr,enhanceApp:({app:o})=>{o.component("Badge",xe)}};export{pr as t}; +import{d as _,o as a,c,r as l,n as T,a as F,t as S,b,w as d,e as f,T as de,_ as k,u as Oe,i as Ue,f as Ge,g as ve,h as w,j as J,k as $,l as z,m as v,p as i,q as C,s as H,v as j,x as ie,y as q,z as x,A as pe,B as ye,C as je,D as ze,E as W,F as M,G as E,H as Pe,I as ee,J as m,K as R,L as Ve,M as te,N as Q,O as oe,P as qe,Q as Le,R as We,S as Ke,U as Re,V as Se,W as Je,X as we,Y as Ie,Z as Ye,$ as Qe,a0 as Xe,a1 as Ze}from"./framework.yUIHRp4d.js";const xe=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:T(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[F(S(e.text),1)])],2))}}),et={key:0,class:"VPBackdrop"},tt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),b(de,{name:"fade"},{default:d(()=>[e.show?(a(),c("div",et)):f("",!0)]),_:1}))}}),ot=k(tt,[["__scopeId","data-v-54a304ca"]]),V=Oe;function st(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function he(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ue(o)||o.startsWith("#")||!n.startsWith("http")||!Ge(e))return o;const{site:r}=V(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${s}`);return ve(u)}const fe=w(J?location.hash:"");J&&window.addEventListener("hashchange",()=>{fe.value=location.hash});function Y({removeCurrent:o=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:s,page:n,theme:r}=V(),u=$(()=>{var p,g;return{label:(p=t.value.locales[s.value])==null?void 0:p.label,link:((g=t.value.locales[s.value])==null?void 0:g.link)||(s.value==="root"?"/":`/${s.value}/`)}});return{localeLinks:$(()=>Object.entries(t.value.locales).flatMap(([p,g])=>o&&u.value.label===g.label?[]:{text:g.label,link:nt(g.link||(p==="root"?"/":`/${p}/`),r.value.i18nRouting!==!1&&e,n.value.relativePath.slice(u.value.link.length-1),!t.value.cleanUrls)+fe.value})),currentLang:u}}function nt(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const at=o=>(C("data-v-b9c0c15a"),o=o(),H(),o),rt={class:"NotFound"},it={class:"code"},lt={class:"title"},ct=at(()=>v("div",{class:"divider"},null,-1)),ut={class:"quote"},dt={class:"action"},vt=["href","aria-label"],pt=_({__name:"NotFound",setup(o){const{site:e,theme:t}=V(),{localeLinks:s}=Y({removeCurrent:!1}),n=w("/");return z(()=>{var u;const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");s.value.length&&(n.value=((u=s.value.find(({link:h})=>h.startsWith(r)))==null?void 0:u.link)||s.value[0].link)}),(r,u)=>{var h,p,g,y,P;return a(),c("div",rt,[v("p",it,S(((h=i(t).notFound)==null?void 0:h.code)??"404"),1),v("h1",lt,S(((p=i(t).notFound)==null?void 0:p.title)??"PAGE NOT FOUND"),1),ct,v("blockquote",ut,S(((g=i(t).notFound)==null?void 0:g.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",dt,[v("a",{class:"link",href:i(ve)(n.value),"aria-label":((y=i(t).notFound)==null?void 0:y.linkLabel)??"go to home"},S(((P=i(t).notFound)==null?void 0:P.linkText)??"Take me home"),9,vt)])])}}}),ht=k(pt,[["__scopeId","data-v-b9c0c15a"]]);function Te(o,e){if(Array.isArray(o))return X(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,r)=>r.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?X(s):X(s.items,s.base)}function ft(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function _t(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):j(o,e.link)?!0:e.items?ce(o,e.items):!1}function X(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=X(s.items,n)),s})}function O(){const{frontmatter:o,page:e,theme:t}=V(),s=ie("(min-width: 960px)"),n=w(!1),r=$(()=>{const B=t.value.sidebar,L=e.value.relativePath;return B?Te(B,L):[]}),u=w(r.value);q(r,(B,L)=>{JSON.stringify(B)!==JSON.stringify(L)&&(u.value=r.value)});const h=$(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),p=$(()=>g?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),g=$(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),y=$(()=>h.value&&s.value),P=$(()=>h.value?ft(u.value):[]);function I(){n.value=!0}function N(){n.value=!1}function A(){n.value?N():I()}return{isOpen:n,sidebar:u,sidebarGroups:P,hasSidebar:h,hasAside:g,leftAside:p,isSidebarEnabled:y,open:I,close:N,toggle:A}}function mt(o,e){let t;x(()=>{t=o.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function kt(o){const{page:e}=V(),t=w(!1),s=$(()=>o.value.collapsed!=null),n=$(()=>!!o.value.link),r=w(!1),u=()=>{r.value=j(e.value.relativePath,o.value.link)};q([e,o,fe],u),z(u);const h=$(()=>r.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),p=$(()=>!!(o.value.items&&o.value.items.length));x(()=>{t.value=!!(s.value&&o.value.collapsed)}),ye(()=>{(r.value||h.value)&&(t.value=!1)});function g(){s.value&&(t.value=!t.value)}return{collapsed:t,collapsible:s,isLink:n,isActiveLink:r,hasActiveLink:h,hasChildren:p,toggle:g}}function bt(){const{hasSidebar:o}=O(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:$(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ne(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:$t(t),link:"#"+t.id,level:s}});return gt(e,o)}function $t(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function gt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=s&&u.level<=n),ue.length=0;for(const{element:u,link:h}of o)ue.push({element:u,link:h});const r=[];e:for(let u=0;u=0;p--){const g=o[p];if(g.level{requestAnimationFrame(r),window.addEventListener("scroll",s)}),je(()=>{u(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function r(){if(!t.value)return;const h=window.scrollY,p=window.innerHeight,g=document.body.offsetHeight,y=Math.abs(h+p-g)<1,P=ue.map(({element:N,link:A})=>({link:A,top:Pt(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!P.length){u(null);return}if(h<1){u(null);return}if(y){u(P[P.length-1].link);return}let I=null;for(const{link:N,top:A}of P){if(A>h+ze()+4)break;I=N}u(I)}function u(h){n&&n.classList.remove("active"),h==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const p=n;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Pt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Vt=["href","title"],Lt=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=W("VPDocOutlineItem",!0);return a(),c("ul",{class:T(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,E(t.headers,({children:r,link:u,title:h})=>(a(),c("li",null,[v("a",{class:"outline-link",href:u,onClick:e,title:h},S(h),9,Vt),r!=null&&r.length?(a(),b(n,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Me=k(Lt,[["__scopeId","data-v-53c99d69"]]),St=o=>(C("data-v-6b52fe58"),o=o(),H(),o),wt={class:"content"},It={class:"outline-title",role:"heading","aria-level":"2"},Tt={"aria-labelledby":"doc-outline-aria-label"},Nt=St(()=>v("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Mt=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=V(),s=Pe([]);ee(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=w(),r=w();return yt(n,r),(u,h)=>(a(),c("div",{class:T(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n,role:"navigation"},[v("div",wt,[v("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),v("div",It,S(i(Ne)(i(t))),1),v("nav",Tt,[Nt,m(Me,{headers:s.value,root:!0},null,8,["headers"])])])],2))}}),At=k(Mt,[["__scopeId","data-v-6b52fe58"]]),Bt={class:"VPDocAsideCarbonAds"},Ct=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),c("div",Bt,[m(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Ht=o=>(C("data-v-cb998dce"),o=o(),H(),o),Et={class:"VPDocAside"},Ft=Ht(()=>v("div",{class:"spacer"},null,-1)),Dt=_({__name:"VPDocAside",setup(o){const{theme:e}=V();return(t,s)=>(a(),c("div",Et,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(At),l(t.$slots,"aside-outline-after",{},void 0,!0),Ft,l(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),b(Ct,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ot=k(Dt,[["__scopeId","data-v-cb998dce"]]);function Ut(){const{theme:o,page:e}=V();return $(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Gt(){const{page:o,theme:e,frontmatter:t}=V();return $(()=>{var g,y,P,I,N,A,B,L;const s=Te(e.value.sidebar,o.value.relativePath),n=_t(s),r=jt(n,U=>U.link.replace(/[?#].*$/,"")),u=r.findIndex(U=>j(o.value.relativePath,U.link)),h=((g=e.value.docFooter)==null?void 0:g.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((y=e.value.docFooter)==null?void 0:y.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((P=r[u-1])==null?void 0:P.docFooterText)??((I=r[u-1])==null?void 0:I.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((N=r[u-1])==null?void 0:N.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=r[u+1])==null?void 0:A.docFooterText)??((B=r[u+1])==null?void 0:B.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((L=r[u+1])==null?void 0:L.link)}}})}function jt(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=$(()=>e.tag??(e.href?"a":"span")),s=$(()=>e.href&&Ve.test(e.href));return(n,r)=>(a(),b(R(t.value),{class:T(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?i(he)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:d(()=>[l(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),zt={class:"VPLastUpdated"},qt=["datetime"],Wt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,frontmatter:s,lang:n}=V(),r=$(()=>new Date(s.value.lastUpdated??t.value.lastUpdated)),u=$(()=>r.value.toISOString()),h=w("");return z(()=>{x(()=>{var p,g,y;h.value=new Intl.DateTimeFormat((g=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&g.forceLocale?n.value:void 0,((y=e.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(p,g)=>{var y;return a(),c("p",zt,[F(S(((y=i(e).lastUpdated)==null?void 0:y.text)||i(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:u.value},S(h.value),9,qt)])}}}),Kt=k(Wt,[["__scopeId","data-v-19a7ae4e"]]),Rt=o=>(C("data-v-b77f9094"),o=o(),H(),o),Jt={key:0,class:"VPDocFooter"},Yt={key:0,class:"edit-info"},Qt={key:0,class:"edit-link"},Xt=Rt(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Zt={key:1,class:"last-updated"},xt={key:1,class:"prev-next"},eo={class:"pager"},to=["innerHTML"],oo=["innerHTML"],so={class:"pager"},no=["innerHTML"],ao=["innerHTML"],ro=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=V(),n=Ut(),r=Gt(),u=$(()=>e.value.editLink&&s.value.editLink!==!1),h=$(()=>t.value.lastUpdated&&s.value.lastUpdated!==!1),p=$(()=>u.value||h.value||r.value.prev||r.value.next);return(g,y)=>{var P,I,N,A;return p.value?(a(),c("footer",Jt,[l(g.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Yt,[u.value?(a(),c("div",Qt,[m(D,{class:"edit-link-button",href:i(n).url,"no-icon":!0},{default:d(()=>[Xt,F(" "+S(i(n).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",Zt,[m(Kt)])):f("",!0)])):f("",!0),(P=i(r).prev)!=null&&P.link||(I=i(r).next)!=null&&I.link?(a(),c("nav",xt,[v("div",eo,[(N=i(r).prev)!=null&&N.link?(a(),b(D,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:d(()=>{var B;return[v("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,to),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,oo)]}),_:1},8,["href"])):f("",!0)]),v("div",so,[(A=i(r).next)!=null&&A.link?(a(),b(D,{key:0,class:"pager-link next",href:i(r).next.link},{default:d(()=>{var B;return[v("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.next)||"Next page"},null,8,no),v("span",{class:"title",innerHTML:i(r).next.text},null,8,ao)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),io=k(ro,[["__scopeId","data-v-b77f9094"]]),lo=o=>(C("data-v-e6f2a212"),o=o(),H(),o),co={class:"container"},uo=lo(()=>v("div",{class:"aside-curtain"},null,-1)),vo={class:"aside-container"},po={class:"aside-content"},ho={class:"content"},fo={class:"content-container"},_o={class:"main"},mo=_({__name:"VPDoc",setup(o){const{theme:e}=V(),t=te(),{hasSidebar:s,hasAside:n,leftAside:r}=O(),u=$(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,p)=>{const g=W("Content");return a(),c("div",{class:T(["VPDoc",{"has-sidebar":i(s),"has-aside":i(n)}])},[l(h.$slots,"doc-top",{},void 0,!0),v("div",co,[i(n)?(a(),c("div",{key:0,class:T(["aside",{"left-aside":i(r)}])},[uo,v("div",vo,[v("div",po,[m(Ot,null,{"aside-top":d(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),v("div",ho,[v("div",fo,[l(h.$slots,"doc-before",{},void 0,!0),v("main",_o,[m(g,{class:T(["vp-doc",[u.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(io,null,{"doc-footer-before":d(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),ko=k(mo,[["__scopeId","data-v-e6f2a212"]]),bo=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=$(()=>e.href&&Ve.test(e.href)),s=$(()=>e.tag||e.href?"a":"button");return(n,r)=>(a(),b(R(s.value),{class:T(["VPButton",[n.size,n.theme]]),href:n.href?i(he)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:d(()=>[F(S(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),$o=k(bo,[["__scopeId","data-v-c9cf0e3c"]]),go=["src","alt"],yo=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=W("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",Q({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,go)):(a(),c(M,{key:1},[m(s,Q({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(s,Q({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),Z=k(yo,[["__scopeId","data-v-ab19afbb"]]),Po=o=>(C("data-v-b10c5094"),o=o(),H(),o),Vo={class:"container"},Lo={class:"main"},So={key:0,class:"name"},wo=["innerHTML"],Io=["innerHTML"],To=["innerHTML"],No={key:0,class:"actions"},Mo={key:0,class:"image"},Ao={class:"image-container"},Bo=Po(()=>v("div",{class:"image-bg"},null,-1)),Co=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=oe("hero-image-slot-exists");return(t,s)=>(a(),c("div",{class:T(["VPHero",{"has-image":t.image||i(e)}])},[v("div",Vo,[v("div",Lo,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",So,[v("span",{innerHTML:t.name,class:"clip"},null,8,wo)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,Io)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,To)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",No,[(a(!0),c(M,null,E(t.actions,n=>(a(),c("div",{key:n.link,class:"action"},[m($o,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),c("div",Mo,[v("div",Ao,[Bo,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),b(Z,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Ho=k(Co,[["__scopeId","data-v-b10c5094"]]),Eo=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=V();return(t,s)=>i(e).hero?(a(),b(Ho,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Fo=o=>(C("data-v-bd37d1a2"),o=o(),H(),o),Do={class:"box"},Oo={key:0,class:"icon"},Uo=["innerHTML"],Go=["innerHTML"],jo=["innerHTML"],zo={key:4,class:"link-text"},qo={class:"link-text-value"},Wo=Fo(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Ko=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),b(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:d(()=>[v("article",Do,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Oo,[m(Z,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),b(Z,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Uo)):f("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Go),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,jo)):f("",!0),e.linkText?(a(),c("div",zo,[v("p",qo,[F(S(e.linkText)+" ",1),Wo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Ro=k(Ko,[["__scopeId","data-v-bd37d1a2"]]),Jo={key:0,class:"VPFeatures"},Yo={class:"container"},Qo={class:"items"},Xo=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=$(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),c("div",Jo,[v("div",Yo,[v("div",Qo,[(a(!0),c(M,null,E(s.features,r=>(a(),c("div",{key:r.title,class:T(["item",[t.value]])},[m(Ro,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),Zo=k(Xo,[["__scopeId","data-v-b1eea84a"]]),xo=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=V();return(t,s)=>i(e).features?(a(),b(Zo,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):f("",!0)}}),es=_({__name:"VPHomeContent",setup(o){const{width:e}=qe({includeScrollbar:!1});return(t,s)=>(a(),c("div",{class:"vp-doc container",style:Le(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),ts=k(es,[["__scopeId","data-v-d59ac166"]]),os={class:"VPHome"},ss=_({__name:"VPHome",setup(o){const{frontmatter:e}=V();return(t,s)=>{const n=W("Content");return a(),c("div",os,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Eo,null,{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(xo),l(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),b(ts,{key:0},{default:d(()=>[m(n)]),_:1})):(a(),b(n,{key:1}))])}}}),ns=k(ss,[["__scopeId","data-v-07b1ad08"]]),as={},rs={class:"VPPage"};function is(o,e){const t=W("Content");return a(),c("div",rs,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const ls=k(as,[["render",is]]),cs=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=V(),{hasSidebar:s}=O();return(n,r)=>(a(),c("div",{class:T(["VPContent",{"has-sidebar":i(s),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?l(n.$slots,"not-found",{key:0},()=>[m(ht)],!0):i(t).layout==="page"?(a(),b(ls,{key:1},{"page-top":d(()=>[l(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),b(ns,{key:2},{"home-hero-before":d(()=>[l(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),b(R(i(t).layout),{key:3})):(a(),b(ko,{key:4},{"doc-top":d(()=>[l(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":d(()=>[l(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":d(()=>[l(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":d(()=>[l(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":d(()=>[l(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),us=k(cs,[["__scopeId","data-v-9a6c75ad"]]),ds={class:"container"},vs=["innerHTML"],ps=["innerHTML"],hs=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=O();return(n,r)=>i(e).footer&&i(t).footer!==!1?(a(),c("footer",{key:0,class:T(["VPFooter",{"has-sidebar":i(s)}])},[v("div",ds,[i(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,vs)):f("",!0),i(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,ps)):f("",!0)])],2)):f("",!0)}}),fs=k(hs,[["__scopeId","data-v-566314d4"]]);function _s(){const{theme:o,frontmatter:e}=V(),t=Pe([]),s=$(()=>t.value.length>0);return ee(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const ms=o=>(C("data-v-0b5c97a1"),o=o(),H(),o),ks=ms(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),bs={class:"header"},$s={class:"outline"},gs=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=V(),s=w(!1),n=w(0),r=w(),u=w();We(r,()=>{s.value=!1}),Ke("Escape",()=>{s.value=!1}),ee(()=>{s.value=!1});function h(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function p(y){y.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Re(()=>{s.value=!1}))}function g(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,P)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Le({"--vp-vh":n.value+"px"}),ref_key:"main",ref:r},[y.headers.length>0?(a(),c("button",{key:0,onClick:h,class:T({open:s.value})},[F(S(i(Ne)(i(t)))+" ",1),ks],2)):(a(),c("button",{key:1,onClick:g},S(i(t).returnToTopLabel||"Return to top"),1)),m(de,{name:"flyout"},{default:d(()=>[s.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:p},[v("div",bs,[v("a",{class:"top-link",href:"#",onClick:g},S(i(t).returnToTopLabel||"Return to top"),1)]),v("div",$s,[m(Me,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),ys=k(gs,[["__scopeId","data-v-0b5c97a1"]]),Ps=o=>(C("data-v-2488c25a"),o=o(),H(),o),Vs={class:"container"},Ls=["aria-expanded"],Ss=Ps(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),ws={class:"menu-text"},Is=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=O(),{headers:n}=_s(),{y:r}=Se(),u=w(0);z(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ee(()=>{n.value=_e(t.value.outline??e.value.outline)});const h=$(()=>n.value.length===0),p=$(()=>h.value&&!s.value),g=$(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:h.value,fixed:p.value}));return(y,P)=>i(t).layout!=="home"&&(!p.value||i(r)>=u.value)?(a(),c("div",{key:0,class:T(g.value)},[v("div",Vs,[i(s)?(a(),c("button",{key:0,class:"menu","aria-expanded":y.open,"aria-controls":"VPSidebarNav",onClick:P[0]||(P[0]=I=>y.$emit("open-menu"))},[Ss,v("span",ws,S(i(e).sidebarMenuLabel||"Menu"),1)],8,Ls)):f("",!0),m(ys,{headers:i(n),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Ts=k(Is,[["__scopeId","data-v-2488c25a"]]);function Ns(){const o=w(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const r=te();return q(()=>r.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const Ms={},As={class:"VPSwitch",type:"button",role:"switch"},Bs={class:"check"},Cs={key:0,class:"icon"};function Hs(o,e){return a(),c("button",As,[v("span",Bs,[o.$slots.default?(a(),c("span",Cs,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Es=k(Ms,[["render",Hs],["__scopeId","data-v-b4ccac88"]]),Ae=o=>(C("data-v-7df97737"),o=o(),H(),o),Fs=Ae(()=>v("span",{class:"vpi-sun sun"},null,-1)),Ds=Ae(()=>v("span",{class:"vpi-moon moon"},null,-1)),Os=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=V(),s=oe("toggle-appearance",()=>{e.value=!e.value}),n=$(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,u)=>(a(),b(Es,{title:n.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(s)},{default:d(()=>[Fs,Ds]),_:1},8,["title","aria-checked","onClick"]))}}),me=k(Os,[["__scopeId","data-v-7df97737"]]),Us={key:0,class:"VPNavBarAppearance"},Gs=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=V();return(t,s)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),c("div",Us,[m(me)])):f("",!0)}}),js=k(Gs,[["__scopeId","data-v-283b26e9"]]),ke=w();let Be=!1,re=0;function zs(o){const e=w(!1);if(J){!Be&&qs(),re++;const t=q(ke,s=>{var n,r,u;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(r=o.onFocus)==null||r.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});pe(()=>{t(),re--,re||Ws()})}return Je(e)}function qs(){document.addEventListener("focusin",Ce),Be=!0,ke.value=document.activeElement}function Ws(){document.removeEventListener("focusin",Ce)}function Ce(){ke.value=document.activeElement}const Ks={class:"VPMenuLink"},Rs=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),c("div",Ks,[m(D,{class:T({active:i(j)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:d(()=>[F(S(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=k(Rs,[["__scopeId","data-v-f51f088d"]]),Js={class:"VPMenuGroup"},Ys={key:0,class:"title"},Qs=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Js,[e.text?(a(),c("p",Ys,S(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,s=>(a(),c(M,null,["link"in s?(a(),b(se,{key:0,item:s},null,8,["item"])):f("",!0)],64))),256))]))}}),Xs=k(Qs,[["__scopeId","data-v-a6b0397c"]]),Zs={class:"VPMenu"},xs={key:0,class:"items"},en=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",Zs,[e.items?(a(),c("div",xs,[(a(!0),c(M,null,E(e.items,s=>(a(),c(M,{key:s.text},["link"in s?(a(),b(se,{key:0,item:s},null,8,["item"])):(a(),b(Xs,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),tn=k(en,[["__scopeId","data-v-e42ed9b3"]]),on=o=>(C("data-v-af5898d3"),o=o(),H(),o),sn=["aria-expanded","aria-label"],nn={key:0,class:"text"},an=["innerHTML"],rn=on(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),ln={key:1,class:"vpi-more-horizontal icon"},cn={class:"menu"},un=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=w(!1),t=w();zs({el:t,onBlur:s});function s(){e.value=!1}return(n,r)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=u=>e.value=!0),onMouseleave:r[2]||(r[2]=u=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:r[0]||(r[0]=u=>e.value=!e.value)},[n.button||n.icon?(a(),c("span",nn,[n.icon?(a(),c("span",{key:0,class:T([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),c("span",{key:1,innerHTML:n.button},null,8,an)):f("",!0),rn])):(a(),c("span",ln))],8,sn),v("div",cn,[m(tn,{items:n.items},{default:d(()=>[l(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=k(un,[["__scopeId","data-v-af5898d3"]]),dn=["href","aria-label","innerHTML"],vn=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=$(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),c("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,dn))}}),pn=k(vn,[["__scopeId","data-v-358b6670"]]),hn={class:"VPSocialLinks"},fn=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",hn,[(a(!0),c(M,null,E(e.links,({link:s,icon:n,ariaLabel:r})=>(a(),b(pn,{key:s,icon:n,link:s,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=k(fn,[["__scopeId","data-v-e71e869c"]]),_n={key:0,class:"group translations"},mn={class:"trans-title"},kn={key:1,class:"group"},bn={class:"item appearance"},$n={class:"label"},gn={class:"appearance-action"},yn={key:2,class:"group"},Pn={class:"item social-links"},Vn=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=V(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),r=$(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>r.value?(a(),b(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:d(()=>[i(s).length&&i(n).label?(a(),c("div",_n,[v("p",mn,S(i(n).label),1),(a(!0),c(M,null,E(i(s),p=>(a(),b(se,{key:p.link,item:p},null,8,["item"]))),128))])):f("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(a(),c("div",kn,[v("div",bn,[v("p",$n,S(i(t).darkModeSwitchLabel||"Appearance"),1),v("div",gn,[m(me)])])])):f("",!0),i(t).socialLinks?(a(),c("div",yn,[v("div",Pn,[m($e,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Ln=k(Vn,[["__scopeId","data-v-8e87c032"]]),Sn=o=>(C("data-v-6bee1efd"),o=o(),H(),o),wn=["aria-expanded"],In=Sn(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),Tn=[In],Nn=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},Tn,10,wn))}}),Mn=k(Nn,[["__scopeId","data-v-6bee1efd"]]),An=["innerHTML"],Bn=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),b(D,{class:T({VPNavBarMenuLink:!0,active:i(j)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:d(()=>[v("span",{innerHTML:t.item.text},null,8,An)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Cn=k(Bn,[["__scopeId","data-v-08fbf4b6"]]),Hn=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=V(),s=r=>"link"in r?j(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(s),n=$(()=>s(e.item));return(r,u)=>(a(),b(be,{class:T({VPNavBarMenuGroup:!0,active:i(j)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||n.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),En=o=>(C("data-v-f732b5d0"),o=o(),H(),o),Fn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Dn=En(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),On=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=V();return(t,s)=>i(e).nav?(a(),c("nav",Fn,[Dn,(a(!0),c(M,null,E(i(e).nav,n=>(a(),c(M,{key:n.text},["link"in n?(a(),b(Cn,{key:0,item:n},null,8,["item"])):(a(),b(Hn,{key:1,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),Un=k(On,[["__scopeId","data-v-f732b5d0"]]);function Gn(o){const{localeIndex:e,theme:t}=V();function s(n){var A,B,L;const r=n.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",p=h&&((L=(B=u.locales)==null?void 0:B[e.value])==null?void 0:L.translations)||null,g=h&&u.translations||null;let y=p,P=g,I=o;const N=r.pop();for(const U of r){let G=null;const K=I==null?void 0:I[U];K&&(G=I=K);const ne=P==null?void 0:P[U];ne&&(G=P=ne);const ae=y==null?void 0:y[U];ae&&(G=y=ae),K||(I=G),ne||(P=G),ae||(y=G)}return(y==null?void 0:y[N])??(P==null?void 0:P[N])??(I==null?void 0:I[N])??""}return s}const jn=["aria-label"],zn={class:"DocSearch-Button-Container"},qn=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Wn={class:"DocSearch-Button-Placeholder"},Kn=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=Gn({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[v("span",zn,[qn,v("span",Wn,S(i(t)("button.buttonText")),1)]),Kn],8,jn))}}),Rn={class:"VPNavBarSearch"},Jn={id:"local-search"},Yn={key:1,id:"docsearch"},Qn=_({__name:"VPNavBarSearch",setup(o){const e=()=>null,t=()=>null,{theme:s}=V(),n=w(!1),r=w(!1);z(()=>{});function u(){n.value||(n.value=!0,setTimeout(h,16))}function h(){const y=new Event("keydown");y.key="k",y.metaKey=!0,window.dispatchEvent(y),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}const p=w(!1),g="";return(y,P)=>{var I;return a(),c("div",Rn,[i(g)==="local"?(a(),c(M,{key:0},[p.value?(a(),b(i(e),{key:0,onClose:P[0]||(P[0]=N=>p.value=!1)})):f("",!0),v("div",Jn,[m(ge,{onClick:P[1]||(P[1]=N=>p.value=!0)})])],64)):i(g)==="algolia"?(a(),c(M,{key:1},[n.value?(a(),b(i(t),{key:0,algolia:((I=i(s).search)==null?void 0:I.options)??i(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=N=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),c("div",Yn,[m(ge,{onClick:u})]))],64)):f("",!0)])}}}),Xn=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>i(e).socialLinks?(a(),b($e,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Zn=k(Xn,[["__scopeId","data-v-ef6192dc"]]),xn=["href","rel","target"],ea={key:1},ta={key:2},oa=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=V(),{hasSidebar:s}=O(),{currentLang:n}=Y(),r=$(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),u=$(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),h=$(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,g)=>(a(),c("div",{class:T(["VPNavBarTitle",{"has-sidebar":i(s)}])},[v("a",{class:"title",href:r.value??i(he)(i(n).link),rel:u.value,target:h.value},[l(p.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),b(Z,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):f("",!0),i(t).siteTitle?(a(),c("span",ea,S(i(t).siteTitle),1)):i(t).siteTitle===void 0?(a(),c("span",ta,S(i(e).title),1)):f("",!0),l(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,xn)],2))}}),sa=k(oa,[["__scopeId","data-v-0ad69264"]]),na={class:"items"},aa={class:"title"},ra=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=V(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,r)=>i(t).length&&i(s).label?(a(),b(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:d(()=>[v("div",na,[v("p",aa,S(i(s).label),1),(a(!0),c(M,null,E(i(t),u=>(a(),b(se,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),ia=k(ra,[["__scopeId","data-v-acee064b"]]),la=o=>(C("data-v-844edcde"),o=o(),H(),o),ca={class:"wrapper"},ua={class:"container"},da={class:"title"},va={class:"content"},pa={class:"content-body"},ha=la(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),fa=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const{y:e}=Se(),{hasSidebar:t}=O(),{frontmatter:s}=V(),n=w({});return ye(()=>{n.value={"has-sidebar":t.value,home:s.value.layout==="home",top:e.value===0}}),(r,u)=>(a(),c("div",{class:T(["VPNavBar",n.value])},[v("div",ca,[v("div",ua,[v("div",da,[m(sa,null,{"nav-bar-title-before":d(()=>[l(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",va,[v("div",pa,[l(r.$slots,"nav-bar-content-before",{},void 0,!0),m(Qn,{class:"search"}),m(Un,{class:"menu"}),m(ia,{class:"translations"}),m(js,{class:"appearance"}),m(Zn,{class:"social-links"}),m(Ln,{class:"extra"}),l(r.$slots,"nav-bar-content-after",{},void 0,!0),m(Mn,{class:"hamburger",active:r.isScreenOpen,onClick:u[0]||(u[0]=h=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),ha],2))}}),_a=k(fa,[["__scopeId","data-v-844edcde"]]),ma={key:0,class:"VPNavScreenAppearance"},ka={class:"text"},ba=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=V();return(s,n)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),c("div",ma,[v("p",ka,S(i(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),$a=k(ba,[["__scopeId","data-v-338d9b48"]]),ga=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,s)=>(a(),b(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:d(()=>[F(S(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),ya=k(ga,[["__scopeId","data-v-fe523e3d"]]),Pa=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,s)=>(a(),b(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:d(()=>[F(S(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),He=k(Pa,[["__scopeId","data-v-aea78dd1"]]),Va={class:"VPNavScreenMenuGroupSection"},La={key:0,class:"title"},Sa=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Va,[e.text?(a(),c("p",La,S(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,s=>(a(),b(He,{key:s.text,item:s},null,8,["item"]))),128))]))}}),wa=k(Sa,[["__scopeId","data-v-f60dbfa7"]]),Ia=o=>(C("data-v-d2212c70"),o=o(),H(),o),Ta=["aria-controls","aria-expanded"],Na=["innerHTML"],Ma=Ia(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Aa=["id"],Ba={key:1,class:"group"},Ca=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=w(!1),s=$(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(r,u)=>(a(),c("div",{class:T(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[v("span",{class:"button-text",innerHTML:r.text},null,8,Na),Ma],8,Ta),v("div",{id:s.value,class:"items"},[(a(!0),c(M,null,E(r.items,h=>(a(),c(M,{key:h.text},["link"in h?(a(),c("div",{key:h.text,class:"item"},[m(He,{item:h},null,8,["item"])])):(a(),c("div",Ba,[m(wa,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Aa)],2))}}),Ha=k(Ca,[["__scopeId","data-v-d2212c70"]]),Ea={key:0,class:"VPNavScreenMenu"},Fa=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=V();return(t,s)=>i(e).nav?(a(),c("nav",Ea,[(a(!0),c(M,null,E(i(e).nav,n=>(a(),c(M,{key:n.text},["link"in n?(a(),b(ya,{key:0,item:n},null,8,["item"])):(a(),b(Ha,{key:1,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Da=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>i(e).socialLinks?(a(),b($e,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Ee=o=>(C("data-v-516e4bc3"),o=o(),H(),o),Oa=Ee(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Ua=Ee(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ga={class:"list"},ja=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=w(!1);function n(){s.value=!s.value}return(r,u)=>i(e).length&&i(t).label?(a(),c("div",{key:0,class:T(["VPNavScreenTranslations",{open:s.value}])},[v("button",{class:"title",onClick:n},[Oa,F(" "+S(i(t).label)+" ",1),Ua]),v("ul",Ga,[(a(!0),c(M,null,E(i(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(D,{class:"link",href:h.link},{default:d(()=>[F(S(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),za=k(ja,[["__scopeId","data-v-516e4bc3"]]),qa={class:"container"},Wa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=w(null),t=we(J?document.body:null);return(s,n)=>(a(),b(de,{name:"fade",onEnter:n[0]||(n[0]=r=>t.value=!0),onAfterLeave:n[1]||(n[1]=r=>t.value=!1)},{default:d(()=>[s.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",qa,[l(s.$slots,"nav-screen-content-before",{},void 0,!0),m(Fa,{class:"menu"}),m(za,{class:"translations"}),m($a,{class:"appearance"}),m(Da,{class:"social-links"}),l(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ka=k(Wa,[["__scopeId","data-v-57cce842"]]),Ra={key:0,class:"VPNav"},Ja=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=Ns(),{frontmatter:n}=V(),r=$(()=>n.value.navbar!==!1);return Ie("close-screen",t),x(()=>{J&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(u,h)=>r.value?(a(),c("header",Ra,[m(_a,{"is-screen-open":i(e),onToggleScreen:i(s)},{"nav-bar-title-before":d(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Ka,{open:i(e)},{"nav-screen-content-before":d(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Ya=k(Ja,[["__scopeId","data-v-7ad780c2"]]),Fe=o=>(C("data-v-c24f735a"),o=o(),H(),o),Qa=["role","tabindex"],Xa=Fe(()=>v("div",{class:"indicator"},null,-1)),Za=Fe(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),xa=[Za],er={key:1,class:"items"},tr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:r,hasActiveLink:u,hasChildren:h,toggle:p}=kt($(()=>e.item)),g=$(()=>h.value?"section":"div"),y=$(()=>n.value?"a":"div"),P=$(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),I=$(()=>n.value?void 0:"button"),N=$(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":r.value},{"has-active":u.value}]);function A(L){"key"in L&&L.key!=="Enter"||!e.item.link&&p()}function B(){e.item.link&&p()}return(L,U)=>{const G=W("VPSidebarItem",!0);return a(),b(R(g.value),{class:T(["VPSidebarItem",N.value])},{default:d(()=>[L.item.text?(a(),c("div",Q({key:0,class:"item",role:I.value},Qe(L.item.items?{click:A,keydown:A}:{},!0),{tabindex:L.item.items&&0}),[Xa,L.item.link?(a(),b(D,{key:0,tag:y.value,class:"link",href:L.item.link,rel:L.item.rel,target:L.item.target},{default:d(()=>[(a(),b(R(P.value),{class:"text",innerHTML:L.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),b(R(P.value),{key:1,class:"text",innerHTML:L.item.text},null,8,["innerHTML"])),L.item.collapsed!=null&&L.item.items&&L.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:Ye(B,["enter"]),tabindex:"0"},xa,32)):f("",!0)],16,Qa)):f("",!0),L.item.items&&L.item.items.length?(a(),c("div",er,[L.depth<5?(a(!0),c(M,{key:0},E(L.item.items,K=>(a(),b(G,{key:K.text,item:K,depth:L.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),or=k(tr,[["__scopeId","data-v-c24f735a"]]),De=o=>(C("data-v-4871f9f5"),o=o(),H(),o),sr=De(()=>v("div",{class:"curtain"},null,-1)),nr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},ar=De(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),rr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=O(),s=o,n=w(null),r=we(J?document.body:null);return q([s,n],()=>{var u;s.open?(r.value=!0,(u=n.value)==null||u.focus()):r.value=!1},{immediate:!0,flush:"post"}),(u,h)=>i(t)?(a(),c("aside",{key:0,class:T(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:n,onClick:h[0]||(h[0]=Xe(()=>{},["stop"]))},[sr,v("nav",nr,[ar,l(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),c(M,null,E(i(e),p=>(a(),c("div",{key:p.text,class:"group"},[m(or,{item:p,depth:0},null,8,["item"])]))),128)),l(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),ir=k(rr,[["__scopeId","data-v-4871f9f5"]]),lr=_({__name:"VPSkipLink",setup(o){const e=te(),t=w();q(()=>e.path,()=>t.value.focus());function s({target:n}){const r=document.getElementById(decodeURIComponent(n.hash).slice(1));if(r){const u=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",u)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",u),r.focus(),window.scrollTo(0,0)}}return(n,r)=>(a(),c(M,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),cr=k(lr,[["__scopeId","data-v-c8291ffa"]]),ur=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=O(),n=te();q(()=>n.path,s),mt(e,s);const{frontmatter:r}=V(),u=Ze(),h=$(()=>!!u["home-hero-image"]);return Ie("hero-image-slot-exists",h),(p,g)=>{const y=W("Content");return i(r).layout!==!1?(a(),c("div",{key:0,class:T(["Layout",i(r).pageClass])},[l(p.$slots,"layout-top",{},void 0,!0),m(cr),m(ot,{class:"backdrop",show:i(e),onClick:i(s)},null,8,["show","onClick"]),m(Ya,null,{"nav-bar-title-before":d(()=>[l(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":d(()=>[l(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Ts,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),m(ir,{open:i(e)},{"sidebar-nav-before":d(()=>[l(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":d(()=>[l(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(us,null,{"page-top":d(()=>[l(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":d(()=>[l(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":d(()=>[l(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":d(()=>[l(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":d(()=>[l(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":d(()=>[l(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(fs),l(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),b(y,{key:1}))}}}),dr=k(ur,[["__scopeId","data-v-d8b57b2d"]]),pr={Layout:dr,enhanceApp:({app:o})=>{o.component("Badge",xe)}};export{pr as t}; diff --git a/assets/examples_index.md.BZpxqBm7.lean.js b/assets/examples_index.md.BVeRSTQC.js similarity index 77% rename from assets/examples_index.md.BZpxqBm7.lean.js rename to assets/examples_index.md.BVeRSTQC.js index 40fac5a..12d85ad 100644 --- a/assets/examples_index.md.BZpxqBm7.lean.js +++ b/assets/examples_index.md.BVeRSTQC.js @@ -1 +1 @@ -import{_ as a,c as t,o as s,m as e,a as n}from"./chunks/framework.NdlCD-r1.js";const f=JSON.parse('{"title":"Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples/index.md","filePath":"examples/index.md","lastUpdated":1714127413000}'),o={name:"examples/index.md"},r=e("h1",{id:"examples",tabindex:"-1"},[n("Examples "),e("a",{class:"header-anchor",href:"#examples","aria-label":'Permalink to "Examples"'},"​")],-1),d=[r];function l(c,i,p,m,x,_){return s(),t("div",null,d)}const u=a(o,[["render",l]]);export{f as __pageData,u as default}; +import{_ as a,c as t,o as s,m as e,a as n}from"./chunks/framework.yUIHRp4d.js";const f=JSON.parse('{"title":"Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples/index.md","filePath":"examples/index.md","lastUpdated":1714345266000}'),o={name:"examples/index.md"},r=e("h1",{id:"examples",tabindex:"-1"},[n("Examples "),e("a",{class:"header-anchor",href:"#examples","aria-label":'Permalink to "Examples"'},"​")],-1),d=[r];function l(c,i,p,m,x,_){return s(),t("div",null,d)}const u=a(o,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/examples_index.md.BZpxqBm7.js b/assets/examples_index.md.BVeRSTQC.lean.js similarity index 77% rename from assets/examples_index.md.BZpxqBm7.js rename to assets/examples_index.md.BVeRSTQC.lean.js index 40fac5a..12d85ad 100644 --- a/assets/examples_index.md.BZpxqBm7.js +++ b/assets/examples_index.md.BVeRSTQC.lean.js @@ -1 +1 @@ -import{_ as a,c as t,o as s,m as e,a as n}from"./chunks/framework.NdlCD-r1.js";const f=JSON.parse('{"title":"Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples/index.md","filePath":"examples/index.md","lastUpdated":1714127413000}'),o={name:"examples/index.md"},r=e("h1",{id:"examples",tabindex:"-1"},[n("Examples "),e("a",{class:"header-anchor",href:"#examples","aria-label":'Permalink to "Examples"'},"​")],-1),d=[r];function l(c,i,p,m,x,_){return s(),t("div",null,d)}const u=a(o,[["render",l]]);export{f as __pageData,u as default}; +import{_ as a,c as t,o as s,m as e,a as n}from"./chunks/framework.yUIHRp4d.js";const f=JSON.parse('{"title":"Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples/index.md","filePath":"examples/index.md","lastUpdated":1714345266000}'),o={name:"examples/index.md"},r=e("h1",{id:"examples",tabindex:"-1"},[n("Examples "),e("a",{class:"header-anchor",href:"#examples","aria-label":'Permalink to "Examples"'},"​")],-1),d=[r];function l(c,i,p,m,x,_){return s(),t("div",null,d)}const u=a(o,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/getting-started_concepts.md.CIKcgNgX.js b/assets/getting-started_concepts.md.CZm4ephB.js similarity index 96% rename from assets/getting-started_concepts.md.CIKcgNgX.js rename to assets/getting-started_concepts.md.CZm4ephB.js index b984564..13e016e 100644 --- a/assets/getting-started_concepts.md.CIKcgNgX.js +++ b/assets/getting-started_concepts.md.CZm4ephB.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a2 as o}from"./chunks/framework.NdlCD-r1.js";const f=JSON.parse('{"title":"Concepts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/concepts.md","filePath":"getting-started/concepts.md","lastUpdated":1714127413000}'),r={name:"getting-started/concepts.md"},i=o('

Concepts

Generally, the terminology and ideas from Piral have been transported over.

App Shell / Piral Instance

An app shell (or Piral instance) is the main orchestration point. It must include the orchestrator, which is capable of loading the micro frontends and render their components.

For Piral.Blazor.Core (SPA) the app shell is a JavaScript project based on piral (npm package). It may already come with piral-blazor installed to provide Blazor functionality. Alternatively, micro frontends are regarded as standalone, with piral-blazor being used directly in the micro frontend.

For Piral.Blazor.Orchestrator (server) the app shell is your ASP.NET Core application referencing the NuGet package. It needs to be set up in the way that is described in this documentation.

Micro Frontend / Pilet

A micro frontend (or pilet) is a module that can be loaded into an app shell. You can think of it as a plugin. A micro frontend can register / provide domain-specific components that are then rendered where specified. While a SPA micro frontend may come with all kinds of components (e.g., Angular, React, ... - not only Blazor), a server micro frontend can only register Blazor components.

A micro frontend starts as a Razor Component Library (RCL), that is different to your usual RCL in the way how it is consumed. While a standard RCL is used directly (reference the assembly, use the components with their fully qualified names), a micro frontend is used indirectly. It binds to certain registrations, e.g., to include a page, a menu item, or just some generic component.

Micro Frontend Discovery / Feed Service

A micro frontend discovery service (or feed service) is a web service providing an API to publish or consume micro frontends. Usually, you want to access a certain feed that belongs to your application. A feed is a collection of micro frontends. Only users / systems that you allowed should be capable of publishing micro frontends (completely new or updated) to your feed.

A feed service is not required to operate Piral.Blazor, but we strongly recommend that you use some approach that allows such scaling. There is a free community service available from us. Alternatively, you can also get a licensed Docker image. For the latter you can also start with a free trial.

Pilet API

Each micro frontend has a lifecycle that starts with a setup and ends with a teardown method. In the SPA method the whole lifecycle is provided in JavaScript, which is automatically generated and - ideally - does not need to be modified. For the server integration the lifecycle is contained in a class that inherits from IMfModule.

Once the setup method of your micro frontend is called you receive an object with some methods. This object (or more specifically the methods available on the object) are called the pilet API. It's the interface that can be used by a micro frontend to register its functionality in the app shell.

Emulator

To allow local development of a micro frontend without needing to have or start the app shell locally there is a special mechanism known as an emulator. An emulator packages a dedicated debug build of the app shell in a package. For the SPA method this is an npm package, while for the server this is a NuGet package.

In any case the general idea is that you'll only need to reference this to debug your micro frontend (within the app shell - as you will later see it).

This idea is called emulator as it emulates a full runtime environment. You can also think of it as the runtime emulator from serverless environment (e.g., AWS Lambda, Azure Functions) or an emulator of your mobile phone OS (e.g., Android) when developing an app for it.

',19),n=[i];function l(s,c,d,h,p,m){return a(),t("div",null,n)}const y=e(r,[["render",l]]);export{f as __pageData,y as default}; +import{_ as e,c as t,o as a,a2 as o}from"./chunks/framework.yUIHRp4d.js";const f=JSON.parse('{"title":"Concepts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/concepts.md","filePath":"getting-started/concepts.md","lastUpdated":1714345266000}'),r={name:"getting-started/concepts.md"},i=o('

Concepts

Generally, the terminology and ideas from Piral have been transported over.

App Shell / Piral Instance

An app shell (or Piral instance) is the main orchestration point. It must include the orchestrator, which is capable of loading the micro frontends and render their components.

For Piral.Blazor.Core (SPA) the app shell is a JavaScript project based on piral (npm package). It may already come with piral-blazor installed to provide Blazor functionality. Alternatively, micro frontends are regarded as standalone, with piral-blazor being used directly in the micro frontend.

For Piral.Blazor.Orchestrator (server) the app shell is your ASP.NET Core application referencing the NuGet package. It needs to be set up in the way that is described in this documentation.

Micro Frontend / Pilet

A micro frontend (or pilet) is a module that can be loaded into an app shell. You can think of it as a plugin. A micro frontend can register / provide domain-specific components that are then rendered where specified. While a SPA micro frontend may come with all kinds of components (e.g., Angular, React, ... - not only Blazor), a server micro frontend can only register Blazor components.

A micro frontend starts as a Razor Component Library (RCL), that is different to your usual RCL in the way how it is consumed. While a standard RCL is used directly (reference the assembly, use the components with their fully qualified names), a micro frontend is used indirectly. It binds to certain registrations, e.g., to include a page, a menu item, or just some generic component.

Micro Frontend Discovery / Feed Service

A micro frontend discovery service (or feed service) is a web service providing an API to publish or consume micro frontends. Usually, you want to access a certain feed that belongs to your application. A feed is a collection of micro frontends. Only users / systems that you allowed should be capable of publishing micro frontends (completely new or updated) to your feed.

A feed service is not required to operate Piral.Blazor, but we strongly recommend that you use some approach that allows such scaling. There is a free community service available from us. Alternatively, you can also get a licensed Docker image. For the latter you can also start with a free trial.

Pilet API

Each micro frontend has a lifecycle that starts with a setup and ends with a teardown method. In the SPA method the whole lifecycle is provided in JavaScript, which is automatically generated and - ideally - does not need to be modified. For the server integration the lifecycle is contained in a class that inherits from IMfModule.

Once the setup method of your micro frontend is called you receive an object with some methods. This object (or more specifically the methods available on the object) are called the pilet API. It's the interface that can be used by a micro frontend to register its functionality in the app shell.

Emulator

To allow local development of a micro frontend without needing to have or start the app shell locally there is a special mechanism known as an emulator. An emulator packages a dedicated debug build of the app shell in a package. For the SPA method this is an npm package, while for the server this is a NuGet package.

In any case the general idea is that you'll only need to reference this to debug your micro frontend (within the app shell - as you will later see it).

This idea is called emulator as it emulates a full runtime environment. You can also think of it as the runtime emulator from serverless environment (e.g., AWS Lambda, Azure Functions) or an emulator of your mobile phone OS (e.g., Android) when developing an app for it.

',19),n=[i];function l(s,c,d,h,p,m){return a(),t("div",null,n)}const y=e(r,[["render",l]]);export{f as __pageData,y as default}; diff --git a/assets/getting-started_concepts.md.CIKcgNgX.lean.js b/assets/getting-started_concepts.md.CZm4ephB.lean.js similarity index 57% rename from assets/getting-started_concepts.md.CIKcgNgX.lean.js rename to assets/getting-started_concepts.md.CZm4ephB.lean.js index 6ac12b9..0522511 100644 --- a/assets/getting-started_concepts.md.CIKcgNgX.lean.js +++ b/assets/getting-started_concepts.md.CZm4ephB.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a2 as o}from"./chunks/framework.NdlCD-r1.js";const f=JSON.parse('{"title":"Concepts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/concepts.md","filePath":"getting-started/concepts.md","lastUpdated":1714127413000}'),r={name:"getting-started/concepts.md"},i=o("",19),n=[i];function l(s,c,d,h,p,m){return a(),t("div",null,n)}const y=e(r,[["render",l]]);export{f as __pageData,y as default}; +import{_ as e,c as t,o as a,a2 as o}from"./chunks/framework.yUIHRp4d.js";const f=JSON.parse('{"title":"Concepts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/concepts.md","filePath":"getting-started/concepts.md","lastUpdated":1714345266000}'),r={name:"getting-started/concepts.md"},i=o("",19),n=[i];function l(s,c,d,h,p,m){return a(),t("div",null,n)}const y=e(r,[["render",l]]);export{f as __pageData,y as default}; diff --git a/assets/getting-started_index.md.uW-pn0Vt.js b/assets/getting-started_index.md.B6hd8HOL.js similarity index 91% rename from assets/getting-started_index.md.uW-pn0Vt.js rename to assets/getting-started_index.md.B6hd8HOL.js index c97abfa..a4de02f 100644 --- a/assets/getting-started_index.md.uW-pn0Vt.js +++ b/assets/getting-started_index.md.B6hd8HOL.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a2 as o}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/index.md","filePath":"getting-started/index.md","lastUpdated":1714127413000}'),r={name:"getting-started/index.md"},i=o('

Getting Started

Piral.Blazor exists in multiple forms. Right now, we have:

  • Piral.Blazor.Core, which is made to be consumed in a JavaScript / SPA created with the Piral framework
  • Piral.Blazor.Orchestrator, which is made to be consumed in an ASP.NET Core web application to enable server-side micro frontends

While both are fundamentally different, they share the same goals and have an overlapping development philosophy.

INFO

Piral.Blazor.Core is never directly referenced, you'd rather install the blazor npm package.

In the future there will be an overlap between the two, for now you need to decide in the beginning. Usually, the decision is rather simple - it boils down to:

  • If you have an existing Blazor server application that you now want to continue developing using a micro frontend approach then use Piral.Blazor.Orchestrator
  • If you have an existing SPA that you want to extend with some component written in Blazor then aim for the Piral framework with Piral.Blazor.Core

Generally, Piral.Blazor.Orchestrator will allow you to do everything in Blazor while Piral.Blazor.Core will require you to work with TypeScript and other technologies such as React, too.

',8),n=[i];function l(d,c,s,h,p,u){return a(),t("div",null,n)}const _=e(r,[["render",l]]);export{g as __pageData,_ as default}; +import{_ as e,c as t,o as a,a2 as o}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/index.md","filePath":"getting-started/index.md","lastUpdated":1714345266000}'),r={name:"getting-started/index.md"},i=o('

Getting Started

Piral.Blazor exists in multiple forms. Right now, we have:

  • Piral.Blazor.Core, which is made to be consumed in a JavaScript / SPA created with the Piral framework
  • Piral.Blazor.Orchestrator, which is made to be consumed in an ASP.NET Core web application to enable server-side micro frontends

While both are fundamentally different, they share the same goals and have an overlapping development philosophy.

INFO

Piral.Blazor.Core is never directly referenced, you'd rather install the blazor npm package.

In the future there will be an overlap between the two, for now you need to decide in the beginning. Usually, the decision is rather simple - it boils down to:

  • If you have an existing Blazor server application that you now want to continue developing using a micro frontend approach then use Piral.Blazor.Orchestrator
  • If you have an existing SPA that you want to extend with some component written in Blazor then aim for the Piral framework with Piral.Blazor.Core

Generally, Piral.Blazor.Orchestrator will allow you to do everything in Blazor while Piral.Blazor.Core will require you to work with TypeScript and other technologies such as React, too.

',8),n=[i];function l(d,c,s,h,p,u){return a(),t("div",null,n)}const _=e(r,[["render",l]]);export{g as __pageData,_ as default}; diff --git a/assets/getting-started_index.md.uW-pn0Vt.lean.js b/assets/getting-started_index.md.B6hd8HOL.lean.js similarity index 57% rename from assets/getting-started_index.md.uW-pn0Vt.lean.js rename to assets/getting-started_index.md.B6hd8HOL.lean.js index d9a8af5..7ab9b5d 100644 --- a/assets/getting-started_index.md.uW-pn0Vt.lean.js +++ b/assets/getting-started_index.md.B6hd8HOL.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a2 as o}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/index.md","filePath":"getting-started/index.md","lastUpdated":1714127413000}'),r={name:"getting-started/index.md"},i=o("",8),n=[i];function l(d,c,s,h,p,u){return a(),t("div",null,n)}const _=e(r,[["render",l]]);export{g as __pageData,_ as default}; +import{_ as e,c as t,o as a,a2 as o}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/index.md","filePath":"getting-started/index.md","lastUpdated":1714345266000}'),r={name:"getting-started/index.md"},i=o("",8),n=[i];function l(d,c,s,h,p,u){return a(),t("div",null,n)}const _=e(r,[["render",l]]);export{g as __pageData,_ as default}; diff --git a/assets/getting-started_server_emulator.md.DxDB9wWc.js b/assets/getting-started_server_emulator.md.BmRo6yYD.js similarity index 95% rename from assets/getting-started_server_emulator.md.DxDB9wWc.js rename to assets/getting-started_server_emulator.md.BmRo6yYD.js index b681642..93e3580 100644 --- a/assets/getting-started_server_emulator.md.DxDB9wWc.js +++ b/assets/getting-started_server_emulator.md.BmRo6yYD.js @@ -1 +1 @@ -import{_ as e,c as t,o as i,a2 as a}from"./chunks/framework.NdlCD-r1.js";const b=JSON.parse('{"title":"Publishing the Emulator","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/emulator.md","filePath":"getting-started/server/emulator.md","lastUpdated":1714127413000}'),s={name:"getting-started/server/emulator.md"},o=a('

Publishing the Emulator

For developing a micro frontend you'll need an emulator. An emulator is just a NuGet package containing a special build of the app shell that you've build for running your micro frontends.

Publishing using the piral-server-server CLI

The command piral-blazor-server create-emulator can be used to create an emulator NuGet package for the current Piral.Blazor server, i.e., the app shell that should be used.

Example:

sh
piral-blazor-server create-emulator -o dist

This command creates an emulator NuGet package in the dist directory. The csproj file for the example above is assumed to be in the working directory. The NuGet package can then be published using nuget push or dotnet nuget push.

Publishing using the dotnet CLI

If you want to have full control then using a custom sequence for creating and publishing the emulator might be what you are looking for. For this you'll need the dotnet and the nuget CLI. You will also need to create a custom *.nuspec file.

We start the sequence by producing a release build of your application:

sh
dotnet publish -c Release

This will create the emulator's files in the publish directory (bin/Release/net8.0/publish).

Now create a NuGet config inside the bin/Release/net8.0/publish directory using the following properties:

  • Name of your app shell (or how you want to call the emulator package)
  • Version of your app shell
  • Proper description, author etc. fields

The files should be set to **/*, i.e., take all files of the publish directory and place it in the NuGet package.

You need the nuget command line tooling to run nuget pack without any compilation. If you only have dotnet then this won't work (as dotnet will only run against a csproj, which the publish folder does not have).

Once the *.nupkg file is ready you can publish it to the NuGet feed or your choice.

',18),l=[o];function n(r,h,c,d,u,p){return i(),t("div",null,l)}const m=e(s,[["render",n]]);export{b as __pageData,m as default}; +import{_ as e,c as t,o as i,a2 as a}from"./chunks/framework.yUIHRp4d.js";const b=JSON.parse('{"title":"Publishing the Emulator","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/emulator.md","filePath":"getting-started/server/emulator.md","lastUpdated":1714345266000}'),s={name:"getting-started/server/emulator.md"},o=a('

Publishing the Emulator

For developing a micro frontend you'll need an emulator. An emulator is just a NuGet package containing a special build of the app shell that you've build for running your micro frontends.

Publishing using the piral-server-server CLI

The command piral-blazor-server create-emulator can be used to create an emulator NuGet package for the current Piral.Blazor server, i.e., the app shell that should be used.

Example:

sh
piral-blazor-server create-emulator -o dist

This command creates an emulator NuGet package in the dist directory. The csproj file for the example above is assumed to be in the working directory. The NuGet package can then be published using nuget push or dotnet nuget push.

Publishing using the dotnet CLI

If you want to have full control then using a custom sequence for creating and publishing the emulator might be what you are looking for. For this you'll need the dotnet and the nuget CLI. You will also need to create a custom *.nuspec file.

We start the sequence by producing a release build of your application:

sh
dotnet publish -c Release

This will create the emulator's files in the publish directory (bin/Release/net8.0/publish).

Now create a NuGet config inside the bin/Release/net8.0/publish directory using the following properties:

  • Name of your app shell (or how you want to call the emulator package)
  • Version of your app shell
  • Proper description, author etc. fields

The files should be set to **/*, i.e., take all files of the publish directory and place it in the NuGet package.

You need the nuget command line tooling to run nuget pack without any compilation. If you only have dotnet then this won't work (as dotnet will only run against a csproj, which the publish folder does not have).

Once the *.nupkg file is ready you can publish it to the NuGet feed or your choice.

',18),l=[o];function n(r,h,c,d,u,p){return i(),t("div",null,l)}const m=e(s,[["render",n]]);export{b as __pageData,m as default}; diff --git a/assets/getting-started_server_emulator.md.DxDB9wWc.lean.js b/assets/getting-started_server_emulator.md.BmRo6yYD.lean.js similarity index 60% rename from assets/getting-started_server_emulator.md.DxDB9wWc.lean.js rename to assets/getting-started_server_emulator.md.BmRo6yYD.lean.js index 0c92d07..a7e2130 100644 --- a/assets/getting-started_server_emulator.md.DxDB9wWc.lean.js +++ b/assets/getting-started_server_emulator.md.BmRo6yYD.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as i,a2 as a}from"./chunks/framework.NdlCD-r1.js";const b=JSON.parse('{"title":"Publishing the Emulator","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/emulator.md","filePath":"getting-started/server/emulator.md","lastUpdated":1714127413000}'),s={name:"getting-started/server/emulator.md"},o=a("",18),l=[o];function n(r,h,c,d,u,p){return i(),t("div",null,l)}const m=e(s,[["render",n]]);export{b as __pageData,m as default}; +import{_ as e,c as t,o as i,a2 as a}from"./chunks/framework.yUIHRp4d.js";const b=JSON.parse('{"title":"Publishing the Emulator","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/emulator.md","filePath":"getting-started/server/emulator.md","lastUpdated":1714345266000}'),s={name:"getting-started/server/emulator.md"},o=a("",18),l=[o];function n(r,h,c,d,u,p){return i(),t("div",null,l)}const m=e(s,[["render",n]]);export{b as __pageData,m as default}; diff --git a/assets/getting-started_server_microfrontend.md.C49RkuTw.js b/assets/getting-started_server_microfrontend.md.B40AFEAX.js similarity index 99% rename from assets/getting-started_server_microfrontend.md.C49RkuTw.js rename to assets/getting-started_server_microfrontend.md.B40AFEAX.js index 3a51b94..bf9ba66 100644 --- a/assets/getting-started_server_microfrontend.md.C49RkuTw.js +++ b/assets/getting-started_server_microfrontend.md.B40AFEAX.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Micro Frontend Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/microfrontend.md","filePath":"getting-started/server/microfrontend.md","lastUpdated":1714127413000}'),t={name:"getting-started/server/microfrontend.md"},e=n(`

Micro Frontend Setup

In general, to create a Blazor pilet using Piral.Blazor.Server you should just create a Razor Component Library (RCL) project. This way, you will need to make the least changes.

Prerequisites

You will need to have an app shell using Piral.Blazor.Orchestrator available somewhere.

From scratch you can create a new Razor Component Library (RCL) project. By changing the csproj file's SDK to Piral.Blazor.Sdk you will be able to debug / develop this very conveniently.

The RCL has to be for .NET 8.

Preparation

You will need to leverage the Piral.Blazor.Sdk SDK in the csproj file like this:

xml
<Project Sdk="Piral.Blazor.Sdk/0.5.0">
+import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Micro Frontend Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/microfrontend.md","filePath":"getting-started/server/microfrontend.md","lastUpdated":1714345266000}'),t={name:"getting-started/server/microfrontend.md"},e=n(`

Micro Frontend Setup

In general, to create a Blazor pilet using Piral.Blazor.Server you should just create a Razor Component Library (RCL) project. This way, you will need to make the least changes.

Prerequisites

You will need to have an app shell using Piral.Blazor.Orchestrator available somewhere.

From scratch you can create a new Razor Component Library (RCL) project. By changing the csproj file's SDK to Piral.Blazor.Sdk you will be able to debug / develop this very conveniently.

The RCL has to be for .NET 8.

Preparation

You will need to leverage the Piral.Blazor.Sdk SDK in the csproj file like this:

xml
<Project Sdk="Piral.Blazor.Sdk/0.5.0">
 
   <PropertyGroup>
     <TargetFramework>net8.0</TargetFramework>
diff --git a/assets/getting-started_server_microfrontend.md.C49RkuTw.lean.js b/assets/getting-started_server_microfrontend.md.B40AFEAX.lean.js
similarity index 61%
rename from assets/getting-started_server_microfrontend.md.C49RkuTw.lean.js
rename to assets/getting-started_server_microfrontend.md.B40AFEAX.lean.js
index dc5391a..f79a56d 100644
--- a/assets/getting-started_server_microfrontend.md.C49RkuTw.lean.js
+++ b/assets/getting-started_server_microfrontend.md.B40AFEAX.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Micro Frontend Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/microfrontend.md","filePath":"getting-started/server/microfrontend.md","lastUpdated":1714127413000}'),t={name:"getting-started/server/microfrontend.md"},e=n("",31),l=[e];function p(h,k,r,o,d,E){return a(),i("div",null,l)}const y=s(t,[["render",p]]);export{c as __pageData,y as default};
+import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Micro Frontend Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/microfrontend.md","filePath":"getting-started/server/microfrontend.md","lastUpdated":1714345266000}'),t={name:"getting-started/server/microfrontend.md"},e=n("",31),l=[e];function p(h,k,r,o,d,E){return a(),i("div",null,l)}const y=s(t,[["render",p]]);export{c as __pageData,y as default};
diff --git a/assets/getting-started_server_publishing.md.DOPJL4Ub.js b/assets/getting-started_server_publishing.md.D04JeNly.js
similarity index 96%
rename from assets/getting-started_server_publishing.md.DOPJL4Ub.js
rename to assets/getting-started_server_publishing.md.D04JeNly.js
index f05f677..5e03085 100644
--- a/assets/getting-started_server_publishing.md.DOPJL4Ub.js
+++ b/assets/getting-started_server_publishing.md.D04JeNly.js
@@ -1 +1 @@
-import{_ as e,c as i,o as s,a2 as a}from"./chunks/framework.NdlCD-r1.js";const k=JSON.parse('{"title":"Publishing a Micro Frontend","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/publishing.md","filePath":"getting-started/server/publishing.md","lastUpdated":1714127413000}'),t={name:"getting-started/server/publishing.md"},n=a('

Publishing a Micro Frontend

Micro frontends should be published to a discovery service as well as in form of a NuGet package. If you use the Piral Cloud Feed Service you can also just publish them as NuGet package; the discovery service will do the rest for you.

Publishing using the piral-server-server CLI

First, make sure you have the CLI installed. If not, do so using this command:

sh
dotnet tool install --global Piral.Blazor.Cli

This will install the piral-blazor-server tool in the standard binary directory. Now you should be able to use it already.

Now, you can use the publish-microfrontend command:

sh
piral-blazor-server publish-microfrontend --source ./SomeMf --url https://feed.piral.cloud/api/v1/nuget/myfeed/index.json --key abcdef1234

This would publish the micro frontend contained in the ./SomeMf directory to the myfeed feed of the publicly available community edition of the Piral Cloud Feed Service.

Publishing using the dotnet CLI

Alternatively, either use the nuget or dotnet tool to publish the NuGet package:

sh
dotnet nuget push SomeMf.nupkg --api-key abcdef1234 --source https://feed.piral.cloud/api/v1/nuget/myfeed/index.json

This works almost exactly the same as the piral-blazor-server tool, however, it expects you to have the build and pack command applied separately / beforehand.

Publishing using Visual Studio

Finally, you can also publish a micro frontend using the Publish NuGet package feature of Visual Studio.

For this to work you need to have configured a special NuGet feed in Visual Studio using the URL and credentials that you've set up for your micro frontends feed in the Piral Cloud Feed Service.

',16),l=[n];function o(h,r,d,p,u,c){return s(),i("div",null,l)}const b=e(t,[["render",o]]);export{k as __pageData,b as default}; +import{_ as e,c as i,o as s,a2 as a}from"./chunks/framework.yUIHRp4d.js";const k=JSON.parse('{"title":"Publishing a Micro Frontend","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/publishing.md","filePath":"getting-started/server/publishing.md","lastUpdated":1714345266000}'),t={name:"getting-started/server/publishing.md"},n=a('

Publishing a Micro Frontend

Micro frontends should be published to a discovery service as well as in form of a NuGet package. If you use the Piral Cloud Feed Service you can also just publish them as NuGet package; the discovery service will do the rest for you.

Publishing using the piral-server-server CLI

First, make sure you have the CLI installed. If not, do so using this command:

sh
dotnet tool install --global Piral.Blazor.Cli

This will install the piral-blazor-server tool in the standard binary directory. Now you should be able to use it already.

Now, you can use the publish-microfrontend command:

sh
piral-blazor-server publish-microfrontend --source ./SomeMf --url https://feed.piral.cloud/api/v1/nuget/myfeed/index.json --key abcdef1234

This would publish the micro frontend contained in the ./SomeMf directory to the myfeed feed of the publicly available community edition of the Piral Cloud Feed Service.

Publishing using the dotnet CLI

Alternatively, either use the nuget or dotnet tool to publish the NuGet package:

sh
dotnet nuget push SomeMf.nupkg --api-key abcdef1234 --source https://feed.piral.cloud/api/v1/nuget/myfeed/index.json

This works almost exactly the same as the piral-blazor-server tool, however, it expects you to have the build and pack command applied separately / beforehand.

Publishing using Visual Studio

Finally, you can also publish a micro frontend using the Publish NuGet package feature of Visual Studio.

For this to work you need to have configured a special NuGet feed in Visual Studio using the URL and credentials that you've set up for your micro frontends feed in the Piral Cloud Feed Service.

',16),l=[n];function o(h,r,d,p,u,c){return s(),i("div",null,l)}const b=e(t,[["render",o]]);export{k as __pageData,b as default}; diff --git a/assets/getting-started_server_publishing.md.DOPJL4Ub.lean.js b/assets/getting-started_server_publishing.md.D04JeNly.lean.js similarity index 61% rename from assets/getting-started_server_publishing.md.DOPJL4Ub.lean.js rename to assets/getting-started_server_publishing.md.D04JeNly.lean.js index 8e8cce7..798bdcf 100644 --- a/assets/getting-started_server_publishing.md.DOPJL4Ub.lean.js +++ b/assets/getting-started_server_publishing.md.D04JeNly.lean.js @@ -1 +1 @@ -import{_ as e,c as i,o as s,a2 as a}from"./chunks/framework.NdlCD-r1.js";const k=JSON.parse('{"title":"Publishing a Micro Frontend","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/publishing.md","filePath":"getting-started/server/publishing.md","lastUpdated":1714127413000}'),t={name:"getting-started/server/publishing.md"},n=a("",16),l=[n];function o(h,r,d,p,u,c){return s(),i("div",null,l)}const b=e(t,[["render",o]]);export{k as __pageData,b as default}; +import{_ as e,c as i,o as s,a2 as a}from"./chunks/framework.yUIHRp4d.js";const k=JSON.parse('{"title":"Publishing a Micro Frontend","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/publishing.md","filePath":"getting-started/server/publishing.md","lastUpdated":1714345266000}'),t={name:"getting-started/server/publishing.md"},n=a("",16),l=[n];function o(h,r,d,p,u,c){return s(),i("div",null,l)}const b=e(t,[["render",o]]);export{k as __pageData,b as default}; diff --git a/assets/getting-started_server_setup.md.C7UtS3zP.js b/assets/getting-started_server_setup.md.DB5ZqlDD.js similarity index 99% rename from assets/getting-started_server_setup.md.C7UtS3zP.js rename to assets/getting-started_server_setup.md.DB5ZqlDD.js index 2c13b76..8913d56 100644 --- a/assets/getting-started_server_setup.md.C7UtS3zP.js +++ b/assets/getting-started_server_setup.md.DB5ZqlDD.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const y=JSON.parse('{"title":"Server Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/setup.md","filePath":"getting-started/server/setup.md","lastUpdated":1714127413000}'),n={name:"getting-started/server/setup.md"},l=t(`

Server Setup

For the server you'll need to build a proper app shell first. If you already have one and need to get started with a micro frontend look at the next chapter.

Preparation

For using Piral.Blazor.Server you'll need an ASP.NET Core project using Blazor (server).

You'll only need to add a single NuGet package to the project:

ps1
install-package Piral.Blazor.Orchestrator

With the package installed you'll need to configure your project to actually use Piral.Blazor.Orchestrator.

cs
// Important - an \`HttpClient\` needs to be present for the MfDiscoveryLoaderService - for
+import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const y=JSON.parse('{"title":"Server Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/setup.md","filePath":"getting-started/server/setup.md","lastUpdated":1714345266000}'),n={name:"getting-started/server/setup.md"},l=t(`

Server Setup

For the server you'll need to build a proper app shell first. If you already have one and need to get started with a micro frontend look at the next chapter.

Preparation

For using Piral.Blazor.Server you'll need an ASP.NET Core project using Blazor (server).

You'll only need to add a single NuGet package to the project:

ps1
install-package Piral.Blazor.Orchestrator

With the package installed you'll need to configure your project to actually use Piral.Blazor.Orchestrator.

cs
// Important - an \`HttpClient\` needs to be present for the MfDiscoveryLoaderService - for
 // other services it might not be needed; so you can regard this as optional
 builder.Services.AddHttpClient();
 // Add DI services
diff --git a/assets/getting-started_server_setup.md.C7UtS3zP.lean.js b/assets/getting-started_server_setup.md.DB5ZqlDD.lean.js
similarity index 58%
rename from assets/getting-started_server_setup.md.C7UtS3zP.lean.js
rename to assets/getting-started_server_setup.md.DB5ZqlDD.lean.js
index dccd40c..d31cec4 100644
--- a/assets/getting-started_server_setup.md.C7UtS3zP.lean.js
+++ b/assets/getting-started_server_setup.md.DB5ZqlDD.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const y=JSON.parse('{"title":"Server Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/setup.md","filePath":"getting-started/server/setup.md","lastUpdated":1714127413000}'),n={name:"getting-started/server/setup.md"},l=t("",35),h=[l];function e(p,k,E,r,d,o){return a(),i("div",null,h)}const c=s(n,[["render",e]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const y=JSON.parse('{"title":"Server Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/setup.md","filePath":"getting-started/server/setup.md","lastUpdated":1714345266000}'),n={name:"getting-started/server/setup.md"},l=t("",35),h=[l];function e(p,k,E,r,d,o){return a(),i("div",null,h)}const c=s(n,[["render",e]]);export{y as __pageData,c as default};
diff --git a/assets/getting-started_server_tooling.md.B-ySUDg6.js b/assets/getting-started_server_tooling.md.CuSINiVK.js
similarity index 97%
rename from assets/getting-started_server_tooling.md.B-ySUDg6.js
rename to assets/getting-started_server_tooling.md.CuSINiVK.js
index 1c0966a..c2565a5 100644
--- a/assets/getting-started_server_tooling.md.B-ySUDg6.js
+++ b/assets/getting-started_server_tooling.md.CuSINiVK.js
@@ -1 +1 @@
-import{_ as e,c as a,o as i,a2 as s}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Command Line Tooling","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/tooling.md","filePath":"getting-started/server/tooling.md","lastUpdated":1714127413000}'),t={name:"getting-started/server/tooling.md"},l=s('

Command Line Tooling

The dotnet tool (CLI) for working with Piral.Blazor.Server-based applications.

Installation

To install the tool globally run the following command:

sh
dotnet tool install --global Piral.Blazor.Cli

This will install the piral-blazor-server tool in the standard binary directory. Now you should be able to use it already.

Running

You can invoke the the tool by running the following command:

sh
piral-blazor-server <command>

where <command is one of the following commands:

  • create-emulator
  • prefill-cache
  • publish-microfrontend

The following sections go into details on these commands.

Create Emulator

The command piral-blazor-server create-emulator can be used to create an emulator NuGet package for the current Piral.Blazor server (also referred to as app shell).

Example:

sh
piral-blazor-server create-emulator -o dist

Creates an emulator (NuGet package) in the dist directory. The csproj file for the example above is assumed to be in the working directory.

Prefill Cache

The command piral-blazor-server prefill-cache can be used to prefill the cache. This is useful when you want to operate on a static / pre-configured set of micro frontends. Also, it helps to improve the startup performance. Usually, this command would be used in a CI/CD pipeline, i.e., before the server is actually started or run somewhere.

Example:

sh
piral-blazor-server prefill-cache --environment Production --source ./App --output ./App/.cache

Prefills the cache using the appsettings.Production.json and appsettings.json files from the App subdirectory of the current working directory. Puts the files in the App/.cache directory.

Publish Micro Frontend

The command piral-blazor-server publish-microfrontend can be used to build and publish a micro frontend. This builds, packs, and publishes the micro frontend as a NuGet package.

Example:

sh
piral-blazor-server publish-microfrontend --source ./SomeMf --url https://feed.piral.cloud/api/v1/nuget/myfeed --key abcdef1234

Builds, packs, and publishes the project found in the SomeMf directory of the current working directory. Uses the given URL as NuGet feed. The authentication is based on the provided key.

',28),n=[l];function o(r,h,p,d,c,k){return i(),a("div",null,n)}const m=e(t,[["render",o]]);export{g as __pageData,m as default}; +import{_ as e,c as a,o as i,a2 as s}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Command Line Tooling","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/tooling.md","filePath":"getting-started/server/tooling.md","lastUpdated":1714345266000}'),t={name:"getting-started/server/tooling.md"},l=s('

Command Line Tooling

The dotnet tool (CLI) for working with Piral.Blazor.Server-based applications.

Installation

To install the tool globally run the following command:

sh
dotnet tool install --global Piral.Blazor.Cli

This will install the piral-blazor-server tool in the standard binary directory. Now you should be able to use it already.

Running

You can invoke the the tool by running the following command:

sh
piral-blazor-server <command>

where <command is one of the following commands:

  • create-emulator
  • prefill-cache
  • publish-microfrontend

The following sections go into details on these commands.

Create Emulator

The command piral-blazor-server create-emulator can be used to create an emulator NuGet package for the current Piral.Blazor server (also referred to as app shell).

Example:

sh
piral-blazor-server create-emulator -o dist

Creates an emulator (NuGet package) in the dist directory. The csproj file for the example above is assumed to be in the working directory.

Prefill Cache

The command piral-blazor-server prefill-cache can be used to prefill the cache. This is useful when you want to operate on a static / pre-configured set of micro frontends. Also, it helps to improve the startup performance. Usually, this command would be used in a CI/CD pipeline, i.e., before the server is actually started or run somewhere.

Example:

sh
piral-blazor-server prefill-cache --environment Production --source ./App --output ./App/.cache

Prefills the cache using the appsettings.Production.json and appsettings.json files from the App subdirectory of the current working directory. Puts the files in the App/.cache directory.

Publish Micro Frontend

The command piral-blazor-server publish-microfrontend can be used to build and publish a micro frontend. This builds, packs, and publishes the micro frontend as a NuGet package.

Example:

sh
piral-blazor-server publish-microfrontend --source ./SomeMf --url https://feed.piral.cloud/api/v1/nuget/myfeed --key abcdef1234

Builds, packs, and publishes the project found in the SomeMf directory of the current working directory. Uses the given URL as NuGet feed. The authentication is based on the provided key.

',28),n=[l];function o(r,h,p,d,c,k){return i(),a("div",null,n)}const m=e(t,[["render",o]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_server_tooling.md.B-ySUDg6.lean.js b/assets/getting-started_server_tooling.md.CuSINiVK.lean.js similarity index 60% rename from assets/getting-started_server_tooling.md.B-ySUDg6.lean.js rename to assets/getting-started_server_tooling.md.CuSINiVK.lean.js index 166f18f..d07ae61 100644 --- a/assets/getting-started_server_tooling.md.B-ySUDg6.lean.js +++ b/assets/getting-started_server_tooling.md.CuSINiVK.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as i,a2 as s}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Command Line Tooling","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/tooling.md","filePath":"getting-started/server/tooling.md","lastUpdated":1714127413000}'),t={name:"getting-started/server/tooling.md"},l=s("",28),n=[l];function o(r,h,p,d,c,k){return i(),a("div",null,n)}const m=e(t,[["render",o]]);export{g as __pageData,m as default}; +import{_ as e,c as a,o as i,a2 as s}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Command Line Tooling","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/server/tooling.md","filePath":"getting-started/server/tooling.md","lastUpdated":1714345266000}'),t={name:"getting-started/server/tooling.md"},l=s("",28),n=[l];function o(r,h,p,d,c,k){return i(),a("div",null,n)}const m=e(t,[["render",o]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_spa_configuration.md.BS8t4z6M.js b/assets/getting-started_spa_configuration.md.DtLWR4eQ.js similarity index 99% rename from assets/getting-started_spa_configuration.md.BS8t4z6M.js rename to assets/getting-started_spa_configuration.md.DtLWR4eQ.js index 546b757..da7cf35 100644 --- a/assets/getting-started_spa_configuration.md.BS8t4z6M.js +++ b/assets/getting-started_spa_configuration.md.DtLWR4eQ.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as e,a2 as a}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Build Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/configuration.md","filePath":"getting-started/spa/configuration.md","lastUpdated":1714127413000}'),t={name:"getting-started/spa/configuration.md"},n=a(`

Build Configuration

The main build configuration is done via the project file. Additionally, some special files are considered, too.

Project File

The *.csproj file of your pilet offers you some configuration steps to actually tailor the build to your needs.

Here is a minimal example configuration:

xml
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
+import{_ as s,c as i,o as e,a2 as a}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Build Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/configuration.md","filePath":"getting-started/spa/configuration.md","lastUpdated":1714345266000}'),t={name:"getting-started/spa/configuration.md"},n=a(`

Build Configuration

The main build configuration is done via the project file. Additionally, some special files are considered, too.

Project File

The *.csproj file of your pilet offers you some configuration steps to actually tailor the build to your needs.

Here is a minimal example configuration:

xml
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
 
   <PropertyGroup>
     <TargetFramework>net8.0</TargetFramework>
diff --git a/assets/getting-started_spa_configuration.md.BS8t4z6M.lean.js b/assets/getting-started_spa_configuration.md.DtLWR4eQ.lean.js
similarity index 60%
rename from assets/getting-started_spa_configuration.md.BS8t4z6M.lean.js
rename to assets/getting-started_spa_configuration.md.DtLWR4eQ.lean.js
index 094efb5..83f0817 100644
--- a/assets/getting-started_spa_configuration.md.BS8t4z6M.lean.js
+++ b/assets/getting-started_spa_configuration.md.DtLWR4eQ.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as e,a2 as a}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Build Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/configuration.md","filePath":"getting-started/spa/configuration.md","lastUpdated":1714127413000}'),t={name:"getting-started/spa/configuration.md"},n=a("",56),l=[n];function h(p,o,r,k,d,E){return e(),i("div",null,l)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,c as i,o as e,a2 as a}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Build Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/configuration.md","filePath":"getting-started/spa/configuration.md","lastUpdated":1714345266000}'),t={name:"getting-started/spa/configuration.md"},n=a("",56),l=[n];function h(p,o,r,k,d,E){return e(),i("div",null,l)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/getting-started_spa_debugging.md.BoFBmjfA.js b/assets/getting-started_spa_debugging.md.CKL5AfBJ.js
similarity index 94%
rename from assets/getting-started_spa_debugging.md.BoFBmjfA.js
rename to assets/getting-started_spa_debugging.md.CKL5AfBJ.js
index e971f7a..64d22ad 100644
--- a/assets/getting-started_spa_debugging.md.BoFBmjfA.js
+++ b/assets/getting-started_spa_debugging.md.CKL5AfBJ.js
@@ -1,2 +1,2 @@
-import{_ as e,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const k=JSON.parse('{"title":"Running and Debugging the Pilet","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/debugging.md","filePath":"getting-started/spa/debugging.md","lastUpdated":1714127413000}'),s={name:"getting-started/spa/debugging.md"},n=t(`

Running and Debugging the Pilet

A micro frontend can be debugged using an IDE or the command line.

Using Visual Studio

The by far easiest way is to install the Piral.Blazor.DevServer package (as a replacement for the Microsoft.AspNet.Components.WebAssembly.DevServer package) and use F5 in Microsoft Visual Studio, JetBrains Rider, ... (essentially your IDE, if capable of running Blazor).

Using the Command Line

Alternatively, from your Blazor project folder, you can run your pilet via the Piral CLI:

sh
cd ../piral~/<project-name>
+import{_ as e,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const k=JSON.parse('{"title":"Running and Debugging the Pilet","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/debugging.md","filePath":"getting-started/spa/debugging.md","lastUpdated":1714345266000}'),s={name:"getting-started/spa/debugging.md"},n=t(`

Running and Debugging the Pilet

A micro frontend can be debugged using an IDE or the command line.

Using Visual Studio

The by far easiest way is to install the Piral.Blazor.DevServer package (as a replacement for the Microsoft.AspNet.Components.WebAssembly.DevServer package) and use F5 in Microsoft Visual Studio, JetBrains Rider, ... (essentially your IDE, if capable of running Blazor).

Using the Command Line

Alternatively, from your Blazor project folder, you can run your pilet via the Piral CLI:

sh
cd ../piral~/<project-name>
 npm start

In addition to this, if you want to debug your Blazor pilet using for example Visual Studio, these requirements should be considered:

  • keep the Piral CLI running
  • debug your Blazor pilet using IISExpress

⚠️ if you want to run your pilet and directly visit it in the browser without debugging via IISExpress, you will have to disable a kras script injector before visiting the pilet. To do this, go to http://localhost:1234/manage-mock-server/#/injectors, disable the debug.js script, and save your changes. Afterwards, you can visit http://localhost:1234.

`,11),o=[n];function l(r,d,h,g,u,p){return a(),i("div",null,o)}const m=e(s,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/getting-started_spa_debugging.md.BoFBmjfA.lean.js b/assets/getting-started_spa_debugging.md.CKL5AfBJ.lean.js similarity index 60% rename from assets/getting-started_spa_debugging.md.BoFBmjfA.lean.js rename to assets/getting-started_spa_debugging.md.CKL5AfBJ.lean.js index d437fdf..948cd78 100644 --- a/assets/getting-started_spa_debugging.md.BoFBmjfA.lean.js +++ b/assets/getting-started_spa_debugging.md.CKL5AfBJ.lean.js @@ -1 +1 @@ -import{_ as e,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const k=JSON.parse('{"title":"Running and Debugging the Pilet","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/debugging.md","filePath":"getting-started/spa/debugging.md","lastUpdated":1714127413000}'),s={name:"getting-started/spa/debugging.md"},n=t("",11),o=[n];function l(r,d,h,g,u,p){return a(),i("div",null,o)}const m=e(s,[["render",l]]);export{k as __pageData,m as default}; +import{_ as e,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const k=JSON.parse('{"title":"Running and Debugging the Pilet","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/debugging.md","filePath":"getting-started/spa/debugging.md","lastUpdated":1714345266000}'),s={name:"getting-started/spa/debugging.md"},n=t("",11),o=[n];function l(r,d,h,g,u,p){return a(),i("div",null,o)}const m=e(s,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/getting-started_spa_dependency-injection.md.BH-CNyRz.js b/assets/getting-started_spa_dependency-injection.md.CtKDFgoc.js similarity index 97% rename from assets/getting-started_spa_dependency-injection.md.BH-CNyRz.js rename to assets/getting-started_spa_dependency-injection.md.CtKDFgoc.js index 80b2de8..d34f55f 100644 --- a/assets/getting-started_spa_dependency-injection.md.BH-CNyRz.js +++ b/assets/getting-started_spa_dependency-injection.md.CtKDFgoc.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a2 as e}from"./chunks/framework.NdlCD-r1.js";const y=JSON.parse('{"title":"Dependency Injection","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/dependency-injection.md","filePath":"getting-started/spa/dependency-injection.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/dependency-injection.md"},t=e(`

Dependency Injection

You can define services for dependency injection in a Module class. The name of the class is arbitrary, but it shows the difference to the standard Program class, which should not be available, as mentioned before.

To be able to compile successfully, a Main method should be declared, which should remain empty.

cs
public class Module
+import{_ as s,c as i,o as a,a2 as e}from"./chunks/framework.yUIHRp4d.js";const y=JSON.parse('{"title":"Dependency Injection","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/dependency-injection.md","filePath":"getting-started/spa/dependency-injection.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/dependency-injection.md"},t=e(`

Dependency Injection

You can define services for dependency injection in a Module class. The name of the class is arbitrary, but it shows the difference to the standard Program class, which should not be available, as mentioned before.

To be able to compile successfully, a Main method should be declared, which should remain empty.

cs
public class Module
 {
     public static void Main()
     {
diff --git a/assets/getting-started_spa_dependency-injection.md.BH-CNyRz.lean.js b/assets/getting-started_spa_dependency-injection.md.CtKDFgoc.lean.js
similarity index 62%
rename from assets/getting-started_spa_dependency-injection.md.BH-CNyRz.lean.js
rename to assets/getting-started_spa_dependency-injection.md.CtKDFgoc.lean.js
index 3bc24a6..973b6a4 100644
--- a/assets/getting-started_spa_dependency-injection.md.BH-CNyRz.lean.js
+++ b/assets/getting-started_spa_dependency-injection.md.CtKDFgoc.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a2 as e}from"./chunks/framework.NdlCD-r1.js";const y=JSON.parse('{"title":"Dependency Injection","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/dependency-injection.md","filePath":"getting-started/spa/dependency-injection.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/dependency-injection.md"},t=e("",10),p=[t];function l(h,o,d,c,k,r){return a(),i("div",null,p)}const E=s(n,[["render",l]]);export{y as __pageData,E as default};
+import{_ as s,c as i,o as a,a2 as e}from"./chunks/framework.yUIHRp4d.js";const y=JSON.parse('{"title":"Dependency Injection","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/dependency-injection.md","filePath":"getting-started/spa/dependency-injection.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/dependency-injection.md"},t=e("",10),p=[t];function l(h,o,d,c,k,r){return a(),i("div",null,p)}const E=s(n,[["render",l]]);export{y as __pageData,E as default};
diff --git a/assets/getting-started_spa_extensions.md.5BTasQ18.js b/assets/getting-started_spa_extensions.md.BsSgoO13.js
similarity index 96%
rename from assets/getting-started_spa_extensions.md.5BTasQ18.js
rename to assets/getting-started_spa_extensions.md.BsSgoO13.js
index 05a5641..99d6387 100644
--- a/assets/getting-started_spa_extensions.md.5BTasQ18.js
+++ b/assets/getting-started_spa_extensions.md.BsSgoO13.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Extensions","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/extensions.md","filePath":"getting-started/spa/extensions.md","lastUpdated":1714127413000}'),t={name:"getting-started/spa/extensions.md"},e=n(`

Extensions

To register an extension, the PiralExtension attribute can be used. You will also have to provide the extension slot name that defines where the extension should be rendered. The component can even be registered into multiple slots using multiple attributes.

razor
//counter.razor
+import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Extensions","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/extensions.md","filePath":"getting-started/spa/extensions.md","lastUpdated":1714345266000}'),t={name:"getting-started/spa/extensions.md"},e=n(`

Extensions

To register an extension, the PiralExtension attribute can be used. You will also have to provide the extension slot name that defines where the extension should be rendered. The component can even be registered into multiple slots using multiple attributes.

razor
//counter.razor
 
 @attribute [PiralExtension("my-counter-slot")]
 @attribute [PiralExtension("another-extension-slot")]
diff --git a/assets/getting-started_spa_extensions.md.5BTasQ18.lean.js b/assets/getting-started_spa_extensions.md.BsSgoO13.lean.js
similarity index 59%
rename from assets/getting-started_spa_extensions.md.5BTasQ18.lean.js
rename to assets/getting-started_spa_extensions.md.BsSgoO13.lean.js
index 3a4af35..b20d287 100644
--- a/assets/getting-started_spa_extensions.md.5BTasQ18.lean.js
+++ b/assets/getting-started_spa_extensions.md.BsSgoO13.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Extensions","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/extensions.md","filePath":"getting-started/spa/extensions.md","lastUpdated":1714127413000}'),t={name:"getting-started/spa/extensions.md"},e=n("",5),l=[e];function h(p,k,E,r,o,d){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Extensions","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/extensions.md","filePath":"getting-started/spa/extensions.md","lastUpdated":1714345266000}'),t={name:"getting-started/spa/extensions.md"},e=n("",5),l=[e];function h(p,k,E,r,o,d){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/getting-started_spa_localization.md.eD6xa63-.js b/assets/getting-started_spa_localization.md.z8BihB5c.js
similarity index 96%
rename from assets/getting-started_spa_localization.md.eD6xa63-.js
rename to assets/getting-started_spa_localization.md.z8BihB5c.js
index e43215b..1b8378f 100644
--- a/assets/getting-started_spa_localization.md.eD6xa63-.js
+++ b/assets/getting-started_spa_localization.md.z8BihB5c.js
@@ -1,4 +1,4 @@
-import{_ as i,c as s,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const E=JSON.parse('{"title":"Localization","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/localization.md","filePath":"getting-started/spa/localization.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/localization.md"},e=t(`

Localization

Localization works almost exactly as with standard Blazor, except that the language can be changed at runtime directly rather then requiring a full reload of the page.

The other difference is that the initial language is no longer decided by the server's response headers, but rather by the app shell. The initial configuration options of the piral-blazor plugin allow setting the initialLanguage. These options also allow setting up a callback to decide when to change the language (and to what language). If not explicitly stated Blazor will just listen to the select-language event of Piral, providing a key currentLanguage in the event arguments.

To dynamically change / refresh your components when the language change you'll need to listen to the LanguageChanged event emitted by the injected IPiletService instance:

razor
@inject IStringLocalizer<MyComponent> loc
+import{_ as i,c as s,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const E=JSON.parse('{"title":"Localization","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/localization.md","filePath":"getting-started/spa/localization.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/localization.md"},e=t(`

Localization

Localization works almost exactly as with standard Blazor, except that the language can be changed at runtime directly rather then requiring a full reload of the page.

The other difference is that the initial language is no longer decided by the server's response headers, but rather by the app shell. The initial configuration options of the piral-blazor plugin allow setting the initialLanguage. These options also allow setting up a callback to decide when to change the language (and to what language). If not explicitly stated Blazor will just listen to the select-language event of Piral, providing a key currentLanguage in the event arguments.

To dynamically change / refresh your components when the language change you'll need to listen to the LanguageChanged event emitted by the injected IPiletService instance:

razor
@inject IStringLocalizer<MyComponent> loc
 @inject IPiletService pilet
 
 <h2>@loc["greeting"]</h2>
diff --git a/assets/getting-started_spa_localization.md.eD6xa63-.lean.js b/assets/getting-started_spa_localization.md.z8BihB5c.lean.js
similarity index 59%
rename from assets/getting-started_spa_localization.md.eD6xa63-.lean.js
rename to assets/getting-started_spa_localization.md.z8BihB5c.lean.js
index e33ff0d..6725ff9 100644
--- a/assets/getting-started_spa_localization.md.eD6xa63-.lean.js
+++ b/assets/getting-started_spa_localization.md.z8BihB5c.lean.js
@@ -1 +1 @@
-import{_ as i,c as s,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const E=JSON.parse('{"title":"Localization","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/localization.md","filePath":"getting-started/spa/localization.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/localization.md"},e=t("",6),l=[e];function h(p,k,r,o,d,g){return a(),s("div",null,l)}const y=i(n,[["render",h]]);export{E as __pageData,y as default};
+import{_ as i,c as s,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const E=JSON.parse('{"title":"Localization","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/localization.md","filePath":"getting-started/spa/localization.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/localization.md"},e=t("",6),l=[e];function h(p,k,r,o,d,g){return a(),s("div",null,l)}const y=i(n,[["render",h]]);export{E as __pageData,y as default};
diff --git a/assets/getting-started_spa_microfrontend.md.CcqOFkdf.js b/assets/getting-started_spa_microfrontend.md.BTLcZsBe.js
similarity index 95%
rename from assets/getting-started_spa_microfrontend.md.CcqOFkdf.js
rename to assets/getting-started_spa_microfrontend.md.BTLcZsBe.js
index b36e13a..02ee6e0 100644
--- a/assets/getting-started_spa_microfrontend.md.CcqOFkdf.js
+++ b/assets/getting-started_spa_microfrontend.md.BTLcZsBe.js
@@ -1,4 +1,4 @@
-import{_ as e,c as a,o as t,a2 as i}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Creating a Blazor Pilet","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/microfrontend.md","filePath":"getting-started/spa/microfrontend.md","lastUpdated":1714127413000}'),s={name:"getting-started/spa/microfrontend.md"},o=i(`

Creating a Blazor Pilet

We recommend that you watch the video on scaffolding from the standard VS template before you go over the details below.

In general, to create a Blazor pilet using Piral.Blazor, two approaches can be used:

From Scratch

In this case, it is highly recommended to use our template. More information and installation instructions can be found in Piral.Blazor.Template.

From an Existing Application

In this case, follow these steps:

  1. Add a PiralInstance property to your .csproj file (The Piral instance name should be the name of the Piral instance you want to use, as it is published on npm.)

    xml
    <PropertyGroup>
    +import{_ as e,c as a,o as t,a2 as i}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Creating a Blazor Pilet","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/microfrontend.md","filePath":"getting-started/spa/microfrontend.md","lastUpdated":1714345266000}'),s={name:"getting-started/spa/microfrontend.md"},o=i(`

    Creating a Blazor Pilet

    We recommend that you watch the video on scaffolding from the standard VS template before you go over the details below.

    In general, to create a Blazor pilet using Piral.Blazor, two approaches can be used:

    From Scratch

    In this case, it is highly recommended to use our template. More information and installation instructions can be found in Piral.Blazor.Template.

    From an Existing Application

    In this case, follow these steps:

    1. Add a PiralInstance property to your .csproj file (The Piral instance name should be the name of the Piral instance you want to use, as it is published on npm.)

      xml
      <PropertyGroup>
           <TargetFramework>net8.0</TargetFramework>
           <PiralInstance>my-piral-instance</PiralInstance>
       </PropertyGroup>

      (You can optionally also specify an NpmRegistry property. The default for this is set to https://registry.npmjs.org/)

    2. Install the Piral.Blazor.Tools and Piral.Blazor.Utils packages, make sure they both have a version number of format 8.0.x

    3. Remove the Microsoft.AspNetCore.Components.WebAssembly.DevServer package and install the Piral.Blazor.DevServer package (using the same version as the packages from (2))

    4. Rename Program.cs to Module.cs, and make sure to make the Main method an empty method.

    5. Build the project. The first time you do this, this can take some time as it will fully scaffold the pilet.

    If you run the solution using F5 the Piral.Blazor.DevServer will start the Piral CLI under the hood. This allows you to not only use .NET Hot-Reload, but also replace the pilets on demand.

    `,10),r=[o];function n(l,p,h,c,d,k){return t(),a("div",null,r)}const u=e(s,[["render",n]]);export{g as __pageData,u as default}; diff --git a/assets/getting-started_spa_microfrontend.md.CcqOFkdf.lean.js b/assets/getting-started_spa_microfrontend.md.BTLcZsBe.lean.js similarity index 60% rename from assets/getting-started_spa_microfrontend.md.CcqOFkdf.lean.js rename to assets/getting-started_spa_microfrontend.md.BTLcZsBe.lean.js index 6938241..f514565 100644 --- a/assets/getting-started_spa_microfrontend.md.CcqOFkdf.lean.js +++ b/assets/getting-started_spa_microfrontend.md.BTLcZsBe.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a2 as i}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Creating a Blazor Pilet","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/microfrontend.md","filePath":"getting-started/spa/microfrontend.md","lastUpdated":1714127413000}'),s={name:"getting-started/spa/microfrontend.md"},o=i("",10),r=[o];function n(l,p,h,c,d,k){return t(),a("div",null,r)}const u=e(s,[["render",n]]);export{g as __pageData,u as default}; +import{_ as e,c as a,o as t,a2 as i}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Creating a Blazor Pilet","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/microfrontend.md","filePath":"getting-started/spa/microfrontend.md","lastUpdated":1714345266000}'),s={name:"getting-started/spa/microfrontend.md"},o=i("",10),r=[o];function n(l,p,h,c,d,k){return t(),a("div",null,r)}const u=e(s,[["render",n]]);export{g as __pageData,u as default}; diff --git a/assets/getting-started_spa_other-components.md.DgWQvoBv.js b/assets/getting-started_spa_other-components.md.C08vUzW9.js similarity index 98% rename from assets/getting-started_spa_other-components.md.DgWQvoBv.js rename to assets/getting-started_spa_other-components.md.C08vUzW9.js index 06a75c0..823a097 100644 --- a/assets/getting-started_spa_other-components.md.DgWQvoBv.js +++ b/assets/getting-started_spa_other-components.md.C08vUzW9.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const y=JSON.parse('{"title":"Components, Tiles, Menu Items, and Others","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/other-components.md","filePath":"getting-started/spa/other-components.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/other-components.md"},e=t(`

    Components, Tiles, Menu Items, and Others

    To register a Blazor component for use in the pilet API, the PiralComponent attribute can be used in two ways:

    1. [PiralComponent], this will register the component using the fully qualified name.
    2. [PiralComponent(<name>)] will register the component using the custom name provided.

    To register these components onto the pilet API, a setup.tsx file should be created at the root of your Blazor project.

    This file may then, for example to register a tile, look like this:

    tsx
    import { PiletApi } from '../piral~/<project_name>/node_modules/<piral_instance>';
    +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const y=JSON.parse('{"title":"Components, Tiles, Menu Items, and Others","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/other-components.md","filePath":"getting-started/spa/other-components.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/other-components.md"},e=t(`

    Components, Tiles, Menu Items, and Others

    To register a Blazor component for use in the pilet API, the PiralComponent attribute can be used in two ways:

    1. [PiralComponent], this will register the component using the fully qualified name.
    2. [PiralComponent(<name>)] will register the component using the custom name provided.

    To register these components onto the pilet API, a setup.tsx file should be created at the root of your Blazor project.

    This file may then, for example to register a tile, look like this:

    tsx
    import { PiletApi } from '../piral~/<project_name>/node_modules/<piral_instance>';
     
     type AddScript = (path: string, attrs?: Record<string, string>) => void;
     type AddStyles = (path: string, pos?: 'first' | 'last' | 'before' | ' after') => void;
    diff --git a/assets/getting-started_spa_other-components.md.DgWQvoBv.lean.js b/assets/getting-started_spa_other-components.md.C08vUzW9.lean.js
    similarity index 63%
    rename from assets/getting-started_spa_other-components.md.DgWQvoBv.lean.js
    rename to assets/getting-started_spa_other-components.md.C08vUzW9.lean.js
    index 715804c..13eccef 100644
    --- a/assets/getting-started_spa_other-components.md.DgWQvoBv.lean.js
    +++ b/assets/getting-started_spa_other-components.md.C08vUzW9.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const y=JSON.parse('{"title":"Components, Tiles, Menu Items, and Others","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/other-components.md","filePath":"getting-started/spa/other-components.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/other-components.md"},e=t("",12),h=[e];function p(l,k,d,r,o,E){return a(),i("div",null,h)}const c=s(n,[["render",p]]);export{y as __pageData,c as default};
    +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const y=JSON.parse('{"title":"Components, Tiles, Menu Items, and Others","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/other-components.md","filePath":"getting-started/spa/other-components.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/other-components.md"},e=t("",12),h=[e];function p(l,k,d,r,o,E){return a(),i("div",null,h)}const c=s(n,[["render",p]]);export{y as __pageData,c as default};
    diff --git a/assets/getting-started_spa_pages.md.COgeZlBh.js b/assets/getting-started_spa_pages.md.dtMv85N4.js
    similarity index 98%
    rename from assets/getting-started_spa_pages.md.COgeZlBh.js
    rename to assets/getting-started_spa_pages.md.dtMv85N4.js
    index 3b47a1c..a6783f5 100644
    --- a/assets/getting-started_spa_pages.md.COgeZlBh.js
    +++ b/assets/getting-started_spa_pages.md.dtMv85N4.js
    @@ -1,4 +1,4 @@
    -import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Pages","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/pages.md","filePath":"getting-started/spa/pages.md","lastUpdated":1714127413000}'),t={name:"getting-started/spa/pages.md"},e=n(`

    Pages

    A standard page in Blazor, using the @page directive, will work as expected, and will be automatically registered on the pilet API.

    You can also set multiple @page directives, which will all lead to page registrations.

    Route Parameters

    If you want to match the route parameter you can use the generic approach, too:

    razor
    @page "/foo/{id}"
    +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Pages","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/pages.md","filePath":"getting-started/spa/pages.md","lastUpdated":1714345266000}'),t={name:"getting-started/spa/pages.md"},e=n(`

    Pages

    A standard page in Blazor, using the @page directive, will work as expected, and will be automatically registered on the pilet API.

    You can also set multiple @page directives, which will all lead to page registrations.

    Route Parameters

    If you want to match the route parameter you can use the generic approach, too:

    razor
    @page "/foo/{id}"
     
     <div>@Id</div>
     
    diff --git a/assets/getting-started_spa_pages.md.COgeZlBh.lean.js b/assets/getting-started_spa_pages.md.dtMv85N4.lean.js
    similarity index 57%
    rename from assets/getting-started_spa_pages.md.COgeZlBh.lean.js
    rename to assets/getting-started_spa_pages.md.dtMv85N4.lean.js
    index 2bc358c..5801938 100644
    --- a/assets/getting-started_spa_pages.md.COgeZlBh.lean.js
    +++ b/assets/getting-started_spa_pages.md.dtMv85N4.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Pages","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/pages.md","filePath":"getting-started/spa/pages.md","lastUpdated":1714127413000}'),t={name:"getting-started/spa/pages.md"},e=n("",17),l=[e];function h(p,k,r,d,E,g){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
    +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Pages","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/pages.md","filePath":"getting-started/spa/pages.md","lastUpdated":1714345266000}'),t={name:"getting-started/spa/pages.md"},e=n("",17),l=[e];function h(p,k,r,d,E,g){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
    diff --git a/assets/getting-started_spa_parameters.md.DQV7ZUjt.js b/assets/getting-started_spa_parameters.md.jOI69umJ.js
    similarity index 98%
    rename from assets/getting-started_spa_parameters.md.DQV7ZUjt.js
    rename to assets/getting-started_spa_parameters.md.jOI69umJ.js
    index d955f22..3afbbe9 100644
    --- a/assets/getting-started_spa_parameters.md.DQV7ZUjt.js
    +++ b/assets/getting-started_spa_parameters.md.jOI69umJ.js
    @@ -1,4 +1,4 @@
    -import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Parameters","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/parameters.md","filePath":"getting-started/spa/parameters.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/parameters.md"},e=t(`

    Parameters

    Parameters (or "props") are properly forwarded. Usually, it should be sufficient to declare [Parameter] properties in the Blazor components. Besides, there are more advanced ways.

    For instance, to access the params prop of an extension you can use the PiralParameter attribute. This way, you can "forward" props from JS to the .NET name of your choice (in this case "params" is renamed to "Parameters").

    razor
    @attribute [PiralExtension("sample-extension")]
    +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Parameters","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/parameters.md","filePath":"getting-started/spa/parameters.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/parameters.md"},e=t(`

    Parameters

    Parameters (or "props") are properly forwarded. Usually, it should be sufficient to declare [Parameter] properties in the Blazor components. Besides, there are more advanced ways.

    For instance, to access the params prop of an extension you can use the PiralParameter attribute. This way, you can "forward" props from JS to the .NET name of your choice (in this case "params" is renamed to "Parameters").

    razor
    @attribute [PiralExtension("sample-extension")]
     
     <div>@Parameters.Test</div>
     
    diff --git a/assets/getting-started_spa_parameters.md.DQV7ZUjt.lean.js b/assets/getting-started_spa_parameters.md.jOI69umJ.lean.js
    similarity index 59%
    rename from assets/getting-started_spa_parameters.md.DQV7ZUjt.lean.js
    rename to assets/getting-started_spa_parameters.md.jOI69umJ.lean.js
    index 8fd06d7..91b9a8b 100644
    --- a/assets/getting-started_spa_parameters.md.DQV7ZUjt.lean.js
    +++ b/assets/getting-started_spa_parameters.md.jOI69umJ.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Parameters","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/parameters.md","filePath":"getting-started/spa/parameters.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/parameters.md"},e=t("",11),p=[e];function h(l,k,r,E,d,o){return a(),i("div",null,p)}const y=s(n,[["render",h]]);export{c as __pageData,y as default};
    +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Parameters","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/parameters.md","filePath":"getting-started/spa/parameters.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/parameters.md"},e=t("",11),p=[e];function h(l,k,r,E,d,o){return a(),i("div",null,p)}const y=s(n,[["render",h]]);export{c as __pageData,y as default};
    diff --git a/assets/getting-started_spa_pilet-service.md.DQWcnSsb.js b/assets/getting-started_spa_pilet-service.md.DZAsk7XN.js
    similarity index 99%
    rename from assets/getting-started_spa_pilet-service.md.DQWcnSsb.js
    rename to assets/getting-started_spa_pilet-service.md.DZAsk7XN.js
    index dabd5df..8cbb8d4 100644
    --- a/assets/getting-started_spa_pilet-service.md.DQWcnSsb.js
    +++ b/assets/getting-started_spa_pilet-service.md.DZAsk7XN.js
    @@ -1,4 +1,4 @@
    -import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Standard Pilet Service","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/pilet-service.md","filePath":"getting-started/spa/pilet-service.md","lastUpdated":1714127413000}'),t={name:"getting-started/spa/pilet-service.md"},l=n(`

    Standard Pilet Service

    Every pilet gets automatically a service called IPiletService injected.

    Asset URLs

    The IPiletService service can be used to compute the URL of a resource.

    razor
    @inject IPiletService Pilet

    The relevant helper method is GetUrl. You can use it like:

    razor
    @page "/example"
    +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Standard Pilet Service","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/pilet-service.md","filePath":"getting-started/spa/pilet-service.md","lastUpdated":1714345266000}'),t={name:"getting-started/spa/pilet-service.md"},l=n(`

    Standard Pilet Service

    Every pilet gets automatically a service called IPiletService injected.

    Asset URLs

    The IPiletService service can be used to compute the URL of a resource.

    razor
    @inject IPiletService Pilet

    The relevant helper method is GetUrl. You can use it like:

    razor
    @page "/example"
     @inject IPiletService Pilet
     
     <img src=@Pilet.GetUrl("images/something.png") alt="Some image" />

    In the example above the resource images/something.png would be placed in the wwwroot folder (i.e., wwwroot/images/something). As the content of the wwwroot folder is copied, the image will also be copied. However, the old local URL is not valid in a pilet, which needs to prefix its resources with its base URL. The function above does that. In that case, the URL would maybe be something like http://localhost:1234/$pilet-api/0/images/something.png while debugging, and another fully qualified URL later in production.

    Events

    You can use the IPiletService service to emit and receive events via the standard Pilet API event bus. This is great for doing loosely-coupled pilet-to-pilet communication.

    Example:

    razor
    @attribute [PiralComponent]
    diff --git a/assets/getting-started_spa_pilet-service.md.DQWcnSsb.lean.js b/assets/getting-started_spa_pilet-service.md.DZAsk7XN.lean.js
    similarity index 60%
    rename from assets/getting-started_spa_pilet-service.md.DQWcnSsb.lean.js
    rename to assets/getting-started_spa_pilet-service.md.DZAsk7XN.lean.js
    index a63b7b8..5baef22 100644
    --- a/assets/getting-started_spa_pilet-service.md.DQWcnSsb.lean.js
    +++ b/assets/getting-started_spa_pilet-service.md.DZAsk7XN.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.NdlCD-r1.js";const c=JSON.parse('{"title":"Standard Pilet Service","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/pilet-service.md","filePath":"getting-started/spa/pilet-service.md","lastUpdated":1714127413000}'),t={name:"getting-started/spa/pilet-service.md"},l=n("",20),e=[l];function h(p,k,r,d,E,g){return a(),i("div",null,e)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
    +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.yUIHRp4d.js";const c=JSON.parse('{"title":"Standard Pilet Service","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/pilet-service.md","filePath":"getting-started/spa/pilet-service.md","lastUpdated":1714345266000}'),t={name:"getting-started/spa/pilet-service.md"},l=n("",20),e=[l];function h(p,k,r,d,E,g){return a(),i("div",null,e)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
    diff --git a/assets/getting-started_spa_providers.md.BuNaLMOO.js b/assets/getting-started_spa_providers.md.C1_eXZdD.js
    similarity index 94%
    rename from assets/getting-started_spa_providers.md.BuNaLMOO.js
    rename to assets/getting-started_spa_providers.md.C1_eXZdD.js
    index f47b019..715f333 100644
    --- a/assets/getting-started_spa_providers.md.BuNaLMOO.js
    +++ b/assets/getting-started_spa_providers.md.C1_eXZdD.js
    @@ -1,4 +1,4 @@
    -import{_ as e,c as s,o as i,a2 as t}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Provider Components","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/providers.md","filePath":"getting-started/spa/providers.md","lastUpdated":1714127413000}'),a={name:"getting-started/spa/providers.md"},o=t(`

    Provider Components

    Sometimes Blazor components require some global components (or "providers") to be added. To accomplish this you can create components marked with the PiralProviderAttribute attribute.

    Example:

    razor
    @attribute [PiralProvider]
    +import{_ as e,c as s,o as i,a2 as t}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Provider Components","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/providers.md","filePath":"getting-started/spa/providers.md","lastUpdated":1714345266000}'),a={name:"getting-started/spa/providers.md"},o=t(`

    Provider Components

    Sometimes Blazor components require some global components (or "providers") to be added. To accomplish this you can create components marked with the PiralProviderAttribute attribute.

    Example:

    razor
    @attribute [PiralProvider]
     
     <MudThemeProvider/>
     <MudDialogProvider/>
    diff --git a/assets/getting-started_spa_providers.md.BuNaLMOO.lean.js b/assets/getting-started_spa_providers.md.C1_eXZdD.lean.js
    similarity index 59%
    rename from assets/getting-started_spa_providers.md.BuNaLMOO.lean.js
    rename to assets/getting-started_spa_providers.md.C1_eXZdD.lean.js
    index 571b3d2..6f7a600 100644
    --- a/assets/getting-started_spa_providers.md.BuNaLMOO.lean.js
    +++ b/assets/getting-started_spa_providers.md.C1_eXZdD.lean.js
    @@ -1 +1 @@
    -import{_ as e,c as s,o as i,a2 as t}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Provider Components","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/providers.md","filePath":"getting-started/spa/providers.md","lastUpdated":1714127413000}'),a={name:"getting-started/spa/providers.md"},o=t("",8),n=[o];function r(l,p,h,d,c,k){return i(),s("div",null,n)}const v=e(a,[["render",r]]);export{g as __pageData,v as default};
    +import{_ as e,c as s,o as i,a2 as t}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Provider Components","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/providers.md","filePath":"getting-started/spa/providers.md","lastUpdated":1714345266000}'),a={name:"getting-started/spa/providers.md"},o=t("",8),n=[o];function r(l,p,h,d,c,k){return i(),s("div",null,n)}const v=e(a,[["render",r]]);export{g as __pageData,v as default};
    diff --git a/assets/getting-started_spa_publishing.md.0INpKX_n.js b/assets/getting-started_spa_publishing.md.BW0W7nWK.js
    similarity index 85%
    rename from assets/getting-started_spa_publishing.md.0INpKX_n.js
    rename to assets/getting-started_spa_publishing.md.BW0W7nWK.js
    index 326b45b..ddb3652 100644
    --- a/assets/getting-started_spa_publishing.md.0INpKX_n.js
    +++ b/assets/getting-started_spa_publishing.md.BW0W7nWK.js
    @@ -1 +1 @@
    -import{_ as a,c as i,o as n,m as e,a as t}from"./chunks/framework.NdlCD-r1.js";const m=JSON.parse('{"title":"Publishing a Micro Frontend","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/publishing.md","filePath":"getting-started/spa/publishing.md","lastUpdated":1714127413000}'),s={name:"getting-started/spa/publishing.md"},r=e("h1",{id:"publishing-a-micro-frontend",tabindex:"-1"},[t("Publishing a Micro Frontend "),e("a",{class:"header-anchor",href:"#publishing-a-micro-frontend","aria-label":'Permalink to "Publishing a Micro Frontend"'},"​")],-1),o=e("p",null,[t("You can publish a micro frontend either by using the "),e("code",null,"piral-cli"),t(" or by setting up a publish profile.")],-1),l=[r,o];function c(d,p,h,u,g,_){return n(),i("div",null,l)}const f=a(s,[["render",c]]);export{m as __pageData,f as default};
    +import{_ as a,c as i,o as n,m as e,a as t}from"./chunks/framework.yUIHRp4d.js";const m=JSON.parse('{"title":"Publishing a Micro Frontend","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/publishing.md","filePath":"getting-started/spa/publishing.md","lastUpdated":1714345266000}'),s={name:"getting-started/spa/publishing.md"},r=e("h1",{id:"publishing-a-micro-frontend",tabindex:"-1"},[t("Publishing a Micro Frontend "),e("a",{class:"header-anchor",href:"#publishing-a-micro-frontend","aria-label":'Permalink to "Publishing a Micro Frontend"'},"​")],-1),o=e("p",null,[t("You can publish a micro frontend either by using the "),e("code",null,"piral-cli"),t(" or by setting up a publish profile.")],-1),l=[r,o];function c(d,p,h,u,g,_){return n(),i("div",null,l)}const f=a(s,[["render",c]]);export{m as __pageData,f as default};
    diff --git a/assets/getting-started_spa_publishing.md.0INpKX_n.lean.js b/assets/getting-started_spa_publishing.md.BW0W7nWK.lean.js
    similarity index 85%
    rename from assets/getting-started_spa_publishing.md.0INpKX_n.lean.js
    rename to assets/getting-started_spa_publishing.md.BW0W7nWK.lean.js
    index 326b45b..ddb3652 100644
    --- a/assets/getting-started_spa_publishing.md.0INpKX_n.lean.js
    +++ b/assets/getting-started_spa_publishing.md.BW0W7nWK.lean.js
    @@ -1 +1 @@
    -import{_ as a,c as i,o as n,m as e,a as t}from"./chunks/framework.NdlCD-r1.js";const m=JSON.parse('{"title":"Publishing a Micro Frontend","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/publishing.md","filePath":"getting-started/spa/publishing.md","lastUpdated":1714127413000}'),s={name:"getting-started/spa/publishing.md"},r=e("h1",{id:"publishing-a-micro-frontend",tabindex:"-1"},[t("Publishing a Micro Frontend "),e("a",{class:"header-anchor",href:"#publishing-a-micro-frontend","aria-label":'Permalink to "Publishing a Micro Frontend"'},"​")],-1),o=e("p",null,[t("You can publish a micro frontend either by using the "),e("code",null,"piral-cli"),t(" or by setting up a publish profile.")],-1),l=[r,o];function c(d,p,h,u,g,_){return n(),i("div",null,l)}const f=a(s,[["render",c]]);export{m as __pageData,f as default};
    +import{_ as a,c as i,o as n,m as e,a as t}from"./chunks/framework.yUIHRp4d.js";const m=JSON.parse('{"title":"Publishing a Micro Frontend","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/publishing.md","filePath":"getting-started/spa/publishing.md","lastUpdated":1714345266000}'),s={name:"getting-started/spa/publishing.md"},r=e("h1",{id:"publishing-a-micro-frontend",tabindex:"-1"},[t("Publishing a Micro Frontend "),e("a",{class:"header-anchor",href:"#publishing-a-micro-frontend","aria-label":'Permalink to "Publishing a Micro Frontend"'},"​")],-1),o=e("p",null,[t("You can publish a micro frontend either by using the "),e("code",null,"piral-cli"),t(" or by setting up a publish profile.")],-1),l=[r,o];function c(d,p,h,u,g,_){return n(),i("div",null,l)}const f=a(s,[["render",c]]);export{m as __pageData,f as default};
    diff --git a/assets/getting-started_spa_root.md.BrwiLAN8.js b/assets/getting-started_spa_root.md.CxW_mOT8.js
    similarity index 97%
    rename from assets/getting-started_spa_root.md.BrwiLAN8.js
    rename to assets/getting-started_spa_root.md.CxW_mOT8.js
    index c227344..23756fd 100644
    --- a/assets/getting-started_spa_root.md.BrwiLAN8.js
    +++ b/assets/getting-started_spa_root.md.CxW_mOT8.js
    @@ -1,4 +1,4 @@
    -import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Root Component","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/root.md","filePath":"getting-started/spa/root.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/root.md"},e=t(`

    Root Component

    By default, the Blazor pilets run in a dedicated Blazor application with no root component. If you need a root component, e.g., to provide some common values from a CascadingValue component such as CascadingAuthenticationState from the Microsoft.AspNetCore.Components.Authorization package, you can actually override the default root component:

    razor
    @attribute [PiralAppRoot]
    +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Root Component","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/root.md","filePath":"getting-started/spa/root.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/root.md"},e=t(`

    Root Component

    By default, the Blazor pilets run in a dedicated Blazor application with no root component. If you need a root component, e.g., to provide some common values from a CascadingValue component such as CascadingAuthenticationState from the Microsoft.AspNetCore.Components.Authorization package, you can actually override the default root component:

    razor
    @attribute [PiralAppRoot]
     
     <CascadingAuthenticationState>
         @ChildContent
    diff --git a/assets/getting-started_spa_root.md.BrwiLAN8.lean.js b/assets/getting-started_spa_root.md.CxW_mOT8.lean.js
    similarity index 57%
    rename from assets/getting-started_spa_root.md.BrwiLAN8.lean.js
    rename to assets/getting-started_spa_root.md.CxW_mOT8.lean.js
    index 0d8bf36..eab3740 100644
    --- a/assets/getting-started_spa_root.md.BrwiLAN8.lean.js
    +++ b/assets/getting-started_spa_root.md.CxW_mOT8.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.NdlCD-r1.js";const g=JSON.parse('{"title":"Root Component","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/root.md","filePath":"getting-started/spa/root.md","lastUpdated":1714127413000}'),n={name:"getting-started/spa/root.md"},e=t("",9),l=[e];function p(h,k,o,r,d,c){return a(),i("div",null,l)}const y=s(n,[["render",p]]);export{g as __pageData,y as default};
    +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.yUIHRp4d.js";const g=JSON.parse('{"title":"Root Component","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/root.md","filePath":"getting-started/spa/root.md","lastUpdated":1714345266000}'),n={name:"getting-started/spa/root.md"},e=t("",9),l=[e];function p(h,k,o,r,d,c){return a(),i("div",null,l)}const y=s(n,[["render",p]]);export{g as __pageData,y as default};
    diff --git a/assets/getting-started_spa_setup.md.DkbzmbTn.js b/assets/getting-started_spa_setup.md.BIMiJ6fa.js
    similarity index 83%
    rename from assets/getting-started_spa_setup.md.DkbzmbTn.js
    rename to assets/getting-started_spa_setup.md.BIMiJ6fa.js
    index c461ecd..60ea7ea 100644
    --- a/assets/getting-started_spa_setup.md.DkbzmbTn.js
    +++ b/assets/getting-started_spa_setup.md.BIMiJ6fa.js
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a,a2 as r}from"./chunks/framework.NdlCD-r1.js";const m=JSON.parse('{"title":"SPA Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/setup.md","filePath":"getting-started/spa/setup.md","lastUpdated":1714127413000}'),s={name:"getting-started/spa/setup.md"},o=r('

    SPA Setup

    In this document we assume that you already have an app shell using Piral. Otherwise, please check out the Piral documentation.

    Once you set up your app shell you either need to integrate piral-blazor into it, or create a micro frontend that uses piral-blazor in standalone mode. Both ways are described in the piral-blazor npm package.

    ',3),p=[o];function n(i,c,l,d,_,h){return a(),t("div",null,p)}const f=e(s,[["render",n]]);export{m as __pageData,f as default}; +import{_ as e,c as t,o as a,a2 as r}from"./chunks/framework.yUIHRp4d.js";const m=JSON.parse('{"title":"SPA Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/setup.md","filePath":"getting-started/spa/setup.md","lastUpdated":1714345266000}'),s={name:"getting-started/spa/setup.md"},o=r('

    SPA Setup

    In this document we assume that you already have an app shell using Piral. Otherwise, please check out the Piral documentation.

    Once you set up your app shell you either need to integrate piral-blazor into it, or create a micro frontend that uses piral-blazor in standalone mode. Both ways are described in the piral-blazor npm package.

    ',3),p=[o];function n(i,c,l,d,_,h){return a(),t("div",null,p)}const f=e(s,[["render",n]]);export{m as __pageData,f as default}; diff --git a/assets/getting-started_spa_setup.md.DkbzmbTn.lean.js b/assets/getting-started_spa_setup.md.BIMiJ6fa.lean.js similarity index 57% rename from assets/getting-started_spa_setup.md.DkbzmbTn.lean.js rename to assets/getting-started_spa_setup.md.BIMiJ6fa.lean.js index 86d77c8..706d796 100644 --- a/assets/getting-started_spa_setup.md.DkbzmbTn.lean.js +++ b/assets/getting-started_spa_setup.md.BIMiJ6fa.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a2 as r}from"./chunks/framework.NdlCD-r1.js";const m=JSON.parse('{"title":"SPA Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/setup.md","filePath":"getting-started/spa/setup.md","lastUpdated":1714127413000}'),s={name:"getting-started/spa/setup.md"},o=r("",3),p=[o];function n(i,c,l,d,_,h){return a(),t("div",null,p)}const f=e(s,[["render",n]]);export{m as __pageData,f as default}; +import{_ as e,c as t,o as a,a2 as r}from"./chunks/framework.yUIHRp4d.js";const m=JSON.parse('{"title":"SPA Setup","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/spa/setup.md","filePath":"getting-started/spa/setup.md","lastUpdated":1714345266000}'),s={name:"getting-started/spa/setup.md"},o=r("",3),p=[o];function n(i,c,l,d,_,h){return a(),t("div",null,p)}const f=e(s,[["render",n]]);export{m as __pageData,f as default}; diff --git a/assets/guides_faq.md.CSImJXsp.js b/assets/guides_faq.md.CGQ9K78l.js similarity index 88% rename from assets/guides_faq.md.CSImJXsp.js rename to assets/guides_faq.md.CGQ9K78l.js index 06d79d0..2120b63 100644 --- a/assets/guides_faq.md.CSImJXsp.js +++ b/assets/guides_faq.md.CGQ9K78l.js @@ -1 +1 @@ -import{_ as a,c as o,o as n,m as e,a as t}from"./chunks/framework.NdlCD-r1.js";const q=JSON.parse('{"title":"Frequently Asked Questions","description":"","frontmatter":{},"headers":[],"relativePath":"guides/faq.md","filePath":"guides/faq.md","lastUpdated":1714127413000}'),s={name:"guides/faq.md"},l=e("h1",{id:"frequently-asked-questions",tabindex:"-1"},[t("Frequently Asked Questions "),e("a",{class:"header-anchor",href:"#frequently-asked-questions","aria-label":'Permalink to "Frequently Asked Questions"'},"​")],-1),r=e("ol",null,[e("li",null,"I cannot use breakpoints when I debug a Piral.Blazor pilet in VS. What could be wrong?")],-1),i=e("p",null,[t("Make sure you actually emit a PDB and have "),e("code",null,"Debug"),t(" selected as configuration. Also, don't change the configuration to have "),e("code",null,"Full"),t(" or similar in the project file. You'll need a portable PDB (modern format), not a full PDB (legacy format for Windows).")],-1),d=[l,r,i];function u(c,f,h,p,_,m){return n(),o("div",null,d)}const k=a(s,[["render",u]]);export{q as __pageData,k as default}; +import{_ as a,c as o,o as n,m as e,a as t}from"./chunks/framework.yUIHRp4d.js";const q=JSON.parse('{"title":"Frequently Asked Questions","description":"","frontmatter":{},"headers":[],"relativePath":"guides/faq.md","filePath":"guides/faq.md","lastUpdated":1714345266000}'),s={name:"guides/faq.md"},l=e("h1",{id:"frequently-asked-questions",tabindex:"-1"},[t("Frequently Asked Questions "),e("a",{class:"header-anchor",href:"#frequently-asked-questions","aria-label":'Permalink to "Frequently Asked Questions"'},"​")],-1),r=e("ol",null,[e("li",null,"I cannot use breakpoints when I debug a Piral.Blazor pilet in VS. What could be wrong?")],-1),i=e("p",null,[t("Make sure you actually emit a PDB and have "),e("code",null,"Debug"),t(" selected as configuration. Also, don't change the configuration to have "),e("code",null,"Full"),t(" or similar in the project file. You'll need a portable PDB (modern format), not a full PDB (legacy format for Windows).")],-1),d=[l,r,i];function u(c,f,h,p,_,m){return n(),o("div",null,d)}const k=a(s,[["render",u]]);export{q as __pageData,k as default}; diff --git a/assets/guides_faq.md.CSImJXsp.lean.js b/assets/guides_faq.md.CGQ9K78l.lean.js similarity index 88% rename from assets/guides_faq.md.CSImJXsp.lean.js rename to assets/guides_faq.md.CGQ9K78l.lean.js index 06d79d0..2120b63 100644 --- a/assets/guides_faq.md.CSImJXsp.lean.js +++ b/assets/guides_faq.md.CGQ9K78l.lean.js @@ -1 +1 @@ -import{_ as a,c as o,o as n,m as e,a as t}from"./chunks/framework.NdlCD-r1.js";const q=JSON.parse('{"title":"Frequently Asked Questions","description":"","frontmatter":{},"headers":[],"relativePath":"guides/faq.md","filePath":"guides/faq.md","lastUpdated":1714127413000}'),s={name:"guides/faq.md"},l=e("h1",{id:"frequently-asked-questions",tabindex:"-1"},[t("Frequently Asked Questions "),e("a",{class:"header-anchor",href:"#frequently-asked-questions","aria-label":'Permalink to "Frequently Asked Questions"'},"​")],-1),r=e("ol",null,[e("li",null,"I cannot use breakpoints when I debug a Piral.Blazor pilet in VS. What could be wrong?")],-1),i=e("p",null,[t("Make sure you actually emit a PDB and have "),e("code",null,"Debug"),t(" selected as configuration. Also, don't change the configuration to have "),e("code",null,"Full"),t(" or similar in the project file. You'll need a portable PDB (modern format), not a full PDB (legacy format for Windows).")],-1),d=[l,r,i];function u(c,f,h,p,_,m){return n(),o("div",null,d)}const k=a(s,[["render",u]]);export{q as __pageData,k as default}; +import{_ as a,c as o,o as n,m as e,a as t}from"./chunks/framework.yUIHRp4d.js";const q=JSON.parse('{"title":"Frequently Asked Questions","description":"","frontmatter":{},"headers":[],"relativePath":"guides/faq.md","filePath":"guides/faq.md","lastUpdated":1714345266000}'),s={name:"guides/faq.md"},l=e("h1",{id:"frequently-asked-questions",tabindex:"-1"},[t("Frequently Asked Questions "),e("a",{class:"header-anchor",href:"#frequently-asked-questions","aria-label":'Permalink to "Frequently Asked Questions"'},"​")],-1),r=e("ol",null,[e("li",null,"I cannot use breakpoints when I debug a Piral.Blazor pilet in VS. What could be wrong?")],-1),i=e("p",null,[t("Make sure you actually emit a PDB and have "),e("code",null,"Debug"),t(" selected as configuration. Also, don't change the configuration to have "),e("code",null,"Full"),t(" or similar in the project file. You'll need a portable PDB (modern format), not a full PDB (legacy format for Windows).")],-1),d=[l,r,i];function u(c,f,h,p,_,m){return n(),o("div",null,d)}const k=a(s,[["render",u]]);export{q as __pageData,k as default}; diff --git a/assets/guides_helpers.md.BMq5UiJl.js b/assets/guides_helpers.md.DKuUSSRm.js similarity index 77% rename from assets/guides_helpers.md.BMq5UiJl.js rename to assets/guides_helpers.md.DKuUSSRm.js index 433cf36..d3a2cd7 100644 --- a/assets/guides_helpers.md.BMq5UiJl.js +++ b/assets/guides_helpers.md.DKuUSSRm.js @@ -1 +1 @@ -import{_ as s,c as a,o as t,m as e,a as r}from"./chunks/framework.NdlCD-r1.js";const u=JSON.parse('{"title":"Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"guides/helpers.md","filePath":"guides/helpers.md","lastUpdated":1714127413000}'),o={name:"guides/helpers.md"},l=e("h1",{id:"helpers",tabindex:"-1"},[r("Helpers "),e("a",{class:"header-anchor",href:"#helpers","aria-label":'Permalink to "Helpers"'},"​")],-1),d=[l];function c(n,p,i,h,_,m){return t(),a("div",null,d)}const x=s(o,[["render",c]]);export{u as __pageData,x as default}; +import{_ as s,c as a,o as t,m as e,a as r}from"./chunks/framework.yUIHRp4d.js";const u=JSON.parse('{"title":"Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"guides/helpers.md","filePath":"guides/helpers.md","lastUpdated":1714345266000}'),o={name:"guides/helpers.md"},l=e("h1",{id:"helpers",tabindex:"-1"},[r("Helpers "),e("a",{class:"header-anchor",href:"#helpers","aria-label":'Permalink to "Helpers"'},"​")],-1),d=[l];function c(n,p,i,h,_,m){return t(),a("div",null,d)}const x=s(o,[["render",c]]);export{u as __pageData,x as default}; diff --git a/assets/guides_helpers.md.BMq5UiJl.lean.js b/assets/guides_helpers.md.DKuUSSRm.lean.js similarity index 77% rename from assets/guides_helpers.md.BMq5UiJl.lean.js rename to assets/guides_helpers.md.DKuUSSRm.lean.js index 433cf36..d3a2cd7 100644 --- a/assets/guides_helpers.md.BMq5UiJl.lean.js +++ b/assets/guides_helpers.md.DKuUSSRm.lean.js @@ -1 +1 @@ -import{_ as s,c as a,o as t,m as e,a as r}from"./chunks/framework.NdlCD-r1.js";const u=JSON.parse('{"title":"Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"guides/helpers.md","filePath":"guides/helpers.md","lastUpdated":1714127413000}'),o={name:"guides/helpers.md"},l=e("h1",{id:"helpers",tabindex:"-1"},[r("Helpers "),e("a",{class:"header-anchor",href:"#helpers","aria-label":'Permalink to "Helpers"'},"​")],-1),d=[l];function c(n,p,i,h,_,m){return t(),a("div",null,d)}const x=s(o,[["render",c]]);export{u as __pageData,x as default}; +import{_ as s,c as a,o as t,m as e,a as r}from"./chunks/framework.yUIHRp4d.js";const u=JSON.parse('{"title":"Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"guides/helpers.md","filePath":"guides/helpers.md","lastUpdated":1714345266000}'),o={name:"guides/helpers.md"},l=e("h1",{id:"helpers",tabindex:"-1"},[r("Helpers "),e("a",{class:"header-anchor",href:"#helpers","aria-label":'Permalink to "Helpers"'},"​")],-1),d=[l];function c(n,p,i,h,_,m){return t(),a("div",null,d)}const x=s(o,[["render",c]]);export{u as __pageData,x as default}; diff --git a/assets/guides_index.md.D3VZPgkZ.js b/assets/guides_index.md.C1HP3G2z.js similarity index 76% rename from assets/guides_index.md.D3VZPgkZ.js rename to assets/guides_index.md.C1HP3G2z.js index ccc2482..c6f5c9a 100644 --- a/assets/guides_index.md.D3VZPgkZ.js +++ b/assets/guides_index.md.C1HP3G2z.js @@ -1 +1 @@ -import{_ as a,c as t,o as s,m as e,a as d}from"./chunks/framework.NdlCD-r1.js";const f=JSON.parse('{"title":"Guides","description":"","frontmatter":{},"headers":[],"relativePath":"guides/index.md","filePath":"guides/index.md","lastUpdated":1714127413000}'),i={name:"guides/index.md"},n=e("h1",{id:"guides",tabindex:"-1"},[d("Guides "),e("a",{class:"header-anchor",href:"#guides","aria-label":'Permalink to "Guides"'},"​")],-1),o=[n];function r(c,_,l,u,p,m){return s(),t("div",null,o)}const x=a(i,[["render",r]]);export{f as __pageData,x as default}; +import{_ as a,c as t,o as s,m as e,a as d}from"./chunks/framework.yUIHRp4d.js";const f=JSON.parse('{"title":"Guides","description":"","frontmatter":{},"headers":[],"relativePath":"guides/index.md","filePath":"guides/index.md","lastUpdated":1714345266000}'),i={name:"guides/index.md"},n=e("h1",{id:"guides",tabindex:"-1"},[d("Guides "),e("a",{class:"header-anchor",href:"#guides","aria-label":'Permalink to "Guides"'},"​")],-1),o=[n];function r(c,_,l,u,p,m){return s(),t("div",null,o)}const x=a(i,[["render",r]]);export{f as __pageData,x as default}; diff --git a/assets/guides_index.md.D3VZPgkZ.lean.js b/assets/guides_index.md.C1HP3G2z.lean.js similarity index 76% rename from assets/guides_index.md.D3VZPgkZ.lean.js rename to assets/guides_index.md.C1HP3G2z.lean.js index ccc2482..c6f5c9a 100644 --- a/assets/guides_index.md.D3VZPgkZ.lean.js +++ b/assets/guides_index.md.C1HP3G2z.lean.js @@ -1 +1 @@ -import{_ as a,c as t,o as s,m as e,a as d}from"./chunks/framework.NdlCD-r1.js";const f=JSON.parse('{"title":"Guides","description":"","frontmatter":{},"headers":[],"relativePath":"guides/index.md","filePath":"guides/index.md","lastUpdated":1714127413000}'),i={name:"guides/index.md"},n=e("h1",{id:"guides",tabindex:"-1"},[d("Guides "),e("a",{class:"header-anchor",href:"#guides","aria-label":'Permalink to "Guides"'},"​")],-1),o=[n];function r(c,_,l,u,p,m){return s(),t("div",null,o)}const x=a(i,[["render",r]]);export{f as __pageData,x as default}; +import{_ as a,c as t,o as s,m as e,a as d}from"./chunks/framework.yUIHRp4d.js";const f=JSON.parse('{"title":"Guides","description":"","frontmatter":{},"headers":[],"relativePath":"guides/index.md","filePath":"guides/index.md","lastUpdated":1714345266000}'),i={name:"guides/index.md"},n=e("h1",{id:"guides",tabindex:"-1"},[d("Guides "),e("a",{class:"header-anchor",href:"#guides","aria-label":'Permalink to "Guides"'},"​")],-1),o=[n];function r(c,_,l,u,p,m){return s(),t("div",null,o)}const x=a(i,[["render",r]]);export{f as __pageData,x as default}; diff --git a/assets/guides_roadmap.md.CLQWjDQM.js b/assets/guides_roadmap.md.CLQWjDQM.js new file mode 100644 index 0000000..94d30cc --- /dev/null +++ b/assets/guides_roadmap.md.CLQWjDQM.js @@ -0,0 +1 @@ +import{_ as e,c as a,o,a2 as t}from"./chunks/framework.yUIHRp4d.js";const f=JSON.parse('{"title":"Roadmap","description":"","frontmatter":{},"headers":[],"relativePath":"guides/roadmap.md","filePath":"guides/roadmap.md","lastUpdated":1714345266000}'),i={name:"guides/roadmap.md"},r=t('

    Roadmap

    The 1.0.0 of Piral.Blazor.Server is expected end of Q2 2024 / beginning of Q3 2024. In the 1.0.0 we will include:

    • Loading of MFs at the server
    • Support for client-only MFs
    • Integration with Picard to load and integrate components from other MFs
    • Outline for compatibility / merger with Piral.Blazor (client library)
    • Examples & improved DX for using Piral.Blazor.Server without a feed service
    • Full integration in the Piral ecosystem
    ',3),l=[r];function d(n,s,c,p,m,_){return o(),a("div",null,l)}const u=e(i,[["render",d]]);export{f as __pageData,u as default}; diff --git a/assets/guides_roadmap.md.CLQWjDQM.lean.js b/assets/guides_roadmap.md.CLQWjDQM.lean.js new file mode 100644 index 0000000..9b5d910 --- /dev/null +++ b/assets/guides_roadmap.md.CLQWjDQM.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o,a2 as t}from"./chunks/framework.yUIHRp4d.js";const f=JSON.parse('{"title":"Roadmap","description":"","frontmatter":{},"headers":[],"relativePath":"guides/roadmap.md","filePath":"guides/roadmap.md","lastUpdated":1714345266000}'),i={name:"guides/roadmap.md"},r=t("",3),l=[r];function d(n,s,c,p,m,_){return o(),a("div",null,l)}const u=e(i,[["render",d]]);export{f as __pageData,u as default}; diff --git a/assets/imprint.md.CEUWjG_j.js b/assets/imprint.md.CALtOqGV.js similarity index 89% rename from assets/imprint.md.CEUWjG_j.js rename to assets/imprint.md.CALtOqGV.js index 30d0a14..b6981ec 100644 --- a/assets/imprint.md.CEUWjG_j.js +++ b/assets/imprint.md.CALtOqGV.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a2 as r}from"./chunks/framework.NdlCD-r1.js";const _=JSON.parse('{"title":"Imprint","description":"","frontmatter":{"title":"Imprint","layout":"home"},"headers":[],"relativePath":"imprint.md","filePath":"imprint.md","lastUpdated":1714127413000}'),n={name:"imprint.md"},i=r('

    Imprint

    Information provided according to sec. 5 German Telemedia Act (TMG):

    smapiot GmbH
    Weidenstrasse 14a
    85662 Hohenbrunn
    Germany

    Contact

    Telephone: +49 (0) 8102 9998476

    Fax: +49 (0) 8102 9984395

    E-Mail: info@smapiot.com

    Represented by: Lothar Schöttner

    Register Entry

    Registering court: District Court Munich

    Registration number: HRB 214798

    VAT ID number according to sec. 27a German Value Added Tax Act: DE297589818

    Professional Indemnity Insurance

    Name and residence of insurer:

    Allianz Versicherungs-AG
    10900 Berlin
    Scope of insurance: Worldwide with exception of US and Canada

    ',15),o=[i];function s(c,p,d,l,m,h){return t(),a("div",null,o)}const f=e(n,[["render",s]]);export{_ as __pageData,f as default}; +import{_ as e,c as a,o as t,a2 as r}from"./chunks/framework.yUIHRp4d.js";const _=JSON.parse('{"title":"Imprint","description":"","frontmatter":{"title":"Imprint","layout":"home"},"headers":[],"relativePath":"imprint.md","filePath":"imprint.md","lastUpdated":1714345266000}'),n={name:"imprint.md"},i=r('

    Imprint

    Information provided according to sec. 5 German Telemedia Act (TMG):

    smapiot GmbH
    Weidenstrasse 14a
    85662 Hohenbrunn
    Germany

    Contact

    Telephone: +49 (0) 8102 9998476

    Fax: +49 (0) 8102 9984395

    E-Mail: info@smapiot.com

    Represented by: Lothar Schöttner

    Register Entry

    Registering court: District Court Munich

    Registration number: HRB 214798

    VAT ID number according to sec. 27a German Value Added Tax Act: DE297589818

    Professional Indemnity Insurance

    Name and residence of insurer:

    Allianz Versicherungs-AG
    10900 Berlin
    Scope of insurance: Worldwide with exception of US and Canada

    ',15),o=[i];function s(c,p,d,l,m,h){return t(),a("div",null,o)}const f=e(n,[["render",s]]);export{_ as __pageData,f as default}; diff --git a/assets/imprint.md.CEUWjG_j.lean.js b/assets/imprint.md.CALtOqGV.lean.js similarity index 55% rename from assets/imprint.md.CEUWjG_j.lean.js rename to assets/imprint.md.CALtOqGV.lean.js index eced2c7..2dee6bb 100644 --- a/assets/imprint.md.CEUWjG_j.lean.js +++ b/assets/imprint.md.CALtOqGV.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a2 as r}from"./chunks/framework.NdlCD-r1.js";const _=JSON.parse('{"title":"Imprint","description":"","frontmatter":{"title":"Imprint","layout":"home"},"headers":[],"relativePath":"imprint.md","filePath":"imprint.md","lastUpdated":1714127413000}'),n={name:"imprint.md"},i=r("",15),o=[i];function s(c,p,d,l,m,h){return t(),a("div",null,o)}const f=e(n,[["render",s]]);export{_ as __pageData,f as default}; +import{_ as e,c as a,o as t,a2 as r}from"./chunks/framework.yUIHRp4d.js";const _=JSON.parse('{"title":"Imprint","description":"","frontmatter":{"title":"Imprint","layout":"home"},"headers":[],"relativePath":"imprint.md","filePath":"imprint.md","lastUpdated":1714345266000}'),n={name:"imprint.md"},i=r("",15),o=[i];function s(c,p,d,l,m,h){return t(),a("div",null,o)}const f=e(n,[["render",s]]);export{_ as __pageData,f as default}; diff --git a/assets/index.md.BP3xTXjF.js b/assets/index.md.BI9PuDs7.js similarity index 91% rename from assets/index.md.BP3xTXjF.js rename to assets/index.md.BI9PuDs7.js index 90484dd..a972d98 100644 --- a/assets/index.md.BP3xTXjF.js +++ b/assets/index.md.BI9PuDs7.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.NdlCD-r1.js";const m=JSON.parse('{"title":"Piral.Blazor - Micro Frontends for .NET","titleTemplate":":title","description":"","frontmatter":{"title":"Piral.Blazor - Micro Frontends for .NET","titleTemplate":":title","head":[["meta",{"property":"og:description","content":"Piral.Blazor allows you to write distributed web applications using dotnet and Blazor."}]],"layout":"home","hero":{"name":"Piral.Blazor","text":"Scale Your Web App","tagline":"Write distributed web applications with Micro Frontends using dotnet and Blazor.","image":{"src":"/images/logo-large.png","alt":"Piral.Blazor"},"actions":[{"theme":"brand","text":"View Docs","link":"/getting-started/"},{"theme":"alt","text":"View Examples","link":"/examples/"}]},"features":[{"icon":"🚀","title":"Fully Portable","details":"Take your existing code and put it in one or more micro frontends. Share your micro frontends across different applications."},{"icon":"🔋","title":"Batteries Included","details":"Piral is an ecosystem made specifically for micro frontends. Enjoy command line tools, services, editor plugins, and browser extensions."},{"icon":"🧩","title":"Composable","details":"Create web applications that are dynamically composed according to feature flags and rules."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1714127413000}'),o={name:"index.md"};function i(r,n,l,s,d,c){return a(),t("div")}const f=e(o,[["render",i]]);export{m as __pageData,f as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.yUIHRp4d.js";const m=JSON.parse('{"title":"Piral.Blazor - Micro Frontends for .NET","titleTemplate":":title","description":"","frontmatter":{"title":"Piral.Blazor - Micro Frontends for .NET","titleTemplate":":title","head":[["meta",{"property":"og:description","content":"Piral.Blazor allows you to write distributed web applications using dotnet and Blazor."}]],"layout":"home","hero":{"name":"Piral.Blazor","text":"Scale Your Web App","tagline":"Write distributed web applications with Micro Frontends using dotnet and Blazor.","image":{"src":"/images/logo-large.png","alt":"Piral.Blazor"},"actions":[{"theme":"brand","text":"View Docs","link":"/getting-started/"},{"theme":"alt","text":"View Examples","link":"/examples/"}]},"features":[{"icon":"🚀","title":"Fully Portable","details":"Take your existing code and put it in one or more micro frontends. Share your micro frontends across different applications."},{"icon":"🔋","title":"Batteries Included","details":"Piral is an ecosystem made specifically for micro frontends. Enjoy command line tools, services, editor plugins, and browser extensions."},{"icon":"🧩","title":"Composable","details":"Create web applications that are dynamically composed according to feature flags and rules."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1714345266000}'),o={name:"index.md"};function i(r,n,l,s,d,c){return a(),t("div")}const f=e(o,[["render",i]]);export{m as __pageData,f as default}; diff --git a/assets/index.md.BP3xTXjF.lean.js b/assets/index.md.BI9PuDs7.lean.js similarity index 91% rename from assets/index.md.BP3xTXjF.lean.js rename to assets/index.md.BI9PuDs7.lean.js index 90484dd..a972d98 100644 --- a/assets/index.md.BP3xTXjF.lean.js +++ b/assets/index.md.BI9PuDs7.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.NdlCD-r1.js";const m=JSON.parse('{"title":"Piral.Blazor - Micro Frontends for .NET","titleTemplate":":title","description":"","frontmatter":{"title":"Piral.Blazor - Micro Frontends for .NET","titleTemplate":":title","head":[["meta",{"property":"og:description","content":"Piral.Blazor allows you to write distributed web applications using dotnet and Blazor."}]],"layout":"home","hero":{"name":"Piral.Blazor","text":"Scale Your Web App","tagline":"Write distributed web applications with Micro Frontends using dotnet and Blazor.","image":{"src":"/images/logo-large.png","alt":"Piral.Blazor"},"actions":[{"theme":"brand","text":"View Docs","link":"/getting-started/"},{"theme":"alt","text":"View Examples","link":"/examples/"}]},"features":[{"icon":"🚀","title":"Fully Portable","details":"Take your existing code and put it in one or more micro frontends. Share your micro frontends across different applications."},{"icon":"🔋","title":"Batteries Included","details":"Piral is an ecosystem made specifically for micro frontends. Enjoy command line tools, services, editor plugins, and browser extensions."},{"icon":"🧩","title":"Composable","details":"Create web applications that are dynamically composed according to feature flags and rules."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1714127413000}'),o={name:"index.md"};function i(r,n,l,s,d,c){return a(),t("div")}const f=e(o,[["render",i]]);export{m as __pageData,f as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.yUIHRp4d.js";const m=JSON.parse('{"title":"Piral.Blazor - Micro Frontends for .NET","titleTemplate":":title","description":"","frontmatter":{"title":"Piral.Blazor - Micro Frontends for .NET","titleTemplate":":title","head":[["meta",{"property":"og:description","content":"Piral.Blazor allows you to write distributed web applications using dotnet and Blazor."}]],"layout":"home","hero":{"name":"Piral.Blazor","text":"Scale Your Web App","tagline":"Write distributed web applications with Micro Frontends using dotnet and Blazor.","image":{"src":"/images/logo-large.png","alt":"Piral.Blazor"},"actions":[{"theme":"brand","text":"View Docs","link":"/getting-started/"},{"theme":"alt","text":"View Examples","link":"/examples/"}]},"features":[{"icon":"🚀","title":"Fully Portable","details":"Take your existing code and put it in one or more micro frontends. Share your micro frontends across different applications."},{"icon":"🔋","title":"Batteries Included","details":"Piral is an ecosystem made specifically for micro frontends. Enjoy command line tools, services, editor plugins, and browser extensions."},{"icon":"🧩","title":"Composable","details":"Create web applications that are dynamically composed according to feature flags and rules."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1714345266000}'),o={name:"index.md"};function i(r,n,l,s,d,c){return a(),t("div")}const f=e(o,[["render",i]]);export{m as __pageData,f as default}; diff --git a/examples/index.html b/examples/index.html index c8bf771..527e5e1 100644 --- a/examples/index.html +++ b/examples/index.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ -
    Skip to content

    Released under the MIT License.

    - + + \ No newline at end of file diff --git a/getting-started/concepts.html b/getting-started/concepts.html index e63066f..7fa1d4f 100644 --- a/getting-started/concepts.html +++ b/getting-started/concepts.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ -
    Skip to content

    Concepts

    Generally, the terminology and ideas from Piral have been transported over.

    App Shell / Piral Instance

    An app shell (or Piral instance) is the main orchestration point. It must include the orchestrator, which is capable of loading the micro frontends and render their components.

    For Piral.Blazor.Core (SPA) the app shell is a JavaScript project based on piral (npm package). It may already come with piral-blazor installed to provide Blazor functionality. Alternatively, micro frontends are regarded as standalone, with piral-blazor being used directly in the micro frontend.

    For Piral.Blazor.Orchestrator (server) the app shell is your ASP.NET Core application referencing the NuGet package. It needs to be set up in the way that is described in this documentation.

    Micro Frontend / Pilet

    A micro frontend (or pilet) is a module that can be loaded into an app shell. You can think of it as a plugin. A micro frontend can register / provide domain-specific components that are then rendered where specified. While a SPA micro frontend may come with all kinds of components (e.g., Angular, React, ... - not only Blazor), a server micro frontend can only register Blazor components.

    A micro frontend starts as a Razor Component Library (RCL), that is different to your usual RCL in the way how it is consumed. While a standard RCL is used directly (reference the assembly, use the components with their fully qualified names), a micro frontend is used indirectly. It binds to certain registrations, e.g., to include a page, a menu item, or just some generic component.

    Micro Frontend Discovery / Feed Service

    A micro frontend discovery service (or feed service) is a web service providing an API to publish or consume micro frontends. Usually, you want to access a certain feed that belongs to your application. A feed is a collection of micro frontends. Only users / systems that you allowed should be capable of publishing micro frontends (completely new or updated) to your feed.

    A feed service is not required to operate Piral.Blazor, but we strongly recommend that you use some approach that allows such scaling. There is a free community service available from us. Alternatively, you can also get a licensed Docker image. For the latter you can also start with a free trial.

    Pilet API

    Each micro frontend has a lifecycle that starts with a setup and ends with a teardown method. In the SPA method the whole lifecycle is provided in JavaScript, which is automatically generated and - ideally - does not need to be modified. For the server integration the lifecycle is contained in a class that inherits from IMfModule.

    Once the setup method of your micro frontend is called you receive an object with some methods. This object (or more specifically the methods available on the object) are called the pilet API. It's the interface that can be used by a micro frontend to register its functionality in the app shell.

    Emulator

    To allow local development of a micro frontend without needing to have or start the app shell locally there is a special mechanism known as an emulator. An emulator packages a dedicated debug build of the app shell in a package. For the SPA method this is an npm package, while for the server this is a NuGet package.

    In any case the general idea is that you'll only need to reference this to debug your micro frontend (within the app shell - as you will later see it).

    This idea is called emulator as it emulates a full runtime environment. You can also think of it as the runtime emulator from serverless environment (e.g., AWS Lambda, Azure Functions) or an emulator of your mobile phone OS (e.g., Android) when developing an app for it.

    Released under the MIT License.

    - +
    Skip to content

    Concepts

    Generally, the terminology and ideas from Piral have been transported over.

    App Shell / Piral Instance

    An app shell (or Piral instance) is the main orchestration point. It must include the orchestrator, which is capable of loading the micro frontends and render their components.

    For Piral.Blazor.Core (SPA) the app shell is a JavaScript project based on piral (npm package). It may already come with piral-blazor installed to provide Blazor functionality. Alternatively, micro frontends are regarded as standalone, with piral-blazor being used directly in the micro frontend.

    For Piral.Blazor.Orchestrator (server) the app shell is your ASP.NET Core application referencing the NuGet package. It needs to be set up in the way that is described in this documentation.

    Micro Frontend / Pilet

    A micro frontend (or pilet) is a module that can be loaded into an app shell. You can think of it as a plugin. A micro frontend can register / provide domain-specific components that are then rendered where specified. While a SPA micro frontend may come with all kinds of components (e.g., Angular, React, ... - not only Blazor), a server micro frontend can only register Blazor components.

    A micro frontend starts as a Razor Component Library (RCL), that is different to your usual RCL in the way how it is consumed. While a standard RCL is used directly (reference the assembly, use the components with their fully qualified names), a micro frontend is used indirectly. It binds to certain registrations, e.g., to include a page, a menu item, or just some generic component.

    Micro Frontend Discovery / Feed Service

    A micro frontend discovery service (or feed service) is a web service providing an API to publish or consume micro frontends. Usually, you want to access a certain feed that belongs to your application. A feed is a collection of micro frontends. Only users / systems that you allowed should be capable of publishing micro frontends (completely new or updated) to your feed.

    A feed service is not required to operate Piral.Blazor, but we strongly recommend that you use some approach that allows such scaling. There is a free community service available from us. Alternatively, you can also get a licensed Docker image. For the latter you can also start with a free trial.

    Pilet API

    Each micro frontend has a lifecycle that starts with a setup and ends with a teardown method. In the SPA method the whole lifecycle is provided in JavaScript, which is automatically generated and - ideally - does not need to be modified. For the server integration the lifecycle is contained in a class that inherits from IMfModule.

    Once the setup method of your micro frontend is called you receive an object with some methods. This object (or more specifically the methods available on the object) are called the pilet API. It's the interface that can be used by a micro frontend to register its functionality in the app shell.

    Emulator

    To allow local development of a micro frontend without needing to have or start the app shell locally there is a special mechanism known as an emulator. An emulator packages a dedicated debug build of the app shell in a package. For the SPA method this is an npm package, while for the server this is a NuGet package.

    In any case the general idea is that you'll only need to reference this to debug your micro frontend (within the app shell - as you will later see it).

    This idea is called emulator as it emulates a full runtime environment. You can also think of it as the runtime emulator from serverless environment (e.g., AWS Lambda, Azure Functions) or an emulator of your mobile phone OS (e.g., Android) when developing an app for it.

    Released under the MIT License.

    + \ No newline at end of file diff --git a/getting-started/index.html b/getting-started/index.html index 64f941f..0870227 100644 --- a/getting-started/index.html +++ b/getting-started/index.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ -
    Skip to content

    Getting Started

    Piral.Blazor exists in multiple forms. Right now, we have:

    • Piral.Blazor.Core, which is made to be consumed in a JavaScript / SPA created with the Piral framework
    • Piral.Blazor.Orchestrator, which is made to be consumed in an ASP.NET Core web application to enable server-side micro frontends

    While both are fundamentally different, they share the same goals and have an overlapping development philosophy.

    INFO

    Piral.Blazor.Core is never directly referenced, you'd rather install the blazor npm package.

    In the future there will be an overlap between the two, for now you need to decide in the beginning. Usually, the decision is rather simple - it boils down to:

    • If you have an existing Blazor server application that you now want to continue developing using a micro frontend approach then use Piral.Blazor.Orchestrator
    • If you have an existing SPA that you want to extend with some component written in Blazor then aim for the Piral framework with Piral.Blazor.Core

    Generally, Piral.Blazor.Orchestrator will allow you to do everything in Blazor while Piral.Blazor.Core will require you to work with TypeScript and other technologies such as React, too.

    Released under the MIT License.

    - +
    Skip to content

    Getting Started

    Piral.Blazor exists in multiple forms. Right now, we have:

    • Piral.Blazor.Core, which is made to be consumed in a JavaScript / SPA created with the Piral framework
    • Piral.Blazor.Orchestrator, which is made to be consumed in an ASP.NET Core web application to enable server-side micro frontends

    While both are fundamentally different, they share the same goals and have an overlapping development philosophy.

    INFO

    Piral.Blazor.Core is never directly referenced, you'd rather install the blazor npm package.

    In the future there will be an overlap between the two, for now you need to decide in the beginning. Usually, the decision is rather simple - it boils down to:

    • If you have an existing Blazor server application that you now want to continue developing using a micro frontend approach then use Piral.Blazor.Orchestrator
    • If you have an existing SPA that you want to extend with some component written in Blazor then aim for the Piral framework with Piral.Blazor.Core

    Generally, Piral.Blazor.Orchestrator will allow you to do everything in Blazor while Piral.Blazor.Core will require you to work with TypeScript and other technologies such as React, too.

    Released under the MIT License.

    + \ No newline at end of file diff --git a/getting-started/server/emulator.html b/getting-started/server/emulator.html index c971d5c..b3385fa 100644 --- a/getting-started/server/emulator.html +++ b/getting-started/server/emulator.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ -
    Skip to content

    Publishing the Emulator

    For developing a micro frontend you'll need an emulator. An emulator is just a NuGet package containing a special build of the app shell that you've build for running your micro frontends.

    Publishing using the piral-server-server CLI

    The command piral-blazor-server create-emulator can be used to create an emulator NuGet package for the current Piral.Blazor server, i.e., the app shell that should be used.

    Example:

    sh
    piral-blazor-server create-emulator -o dist

    This command creates an emulator NuGet package in the dist directory. The csproj file for the example above is assumed to be in the working directory. The NuGet package can then be published using nuget push or dotnet nuget push.

    Publishing using the dotnet CLI

    If you want to have full control then using a custom sequence for creating and publishing the emulator might be what you are looking for. For this you'll need the dotnet and the nuget CLI. You will also need to create a custom *.nuspec file.

    We start the sequence by producing a release build of your application:

    sh
    dotnet publish -c Release

    This will create the emulator's files in the publish directory (bin/Release/net8.0/publish).

    Now create a NuGet config inside the bin/Release/net8.0/publish directory using the following properties:

    • Name of your app shell (or how you want to call the emulator package)
    • Version of your app shell
    • Proper description, author etc. fields

    The files should be set to **/*, i.e., take all files of the publish directory and place it in the NuGet package.

    You need the nuget command line tooling to run nuget pack without any compilation. If you only have dotnet then this won't work (as dotnet will only run against a csproj, which the publish folder does not have).

    Once the *.nupkg file is ready you can publish it to the NuGet feed or your choice.

    Released under the MIT License.

    - +
    Skip to content

    Publishing the Emulator

    For developing a micro frontend you'll need an emulator. An emulator is just a NuGet package containing a special build of the app shell that you've build for running your micro frontends.

    Publishing using the piral-server-server CLI

    The command piral-blazor-server create-emulator can be used to create an emulator NuGet package for the current Piral.Blazor server, i.e., the app shell that should be used.

    Example:

    sh
    piral-blazor-server create-emulator -o dist

    This command creates an emulator NuGet package in the dist directory. The csproj file for the example above is assumed to be in the working directory. The NuGet package can then be published using nuget push or dotnet nuget push.

    Publishing using the dotnet CLI

    If you want to have full control then using a custom sequence for creating and publishing the emulator might be what you are looking for. For this you'll need the dotnet and the nuget CLI. You will also need to create a custom *.nuspec file.

    We start the sequence by producing a release build of your application:

    sh
    dotnet publish -c Release

    This will create the emulator's files in the publish directory (bin/Release/net8.0/publish).

    Now create a NuGet config inside the bin/Release/net8.0/publish directory using the following properties:

    • Name of your app shell (or how you want to call the emulator package)
    • Version of your app shell
    • Proper description, author etc. fields

    The files should be set to **/*, i.e., take all files of the publish directory and place it in the NuGet package.

    You need the nuget command line tooling to run nuget pack without any compilation. If you only have dotnet then this won't work (as dotnet will only run against a csproj, which the publish folder does not have).

    Once the *.nupkg file is ready you can publish it to the NuGet feed or your choice.

    Released under the MIT License.

    + \ No newline at end of file diff --git a/getting-started/server/microfrontend.html b/getting-started/server/microfrontend.html index 523851b..b12623f 100644 --- a/getting-started/server/microfrontend.html +++ b/getting-started/server/microfrontend.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
    Skip to content

    Micro Frontend Setup

    In general, to create a Blazor pilet using Piral.Blazor.Server you should just create a Razor Component Library (RCL) project. This way, you will need to make the least changes.

    Prerequisites

    You will need to have an app shell using Piral.Blazor.Orchestrator available somewhere.

    From scratch you can create a new Razor Component Library (RCL) project. By changing the csproj file's SDK to Piral.Blazor.Sdk you will be able to debug / develop this very conveniently.

    The RCL has to be for .NET 8.

    Preparation

    You will need to leverage the Piral.Blazor.Sdk SDK in the csproj file like this:

    xml
    <Project Sdk="Piral.Blazor.Sdk/0.5.0">
    +    
    Skip to content

    Micro Frontend Setup

    In general, to create a Blazor pilet using Piral.Blazor.Server you should just create a Razor Component Library (RCL) project. This way, you will need to make the least changes.

    Prerequisites

    You will need to have an app shell using Piral.Blazor.Orchestrator available somewhere.

    From scratch you can create a new Razor Component Library (RCL) project. By changing the csproj file's SDK to Piral.Blazor.Sdk you will be able to debug / develop this very conveniently.

    The RCL has to be for .NET 8.

    Preparation

    You will need to leverage the Piral.Blazor.Sdk SDK in the csproj file like this:

    xml
    <Project Sdk="Piral.Blazor.Sdk/0.5.0">
     
       <PropertyGroup>
         <TargetFramework>net8.0</TargetFramework>
    @@ -66,8 +66,8 @@
     app.AppendScript("_content/BlazorGoogleMaps/js/objectManager.js");

    The paths will be set up / configured correctly by the app shell.

    Dependencies

    Just install your dependencies as you like; if they are correctly in the csproj they will be correctly in the NuGet package.

    Using Components from Micro Frontends

    To use a component (such as "mfa-components" - this name is defined by the micro frontend calling the MapComponent method of the IMfAppService instance passed to their module definition - see below) without any parameters:

    razor
    <MfComponent Name="mfa-component" />

    You can also specify parameters if necessary / wanted:

    razor
    <MfComponent Name="mfa-component" Parameters="@parameters" />

    where

    cs
    private Dictionary<string, object> parameters = new Dictionary<string, object>
     {
       { "Foo", 5 }
    -};

    The MfComponent component is available in the Piral.Blazor.Shared NuGet package. It can be used in the server / app shell or in any micro frontend.

    Alternatively, you can also specify parameters directly, e.g., for the previous example you could also write:

    razor
    <MfComponent Name="mfa-component" Foo="5" />

    Released under the MIT License.

    - +};

    The MfComponent component is available in the Piral.Blazor.Shared NuGet package. It can be used in the server / app shell or in any micro frontend.

    Alternatively, you can also specify parameters directly, e.g., for the previous example you could also write:

    razor
    <MfComponent Name="mfa-component" Foo="5" />

    Released under the MIT License.

    + \ No newline at end of file diff --git a/getting-started/server/publishing.html b/getting-started/server/publishing.html index e19b25b..85b6020 100644 --- a/getting-started/server/publishing.html +++ b/getting-started/server/publishing.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ -
    Skip to content

    Publishing a Micro Frontend

    Micro frontends should be published to a discovery service as well as in form of a NuGet package. If you use the Piral Cloud Feed Service you can also just publish them as NuGet package; the discovery service will do the rest for you.

    Publishing using the piral-server-server CLI

    First, make sure you have the CLI installed. If not, do so using this command:

    sh
    dotnet tool install --global Piral.Blazor.Cli

    This will install the piral-blazor-server tool in the standard binary directory. Now you should be able to use it already.

    Now, you can use the publish-microfrontend command:

    sh
    piral-blazor-server publish-microfrontend --source ./SomeMf --url https://feed.piral.cloud/api/v1/nuget/myfeed/index.json --key abcdef1234

    This would publish the micro frontend contained in the ./SomeMf directory to the myfeed feed of the publicly available community edition of the Piral Cloud Feed Service.

    Publishing using the dotnet CLI

    Alternatively, either use the nuget or dotnet tool to publish the NuGet package:

    sh
    dotnet nuget push SomeMf.nupkg --api-key abcdef1234 --source https://feed.piral.cloud/api/v1/nuget/myfeed/index.json

    This works almost exactly the same as the piral-blazor-server tool, however, it expects you to have the build and pack command applied separately / beforehand.

    Publishing using Visual Studio

    Finally, you can also publish a micro frontend using the Publish NuGet package feature of Visual Studio.

    For this to work you need to have configured a special NuGet feed in Visual Studio using the URL and credentials that you've set up for your micro frontends feed in the Piral Cloud Feed Service.

    Released under the MIT License.

    - +
    Skip to content

    Publishing a Micro Frontend

    Micro frontends should be published to a discovery service as well as in form of a NuGet package. If you use the Piral Cloud Feed Service you can also just publish them as NuGet package; the discovery service will do the rest for you.

    Publishing using the piral-server-server CLI

    First, make sure you have the CLI installed. If not, do so using this command:

    sh
    dotnet tool install --global Piral.Blazor.Cli

    This will install the piral-blazor-server tool in the standard binary directory. Now you should be able to use it already.

    Now, you can use the publish-microfrontend command:

    sh
    piral-blazor-server publish-microfrontend --source ./SomeMf --url https://feed.piral.cloud/api/v1/nuget/myfeed/index.json --key abcdef1234

    This would publish the micro frontend contained in the ./SomeMf directory to the myfeed feed of the publicly available community edition of the Piral Cloud Feed Service.

    Publishing using the dotnet CLI

    Alternatively, either use the nuget or dotnet tool to publish the NuGet package:

    sh
    dotnet nuget push SomeMf.nupkg --api-key abcdef1234 --source https://feed.piral.cloud/api/v1/nuget/myfeed/index.json

    This works almost exactly the same as the piral-blazor-server tool, however, it expects you to have the build and pack command applied separately / beforehand.

    Publishing using Visual Studio

    Finally, you can also publish a micro frontend using the Publish NuGet package feature of Visual Studio.

    For this to work you need to have configured a special NuGet feed in Visual Studio using the URL and credentials that you've set up for your micro frontends feed in the Piral Cloud Feed Service.

    Released under the MIT License.

    + \ No newline at end of file diff --git a/getting-started/server/setup.html b/getting-started/server/setup.html index c6fb1dc..7aaee0d 100644 --- a/getting-started/server/setup.html +++ b/getting-started/server/setup.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
    Skip to content

    Server Setup

    For the server you'll need to build a proper app shell first. If you already have one and need to get started with a micro frontend look at the next chapter.

    Preparation

    For using Piral.Blazor.Server you'll need an ASP.NET Core project using Blazor (server).

    You'll only need to add a single NuGet package to the project:

    ps1
    install-package Piral.Blazor.Orchestrator

    With the package installed you'll need to configure your project to actually use Piral.Blazor.Orchestrator.

    cs
    // Important - an `HttpClient` needs to be present for the MfDiscoveryLoaderService - for
    +    
    Skip to content

    Server Setup

    For the server you'll need to build a proper app shell first. If you already have one and need to get started with a micro frontend look at the next chapter.

    Preparation

    For using Piral.Blazor.Server you'll need an ASP.NET Core project using Blazor (server).

    You'll only need to add a single NuGet package to the project:

    ps1
    install-package Piral.Blazor.Orchestrator

    With the package installed you'll need to configure your project to actually use Piral.Blazor.Orchestrator.

    cs
    // Important - an `HttpClient` needs to be present for the MfDiscoveryLoaderService - for
     // other services it might not be needed; so you can regard this as optional
     builder.Services.AddHttpClient();
     // Add DI services
    @@ -158,8 +158,8 @@
     }

    As you can see the User and Token fields, which are usually required for authenticating against a private feed, are left empty. This is not a mistake, but actually a best practice. You can use the .NET secret manager to then fill these parts. More details can be found in the Microsoft documentation.

    Initial Options

    The behavior of the library can be configured when the DI services are configured, e.g.:

    cs
    builder.Services.AddMicrofrontends<MfDiscoveryLoaderService>(new()
     {
         IsolatedAssemblies = ["BlazorOcticons.dll"],
    -});

    This will instruct the Piral orchestrator to keep loading the locally available (yet centrally provided) BlazorOctions.dll.

    Released under the MIT License.

    - +});

    This will instruct the Piral orchestrator to keep loading the locally available (yet centrally provided) BlazorOctions.dll.

    Released under the MIT License.

    + \ No newline at end of file diff --git a/getting-started/server/tooling.html b/getting-started/server/tooling.html index 32c48a3..2e69934 100644 --- a/getting-started/server/tooling.html +++ b/getting-started/server/tooling.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ -
    Skip to content

    Command Line Tooling

    The dotnet tool (CLI) for working with Piral.Blazor.Server-based applications.

    Installation

    To install the tool globally run the following command:

    sh
    dotnet tool install --global Piral.Blazor.Cli

    This will install the piral-blazor-server tool in the standard binary directory. Now you should be able to use it already.

    Running

    You can invoke the the tool by running the following command:

    sh
    piral-blazor-server <command>

    where <command is one of the following commands:

    • create-emulator
    • prefill-cache
    • publish-microfrontend

    The following sections go into details on these commands.

    Create Emulator

    The command piral-blazor-server create-emulator can be used to create an emulator NuGet package for the current Piral.Blazor server (also referred to as app shell).

    Example:

    sh
    piral-blazor-server create-emulator -o dist

    Creates an emulator (NuGet package) in the dist directory. The csproj file for the example above is assumed to be in the working directory.

    Prefill Cache

    The command piral-blazor-server prefill-cache can be used to prefill the cache. This is useful when you want to operate on a static / pre-configured set of micro frontends. Also, it helps to improve the startup performance. Usually, this command would be used in a CI/CD pipeline, i.e., before the server is actually started or run somewhere.

    Example:

    sh
    piral-blazor-server prefill-cache --environment Production --source ./App --output ./App/.cache

    Prefills the cache using the appsettings.Production.json and appsettings.json files from the App subdirectory of the current working directory. Puts the files in the App/.cache directory.

    Publish Micro Frontend

    The command piral-blazor-server publish-microfrontend can be used to build and publish a micro frontend. This builds, packs, and publishes the micro frontend as a NuGet package.

    Example:

    sh
    piral-blazor-server publish-microfrontend --source ./SomeMf --url https://feed.piral.cloud/api/v1/nuget/myfeed --key abcdef1234

    Builds, packs, and publishes the project found in the SomeMf directory of the current working directory. Uses the given URL as NuGet feed. The authentication is based on the provided key.

    Released under the MIT License.

    - +
    Skip to content

    Command Line Tooling

    The dotnet tool (CLI) for working with Piral.Blazor.Server-based applications.

    Installation

    To install the tool globally run the following command:

    sh
    dotnet tool install --global Piral.Blazor.Cli

    This will install the piral-blazor-server tool in the standard binary directory. Now you should be able to use it already.

    Running

    You can invoke the the tool by running the following command:

    sh
    piral-blazor-server <command>

    where <command is one of the following commands:

    • create-emulator
    • prefill-cache
    • publish-microfrontend

    The following sections go into details on these commands.

    Create Emulator

    The command piral-blazor-server create-emulator can be used to create an emulator NuGet package for the current Piral.Blazor server (also referred to as app shell).

    Example:

    sh
    piral-blazor-server create-emulator -o dist

    Creates an emulator (NuGet package) in the dist directory. The csproj file for the example above is assumed to be in the working directory.

    Prefill Cache

    The command piral-blazor-server prefill-cache can be used to prefill the cache. This is useful when you want to operate on a static / pre-configured set of micro frontends. Also, it helps to improve the startup performance. Usually, this command would be used in a CI/CD pipeline, i.e., before the server is actually started or run somewhere.

    Example:

    sh
    piral-blazor-server prefill-cache --environment Production --source ./App --output ./App/.cache

    Prefills the cache using the appsettings.Production.json and appsettings.json files from the App subdirectory of the current working directory. Puts the files in the App/.cache directory.

    Publish Micro Frontend

    The command piral-blazor-server publish-microfrontend can be used to build and publish a micro frontend. This builds, packs, and publishes the micro frontend as a NuGet package.

    Example:

    sh
    piral-blazor-server publish-microfrontend --source ./SomeMf --url https://feed.piral.cloud/api/v1/nuget/myfeed --key abcdef1234

    Builds, packs, and publishes the project found in the SomeMf directory of the current working directory. Uses the given URL as NuGet feed. The authentication is based on the provided key.

    Released under the MIT License.

    + \ No newline at end of file diff --git a/getting-started/spa/configuration.html b/getting-started/spa/configuration.html index 58ee7eb..54506ef 100644 --- a/getting-started/spa/configuration.html +++ b/getting-started/spa/configuration.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
    Skip to content

    Build Configuration

    The main build configuration is done via the project file. Additionally, some special files are considered, too.

    Project File

    The *.csproj file of your pilet offers you some configuration steps to actually tailor the build to your needs.

    Here is a minimal example configuration:

    xml
    <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
    +    
    Skip to content

    Build Configuration

    The main build configuration is done via the project file. Additionally, some special files are considered, too.

    Project File

    The *.csproj file of your pilet offers you some configuration steps to actually tailor the build to your needs.

    Here is a minimal example configuration:

    xml
    <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
     
       <PropertyGroup>
         <TargetFramework>net8.0</TargetFramework>
    @@ -110,8 +110,8 @@
       "Piral": {
         "feedUrl": "https://feed.piral.cloud/api/v1/pilet/sample"
       }
    -}
  2. In addition, the options for the DevServer also touch the configured options for the Piral.Blazor.Tools, such as OutputFolder which is used to define where the scaffolded pilet is stored.

    Setting the Logging Level

    The log level can be set either within your Blazor pilets using the ILoggingConfiguration service or from JavaScript:

    js
    DotNet.invokeMethodAsync('Piral.Blazor.Core', 'SetLogLevel', logLevel);

    Here, the value for logLevel should be between 0-6, where 0 logs everything (even traces) and 6 logs nothing. Alternatively, you can also set a log level when initializing piral-blazor.

Released under the MIT License.

- +}

In addition, the options for the DevServer also touch the configured options for the Piral.Blazor.Tools, such as OutputFolder which is used to define where the scaffolded pilet is stored.

Setting the Logging Level

The log level can be set either within your Blazor pilets using the ILoggingConfiguration service or from JavaScript:

js
DotNet.invokeMethodAsync('Piral.Blazor.Core', 'SetLogLevel', logLevel);

Here, the value for logLevel should be between 0-6, where 0 logs everything (even traces) and 6 logs nothing. Alternatively, you can also set a log level when initializing piral-blazor.

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/debugging.html b/getting-started/spa/debugging.html index db426fc..7912fa2 100644 --- a/getting-started/spa/debugging.html +++ b/getting-started/spa/debugging.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,9 +23,9 @@ -
Skip to content

Running and Debugging the Pilet

A micro frontend can be debugged using an IDE or the command line.

Using Visual Studio

The by far easiest way is to install the Piral.Blazor.DevServer package (as a replacement for the Microsoft.AspNet.Components.WebAssembly.DevServer package) and use F5 in Microsoft Visual Studio, JetBrains Rider, ... (essentially your IDE, if capable of running Blazor).

Using the Command Line

Alternatively, from your Blazor project folder, you can run your pilet via the Piral CLI:

sh
cd ../piral~/<project-name>
-npm start

In addition to this, if you want to debug your Blazor pilet using for example Visual Studio, these requirements should be considered:

  • keep the Piral CLI running
  • debug your Blazor pilet using IISExpress

⚠️ if you want to run your pilet and directly visit it in the browser without debugging via IISExpress, you will have to disable a kras script injector before visiting the pilet. To do this, go to http://localhost:1234/manage-mock-server/#/injectors, disable the debug.js script, and save your changes. Afterwards, you can visit http://localhost:1234.

Released under the MIT License.

- +
Skip to content

Running and Debugging the Pilet

A micro frontend can be debugged using an IDE or the command line.

Using Visual Studio

The by far easiest way is to install the Piral.Blazor.DevServer package (as a replacement for the Microsoft.AspNet.Components.WebAssembly.DevServer package) and use F5 in Microsoft Visual Studio, JetBrains Rider, ... (essentially your IDE, if capable of running Blazor).

Using the Command Line

Alternatively, from your Blazor project folder, you can run your pilet via the Piral CLI:

sh
cd ../piral~/<project-name>
+npm start

In addition to this, if you want to debug your Blazor pilet using for example Visual Studio, these requirements should be considered:

  • keep the Piral CLI running
  • debug your Blazor pilet using IISExpress

⚠️ if you want to run your pilet and directly visit it in the browser without debugging via IISExpress, you will have to disable a kras script injector before visiting the pilet. To do this, go to http://localhost:1234/manage-mock-server/#/injectors, disable the debug.js script, and save your changes. Afterwards, you can visit http://localhost:1234.

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/dependency-injection.html b/getting-started/spa/dependency-injection.html index c2488af..d87f0e9 100644 --- a/getting-started/spa/dependency-injection.html +++ b/getting-started/spa/dependency-injection.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
Skip to content

Dependency Injection

You can define services for dependency injection in a Module class. The name of the class is arbitrary, but it shows the difference to the standard Program class, which should not be available, as mentioned before.

To be able to compile successfully, a Main method should be declared, which should remain empty.

cs
public class Module
+    
Skip to content

Dependency Injection

You can define services for dependency injection in a Module class. The name of the class is arbitrary, but it shows the difference to the standard Program class, which should not be available, as mentioned before.

To be able to compile successfully, a Main method should be declared, which should remain empty.

cs
public class Module
 {
     public static void Main()
     {
@@ -44,8 +44,8 @@
     public static void ConfigureServices(IServiceCollection services, IConfiguration configuration)
     {
     }
-}

The configuration uses the meta.config of the Pilet API provided by the pilet.

Important: There is no support for the appsettings...json file as the configuration is assumed to be distributed. Use the meta.config approach described below for local development and a proper feed service with configuration support for production purposes.

Released under the MIT License.

- +}

The configuration uses the meta.config of the Pilet API provided by the pilet.

Important: There is no support for the appsettings...json file as the configuration is assumed to be distributed. Use the meta.config approach described below for local development and a proper feed service with configuration support for production purposes.

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/extensions.html b/getting-started/spa/extensions.html index c53301c..abdd8e6 100644 --- a/getting-started/spa/extensions.html +++ b/getting-started/spa/extensions.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
Skip to content

Extensions

To register an extension, the PiralExtension attribute can be used. You will also have to provide the extension slot name that defines where the extension should be rendered. The component can even be registered into multiple slots using multiple attributes.

razor
//counter.razor
+    
Skip to content

Extensions

To register an extension, the PiralExtension attribute can be used. You will also have to provide the extension slot name that defines where the extension should be rendered. The component can even be registered into multiple slots using multiple attributes.

razor
//counter.razor
 
 @attribute [PiralExtension("my-counter-slot")]
 @attribute [PiralExtension("another-extension-slot")]
@@ -41,8 +41,8 @@
     {
         currentCount++;
     }
-}

To use an extension within a Blazor component, the <Extension> component can be used.

razor
<Extension Name="my-counter-slot"></Extension>

Released under the MIT License.

- +}

To use an extension within a Blazor component, the <Extension> component can be used.

razor
<Extension Name="my-counter-slot"></Extension>

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/localization.html b/getting-started/spa/localization.html index d6b63f2..3596130 100644 --- a/getting-started/spa/localization.html +++ b/getting-started/spa/localization.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
Skip to content

Localization

Localization works almost exactly as with standard Blazor, except that the language can be changed at runtime directly rather then requiring a full reload of the page.

The other difference is that the initial language is no longer decided by the server's response headers, but rather by the app shell. The initial configuration options of the piral-blazor plugin allow setting the initialLanguage. These options also allow setting up a callback to decide when to change the language (and to what language). If not explicitly stated Blazor will just listen to the select-language event of Piral, providing a key currentLanguage in the event arguments.

To dynamically change / refresh your components when the language change you'll need to listen to the LanguageChanged event emitted by the injected IPiletService instance:

razor
@inject IStringLocalizer<MyComponent> loc
+    
Skip to content

Localization

Localization works almost exactly as with standard Blazor, except that the language can be changed at runtime directly rather then requiring a full reload of the page.

The other difference is that the initial language is no longer decided by the server's response headers, but rather by the app shell. The initial configuration options of the piral-blazor plugin allow setting the initialLanguage. These options also allow setting up a callback to decide when to change the language (and to what language). If not explicitly stated Blazor will just listen to the select-language event of Piral, providing a key currentLanguage in the event arguments.

To dynamically change / refresh your components when the language change you'll need to listen to the LanguageChanged event emitted by the injected IPiletService instance:

razor
@inject IStringLocalizer<MyComponent> loc
 @inject IPiletService pilet
 
 <h2>@loc["greeting"]</h2>
@@ -34,8 +34,8 @@
         pilet.LanguageChanged += (s, e) => this.StateHasChanged();
         base.OnInitialized();
     }
-}

This way, your components will always remain up-to-date and render the right translations.

Released under the MIT License.

- +}

This way, your components will always remain up-to-date and render the right translations.

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/microfrontend.html b/getting-started/spa/microfrontend.html index 1fd497e..1cda245 100644 --- a/getting-started/spa/microfrontend.html +++ b/getting-started/spa/microfrontend.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,11 +23,11 @@ -
Skip to content

Creating a Blazor Pilet

We recommend that you watch the video on scaffolding from the standard VS template before you go over the details below.

In general, to create a Blazor pilet using Piral.Blazor, two approaches can be used:

From Scratch

In this case, it is highly recommended to use our template. More information and installation instructions can be found in Piral.Blazor.Template.

From an Existing Application

In this case, follow these steps:

  1. Add a PiralInstance property to your .csproj file (The Piral instance name should be the name of the Piral instance you want to use, as it is published on npm.)

    xml
    <PropertyGroup>
    +    
    Skip to content

    Creating a Blazor Pilet

    We recommend that you watch the video on scaffolding from the standard VS template before you go over the details below.

    In general, to create a Blazor pilet using Piral.Blazor, two approaches can be used:

    From Scratch

    In this case, it is highly recommended to use our template. More information and installation instructions can be found in Piral.Blazor.Template.

    From an Existing Application

    In this case, follow these steps:

    1. Add a PiralInstance property to your .csproj file (The Piral instance name should be the name of the Piral instance you want to use, as it is published on npm.)

      xml
      <PropertyGroup>
           <TargetFramework>net8.0</TargetFramework>
           <PiralInstance>my-piral-instance</PiralInstance>
      -</PropertyGroup>

      (You can optionally also specify an NpmRegistry property. The default for this is set to https://registry.npmjs.org/)

    2. Install the Piral.Blazor.Tools and Piral.Blazor.Utils packages, make sure they both have a version number of format 8.0.x

    3. Remove the Microsoft.AspNetCore.Components.WebAssembly.DevServer package and install the Piral.Blazor.DevServer package (using the same version as the packages from (2))

    4. Rename Program.cs to Module.cs, and make sure to make the Main method an empty method.

    5. Build the project. The first time you do this, this can take some time as it will fully scaffold the pilet.

    If you run the solution using F5 the Piral.Blazor.DevServer will start the Piral CLI under the hood. This allows you to not only use .NET Hot-Reload, but also replace the pilets on demand.

    Released under the MIT License.

    - +</PropertyGroup>

    (You can optionally also specify an NpmRegistry property. The default for this is set to https://registry.npmjs.org/)

  2. Install the Piral.Blazor.Tools and Piral.Blazor.Utils packages, make sure they both have a version number of format 8.0.x

  3. Remove the Microsoft.AspNetCore.Components.WebAssembly.DevServer package and install the Piral.Blazor.DevServer package (using the same version as the packages from (2))

  4. Rename Program.cs to Module.cs, and make sure to make the Main method an empty method.

  5. Build the project. The first time you do this, this can take some time as it will fully scaffold the pilet.

If you run the solution using F5 the Piral.Blazor.DevServer will start the Piral CLI under the hood. This allows you to not only use .NET Hot-Reload, but also replace the pilets on demand.

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/other-components.html b/getting-started/spa/other-components.html index ea6789b..77aab8c 100644 --- a/getting-started/spa/other-components.html +++ b/getting-started/spa/other-components.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
Skip to content

Components, Tiles, Menu Items, and Others

To register a Blazor component for use in the pilet API, the PiralComponent attribute can be used in two ways:

  1. [PiralComponent], this will register the component using the fully qualified name.
  2. [PiralComponent(<name>)] will register the component using the custom name provided.

To register these components onto the pilet API, a setup.tsx file should be created at the root of your Blazor project.

This file may then, for example to register a tile, look like this:

tsx
import { PiletApi } from '../piral~/<project_name>/node_modules/<piral_instance>';
+    
Skip to content

Components, Tiles, Menu Items, and Others

To register a Blazor component for use in the pilet API, the PiralComponent attribute can be used in two ways:

  1. [PiralComponent], this will register the component using the fully qualified name.
  2. [PiralComponent(<name>)] will register the component using the custom name provided.

To register these components onto the pilet API, a setup.tsx file should be created at the root of your Blazor project.

This file may then, for example to register a tile, look like this:

tsx
import { PiletApi } from '../piral~/<project_name>/node_modules/<piral_instance>';
 
 type AddScript = (path: string, attrs?: Record<string, string>) => void;
 type AddStyles = (path: string, pos?: 'first' | 'last' | 'before' | ' after') => void;
@@ -35,8 +35,8 @@
 	addScript("_content/Microsoft.Authentication.WebAssembly.Msal/AuthenticationService.js");
 };

The first argument is the (relative) path to the RCL script, while the optional second argument provides additional attributes for the script to be added to the DOM.

The addStyles function can be used to add more style sheets, e.g.:

tsx
export default (app: PiletApi, addScript: AddScript, addStyles: AddStyles) => {
   addStyles("_content/MudBlazor/MudBlazor.min.css");
-};

Important: Non-abstract / exposed components with PiralComponent cannot have a type parameter. As these are directly instantiated from JavaScript there is no way to define the type to be used. As such, you cannot mark components as @[PiralComponent] and @typeparam. If you want to use a generic component, then wrap it (i.e., use a second component declared as a PiralComponent, which only mounts / renders the first component with the desired generic type).

Released under the MIT License.

- +};

Important: Non-abstract / exposed components with PiralComponent cannot have a type parameter. As these are directly instantiated from JavaScript there is no way to define the type to be used. As such, you cannot mark components as @[PiralComponent] and @typeparam. If you want to use a generic component, then wrap it (i.e., use a second component declared as a PiralComponent, which only mounts / renders the first component with the desired generic type).

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/pages.html b/getting-started/spa/pages.html index d593d76..062cba8 100644 --- a/getting-started/spa/pages.html +++ b/getting-started/spa/pages.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
Skip to content

Pages

A standard page in Blazor, using the @page directive, will work as expected, and will be automatically registered on the pilet API.

You can also set multiple @page directives, which will all lead to page registrations.

Route Parameters

If you want to match the route parameter you can use the generic approach, too:

razor
@page "/foo/{id}"
+    
Skip to content

Pages

A standard page in Blazor, using the @page directive, will work as expected, and will be automatically registered on the pilet API.

You can also set multiple @page directives, which will all lead to page registrations.

Route Parameters

If you want to match the route parameter you can use the generic approach, too:

razor
@page "/foo/{id}"
 
 <div>@Id</div>
 
@@ -63,8 +63,8 @@
     [Parameter]
     [PiralQueryParameter("q")]  
     public string SearchQuery { get; set; } 
-}

This would print hello for /foo?q=hello.

Released under the MIT License.

- +}

This would print hello for /foo?q=hello.

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/parameters.html b/getting-started/spa/parameters.html index a6efd1d..4a70b7a 100644 --- a/getting-started/spa/parameters.html +++ b/getting-started/spa/parameters.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
Skip to content

Parameters

Parameters (or "props") are properly forwarded. Usually, it should be sufficient to declare [Parameter] properties in the Blazor components. Besides, there are more advanced ways.

For instance, to access the params prop of an extension you can use the PiralParameter attribute. This way, you can "forward" props from JS to the .NET name of your choice (in this case "params" is renamed to "Parameters").

razor
@attribute [PiralExtension("sample-extension")]
+    
Skip to content

Parameters

Parameters (or "props") are properly forwarded. Usually, it should be sufficient to declare [Parameter] properties in the Blazor components. Besides, there are more advanced ways.

For instance, to access the params prop of an extension you can use the PiralParameter attribute. This way, you can "forward" props from JS to the .NET name of your choice (in this case "params" is renamed to "Parameters").

razor
@attribute [PiralExtension("sample-extension")]
 
 <div>@Parameters.Test</div>
 
@@ -51,8 +51,8 @@
             Test: "Hello world",
         }
     }
-/>

It would just work.

Released under the MIT License.

- +/>

It would just work.

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/pilet-service.html b/getting-started/spa/pilet-service.html index 82728f8..25412fb 100644 --- a/getting-started/spa/pilet-service.html +++ b/getting-started/spa/pilet-service.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
Skip to content

Standard Pilet Service

Every pilet gets automatically a service called IPiletService injected.

Asset URLs

The IPiletService service can be used to compute the URL of a resource.

razor
@inject IPiletService Pilet

The relevant helper method is GetUrl. You can use it like:

razor
@page "/example"
+    
Skip to content

Standard Pilet Service

Every pilet gets automatically a service called IPiletService injected.

Asset URLs

The IPiletService service can be used to compute the URL of a resource.

razor
@inject IPiletService Pilet

The relevant helper method is GetUrl. You can use it like:

razor
@page "/example"
 @inject IPiletService Pilet
 
 <img src=@Pilet.GetUrl("images/something.png") alt="Some image" />

In the example above the resource images/something.png would be placed in the wwwroot folder (i.e., wwwroot/images/something). As the content of the wwwroot folder is copied, the image will also be copied. However, the old local URL is not valid in a pilet, which needs to prefix its resources with its base URL. The function above does that. In that case, the URL would maybe be something like http://localhost:1234/$pilet-api/0/images/something.png while debugging, and another fully qualified URL later in production.

Events

You can use the IPiletService service to emit and receive events via the standard Pilet API event bus. This is great for doing loosely-coupled pilet-to-pilet communication.

Example:

razor
@attribute [PiralComponent]
@@ -78,8 +78,8 @@
       var value = await ps.GetDataValue<string>("myValue");
       Console.WriteLine("Currently stored value is: {0}", value);
     }
-}

Released under the MIT License.

- +}

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/providers.html b/getting-started/spa/providers.html index 5924b0c..8a6f928 100644 --- a/getting-started/spa/providers.html +++ b/getting-started/spa/providers.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,12 +23,12 @@ -
Skip to content

Provider Components

Sometimes Blazor components require some global components (or "providers") to be added. To accomplish this you can create components marked with the PiralProviderAttribute attribute.

Example:

razor
@attribute [PiralProvider]
+    
Skip to content

Provider Components

Sometimes Blazor components require some global components (or "providers") to be added. To accomplish this you can create components marked with the PiralProviderAttribute attribute.

Example:

razor
@attribute [PiralProvider]
 
 <MudThemeProvider/>
 <MudDialogProvider/>
-<MudSnackbarProvider/>

Provider components are adjacent to your other components, which may come and go and will be - in general - somewhere else in the DOM. As such they are not ideal for providing some cascading value or other properties. They are ideal, however, when you need something running all the time.

In contrast, Piral also has the concept of a root component, which comes with another set of constraints.

TIP

When should you use providers vs root components? In case you want something rendered (e.g., for the MudBlazor library) you should place the respective components in a provider. A root component makes sense if you want to use cascade value providers, i.e., something that is sensitive and only works if the cascade is correctly applied.

Providers will never receive any parameters - they are rendered only once and will remain active for the whole lifecycle of the application. There can be more than one provider.

Released under the MIT License.

- +<MudSnackbarProvider/>

Provider components are adjacent to your other components, which may come and go and will be - in general - somewhere else in the DOM. As such they are not ideal for providing some cascading value or other properties. They are ideal, however, when you need something running all the time.

In contrast, Piral also has the concept of a root component, which comes with another set of constraints.

TIP

When should you use providers vs root components? In case you want something rendered (e.g., for the MudBlazor library) you should place the respective components in a provider. A root component makes sense if you want to use cascade value providers, i.e., something that is sensitive and only works if the cascade is correctly applied.

Providers will never receive any parameters - they are rendered only once and will remain active for the whole lifecycle of the application. There can be more than one provider.

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/publishing.html b/getting-started/spa/publishing.html index ce1526f..e8de6a4 100644 --- a/getting-started/spa/publishing.html +++ b/getting-started/spa/publishing.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ -
Skip to content

Publishing a Micro Frontend

You can publish a micro frontend either by using the piral-cli or by setting up a publish profile.

Released under the MIT License.

- +
Skip to content

Publishing a Micro Frontend

You can publish a micro frontend either by using the piral-cli or by setting up a publish profile.

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/root.html b/getting-started/spa/root.html index 86d0caa..11e9671 100644 --- a/getting-started/spa/root.html +++ b/getting-started/spa/root.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ -
Skip to content

Root Component

By default, the Blazor pilets run in a dedicated Blazor application with no root component. If you need a root component, e.g., to provide some common values from a CascadingValue component such as CascadingAuthenticationState from the Microsoft.AspNetCore.Components.Authorization package, you can actually override the default root component:

razor
@attribute [PiralAppRoot]
+    
Skip to content

Root Component

By default, the Blazor pilets run in a dedicated Blazor application with no root component. If you need a root component, e.g., to provide some common values from a CascadingValue component such as CascadingAuthenticationState from the Microsoft.AspNetCore.Components.Authorization package, you can actually override the default root component:

razor
@attribute [PiralAppRoot]
 
 <CascadingAuthenticationState>
     @ChildContent
@@ -45,8 +45,8 @@
     public RenderFragment ChildContent { get; set; }
     
     private string theme = "dark";
-}

It is critical to understand that each attached pilet component starts its own Blazor rendering tree. Therefore, while there is just a single PiralAppRoot component there might be multiple instances active at a given point in time. This is a crucial difference to PiralProvider components, which are essentially singletons from a rendering perspective.

WARNING

There is always just one PiralAppRoot component. If you did not supply one then the default PiralAppRoot will be used. If you already provided one, no other PiralAppRoot can be used.

The difference between app root and provider components is as follows:

  • The PiralAppRoot attribute can only be declared once and will be instantiated per exposed component (i.e., per Blazor render tree), i.e., single declaration, multi instance
  • The PiralProvider attribute can be used as often as you want, but every component using it will be essentially be a singleton at runtime - living in the blazor-root, i.e., multi declaration, single instance

Released under the MIT License.

- +}

It is critical to understand that each attached pilet component starts its own Blazor rendering tree. Therefore, while there is just a single PiralAppRoot component there might be multiple instances active at a given point in time. This is a crucial difference to PiralProvider components, which are essentially singletons from a rendering perspective.

WARNING

There is always just one PiralAppRoot component. If you did not supply one then the default PiralAppRoot will be used. If you already provided one, no other PiralAppRoot can be used.

The difference between app root and provider components is as follows:

  • The PiralAppRoot attribute can only be declared once and will be instantiated per exposed component (i.e., per Blazor render tree), i.e., single declaration, multi instance
  • The PiralProvider attribute can be used as often as you want, but every component using it will be essentially be a singleton at runtime - living in the blazor-root, i.e., multi declaration, single instance

Released under the MIT License.

+ \ No newline at end of file diff --git a/getting-started/spa/setup.html b/getting-started/spa/setup.html index 5a3e1ef..ef3fa37 100644 --- a/getting-started/spa/setup.html +++ b/getting-started/spa/setup.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ -
Skip to content

SPA Setup

In this document we assume that you already have an app shell using Piral. Otherwise, please check out the Piral documentation.

Once you set up your app shell you either need to integrate piral-blazor into it, or create a micro frontend that uses piral-blazor in standalone mode. Both ways are described in the piral-blazor npm package.

Released under the MIT License.

- +
Skip to content

SPA Setup

In this document we assume that you already have an app shell using Piral. Otherwise, please check out the Piral documentation.

Once you set up your app shell you either need to integrate piral-blazor into it, or create a micro frontend that uses piral-blazor in standalone mode. Both ways are described in the piral-blazor npm package.

Released under the MIT License.

+ \ No newline at end of file diff --git a/guides/faq.html b/guides/faq.html index 1d7f275..edc761b 100644 --- a/guides/faq.html +++ b/guides/faq.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ -
Skip to content

Frequently Asked Questions

  1. I cannot use breakpoints when I debug a Piral.Blazor pilet in VS. What could be wrong?

Make sure you actually emit a PDB and have Debug selected as configuration. Also, don't change the configuration to have <DebugType>Full</DebugType> or similar in the project file. You'll need a portable PDB (modern format), not a full PDB (legacy format for Windows).

Released under the MIT License.

- +
Skip to content

Frequently Asked Questions

  1. I cannot use breakpoints when I debug a Piral.Blazor pilet in VS. What could be wrong?

Make sure you actually emit a PDB and have Debug selected as configuration. Also, don't change the configuration to have <DebugType>Full</DebugType> or similar in the project file. You'll need a portable PDB (modern format), not a full PDB (legacy format for Windows).

Released under the MIT License.

+ \ No newline at end of file diff --git a/guides/helpers.html b/guides/helpers.html index 8e9a4cd..32dc010 100644 --- a/guides/helpers.html +++ b/guides/helpers.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ - - + + \ No newline at end of file diff --git a/guides/index.html b/guides/index.html index c8e360a..5c24e8b 100644 --- a/guides/index.html +++ b/guides/index.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,8 +23,8 @@ - - + + \ No newline at end of file diff --git a/guides/roadmap.html b/guides/roadmap.html new file mode 100644 index 0000000..65bea5c --- /dev/null +++ b/guides/roadmap.html @@ -0,0 +1,30 @@ + + + + + + Roadmap - Piral.Blazor + + + + + + + + + + + + + + + + + + + +
Skip to content

Roadmap

The 1.0.0 of Piral.Blazor.Server is expected end of Q2 2024 / beginning of Q3 2024. In the 1.0.0 we will include:

  • Loading of MFs at the server
  • Support for client-only MFs
  • Integration with Picard to load and integrate components from other MFs
  • Outline for compatibility / merger with Piral.Blazor (client library)
  • Examples & improved DX for using Piral.Blazor.Server without a feed service
  • Full integration in the Piral ecosystem

Released under the MIT License.

+ + + + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 290d746..b0a3996 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"getting-started_server_setup.md":"C7UtS3zP","getting-started_concepts.md":"CIKcgNgX","getting-started_index.md":"uW-pn0Vt","getting-started_server_tooling.md":"B-ySUDg6","getting-started_spa_configuration.md":"BS8t4z6M","getting-started_spa_microfrontend.md":"CcqOFkdf","getting-started_spa_other-components.md":"DgWQvoBv","getting-started_spa_parameters.md":"DQV7ZUjt","getting-started_spa_providers.md":"BuNaLMOO","getting-started_spa_publishing.md":"0INpKX_n","getting-started_spa_root.md":"BrwiLAN8","guides_faq.md":"CSImJXsp","getting-started_spa_setup.md":"DkbzmbTn","getting-started_spa_pilet-service.md":"DQWcnSsb","getting-started_server_publishing.md":"DOPJL4Ub","examples_index.md":"BZpxqBm7","index.md":"BP3xTXjF","getting-started_server_microfrontend.md":"C49RkuTw","getting-started_server_emulator.md":"DxDB9wWc","getting-started_spa_debugging.md":"BoFBmjfA","getting-started_spa_dependency-injection.md":"BH-CNyRz","getting-started_spa_extensions.md":"5BTasQ18","getting-started_spa_localization.md":"eD6xa63-","guides_helpers.md":"BMq5UiJl","guides_index.md":"D3VZPgkZ","getting-started_spa_pages.md":"COgeZlBh","imprint.md":"CEUWjG_j"} +{"getting-started_server_publishing.md":"D04JeNly","getting-started_spa_dependency-injection.md":"CtKDFgoc","getting-started_server_emulator.md":"BmRo6yYD","getting-started_spa_root.md":"CxW_mOT8","getting-started_spa_publishing.md":"BW0W7nWK","getting-started_spa_localization.md":"z8BihB5c","getting-started_server_microfrontend.md":"B40AFEAX","examples_index.md":"BVeRSTQC","getting-started_concepts.md":"CZm4ephB","getting-started_spa_configuration.md":"DtLWR4eQ","getting-started_server_tooling.md":"CuSINiVK","getting-started_spa_extensions.md":"BsSgoO13","getting-started_index.md":"B6hd8HOL","guides_helpers.md":"DKuUSSRm","getting-started_spa_setup.md":"BIMiJ6fa","guides_index.md":"C1HP3G2z","getting-started_server_setup.md":"DB5ZqlDD","getting-started_spa_parameters.md":"jOI69umJ","guides_faq.md":"CGQ9K78l","getting-started_spa_providers.md":"C1_eXZdD","getting-started_spa_pages.md":"dtMv85N4","getting-started_spa_other-components.md":"C08vUzW9","getting-started_spa_microfrontend.md":"BTLcZsBe","guides_roadmap.md":"CLQWjDQM","imprint.md":"CALtOqGV","getting-started_spa_pilet-service.md":"DZAsk7XN","index.md":"BI9PuDs7","getting-started_spa_debugging.md":"CKL5AfBJ"} diff --git a/imprint.html b/imprint.html index 1d115f9..1c9ab41 100644 --- a/imprint.html +++ b/imprint.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -24,7 +24,7 @@
Skip to content

Imprint

Information provided according to sec. 5 German Telemedia Act (TMG):

smapiot GmbH
Weidenstrasse 14a
85662 Hohenbrunn
Germany

Contact

Telephone: +49 (0) 8102 9998476

Fax: +49 (0) 8102 9984395

E-Mail: info@smapiot.com

Represented by: Lothar Schöttner

Register Entry

Registering court: District Court Munich

Registration number: HRB 214798

VAT ID number according to sec. 27a German Value Added Tax Act: DE297589818

Professional Indemnity Insurance

Name and residence of insurer:

Allianz Versicherungs-AG
10900 Berlin
Scope of insurance: Worldwide with exception of US and Canada

Released under the MIT License.

- + \ No newline at end of file diff --git a/index.html b/index.html index baca09b..56ee332 100644 --- a/index.html +++ b/index.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -25,7 +25,7 @@
Skip to content

Piral.Blazor

Scale Your Web App

Write distributed web applications with Micro Frontends using dotnet and Blazor.

Piral.Blazor

Released under the MIT License.

- + \ No newline at end of file