diff --git a/docs/.vitepress/config.mjs b/docs/.vitepress/config.mjs index 2d8d63c..7b55b52 100644 --- a/docs/.vitepress/config.mjs +++ b/docs/.vitepress/config.mjs @@ -19,7 +19,6 @@ export default defineConfig({ text: 'Introduction', items: [ {text: 'What is Cine Fox?', link: '/cine-fox'}, - {text: 'Version', link: '/version'}, ], }, { @@ -95,6 +94,10 @@ export default defineConfig({ { text: 'Software', link: '/software', + collapsed: true, + items: [ + {text: 'Version', link: '/version'}, + ] }, { text: 'Android App', diff --git a/docs/.vitepress/dist/404.html b/docs/.vitepress/dist/404.html index 370163c..68482be 100644 --- a/docs/.vitepress/dist/404.html +++ b/docs/.vitepress/dist/404.html @@ -8,7 +8,7 @@ - + @@ -16,7 +16,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.
- + \ No newline at end of file diff --git a/docs/.vitepress/dist/android.html b/docs/.vitepress/dist/android.html index 875d1a6..013c2ac 100644 --- a/docs/.vitepress/dist/android.html +++ b/docs/.vitepress/dist/android.html @@ -8,21 +8,21 @@ - + - - - + + + -
Skip to content

Android App

use Cine-Fox WebUI in your Android phone

TIP

Before using the Android App, please make sure that cine-fox is running well on Pi5.

How to use

  1. sudo apt install dhcpcd
  2. sudo nano /etc/dhcpcd.conf
  3. add these lines
interface usb0
+    
Skip to content

Android App

use Cine-Fox WebUI in your Android phone

TIP

Before using the Android App, please make sure that cine-fox is running well on Pi5.

How to use

  1. sudo apt install dhcpcd
  2. sudo nano /etc/dhcpcd.conf
  3. add these lines
interface usb0
 static ip_address=192.168.42.42/24
 static routers=192.168.42.129
-static domain_name_servers=192.168.42.129
  1. sudo systemctl restart dhcpcd
  2. install apk download
  3. connect to pi and enable usb tethering
  4. launch App
- +static domain_name_servers=192.168.42.129
  1. sudo systemctl restart dhcpcd
  2. install apk download
  3. connect to pi and enable usb tethering
  4. launch App
+ \ No newline at end of file diff --git a/docs/.vitepress/dist/assets/android.md.DpcUSkv6.js b/docs/.vitepress/dist/assets/android.md.DpcUSkv6.js deleted file mode 100644 index 928dbd0..0000000 --- a/docs/.vitepress/dist/assets/android.md.DpcUSkv6.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as a,c as e,o as s,a1 as t}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse('{"title":"Android App","description":"","frontmatter":{},"headers":[],"relativePath":"android.md","filePath":"android.md","lastUpdated":1719808092000}'),n={name:"android.md"},o=t(`

Android App

use Cine-Fox WebUI in your Android phone

TIP

Before using the Android App, please make sure that cine-fox is running well on Pi5.

How to use

  1. sudo apt install dhcpcd
  2. sudo nano /etc/dhcpcd.conf
  3. add these lines
interface usb0
-static ip_address=192.168.42.42/24
-static routers=192.168.42.129
-static domain_name_servers=192.168.42.129
  1. sudo systemctl restart dhcpcd
  2. install apk download
  3. connect to pi and enable usb tethering
  4. launch App
`,7),i=[o];function d(l,p,c,r,h,u){return s(),e("div",null,i)}const b=a(n,[["render",d]]);export{m as __pageData,b as default}; diff --git a/docs/.vitepress/dist/assets/android.md.DpcUSkv6.lean.js b/docs/.vitepress/dist/assets/android.md.DpcUSkv6.lean.js deleted file mode 100644 index a4d8dad..0000000 --- a/docs/.vitepress/dist/assets/android.md.DpcUSkv6.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as e,o as s,a1 as t}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse('{"title":"Android App","description":"","frontmatter":{},"headers":[],"relativePath":"android.md","filePath":"android.md","lastUpdated":1719808092000}'),n={name:"android.md"},o=t("",7),i=[o];function d(l,p,c,r,h,u){return s(),e("div",null,i)}const b=a(n,[["render",d]]);export{m as __pageData,b as default}; diff --git a/docs/.vitepress/dist/assets/android.md.i-npF07s.js b/docs/.vitepress/dist/assets/android.md.i-npF07s.js new file mode 100644 index 0000000..6aca36b --- /dev/null +++ b/docs/.vitepress/dist/assets/android.md.i-npF07s.js @@ -0,0 +1,4 @@ +import{_ as a,c as e,o as s,a1 as t}from"./chunks/framework.vateGHBz.js";const m=JSON.parse('{"title":"Android App","description":"","frontmatter":{},"headers":[],"relativePath":"android.md","filePath":"android.md","lastUpdated":1719906963000}'),o={name:"android.md"},n=t(`

Android App

use Cine-Fox WebUI in your Android phone

TIP

Before using the Android App, please make sure that cine-fox is running well on Pi5.

How to use

  1. sudo apt install dhcpcd
  2. sudo nano /etc/dhcpcd.conf
  3. add these lines
interface usb0
+static ip_address=192.168.42.42/24
+static routers=192.168.42.129
+static domain_name_servers=192.168.42.129
  1. sudo systemctl restart dhcpcd
  2. install apk download
  3. connect to pi and enable usb tethering
  4. launch App
`,7),i=[n];function d(l,p,c,r,h,u){return s(),e("div",null,i)}const b=a(o,[["render",d]]);export{m as __pageData,b as default}; diff --git a/docs/.vitepress/dist/assets/android.md.i-npF07s.lean.js b/docs/.vitepress/dist/assets/android.md.i-npF07s.lean.js new file mode 100644 index 0000000..79e07d4 --- /dev/null +++ b/docs/.vitepress/dist/assets/android.md.i-npF07s.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as s,a1 as t}from"./chunks/framework.vateGHBz.js";const m=JSON.parse('{"title":"Android App","description":"","frontmatter":{},"headers":[],"relativePath":"android.md","filePath":"android.md","lastUpdated":1719906963000}'),o={name:"android.md"},n=t("",7),i=[n];function d(l,p,c,r,h,u){return s(),e("div",null,i)}const b=a(o,[["render",d]]);export{m as __pageData,b as default}; diff --git a/docs/.vitepress/dist/assets/app.DhYPmC8R.js b/docs/.vitepress/dist/assets/app.CvQwP9hV.js similarity index 81% rename from docs/.vitepress/dist/assets/app.DhYPmC8R.js rename to docs/.vitepress/dist/assets/app.CvQwP9hV.js index 96bb1e9..25317a1 100644 --- a/docs/.vitepress/dist/assets/app.DhYPmC8R.js +++ b/docs/.vitepress/dist/assets/app.CvQwP9hV.js @@ -1 +1 @@ -import{R as i}from"./chunks/theme.6Kvju6L6.js";import{U as o,ag as u,ah as l,ai as c,aj as f,ak as d,al as m,am as h,an as g,ao as A,ap as y,d as P,u as v,k as w,y as C,aq as R,ar as b,as as E,at as S}from"./chunks/framework.aklsSwTA.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return w(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function j(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(l,e);const t=c(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function D(){return g(T)}function _(){let e=o,a;return A(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&j().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{j as createApp}; +import{R as i}from"./chunks/theme.wu-W8U-f.js";import{U as o,ah as u,ai as l,aj as c,ak as f,al as d,am as m,an as h,ao as g,ap as A,aq as y,d as P,u as v,k as w,y as C,ar as R,as as b,at as E,au as S}from"./chunks/framework.vateGHBz.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return w(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function j(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(l,e);const t=c(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function D(){return g(T)}function _(){let e=o,a;return A(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&j().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{j as createApp}; diff --git a/docs/.vitepress/dist/assets/cfe_card.md.COuietkI.js b/docs/.vitepress/dist/assets/cfe_card.md.Dk9ZeM_J.js similarity index 95% rename from docs/.vitepress/dist/assets/cfe_card.md.COuietkI.js rename to docs/.vitepress/dist/assets/cfe_card.md.Dk9ZeM_J.js index 8e18dce..e900b05 100644 --- a/docs/.vitepress/dist/assets/cfe_card.md.COuietkI.js +++ b/docs/.vitepress/dist/assets/cfe_card.md.Dk9ZeM_J.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as r,a2 as d}from"./chunks/framework.aklsSwTA.js";const y=JSON.parse('{"title":"DIY CFE-TypeB Card","description":"","frontmatter":{},"headers":[],"relativePath":"cfe_card.md","filePath":"cfe_card.md","lastUpdated":1719826283000}'),o={name:"cfe_card.md"},s=r('

DIY CFE-TypeB Card

CFE-TypeB card cost-effective solution.

Overview

card

DIY CFE-TypeB card only needs NVMe SSD + Any CFE-TypeB card holder. I use JEYI 2280 card holder + Samsung 970 EVO-Plus 2T to build it, it has extremely fast reading and writing speeds, and has very good heat dissipation effect, but the disadvantage is that the shape is relatively long, which may not be convenient for mini shape.

Of course, you can also use NVMe 2230 SSD card to make a more mini DIY CFE-TypeB card, but I haven't made it yet, so I don't have any recommended brands. I may make one in a few weeks.

',6),i=[s];function c(n,p,_,h,l,m){return t(),a("div",null,i)}const u=e(o,[["render",c]]);export{y as __pageData,u as default}; +import{_ as e,c as a,o as t,a1 as r,a2 as d}from"./chunks/framework.vateGHBz.js";const y=JSON.parse('{"title":"DIY CFE-TypeB Card","description":"","frontmatter":{},"headers":[],"relativePath":"cfe_card.md","filePath":"cfe_card.md","lastUpdated":1719826283000}'),o={name:"cfe_card.md"},s=r('

DIY CFE-TypeB Card

CFE-TypeB card cost-effective solution.

Overview

card

DIY CFE-TypeB card only needs NVMe SSD + Any CFE-TypeB card holder. I use JEYI 2280 card holder + Samsung 970 EVO-Plus 2T to build it, it has extremely fast reading and writing speeds, and has very good heat dissipation effect, but the disadvantage is that the shape is relatively long, which may not be convenient for mini shape.

Of course, you can also use NVMe 2230 SSD card to make a more mini DIY CFE-TypeB card, but I haven't made it yet, so I don't have any recommended brands. I may make one in a few weeks.

',6),i=[s];function c(n,p,_,h,l,m){return t(),a("div",null,i)}const u=e(o,[["render",c]]);export{y as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/cfe_card.md.COuietkI.lean.js b/docs/.vitepress/dist/assets/cfe_card.md.Dk9ZeM_J.lean.js similarity index 84% rename from docs/.vitepress/dist/assets/cfe_card.md.COuietkI.lean.js rename to docs/.vitepress/dist/assets/cfe_card.md.Dk9ZeM_J.lean.js index e51ce44..8993e14 100644 --- a/docs/.vitepress/dist/assets/cfe_card.md.COuietkI.lean.js +++ b/docs/.vitepress/dist/assets/cfe_card.md.Dk9ZeM_J.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as r,a2 as d}from"./chunks/framework.aklsSwTA.js";const y=JSON.parse('{"title":"DIY CFE-TypeB Card","description":"","frontmatter":{},"headers":[],"relativePath":"cfe_card.md","filePath":"cfe_card.md","lastUpdated":1719826283000}'),o={name:"cfe_card.md"},s=r("",6),i=[s];function c(n,p,_,h,l,m){return t(),a("div",null,i)}const u=e(o,[["render",c]]);export{y as __pageData,u as default}; +import{_ as e,c as a,o as t,a1 as r,a2 as d}from"./chunks/framework.vateGHBz.js";const y=JSON.parse('{"title":"DIY CFE-TypeB Card","description":"","frontmatter":{},"headers":[],"relativePath":"cfe_card.md","filePath":"cfe_card.md","lastUpdated":1719826283000}'),o={name:"cfe_card.md"},s=r("",6),i=[s];function c(n,p,_,h,l,m){return t(),a("div",null,i)}const u=e(o,[["render",c]]);export{y as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/cfehat.md.C900C0Qr.js b/docs/.vitepress/dist/assets/cfehat.md.BOOItrbQ.js similarity index 98% rename from docs/.vitepress/dist/assets/cfehat.md.C900C0Qr.js rename to docs/.vitepress/dist/assets/cfehat.md.BOOItrbQ.js index 4016c73..8cc6bc6 100644 --- a/docs/.vitepress/dist/assets/cfehat.md.C900C0Qr.js +++ b/docs/.vitepress/dist/assets/cfehat.md.BOOItrbQ.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as i,a3 as o,a4 as r,a5 as l}from"./chunks/framework.aklsSwTA.js";const g=JSON.parse('{"title":"RPI5 CFE Hat","description":"","frontmatter":{},"headers":[],"relativePath":"cfehat.md","filePath":"cfehat.md","lastUpdated":1719851039000}'),n={name:"cfehat.md"},s=i('

RPI5 CFE Hat

CFexpress PCIe Hat for Raspberry Pi 5

Overview

cfe_hat

RPI5-CFE-Hat is an OpenSource CFexpress (CFE) PCIe Hat, which is made by Will Whang. The following introductions are all from Will's project👇

Welcome to the GitHub repository for the open-source CFexpress (CFE) PCIe Hat designed specifically for the Raspberry Pi 5. This project aims to enhance the Raspberry Pi 5 by adding the ability to interface with CFexpress Type B cards directly, enabling high-speed data transfer and storage solutions.

I would highly recommend it, it allows you to quickly change storage and reduces the time of transferring to the computer. After you record, you only need to insert the card into the computer and you can edit directly.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple RPI5-CFE-Hat, but he recommends that users make their own with PCB Plant like JLCPCB and so on, because the key production files are already very complete.

pcb

This is the preview image when I commissioned JLCPCB to make it. 👆

Usage

  1. Connect FPC cables with Pi5 and CFE Hat.
  2. Connect the Qwiic to Pi5

i2c

Here my FPC cable is connected in reverse, but in order to show the i2c connection, I temporarily blur on the ribbon FPC cable. 👆

  1. Then Cine Fox will help you auto mount it to /media/RAW, and you can unmount it on WebUI.
  2. Done!

About FPC Cables

If you want to get the maximum transmission speed, choose ordinary FPC cables and keep them within 3cm.

You can get more detail from Will's Blog

Wiki

Here is the wiki made by Will

',21),c=[s];function h(p,d,u,m,b,f){return t(),a("div",null,c)}const C=e(n,[["render",h]]);export{g as __pageData,C as default}; +import{_ as e,c as a,o as t,a1 as i,a3 as o,a4 as r,a5 as l}from"./chunks/framework.vateGHBz.js";const g=JSON.parse('{"title":"RPI5 CFE Hat","description":"","frontmatter":{},"headers":[],"relativePath":"cfehat.md","filePath":"cfehat.md","lastUpdated":1719851039000}'),n={name:"cfehat.md"},s=i('

RPI5 CFE Hat

CFexpress PCIe Hat for Raspberry Pi 5

Overview

cfe_hat

RPI5-CFE-Hat is an OpenSource CFexpress (CFE) PCIe Hat, which is made by Will Whang. The following introductions are all from Will's project👇

Welcome to the GitHub repository for the open-source CFexpress (CFE) PCIe Hat designed specifically for the Raspberry Pi 5. This project aims to enhance the Raspberry Pi 5 by adding the ability to interface with CFexpress Type B cards directly, enabling high-speed data transfer and storage solutions.

I would highly recommend it, it allows you to quickly change storage and reduces the time of transferring to the computer. After you record, you only need to insert the card into the computer and you can edit directly.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple RPI5-CFE-Hat, but he recommends that users make their own with PCB Plant like JLCPCB and so on, because the key production files are already very complete.

pcb

This is the preview image when I commissioned JLCPCB to make it. 👆

Usage

  1. Connect FPC cables with Pi5 and CFE Hat.
  2. Connect the Qwiic to Pi5

i2c

Here my FPC cable is connected in reverse, but in order to show the i2c connection, I temporarily blur on the ribbon FPC cable. 👆

  1. Then Cine Fox will help you auto mount it to /media/RAW, and you can unmount it on WebUI.
  2. Done!

About FPC Cables

If you want to get the maximum transmission speed, choose ordinary FPC cables and keep them within 3cm.

You can get more detail from Will's Blog

Wiki

Here is the wiki made by Will

',21),c=[s];function h(p,d,u,m,b,f){return t(),a("div",null,c)}const C=e(n,[["render",h]]);export{g as __pageData,C as default}; diff --git a/docs/.vitepress/dist/assets/cfehat.md.C900C0Qr.lean.js b/docs/.vitepress/dist/assets/cfehat.md.BOOItrbQ.lean.js similarity index 84% rename from docs/.vitepress/dist/assets/cfehat.md.C900C0Qr.lean.js rename to docs/.vitepress/dist/assets/cfehat.md.BOOItrbQ.lean.js index 36c3922..e0ddd94 100644 --- a/docs/.vitepress/dist/assets/cfehat.md.C900C0Qr.lean.js +++ b/docs/.vitepress/dist/assets/cfehat.md.BOOItrbQ.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as i,a3 as o,a4 as r,a5 as l}from"./chunks/framework.aklsSwTA.js";const g=JSON.parse('{"title":"RPI5 CFE Hat","description":"","frontmatter":{},"headers":[],"relativePath":"cfehat.md","filePath":"cfehat.md","lastUpdated":1719851039000}'),n={name:"cfehat.md"},s=i("",21),c=[s];function h(p,d,u,m,b,f){return t(),a("div",null,c)}const C=e(n,[["render",h]]);export{g as __pageData,C as default}; +import{_ as e,c as a,o as t,a1 as i,a3 as o,a4 as r,a5 as l}from"./chunks/framework.vateGHBz.js";const g=JSON.parse('{"title":"RPI5 CFE Hat","description":"","frontmatter":{},"headers":[],"relativePath":"cfehat.md","filePath":"cfehat.md","lastUpdated":1719851039000}'),n={name:"cfehat.md"},s=i("",21),c=[s];function h(p,d,u,m,b,f){return t(),a("div",null,c)}const C=e(n,[["render",h]]);export{g as __pageData,C as default}; diff --git a/docs/.vitepress/dist/assets/chunks/framework.aklsSwTA.js b/docs/.vitepress/dist/assets/chunks/framework.vateGHBz.js similarity index 75% rename from docs/.vitepress/dist/assets/chunks/framework.aklsSwTA.js rename to docs/.vitepress/dist/assets/chunks/framework.vateGHBz.js index eed2a66..9adb56d 100644 --- a/docs/.vitepress/dist/assets/chunks/framework.aklsSwTA.js +++ b/docs/.vitepress/dist/assets/chunks/framework.vateGHBz.js @@ -14,4 +14,4 @@ * @vue/runtime-dom v3.4.27 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const cc="http://www.w3.org/2000/svg",ac="http://www.w3.org/1998/Math/MathML",Ge=typeof document<"u"?document:null,cr=Ge&&Ge.createElement("template"),fc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ge.createElementNS(cc,e):t==="mathml"?Ge.createElementNS(ac,e):Ge.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ge.createTextNode(e),createComment:e=>Ge.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ge.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,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{cr.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=cr.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]}},Be="transition",St="animation",Ht=Symbol("_vtc"),Vi=(e,{slots:t})=>fs(ml,uc(e),t);Vi.displayName="Transition";const Ui={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Vi.props=re({},ui,Ui);const st=(e,t=[])=>{U(e)?e.forEach(n=>n(...t)):e&&e(...t)},ar=e=>e?U(e)?e.some(t=>t.length>1):e.length>1:!1;function uc(e){const t={};for(const x in e)x in Ui||(t[x]=e[x]);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:f=o,appearToClass:d=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:S=`${n}-leave-to`}=e,M=dc(r),N=M&&M[0],B=M&&M[1],{onBeforeEnter:q,onEnter:G,onEnterCancelled:g,onLeave:m,onLeaveCancelled:L,onBeforeAppear:O=q,onAppear:D=G,onAppearCancelled:A=g}=t,H=(x,W,ie)=>{rt(x,W?d:l),rt(x,W?f:o),ie&&ie()},w=(x,W)=>{x._isLeaving=!1,rt(x,h),rt(x,S),rt(x,b),W&&W()},V=x=>(W,ie)=>{const le=x?D:G,$=()=>H(W,x,ie);st(le,[W,$]),fr(()=>{rt(W,x?c:i),Ke(W,x?d:l),ar(le)||ur(W,s,N,$)})};return re(t,{onBeforeEnter(x){st(q,[x]),Ke(x,i),Ke(x,o)},onBeforeAppear(x){st(O,[x]),Ke(x,c),Ke(x,f)},onEnter:V(!1),onAppear:V(!0),onLeave(x,W){x._isLeaving=!0;const ie=()=>w(x,W);Ke(x,h),Ke(x,b),gc(),fr(()=>{x._isLeaving&&(rt(x,h),Ke(x,S),ar(m)||ur(x,s,B,ie))}),st(m,[x,ie])},onEnterCancelled(x){H(x,!1),st(g,[x])},onAppearCancelled(x){H(x,!0),st(A,[x])},onLeaveCancelled(x){w(x),st(L,[x])}})}function dc(e){if(e==null)return null;if(Z(e))return[Un(e.enter),Un(e.leave)];{const t=Un(e);return[t,t]}}function Un(e){return ho(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Ht]||(e[Ht]=new Set)).add(t)}function rt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Ht];n&&(n.delete(t),n.size||(e[Ht]=void 0))}function fr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let hc=0;function ur(e,t,n,s){const r=e._endId=++hc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=pc(e,t);if(!o)return s();const f=o+"end";let d=0;const h=()=>{e.removeEventListener(f,b),i()},b=S=>{S.target===e&&++d>=c&&h()};setTimeout(()=>{d(n[M]||"").split(", "),r=s(`${Be}Delay`),i=s(`${Be}Duration`),o=dr(r,i),l=s(`${St}Delay`),c=s(`${St}Duration`),f=dr(l,c);let d=null,h=0,b=0;t===Be?o>0&&(d=Be,h=o,b=i.length):t===St?f>0&&(d=St,h=f,b=c.length):(h=Math.max(o,f),d=h>0?o>f?Be:St:null,b=d?d===Be?i.length:c.length:0);const S=d===Be&&/\b(transform|all)(,|$)/.test(s(`${Be}Property`).toString());return{type:d,timeout:h,propCount:b,hasTransform:S}}function dr(e,t){for(;e.lengthhr(n)+hr(e[s])))}function hr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function gc(){return document.body.offsetHeight}function mc(e,t,n){const s=e[Ht];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const pr=Symbol("_vod"),_c=Symbol("_vsh"),yc=Symbol(""),bc=/(^|;)\s*display\s*:/;function vc(e,t,n){const s=e.style,r=se(n);let i=!1;if(n&&!r){if(t)if(se(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&on(s,l,"")}else for(const o in t)n[o]==null&&on(s,o,"");for(const o in n)o==="display"&&(i=!0),on(s,o,n[o])}else if(r){if(t!==n){const o=s[yc];o&&(n+=";"+o),s.cssText=n,i=bc.test(n)}}else t&&e.removeAttribute("style");pr in e&&(e[pr]=i?s.display:"",e[_c]&&(s.display="none"))}const gr=/\s*!important$/;function on(e,t,n){if(U(n))n.forEach(s=>on(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=wc(e,t);gr.test(n)?e.setProperty(ut(s),n.replace(gr,""),"important"):e[s]=n}}const mr=["Webkit","Moz","ms"],Bn={};function wc(e,t){const n=Bn[t];if(n)return n;let s=Pe(t);if(s!=="filter"&&s in e)return Bn[t]=s;s=yn(s);for(let r=0;rKn||(Rc.then(()=>Kn=0),Kn=Date.now());function Ic(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Se(Lc(s,n.value),t,5,[s])};return n.value=e,n.attached=Oc(),n}function Lc(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 vr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Mc=(e,t,n,s,r,i,o,l,c)=>{const f=r==="svg";t==="class"?mc(e,s,f):t==="style"?vc(e,n,s):Dt(t)?ds(t)||Tc(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Nc(e,t,s,f))?Cc(e,t,s,i,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Ec(e,t,s,f))};function Nc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&vr(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 vr(t)&&se(n)?!1:t in e}const Pc=["ctrl","shift","alt","meta"],Fc={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)=>Pc.some(n=>e[`${n}Key`]&&!t.includes(n))},qa=(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=ut(r.key);if(t.some(o=>o===i||$c[o]===i))return e(r)})},jc=re({patchProp:Mc},fc);let kn,wr=!1;function Hc(){return kn=wr?kn:Wl(jc),wr=!0,kn}const za=(...e)=>{const t=Hc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Vc(s);if(r)return n(r,!0,Dc(r))},t};function Dc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Vc(e){return se(e)?document.querySelector(e):e}const Xa=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Ya="/card.jpg",Ja="/cfe.jpg",Qa="/cfe_pcb.png",Za="/cfe_i2c_connect.jpg",ef="/camera.jpg",tf="/camera_2.jpg",nf="/external_ssd.png",sf="/hardware.png",rf="/hq_camera.jpg",of="/nvme.jpg",lf="/power.jpg",cf="/software.jpg",af="/imx585.jpg",ff="/imx585_pcb.jpg",Uc=window.__VP_SITE_DATA__;function Ls(e){return jr()?(Eo(e),!0):!1}function Ye(e){return typeof e=="function"?e():Zr(e)}const Bi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Bc=Object.prototype.toString,Kc=e=>Bc.call(e)==="[object Object]",Ki=()=>{},Er=kc();function kc(){var e,t;return Bi&&((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 Wc(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 ki=e=>e();function qc(e=ki){const t=ae(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:wn(t),pause:n,resume:s,eventFilter:r}}function Gc(e){return In()}function Wi(...e){if(e.length!==1)return Jo(...e);const t=e[0];return typeof t=="function"?wn(zo(()=>({get:t,set:Ki}))):ae(t)}function zc(e,t,n={}){const{eventFilter:s=ki,...r}=n;return Ne(e,Wc(s,t),r)}function Xc(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=qc(s);return{stop:zc(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function Ms(e,t=!0,n){Gc()?Ct(e,n):t?e():Cn(e)}function qi(e){var t;const n=Ye(e);return(t=n==null?void 0:n.$el)!=null?t:n}const He=Bi?window:void 0;function Et(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=He):[t,n,s,r]=e,!t)return Ki;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(d=>d()),i.length=0},l=(d,h,b,S)=>(d.addEventListener(h,b,S),()=>d.removeEventListener(h,b,S)),c=Ne(()=>[qi(t),Ye(r)],([d,h])=>{if(o(),!d)return;const b=Kc(h)?{...h}:h;i.push(...n.flatMap(S=>s.map(M=>l(d,S,M,b))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return Ls(f),f}function Yc(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function uf(...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=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Yc(t);return Et(r,i,d=>{d.repeat&&Ye(l)||c(d)&&n(d)},o)}function Jc(){const e=ae(!1),t=In();return t&&Ct(()=>{e.value=!0},t),e}function Qc(e){const t=Jc();return ne(()=>(t.value,!!e()))}function Gi(e,t={}){const{window:n=He}=t,s=Qc(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=ae(!1),o=f=>{i.value=f.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=ai(()=>{s.value&&(l(),r=n.matchMedia(Ye(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return Ls(()=>{c(),l(),r=void 0}),i}const Qt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Zt="__vueuse_ssr_handlers__",Zc=ea();function ea(){return Zt in Qt||(Qt[Zt]=Qt[Zt]||{}),Qt[Zt]}function zi(e,t){return Zc[e]||t}function ta(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 na={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()}},Cr="vueuse-storage";function sa(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:d,window:h=He,eventFilter:b,onError:S=w=>{console.error(w)},initOnMounted:M}=s,N=(d?Jr:ae)(typeof t=="function"?t():t);if(!n)try{n=zi("getDefaultStorage",()=>{var w;return(w=He)==null?void 0:w.localStorage})()}catch(w){S(w)}if(!n)return N;const B=Ye(t),q=ta(B),G=(r=s.serializer)!=null?r:na[q],{pause:g,resume:m}=Xc(N,()=>O(N.value),{flush:i,deep:o,eventFilter:b});h&&l&&Ms(()=>{Et(h,"storage",A),Et(h,Cr,H),M&&A()}),M||A();function L(w,V){h&&h.dispatchEvent(new CustomEvent(Cr,{detail:{key:e,oldValue:w,newValue:V,storageArea:n}}))}function O(w){try{const V=n.getItem(e);if(w==null)L(V,null),n.removeItem(e);else{const x=G.write(w);V!==x&&(n.setItem(e,x),L(V,x))}}catch(V){S(V)}}function D(w){const V=w?w.newValue:n.getItem(e);if(V==null)return c&&B!=null&&n.setItem(e,G.write(B)),B;if(!w&&f){const x=G.read(V);return typeof f=="function"?f(x,B):q==="object"&&!Array.isArray(x)?{...B,...x}:x}else return typeof V!="string"?V:G.read(V)}function A(w){if(!(w&&w.storageArea!==n)){if(w&&w.key==null){N.value=B;return}if(!(w&&w.key!==e)){g();try{(w==null?void 0:w.newValue)!==G.write(N.value)&&(N.value=D(w))}catch(V){S(V)}finally{w?Cn(m):m()}}}}function H(w){A(w.detail)}return N}function Xi(e){return Gi("(prefers-color-scheme: dark)",e)}function ra(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:d=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},b=Xi({window:r}),S=ne(()=>b.value?"dark":"light"),M=c||(o==null?Wi(s):sa(o,s,i,{window:r,listenToStorageChanges:l})),N=ne(()=>M.value==="auto"?S.value:M.value),B=zi("updateHTMLAttrs",(m,L,O)=>{const D=typeof m=="string"?r==null?void 0:r.document.querySelector(m):qi(m);if(!D)return;let A;if(d&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),r.document.head.appendChild(A)),L==="class"){const H=O.split(/\s/g);Object.values(h).flatMap(w=>(w||"").split(/\s/g)).filter(Boolean).forEach(w=>{H.includes(w)?D.classList.add(w):D.classList.remove(w)})}else D.setAttribute(L,O);d&&(r.getComputedStyle(A).opacity,document.head.removeChild(A))});function q(m){var L;B(t,n,(L=h[m])!=null?L:m)}function G(m){e.onChanged?e.onChanged(m,q):q(m)}Ne(N,G,{flush:"post",immediate:!0}),Ms(()=>G(N.value));const g=ne({get(){return f?M.value:N.value},set(m){M.value=m}});try{return Object.assign(g,{store:M,system:S,state:N})}catch{return g}}function ia(e={}){const{valueDark:t="dark",valueLight:n="",window:s=He}=e,r=ra({...e,onChanged:(l,c)=>{var f;e.onChanged?(f=e.onChanged)==null||f.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ne(()=>r.system?r.system.value:Xi({window:s}).value?"dark":"light");return ne({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function Wn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Yi(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 en=new WeakMap;function df(e,t=!1){const n=ae(t);let s=null;Ne(Wi(e),o=>{const l=Wn(Ye(o));if(l){const c=l;en.get(c)||en.set(c,c.style.overflow),n.value&&(c.style.overflow="hidden")}},{immediate:!0});const r=()=>{const o=Wn(Ye(e));!o||n.value||(Er&&(s=Et(o,"touchmove",l=>{oa(l)},{passive:!1})),o.style.overflow="hidden",n.value=!0)},i=()=>{var o;const l=Wn(Ye(e));!l||!n.value||(Er&&(s==null||s()),l.style.overflow=(o=en.get(l))!=null?o:"",en.delete(l),n.value=!1)};return Ls(i),ne({get(){return n.value},set(o){o?r():i()}})}function hf(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:ae(0),y:ae(0)};const s=ae(t.scrollX),r=ae(t.scrollY),i=ne({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=ne({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Et(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function pf(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0}=e,o=ae(n),l=ae(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(),Ms(c),Et("resize",c,{passive:!0}),r){const f=Gi("(orientation: portrait)");Ne(f,()=>c())}return{width:o,height:l}}var qn={BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},Gn={};const Ji=/^(?:[a-z]+:|\/\/)/i,la="vitepress-theme-appearance",ca=/#.*$/,aa=/[?#].*$/,fa=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",Qi={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function ua(e,t,n=!1){if(t===void 0)return!1;if(e=xr(`/${e}`),n)return new RegExp(t).test(e);if(xr(t)!==e)return!1;const s=t.match(ca);return s?(ge?location.hash:"")===s[0]:!0}function xr(e){return decodeURI(e).replace(aa,"").replace(fa,"$1")}function da(e){return Ji.test(e)}function ha(e,t){var s,r,i,o,l,c,f;const n=Object.keys(e.locales).find(d=>d!=="root"&&!da(d)&&ua(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:eo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Zi(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=pa(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function pa(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ga(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 eo(e,t){return[...e.filter(n=>!ga(t,n)),...t]}const ma=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,_a=/^[a-z]:/i;function Sr(e){const t=_a.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(ma,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const zn=new Set;function ya(e){if(zn.size===0){const n=typeof process=="object"&&(Gn==null?void 0:Gn.VITE_EXTRA_EXTENSIONS)||(qn==null?void 0:qn.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=>zn.add(s))}const t=e.split(".").pop();return t==null||!zn.has(t.toLowerCase())}const ba=Symbol(),at=Jr(Uc);function gf(e){const t=ne(()=>ha(at.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?ae(!0):n?ia({storageKey:la,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):ae(!1),r=ae(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Ne(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:ne(()=>t.value.themeConfig),page:ne(()=>e.data),frontmatter:ne(()=>e.data.frontmatter),params:ne(()=>e.data.params),lang:ne(()=>t.value.lang),dir:ne(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ne(()=>t.value.localeIndex||"root"),title:ne(()=>Zi(t.value,e.data)),description:ne(()=>e.data.description||t.value.description),isDark:s,hash:ne(()=>r.value)}}function va(){const e=vt(ba);if(!e)throw new Error("vitepress data not properly injected in app");return e}function wa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Tr(e){return Ji.test(e)||!e.startsWith("/")?e:wa(at.value.base,e)}function Ea(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/";t=Sr(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=`./${Sr(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let ln=[];function mf(e){ln.push(e),On(()=>{ln=ln.filter(t=>t!==e)})}function Ca(){let e=at.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=Ar(e,n);else if(Array.isArray(e))for(const s of e){const r=Ar(s,n);if(r){t=r;break}}return t}function Ar(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const xa=Symbol(),to="http://a.com",Sa=()=>({path:"/",component:null,data:Qi});function _f(e,t){const n=vn(Sa()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=Xn(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==Xn(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChanged)==null?void 0:f.call(s,l)))}let i=null;async function o(l,c=0,f=!1){var b;if(await((b=s.onBeforePageLoad)==null?void 0:b.call(s,l))===!1)return;const d=new URL(l,to),h=i=d.pathname;try{let S=await e(h);if(!S)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:M,__pageData:N}=S;if(!M)throw new Error(`Invalid route component: ${M}`);n.path=ge?h:Tr(h),n.component=sn(M),n.data=sn(N),ge&&Cn(()=>{let B=at.value.base+N.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!at.value.cleanUrls&&!B.endsWith("/")&&(B+=".html"),B!==d.pathname&&(d.pathname=B,l=B+d.search+d.hash,history.replaceState({},"",l)),d.hash&&!c){let q=null;try{q=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(G){console.warn(G)}if(q){Rr(q,d.hash);return}}window.scrollTo(0,c)})}}catch(S){if(!/fetch|Page not found/.test(S.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(S),!f)try{const M=await fetch(at.value.base+"hashmap.json");window.__VP_HASH_MAP__=await M.json(),await o(l,c,!0);return}catch{}i===h&&(i=null,n.path=ge?h:Tr(h),n.component=t?sn(t):null,n.data=Qi)}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.target.closest("button"))return;const f=l.target.closest("a");if(f&&!f.closest(".vp-raw")&&(f instanceof SVGElement||!f.download)){const{target:d}=f,{href:h,origin:b,pathname:S,hash:M,search:N}=new URL(f.href instanceof SVGAnimatedString?f.href.animVal:f.href,f.baseURI),B=new URL(location.href);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!d&&b===B.origin&&ya(S)&&(l.preventDefault(),S===B.pathname&&N===B.search?(M!==B.hash&&(history.pushState({},"",h),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:B.href,newURL:h}))),M?Rr(f,M,f.classList.contains("header-anchor")):window.scrollTo(0,0)):r(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(Xn(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 Ta(){const e=vt(xa);if(!e)throw new Error("useRouter() is called without provider.");return e}function no(){return Ta().route}function Rr(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-Ca()+i;requestAnimationFrame(r)}}function Xn(e){const t=new URL(e,to);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),at.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 Yn=()=>ln.forEach(e=>e()),yf=pi({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=no(),{site:n}=va();return()=>fs(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?fs(t.component,{onVnodeMounted:Yn,onVnodeUpdated:Yn,onVnodeUnmounted:Yn}):"404 Page Not Found"])}}),bf=pi({setup(e,{slots:t}){const n=ae(!1);return Ct(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function vf(){ge&&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(f=>f.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 wf(){if(ge){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 f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Aa(f).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 Aa(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function Ef(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=Jn(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(Jn);s.forEach((l,c)=>{const f=o.findIndex(d=>d==null?void 0:d.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};ai(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Zi(o,i);f!==document.title&&(document.title=f);const d=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==d&&h.setAttribute("content",d):Jn(["meta",{name:"description",content:d}]),r(eo(o.head,Oa(c)))})}function Jn([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 Ra(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Oa(e){return e.filter(t=>!Ra(t))}const Qn=new Set,so=()=>document.createElement("link"),Ia=e=>{const t=so();t.rel="prefetch",t.href=e,document.head.appendChild(t)},La=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let tn;const Ma=ge&&(tn=so())&&tn.relList&&tn.relList.supports&&tn.relList.supports("prefetch")?Ia:La;function Cf(){if(!ge||!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(!Qn.has(c)){Qn.add(c);const f=Ea(c);f&&Ma(f)}}})}),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):Qn.add(l))})})};Ct(s);const r=no();Ne(()=>r.path,s),On(()=>{n&&n.disconnect()})}export{qa as $,Ha as A,El as B,Ca as C,$a as D,Da as E,_e as F,Jr as G,mf as H,fe as I,ja as J,Ji as K,no as L,Ql as M,vt as N,pf as O,gs as P,uf as Q,Cn as R,hf as S,Vi as T,ge as U,wn as V,df as W,$l as X,Ua as Y,Ga as Z,Xa as _,$i as a,Ba as a0,ka as a1,Ya as a2,Ja as a3,Qa as a4,Za as a5,ef as a6,tf as a7,nf as a8,sf as a9,rf as aa,of as ab,lf as ac,cf as ad,af as ae,ff as af,Ef as ag,xa as ah,gf as ai,ba as aj,yf as ak,bf as al,at as am,za as an,_f as ao,Ea as ap,Cf as aq,wf as ar,vf as as,fs as at,Ni as b,Ka as c,pi as d,Wa as e,ya as f,Tr as g,ne as h,da as i,ae as j,Ct as k,Fi as l,Zr as m,ms as n,Li as o,Pa as p,Fa as q,Va as r,ua as s,Na as t,va as u,Gi as v,il as w,Ne as x,ai as y,On as z}; +**/const cc="http://www.w3.org/2000/svg",ac="http://www.w3.org/1998/Math/MathML",Ge=typeof document<"u"?document:null,cr=Ge&&Ge.createElement("template"),fc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ge.createElementNS(cc,e):t==="mathml"?Ge.createElementNS(ac,e):Ge.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ge.createTextNode(e),createComment:e=>Ge.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ge.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,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{cr.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=cr.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]}},Be="transition",St="animation",Ht=Symbol("_vtc"),Vi=(e,{slots:t})=>fs(ml,uc(e),t);Vi.displayName="Transition";const Ui={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Vi.props=re({},ui,Ui);const st=(e,t=[])=>{U(e)?e.forEach(n=>n(...t)):e&&e(...t)},ar=e=>e?U(e)?e.some(t=>t.length>1):e.length>1:!1;function uc(e){const t={};for(const x in e)x in Ui||(t[x]=e[x]);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:f=o,appearToClass:d=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:S=`${n}-leave-to`}=e,M=dc(r),N=M&&M[0],B=M&&M[1],{onBeforeEnter:q,onEnter:G,onEnterCancelled:g,onLeave:m,onLeaveCancelled:L,onBeforeAppear:O=q,onAppear:D=G,onAppearCancelled:A=g}=t,H=(x,W,ie)=>{rt(x,W?d:l),rt(x,W?f:o),ie&&ie()},w=(x,W)=>{x._isLeaving=!1,rt(x,h),rt(x,S),rt(x,b),W&&W()},V=x=>(W,ie)=>{const le=x?D:G,$=()=>H(W,x,ie);st(le,[W,$]),fr(()=>{rt(W,x?c:i),Ke(W,x?d:l),ar(le)||ur(W,s,N,$)})};return re(t,{onBeforeEnter(x){st(q,[x]),Ke(x,i),Ke(x,o)},onBeforeAppear(x){st(O,[x]),Ke(x,c),Ke(x,f)},onEnter:V(!1),onAppear:V(!0),onLeave(x,W){x._isLeaving=!0;const ie=()=>w(x,W);Ke(x,h),Ke(x,b),gc(),fr(()=>{x._isLeaving&&(rt(x,h),Ke(x,S),ar(m)||ur(x,s,B,ie))}),st(m,[x,ie])},onEnterCancelled(x){H(x,!1),st(g,[x])},onAppearCancelled(x){H(x,!0),st(A,[x])},onLeaveCancelled(x){w(x),st(L,[x])}})}function dc(e){if(e==null)return null;if(Z(e))return[Un(e.enter),Un(e.leave)];{const t=Un(e);return[t,t]}}function Un(e){return ho(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Ht]||(e[Ht]=new Set)).add(t)}function rt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Ht];n&&(n.delete(t),n.size||(e[Ht]=void 0))}function fr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let hc=0;function ur(e,t,n,s){const r=e._endId=++hc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=pc(e,t);if(!o)return s();const f=o+"end";let d=0;const h=()=>{e.removeEventListener(f,b),i()},b=S=>{S.target===e&&++d>=c&&h()};setTimeout(()=>{d(n[M]||"").split(", "),r=s(`${Be}Delay`),i=s(`${Be}Duration`),o=dr(r,i),l=s(`${St}Delay`),c=s(`${St}Duration`),f=dr(l,c);let d=null,h=0,b=0;t===Be?o>0&&(d=Be,h=o,b=i.length):t===St?f>0&&(d=St,h=f,b=c.length):(h=Math.max(o,f),d=h>0?o>f?Be:St:null,b=d?d===Be?i.length:c.length:0);const S=d===Be&&/\b(transform|all)(,|$)/.test(s(`${Be}Property`).toString());return{type:d,timeout:h,propCount:b,hasTransform:S}}function dr(e,t){for(;e.lengthhr(n)+hr(e[s])))}function hr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function gc(){return document.body.offsetHeight}function mc(e,t,n){const s=e[Ht];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const pr=Symbol("_vod"),_c=Symbol("_vsh"),yc=Symbol(""),bc=/(^|;)\s*display\s*:/;function vc(e,t,n){const s=e.style,r=se(n);let i=!1;if(n&&!r){if(t)if(se(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&on(s,l,"")}else for(const o in t)n[o]==null&&on(s,o,"");for(const o in n)o==="display"&&(i=!0),on(s,o,n[o])}else if(r){if(t!==n){const o=s[yc];o&&(n+=";"+o),s.cssText=n,i=bc.test(n)}}else t&&e.removeAttribute("style");pr in e&&(e[pr]=i?s.display:"",e[_c]&&(s.display="none"))}const gr=/\s*!important$/;function on(e,t,n){if(U(n))n.forEach(s=>on(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=wc(e,t);gr.test(n)?e.setProperty(ut(s),n.replace(gr,""),"important"):e[s]=n}}const mr=["Webkit","Moz","ms"],Bn={};function wc(e,t){const n=Bn[t];if(n)return n;let s=Pe(t);if(s!=="filter"&&s in e)return Bn[t]=s;s=yn(s);for(let r=0;rKn||(Rc.then(()=>Kn=0),Kn=Date.now());function Ic(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Se(Lc(s,n.value),t,5,[s])};return n.value=e,n.attached=Oc(),n}function Lc(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 vr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Mc=(e,t,n,s,r,i,o,l,c)=>{const f=r==="svg";t==="class"?mc(e,s,f):t==="style"?vc(e,n,s):Dt(t)?ds(t)||Tc(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Nc(e,t,s,f))?Cc(e,t,s,i,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Ec(e,t,s,f))};function Nc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&vr(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 vr(t)&&se(n)?!1:t in e}const Pc=["ctrl","shift","alt","meta"],Fc={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)=>Pc.some(n=>e[`${n}Key`]&&!t.includes(n))},qa=(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=ut(r.key);if(t.some(o=>o===i||$c[o]===i))return e(r)})},jc=re({patchProp:Mc},fc);let kn,wr=!1;function Hc(){return kn=wr?kn:Wl(jc),wr=!0,kn}const za=(...e)=>{const t=Hc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Vc(s);if(r)return n(r,!0,Dc(r))},t};function Dc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Vc(e){return se(e)?document.querySelector(e):e}const Xa=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Ya="/card.jpg",Ja="/cfe.jpg",Qa="/cfe_pcb.png",Za="/cfe_i2c_connect.jpg",ef="/camera.jpg",tf="/camera_2.jpg",nf="/external_ssd.png",sf="/hardware.png",rf="/hq_camera.jpg",of="/nvme.jpg",lf="/pi.jpg",cf="/power.jpg",af="/software.jpg",ff="/imx585.jpg",uf="/imx585_pcb.jpg",Uc=window.__VP_SITE_DATA__;function Ls(e){return jr()?(Eo(e),!0):!1}function Ye(e){return typeof e=="function"?e():Zr(e)}const Bi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Bc=Object.prototype.toString,Kc=e=>Bc.call(e)==="[object Object]",Ki=()=>{},Er=kc();function kc(){var e,t;return Bi&&((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 Wc(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 ki=e=>e();function qc(e=ki){const t=ae(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:wn(t),pause:n,resume:s,eventFilter:r}}function Gc(e){return In()}function Wi(...e){if(e.length!==1)return Jo(...e);const t=e[0];return typeof t=="function"?wn(zo(()=>({get:t,set:Ki}))):ae(t)}function zc(e,t,n={}){const{eventFilter:s=ki,...r}=n;return Ne(e,Wc(s,t),r)}function Xc(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=qc(s);return{stop:zc(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function Ms(e,t=!0,n){Gc()?Ct(e,n):t?e():Cn(e)}function qi(e){var t;const n=Ye(e);return(t=n==null?void 0:n.$el)!=null?t:n}const He=Bi?window:void 0;function Et(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=He):[t,n,s,r]=e,!t)return Ki;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(d=>d()),i.length=0},l=(d,h,b,S)=>(d.addEventListener(h,b,S),()=>d.removeEventListener(h,b,S)),c=Ne(()=>[qi(t),Ye(r)],([d,h])=>{if(o(),!d)return;const b=Kc(h)?{...h}:h;i.push(...n.flatMap(S=>s.map(M=>l(d,S,M,b))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return Ls(f),f}function Yc(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function df(...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=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Yc(t);return Et(r,i,d=>{d.repeat&&Ye(l)||c(d)&&n(d)},o)}function Jc(){const e=ae(!1),t=In();return t&&Ct(()=>{e.value=!0},t),e}function Qc(e){const t=Jc();return ne(()=>(t.value,!!e()))}function Gi(e,t={}){const{window:n=He}=t,s=Qc(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=ae(!1),o=f=>{i.value=f.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=ai(()=>{s.value&&(l(),r=n.matchMedia(Ye(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return Ls(()=>{c(),l(),r=void 0}),i}const Qt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Zt="__vueuse_ssr_handlers__",Zc=ea();function ea(){return Zt in Qt||(Qt[Zt]=Qt[Zt]||{}),Qt[Zt]}function zi(e,t){return Zc[e]||t}function ta(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 na={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()}},Cr="vueuse-storage";function sa(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:d,window:h=He,eventFilter:b,onError:S=w=>{console.error(w)},initOnMounted:M}=s,N=(d?Jr:ae)(typeof t=="function"?t():t);if(!n)try{n=zi("getDefaultStorage",()=>{var w;return(w=He)==null?void 0:w.localStorage})()}catch(w){S(w)}if(!n)return N;const B=Ye(t),q=ta(B),G=(r=s.serializer)!=null?r:na[q],{pause:g,resume:m}=Xc(N,()=>O(N.value),{flush:i,deep:o,eventFilter:b});h&&l&&Ms(()=>{Et(h,"storage",A),Et(h,Cr,H),M&&A()}),M||A();function L(w,V){h&&h.dispatchEvent(new CustomEvent(Cr,{detail:{key:e,oldValue:w,newValue:V,storageArea:n}}))}function O(w){try{const V=n.getItem(e);if(w==null)L(V,null),n.removeItem(e);else{const x=G.write(w);V!==x&&(n.setItem(e,x),L(V,x))}}catch(V){S(V)}}function D(w){const V=w?w.newValue:n.getItem(e);if(V==null)return c&&B!=null&&n.setItem(e,G.write(B)),B;if(!w&&f){const x=G.read(V);return typeof f=="function"?f(x,B):q==="object"&&!Array.isArray(x)?{...B,...x}:x}else return typeof V!="string"?V:G.read(V)}function A(w){if(!(w&&w.storageArea!==n)){if(w&&w.key==null){N.value=B;return}if(!(w&&w.key!==e)){g();try{(w==null?void 0:w.newValue)!==G.write(N.value)&&(N.value=D(w))}catch(V){S(V)}finally{w?Cn(m):m()}}}}function H(w){A(w.detail)}return N}function Xi(e){return Gi("(prefers-color-scheme: dark)",e)}function ra(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:d=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},b=Xi({window:r}),S=ne(()=>b.value?"dark":"light"),M=c||(o==null?Wi(s):sa(o,s,i,{window:r,listenToStorageChanges:l})),N=ne(()=>M.value==="auto"?S.value:M.value),B=zi("updateHTMLAttrs",(m,L,O)=>{const D=typeof m=="string"?r==null?void 0:r.document.querySelector(m):qi(m);if(!D)return;let A;if(d&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),r.document.head.appendChild(A)),L==="class"){const H=O.split(/\s/g);Object.values(h).flatMap(w=>(w||"").split(/\s/g)).filter(Boolean).forEach(w=>{H.includes(w)?D.classList.add(w):D.classList.remove(w)})}else D.setAttribute(L,O);d&&(r.getComputedStyle(A).opacity,document.head.removeChild(A))});function q(m){var L;B(t,n,(L=h[m])!=null?L:m)}function G(m){e.onChanged?e.onChanged(m,q):q(m)}Ne(N,G,{flush:"post",immediate:!0}),Ms(()=>G(N.value));const g=ne({get(){return f?M.value:N.value},set(m){M.value=m}});try{return Object.assign(g,{store:M,system:S,state:N})}catch{return g}}function ia(e={}){const{valueDark:t="dark",valueLight:n="",window:s=He}=e,r=ra({...e,onChanged:(l,c)=>{var f;e.onChanged?(f=e.onChanged)==null||f.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ne(()=>r.system?r.system.value:Xi({window:s}).value?"dark":"light");return ne({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function Wn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Yi(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 en=new WeakMap;function hf(e,t=!1){const n=ae(t);let s=null;Ne(Wi(e),o=>{const l=Wn(Ye(o));if(l){const c=l;en.get(c)||en.set(c,c.style.overflow),n.value&&(c.style.overflow="hidden")}},{immediate:!0});const r=()=>{const o=Wn(Ye(e));!o||n.value||(Er&&(s=Et(o,"touchmove",l=>{oa(l)},{passive:!1})),o.style.overflow="hidden",n.value=!0)},i=()=>{var o;const l=Wn(Ye(e));!l||!n.value||(Er&&(s==null||s()),l.style.overflow=(o=en.get(l))!=null?o:"",en.delete(l),n.value=!1)};return Ls(i),ne({get(){return n.value},set(o){o?r():i()}})}function pf(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:ae(0),y:ae(0)};const s=ae(t.scrollX),r=ae(t.scrollY),i=ne({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=ne({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Et(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function gf(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0}=e,o=ae(n),l=ae(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(),Ms(c),Et("resize",c,{passive:!0}),r){const f=Gi("(orientation: portrait)");Ne(f,()=>c())}return{width:o,height:l}}var qn={BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},Gn={};const Ji=/^(?:[a-z]+:|\/\/)/i,la="vitepress-theme-appearance",ca=/#.*$/,aa=/[?#].*$/,fa=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",Qi={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function ua(e,t,n=!1){if(t===void 0)return!1;if(e=xr(`/${e}`),n)return new RegExp(t).test(e);if(xr(t)!==e)return!1;const s=t.match(ca);return s?(ge?location.hash:"")===s[0]:!0}function xr(e){return decodeURI(e).replace(aa,"").replace(fa,"$1")}function da(e){return Ji.test(e)}function ha(e,t){var s,r,i,o,l,c,f;const n=Object.keys(e.locales).find(d=>d!=="root"&&!da(d)&&ua(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:eo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Zi(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=pa(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function pa(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ga(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 eo(e,t){return[...e.filter(n=>!ga(t,n)),...t]}const ma=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,_a=/^[a-z]:/i;function Sr(e){const t=_a.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(ma,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const zn=new Set;function ya(e){if(zn.size===0){const n=typeof process=="object"&&(Gn==null?void 0:Gn.VITE_EXTRA_EXTENSIONS)||(qn==null?void 0:qn.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=>zn.add(s))}const t=e.split(".").pop();return t==null||!zn.has(t.toLowerCase())}const ba=Symbol(),at=Jr(Uc);function mf(e){const t=ne(()=>ha(at.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?ae(!0):n?ia({storageKey:la,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):ae(!1),r=ae(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Ne(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:ne(()=>t.value.themeConfig),page:ne(()=>e.data),frontmatter:ne(()=>e.data.frontmatter),params:ne(()=>e.data.params),lang:ne(()=>t.value.lang),dir:ne(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ne(()=>t.value.localeIndex||"root"),title:ne(()=>Zi(t.value,e.data)),description:ne(()=>e.data.description||t.value.description),isDark:s,hash:ne(()=>r.value)}}function va(){const e=vt(ba);if(!e)throw new Error("vitepress data not properly injected in app");return e}function wa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Tr(e){return Ji.test(e)||!e.startsWith("/")?e:wa(at.value.base,e)}function Ea(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/";t=Sr(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=`./${Sr(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let ln=[];function _f(e){ln.push(e),On(()=>{ln=ln.filter(t=>t!==e)})}function Ca(){let e=at.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=Ar(e,n);else if(Array.isArray(e))for(const s of e){const r=Ar(s,n);if(r){t=r;break}}return t}function Ar(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const xa=Symbol(),to="http://a.com",Sa=()=>({path:"/",component:null,data:Qi});function yf(e,t){const n=vn(Sa()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=Xn(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==Xn(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChanged)==null?void 0:f.call(s,l)))}let i=null;async function o(l,c=0,f=!1){var b;if(await((b=s.onBeforePageLoad)==null?void 0:b.call(s,l))===!1)return;const d=new URL(l,to),h=i=d.pathname;try{let S=await e(h);if(!S)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:M,__pageData:N}=S;if(!M)throw new Error(`Invalid route component: ${M}`);n.path=ge?h:Tr(h),n.component=sn(M),n.data=sn(N),ge&&Cn(()=>{let B=at.value.base+N.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!at.value.cleanUrls&&!B.endsWith("/")&&(B+=".html"),B!==d.pathname&&(d.pathname=B,l=B+d.search+d.hash,history.replaceState({},"",l)),d.hash&&!c){let q=null;try{q=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(G){console.warn(G)}if(q){Rr(q,d.hash);return}}window.scrollTo(0,c)})}}catch(S){if(!/fetch|Page not found/.test(S.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(S),!f)try{const M=await fetch(at.value.base+"hashmap.json");window.__VP_HASH_MAP__=await M.json(),await o(l,c,!0);return}catch{}i===h&&(i=null,n.path=ge?h:Tr(h),n.component=t?sn(t):null,n.data=Qi)}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.target.closest("button"))return;const f=l.target.closest("a");if(f&&!f.closest(".vp-raw")&&(f instanceof SVGElement||!f.download)){const{target:d}=f,{href:h,origin:b,pathname:S,hash:M,search:N}=new URL(f.href instanceof SVGAnimatedString?f.href.animVal:f.href,f.baseURI),B=new URL(location.href);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!d&&b===B.origin&&ya(S)&&(l.preventDefault(),S===B.pathname&&N===B.search?(M!==B.hash&&(history.pushState({},"",h),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:B.href,newURL:h}))),M?Rr(f,M,f.classList.contains("header-anchor")):window.scrollTo(0,0)):r(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(Xn(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 Ta(){const e=vt(xa);if(!e)throw new Error("useRouter() is called without provider.");return e}function no(){return Ta().route}function Rr(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-Ca()+i;requestAnimationFrame(r)}}function Xn(e){const t=new URL(e,to);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),at.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 Yn=()=>ln.forEach(e=>e()),bf=pi({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=no(),{site:n}=va();return()=>fs(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?fs(t.component,{onVnodeMounted:Yn,onVnodeUpdated:Yn,onVnodeUnmounted:Yn}):"404 Page Not Found"])}}),vf=pi({setup(e,{slots:t}){const n=ae(!1);return Ct(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function wf(){ge&&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(f=>f.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 Ef(){if(ge){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 f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Aa(f).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 Aa(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 Cf(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=Jn(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(Jn);s.forEach((l,c)=>{const f=o.findIndex(d=>d==null?void 0:d.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};ai(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Zi(o,i);f!==document.title&&(document.title=f);const d=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==d&&h.setAttribute("content",d):Jn(["meta",{name:"description",content:d}]),r(eo(o.head,Oa(c)))})}function Jn([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 Ra(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Oa(e){return e.filter(t=>!Ra(t))}const Qn=new Set,so=()=>document.createElement("link"),Ia=e=>{const t=so();t.rel="prefetch",t.href=e,document.head.appendChild(t)},La=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let tn;const Ma=ge&&(tn=so())&&tn.relList&&tn.relList.supports&&tn.relList.supports("prefetch")?Ia:La;function xf(){if(!ge||!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(!Qn.has(c)){Qn.add(c);const f=Ea(c);f&&Ma(f)}}})}),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):Qn.add(l))})})};Ct(s);const r=no();Ne(()=>r.path,s),On(()=>{n&&n.disconnect()})}export{qa as $,Ha as A,El as B,Ca as C,$a as D,Da as E,_e as F,Jr as G,_f as H,fe as I,ja as J,Ji as K,no as L,Ql as M,vt as N,gf as O,gs as P,df as Q,Cn as R,pf as S,Vi as T,ge as U,wn as V,hf as W,$l as X,Ua as Y,Ga as Z,Xa as _,$i as a,Ba as a0,ka as a1,Ya as a2,Ja as a3,Qa as a4,Za as a5,ef as a6,tf as a7,nf as a8,sf as a9,rf as aa,of as ab,lf as ac,cf as ad,af as ae,ff as af,uf as ag,Cf as ah,xa as ai,mf as aj,ba as ak,bf as al,vf as am,at as an,za as ao,yf as ap,Ea as aq,xf as ar,Ef as as,wf as at,fs as au,Ni as b,Ka as c,pi as d,Wa as e,ya as f,Tr as g,ne as h,da as i,ae as j,Ct as k,Fi as l,Zr as m,ms as n,Li as o,Pa as p,Fa as q,Va as r,ua as s,Na as t,va as u,Gi as v,il as w,Ne as x,ai as y,On as z}; diff --git a/docs/.vitepress/dist/assets/chunks/theme.6Kvju6L6.js b/docs/.vitepress/dist/assets/chunks/theme.wu-W8U-f.js similarity index 99% rename from docs/.vitepress/dist/assets/chunks/theme.6Kvju6L6.js rename to docs/.vitepress/dist/assets/chunks/theme.wu-W8U-f.js index f8bf2c1..ea69219 100644 --- a/docs/.vitepress/dist/assets/chunks/theme.6Kvju6L6.js +++ b/docs/.vitepress/dist/assets/chunks/theme.wu-W8U-f.js @@ -1 +1 @@ -import{d as m,o as a,c as l,r as c,n as w,a as D,t as L,b as k,w as v,e as f,T as ve,_ as b,u as Ue,i as ze,f as Ge,g as pe,h as $,j as I,k as q,l as d,m as i,p as C,q as H,s as j,v as le,x as G,y as X,z as he,A as ge,B as je,C as qe,D as K,F as M,E,G as ye,H as x,I as _,J as R,K as Pe,L as ee,M as Y,N as te,O as Ke,P as Ve,Q as We,R as Re,S as Le,U as se,V as Je,W as Se,X as Te,Y as Ye,Z as Ze,$ as Qe,a0 as Xe}from"./framework.aklsSwTA.js";const xe=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),l("span",{class:w(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[D(L(e.text),1)])],2))}}),et={key:0,class:"VPBackdrop"},tt=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),k(ve,{name:"fade"},{default:v(()=>[e.show?(a(),l("div",et)):f("",!0)]),_:1}))}}),st=b(tt,[["__scopeId","data-v-c79a1216"]]),V=Ue;function ot(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ce(s){return/^\//.test(s)?s:`/${s}`}function fe(s){const{pathname:e,search:t,hash:o,protocol:n}=new URL(s,"http://a.com");if(ze(s)||s.startsWith("#")||!n.startsWith("http")||!Ge(e))return s;const{site:r}=V(),u=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${o}`);return pe(u)}function J({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:o,page:n,theme:r,hash:u}=V(),h=$(()=>{var P,g;return{index:o.value,label:(P=t.value.locales[o.value])==null?void 0:P.label,link:((g=t.value.locales[o.value])==null?void 0:g.link)||(o.value==="root"?"/":`/${o.value}/`)}});return{localeLinks:$(()=>Object.entries(t.value.locales).flatMap(([P,g])=>s&&h.value.label===g.label?[]:{index:P,text:g.label,link:nt(g.link||(P==="root"?"/":`/${P}/`),r.value.i18nRouting!==!1&&e,n.value.relativePath.slice(h.value.link.length-1),!t.value.cleanUrls)+u.value})),currentLang:h}}function nt(s,e,t,o){return e?s.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const at=s=>(C("data-v-4f08a194"),s=s(),H(),s),rt={class:"NotFound"},it={class:"code"},lt={class:"title"},ct=at(()=>d("div",{class:"divider"},null,-1)),ut={class:"quote"},dt={class:"action"},vt=["href","aria-label"],pt=m({__name:"NotFound",setup(s){const{site:e}=V(),{localeLinks:t}=J({removeCurrent:!1}),o=I({link:"/",index:"root"});q(()=>{const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");t.value.length&&(o.value=t.value.find(({link:u})=>u.startsWith(r))||t.value[0])});const n=$(()=>{var r,u,h,p;return{code:404,title:"PAGE NOT FOUND",quote:"But if you don't change your direction, and if you keep looking, you may end up where you are heading.",linkLabel:"go to home",linkText:"Take me home",...o.value.index==="root"?(r=e.value.themeConfig)==null?void 0:r.notFound:(p=(h=(u=e.value.locales)==null?void 0:u[o.value.index])==null?void 0:h.themeConfig)==null?void 0:p.notFound}});return(r,u)=>(a(),l("div",rt,[d("p",it,L(n.value.code),1),d("h1",lt,L(n.value.title),1),ct,d("blockquote",ut,L(n.value.quote),1),d("div",dt,[d("a",{class:"link",href:i(pe)(o.value.link),"aria-label":n.value.linkLabel},L(n.value.linkText),9,vt)])]))}}),ht=b(pt,[["__scopeId","data-v-4f08a194"]]);function we(s,e){if(Array.isArray(s))return Z(s);if(s==null)return[];e=ce(e);const t=Object.keys(s).sort((n,r)=>r.split("/").length-n.split("/").length).find(n=>e.startsWith(ce(n))),o=t?s[t]:[];return Array.isArray(o)?Z(o):Z(o.items,o.base)}function ft(s){const e=[];let t=0;for(const o in s){const n=s[o];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function mt(s){const e=[];function t(o){for(const n of o)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(s),e}function ue(s,e){return Array.isArray(e)?e.some(t=>ue(s,t)):j(s,e.link)?!0:e.items?ue(s,e.items):!1}function Z(s,e){return[...s].map(t=>{const o={...t},n=o.base||e;return n&&o.link&&(o.link=n+o.link),o.items&&(o.items=Z(o.items,n)),o})}function O(){const{frontmatter:s,page:e,theme:t}=V(),o=le("(min-width: 960px)"),n=I(!1),r=$(()=>{const B=t.value.sidebar,T=e.value.relativePath;return B?we(B,T):[]}),u=I(r.value);G(r,(B,T)=>{JSON.stringify(B)!==JSON.stringify(T)&&(u.value=r.value)});const h=$(()=>s.value.sidebar!==!1&&u.value.length>0&&s.value.layout!=="home"),p=$(()=>P?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),P=$(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),g=$(()=>h.value&&o.value),y=$(()=>h.value?ft(u.value):[]);function S(){n.value=!0}function N(){n.value=!1}function A(){n.value?N():S()}return{isOpen:n,sidebar:u,sidebarGroups:y,hasSidebar:h,hasAside:P,leftAside:p,isSidebarEnabled:g,open:S,close:N,toggle:A}}function _t(s,e){let t;X(()=>{t=s.value?document.activeElement:void 0}),q(()=>{window.addEventListener("keyup",o)}),he(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function bt(s){const{page:e,hash:t}=V(),o=I(!1),n=$(()=>s.value.collapsed!=null),r=$(()=>!!s.value.link),u=I(!1),h=()=>{u.value=j(e.value.relativePath,s.value.link)};G([e,s,t],h),q(h);const p=$(()=>u.value?!0:s.value.items?ue(e.value.relativePath,s.value.items):!1),P=$(()=>!!(s.value.items&&s.value.items.length));X(()=>{o.value=!!(n.value&&s.value.collapsed)}),ge(()=>{(u.value||p.value)&&(o.value=!1)});function g(){n.value&&(o.value=!o.value)}return{collapsed:o,collapsible:n,isLink:r,isActiveLink:u,hasActiveLink:p,hasChildren:P,toggle:g}}function kt(){const{hasSidebar:s}=O(),e=le("(min-width: 960px)"),t=le("(min-width: 1280px)");return{isAsideEnabled:$(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const de=[];function Ie(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function me(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:$t(t),link:"#"+t.id,level:o}});return gt(e,s)}function $t(s){let e="";for(const t of s.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(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(u=>u.level>=o&&u.level<=n),de.length=0;for(const{element:u,link:h}of s)de.push({element:u,link:h});const r=[];e:for(let u=0;u=0;p--){const P=s[p];if(P.level{requestAnimationFrame(r),window.addEventListener("scroll",o)}),je(()=>{u(location.hash)}),he(()=>{window.removeEventListener("scroll",o)});function r(){if(!t.value)return;const h=window.scrollY,p=window.innerHeight,P=document.body.offsetHeight,g=Math.abs(h+p-P)<1,y=de.map(({element:N,link:A})=>({link:A,top:Pt(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!y.length){u(null);return}if(h<1){u(null);return}if(g){u(y[y.length-1].link);return}let S=null;for(const{link:N,top:A}of y){if(A>h+qe()+4)break;S=N}u(S)}function u(h){n&&n.classList.remove("active"),h==null?n=null:n=s.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(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}const Vt=["href","title"],Lt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(s){function e({target:t}){const o=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(o));n==null||n.focus({preventScroll:!0})}return(t,o)=>{const n=K("VPDocOutlineItem",!0);return a(),l("ul",{class:w(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),l(M,null,E(t.headers,({children:r,link:u,title:h})=>(a(),l("li",null,[d("a",{class:"outline-link",href:u,onClick:e,title:h},L(h),9,Vt),r!=null&&r.length?(a(),k(n,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Me=b(Lt,[["__scopeId","data-v-b933a997"]]),St={class:"content"},Tt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},wt=m({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=V(),o=ye([]);x(()=>{o.value=me(e.value.outline??t.value.outline)});const n=I(),r=I();return yt(n,r),(u,h)=>(a(),l("nav",{"aria-labelledby":"doc-outline-aria-label",class:w(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n,role:"navigation"},[d("div",St,[d("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),d("div",Tt,L(i(Ie)(i(t))),1),_(Me,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),It=b(wt,[["__scopeId","data-v-269c27a6"]]),Mt={class:"VPDocAsideCarbonAds"},Nt=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,o)=>(a(),l("div",Mt,[_(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),At=s=>(C("data-v-3f215769"),s=s(),H(),s),Bt={class:"VPDocAside"},Ct=At(()=>d("div",{class:"spacer"},null,-1)),Ht=m({__name:"VPDocAside",setup(s){const{theme:e}=V();return(t,o)=>(a(),l("div",Bt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),_(It),c(t.$slots,"aside-outline-after",{},void 0,!0),Ct,c(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),k(Nt,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):f("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Et=b(Ht,[["__scopeId","data-v-3f215769"]]);function Ft(){const{theme:s,page:e}=V();return $(()=>{const{text:t="Edit this page",pattern:o=""}=s.value.editLink||{};let n;return typeof o=="function"?n=o(e.value):n=o.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Dt(){const{page:s,theme:e,frontmatter:t}=V();return $(()=>{var P,g,y,S,N,A,B,T;const o=we(e.value.sidebar,s.value.relativePath),n=mt(o),r=Ot(n,U=>U.link.replace(/[?#].*$/,"")),u=r.findIndex(U=>j(s.value.relativePath,U.link)),h=((P=e.value.docFooter)==null?void 0:P.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((g=e.value.docFooter)==null?void 0:g.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)??((y=r[u-1])==null?void 0:y.docFooterText)??((S=r[u-1])==null?void 0:S.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)??((T=r[u+1])==null?void 0:T.link)}}})}function Ot(s,e){const t=new Set;return s.filter(o=>{const n=e(o);return t.has(n)?!1:t.add(n)})}const F=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=$(()=>e.tag??(e.href?"a":"span")),o=$(()=>e.href&&Pe.test(e.href));return(n,r)=>(a(),k(R(t.value),{class:w(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?i(fe)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:v(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ut={class:"VPLastUpdated"},zt=["datetime"],Gt=m({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:o,lang:n}=V(),r=$(()=>new Date(o.value.lastUpdated??t.value.lastUpdated)),u=$(()=>r.value.toISOString()),h=I("");return q(()=>{X(()=>{var p,P,g;h.value=new Intl.DateTimeFormat((P=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&P.forceLocale?n.value:void 0,((g=e.value.lastUpdated)==null?void 0:g.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(p,P)=>{var g;return a(),l("p",Ut,[D(L(((g=i(e).lastUpdated)==null?void 0:g.text)||i(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:u.value},L(h.value),9,zt)])}}}),jt=b(Gt,[["__scopeId","data-v-7e05ebdb"]]),Ne=s=>(C("data-v-d4a0bba5"),s=s(),H(),s),qt={key:0,class:"VPDocFooter"},Kt={key:0,class:"edit-info"},Wt={key:0,class:"edit-link"},Rt=Ne(()=>d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Jt={key:1,class:"last-updated"},Yt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Zt=Ne(()=>d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),Qt={class:"pager"},Xt=["innerHTML"],xt=["innerHTML"],es={class:"pager"},ts=["innerHTML"],ss=["innerHTML"],os=m({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=V(),n=Ft(),r=Dt(),u=$(()=>e.value.editLink&&o.value.editLink!==!1),h=$(()=>t.value.lastUpdated&&o.value.lastUpdated!==!1),p=$(()=>u.value||h.value||r.value.prev||r.value.next);return(P,g)=>{var y,S,N,A;return p.value?(a(),l("footer",qt,[c(P.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),l("div",Kt,[u.value?(a(),l("div",Wt,[_(F,{class:"edit-link-button",href:i(n).url,"no-icon":!0},{default:v(()=>[Rt,D(" "+L(i(n).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),l("div",Jt,[_(jt)])):f("",!0)])):f("",!0),(y=i(r).prev)!=null&&y.link||(S=i(r).next)!=null&&S.link?(a(),l("nav",Yt,[Zt,d("div",Qt,[(N=i(r).prev)!=null&&N.link?(a(),k(F,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:v(()=>{var B;return[d("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,Xt),d("span",{class:"title",innerHTML:i(r).prev.text},null,8,xt)]}),_:1},8,["href"])):f("",!0)]),d("div",es,[(A=i(r).next)!=null&&A.link?(a(),k(F,{key:0,class:"pager-link next",href:i(r).next.link},{default:v(()=>{var B;return[d("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.next)||"Next page"},null,8,ts),d("span",{class:"title",innerHTML:i(r).next.text},null,8,ss)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),ns=b(os,[["__scopeId","data-v-d4a0bba5"]]),as=s=>(C("data-v-39a288b8"),s=s(),H(),s),rs={class:"container"},is=as(()=>d("div",{class:"aside-curtain"},null,-1)),ls={class:"aside-container"},cs={class:"aside-content"},us={class:"content"},ds={class:"content-container"},vs={class:"main"},ps=m({__name:"VPDoc",setup(s){const{theme:e}=V(),t=ee(),{hasSidebar:o,hasAside:n,leftAside:r}=O(),u=$(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,p)=>{const P=K("Content");return a(),l("div",{class:w(["VPDoc",{"has-sidebar":i(o),"has-aside":i(n)}])},[c(h.$slots,"doc-top",{},void 0,!0),d("div",rs,[i(n)?(a(),l("div",{key:0,class:w(["aside",{"left-aside":i(r)}])},[is,d("div",ls,[d("div",cs,[_(Et,null,{"aside-top":v(()=>[c(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[c(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[c(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),d("div",us,[d("div",ds,[c(h.$slots,"doc-before",{},void 0,!0),d("main",vs,[_(P,{class:w(["vp-doc",[u.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(ns,null,{"doc-footer-before":v(()=>[c(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(h.$slots,"doc-after",{},void 0,!0)])])]),c(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),hs=b(ps,[["__scopeId","data-v-39a288b8"]]),fs=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=$(()=>e.href&&Pe.test(e.href)),o=$(()=>e.tag||e.href?"a":"button");return(n,r)=>(a(),k(R(o.value),{class:w(["VPButton",[n.size,n.theme]]),href:n.href?i(fe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[D(L(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),ms=b(fs,[["__scopeId","data-v-cad61b99"]]),_s=["src","alt"],bs=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=K("VPImage",!0);return e.image?(a(),l(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),l("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(pe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,_s)):(a(),l(M,{key:1},[_(o,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),Q=b(bs,[["__scopeId","data-v-8426fc1a"]]),ks=s=>(C("data-v-303bb580"),s=s(),H(),s),$s={class:"container"},gs={class:"main"},ys={key:0,class:"name"},Ps=["innerHTML"],Vs=["innerHTML"],Ls=["innerHTML"],Ss={key:0,class:"actions"},Ts={key:0,class:"image"},ws={class:"image-container"},Is=ks(()=>d("div",{class:"image-bg"},null,-1)),Ms=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=te("hero-image-slot-exists");return(t,o)=>(a(),l("div",{class:w(["VPHero",{"has-image":t.image||i(e)}])},[d("div",$s,[d("div",gs,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),l("h1",ys,[d("span",{innerHTML:t.name,class:"clip"},null,8,Ps)])):f("",!0),t.text?(a(),l("p",{key:1,innerHTML:t.text,class:"text"},null,8,Vs)):f("",!0),t.tagline?(a(),l("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Ls)):f("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),l("div",Ss,[(a(!0),l(M,null,E(t.actions,n=>(a(),l("div",{key:n.link,class:"action"},[_(ms,{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),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),l("div",Ts,[d("div",ws,[Is,c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Ns=b(Ms,[["__scopeId","data-v-303bb580"]]),As=m({__name:"VPHomeHero",setup(s){const{frontmatter:e}=V();return(t,o)=>i(e).hero?(a(),k(Ns,{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":v(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Bs=s=>(C("data-v-a3976bdc"),s=s(),H(),s),Cs={class:"box"},Hs={key:0,class:"icon"},Es=["innerHTML"],Fs=["innerHTML"],Ds=["innerHTML"],Os={key:4,class:"link-text"},Us={class:"link-text-value"},zs=Bs(()=>d("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Gs=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),k(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[d("article",Cs,[typeof e.icon=="object"&&e.icon.wrap?(a(),l("div",Hs,[_(Q,{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(),k(Q,{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(),l("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Es)):f("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Fs),e.details?(a(),l("p",{key:3,class:"details",innerHTML:e.details},null,8,Ds)):f("",!0),e.linkText?(a(),l("div",Os,[d("p",Us,[D(L(e.linkText)+" ",1),zs])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),js=b(Gs,[["__scopeId","data-v-a3976bdc"]]),qs={key:0,class:"VPFeatures"},Ks={class:"container"},Ws={class:"items"},Rs=m({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=$(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,n)=>o.features?(a(),l("div",qs,[d("div",Ks,[d("div",Ws,[(a(!0),l(M,null,E(o.features,r=>(a(),l("div",{key:r.title,class:w(["item",[t.value]])},[_(js,{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)}}),Js=b(Rs,[["__scopeId","data-v-a6181336"]]),Ys=m({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=V();return(t,o)=>i(e).features?(a(),k(Js,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):f("",!0)}}),Zs=m({__name:"VPHomeContent",setup(s){const{width:e}=Ke({includeScrollbar:!1});return(t,o)=>(a(),l("div",{class:"vp-doc container",style:Ve(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Qs=b(Zs,[["__scopeId","data-v-82d4af08"]]),Xs={class:"VPHome"},xs=m({__name:"VPHome",setup(s){const{frontmatter:e}=V();return(t,o)=>{const n=K("Content");return a(),l("div",Xs,[c(t.$slots,"home-hero-before",{},void 0,!0),_(As,null,{"home-hero-info-before":v(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),_(Ys),c(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),k(Qs,{key:0},{default:v(()=>[_(n)]),_:1})):(a(),k(n,{key:1}))])}}}),eo=b(xs,[["__scopeId","data-v-686f80a6"]]),to={},so={class:"VPPage"};function oo(s,e){const t=K("Content");return a(),l("div",so,[c(s.$slots,"page-top"),_(t),c(s.$slots,"page-bottom")])}const no=b(to,[["render",oo]]),ao=m({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=V(),{hasSidebar:o}=O();return(n,r)=>(a(),l("div",{class:w(["VPContent",{"has-sidebar":i(o),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[_(ht)],!0):i(t).layout==="page"?(a(),k(no,{key:1},{"page-top":v(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),k(eo,{key:2},{"home-hero-before":v(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),k(R(i(t).layout),{key:3})):(a(),k(hs,{key:4},{"doc-top":v(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ro=b(ao,[["__scopeId","data-v-1428d186"]]),io={class:"container"},lo=["innerHTML"],co=["innerHTML"],uo=m({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=V(),{hasSidebar:o}=O();return(n,r)=>i(e).footer&&i(t).footer!==!1?(a(),l("footer",{key:0,class:w(["VPFooter",{"has-sidebar":i(o)}])},[d("div",io,[i(e).footer.message?(a(),l("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,lo)):f("",!0),i(e).footer.copyright?(a(),l("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,co)):f("",!0)])],2)):f("",!0)}}),vo=b(uo,[["__scopeId","data-v-e315a0ad"]]);function po(){const{theme:s,frontmatter:e}=V(),t=ye([]),o=$(()=>t.value.length>0);return x(()=>{t.value=me(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const ho=s=>(C("data-v-17a5e62e"),s=s(),H(),s),fo={class:"menu-text"},mo=ho(()=>d("span",{class:"vpi-chevron-right icon"},null,-1)),_o={class:"header"},bo={class:"outline"},ko=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=V(),o=I(!1),n=I(0),r=I(),u=I();function h(y){var S;(S=r.value)!=null&&S.contains(y.target)||(o.value=!1)}G(o,y=>{if(y){document.addEventListener("click",h);return}document.removeEventListener("click",h)}),We("Escape",()=>{o.value=!1}),x(()=>{o.value=!1});function p(){o.value=!o.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(()=>{o.value=!1}))}function g(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,S)=>(a(),l("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":n.value+"px"}),ref_key:"main",ref:r},[y.headers.length>0?(a(),l("button",{key:0,onClick:p,class:w({open:o.value})},[d("span",fo,L(i(Ie)(i(t))),1),mo],2)):(a(),l("button",{key:1,onClick:g},L(i(t).returnToTopLabel||"Return to top"),1)),_(ve,{name:"flyout"},{default:v(()=>[o.value?(a(),l("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:P},[d("div",_o,[d("a",{class:"top-link",href:"#",onClick:g},L(i(t).returnToTopLabel||"Return to top"),1)]),d("div",bo,[_(Me,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),$o=b(ko,[["__scopeId","data-v-17a5e62e"]]),go=s=>(C("data-v-a6f0e41e"),s=s(),H(),s),yo={class:"container"},Po=["aria-expanded"],Vo=go(()=>d("span",{class:"vpi-align-left menu-icon"},null,-1)),Lo={class:"menu-text"},So=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=V(),{hasSidebar:o}=O(),{headers:n}=po(),{y:r}=Le(),u=I(0);q(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=me(t.value.outline??e.value.outline)});const h=$(()=>n.value.length===0),p=$(()=>h.value&&!o.value),P=$(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:h.value,fixed:p.value}));return(g,y)=>i(t).layout!=="home"&&(!p.value||i(r)>=u.value)?(a(),l("div",{key:0,class:w(P.value)},[d("div",yo,[i(o)?(a(),l("button",{key:0,class:"menu","aria-expanded":g.open,"aria-controls":"VPSidebarNav",onClick:y[0]||(y[0]=S=>g.$emit("open-menu"))},[Vo,d("span",Lo,L(i(e).sidebarMenuLabel||"Menu"),1)],8,Po)):f("",!0),_($o,{headers:i(n),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),To=b(So,[["__scopeId","data-v-a6f0e41e"]]);function wo(){const s=I(!1);function e(){s.value=!0,window.addEventListener("resize",n)}function t(){s.value=!1,window.removeEventListener("resize",n)}function o(){s.value?t():e()}function n(){window.outerWidth>=768&&t()}const r=ee();return G(()=>r.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const Io={},Mo={class:"VPSwitch",type:"button",role:"switch"},No={class:"check"},Ao={key:0,class:"icon"};function Bo(s,e){return a(),l("button",Mo,[d("span",No,[s.$slots.default?(a(),l("span",Ao,[c(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Co=b(Io,[["render",Bo],["__scopeId","data-v-1d5665e3"]]),Ae=s=>(C("data-v-d1f28634"),s=s(),H(),s),Ho=Ae(()=>d("span",{class:"vpi-sun sun"},null,-1)),Eo=Ae(()=>d("span",{class:"vpi-moon moon"},null,-1)),Fo=m({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=V(),o=te("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(),k(Co,{title:n.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(o)},{default:v(()=>[Ho,Eo]),_:1},8,["title","aria-checked","onClick"]))}}),_e=b(Fo,[["__scopeId","data-v-d1f28634"]]),Do={key:0,class:"VPNavBarAppearance"},Oo=m({__name:"VPNavBarAppearance",setup(s){const{site:e}=V();return(t,o)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),l("div",Do,[_(_e)])):f("",!0)}}),Uo=b(Oo,[["__scopeId","data-v-e6aabb21"]]),be=I();let Be=!1,ie=0;function zo(s){const e=I(!1);if(se){!Be&&Go(),ie++;const t=G(be,o=>{var n,r,u;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(r=s.onFocus)==null||r.call(s)):(e.value=!1,(u=s.onBlur)==null||u.call(s))});he(()=>{t(),ie--,ie||jo()})}return Je(e)}function Go(){document.addEventListener("focusin",Ce),Be=!0,be.value=document.activeElement}function jo(){document.removeEventListener("focusin",Ce)}function Ce(){be.value=document.activeElement}const qo={class:"VPMenuLink"},Ko=m({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=V();return(t,o)=>(a(),l("div",qo,[_(F,{class:w({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:v(()=>[D(L(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),oe=b(Ko,[["__scopeId","data-v-43f1e123"]]),Wo={class:"VPMenuGroup"},Ro={key:0,class:"title"},Jo=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),l("div",Wo,[e.text?(a(),l("p",Ro,L(e.text),1)):f("",!0),(a(!0),l(M,null,E(e.items,o=>(a(),l(M,null,["link"in o?(a(),k(oe,{key:0,item:o},null,8,["item"])):f("",!0)],64))),256))]))}}),Yo=b(Jo,[["__scopeId","data-v-69e747b5"]]),Zo={class:"VPMenu"},Qo={key:0,class:"items"},Xo=m({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),l("div",Zo,[e.items?(a(),l("div",Qo,[(a(!0),l(M,null,E(e.items,o=>(a(),l(M,{key:o.text},["link"in o?(a(),k(oe,{key:0,item:o},null,8,["item"])):(a(),k(Yo,{key:1,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),xo=b(Xo,[["__scopeId","data-v-e7ea1737"]]),en=s=>(C("data-v-b6c34ac9"),s=s(),H(),s),tn=["aria-expanded","aria-label"],sn={key:0,class:"text"},on=["innerHTML"],nn=en(()=>d("span",{class:"vpi-chevron-down text-icon"},null,-1)),an={key:1,class:"vpi-more-horizontal icon"},rn={class:"menu"},ln=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=I(!1),t=I();zo({el:t,onBlur:o});function o(){e.value=!1}return(n,r)=>(a(),l("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)},[d("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(),l("span",sn,[n.icon?(a(),l("span",{key:0,class:w([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),l("span",{key:1,innerHTML:n.button},null,8,on)):f("",!0),nn])):(a(),l("span",an))],8,tn),d("div",rn,[_(xo,{items:n.items},{default:v(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ke=b(ln,[["__scopeId","data-v-b6c34ac9"]]),cn=["href","aria-label","innerHTML"],un=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=$(()=>typeof e.icon=="object"?e.icon.svg:``);return(o,n)=>(a(),l("a",{class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,cn))}}),dn=b(un,[["__scopeId","data-v-eee4e7cb"]]),vn={class:"VPSocialLinks"},pn=m({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),l("div",vn,[(a(!0),l(M,null,E(e.links,({link:o,icon:n,ariaLabel:r})=>(a(),k(dn,{key:o,icon:n,link:o,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),ne=b(pn,[["__scopeId","data-v-7bc22406"]]),hn={key:0,class:"group translations"},fn={class:"trans-title"},mn={key:1,class:"group"},_n={class:"item appearance"},bn={class:"label"},kn={class:"appearance-action"},$n={key:2,class:"group"},gn={class:"item social-links"},yn=m({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=V(),{localeLinks:o,currentLang:n}=J({correspondingLink:!0}),r=$(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>r.value?(a(),k(ke,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[i(o).length&&i(n).label?(a(),l("div",hn,[d("p",fn,L(i(n).label),1),(a(!0),l(M,null,E(i(o),p=>(a(),k(oe,{key:p.link,item:p},null,8,["item"]))),128))])):f("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(a(),l("div",mn,[d("div",_n,[d("p",bn,L(i(t).darkModeSwitchLabel||"Appearance"),1),d("div",kn,[_(_e)])])])):f("",!0),i(t).socialLinks?(a(),l("div",$n,[d("div",gn,[_(ne,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Pn=b(yn,[["__scopeId","data-v-d0bd9dde"]]),Vn=s=>(C("data-v-e5dd9c1c"),s=s(),H(),s),Ln=["aria-expanded"],Sn=Vn(()=>d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)),Tn=[Sn],wn=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),l("button",{type:"button",class:w(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},Tn,10,Ln))}}),In=b(wn,[["__scopeId","data-v-e5dd9c1c"]]),Mn=["innerHTML"],Nn=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=V();return(t,o)=>(a(),k(F,{class:w({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:v(()=>[d("span",{innerHTML:t.item.text},null,8,Mn)]),_:1},8,["class","href","noIcon","target","rel"]))}}),An=b(Nn,[["__scopeId","data-v-9c663999"]]),Bn=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=V(),o=r=>"link"in r?j(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(o),n=$(()=>o(e.item));return(r,u)=>(a(),k(ke,{class:w({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"]))}}),Cn=s=>(C("data-v-7f418b0f"),s=s(),H(),s),Hn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},En=Cn(()=>d("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Fn=m({__name:"VPNavBarMenu",setup(s){const{theme:e}=V();return(t,o)=>i(e).nav?(a(),l("nav",Hn,[En,(a(!0),l(M,null,E(i(e).nav,n=>(a(),l(M,{key:n.text},["link"in n?(a(),k(An,{key:0,item:n},null,8,["item"])):(a(),k(Bn,{key:1,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),Dn=b(Fn,[["__scopeId","data-v-7f418b0f"]]);function On(s){const{localeIndex:e,theme:t}=V();function o(n){var A,B,T;const r=n.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",p=h&&((T=(B=u.locales)==null?void 0:B[e.value])==null?void 0:T.translations)||null,P=h&&u.translations||null;let g=p,y=P,S=s;const N=r.pop();for(const U of r){let z=null;const W=S==null?void 0:S[U];W&&(z=S=W);const ae=y==null?void 0:y[U];ae&&(z=y=ae);const re=g==null?void 0:g[U];re&&(z=g=re),W||(S=z),ae||(y=z),re||(g=z)}return(g==null?void 0:g[N])??(y==null?void 0:y[N])??(S==null?void 0:S[N])??""}return o}const Un=["aria-label"],zn={class:"DocSearch-Button-Container"},Gn=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),jn={class:"DocSearch-Button-Placeholder"},qn=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1),$e=m({__name:"VPNavBarSearchButton",setup(s){const t=On({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),l("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[d("span",zn,[Gn,d("span",jn,L(i(t)("button.buttonText")),1)]),qn],8,Un))}}),Kn={class:"VPNavBarSearch"},Wn={id:"local-search"},Rn={key:1,id:"docsearch"},Jn=m({__name:"VPNavBarSearch",setup(s){const e=()=>null,t=()=>null,{theme:o}=V(),n=I(!1),r=I(!1);q(()=>{});function u(){n.value||(n.value=!0,setTimeout(h,16))}function h(){const g=new Event("keydown");g.key="k",g.metaKey=!0,window.dispatchEvent(g),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}const p=I(!1),P="";return(g,y)=>{var S;return a(),l("div",Kn,[i(P)==="local"?(a(),l(M,{key:0},[p.value?(a(),k(i(e),{key:0,onClose:y[0]||(y[0]=N=>p.value=!1)})):f("",!0),d("div",Wn,[_($e,{onClick:y[1]||(y[1]=N=>p.value=!0)})])],64)):i(P)==="algolia"?(a(),l(M,{key:1},[n.value?(a(),k(i(t),{key:0,algolia:((S=i(o).search)==null?void 0:S.options)??i(o).algolia,onVnodeBeforeMount:y[2]||(y[2]=N=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),l("div",Rn,[_($e,{onClick:u})]))],64)):f("",!0)])}}}),Yn=m({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=V();return(t,o)=>i(e).socialLinks?(a(),k(ne,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Zn=b(Yn,[["__scopeId","data-v-0394ad82"]]),Qn=["href","rel","target"],Xn={key:1},xn={key:2},ea=m({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=V(),{hasSidebar:o}=O(),{currentLang:n}=J(),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,P)=>(a(),l("div",{class:w(["VPNavBarTitle",{"has-sidebar":i(o)}])},[d("a",{class:"title",href:r.value??i(fe)(i(n).link),rel:u.value,target:h.value},[c(p.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),k(Q,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):f("",!0),i(t).siteTitle?(a(),l("span",Xn,L(i(t).siteTitle),1)):i(t).siteTitle===void 0?(a(),l("span",xn,L(i(e).title),1)):f("",!0),c(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,Qn)],2))}}),ta=b(ea,[["__scopeId","data-v-ab179fa1"]]),sa={class:"items"},oa={class:"title"},na=m({__name:"VPNavBarTranslations",setup(s){const{theme:e}=V(),{localeLinks:t,currentLang:o}=J({correspondingLink:!0});return(n,r)=>i(t).length&&i(o).label?(a(),k(ke,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:v(()=>[d("div",sa,[d("p",oa,L(i(o).label),1),(a(!0),l(M,null,E(i(t),u=>(a(),k(oe,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),aa=b(na,[["__scopeId","data-v-88af2de4"]]),ra=s=>(C("data-v-ccf7ddec"),s=s(),H(),s),ia={class:"wrapper"},la={class:"container"},ca={class:"title"},ua={class:"content"},da={class:"content-body"},va=ra(()=>d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1)),pa=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=Le(),{hasSidebar:t}=O(),{frontmatter:o}=V(),n=I({});return ge(()=>{n.value={"has-sidebar":t.value,home:o.value.layout==="home",top:e.value===0}}),(r,u)=>(a(),l("div",{class:w(["VPNavBar",n.value])},[d("div",ia,[d("div",la,[d("div",ca,[_(ta,null,{"nav-bar-title-before":v(()=>[c(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",ua,[d("div",da,[c(r.$slots,"nav-bar-content-before",{},void 0,!0),_(Jn,{class:"search"}),_(Dn,{class:"menu"}),_(aa,{class:"translations"}),_(Uo,{class:"appearance"}),_(Zn,{class:"social-links"}),_(Pn,{class:"extra"}),c(r.$slots,"nav-bar-content-after",{},void 0,!0),_(In,{class:"hamburger",active:r.isScreenOpen,onClick:u[0]||(u[0]=h=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),va],2))}}),ha=b(pa,[["__scopeId","data-v-ccf7ddec"]]),fa={key:0,class:"VPNavScreenAppearance"},ma={class:"text"},_a=m({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=V();return(o,n)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),l("div",fa,[d("p",ma,L(i(t).darkModeSwitchLabel||"Appearance"),1),_(_e)])):f("",!0)}}),ba=b(_a,[["__scopeId","data-v-2d7af913"]]),ka=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=te("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),$a=b(ka,[["__scopeId","data-v-7f31e1f6"]]),ga=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=te("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:v(()=>[D(L(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),He=b(ga,[["__scopeId","data-v-19976ae1"]]),ya={class:"VPNavScreenMenuGroupSection"},Pa={key:0,class:"title"},Va=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),l("div",ya,[e.text?(a(),l("p",Pa,L(e.text),1)):f("",!0),(a(!0),l(M,null,E(e.items,o=>(a(),k(He,{key:o.text,item:o},null,8,["item"]))),128))]))}}),La=b(Va,[["__scopeId","data-v-8133b170"]]),Sa=s=>(C("data-v-ff6087d4"),s=s(),H(),s),Ta=["aria-controls","aria-expanded"],wa=["innerHTML"],Ia=Sa(()=>d("span",{class:"vpi-plus button-icon"},null,-1)),Ma=["id"],Na={key:1,class:"group"},Aa=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=I(!1),o=$(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(r,u)=>(a(),l("div",{class:w(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[d("span",{class:"button-text",innerHTML:r.text},null,8,wa),Ia],8,Ta),d("div",{id:o.value,class:"items"},[(a(!0),l(M,null,E(r.items,h=>(a(),l(M,{key:h.text},["link"in h?(a(),l("div",{key:h.text,class:"item"},[_(He,{item:h},null,8,["item"])])):(a(),l("div",Na,[_(La,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Ma)],2))}}),Ba=b(Aa,[["__scopeId","data-v-ff6087d4"]]),Ca={key:0,class:"VPNavScreenMenu"},Ha=m({__name:"VPNavScreenMenu",setup(s){const{theme:e}=V();return(t,o)=>i(e).nav?(a(),l("nav",Ca,[(a(!0),l(M,null,E(i(e).nav,n=>(a(),l(M,{key:n.text},["link"in n?(a(),k($a,{key:0,item:n},null,8,["item"])):(a(),k(Ba,{key:1,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Ea=m({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=V();return(t,o)=>i(e).socialLinks?(a(),k(ne,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Ee=s=>(C("data-v-858fe1a4"),s=s(),H(),s),Fa=Ee(()=>d("span",{class:"vpi-languages icon lang"},null,-1)),Da=Ee(()=>d("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Oa={class:"list"},Ua=m({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=J({correspondingLink:!0}),o=I(!1);function n(){o.value=!o.value}return(r,u)=>i(e).length&&i(t).label?(a(),l("div",{key:0,class:w(["VPNavScreenTranslations",{open:o.value}])},[d("button",{class:"title",onClick:n},[Fa,D(" "+L(i(t).label)+" ",1),Da]),d("ul",Oa,[(a(!0),l(M,null,E(i(e),h=>(a(),l("li",{key:h.link,class:"item"},[_(F,{class:"link",href:h.link},{default:v(()=>[D(L(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),za=b(Ua,[["__scopeId","data-v-858fe1a4"]]),Ga={class:"container"},ja=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=I(null),t=Se(se?document.body:null);return(o,n)=>(a(),k(ve,{name:"fade",onEnter:n[0]||(n[0]=r=>t.value=!0),onAfterLeave:n[1]||(n[1]=r=>t.value=!1)},{default:v(()=>[o.open?(a(),l("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",Ga,[c(o.$slots,"nav-screen-content-before",{},void 0,!0),_(Ha,{class:"menu"}),_(za,{class:"translations"}),_(ba,{class:"appearance"}),_(Ea,{class:"social-links"}),c(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),qa=b(ja,[["__scopeId","data-v-cc5739dd"]]),Ka={key:0,class:"VPNav"},Wa=m({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=wo(),{frontmatter:n}=V(),r=$(()=>n.value.navbar!==!1);return Te("close-screen",t),X(()=>{se&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(u,h)=>r.value?(a(),l("header",Ka,[_(ha,{"is-screen-open":i(e),onToggleScreen:i(o)},{"nav-bar-title-before":v(()=>[c(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[c(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[c(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(qa,{open:i(e)},{"nav-screen-content-before":v(()=>[c(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[c(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Ra=b(Wa,[["__scopeId","data-v-ae24b3ad"]]),Fe=s=>(C("data-v-b8d55f3b"),s=s(),H(),s),Ja=["role","tabindex"],Ya=Fe(()=>d("div",{class:"indicator"},null,-1)),Za=Fe(()=>d("span",{class:"vpi-chevron-right caret-icon"},null,-1)),Qa=[Za],Xa={key:1,class:"items"},xa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:r,hasActiveLink:u,hasChildren:h,toggle:p}=bt($(()=>e.item)),P=$(()=>h.value?"section":"div"),g=$(()=>n.value?"a":"div"),y=$(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),S=$(()=>n.value?void 0:"button"),N=$(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":r.value},{"has-active":u.value}]);function A(T){"key"in T&&T.key!=="Enter"||!e.item.link&&p()}function B(){e.item.link&&p()}return(T,U)=>{const z=K("VPSidebarItem",!0);return a(),k(R(P.value),{class:w(["VPSidebarItem",N.value])},{default:v(()=>[T.item.text?(a(),l("div",Y({key:0,class:"item",role:S.value},Ye(T.item.items?{click:A,keydown:A}:{},!0),{tabindex:T.item.items&&0}),[Ya,T.item.link?(a(),k(F,{key:0,tag:g.value,class:"link",href:T.item.link,rel:T.item.rel,target:T.item.target},{default:v(()=>[(a(),k(R(y.value),{class:"text",innerHTML:T.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(R(y.value),{key:1,class:"text",innerHTML:T.item.text},null,8,["innerHTML"])),T.item.collapsed!=null&&T.item.items&&T.item.items.length?(a(),l("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:Ze(B,["enter"]),tabindex:"0"},Qa,32)):f("",!0)],16,Ja)):f("",!0),T.item.items&&T.item.items.length?(a(),l("div",Xa,[T.depth<5?(a(!0),l(M,{key:0},E(T.item.items,W=>(a(),k(z,{key:W.text,item:W,depth:T.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),er=b(xa,[["__scopeId","data-v-b8d55f3b"]]),De=s=>(C("data-v-575e6a36"),s=s(),H(),s),tr=De(()=>d("div",{class:"curtain"},null,-1)),sr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},or=De(()=>d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),nr=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=O(),o=s,n=I(null),r=Se(se?document.body:null);return G([o,n],()=>{var u;o.open?(r.value=!0,(u=n.value)==null||u.focus()):r.value=!1},{immediate:!0,flush:"post"}),(u,h)=>i(t)?(a(),l("aside",{key:0,class:w(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:n,onClick:h[0]||(h[0]=Qe(()=>{},["stop"]))},[tr,d("nav",sr,[or,c(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),l(M,null,E(i(e),p=>(a(),l("div",{key:p.text,class:"group"},[_(er,{item:p,depth:0},null,8,["item"])]))),128)),c(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),ar=b(nr,[["__scopeId","data-v-575e6a36"]]),rr=m({__name:"VPSkipLink",setup(s){const e=ee(),t=I();G(()=>e.path,()=>t.value.focus());function o({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(),l(M,null,[d("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o}," Skip to content ")],64))}}),ir=b(rr,[["__scopeId","data-v-0f60ec36"]]),lr=m({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=O(),n=ee();G(()=>n.path,o),_t(e,o);const{frontmatter:r}=V(),u=Xe(),h=$(()=>!!u["home-hero-image"]);return Te("hero-image-slot-exists",h),(p,P)=>{const g=K("Content");return i(r).layout!==!1?(a(),l("div",{key:0,class:w(["Layout",i(r).pageClass])},[c(p.$slots,"layout-top",{},void 0,!0),_(ir),_(st,{class:"backdrop",show:i(e),onClick:i(o)},null,8,["show","onClick"]),_(Ra,null,{"nav-bar-title-before":v(()=>[c(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[c(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[c(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[c(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[c(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(To,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),_(ar,{open:i(e)},{"sidebar-nav-before":v(()=>[c(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[c(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(ro,null,{"page-top":v(()=>[c(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[c(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[c(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[c(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[c(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[c(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[c(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[c(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[c(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[c(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[c(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[c(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[c(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(vo),c(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(g,{key:1}))}}}),cr=b(lr,[["__scopeId","data-v-5d98c3a5"]]),ur={},dr={class:"VPTeamPage"};function vr(s,e){return a(),l("div",dr,[c(s.$slots,"default")])}const Dr=b(ur,[["render",vr],["__scopeId","data-v-7c57f839"]]),pr={},hr={class:"VPTeamPageTitle"},fr={key:0,class:"title"},mr={key:1,class:"lead"};function _r(s,e){return a(),l("div",hr,[s.$slots.title?(a(),l("h1",fr,[c(s.$slots,"title",{},void 0,!0)])):f("",!0),s.$slots.lead?(a(),l("p",mr,[c(s.$slots,"lead",{},void 0,!0)])):f("",!0)])}const Or=b(pr,[["render",_r],["__scopeId","data-v-bf2cbdac"]]),br=s=>(C("data-v-f3fa364a"),s=s(),H(),s),kr={class:"profile"},$r={class:"avatar"},gr=["src","alt"],yr={class:"data"},Pr={class:"name"},Vr={key:0,class:"affiliation"},Lr={key:0,class:"title"},Sr={key:1,class:"at"},Tr=["innerHTML"],wr={key:2,class:"links"},Ir={key:0,class:"sp"},Mr=br(()=>d("span",{class:"vpi-heart sp-icon"},null,-1)),Nr=m({__name:"VPTeamMembersItem",props:{size:{default:"medium"},member:{}},setup(s){return(e,t)=>(a(),l("article",{class:w(["VPTeamMembersItem",[e.size]])},[d("div",kr,[d("figure",$r,[d("img",{class:"avatar-img",src:e.member.avatar,alt:e.member.name},null,8,gr)]),d("div",yr,[d("h1",Pr,L(e.member.name),1),e.member.title||e.member.org?(a(),l("p",Vr,[e.member.title?(a(),l("span",Lr,L(e.member.title),1)):f("",!0),e.member.title&&e.member.org?(a(),l("span",Sr," @ ")):f("",!0),e.member.org?(a(),k(F,{key:2,class:w(["org",{link:e.member.orgLink}]),href:e.member.orgLink,"no-icon":""},{default:v(()=>[D(L(e.member.org),1)]),_:1},8,["class","href"])):f("",!0)])):f("",!0),e.member.desc?(a(),l("p",{key:1,class:"desc",innerHTML:e.member.desc},null,8,Tr)):f("",!0),e.member.links?(a(),l("div",wr,[_(ne,{links:e.member.links},null,8,["links"])])):f("",!0)])]),e.member.sponsor?(a(),l("div",Ir,[_(F,{class:"sp-link",href:e.member.sponsor,"no-icon":""},{default:v(()=>[Mr,D(" "+L(e.member.actionText||"Sponsor"),1)]),_:1},8,["href"])])):f("",!0)],2))}}),Ar=b(Nr,[["__scopeId","data-v-f3fa364a"]]),Br={class:"container"},Cr=m({__name:"VPTeamMembers",props:{size:{default:"medium"},members:{}},setup(s){const e=s,t=$(()=>[e.size,`count-${e.members.length}`]);return(o,n)=>(a(),l("div",{class:w(["VPTeamMembers",t.value])},[d("div",Br,[(a(!0),l(M,null,E(o.members,r=>(a(),l("div",{key:r.name,class:"item"},[_(Ar,{size:o.size,member:r},null,8,["size","member"])]))),128))])],2))}}),Ur=b(Cr,[["__scopeId","data-v-6cb0dbc4"]]),Oe={Layout:cr,enhanceApp:({app:s})=>{s.component("Badge",xe)}},Hr=d("iframe",{style:{"z-index":"100"},width:"500",height:"315",src:"https://www.youtube.com/embed/6w-ZbD8wJZM?si=chkr-Pm_ydTErArx",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",referrerpolicy:"strict-origin-when-cross-origin",allowfullscreen:""},null,-1),Er={__name:"MyLayout",setup(s){return(e,t)=>(a(),k(i(Oe).Layout,null,{"home-hero-image":v(()=>[Hr]),_:1}))}},zr={extends:Oe,Layout:Er};export{zr as R,Or as V,Ur as a,Dr as b}; +import{d as m,o as a,c as l,r as c,n as w,a as D,t as L,b as k,w as v,e as f,T as ve,_ as b,u as Ue,i as ze,f as Ge,g as pe,h as $,j as I,k as q,l as d,m as i,p as C,q as H,s as j,v as le,x as G,y as X,z as he,A as ge,B as je,C as qe,D as K,F as M,E,G as ye,H as x,I as _,J as R,K as Pe,L as ee,M as Y,N as te,O as Ke,P as Ve,Q as We,R as Re,S as Le,U as se,V as Je,W as Se,X as Te,Y as Ye,Z as Ze,$ as Qe,a0 as Xe}from"./framework.vateGHBz.js";const xe=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),l("span",{class:w(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[D(L(e.text),1)])],2))}}),et={key:0,class:"VPBackdrop"},tt=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),k(ve,{name:"fade"},{default:v(()=>[e.show?(a(),l("div",et)):f("",!0)]),_:1}))}}),st=b(tt,[["__scopeId","data-v-c79a1216"]]),V=Ue;function ot(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ce(s){return/^\//.test(s)?s:`/${s}`}function fe(s){const{pathname:e,search:t,hash:o,protocol:n}=new URL(s,"http://a.com");if(ze(s)||s.startsWith("#")||!n.startsWith("http")||!Ge(e))return s;const{site:r}=V(),u=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${o}`);return pe(u)}function J({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:o,page:n,theme:r,hash:u}=V(),h=$(()=>{var P,g;return{index:o.value,label:(P=t.value.locales[o.value])==null?void 0:P.label,link:((g=t.value.locales[o.value])==null?void 0:g.link)||(o.value==="root"?"/":`/${o.value}/`)}});return{localeLinks:$(()=>Object.entries(t.value.locales).flatMap(([P,g])=>s&&h.value.label===g.label?[]:{index:P,text:g.label,link:nt(g.link||(P==="root"?"/":`/${P}/`),r.value.i18nRouting!==!1&&e,n.value.relativePath.slice(h.value.link.length-1),!t.value.cleanUrls)+u.value})),currentLang:h}}function nt(s,e,t,o){return e?s.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const at=s=>(C("data-v-4f08a194"),s=s(),H(),s),rt={class:"NotFound"},it={class:"code"},lt={class:"title"},ct=at(()=>d("div",{class:"divider"},null,-1)),ut={class:"quote"},dt={class:"action"},vt=["href","aria-label"],pt=m({__name:"NotFound",setup(s){const{site:e}=V(),{localeLinks:t}=J({removeCurrent:!1}),o=I({link:"/",index:"root"});q(()=>{const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");t.value.length&&(o.value=t.value.find(({link:u})=>u.startsWith(r))||t.value[0])});const n=$(()=>{var r,u,h,p;return{code:404,title:"PAGE NOT FOUND",quote:"But if you don't change your direction, and if you keep looking, you may end up where you are heading.",linkLabel:"go to home",linkText:"Take me home",...o.value.index==="root"?(r=e.value.themeConfig)==null?void 0:r.notFound:(p=(h=(u=e.value.locales)==null?void 0:u[o.value.index])==null?void 0:h.themeConfig)==null?void 0:p.notFound}});return(r,u)=>(a(),l("div",rt,[d("p",it,L(n.value.code),1),d("h1",lt,L(n.value.title),1),ct,d("blockquote",ut,L(n.value.quote),1),d("div",dt,[d("a",{class:"link",href:i(pe)(o.value.link),"aria-label":n.value.linkLabel},L(n.value.linkText),9,vt)])]))}}),ht=b(pt,[["__scopeId","data-v-4f08a194"]]);function we(s,e){if(Array.isArray(s))return Z(s);if(s==null)return[];e=ce(e);const t=Object.keys(s).sort((n,r)=>r.split("/").length-n.split("/").length).find(n=>e.startsWith(ce(n))),o=t?s[t]:[];return Array.isArray(o)?Z(o):Z(o.items,o.base)}function ft(s){const e=[];let t=0;for(const o in s){const n=s[o];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function mt(s){const e=[];function t(o){for(const n of o)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(s),e}function ue(s,e){return Array.isArray(e)?e.some(t=>ue(s,t)):j(s,e.link)?!0:e.items?ue(s,e.items):!1}function Z(s,e){return[...s].map(t=>{const o={...t},n=o.base||e;return n&&o.link&&(o.link=n+o.link),o.items&&(o.items=Z(o.items,n)),o})}function O(){const{frontmatter:s,page:e,theme:t}=V(),o=le("(min-width: 960px)"),n=I(!1),r=$(()=>{const B=t.value.sidebar,T=e.value.relativePath;return B?we(B,T):[]}),u=I(r.value);G(r,(B,T)=>{JSON.stringify(B)!==JSON.stringify(T)&&(u.value=r.value)});const h=$(()=>s.value.sidebar!==!1&&u.value.length>0&&s.value.layout!=="home"),p=$(()=>P?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),P=$(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),g=$(()=>h.value&&o.value),y=$(()=>h.value?ft(u.value):[]);function S(){n.value=!0}function N(){n.value=!1}function A(){n.value?N():S()}return{isOpen:n,sidebar:u,sidebarGroups:y,hasSidebar:h,hasAside:P,leftAside:p,isSidebarEnabled:g,open:S,close:N,toggle:A}}function _t(s,e){let t;X(()=>{t=s.value?document.activeElement:void 0}),q(()=>{window.addEventListener("keyup",o)}),he(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function bt(s){const{page:e,hash:t}=V(),o=I(!1),n=$(()=>s.value.collapsed!=null),r=$(()=>!!s.value.link),u=I(!1),h=()=>{u.value=j(e.value.relativePath,s.value.link)};G([e,s,t],h),q(h);const p=$(()=>u.value?!0:s.value.items?ue(e.value.relativePath,s.value.items):!1),P=$(()=>!!(s.value.items&&s.value.items.length));X(()=>{o.value=!!(n.value&&s.value.collapsed)}),ge(()=>{(u.value||p.value)&&(o.value=!1)});function g(){n.value&&(o.value=!o.value)}return{collapsed:o,collapsible:n,isLink:r,isActiveLink:u,hasActiveLink:p,hasChildren:P,toggle:g}}function kt(){const{hasSidebar:s}=O(),e=le("(min-width: 960px)"),t=le("(min-width: 1280px)");return{isAsideEnabled:$(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const de=[];function Ie(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function me(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:$t(t),link:"#"+t.id,level:o}});return gt(e,s)}function $t(s){let e="";for(const t of s.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(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(u=>u.level>=o&&u.level<=n),de.length=0;for(const{element:u,link:h}of s)de.push({element:u,link:h});const r=[];e:for(let u=0;u=0;p--){const P=s[p];if(P.level{requestAnimationFrame(r),window.addEventListener("scroll",o)}),je(()=>{u(location.hash)}),he(()=>{window.removeEventListener("scroll",o)});function r(){if(!t.value)return;const h=window.scrollY,p=window.innerHeight,P=document.body.offsetHeight,g=Math.abs(h+p-P)<1,y=de.map(({element:N,link:A})=>({link:A,top:Pt(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!y.length){u(null);return}if(h<1){u(null);return}if(g){u(y[y.length-1].link);return}let S=null;for(const{link:N,top:A}of y){if(A>h+qe()+4)break;S=N}u(S)}function u(h){n&&n.classList.remove("active"),h==null?n=null:n=s.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(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}const Vt=["href","title"],Lt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(s){function e({target:t}){const o=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(o));n==null||n.focus({preventScroll:!0})}return(t,o)=>{const n=K("VPDocOutlineItem",!0);return a(),l("ul",{class:w(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),l(M,null,E(t.headers,({children:r,link:u,title:h})=>(a(),l("li",null,[d("a",{class:"outline-link",href:u,onClick:e,title:h},L(h),9,Vt),r!=null&&r.length?(a(),k(n,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Me=b(Lt,[["__scopeId","data-v-b933a997"]]),St={class:"content"},Tt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},wt=m({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=V(),o=ye([]);x(()=>{o.value=me(e.value.outline??t.value.outline)});const n=I(),r=I();return yt(n,r),(u,h)=>(a(),l("nav",{"aria-labelledby":"doc-outline-aria-label",class:w(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n,role:"navigation"},[d("div",St,[d("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),d("div",Tt,L(i(Ie)(i(t))),1),_(Me,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),It=b(wt,[["__scopeId","data-v-269c27a6"]]),Mt={class:"VPDocAsideCarbonAds"},Nt=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,o)=>(a(),l("div",Mt,[_(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),At=s=>(C("data-v-3f215769"),s=s(),H(),s),Bt={class:"VPDocAside"},Ct=At(()=>d("div",{class:"spacer"},null,-1)),Ht=m({__name:"VPDocAside",setup(s){const{theme:e}=V();return(t,o)=>(a(),l("div",Bt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),_(It),c(t.$slots,"aside-outline-after",{},void 0,!0),Ct,c(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),k(Nt,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):f("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Et=b(Ht,[["__scopeId","data-v-3f215769"]]);function Ft(){const{theme:s,page:e}=V();return $(()=>{const{text:t="Edit this page",pattern:o=""}=s.value.editLink||{};let n;return typeof o=="function"?n=o(e.value):n=o.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Dt(){const{page:s,theme:e,frontmatter:t}=V();return $(()=>{var P,g,y,S,N,A,B,T;const o=we(e.value.sidebar,s.value.relativePath),n=mt(o),r=Ot(n,U=>U.link.replace(/[?#].*$/,"")),u=r.findIndex(U=>j(s.value.relativePath,U.link)),h=((P=e.value.docFooter)==null?void 0:P.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((g=e.value.docFooter)==null?void 0:g.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)??((y=r[u-1])==null?void 0:y.docFooterText)??((S=r[u-1])==null?void 0:S.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)??((T=r[u+1])==null?void 0:T.link)}}})}function Ot(s,e){const t=new Set;return s.filter(o=>{const n=e(o);return t.has(n)?!1:t.add(n)})}const F=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=$(()=>e.tag??(e.href?"a":"span")),o=$(()=>e.href&&Pe.test(e.href));return(n,r)=>(a(),k(R(t.value),{class:w(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?i(fe)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:v(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ut={class:"VPLastUpdated"},zt=["datetime"],Gt=m({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:o,lang:n}=V(),r=$(()=>new Date(o.value.lastUpdated??t.value.lastUpdated)),u=$(()=>r.value.toISOString()),h=I("");return q(()=>{X(()=>{var p,P,g;h.value=new Intl.DateTimeFormat((P=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&P.forceLocale?n.value:void 0,((g=e.value.lastUpdated)==null?void 0:g.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(p,P)=>{var g;return a(),l("p",Ut,[D(L(((g=i(e).lastUpdated)==null?void 0:g.text)||i(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:u.value},L(h.value),9,zt)])}}}),jt=b(Gt,[["__scopeId","data-v-7e05ebdb"]]),Ne=s=>(C("data-v-d4a0bba5"),s=s(),H(),s),qt={key:0,class:"VPDocFooter"},Kt={key:0,class:"edit-info"},Wt={key:0,class:"edit-link"},Rt=Ne(()=>d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Jt={key:1,class:"last-updated"},Yt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Zt=Ne(()=>d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),Qt={class:"pager"},Xt=["innerHTML"],xt=["innerHTML"],es={class:"pager"},ts=["innerHTML"],ss=["innerHTML"],os=m({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=V(),n=Ft(),r=Dt(),u=$(()=>e.value.editLink&&o.value.editLink!==!1),h=$(()=>t.value.lastUpdated&&o.value.lastUpdated!==!1),p=$(()=>u.value||h.value||r.value.prev||r.value.next);return(P,g)=>{var y,S,N,A;return p.value?(a(),l("footer",qt,[c(P.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),l("div",Kt,[u.value?(a(),l("div",Wt,[_(F,{class:"edit-link-button",href:i(n).url,"no-icon":!0},{default:v(()=>[Rt,D(" "+L(i(n).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),l("div",Jt,[_(jt)])):f("",!0)])):f("",!0),(y=i(r).prev)!=null&&y.link||(S=i(r).next)!=null&&S.link?(a(),l("nav",Yt,[Zt,d("div",Qt,[(N=i(r).prev)!=null&&N.link?(a(),k(F,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:v(()=>{var B;return[d("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,Xt),d("span",{class:"title",innerHTML:i(r).prev.text},null,8,xt)]}),_:1},8,["href"])):f("",!0)]),d("div",es,[(A=i(r).next)!=null&&A.link?(a(),k(F,{key:0,class:"pager-link next",href:i(r).next.link},{default:v(()=>{var B;return[d("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.next)||"Next page"},null,8,ts),d("span",{class:"title",innerHTML:i(r).next.text},null,8,ss)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),ns=b(os,[["__scopeId","data-v-d4a0bba5"]]),as=s=>(C("data-v-39a288b8"),s=s(),H(),s),rs={class:"container"},is=as(()=>d("div",{class:"aside-curtain"},null,-1)),ls={class:"aside-container"},cs={class:"aside-content"},us={class:"content"},ds={class:"content-container"},vs={class:"main"},ps=m({__name:"VPDoc",setup(s){const{theme:e}=V(),t=ee(),{hasSidebar:o,hasAside:n,leftAside:r}=O(),u=$(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,p)=>{const P=K("Content");return a(),l("div",{class:w(["VPDoc",{"has-sidebar":i(o),"has-aside":i(n)}])},[c(h.$slots,"doc-top",{},void 0,!0),d("div",rs,[i(n)?(a(),l("div",{key:0,class:w(["aside",{"left-aside":i(r)}])},[is,d("div",ls,[d("div",cs,[_(Et,null,{"aside-top":v(()=>[c(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[c(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[c(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),d("div",us,[d("div",ds,[c(h.$slots,"doc-before",{},void 0,!0),d("main",vs,[_(P,{class:w(["vp-doc",[u.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(ns,null,{"doc-footer-before":v(()=>[c(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(h.$slots,"doc-after",{},void 0,!0)])])]),c(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),hs=b(ps,[["__scopeId","data-v-39a288b8"]]),fs=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=$(()=>e.href&&Pe.test(e.href)),o=$(()=>e.tag||e.href?"a":"button");return(n,r)=>(a(),k(R(o.value),{class:w(["VPButton",[n.size,n.theme]]),href:n.href?i(fe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[D(L(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),ms=b(fs,[["__scopeId","data-v-cad61b99"]]),_s=["src","alt"],bs=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=K("VPImage",!0);return e.image?(a(),l(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),l("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(pe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,_s)):(a(),l(M,{key:1},[_(o,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),Q=b(bs,[["__scopeId","data-v-8426fc1a"]]),ks=s=>(C("data-v-303bb580"),s=s(),H(),s),$s={class:"container"},gs={class:"main"},ys={key:0,class:"name"},Ps=["innerHTML"],Vs=["innerHTML"],Ls=["innerHTML"],Ss={key:0,class:"actions"},Ts={key:0,class:"image"},ws={class:"image-container"},Is=ks(()=>d("div",{class:"image-bg"},null,-1)),Ms=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=te("hero-image-slot-exists");return(t,o)=>(a(),l("div",{class:w(["VPHero",{"has-image":t.image||i(e)}])},[d("div",$s,[d("div",gs,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),l("h1",ys,[d("span",{innerHTML:t.name,class:"clip"},null,8,Ps)])):f("",!0),t.text?(a(),l("p",{key:1,innerHTML:t.text,class:"text"},null,8,Vs)):f("",!0),t.tagline?(a(),l("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Ls)):f("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),l("div",Ss,[(a(!0),l(M,null,E(t.actions,n=>(a(),l("div",{key:n.link,class:"action"},[_(ms,{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),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),l("div",Ts,[d("div",ws,[Is,c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Ns=b(Ms,[["__scopeId","data-v-303bb580"]]),As=m({__name:"VPHomeHero",setup(s){const{frontmatter:e}=V();return(t,o)=>i(e).hero?(a(),k(Ns,{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":v(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Bs=s=>(C("data-v-a3976bdc"),s=s(),H(),s),Cs={class:"box"},Hs={key:0,class:"icon"},Es=["innerHTML"],Fs=["innerHTML"],Ds=["innerHTML"],Os={key:4,class:"link-text"},Us={class:"link-text-value"},zs=Bs(()=>d("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Gs=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),k(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[d("article",Cs,[typeof e.icon=="object"&&e.icon.wrap?(a(),l("div",Hs,[_(Q,{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(),k(Q,{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(),l("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Es)):f("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Fs),e.details?(a(),l("p",{key:3,class:"details",innerHTML:e.details},null,8,Ds)):f("",!0),e.linkText?(a(),l("div",Os,[d("p",Us,[D(L(e.linkText)+" ",1),zs])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),js=b(Gs,[["__scopeId","data-v-a3976bdc"]]),qs={key:0,class:"VPFeatures"},Ks={class:"container"},Ws={class:"items"},Rs=m({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=$(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,n)=>o.features?(a(),l("div",qs,[d("div",Ks,[d("div",Ws,[(a(!0),l(M,null,E(o.features,r=>(a(),l("div",{key:r.title,class:w(["item",[t.value]])},[_(js,{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)}}),Js=b(Rs,[["__scopeId","data-v-a6181336"]]),Ys=m({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=V();return(t,o)=>i(e).features?(a(),k(Js,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):f("",!0)}}),Zs=m({__name:"VPHomeContent",setup(s){const{width:e}=Ke({includeScrollbar:!1});return(t,o)=>(a(),l("div",{class:"vp-doc container",style:Ve(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Qs=b(Zs,[["__scopeId","data-v-82d4af08"]]),Xs={class:"VPHome"},xs=m({__name:"VPHome",setup(s){const{frontmatter:e}=V();return(t,o)=>{const n=K("Content");return a(),l("div",Xs,[c(t.$slots,"home-hero-before",{},void 0,!0),_(As,null,{"home-hero-info-before":v(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),_(Ys),c(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),k(Qs,{key:0},{default:v(()=>[_(n)]),_:1})):(a(),k(n,{key:1}))])}}}),eo=b(xs,[["__scopeId","data-v-686f80a6"]]),to={},so={class:"VPPage"};function oo(s,e){const t=K("Content");return a(),l("div",so,[c(s.$slots,"page-top"),_(t),c(s.$slots,"page-bottom")])}const no=b(to,[["render",oo]]),ao=m({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=V(),{hasSidebar:o}=O();return(n,r)=>(a(),l("div",{class:w(["VPContent",{"has-sidebar":i(o),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[_(ht)],!0):i(t).layout==="page"?(a(),k(no,{key:1},{"page-top":v(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),k(eo,{key:2},{"home-hero-before":v(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),k(R(i(t).layout),{key:3})):(a(),k(hs,{key:4},{"doc-top":v(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ro=b(ao,[["__scopeId","data-v-1428d186"]]),io={class:"container"},lo=["innerHTML"],co=["innerHTML"],uo=m({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=V(),{hasSidebar:o}=O();return(n,r)=>i(e).footer&&i(t).footer!==!1?(a(),l("footer",{key:0,class:w(["VPFooter",{"has-sidebar":i(o)}])},[d("div",io,[i(e).footer.message?(a(),l("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,lo)):f("",!0),i(e).footer.copyright?(a(),l("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,co)):f("",!0)])],2)):f("",!0)}}),vo=b(uo,[["__scopeId","data-v-e315a0ad"]]);function po(){const{theme:s,frontmatter:e}=V(),t=ye([]),o=$(()=>t.value.length>0);return x(()=>{t.value=me(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const ho=s=>(C("data-v-17a5e62e"),s=s(),H(),s),fo={class:"menu-text"},mo=ho(()=>d("span",{class:"vpi-chevron-right icon"},null,-1)),_o={class:"header"},bo={class:"outline"},ko=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=V(),o=I(!1),n=I(0),r=I(),u=I();function h(y){var S;(S=r.value)!=null&&S.contains(y.target)||(o.value=!1)}G(o,y=>{if(y){document.addEventListener("click",h);return}document.removeEventListener("click",h)}),We("Escape",()=>{o.value=!1}),x(()=>{o.value=!1});function p(){o.value=!o.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(()=>{o.value=!1}))}function g(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,S)=>(a(),l("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":n.value+"px"}),ref_key:"main",ref:r},[y.headers.length>0?(a(),l("button",{key:0,onClick:p,class:w({open:o.value})},[d("span",fo,L(i(Ie)(i(t))),1),mo],2)):(a(),l("button",{key:1,onClick:g},L(i(t).returnToTopLabel||"Return to top"),1)),_(ve,{name:"flyout"},{default:v(()=>[o.value?(a(),l("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:P},[d("div",_o,[d("a",{class:"top-link",href:"#",onClick:g},L(i(t).returnToTopLabel||"Return to top"),1)]),d("div",bo,[_(Me,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),$o=b(ko,[["__scopeId","data-v-17a5e62e"]]),go=s=>(C("data-v-a6f0e41e"),s=s(),H(),s),yo={class:"container"},Po=["aria-expanded"],Vo=go(()=>d("span",{class:"vpi-align-left menu-icon"},null,-1)),Lo={class:"menu-text"},So=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=V(),{hasSidebar:o}=O(),{headers:n}=po(),{y:r}=Le(),u=I(0);q(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=me(t.value.outline??e.value.outline)});const h=$(()=>n.value.length===0),p=$(()=>h.value&&!o.value),P=$(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:h.value,fixed:p.value}));return(g,y)=>i(t).layout!=="home"&&(!p.value||i(r)>=u.value)?(a(),l("div",{key:0,class:w(P.value)},[d("div",yo,[i(o)?(a(),l("button",{key:0,class:"menu","aria-expanded":g.open,"aria-controls":"VPSidebarNav",onClick:y[0]||(y[0]=S=>g.$emit("open-menu"))},[Vo,d("span",Lo,L(i(e).sidebarMenuLabel||"Menu"),1)],8,Po)):f("",!0),_($o,{headers:i(n),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),To=b(So,[["__scopeId","data-v-a6f0e41e"]]);function wo(){const s=I(!1);function e(){s.value=!0,window.addEventListener("resize",n)}function t(){s.value=!1,window.removeEventListener("resize",n)}function o(){s.value?t():e()}function n(){window.outerWidth>=768&&t()}const r=ee();return G(()=>r.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const Io={},Mo={class:"VPSwitch",type:"button",role:"switch"},No={class:"check"},Ao={key:0,class:"icon"};function Bo(s,e){return a(),l("button",Mo,[d("span",No,[s.$slots.default?(a(),l("span",Ao,[c(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Co=b(Io,[["render",Bo],["__scopeId","data-v-1d5665e3"]]),Ae=s=>(C("data-v-d1f28634"),s=s(),H(),s),Ho=Ae(()=>d("span",{class:"vpi-sun sun"},null,-1)),Eo=Ae(()=>d("span",{class:"vpi-moon moon"},null,-1)),Fo=m({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=V(),o=te("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(),k(Co,{title:n.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(o)},{default:v(()=>[Ho,Eo]),_:1},8,["title","aria-checked","onClick"]))}}),_e=b(Fo,[["__scopeId","data-v-d1f28634"]]),Do={key:0,class:"VPNavBarAppearance"},Oo=m({__name:"VPNavBarAppearance",setup(s){const{site:e}=V();return(t,o)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),l("div",Do,[_(_e)])):f("",!0)}}),Uo=b(Oo,[["__scopeId","data-v-e6aabb21"]]),be=I();let Be=!1,ie=0;function zo(s){const e=I(!1);if(se){!Be&&Go(),ie++;const t=G(be,o=>{var n,r,u;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(r=s.onFocus)==null||r.call(s)):(e.value=!1,(u=s.onBlur)==null||u.call(s))});he(()=>{t(),ie--,ie||jo()})}return Je(e)}function Go(){document.addEventListener("focusin",Ce),Be=!0,be.value=document.activeElement}function jo(){document.removeEventListener("focusin",Ce)}function Ce(){be.value=document.activeElement}const qo={class:"VPMenuLink"},Ko=m({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=V();return(t,o)=>(a(),l("div",qo,[_(F,{class:w({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:v(()=>[D(L(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),oe=b(Ko,[["__scopeId","data-v-43f1e123"]]),Wo={class:"VPMenuGroup"},Ro={key:0,class:"title"},Jo=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),l("div",Wo,[e.text?(a(),l("p",Ro,L(e.text),1)):f("",!0),(a(!0),l(M,null,E(e.items,o=>(a(),l(M,null,["link"in o?(a(),k(oe,{key:0,item:o},null,8,["item"])):f("",!0)],64))),256))]))}}),Yo=b(Jo,[["__scopeId","data-v-69e747b5"]]),Zo={class:"VPMenu"},Qo={key:0,class:"items"},Xo=m({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),l("div",Zo,[e.items?(a(),l("div",Qo,[(a(!0),l(M,null,E(e.items,o=>(a(),l(M,{key:o.text},["link"in o?(a(),k(oe,{key:0,item:o},null,8,["item"])):(a(),k(Yo,{key:1,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),xo=b(Xo,[["__scopeId","data-v-e7ea1737"]]),en=s=>(C("data-v-b6c34ac9"),s=s(),H(),s),tn=["aria-expanded","aria-label"],sn={key:0,class:"text"},on=["innerHTML"],nn=en(()=>d("span",{class:"vpi-chevron-down text-icon"},null,-1)),an={key:1,class:"vpi-more-horizontal icon"},rn={class:"menu"},ln=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=I(!1),t=I();zo({el:t,onBlur:o});function o(){e.value=!1}return(n,r)=>(a(),l("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)},[d("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(),l("span",sn,[n.icon?(a(),l("span",{key:0,class:w([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),l("span",{key:1,innerHTML:n.button},null,8,on)):f("",!0),nn])):(a(),l("span",an))],8,tn),d("div",rn,[_(xo,{items:n.items},{default:v(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ke=b(ln,[["__scopeId","data-v-b6c34ac9"]]),cn=["href","aria-label","innerHTML"],un=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=$(()=>typeof e.icon=="object"?e.icon.svg:``);return(o,n)=>(a(),l("a",{class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,cn))}}),dn=b(un,[["__scopeId","data-v-eee4e7cb"]]),vn={class:"VPSocialLinks"},pn=m({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),l("div",vn,[(a(!0),l(M,null,E(e.links,({link:o,icon:n,ariaLabel:r})=>(a(),k(dn,{key:o,icon:n,link:o,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),ne=b(pn,[["__scopeId","data-v-7bc22406"]]),hn={key:0,class:"group translations"},fn={class:"trans-title"},mn={key:1,class:"group"},_n={class:"item appearance"},bn={class:"label"},kn={class:"appearance-action"},$n={key:2,class:"group"},gn={class:"item social-links"},yn=m({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=V(),{localeLinks:o,currentLang:n}=J({correspondingLink:!0}),r=$(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>r.value?(a(),k(ke,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[i(o).length&&i(n).label?(a(),l("div",hn,[d("p",fn,L(i(n).label),1),(a(!0),l(M,null,E(i(o),p=>(a(),k(oe,{key:p.link,item:p},null,8,["item"]))),128))])):f("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(a(),l("div",mn,[d("div",_n,[d("p",bn,L(i(t).darkModeSwitchLabel||"Appearance"),1),d("div",kn,[_(_e)])])])):f("",!0),i(t).socialLinks?(a(),l("div",$n,[d("div",gn,[_(ne,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Pn=b(yn,[["__scopeId","data-v-d0bd9dde"]]),Vn=s=>(C("data-v-e5dd9c1c"),s=s(),H(),s),Ln=["aria-expanded"],Sn=Vn(()=>d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)),Tn=[Sn],wn=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),l("button",{type:"button",class:w(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},Tn,10,Ln))}}),In=b(wn,[["__scopeId","data-v-e5dd9c1c"]]),Mn=["innerHTML"],Nn=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=V();return(t,o)=>(a(),k(F,{class:w({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:v(()=>[d("span",{innerHTML:t.item.text},null,8,Mn)]),_:1},8,["class","href","noIcon","target","rel"]))}}),An=b(Nn,[["__scopeId","data-v-9c663999"]]),Bn=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=V(),o=r=>"link"in r?j(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(o),n=$(()=>o(e.item));return(r,u)=>(a(),k(ke,{class:w({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"]))}}),Cn=s=>(C("data-v-7f418b0f"),s=s(),H(),s),Hn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},En=Cn(()=>d("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Fn=m({__name:"VPNavBarMenu",setup(s){const{theme:e}=V();return(t,o)=>i(e).nav?(a(),l("nav",Hn,[En,(a(!0),l(M,null,E(i(e).nav,n=>(a(),l(M,{key:n.text},["link"in n?(a(),k(An,{key:0,item:n},null,8,["item"])):(a(),k(Bn,{key:1,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),Dn=b(Fn,[["__scopeId","data-v-7f418b0f"]]);function On(s){const{localeIndex:e,theme:t}=V();function o(n){var A,B,T;const r=n.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",p=h&&((T=(B=u.locales)==null?void 0:B[e.value])==null?void 0:T.translations)||null,P=h&&u.translations||null;let g=p,y=P,S=s;const N=r.pop();for(const U of r){let z=null;const W=S==null?void 0:S[U];W&&(z=S=W);const ae=y==null?void 0:y[U];ae&&(z=y=ae);const re=g==null?void 0:g[U];re&&(z=g=re),W||(S=z),ae||(y=z),re||(g=z)}return(g==null?void 0:g[N])??(y==null?void 0:y[N])??(S==null?void 0:S[N])??""}return o}const Un=["aria-label"],zn={class:"DocSearch-Button-Container"},Gn=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),jn={class:"DocSearch-Button-Placeholder"},qn=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1),$e=m({__name:"VPNavBarSearchButton",setup(s){const t=On({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),l("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[d("span",zn,[Gn,d("span",jn,L(i(t)("button.buttonText")),1)]),qn],8,Un))}}),Kn={class:"VPNavBarSearch"},Wn={id:"local-search"},Rn={key:1,id:"docsearch"},Jn=m({__name:"VPNavBarSearch",setup(s){const e=()=>null,t=()=>null,{theme:o}=V(),n=I(!1),r=I(!1);q(()=>{});function u(){n.value||(n.value=!0,setTimeout(h,16))}function h(){const g=new Event("keydown");g.key="k",g.metaKey=!0,window.dispatchEvent(g),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}const p=I(!1),P="";return(g,y)=>{var S;return a(),l("div",Kn,[i(P)==="local"?(a(),l(M,{key:0},[p.value?(a(),k(i(e),{key:0,onClose:y[0]||(y[0]=N=>p.value=!1)})):f("",!0),d("div",Wn,[_($e,{onClick:y[1]||(y[1]=N=>p.value=!0)})])],64)):i(P)==="algolia"?(a(),l(M,{key:1},[n.value?(a(),k(i(t),{key:0,algolia:((S=i(o).search)==null?void 0:S.options)??i(o).algolia,onVnodeBeforeMount:y[2]||(y[2]=N=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),l("div",Rn,[_($e,{onClick:u})]))],64)):f("",!0)])}}}),Yn=m({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=V();return(t,o)=>i(e).socialLinks?(a(),k(ne,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Zn=b(Yn,[["__scopeId","data-v-0394ad82"]]),Qn=["href","rel","target"],Xn={key:1},xn={key:2},ea=m({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=V(),{hasSidebar:o}=O(),{currentLang:n}=J(),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,P)=>(a(),l("div",{class:w(["VPNavBarTitle",{"has-sidebar":i(o)}])},[d("a",{class:"title",href:r.value??i(fe)(i(n).link),rel:u.value,target:h.value},[c(p.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),k(Q,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):f("",!0),i(t).siteTitle?(a(),l("span",Xn,L(i(t).siteTitle),1)):i(t).siteTitle===void 0?(a(),l("span",xn,L(i(e).title),1)):f("",!0),c(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,Qn)],2))}}),ta=b(ea,[["__scopeId","data-v-ab179fa1"]]),sa={class:"items"},oa={class:"title"},na=m({__name:"VPNavBarTranslations",setup(s){const{theme:e}=V(),{localeLinks:t,currentLang:o}=J({correspondingLink:!0});return(n,r)=>i(t).length&&i(o).label?(a(),k(ke,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:v(()=>[d("div",sa,[d("p",oa,L(i(o).label),1),(a(!0),l(M,null,E(i(t),u=>(a(),k(oe,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),aa=b(na,[["__scopeId","data-v-88af2de4"]]),ra=s=>(C("data-v-ccf7ddec"),s=s(),H(),s),ia={class:"wrapper"},la={class:"container"},ca={class:"title"},ua={class:"content"},da={class:"content-body"},va=ra(()=>d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1)),pa=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=Le(),{hasSidebar:t}=O(),{frontmatter:o}=V(),n=I({});return ge(()=>{n.value={"has-sidebar":t.value,home:o.value.layout==="home",top:e.value===0}}),(r,u)=>(a(),l("div",{class:w(["VPNavBar",n.value])},[d("div",ia,[d("div",la,[d("div",ca,[_(ta,null,{"nav-bar-title-before":v(()=>[c(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",ua,[d("div",da,[c(r.$slots,"nav-bar-content-before",{},void 0,!0),_(Jn,{class:"search"}),_(Dn,{class:"menu"}),_(aa,{class:"translations"}),_(Uo,{class:"appearance"}),_(Zn,{class:"social-links"}),_(Pn,{class:"extra"}),c(r.$slots,"nav-bar-content-after",{},void 0,!0),_(In,{class:"hamburger",active:r.isScreenOpen,onClick:u[0]||(u[0]=h=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),va],2))}}),ha=b(pa,[["__scopeId","data-v-ccf7ddec"]]),fa={key:0,class:"VPNavScreenAppearance"},ma={class:"text"},_a=m({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=V();return(o,n)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),l("div",fa,[d("p",ma,L(i(t).darkModeSwitchLabel||"Appearance"),1),_(_e)])):f("",!0)}}),ba=b(_a,[["__scopeId","data-v-2d7af913"]]),ka=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=te("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),$a=b(ka,[["__scopeId","data-v-7f31e1f6"]]),ga=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=te("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:v(()=>[D(L(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),He=b(ga,[["__scopeId","data-v-19976ae1"]]),ya={class:"VPNavScreenMenuGroupSection"},Pa={key:0,class:"title"},Va=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),l("div",ya,[e.text?(a(),l("p",Pa,L(e.text),1)):f("",!0),(a(!0),l(M,null,E(e.items,o=>(a(),k(He,{key:o.text,item:o},null,8,["item"]))),128))]))}}),La=b(Va,[["__scopeId","data-v-8133b170"]]),Sa=s=>(C("data-v-ff6087d4"),s=s(),H(),s),Ta=["aria-controls","aria-expanded"],wa=["innerHTML"],Ia=Sa(()=>d("span",{class:"vpi-plus button-icon"},null,-1)),Ma=["id"],Na={key:1,class:"group"},Aa=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=I(!1),o=$(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(r,u)=>(a(),l("div",{class:w(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[d("span",{class:"button-text",innerHTML:r.text},null,8,wa),Ia],8,Ta),d("div",{id:o.value,class:"items"},[(a(!0),l(M,null,E(r.items,h=>(a(),l(M,{key:h.text},["link"in h?(a(),l("div",{key:h.text,class:"item"},[_(He,{item:h},null,8,["item"])])):(a(),l("div",Na,[_(La,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Ma)],2))}}),Ba=b(Aa,[["__scopeId","data-v-ff6087d4"]]),Ca={key:0,class:"VPNavScreenMenu"},Ha=m({__name:"VPNavScreenMenu",setup(s){const{theme:e}=V();return(t,o)=>i(e).nav?(a(),l("nav",Ca,[(a(!0),l(M,null,E(i(e).nav,n=>(a(),l(M,{key:n.text},["link"in n?(a(),k($a,{key:0,item:n},null,8,["item"])):(a(),k(Ba,{key:1,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Ea=m({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=V();return(t,o)=>i(e).socialLinks?(a(),k(ne,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Ee=s=>(C("data-v-858fe1a4"),s=s(),H(),s),Fa=Ee(()=>d("span",{class:"vpi-languages icon lang"},null,-1)),Da=Ee(()=>d("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Oa={class:"list"},Ua=m({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=J({correspondingLink:!0}),o=I(!1);function n(){o.value=!o.value}return(r,u)=>i(e).length&&i(t).label?(a(),l("div",{key:0,class:w(["VPNavScreenTranslations",{open:o.value}])},[d("button",{class:"title",onClick:n},[Fa,D(" "+L(i(t).label)+" ",1),Da]),d("ul",Oa,[(a(!0),l(M,null,E(i(e),h=>(a(),l("li",{key:h.link,class:"item"},[_(F,{class:"link",href:h.link},{default:v(()=>[D(L(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),za=b(Ua,[["__scopeId","data-v-858fe1a4"]]),Ga={class:"container"},ja=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=I(null),t=Se(se?document.body:null);return(o,n)=>(a(),k(ve,{name:"fade",onEnter:n[0]||(n[0]=r=>t.value=!0),onAfterLeave:n[1]||(n[1]=r=>t.value=!1)},{default:v(()=>[o.open?(a(),l("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",Ga,[c(o.$slots,"nav-screen-content-before",{},void 0,!0),_(Ha,{class:"menu"}),_(za,{class:"translations"}),_(ba,{class:"appearance"}),_(Ea,{class:"social-links"}),c(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),qa=b(ja,[["__scopeId","data-v-cc5739dd"]]),Ka={key:0,class:"VPNav"},Wa=m({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=wo(),{frontmatter:n}=V(),r=$(()=>n.value.navbar!==!1);return Te("close-screen",t),X(()=>{se&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(u,h)=>r.value?(a(),l("header",Ka,[_(ha,{"is-screen-open":i(e),onToggleScreen:i(o)},{"nav-bar-title-before":v(()=>[c(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[c(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[c(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(qa,{open:i(e)},{"nav-screen-content-before":v(()=>[c(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[c(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Ra=b(Wa,[["__scopeId","data-v-ae24b3ad"]]),Fe=s=>(C("data-v-b8d55f3b"),s=s(),H(),s),Ja=["role","tabindex"],Ya=Fe(()=>d("div",{class:"indicator"},null,-1)),Za=Fe(()=>d("span",{class:"vpi-chevron-right caret-icon"},null,-1)),Qa=[Za],Xa={key:1,class:"items"},xa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:r,hasActiveLink:u,hasChildren:h,toggle:p}=bt($(()=>e.item)),P=$(()=>h.value?"section":"div"),g=$(()=>n.value?"a":"div"),y=$(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),S=$(()=>n.value?void 0:"button"),N=$(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":r.value},{"has-active":u.value}]);function A(T){"key"in T&&T.key!=="Enter"||!e.item.link&&p()}function B(){e.item.link&&p()}return(T,U)=>{const z=K("VPSidebarItem",!0);return a(),k(R(P.value),{class:w(["VPSidebarItem",N.value])},{default:v(()=>[T.item.text?(a(),l("div",Y({key:0,class:"item",role:S.value},Ye(T.item.items?{click:A,keydown:A}:{},!0),{tabindex:T.item.items&&0}),[Ya,T.item.link?(a(),k(F,{key:0,tag:g.value,class:"link",href:T.item.link,rel:T.item.rel,target:T.item.target},{default:v(()=>[(a(),k(R(y.value),{class:"text",innerHTML:T.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(R(y.value),{key:1,class:"text",innerHTML:T.item.text},null,8,["innerHTML"])),T.item.collapsed!=null&&T.item.items&&T.item.items.length?(a(),l("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:Ze(B,["enter"]),tabindex:"0"},Qa,32)):f("",!0)],16,Ja)):f("",!0),T.item.items&&T.item.items.length?(a(),l("div",Xa,[T.depth<5?(a(!0),l(M,{key:0},E(T.item.items,W=>(a(),k(z,{key:W.text,item:W,depth:T.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),er=b(xa,[["__scopeId","data-v-b8d55f3b"]]),De=s=>(C("data-v-575e6a36"),s=s(),H(),s),tr=De(()=>d("div",{class:"curtain"},null,-1)),sr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},or=De(()=>d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),nr=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=O(),o=s,n=I(null),r=Se(se?document.body:null);return G([o,n],()=>{var u;o.open?(r.value=!0,(u=n.value)==null||u.focus()):r.value=!1},{immediate:!0,flush:"post"}),(u,h)=>i(t)?(a(),l("aside",{key:0,class:w(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:n,onClick:h[0]||(h[0]=Qe(()=>{},["stop"]))},[tr,d("nav",sr,[or,c(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),l(M,null,E(i(e),p=>(a(),l("div",{key:p.text,class:"group"},[_(er,{item:p,depth:0},null,8,["item"])]))),128)),c(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),ar=b(nr,[["__scopeId","data-v-575e6a36"]]),rr=m({__name:"VPSkipLink",setup(s){const e=ee(),t=I();G(()=>e.path,()=>t.value.focus());function o({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(),l(M,null,[d("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o}," Skip to content ")],64))}}),ir=b(rr,[["__scopeId","data-v-0f60ec36"]]),lr=m({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=O(),n=ee();G(()=>n.path,o),_t(e,o);const{frontmatter:r}=V(),u=Xe(),h=$(()=>!!u["home-hero-image"]);return Te("hero-image-slot-exists",h),(p,P)=>{const g=K("Content");return i(r).layout!==!1?(a(),l("div",{key:0,class:w(["Layout",i(r).pageClass])},[c(p.$slots,"layout-top",{},void 0,!0),_(ir),_(st,{class:"backdrop",show:i(e),onClick:i(o)},null,8,["show","onClick"]),_(Ra,null,{"nav-bar-title-before":v(()=>[c(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[c(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[c(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[c(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[c(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(To,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),_(ar,{open:i(e)},{"sidebar-nav-before":v(()=>[c(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[c(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(ro,null,{"page-top":v(()=>[c(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[c(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[c(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[c(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[c(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[c(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[c(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[c(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[c(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[c(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[c(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[c(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[c(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(vo),c(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(g,{key:1}))}}}),cr=b(lr,[["__scopeId","data-v-5d98c3a5"]]),ur={},dr={class:"VPTeamPage"};function vr(s,e){return a(),l("div",dr,[c(s.$slots,"default")])}const Dr=b(ur,[["render",vr],["__scopeId","data-v-7c57f839"]]),pr={},hr={class:"VPTeamPageTitle"},fr={key:0,class:"title"},mr={key:1,class:"lead"};function _r(s,e){return a(),l("div",hr,[s.$slots.title?(a(),l("h1",fr,[c(s.$slots,"title",{},void 0,!0)])):f("",!0),s.$slots.lead?(a(),l("p",mr,[c(s.$slots,"lead",{},void 0,!0)])):f("",!0)])}const Or=b(pr,[["render",_r],["__scopeId","data-v-bf2cbdac"]]),br=s=>(C("data-v-f3fa364a"),s=s(),H(),s),kr={class:"profile"},$r={class:"avatar"},gr=["src","alt"],yr={class:"data"},Pr={class:"name"},Vr={key:0,class:"affiliation"},Lr={key:0,class:"title"},Sr={key:1,class:"at"},Tr=["innerHTML"],wr={key:2,class:"links"},Ir={key:0,class:"sp"},Mr=br(()=>d("span",{class:"vpi-heart sp-icon"},null,-1)),Nr=m({__name:"VPTeamMembersItem",props:{size:{default:"medium"},member:{}},setup(s){return(e,t)=>(a(),l("article",{class:w(["VPTeamMembersItem",[e.size]])},[d("div",kr,[d("figure",$r,[d("img",{class:"avatar-img",src:e.member.avatar,alt:e.member.name},null,8,gr)]),d("div",yr,[d("h1",Pr,L(e.member.name),1),e.member.title||e.member.org?(a(),l("p",Vr,[e.member.title?(a(),l("span",Lr,L(e.member.title),1)):f("",!0),e.member.title&&e.member.org?(a(),l("span",Sr," @ ")):f("",!0),e.member.org?(a(),k(F,{key:2,class:w(["org",{link:e.member.orgLink}]),href:e.member.orgLink,"no-icon":""},{default:v(()=>[D(L(e.member.org),1)]),_:1},8,["class","href"])):f("",!0)])):f("",!0),e.member.desc?(a(),l("p",{key:1,class:"desc",innerHTML:e.member.desc},null,8,Tr)):f("",!0),e.member.links?(a(),l("div",wr,[_(ne,{links:e.member.links},null,8,["links"])])):f("",!0)])]),e.member.sponsor?(a(),l("div",Ir,[_(F,{class:"sp-link",href:e.member.sponsor,"no-icon":""},{default:v(()=>[Mr,D(" "+L(e.member.actionText||"Sponsor"),1)]),_:1},8,["href"])])):f("",!0)],2))}}),Ar=b(Nr,[["__scopeId","data-v-f3fa364a"]]),Br={class:"container"},Cr=m({__name:"VPTeamMembers",props:{size:{default:"medium"},members:{}},setup(s){const e=s,t=$(()=>[e.size,`count-${e.members.length}`]);return(o,n)=>(a(),l("div",{class:w(["VPTeamMembers",t.value])},[d("div",Br,[(a(!0),l(M,null,E(o.members,r=>(a(),l("div",{key:r.name,class:"item"},[_(Ar,{size:o.size,member:r},null,8,["size","member"])]))),128))])],2))}}),Ur=b(Cr,[["__scopeId","data-v-6cb0dbc4"]]),Oe={Layout:cr,enhanceApp:({app:s})=>{s.component("Badge",xe)}},Hr=d("iframe",{style:{"z-index":"100"},width:"500",height:"315",src:"https://www.youtube.com/embed/6w-ZbD8wJZM?si=chkr-Pm_ydTErArx",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",referrerpolicy:"strict-origin-when-cross-origin",allowfullscreen:""},null,-1),Er={__name:"MyLayout",setup(s){return(e,t)=>(a(),k(i(Oe).Layout,null,{"home-hero-image":v(()=>[Hr]),_:1}))}},zr={extends:Oe,Layout:Er};export{zr as R,Or as V,Ur as a,Dr as b}; diff --git a/docs/.vitepress/dist/assets/cine-fox.md.nJ8sU_qJ.js b/docs/.vitepress/dist/assets/cine-fox.md.fZRod5tq.js similarity index 97% rename from docs/.vitepress/dist/assets/cine-fox.md.nJ8sU_qJ.js rename to docs/.vitepress/dist/assets/cine-fox.md.fZRod5tq.js index aa15f87..d7c75d8 100644 --- a/docs/.vitepress/dist/assets/cine-fox.md.nJ8sU_qJ.js +++ b/docs/.vitepress/dist/assets/cine-fox.md.fZRod5tq.js @@ -1 +1 @@ -import{_ as e,c as a,o,a1 as t,a6 as i,a7 as n}from"./chunks/framework.aklsSwTA.js";const b=JSON.parse('{"title":"What is Cine Fox?","description":"","frontmatter":{},"headers":[],"relativePath":"cine-fox.md","filePath":"cine-fox.md","lastUpdated":1719808092000}'),r={name:"cine-fox.md"},s=t('

What is Cine Fox?

Introduction of Cine Fox.

Overview

Cine Fox is an application built on cinepi-sdk, which allows users to make DIY movie cameras faster. Users only need a few cables to make them easy to use. The operation method mainly relies on your mobile phone.

Picture

Picture2

WARNING

So far, Cine Fox only supports Pi5

Functions

  • Change ISO, FPS, SHUTTER, WB, Zoom from phone
  • Start/Stop record from phone
  • Get Pi's CPU detail from phone
  • Get Image Sensor detail from phone
  • Get SSD detail from phone
  • Edit file's name from phone
  • Delete files from phone
  • coming...

Thanks

Csaba Nagy The CinePI Author.

Will Whang The CFE Hat and Multiple high-quality sensor authors

I would like to thank them for their patience in answering my questions. Without them, I would not be able to produce Cine Fox today.

',13),l=[s];function h(c,p,d,m,u,f){return o(),a("div",null,l)}const x=e(r,[["render",h]]);export{b as __pageData,x as default}; +import{_ as e,c as a,o,a1 as t,a6 as i,a7 as n}from"./chunks/framework.vateGHBz.js";const b=JSON.parse('{"title":"What is Cine Fox?","description":"","frontmatter":{},"headers":[],"relativePath":"cine-fox.md","filePath":"cine-fox.md","lastUpdated":1719808092000}'),r={name:"cine-fox.md"},s=t('

What is Cine Fox?

Introduction of Cine Fox.

Overview

Cine Fox is an application built on cinepi-sdk, which allows users to make DIY movie cameras faster. Users only need a few cables to make them easy to use. The operation method mainly relies on your mobile phone.

Picture

Picture2

WARNING

So far, Cine Fox only supports Pi5

Functions

  • Change ISO, FPS, SHUTTER, WB, Zoom from phone
  • Start/Stop record from phone
  • Get Pi's CPU detail from phone
  • Get Image Sensor detail from phone
  • Get SSD detail from phone
  • Edit file's name from phone
  • Delete files from phone
  • coming...

Thanks

Csaba Nagy The CinePI Author.

Will Whang The CFE Hat and Multiple high-quality sensor authors

I would like to thank them for their patience in answering my questions. Without them, I would not be able to produce Cine Fox today.

',13),l=[s];function h(c,p,d,m,u,f){return o(),a("div",null,l)}const x=e(r,[["render",h]]);export{b as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/cine-fox.md.nJ8sU_qJ.lean.js b/docs/.vitepress/dist/assets/cine-fox.md.fZRod5tq.lean.js similarity index 84% rename from docs/.vitepress/dist/assets/cine-fox.md.nJ8sU_qJ.lean.js rename to docs/.vitepress/dist/assets/cine-fox.md.fZRod5tq.lean.js index 47a106f..8b22994 100644 --- a/docs/.vitepress/dist/assets/cine-fox.md.nJ8sU_qJ.lean.js +++ b/docs/.vitepress/dist/assets/cine-fox.md.fZRod5tq.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o,a1 as t,a6 as i,a7 as n}from"./chunks/framework.aklsSwTA.js";const b=JSON.parse('{"title":"What is Cine Fox?","description":"","frontmatter":{},"headers":[],"relativePath":"cine-fox.md","filePath":"cine-fox.md","lastUpdated":1719808092000}'),r={name:"cine-fox.md"},s=t("",13),l=[s];function h(c,p,d,m,u,f){return o(),a("div",null,l)}const x=e(r,[["render",h]]);export{b as __pageData,x as default}; +import{_ as e,c as a,o,a1 as t,a6 as i,a7 as n}from"./chunks/framework.vateGHBz.js";const b=JSON.parse('{"title":"What is Cine Fox?","description":"","frontmatter":{},"headers":[],"relativePath":"cine-fox.md","filePath":"cine-fox.md","lastUpdated":1719808092000}'),r={name:"cine-fox.md"},s=t("",13),l=[s];function h(c,p,d,m,u,f){return o(),a("div",null,l)}const x=e(r,[["render",h]]);export{b as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/external_ssd.md.D1McLtz0.js b/docs/.vitepress/dist/assets/external_ssd.md.D3CIzlNa.js similarity index 98% rename from docs/.vitepress/dist/assets/external_ssd.md.D1McLtz0.js rename to docs/.vitepress/dist/assets/external_ssd.md.D3CIzlNa.js index 83b928c..82e41cf 100644 --- a/docs/.vitepress/dist/assets/external_ssd.md.D1McLtz0.js +++ b/docs/.vitepress/dist/assets/external_ssd.md.D3CIzlNa.js @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as e,a1 as i,a8 as t}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse('{"title":"External SSD","description":"","frontmatter":{},"headers":[],"relativePath":"external_ssd.md","filePath":"external_ssd.md","lastUpdated":1719830008000}'),n={name:"external_ssd.md"},l=i('

External SSD

Use External SSD with USB 3.0 in Pi5

Overview

ssd

External SSD is also a common storage way, like Samsung T5, T7. It can be easily removed and plugged into a computer to edit your files. However, after Csaba Nagy test, the read and write speed of USB3.0 is limited on Pi5. Here are his original words in Discord:

In general I would recommend the CFE HAT if you want to do above 30p or the 16-bit mode ( which is limited to 25p ) as those can easily exceed 400MB/s +

Therefore, if it is not used for high FPS and high-quality shooting, then External SSD can meet the requirements. Otherwise, RPI5-CFE-Hat is still recommended.

I used to use this way, but I stopped using it after I switched Raspberry Pi High Quality Camera to StarlightEyes.

Usage

  1. Flash image, you can do this step first.
  2. Run command
shell
git clone https://github.com/cinepi/udev-media-automount.git
+import{_ as s,c as a,o as e,a1 as i,a8 as t}from"./chunks/framework.vateGHBz.js";const m=JSON.parse('{"title":"External SSD","description":"","frontmatter":{},"headers":[],"relativePath":"external_ssd.md","filePath":"external_ssd.md","lastUpdated":1719830008000}'),n={name:"external_ssd.md"},l=i('

External SSD

Use External SSD with USB 3.0 in Pi5

Overview

ssd

External SSD is also a common storage way, like Samsung T5, T7. It can be easily removed and plugged into a computer to edit your files. However, after Csaba Nagy test, the read and write speed of USB3.0 is limited on Pi5. Here are his original words in Discord:

In general I would recommend the CFE HAT if you want to do above 30p or the 16-bit mode ( which is limited to 25p ) as those can easily exceed 400MB/s +

Therefore, if it is not used for high FPS and high-quality shooting, then External SSD can meet the requirements. Otherwise, RPI5-CFE-Hat is still recommended.

I used to use this way, but I stopped using it after I switched Raspberry Pi High Quality Camera to StarlightEyes.

Usage

  1. Flash image, you can do this step first.
  2. Run command
shell
git clone https://github.com/cinepi/udev-media-automount.git
 cd udev-media-automount
 sudo make install
 sudo udevadm control --reload-rules
diff --git a/docs/.vitepress/dist/assets/external_ssd.md.D1McLtz0.lean.js b/docs/.vitepress/dist/assets/external_ssd.md.D3CIzlNa.lean.js
similarity index 84%
rename from docs/.vitepress/dist/assets/external_ssd.md.D1McLtz0.lean.js
rename to docs/.vitepress/dist/assets/external_ssd.md.D3CIzlNa.lean.js
index c462e8c..fb3ac7f 100644
--- a/docs/.vitepress/dist/assets/external_ssd.md.D1McLtz0.lean.js
+++ b/docs/.vitepress/dist/assets/external_ssd.md.D3CIzlNa.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as e,a1 as i,a8 as t}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse('{"title":"External SSD","description":"","frontmatter":{},"headers":[],"relativePath":"external_ssd.md","filePath":"external_ssd.md","lastUpdated":1719830008000}'),n={name:"external_ssd.md"},l=i("",12),r=[l];function h(o,d,p,c,k,u){return e(),a("div",null,r)}const F=s(n,[["render",h]]);export{m as __pageData,F as default};
+import{_ as s,c as a,o as e,a1 as i,a8 as t}from"./chunks/framework.vateGHBz.js";const m=JSON.parse('{"title":"External SSD","description":"","frontmatter":{},"headers":[],"relativePath":"external_ssd.md","filePath":"external_ssd.md","lastUpdated":1719830008000}'),n={name:"external_ssd.md"},l=i("",12),r=[l];function h(o,d,p,c,k,u){return e(),a("div",null,r)}const F=s(n,[["render",h]]);export{m as __pageData,F as default};
diff --git a/docs/.vitepress/dist/assets/hardware.md.CnW1tD-I.js b/docs/.vitepress/dist/assets/hardware.md.B5dfh4fn.js
similarity index 93%
rename from docs/.vitepress/dist/assets/hardware.md.CnW1tD-I.js
rename to docs/.vitepress/dist/assets/hardware.md.B5dfh4fn.js
index de262ee..da67072 100644
--- a/docs/.vitepress/dist/assets/hardware.md.CnW1tD-I.js
+++ b/docs/.vitepress/dist/assets/hardware.md.B5dfh4fn.js
@@ -1 +1 @@
-import{_ as a,c as e,o as r,a1 as t,a9 as i}from"./chunks/framework.aklsSwTA.js";const f=JSON.parse('{"title":"Hardware","description":"","frontmatter":{},"headers":[],"relativePath":"hardware.md","filePath":"hardware.md","lastUpdated":1719905459000}'),o={name:"hardware.md"},s=t('

Hardware

The hardware which Cine-Fox needs.

Picture2

Require

',5),h=[s];function l(d,n,_,c,m,p){return r(),e("div",null,h)}const w=a(o,[["render",l]]);export{f as __pageData,w as default}; +import{_ as a,c as e,o as r,a1 as t,a9 as i}from"./chunks/framework.vateGHBz.js";const f=JSON.parse('{"title":"Hardware","description":"","frontmatter":{},"headers":[],"relativePath":"hardware.md","filePath":"hardware.md","lastUpdated":1719905459000}'),o={name:"hardware.md"},s=t('

Hardware

The hardware which Cine-Fox needs.

Picture2

Require

',5),h=[s];function l(d,n,_,c,m,p){return r(),e("div",null,h)}const w=a(o,[["render",l]]);export{f as __pageData,w as default}; diff --git a/docs/.vitepress/dist/assets/hardware.md.CnW1tD-I.lean.js b/docs/.vitepress/dist/assets/hardware.md.B5dfh4fn.lean.js similarity index 84% rename from docs/.vitepress/dist/assets/hardware.md.CnW1tD-I.lean.js rename to docs/.vitepress/dist/assets/hardware.md.B5dfh4fn.lean.js index 27d6462..b5a31e6 100644 --- a/docs/.vitepress/dist/assets/hardware.md.CnW1tD-I.lean.js +++ b/docs/.vitepress/dist/assets/hardware.md.B5dfh4fn.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as r,a1 as t,a9 as i}from"./chunks/framework.aklsSwTA.js";const f=JSON.parse('{"title":"Hardware","description":"","frontmatter":{},"headers":[],"relativePath":"hardware.md","filePath":"hardware.md","lastUpdated":1719905459000}'),o={name:"hardware.md"},s=t("",5),h=[s];function l(d,n,_,c,m,p){return r(),e("div",null,h)}const w=a(o,[["render",l]]);export{f as __pageData,w as default}; +import{_ as a,c as e,o as r,a1 as t,a9 as i}from"./chunks/framework.vateGHBz.js";const f=JSON.parse('{"title":"Hardware","description":"","frontmatter":{},"headers":[],"relativePath":"hardware.md","filePath":"hardware.md","lastUpdated":1719905459000}'),o={name:"hardware.md"},s=t("",5),h=[s];function l(d,n,_,c,m,p){return r(),e("div",null,h)}const w=a(o,[["render",l]]);export{f as __pageData,w as default}; diff --git a/docs/.vitepress/dist/assets/hq_camera.md.DUWRV-vk.js b/docs/.vitepress/dist/assets/hq_camera.md.D-IwqXFN.js similarity index 96% rename from docs/.vitepress/dist/assets/hq_camera.md.DUWRV-vk.js rename to docs/.vitepress/dist/assets/hq_camera.md.D-IwqXFN.js index 4aa40f8..041bcf5 100644 --- a/docs/.vitepress/dist/assets/hq_camera.md.DUWRV-vk.js +++ b/docs/.vitepress/dist/assets/hq_camera.md.D-IwqXFN.js @@ -1 +1 @@ -import{_ as a,c as e,o as r,a1 as t,aa as i}from"./chunks/framework.aklsSwTA.js";const b=JSON.parse('{"title":"Raspberry Pi High Quality Camera","description":"","frontmatter":{},"headers":[],"relativePath":"hq_camera.md","filePath":"hq_camera.md","lastUpdated":1719902642000}'),s={name:"hq_camera.md"},o=t('

Raspberry Pi High Quality Camera

12.3 megapixel Sony IMX477 sensor, 7.9mm diagonal image size, and back-illuminated sensor architecture, with adjustable back focus.

Overview

hq

Raspberry Pi High Quality Camera is the highest resolution camera in the Raspberry Pi Foundation. I used it before, but I stopped using it after I used the better StarlightEye.

Usage

Just connect the cable, the driver is already on pi5.

Wiki

Official Wiki

',9),h=[o];function c(l,n,p,d,m,u){return r(),e("div",null,h)}const f=a(s,[["render",c]]);export{b as __pageData,f as default}; +import{_ as a,c as e,o as r,a1 as t,aa as i}from"./chunks/framework.vateGHBz.js";const b=JSON.parse('{"title":"Raspberry Pi High Quality Camera","description":"","frontmatter":{},"headers":[],"relativePath":"hq_camera.md","filePath":"hq_camera.md","lastUpdated":1719902642000}'),s={name:"hq_camera.md"},o=t('

Raspberry Pi High Quality Camera

12.3 megapixel Sony IMX477 sensor, 7.9mm diagonal image size, and back-illuminated sensor architecture, with adjustable back focus.

Overview

hq

Raspberry Pi High Quality Camera is the highest resolution camera in the Raspberry Pi Foundation. I used it before, but I stopped using it after I used the better StarlightEye.

Usage

Just connect the cable, the driver is already on pi5.

Wiki

Official Wiki

',9),h=[o];function c(l,n,p,d,m,u){return r(),e("div",null,h)}const f=a(s,[["render",c]]);export{b as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/hq_camera.md.DUWRV-vk.lean.js b/docs/.vitepress/dist/assets/hq_camera.md.D-IwqXFN.lean.js similarity index 85% rename from docs/.vitepress/dist/assets/hq_camera.md.DUWRV-vk.lean.js rename to docs/.vitepress/dist/assets/hq_camera.md.D-IwqXFN.lean.js index 70178a6..de034b5 100644 --- a/docs/.vitepress/dist/assets/hq_camera.md.DUWRV-vk.lean.js +++ b/docs/.vitepress/dist/assets/hq_camera.md.D-IwqXFN.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as r,a1 as t,aa as i}from"./chunks/framework.aklsSwTA.js";const b=JSON.parse('{"title":"Raspberry Pi High Quality Camera","description":"","frontmatter":{},"headers":[],"relativePath":"hq_camera.md","filePath":"hq_camera.md","lastUpdated":1719902642000}'),s={name:"hq_camera.md"},o=t("",9),h=[o];function c(l,n,p,d,m,u){return r(),e("div",null,h)}const f=a(s,[["render",c]]);export{b as __pageData,f as default}; +import{_ as a,c as e,o as r,a1 as t,aa as i}from"./chunks/framework.vateGHBz.js";const b=JSON.parse('{"title":"Raspberry Pi High Quality Camera","description":"","frontmatter":{},"headers":[],"relativePath":"hq_camera.md","filePath":"hq_camera.md","lastUpdated":1719902642000}'),s={name:"hq_camera.md"},o=t("",9),h=[o];function c(l,n,p,d,m,u){return r(),e("div",null,h)}const f=a(s,[["render",c]]);export{b as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/image_sensor.md.DgDd_Kx6.js b/docs/.vitepress/dist/assets/image_sensor.md.D7UKqu5W.js similarity index 88% rename from docs/.vitepress/dist/assets/image_sensor.md.DgDd_Kx6.js rename to docs/.vitepress/dist/assets/image_sensor.md.D7UKqu5W.js index 1d461af..9b2041d 100644 --- a/docs/.vitepress/dist/assets/image_sensor.md.DgDd_Kx6.js +++ b/docs/.vitepress/dist/assets/image_sensor.md.D7UKqu5W.js @@ -1 +1 @@ -import{_ as e,c as a,o as s,a1 as r}from"./chunks/framework.aklsSwTA.js";const g=JSON.parse('{"title":"Image Sensor","description":"","frontmatter":{},"headers":[],"relativePath":"image_sensor.md","filePath":"image_sensor.md","lastUpdated":1719902642000}'),t={name:"image_sensor.md"},o=r('

Image Sensor

Cine Fox supports and recommends the following Image Sensors on the Raspberry Pi 5

CSI Image Sensors

Cameras not listed here may potentionally work, but aren't tested and configured.

',5),n=[o];function i(l,m,_,c,h,d){return s(),a("div",null,n)}const f=e(t,[["render",i]]);export{g as __pageData,f as default}; +import{_ as e,c as a,o as s,a1 as r}from"./chunks/framework.vateGHBz.js";const g=JSON.parse('{"title":"Image Sensor","description":"","frontmatter":{},"headers":[],"relativePath":"image_sensor.md","filePath":"image_sensor.md","lastUpdated":1719902642000}'),t={name:"image_sensor.md"},o=r('

Image Sensor

Cine Fox supports and recommends the following Image Sensors on the Raspberry Pi 5

CSI Image Sensors

Cameras not listed here may potentionally work, but aren't tested and configured.

',5),n=[o];function i(l,m,_,c,h,d){return s(),a("div",null,n)}const f=e(t,[["render",i]]);export{g as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/image_sensor.md.DgDd_Kx6.lean.js b/docs/.vitepress/dist/assets/image_sensor.md.D7UKqu5W.lean.js similarity index 69% rename from docs/.vitepress/dist/assets/image_sensor.md.DgDd_Kx6.lean.js rename to docs/.vitepress/dist/assets/image_sensor.md.D7UKqu5W.lean.js index f01691a..02f51dc 100644 --- a/docs/.vitepress/dist/assets/image_sensor.md.DgDd_Kx6.lean.js +++ b/docs/.vitepress/dist/assets/image_sensor.md.D7UKqu5W.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as s,a1 as r}from"./chunks/framework.aklsSwTA.js";const g=JSON.parse('{"title":"Image Sensor","description":"","frontmatter":{},"headers":[],"relativePath":"image_sensor.md","filePath":"image_sensor.md","lastUpdated":1719902642000}'),t={name:"image_sensor.md"},o=r("",5),n=[o];function i(l,m,_,c,h,d){return s(),a("div",null,n)}const f=e(t,[["render",i]]);export{g as __pageData,f as default}; +import{_ as e,c as a,o as s,a1 as r}from"./chunks/framework.vateGHBz.js";const g=JSON.parse('{"title":"Image Sensor","description":"","frontmatter":{},"headers":[],"relativePath":"image_sensor.md","filePath":"image_sensor.md","lastUpdated":1719902642000}'),t={name:"image_sensor.md"},o=r("",5),n=[o];function i(l,m,_,c,h,d){return s(),a("div",null,n)}const f=e(t,[["render",i]]);export{g as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/index.md.CdaxeZQ6.js b/docs/.vitepress/dist/assets/index.md.DbzmSXJ1.js similarity index 93% rename from docs/.vitepress/dist/assets/index.md.CdaxeZQ6.js rename to docs/.vitepress/dist/assets/index.md.DbzmSXJ1.js index eed6f83..27c6efe 100644 --- a/docs/.vitepress/dist/assets/index.md.CdaxeZQ6.js +++ b/docs/.vitepress/dist/assets/index.md.DbzmSXJ1.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.aklsSwTA.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","video":"https://www.youtube.com/watch?v=6w-ZbD8wJZM","hero":{"name":"Cine Fox","text":"","tagline":"Cine Fox is an application built on cinepi-sdk, which allows users to make DIY movie cameras faster.","actions":[{"theme":"brand","text":"What is Cine Fox?","link":"/cine-fox"},{"theme":"alt","text":"Getting Start","link":"/hardware"}]},"features":[{"title":"More cheaper","details":"No need for monitors, just a mobile phone"},{"title":"More convenient","details":"More convenient interactivity and visualization"},{"title":"More sustainable","details":"Continuously updating features"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1719764689000}'),i={name:"index.md"};function n(o,s,r,c,l,d){return a(),t("div")}const u=e(i,[["render",n]]);export{p as __pageData,u as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.vateGHBz.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","video":"https://www.youtube.com/watch?v=6w-ZbD8wJZM","hero":{"name":"Cine Fox","text":"","tagline":"Cine Fox is an application built on cinepi-sdk, which allows users to make DIY movie cameras faster.","actions":[{"theme":"brand","text":"What is Cine Fox?","link":"/cine-fox"},{"theme":"alt","text":"Getting Start","link":"/hardware"}]},"features":[{"title":"More cheaper","details":"No need for monitors, just a mobile phone"},{"title":"More convenient","details":"More convenient interactivity and visualization"},{"title":"More sustainable","details":"Continuously updating features"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1719764689000}'),i={name:"index.md"};function n(o,s,r,c,l,d){return a(),t("div")}const u=e(i,[["render",n]]);export{p as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/index.md.CdaxeZQ6.lean.js b/docs/.vitepress/dist/assets/index.md.DbzmSXJ1.lean.js similarity index 93% rename from docs/.vitepress/dist/assets/index.md.CdaxeZQ6.lean.js rename to docs/.vitepress/dist/assets/index.md.DbzmSXJ1.lean.js index eed6f83..27c6efe 100644 --- a/docs/.vitepress/dist/assets/index.md.CdaxeZQ6.lean.js +++ b/docs/.vitepress/dist/assets/index.md.DbzmSXJ1.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.aklsSwTA.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","video":"https://www.youtube.com/watch?v=6w-ZbD8wJZM","hero":{"name":"Cine Fox","text":"","tagline":"Cine Fox is an application built on cinepi-sdk, which allows users to make DIY movie cameras faster.","actions":[{"theme":"brand","text":"What is Cine Fox?","link":"/cine-fox"},{"theme":"alt","text":"Getting Start","link":"/hardware"}]},"features":[{"title":"More cheaper","details":"No need for monitors, just a mobile phone"},{"title":"More convenient","details":"More convenient interactivity and visualization"},{"title":"More sustainable","details":"Continuously updating features"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1719764689000}'),i={name:"index.md"};function n(o,s,r,c,l,d){return a(),t("div")}const u=e(i,[["render",n]]);export{p as __pageData,u as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.vateGHBz.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","video":"https://www.youtube.com/watch?v=6w-ZbD8wJZM","hero":{"name":"Cine Fox","text":"","tagline":"Cine Fox is an application built on cinepi-sdk, which allows users to make DIY movie cameras faster.","actions":[{"theme":"brand","text":"What is Cine Fox?","link":"/cine-fox"},{"theme":"alt","text":"Getting Start","link":"/hardware"}]},"features":[{"title":"More cheaper","details":"No need for monitors, just a mobile phone"},{"title":"More convenient","details":"More convenient interactivity and visualization"},{"title":"More sustainable","details":"Continuously updating features"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1719764689000}'),i={name:"index.md"};function n(o,s,r,c,l,d){return a(),t("div")}const u=e(i,[["render",n]]);export{p as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/ios.md.B7m7Qqf9.js b/docs/.vitepress/dist/assets/ios.md.BoextKv0.js similarity index 92% rename from docs/.vitepress/dist/assets/ios.md.B7m7Qqf9.js rename to docs/.vitepress/dist/assets/ios.md.BoextKv0.js index 0fb368b..d88620d 100644 --- a/docs/.vitepress/dist/assets/ios.md.B7m7Qqf9.js +++ b/docs/.vitepress/dist/assets/ios.md.BoextKv0.js @@ -1 +1 @@ -import{_ as a,c as o,o as n,l as e,a as t}from"./chunks/framework.aklsSwTA.js";const g=JSON.parse('{"title":"iOS App","description":"","frontmatter":{},"headers":[],"relativePath":"ios.md","filePath":"ios.md","lastUpdated":1719764689000}'),s={name:"ios.md"},i=e("h1",{id:"ios-app",tabindex:"-1"},[t("iOS App "),e("a",{class:"header-anchor",href:"#ios-app","aria-label":'Permalink to "iOS App"'},"​")],-1),l=e("p",null,"I am working on developing an iOS App and have not yet released it. Currently I can only use the following steps:",-1),r=e("ol",null,[e("li",null,"Turn on the hotspot, connect the cable, and select USB network sharing"),e("li",null,"Launch Safari"),e("li",null,[t("go to "),e("code",null,"cinepi:5678/web")])],-1),c=[i,l,r];function p(d,h,_,u,f,m){return n(),o("div",null,c)}const k=a(s,[["render",p]]);export{g as __pageData,k as default}; +import{_ as a,c as o,o as n,l as e,a as t}from"./chunks/framework.vateGHBz.js";const g=JSON.parse('{"title":"iOS App","description":"","frontmatter":{},"headers":[],"relativePath":"ios.md","filePath":"ios.md","lastUpdated":1719764689000}'),s={name:"ios.md"},i=e("h1",{id:"ios-app",tabindex:"-1"},[t("iOS App "),e("a",{class:"header-anchor",href:"#ios-app","aria-label":'Permalink to "iOS App"'},"​")],-1),l=e("p",null,"I am working on developing an iOS App and have not yet released it. Currently I can only use the following steps:",-1),r=e("ol",null,[e("li",null,"Turn on the hotspot, connect the cable, and select USB network sharing"),e("li",null,"Launch Safari"),e("li",null,[t("go to "),e("code",null,"cinepi:5678/web")])],-1),c=[i,l,r];function p(d,h,_,u,f,m){return n(),o("div",null,c)}const k=a(s,[["render",p]]);export{g as __pageData,k as default}; diff --git a/docs/.vitepress/dist/assets/ios.md.B7m7Qqf9.lean.js b/docs/.vitepress/dist/assets/ios.md.BoextKv0.lean.js similarity index 92% rename from docs/.vitepress/dist/assets/ios.md.B7m7Qqf9.lean.js rename to docs/.vitepress/dist/assets/ios.md.BoextKv0.lean.js index 0fb368b..d88620d 100644 --- a/docs/.vitepress/dist/assets/ios.md.B7m7Qqf9.lean.js +++ b/docs/.vitepress/dist/assets/ios.md.BoextKv0.lean.js @@ -1 +1 @@ -import{_ as a,c as o,o as n,l as e,a as t}from"./chunks/framework.aklsSwTA.js";const g=JSON.parse('{"title":"iOS App","description":"","frontmatter":{},"headers":[],"relativePath":"ios.md","filePath":"ios.md","lastUpdated":1719764689000}'),s={name:"ios.md"},i=e("h1",{id:"ios-app",tabindex:"-1"},[t("iOS App "),e("a",{class:"header-anchor",href:"#ios-app","aria-label":'Permalink to "iOS App"'},"​")],-1),l=e("p",null,"I am working on developing an iOS App and have not yet released it. Currently I can only use the following steps:",-1),r=e("ol",null,[e("li",null,"Turn on the hotspot, connect the cable, and select USB network sharing"),e("li",null,"Launch Safari"),e("li",null,[t("go to "),e("code",null,"cinepi:5678/web")])],-1),c=[i,l,r];function p(d,h,_,u,f,m){return n(),o("div",null,c)}const k=a(s,[["render",p]]);export{g as __pageData,k as default}; +import{_ as a,c as o,o as n,l as e,a as t}from"./chunks/framework.vateGHBz.js";const g=JSON.parse('{"title":"iOS App","description":"","frontmatter":{},"headers":[],"relativePath":"ios.md","filePath":"ios.md","lastUpdated":1719764689000}'),s={name:"ios.md"},i=e("h1",{id:"ios-app",tabindex:"-1"},[t("iOS App "),e("a",{class:"header-anchor",href:"#ios-app","aria-label":'Permalink to "iOS App"'},"​")],-1),l=e("p",null,"I am working on developing an iOS App and have not yet released it. Currently I can only use the following steps:",-1),r=e("ol",null,[e("li",null,"Turn on the hotspot, connect the cable, and select USB network sharing"),e("li",null,"Launch Safari"),e("li",null,[t("go to "),e("code",null,"cinepi:5678/web")])],-1),c=[i,l,r];function p(d,h,_,u,f,m){return n(),o("div",null,c)}const k=a(s,[["render",p]]);export{g as __pageData,k as default}; diff --git a/docs/.vitepress/dist/assets/nvme.md.fBVw7Fk8.js b/docs/.vitepress/dist/assets/nvme.md.kxn7c60C.js similarity index 99% rename from docs/.vitepress/dist/assets/nvme.md.fBVw7Fk8.js rename to docs/.vitepress/dist/assets/nvme.md.kxn7c60C.js index 9b9fe6f..41a6b24 100644 --- a/docs/.vitepress/dist/assets/nvme.md.fBVw7Fk8.js +++ b/docs/.vitepress/dist/assets/nvme.md.kxn7c60C.js @@ -1,4 +1,4 @@ -import{_ as s,c as e,o as a,a1 as t,ab as i}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse('{"title":"NVMe SSD Hat","description":"","frontmatter":{},"headers":[],"relativePath":"nvme.md","filePath":"nvme.md","lastUpdated":1719825753000}'),n={name:"nvme.md"},l=t('

NVMe SSD Hat

Use NVMe SSD Hat on Pi

Overview

nvme

After Pi5's PCIE information has been published, there are many NVME SSD Hat on the market (like 52Pi, WaveShare, Geekworm and so on), all of which work well and have very fast read and write speeds.

But I actually don't recommend this way for Cine Fox.

I have also used this way for storage before, but it is very inconvenient because you need to consider how to transfer the files to the computer for editing. Whether it is network file sharing or using file transfer software, it is very slow. And I cannot quickly remove the NVMe SSD to replace another one.

Of course, if you have a way to solve the problem of convenience, then this method is also suitable for you.

Usage

  1. Install hat and NVMe SSD, then run
shell
sudo nano /boot/firmware/config.txt
shell
# Enable the PCIe External connector.
+import{_ as s,c as e,o as a,a1 as t,ab as i}from"./chunks/framework.vateGHBz.js";const m=JSON.parse('{"title":"NVMe SSD Hat","description":"","frontmatter":{},"headers":[],"relativePath":"nvme.md","filePath":"nvme.md","lastUpdated":1719825753000}'),n={name:"nvme.md"},l=t('

NVMe SSD Hat

Use NVMe SSD Hat on Pi

Overview

nvme

After Pi5's PCIE information has been published, there are many NVME SSD Hat on the market (like 52Pi, WaveShare, Geekworm and so on), all of which work well and have very fast read and write speeds.

But I actually don't recommend this way for Cine Fox.

I have also used this way for storage before, but it is very inconvenient because you need to consider how to transfer the files to the computer for editing. Whether it is network file sharing or using file transfer software, it is very slow. And I cannot quickly remove the NVMe SSD to replace another one.

Of course, if you have a way to solve the problem of convenience, then this method is also suitable for you.

Usage

  1. Install hat and NVMe SSD, then run
shell
sudo nano /boot/firmware/config.txt
shell
# Enable the PCIe External connector.
 dtparam=pciex1

Press Ctrl-O, then enter, to write the change to the file.

Press Ctrl-X to exit nano (the editor).

  1. run command
shell
sudo fdisk /dev/nvme0n1

You can see commands by m.
Choose “n” to create a new partition, then “p” then “1” to create a new primary partition.
Just use defaults, or just press enter when you asked about sector numbers.
Then “w” to write the data to the disk.
(in my case I did't need "w")

  1. make file system
shell
# reference site shows /dev/nvme0n1p1 but in may case, it was /dev/nvme0n1
 sudo mkfs -t ext4 /dev/nvme0n1p1

You can pick which file systems you want, but ext4 might be the best, I think.

  1. make mount point
shell
sudo mkdir /media/RAW
 sudo chmod 777 /media/RAW
  1. mount
shell
sudo mount /dev/nvme0n1p1 /media/RAW

Done!

👆 Part of the above content comes from here, thanks to this article

Mount SSD when Boot

After creating the partition, you only need to execute this command. You can add it to the service or use crontab to complete it.

shell
sudo mount /dev/nvme0n1p1 /media/RAW
`,29),o=[l];function h(p,r,d,k,c,g){return a(),e("div",null,o)}const v=s(n,[["render",h]]);export{m as __pageData,v as default}; diff --git a/docs/.vitepress/dist/assets/nvme.md.fBVw7Fk8.lean.js b/docs/.vitepress/dist/assets/nvme.md.kxn7c60C.lean.js similarity index 84% rename from docs/.vitepress/dist/assets/nvme.md.fBVw7Fk8.lean.js rename to docs/.vitepress/dist/assets/nvme.md.kxn7c60C.lean.js index 91cb03b..9f48cb6 100644 --- a/docs/.vitepress/dist/assets/nvme.md.fBVw7Fk8.lean.js +++ b/docs/.vitepress/dist/assets/nvme.md.kxn7c60C.lean.js @@ -1 +1 @@ -import{_ as s,c as e,o as a,a1 as t,ab as i}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse('{"title":"NVMe SSD Hat","description":"","frontmatter":{},"headers":[],"relativePath":"nvme.md","filePath":"nvme.md","lastUpdated":1719825753000}'),n={name:"nvme.md"},l=t("",29),o=[l];function h(p,r,d,k,c,g){return a(),e("div",null,o)}const v=s(n,[["render",h]]);export{m as __pageData,v as default}; +import{_ as s,c as e,o as a,a1 as t,ab as i}from"./chunks/framework.vateGHBz.js";const m=JSON.parse('{"title":"NVMe SSD Hat","description":"","frontmatter":{},"headers":[],"relativePath":"nvme.md","filePath":"nvme.md","lastUpdated":1719825753000}'),n={name:"nvme.md"},l=t("",29),o=[l];function h(p,r,d,k,c,g){return a(),e("div",null,o)}const v=s(n,[["render",h]]);export{m as __pageData,v as default}; diff --git a/docs/.vitepress/dist/assets/oneincheye.md.D4BdtUEH.js b/docs/.vitepress/dist/assets/oneincheye.md.vAxt6b0s.js similarity index 89% rename from docs/.vitepress/dist/assets/oneincheye.md.D4BdtUEH.js rename to docs/.vitepress/dist/assets/oneincheye.md.vAxt6b0s.js index 8443538..a25cbb0 100644 --- a/docs/.vitepress/dist/assets/oneincheye.md.D4BdtUEH.js +++ b/docs/.vitepress/dist/assets/oneincheye.md.vAxt6b0s.js @@ -1 +1 @@ -import{_ as n,c as t,o as a,l as e,a as o}from"./chunks/framework.aklsSwTA.js";const u=JSON.parse('{"title":"OneInchEye","description":"","frontmatter":{},"headers":[],"relativePath":"oneincheye.md","filePath":"oneincheye.md","lastUpdated":1719764689000}'),c={name:"oneincheye.md"},s=e("h1",{id:"oneincheye",tabindex:"-1"},[o("OneInchEye "),e("a",{class:"header-anchor",href:"#oneincheye","aria-label":'Permalink to "OneInchEye"'},"​")],-1),i=e("p",null,"building...",-1),r=[s,i];function d(h,l,_,p,m,f){return a(),t("div",null,r)}const x=n(c,[["render",d]]);export{u as __pageData,x as default}; +import{_ as n,c as t,o as a,l as e,a as o}from"./chunks/framework.vateGHBz.js";const u=JSON.parse('{"title":"OneInchEye","description":"","frontmatter":{},"headers":[],"relativePath":"oneincheye.md","filePath":"oneincheye.md","lastUpdated":1719764689000}'),c={name:"oneincheye.md"},s=e("h1",{id:"oneincheye",tabindex:"-1"},[o("OneInchEye "),e("a",{class:"header-anchor",href:"#oneincheye","aria-label":'Permalink to "OneInchEye"'},"​")],-1),i=e("p",null,"building...",-1),r=[s,i];function d(h,l,_,p,m,f){return a(),t("div",null,r)}const x=n(c,[["render",d]]);export{u as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/oneincheye.md.D4BdtUEH.lean.js b/docs/.vitepress/dist/assets/oneincheye.md.vAxt6b0s.lean.js similarity index 89% rename from docs/.vitepress/dist/assets/oneincheye.md.D4BdtUEH.lean.js rename to docs/.vitepress/dist/assets/oneincheye.md.vAxt6b0s.lean.js index 8443538..a25cbb0 100644 --- a/docs/.vitepress/dist/assets/oneincheye.md.D4BdtUEH.lean.js +++ b/docs/.vitepress/dist/assets/oneincheye.md.vAxt6b0s.lean.js @@ -1 +1 @@ -import{_ as n,c as t,o as a,l as e,a as o}from"./chunks/framework.aklsSwTA.js";const u=JSON.parse('{"title":"OneInchEye","description":"","frontmatter":{},"headers":[],"relativePath":"oneincheye.md","filePath":"oneincheye.md","lastUpdated":1719764689000}'),c={name:"oneincheye.md"},s=e("h1",{id:"oneincheye",tabindex:"-1"},[o("OneInchEye "),e("a",{class:"header-anchor",href:"#oneincheye","aria-label":'Permalink to "OneInchEye"'},"​")],-1),i=e("p",null,"building...",-1),r=[s,i];function d(h,l,_,p,m,f){return a(),t("div",null,r)}const x=n(c,[["render",d]]);export{u as __pageData,x as default}; +import{_ as n,c as t,o as a,l as e,a as o}from"./chunks/framework.vateGHBz.js";const u=JSON.parse('{"title":"OneInchEye","description":"","frontmatter":{},"headers":[],"relativePath":"oneincheye.md","filePath":"oneincheye.md","lastUpdated":1719764689000}'),c={name:"oneincheye.md"},s=e("h1",{id:"oneincheye",tabindex:"-1"},[o("OneInchEye "),e("a",{class:"header-anchor",href:"#oneincheye","aria-label":'Permalink to "OneInchEye"'},"​")],-1),i=e("p",null,"building...",-1),r=[s,i];function d(h,l,_,p,m,f){return a(),t("div",null,r)}const x=n(c,[["render",d]]);export{u as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/pi.md.DKC65Oyz.js b/docs/.vitepress/dist/assets/pi.md.DKC65Oyz.js new file mode 100644 index 0000000..39681be --- /dev/null +++ b/docs/.vitepress/dist/assets/pi.md.DKC65Oyz.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a1 as r,ac as i}from"./chunks/framework.vateGHBz.js";const b=JSON.parse('{"title":"Raspberry Pi 5","description":"","frontmatter":{},"headers":[],"relativePath":"pi.md","filePath":"pi.md","lastUpdated":1719908332000}'),o={name:"pi.md"},s=r('

Raspberry Pi 5

The everything computer.

Overview

pi

Cine Fox is based on cinepi-sdk. Currently, cinepi-sdk only works on Pi5 and can bring out the performance of Pi5. This is the introduction of Pi5 on the official website of Raspberry Pi:

Raspberry Pi 5 features the Broadcom BCM2712 quad-core Arm Cortex A76 processor @ 2.4GHz, making it up to three times faster than the previous generation. With RAM variants up to 8GB, this is the fastest, smoothest Raspberry Pi experience yet.

Although Pi5 still has some shortcomings, since it is the only choice at present, I don't think I need to introduce it specially.🙂

Usage

It should be noted that Pi5 requires a stable 5V5A power supply and you need to use the necessary cooling fan or heat sink.

Wiki

Official Wiki

',11),n=[s];function p(c,h,l,d,u,_){return t(),a("div",null,n)}const f=e(o,[["render",p]]);export{b as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/pi.md.DKC65Oyz.lean.js b/docs/.vitepress/dist/assets/pi.md.DKC65Oyz.lean.js new file mode 100644 index 0000000..01ff521 --- /dev/null +++ b/docs/.vitepress/dist/assets/pi.md.DKC65Oyz.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a1 as r,ac as i}from"./chunks/framework.vateGHBz.js";const b=JSON.parse('{"title":"Raspberry Pi 5","description":"","frontmatter":{},"headers":[],"relativePath":"pi.md","filePath":"pi.md","lastUpdated":1719908332000}'),o={name:"pi.md"},s=r("",11),n=[s];function p(c,h,l,d,u,_){return t(),a("div",null,n)}const f=e(o,[["render",p]]);export{b as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/pi.md.DtBKahMS.js b/docs/.vitepress/dist/assets/pi.md.DtBKahMS.js deleted file mode 100644 index 358845d..0000000 --- a/docs/.vitepress/dist/assets/pi.md.DtBKahMS.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as t,o as r,l as e,a as s}from"./chunks/framework.aklsSwTA.js";const u=JSON.parse('{"title":"Raspberry Pi","description":"","frontmatter":{},"headers":[],"relativePath":"pi.md","filePath":"pi.md","lastUpdated":1719764689000}'),i={name:"pi.md"},o=e("h1",{id:"raspberry-pi",tabindex:"-1"},[s("Raspberry Pi "),e("a",{class:"header-anchor",href:"#raspberry-pi","aria-label":'Permalink to "Raspberry Pi"'},"​")],-1),n=e("p",null,"building...",-1),p=[o,n];function c(d,l,_,h,m,f){return r(),t("div",null,p)}const P=a(i,[["render",c]]);export{u as __pageData,P as default}; diff --git a/docs/.vitepress/dist/assets/pi.md.DtBKahMS.lean.js b/docs/.vitepress/dist/assets/pi.md.DtBKahMS.lean.js deleted file mode 100644 index 358845d..0000000 --- a/docs/.vitepress/dist/assets/pi.md.DtBKahMS.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as t,o as r,l as e,a as s}from"./chunks/framework.aklsSwTA.js";const u=JSON.parse('{"title":"Raspberry Pi","description":"","frontmatter":{},"headers":[],"relativePath":"pi.md","filePath":"pi.md","lastUpdated":1719764689000}'),i={name:"pi.md"},o=e("h1",{id:"raspberry-pi",tabindex:"-1"},[s("Raspberry Pi "),e("a",{class:"header-anchor",href:"#raspberry-pi","aria-label":'Permalink to "Raspberry Pi"'},"​")],-1),n=e("p",null,"building...",-1),p=[o,n];function c(d,l,_,h,m,f){return r(),t("div",null,p)}const P=a(i,[["render",c]]);export{u as __pageData,P as default}; diff --git a/docs/.vitepress/dist/assets/power_management.md.CQ8-y3gB.js b/docs/.vitepress/dist/assets/power_management.md.DFHd5fiA.js similarity index 96% rename from docs/.vitepress/dist/assets/power_management.md.CQ8-y3gB.js rename to docs/.vitepress/dist/assets/power_management.md.DFHd5fiA.js index cce8dd5..5aa8c2d 100644 --- a/docs/.vitepress/dist/assets/power_management.md.CQ8-y3gB.js +++ b/docs/.vitepress/dist/assets/power_management.md.DFHd5fiA.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,a1 as t,ac as o}from"./chunks/framework.aklsSwTA.js";const f=JSON.parse('{"title":"Power Management","description":"","frontmatter":{},"headers":[],"relativePath":"power_management.md","filePath":"power_management.md","lastUpdated":1719902642000}'),n={name:"power_management.md"},i=t('

Power Management

Power Management for SBC's

Overview

power

Because with the upgrade of Pi5, Pi official also recommends 5V5A power supply for Pi5, but most specifications of power on the market are 5V3A, which cannot reach 5A. This may make PCIE and USB peripherals to not have enough power, so we need to use power management.

There are generally two ways:

  • Power Management Hat
  • DC-DC converter

I have used both ways, and I personally prefer Hat's way.

Recommend

Here I list some hardware I have used. You can also use different ones yourself. You just need to pay attention to the input voltage and output voltage and current.

Power Management Hat

  • Geekworm X735 V3.0 & Momentary switch 💴Buy 📕Wiki (⭐Recommend)
  • 52Pi EP-0104 💴Buy 📕Wiki

DC-DC converter

  • dc-dc converter 💴Buy

About Battery

There are many options for batteries. You just need to make sure that the voltage and capacity are sufficient. I recommend V-mount batteries like SmallRig VB50 💴Buy.

',16),s=[i];function l(m,p,c,d,h,u){return r(),a("div",null,s)}const _=e(n,[["render",l]]);export{f as __pageData,_ as default}; +import{_ as e,c as a,o as r,a1 as t,ad as o}from"./chunks/framework.vateGHBz.js";const f=JSON.parse('{"title":"Power Management","description":"","frontmatter":{},"headers":[],"relativePath":"power_management.md","filePath":"power_management.md","lastUpdated":1719902642000}'),n={name:"power_management.md"},i=t('

Power Management

Power Management for SBC's

Overview

power

Because with the upgrade of Pi5, Pi official also recommends 5V5A power supply for Pi5, but most specifications of power on the market are 5V3A, which cannot reach 5A. This may make PCIE and USB peripherals to not have enough power, so we need to use power management.

There are generally two ways:

  • Power Management Hat
  • DC-DC converter

I have used both ways, and I personally prefer Hat's way.

Recommend

Here I list some hardware I have used. You can also use different ones yourself. You just need to pay attention to the input voltage and output voltage and current.

Power Management Hat

  • Geekworm X735 V3.0 & Momentary switch 💴Buy 📕Wiki (⭐Recommend)
  • 52Pi EP-0104 💴Buy 📕Wiki

DC-DC converter

  • dc-dc converter 💴Buy

About Battery

There are many options for batteries. You just need to make sure that the voltage and capacity are sufficient. I recommend V-mount batteries like SmallRig VB50 💴Buy.

',16),s=[i];function l(m,p,c,d,h,u){return r(),a("div",null,s)}const _=e(n,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/docs/.vitepress/dist/assets/power_management.md.CQ8-y3gB.lean.js b/docs/.vitepress/dist/assets/power_management.md.DFHd5fiA.lean.js similarity index 71% rename from docs/.vitepress/dist/assets/power_management.md.CQ8-y3gB.lean.js rename to docs/.vitepress/dist/assets/power_management.md.DFHd5fiA.lean.js index c0abeba..1fa5381 100644 --- a/docs/.vitepress/dist/assets/power_management.md.CQ8-y3gB.lean.js +++ b/docs/.vitepress/dist/assets/power_management.md.DFHd5fiA.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,a1 as t,ac as o}from"./chunks/framework.aklsSwTA.js";const f=JSON.parse('{"title":"Power Management","description":"","frontmatter":{},"headers":[],"relativePath":"power_management.md","filePath":"power_management.md","lastUpdated":1719902642000}'),n={name:"power_management.md"},i=t("",16),s=[i];function l(m,p,c,d,h,u){return r(),a("div",null,s)}const _=e(n,[["render",l]]);export{f as __pageData,_ as default}; +import{_ as e,c as a,o as r,a1 as t,ad as o}from"./chunks/framework.vateGHBz.js";const f=JSON.parse('{"title":"Power Management","description":"","frontmatter":{},"headers":[],"relativePath":"power_management.md","filePath":"power_management.md","lastUpdated":1719902642000}'),n={name:"power_management.md"},i=t("",16),s=[i];function l(m,p,c,d,h,u){return r(),a("div",null,s)}const _=e(n,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/docs/.vitepress/dist/assets/sbc.md.D_i2UUoO.js b/docs/.vitepress/dist/assets/sbc.md.DU-aqrEb.js similarity index 86% rename from docs/.vitepress/dist/assets/sbc.md.D_i2UUoO.js rename to docs/.vitepress/dist/assets/sbc.md.DU-aqrEb.js index ae1399d..170d66f 100644 --- a/docs/.vitepress/dist/assets/sbc.md.D_i2UUoO.js +++ b/docs/.vitepress/dist/assets/sbc.md.DU-aqrEb.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as r}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse(`{"title":"SBC's","description":"","frontmatter":{},"headers":[],"relativePath":"sbc.md","filePath":"sbc.md","lastUpdated":1719905553000}`),s={name:"sbc.md"},i=r('

SBC's

Single Board Computers for Cine-Fox

Overview

Single Board Computers are little computer's like the Raspberry Pi, which are build to run computing tasks efficiently.

Currently Cine-Fox supports:

',6),o=[i];function c(l,n,p,_,d,h){return t(),a("div",null,o)}const f=e(s,[["render",c]]);export{m as __pageData,f as default}; +import{_ as e,c as a,o as t,a1 as r}from"./chunks/framework.vateGHBz.js";const m=JSON.parse(`{"title":"SBC's","description":"","frontmatter":{},"headers":[],"relativePath":"sbc.md","filePath":"sbc.md","lastUpdated":1719905553000}`),s={name:"sbc.md"},i=r('

SBC's

Single Board Computers for Cine-Fox

Overview

Single Board Computers are little computer's like the Raspberry Pi, which are build to run computing tasks efficiently.

Currently Cine-Fox supports:

',6),o=[i];function c(l,n,p,_,d,h){return t(),a("div",null,o)}const f=e(s,[["render",c]]);export{m as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/sbc.md.D_i2UUoO.lean.js b/docs/.vitepress/dist/assets/sbc.md.DU-aqrEb.lean.js similarity index 66% rename from docs/.vitepress/dist/assets/sbc.md.D_i2UUoO.lean.js rename to docs/.vitepress/dist/assets/sbc.md.DU-aqrEb.lean.js index 87d0d32..ace7447 100644 --- a/docs/.vitepress/dist/assets/sbc.md.D_i2UUoO.lean.js +++ b/docs/.vitepress/dist/assets/sbc.md.DU-aqrEb.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as r}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse(`{"title":"SBC's","description":"","frontmatter":{},"headers":[],"relativePath":"sbc.md","filePath":"sbc.md","lastUpdated":1719905553000}`),s={name:"sbc.md"},i=r("",6),o=[i];function c(l,n,p,_,d,h){return t(),a("div",null,o)}const f=e(s,[["render",c]]);export{m as __pageData,f as default}; +import{_ as e,c as a,o as t,a1 as r}from"./chunks/framework.vateGHBz.js";const m=JSON.parse(`{"title":"SBC's","description":"","frontmatter":{},"headers":[],"relativePath":"sbc.md","filePath":"sbc.md","lastUpdated":1719905553000}`),s={name:"sbc.md"},i=r("",6),o=[i];function c(l,n,p,_,d,h){return t(),a("div",null,o)}const f=e(s,[["render",c]]);export{m as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/software.md.D4f5_yYU.js b/docs/.vitepress/dist/assets/software.md.B-pO_mN6.js similarity index 77% rename from docs/.vitepress/dist/assets/software.md.D4f5_yYU.js rename to docs/.vitepress/dist/assets/software.md.B-pO_mN6.js index db8ac3f..e724d22 100644 --- a/docs/.vitepress/dist/assets/software.md.D4f5_yYU.js +++ b/docs/.vitepress/dist/assets/software.md.B-pO_mN6.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a1 as e,ad as n}from"./chunks/framework.aklsSwTA.js";const u=JSON.parse('{"title":"Software","description":"","frontmatter":{},"headers":[],"relativePath":"software.md","filePath":"software.md","lastUpdated":1719902642000}'),t={name:"software.md"},l=e('

Software

Install Cine-Fox in your Pi5.

Overview

soft

Install Cine Fox on your Pi. After installation, you can use USB network tethering to access the Cine Fox webUI interface on your mobile phone using a browser.

For Android users, I recommend installing Android App, which can achieve more functions.

Install Cine-Fox

  1. Flash cinepi-sdk to your micro-sd card
  2. run command and make sure it works
shell
./run-raw.sh
  1. Since the current cinepi-sdk image is a pre-release version, some functions need to be fixed. Cine-Fox/cinepi-raw is the version I have fixed. You need to overwrite it in the /home/pi/cinepi-raw.
  2. run command to recompile
shell
./compile-raw.sh
  1. Download cine-fox
shell
wget https://github.com/Cine-Fox/cine-fox.github.io/raw/main/docs/public/cine-fox

Or you can click here to download manually and send it to your pi

  1. run command
shell
sudo chmod 777 cine-fox
+import{_ as s,c as i,o as a,a1 as e,ae as n}from"./chunks/framework.vateGHBz.js";const y=JSON.parse('{"title":"Software","description":"","frontmatter":{},"headers":[],"relativePath":"software.md","filePath":"software.md","lastUpdated":1719906768000}'),t={name:"software.md"},l=e('

Software

Install Cine-Fox in your Pi5.

Overview

soft

Install Cine Fox on your Pi. After installation, you can use USB network tethering to access the Cine Fox webUI interface on your mobile phone using a browser.

For Android users, I recommend installing Android App, which can directly open the WebUI, saving the time of opening the browser and entering the URL.

Install Cine-Fox

  1. Flash cinepi-sdk to your micro-sd card
  2. run command and make sure it works
shell
./run-raw.sh
  1. Since the current cinepi-sdk image is a pre-release version, some functions need to be fixed. Cine-Fox/cinepi-raw is the version I have fixed. You need to overwrite it in the /home/pi/cinepi-raw.
  2. run command to recompile
shell
./compile-raw.sh
  1. Download cine-fox
shell
wget https://github.com/Cine-Fox/cine-fox.github.io/raw/main/docs/public/cine-fox

Or you can click here to download manually and send it to your pi

  1. run command
shell
sudo chmod 777 cine-fox
 sudo ./cine-fox

TIP

if you use without CFE Hat, you should run ./cine-fox --cfe-hat=false

  1. open your browser and type <your-pi-ip>:5678/web
  2. Done!

Without CFE Hat

if you use cine-fox without CFE Hat, you need to mount SSD to /media/RAW manually.

Run Cine-Fox when boot

  1. Run command
shell
sudo nano /lib/systemd/system/cine-fox.service
  1. Enter the following
shell
[Unit]
 Description=Cine Fox Service
 After=multi-user.target
@@ -26,4 +26,4 @@ import{_ as s,c as i,o as a,a1 as e,ad as n}from"./chunks/framework.aklsSwTA.js"
 
 [Install]
 WantedBy=multi-user.target
shell
sudo chmod 777 /lib/systemd/system/cinepi-raw.service
-sudo systemctl enable cinepi-raw.service
  1. reboot
`,33),h=[l];function p(o,k,r,d,c,g){return a(),i("div",null,h)}const y=s(t,[["render",p]]);export{u as __pageData,y as default}; +sudo systemctl enable cinepi-raw.service
  1. reboot
`,33),h=[l];function p(o,k,r,d,c,g){return a(),i("div",null,h)}const u=s(t,[["render",p]]);export{y as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/software.md.B-pO_mN6.lean.js b/docs/.vitepress/dist/assets/software.md.B-pO_mN6.lean.js new file mode 100644 index 0000000..6888954 --- /dev/null +++ b/docs/.vitepress/dist/assets/software.md.B-pO_mN6.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a1 as e,ae as n}from"./chunks/framework.vateGHBz.js";const y=JSON.parse('{"title":"Software","description":"","frontmatter":{},"headers":[],"relativePath":"software.md","filePath":"software.md","lastUpdated":1719906768000}'),t={name:"software.md"},l=e("",33),h=[l];function p(o,k,r,d,c,g){return a(),i("div",null,h)}const u=s(t,[["render",p]]);export{y as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/software.md.D4f5_yYU.lean.js b/docs/.vitepress/dist/assets/software.md.D4f5_yYU.lean.js deleted file mode 100644 index 160b730..0000000 --- a/docs/.vitepress/dist/assets/software.md.D4f5_yYU.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a1 as e,ad as n}from"./chunks/framework.aklsSwTA.js";const u=JSON.parse('{"title":"Software","description":"","frontmatter":{},"headers":[],"relativePath":"software.md","filePath":"software.md","lastUpdated":1719902642000}'),t={name:"software.md"},l=e("",33),h=[l];function p(o,k,r,d,c,g){return a(),i("div",null,h)}const y=s(t,[["render",p]]);export{u as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/starlighteye.md.CF4dVpmK.js b/docs/.vitepress/dist/assets/starlighteye.md.BUnUp5JJ.js similarity index 98% rename from docs/.vitepress/dist/assets/starlighteye.md.CF4dVpmK.js rename to docs/.vitepress/dist/assets/starlighteye.md.BUnUp5JJ.js index e585a7d..bf011b4 100644 --- a/docs/.vitepress/dist/assets/starlighteye.md.CF4dVpmK.js +++ b/docs/.vitepress/dist/assets/starlighteye.md.BUnUp5JJ.js @@ -1,4 +1,4 @@ -import{_ as a,c as e,o as i,a1 as s,ae as t,af as l}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse('{"title":"StarlightEye","description":"","frontmatter":{},"headers":[],"relativePath":"starlighteye.md","filePath":"starlighteye.md","lastUpdated":1719825753000}'),r={name:"starlighteye.md"},h=s('

StarlightEye

OpenSource IMX585 Camera Board for Raspberry Pi

Overview

Pic

StarlightEye is an OpenSource IMX585 Camera Board, which is made by Will Whang. The following introductions are all from Will's project👇

Welcome to the StarlightEye project, an open-source camera board designed for Raspberry Pi Compute Module 4 boards using the IMX585. This project aims to provide a high-quality, affordable, and accessible camera module for advanced Raspberry Pi projects. The board is designed using KiCad v6, a popular open-source electronics design automation (EDA) software.

StarlightEye captures stunning high-resolution images and videos with improved low-light performance and dynamic range. It's perfect for photography enthusiasts, developers, and makers who want to level up their Raspberry Pi projects with a powerful camera.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple StarlightEyes, but he recommends that users make their own with PCB Plant like JLCPCB and so on, because the key production files are already very complete.

pcb

This is the preview image when I commissioned JLCPCB to make it. 👆

Usage

Step 1: Modify dtoverlay

you will need to modify the config.txt found in the boot partition after you are flashing your cinepi-sdk.

shell
# StarlightEye Module ( default camera port 1 )
+import{_ as a,c as e,o as i,a1 as s,af as t,ag as l}from"./chunks/framework.vateGHBz.js";const m=JSON.parse('{"title":"StarlightEye","description":"","frontmatter":{},"headers":[],"relativePath":"starlighteye.md","filePath":"starlighteye.md","lastUpdated":1719825753000}'),r={name:"starlighteye.md"},h=s('

StarlightEye

OpenSource IMX585 Camera Board for Raspberry Pi

Overview

Pic

StarlightEye is an OpenSource IMX585 Camera Board, which is made by Will Whang. The following introductions are all from Will's project👇

Welcome to the StarlightEye project, an open-source camera board designed for Raspberry Pi Compute Module 4 boards using the IMX585. This project aims to provide a high-quality, affordable, and accessible camera module for advanced Raspberry Pi projects. The board is designed using KiCad v6, a popular open-source electronics design automation (EDA) software.

StarlightEye captures stunning high-resolution images and videos with improved low-light performance and dynamic range. It's perfect for photography enthusiasts, developers, and makers who want to level up their Raspberry Pi projects with a powerful camera.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple StarlightEyes, but he recommends that users make their own with PCB Plant like JLCPCB and so on, because the key production files are already very complete.

pcb

This is the preview image when I commissioned JLCPCB to make it. 👆

Usage

Step 1: Modify dtoverlay

you will need to modify the config.txt found in the boot partition after you are flashing your cinepi-sdk.

shell
# StarlightEye Module ( default camera port 1 )
 camera_auto_detect=0
 dtoverlay=imx585

Step 2: Recompile driver

Initially, the default imx585 driver of current pre-release cinepi-sdk is not made for StarlightEye, so the i2c address needs to be changed and recompiled.

You can use the following two ways to complete it 👇


Use git pull

you can run this command

shell
cd ~/driver/imx585-v4l2-driver/
 git pull
diff --git a/docs/.vitepress/dist/assets/starlighteye.md.CF4dVpmK.lean.js b/docs/.vitepress/dist/assets/starlighteye.md.BUnUp5JJ.lean.js
similarity index 70%
rename from docs/.vitepress/dist/assets/starlighteye.md.CF4dVpmK.lean.js
rename to docs/.vitepress/dist/assets/starlighteye.md.BUnUp5JJ.lean.js
index be053bc..8328726 100644
--- a/docs/.vitepress/dist/assets/starlighteye.md.CF4dVpmK.lean.js
+++ b/docs/.vitepress/dist/assets/starlighteye.md.BUnUp5JJ.lean.js
@@ -1 +1 @@
-import{_ as a,c as e,o as i,a1 as s,ae as t,af as l}from"./chunks/framework.aklsSwTA.js";const m=JSON.parse('{"title":"StarlightEye","description":"","frontmatter":{},"headers":[],"relativePath":"starlighteye.md","filePath":"starlighteye.md","lastUpdated":1719825753000}'),r={name:"starlighteye.md"},h=s("",34),n=[h];function p(o,d,c,k,g,u){return i(),e("div",null,n)}const b=a(r,[["render",p]]);export{m as __pageData,b as default};
+import{_ as a,c as e,o as i,a1 as s,af as t,ag as l}from"./chunks/framework.vateGHBz.js";const m=JSON.parse('{"title":"StarlightEye","description":"","frontmatter":{},"headers":[],"relativePath":"starlighteye.md","filePath":"starlighteye.md","lastUpdated":1719825753000}'),r={name:"starlighteye.md"},h=s("",34),n=[h];function p(o,d,c,k,g,u){return i(),e("div",null,n)}const b=a(r,[["render",p]]);export{m as __pageData,b as default};
diff --git a/docs/.vitepress/dist/assets/storage.md.BIcXuQl6.js b/docs/.vitepress/dist/assets/storage.md.UjlYZX78.js
similarity index 88%
rename from docs/.vitepress/dist/assets/storage.md.BIcXuQl6.js
rename to docs/.vitepress/dist/assets/storage.md.UjlYZX78.js
index 80ad931..b2de6dc 100644
--- a/docs/.vitepress/dist/assets/storage.md.BIcXuQl6.js
+++ b/docs/.vitepress/dist/assets/storage.md.UjlYZX78.js
@@ -1 +1 @@
-import{_ as a,c as e,o as t,a1 as r}from"./chunks/framework.aklsSwTA.js";const u=JSON.parse('{"title":"Storage","description":"","frontmatter":{},"headers":[],"relativePath":"storage.md","filePath":"storage.md","lastUpdated":1719902642000}'),o={name:"storage.md"},s=r('

Storage

Cine Fox supports and recommends the following storage ways on the Raspberry Pi 5

PCIe Hat

USB 3.0

',6),l=[s];function i(n,h,c,d,_,m){return t(),e("div",null,l)}const f=a(o,[["render",i]]);export{u as __pageData,f as default}; +import{_ as a,c as e,o as t,a1 as r}from"./chunks/framework.vateGHBz.js";const u=JSON.parse('{"title":"Storage","description":"","frontmatter":{},"headers":[],"relativePath":"storage.md","filePath":"storage.md","lastUpdated":1719902642000}'),o={name:"storage.md"},s=r('

Storage

Cine Fox supports and recommends the following storage ways on the Raspberry Pi 5

PCIe Hat

USB 3.0

',6),l=[s];function i(n,h,c,d,_,m){return t(),e("div",null,l)}const f=a(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/storage.md.BIcXuQl6.lean.js b/docs/.vitepress/dist/assets/storage.md.UjlYZX78.lean.js similarity index 67% rename from docs/.vitepress/dist/assets/storage.md.BIcXuQl6.lean.js rename to docs/.vitepress/dist/assets/storage.md.UjlYZX78.lean.js index 173cecd..adb519b 100644 --- a/docs/.vitepress/dist/assets/storage.md.BIcXuQl6.lean.js +++ b/docs/.vitepress/dist/assets/storage.md.UjlYZX78.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as t,a1 as r}from"./chunks/framework.aklsSwTA.js";const u=JSON.parse('{"title":"Storage","description":"","frontmatter":{},"headers":[],"relativePath":"storage.md","filePath":"storage.md","lastUpdated":1719902642000}'),o={name:"storage.md"},s=r("",6),l=[s];function i(n,h,c,d,_,m){return t(),e("div",null,l)}const f=a(o,[["render",i]]);export{u as __pageData,f as default}; +import{_ as a,c as e,o as t,a1 as r}from"./chunks/framework.vateGHBz.js";const u=JSON.parse('{"title":"Storage","description":"","frontmatter":{},"headers":[],"relativePath":"storage.md","filePath":"storage.md","lastUpdated":1719902642000}'),o={name:"storage.md"},s=r("",6),l=[s];function i(n,h,c,d,_,m){return t(),e("div",null,l)}const f=a(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/team.md._WEywvvF.js b/docs/.vitepress/dist/assets/team.md.DidUlnGA.js similarity index 86% rename from docs/.vitepress/dist/assets/team.md._WEywvvF.js rename to docs/.vitepress/dist/assets/team.md.DidUlnGA.js index 8058db5..c002501 100644 --- a/docs/.vitepress/dist/assets/team.md._WEywvvF.js +++ b/docs/.vitepress/dist/assets/team.md.DidUlnGA.js @@ -1 +1 @@ -import{V as n,a as m,b as i}from"./chunks/theme.6Kvju6L6.js";import{c as l,I as e,w as t,m as a,o as r,a as o,l as c}from"./chunks/framework.aklsSwTA.js";const u={style:{"text-align":"center"}},f=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home"},"headers":[],"relativePath":"team.md","filePath":"team.md","lastUpdated":1719764689000}'),d={name:"team.md"},w=Object.assign(d,{setup(h){const s=[{avatar:"https://www.github.com/zhouyixun.png",name:"Eason",title:"Developer",links:[{icon:"github",link:"https://github.com/ZhouYixun"},{icon:"youtube",link:"https://www.youtube.com/channel/UCIGQUYUSgaH4A9q1bw6SRkA"}]}];return(p,_)=>(r(),l("div",null,[e(a(i),null,{default:t(()=>[e(a(n),null,{title:t(()=>[o(" Team ")]),lead:t(()=>[o(" Cine Fox is mainly developed by the following core members. ")]),_:1}),c("div",u,[e(a(m),{size:"medium",members:s})])]),_:1})]))}});export{f as __pageData,w as default}; +import{V as n,a as m,b as i}from"./chunks/theme.wu-W8U-f.js";import{c as l,I as e,w as t,m as a,o as r,a as o,l as c}from"./chunks/framework.vateGHBz.js";const u={style:{"text-align":"center"}},f=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home"},"headers":[],"relativePath":"team.md","filePath":"team.md","lastUpdated":1719764689000}'),d={name:"team.md"},w=Object.assign(d,{setup(h){const s=[{avatar:"https://www.github.com/zhouyixun.png",name:"Eason",title:"Developer",links:[{icon:"github",link:"https://github.com/ZhouYixun"},{icon:"youtube",link:"https://www.youtube.com/channel/UCIGQUYUSgaH4A9q1bw6SRkA"}]}];return(p,_)=>(r(),l("div",null,[e(a(i),null,{default:t(()=>[e(a(n),null,{title:t(()=>[o(" Team ")]),lead:t(()=>[o(" Cine Fox is mainly developed by the following core members. ")]),_:1}),c("div",u,[e(a(m),{size:"medium",members:s})])]),_:1})]))}});export{f as __pageData,w as default}; diff --git a/docs/.vitepress/dist/assets/team.md._WEywvvF.lean.js b/docs/.vitepress/dist/assets/team.md.DidUlnGA.lean.js similarity index 86% rename from docs/.vitepress/dist/assets/team.md._WEywvvF.lean.js rename to docs/.vitepress/dist/assets/team.md.DidUlnGA.lean.js index 8058db5..c002501 100644 --- a/docs/.vitepress/dist/assets/team.md._WEywvvF.lean.js +++ b/docs/.vitepress/dist/assets/team.md.DidUlnGA.lean.js @@ -1 +1 @@ -import{V as n,a as m,b as i}from"./chunks/theme.6Kvju6L6.js";import{c as l,I as e,w as t,m as a,o as r,a as o,l as c}from"./chunks/framework.aklsSwTA.js";const u={style:{"text-align":"center"}},f=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home"},"headers":[],"relativePath":"team.md","filePath":"team.md","lastUpdated":1719764689000}'),d={name:"team.md"},w=Object.assign(d,{setup(h){const s=[{avatar:"https://www.github.com/zhouyixun.png",name:"Eason",title:"Developer",links:[{icon:"github",link:"https://github.com/ZhouYixun"},{icon:"youtube",link:"https://www.youtube.com/channel/UCIGQUYUSgaH4A9q1bw6SRkA"}]}];return(p,_)=>(r(),l("div",null,[e(a(i),null,{default:t(()=>[e(a(n),null,{title:t(()=>[o(" Team ")]),lead:t(()=>[o(" Cine Fox is mainly developed by the following core members. ")]),_:1}),c("div",u,[e(a(m),{size:"medium",members:s})])]),_:1})]))}});export{f as __pageData,w as default}; +import{V as n,a as m,b as i}from"./chunks/theme.wu-W8U-f.js";import{c as l,I as e,w as t,m as a,o as r,a as o,l as c}from"./chunks/framework.vateGHBz.js";const u={style:{"text-align":"center"}},f=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home"},"headers":[],"relativePath":"team.md","filePath":"team.md","lastUpdated":1719764689000}'),d={name:"team.md"},w=Object.assign(d,{setup(h){const s=[{avatar:"https://www.github.com/zhouyixun.png",name:"Eason",title:"Developer",links:[{icon:"github",link:"https://github.com/ZhouYixun"},{icon:"youtube",link:"https://www.youtube.com/channel/UCIGQUYUSgaH4A9q1bw6SRkA"}]}];return(p,_)=>(r(),l("div",null,[e(a(i),null,{default:t(()=>[e(a(n),null,{title:t(()=>[o(" Team ")]),lead:t(()=>[o(" Cine Fox is mainly developed by the following core members. ")]),_:1}),c("div",u,[e(a(m),{size:"medium",members:s})])]),_:1})]))}});export{f as __pageData,w as default}; diff --git a/docs/.vitepress/dist/assets/version.md.Ct5UdrYg.js b/docs/.vitepress/dist/assets/version.md.BUpggvb1.js similarity index 92% rename from docs/.vitepress/dist/assets/version.md.Ct5UdrYg.js rename to docs/.vitepress/dist/assets/version.md.BUpggvb1.js index b184ae8..f4e9922 100644 --- a/docs/.vitepress/dist/assets/version.md.Ct5UdrYg.js +++ b/docs/.vitepress/dist/assets/version.md.BUpggvb1.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as o}from"./chunks/framework.aklsSwTA.js";const _=JSON.parse('{"title":"Version","description":"","frontmatter":{},"headers":[],"relativePath":"version.md","filePath":"version.md","lastUpdated":1719764689000}'),i={name:"version.md"},r=o('

Version

v2.0.4

  • Support without CFE Hat, but you need to mount it by yourself

v2.0.3

  • Support edit file name
  • Support delete files
  • Support more FPS and Shuter Angle

v2.0.2

  • Fix some bugs
  • Support usb tethering on Android

v2.0.1

  • Support Zoom function

v2.0.0

  • Support CFE Hat
  • Support auto mount with CFE Hat
  • Support Cine Fox Apk
',11),l=[r];function n(s,u,h,d,c,p){return t(),a("div",null,l)}const m=e(i,[["render",n]]);export{_ as __pageData,m as default}; +import{_ as e,c as a,o as t,a1 as o}from"./chunks/framework.vateGHBz.js";const _=JSON.parse('{"title":"Version","description":"","frontmatter":{},"headers":[],"relativePath":"version.md","filePath":"version.md","lastUpdated":1719764689000}'),i={name:"version.md"},r=o('

Version

v2.0.4

  • Support without CFE Hat, but you need to mount it by yourself

v2.0.3

  • Support edit file name
  • Support delete files
  • Support more FPS and Shuter Angle

v2.0.2

  • Fix some bugs
  • Support usb tethering on Android

v2.0.1

  • Support Zoom function

v2.0.0

  • Support CFE Hat
  • Support auto mount with CFE Hat
  • Support Cine Fox Apk
',11),l=[r];function n(s,u,h,d,c,p){return t(),a("div",null,l)}const m=e(i,[["render",n]]);export{_ as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/version.md.Ct5UdrYg.lean.js b/docs/.vitepress/dist/assets/version.md.BUpggvb1.lean.js similarity index 67% rename from docs/.vitepress/dist/assets/version.md.Ct5UdrYg.lean.js rename to docs/.vitepress/dist/assets/version.md.BUpggvb1.lean.js index 009087e..2331dff 100644 --- a/docs/.vitepress/dist/assets/version.md.Ct5UdrYg.lean.js +++ b/docs/.vitepress/dist/assets/version.md.BUpggvb1.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as o}from"./chunks/framework.aklsSwTA.js";const _=JSON.parse('{"title":"Version","description":"","frontmatter":{},"headers":[],"relativePath":"version.md","filePath":"version.md","lastUpdated":1719764689000}'),i={name:"version.md"},r=o("",11),l=[r];function n(s,u,h,d,c,p){return t(),a("div",null,l)}const m=e(i,[["render",n]]);export{_ as __pageData,m as default}; +import{_ as e,c as a,o as t,a1 as o}from"./chunks/framework.vateGHBz.js";const _=JSON.parse('{"title":"Version","description":"","frontmatter":{},"headers":[],"relativePath":"version.md","filePath":"version.md","lastUpdated":1719764689000}'),i={name:"version.md"},r=o("",11),l=[r];function n(s,u,h,d,c,p){return t(),a("div",null,l)}const m=e(i,[["render",n]]);export{_ as __pageData,m as default}; diff --git a/docs/.vitepress/dist/camera_2.jpg b/docs/.vitepress/dist/camera_2.jpg index 530ab09..2f72732 100644 Binary files a/docs/.vitepress/dist/camera_2.jpg and b/docs/.vitepress/dist/camera_2.jpg differ diff --git a/docs/.vitepress/dist/cfe_card.html b/docs/.vitepress/dist/cfe_card.html index a2ef382..8a2317d 100644 --- a/docs/.vitepress/dist/cfe_card.html +++ b/docs/.vitepress/dist/cfe_card.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

DIY CFE-TypeB Card

CFE-TypeB card cost-effective solution.

Overview

card

DIY CFE-TypeB card only needs NVMe SSD + Any CFE-TypeB card holder. I use JEYI 2280 card holder + Samsung 970 EVO-Plus 2T to build it, it has extremely fast reading and writing speeds, and has very good heat dissipation effect, but the disadvantage is that the shape is relatively long, which may not be convenient for mini shape.

Of course, you can also use NVMe 2230 SSD card to make a more mini DIY CFE-TypeB card, but I haven't made it yet, so I don't have any recommended brands. I may make one in a few weeks.

- +
Skip to content

DIY CFE-TypeB Card

CFE-TypeB card cost-effective solution.

Overview

card

DIY CFE-TypeB card only needs NVMe SSD + Any CFE-TypeB card holder. I use JEYI 2280 card holder + Samsung 970 EVO-Plus 2T to build it, it has extremely fast reading and writing speeds, and has very good heat dissipation effect, but the disadvantage is that the shape is relatively long, which may not be convenient for mini shape.

Of course, you can also use NVMe 2230 SSD card to make a more mini DIY CFE-TypeB card, but I haven't made it yet, so I don't have any recommended brands. I may make one in a few weeks.

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/cfehat.html b/docs/.vitepress/dist/cfehat.html index b86ae71..d5366d9 100644 --- a/docs/.vitepress/dist/cfehat.html +++ b/docs/.vitepress/dist/cfehat.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

RPI5 CFE Hat

CFexpress PCIe Hat for Raspberry Pi 5

Overview

cfe_hat

RPI5-CFE-Hat is an OpenSource CFexpress (CFE) PCIe Hat, which is made by Will Whang. The following introductions are all from Will's project👇

Welcome to the GitHub repository for the open-source CFexpress (CFE) PCIe Hat designed specifically for the Raspberry Pi 5. This project aims to enhance the Raspberry Pi 5 by adding the ability to interface with CFexpress Type B cards directly, enabling high-speed data transfer and storage solutions.

I would highly recommend it, it allows you to quickly change storage and reduces the time of transferring to the computer. After you record, you only need to insert the card into the computer and you can edit directly.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple RPI5-CFE-Hat, but he recommends that users make their own with PCB Plant like JLCPCB and so on, because the key production files are already very complete.

pcb

This is the preview image when I commissioned JLCPCB to make it. 👆

Usage

  1. Connect FPC cables with Pi5 and CFE Hat.
  2. Connect the Qwiic to Pi5

i2c

Here my FPC cable is connected in reverse, but in order to show the i2c connection, I temporarily blur on the ribbon FPC cable. 👆

  1. Then Cine Fox will help you auto mount it to /media/RAW, and you can unmount it on WebUI.
  2. Done!

About FPC Cables

If you want to get the maximum transmission speed, choose ordinary FPC cables and keep them within 3cm.

You can get more detail from Will's Blog

Wiki

Here is the wiki made by Will

- +
Skip to content

RPI5 CFE Hat

CFexpress PCIe Hat for Raspberry Pi 5

Overview

cfe_hat

RPI5-CFE-Hat is an OpenSource CFexpress (CFE) PCIe Hat, which is made by Will Whang. The following introductions are all from Will's project👇

Welcome to the GitHub repository for the open-source CFexpress (CFE) PCIe Hat designed specifically for the Raspberry Pi 5. This project aims to enhance the Raspberry Pi 5 by adding the ability to interface with CFexpress Type B cards directly, enabling high-speed data transfer and storage solutions.

I would highly recommend it, it allows you to quickly change storage and reduces the time of transferring to the computer. After you record, you only need to insert the card into the computer and you can edit directly.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple RPI5-CFE-Hat, but he recommends that users make their own with PCB Plant like JLCPCB and so on, because the key production files are already very complete.

pcb

This is the preview image when I commissioned JLCPCB to make it. 👆

Usage

  1. Connect FPC cables with Pi5 and CFE Hat.
  2. Connect the Qwiic to Pi5

i2c

Here my FPC cable is connected in reverse, but in order to show the i2c connection, I temporarily blur on the ribbon FPC cable. 👆

  1. Then Cine Fox will help you auto mount it to /media/RAW, and you can unmount it on WebUI.
  2. Done!

About FPC Cables

If you want to get the maximum transmission speed, choose ordinary FPC cables and keep them within 3cm.

You can get more detail from Will's Blog

Wiki

Here is the wiki made by Will

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/cine-fox.html b/docs/.vitepress/dist/cine-fox.html index ca719b7..c787db5 100644 --- a/docs/.vitepress/dist/cine-fox.html +++ b/docs/.vitepress/dist/cine-fox.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

What is Cine Fox?

Introduction of Cine Fox.

Overview

Cine Fox is an application built on cinepi-sdk, which allows users to make DIY movie cameras faster. Users only need a few cables to make them easy to use. The operation method mainly relies on your mobile phone.

Picture

Picture2

WARNING

So far, Cine Fox only supports Pi5

Functions

  • Change ISO, FPS, SHUTTER, WB, Zoom from phone
  • Start/Stop record from phone
  • Get Pi's CPU detail from phone
  • Get Image Sensor detail from phone
  • Get SSD detail from phone
  • Edit file's name from phone
  • Delete files from phone
  • coming...

Thanks

Csaba Nagy The CinePI Author.

Will Whang The CFE Hat and Multiple high-quality sensor authors

I would like to thank them for their patience in answering my questions. Without them, I would not be able to produce Cine Fox today.

- +
Skip to content

What is Cine Fox?

Introduction of Cine Fox.

Overview

Cine Fox is an application built on cinepi-sdk, which allows users to make DIY movie cameras faster. Users only need a few cables to make them easy to use. The operation method mainly relies on your mobile phone.

Picture

Picture2

WARNING

So far, Cine Fox only supports Pi5

Functions

  • Change ISO, FPS, SHUTTER, WB, Zoom from phone
  • Start/Stop record from phone
  • Get Pi's CPU detail from phone
  • Get Image Sensor detail from phone
  • Get SSD detail from phone
  • Edit file's name from phone
  • Delete files from phone
  • coming...

Thanks

Csaba Nagy The CinePI Author.

Will Whang The CFE Hat and Multiple high-quality sensor authors

I would like to thank them for their patience in answering my questions. Without them, I would not be able to produce Cine Fox today.

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/external_ssd.html b/docs/.vitepress/dist/external_ssd.html index 63aed0e..3d4000d 100644 --- a/docs/.vitepress/dist/external_ssd.html +++ b/docs/.vitepress/dist/external_ssd.html @@ -8,23 +8,23 @@ - + - - - + + + -
Skip to content

External SSD

Use External SSD with USB 3.0 in Pi5

Overview

ssd

External SSD is also a common storage way, like Samsung T5, T7. It can be easily removed and plugged into a computer to edit your files. However, after Csaba Nagy test, the read and write speed of USB3.0 is limited on Pi5. Here are his original words in Discord:

In general I would recommend the CFE HAT if you want to do above 30p or the 16-bit mode ( which is limited to 25p ) as those can easily exceed 400MB/s +

Therefore, if it is not used for high FPS and high-quality shooting, then External SSD can meet the requirements. Otherwise, RPI5-CFE-Hat is still recommended.

I used to use this way, but I stopped using it after I switched Raspberry Pi High Quality Camera to StarlightEyes.

Usage

  1. Flash image, you can do this step first.
  2. Run command
shell
git clone https://github.com/cinepi/udev-media-automount.git
+    
Skip to content

External SSD

Use External SSD with USB 3.0 in Pi5

Overview

ssd

External SSD is also a common storage way, like Samsung T5, T7. It can be easily removed and plugged into a computer to edit your files. However, after Csaba Nagy test, the read and write speed of USB3.0 is limited on Pi5. Here are his original words in Discord:

In general I would recommend the CFE HAT if you want to do above 30p or the 16-bit mode ( which is limited to 25p ) as those can easily exceed 400MB/s +

Therefore, if it is not used for high FPS and high-quality shooting, then External SSD can meet the requirements. Otherwise, RPI5-CFE-Hat is still recommended.

I used to use this way, but I stopped using it after I switched Raspberry Pi High Quality Camera to StarlightEyes.

Usage

  1. Flash image, you can do this step first.
  2. Run command
shell
git clone https://github.com/cinepi/udev-media-automount.git
 cd udev-media-automount
 sudo make install
 sudo udevadm control --reload-rules
 sudo udevadm trigger
 sudo reboot

Now it can auto mount your SSD now.

- + \ No newline at end of file diff --git a/docs/.vitepress/dist/hardware.html b/docs/.vitepress/dist/hardware.html index 79726e1..b1aebd5 100644 --- a/docs/.vitepress/dist/hardware.html +++ b/docs/.vitepress/dist/hardware.html @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git a/docs/.vitepress/dist/hashmap.json b/docs/.vitepress/dist/hashmap.json index 5d9fdb6..b539563 100644 --- a/docs/.vitepress/dist/hashmap.json +++ b/docs/.vitepress/dist/hashmap.json @@ -1 +1 @@ -{"cfe_card.md":"COuietkI","cfehat.md":"C900C0Qr","android.md":"DpcUSkv6","sbc.md":"D_i2UUoO","software.md":"D4f5_yYU","hq_camera.md":"DUWRV-vk","starlighteye.md":"CF4dVpmK","storage.md":"BIcXuQl6","hardware.md":"CnW1tD-I","team.md":"_WEywvvF","external_ssd.md":"D1McLtz0","image_sensor.md":"DgDd_Kx6","ios.md":"B7m7Qqf9","nvme.md":"fBVw7Fk8","oneincheye.md":"D4BdtUEH","index.md":"CdaxeZQ6","pi.md":"DtBKahMS","cine-fox.md":"nJ8sU_qJ","power_management.md":"CQ8-y3gB","version.md":"Ct5UdrYg"} +{"cfehat.md":"BOOItrbQ","cine-fox.md":"fZRod5tq","storage.md":"UjlYZX78","team.md":"DidUlnGA","version.md":"BUpggvb1","starlighteye.md":"BUnUp5JJ","external_ssd.md":"D3CIzlNa","ios.md":"BoextKv0","oneincheye.md":"vAxt6b0s","pi.md":"DKC65Oyz","power_management.md":"DFHd5fiA","sbc.md":"DU-aqrEb","software.md":"B-pO_mN6","hardware.md":"B5dfh4fn","hq_camera.md":"D-IwqXFN","image_sensor.md":"D7UKqu5W","index.md":"DbzmSXJ1","android.md":"i-npF07s","nvme.md":"kxn7c60C","cfe_card.md":"Dk9ZeM_J"} diff --git a/docs/.vitepress/dist/hq_camera.html b/docs/.vitepress/dist/hq_camera.html index df3e1ce..64e13cf 100644 --- a/docs/.vitepress/dist/hq_camera.html +++ b/docs/.vitepress/dist/hq_camera.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

Raspberry Pi High Quality Camera

12.3 megapixel Sony IMX477 sensor, 7.9mm diagonal image size, and back-illuminated sensor architecture, with adjustable back focus.

Overview

hq

Raspberry Pi High Quality Camera is the highest resolution camera in the Raspberry Pi Foundation. I used it before, but I stopped using it after I used the better StarlightEye.

Usage

Just connect the cable, the driver is already on pi5.

Wiki

Official Wiki

- +
Skip to content

Raspberry Pi High Quality Camera

12.3 megapixel Sony IMX477 sensor, 7.9mm diagonal image size, and back-illuminated sensor architecture, with adjustable back focus.

Overview

hq

Raspberry Pi High Quality Camera is the highest resolution camera in the Raspberry Pi Foundation. I used it before, but I stopped using it after I used the better StarlightEye.

Usage

Just connect the cable, the driver is already on pi5.

Wiki

Official Wiki

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/image_sensor.html b/docs/.vitepress/dist/image_sensor.html index 6ad514e..44261f8 100644 --- a/docs/.vitepress/dist/image_sensor.html +++ b/docs/.vitepress/dist/image_sensor.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

Image Sensor

Cine Fox supports and recommends the following Image Sensors on the Raspberry Pi 5

CSI Image Sensors

Cameras not listed here may potentionally work, but aren't tested and configured.

- +
Skip to content

Image Sensor

Cine Fox supports and recommends the following Image Sensors on the Raspberry Pi 5

CSI Image Sensors

Cameras not listed here may potentionally work, but aren't tested and configured.

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/index.html b/docs/.vitepress/dist/index.html index 59c4f22..0056578 100644 --- a/docs/.vitepress/dist/index.html +++ b/docs/.vitepress/dist/index.html @@ -8,18 +8,18 @@ - + - - - + + +
Skip to content

Cine Fox

Cine Fox is an application built on cinepi-sdk, which allows users to make DIY movie cameras faster.

- + \ No newline at end of file diff --git a/docs/.vitepress/dist/ios.html b/docs/.vitepress/dist/ios.html index bb6138a..93d0d28 100644 --- a/docs/.vitepress/dist/ios.html +++ b/docs/.vitepress/dist/ios.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

iOS App

I am working on developing an iOS App and have not yet released it. Currently I can only use the following steps:

  1. Turn on the hotspot, connect the cable, and select USB network sharing
  2. Launch Safari
  3. go to cinepi:5678/web
- +
Skip to content

iOS App

I am working on developing an iOS App and have not yet released it. Currently I can only use the following steps:

  1. Turn on the hotspot, connect the cable, and select USB network sharing
  2. Launch Safari
  3. go to cinepi:5678/web
+ \ No newline at end of file diff --git a/docs/.vitepress/dist/nvme.html b/docs/.vitepress/dist/nvme.html index f1bcc24..0354840 100644 --- a/docs/.vitepress/dist/nvme.html +++ b/docs/.vitepress/dist/nvme.html @@ -8,21 +8,21 @@ - + - - - + + + -
Skip to content

NVMe SSD Hat

Use NVMe SSD Hat on Pi

Overview

nvme

After Pi5's PCIE information has been published, there are many NVME SSD Hat on the market (like 52Pi, WaveShare, Geekworm and so on), all of which work well and have very fast read and write speeds.

But I actually don't recommend this way for Cine Fox.

I have also used this way for storage before, but it is very inconvenient because you need to consider how to transfer the files to the computer for editing. Whether it is network file sharing or using file transfer software, it is very slow. And I cannot quickly remove the NVMe SSD to replace another one.

Of course, if you have a way to solve the problem of convenience, then this method is also suitable for you.

Usage

  1. Install hat and NVMe SSD, then run
shell
sudo nano /boot/firmware/config.txt
shell
# Enable the PCIe External connector.
+    
Skip to content

NVMe SSD Hat

Use NVMe SSD Hat on Pi

Overview

nvme

After Pi5's PCIE information has been published, there are many NVME SSD Hat on the market (like 52Pi, WaveShare, Geekworm and so on), all of which work well and have very fast read and write speeds.

But I actually don't recommend this way for Cine Fox.

I have also used this way for storage before, but it is very inconvenient because you need to consider how to transfer the files to the computer for editing. Whether it is network file sharing or using file transfer software, it is very slow. And I cannot quickly remove the NVMe SSD to replace another one.

Of course, if you have a way to solve the problem of convenience, then this method is also suitable for you.

Usage

  1. Install hat and NVMe SSD, then run
shell
sudo nano /boot/firmware/config.txt
shell
# Enable the PCIe External connector.
 dtparam=pciex1

Press Ctrl-O, then enter, to write the change to the file.

Press Ctrl-X to exit nano (the editor).

  1. run command
shell
sudo fdisk /dev/nvme0n1

You can see commands by m.
Choose “n” to create a new partition, then “p” then “1” to create a new primary partition.
Just use defaults, or just press enter when you asked about sector numbers.
Then “w” to write the data to the disk.
(in my case I did't need "w")

  1. make file system
shell
# reference site shows /dev/nvme0n1p1 but in may case, it was /dev/nvme0n1
 sudo mkfs -t ext4 /dev/nvme0n1p1

You can pick which file systems you want, but ext4 might be the best, I think.

  1. make mount point
shell
sudo mkdir /media/RAW
 sudo chmod 777 /media/RAW
  1. mount
shell
sudo mount /dev/nvme0n1p1 /media/RAW

Done!

👆 Part of the above content comes from here, thanks to this article

Mount SSD when Boot

After creating the partition, you only need to execute this command. You can add it to the service or use crontab to complete it.

shell
sudo mount /dev/nvme0n1p1 /media/RAW
- + \ No newline at end of file diff --git a/docs/.vitepress/dist/oneincheye.html b/docs/.vitepress/dist/oneincheye.html index 3bb257f..8dc75bc 100644 --- a/docs/.vitepress/dist/oneincheye.html +++ b/docs/.vitepress/dist/oneincheye.html @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git a/docs/.vitepress/dist/pi.html b/docs/.vitepress/dist/pi.html index b9906f9..517638c 100644 --- a/docs/.vitepress/dist/pi.html +++ b/docs/.vitepress/dist/pi.html @@ -3,23 +3,23 @@ - Raspberry Pi | Cine Fox + Raspberry Pi 5 | Cine Fox - + - - - + + + - - +
Skip to content

Raspberry Pi 5

The everything computer.

Overview

pi

Cine Fox is based on cinepi-sdk. Currently, cinepi-sdk only works on Pi5 and can bring out the performance of Pi5. This is the introduction of Pi5 on the official website of Raspberry Pi:

Raspberry Pi 5 features the Broadcom BCM2712 quad-core Arm Cortex A76 processor @ 2.4GHz, making it up to three times faster than the previous generation. With RAM variants up to 8GB, this is the fastest, smoothest Raspberry Pi experience yet.

Although Pi5 still has some shortcomings, since it is the only choice at present, I don't think I need to introduce it specially.🙂

Usage

It should be noted that Pi5 requires a stable 5V5A power supply and you need to use the necessary cooling fan or heat sink.

Wiki

Official Wiki

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/power_management.html b/docs/.vitepress/dist/power_management.html index 3d43719..8e48f2e 100644 --- a/docs/.vitepress/dist/power_management.html +++ b/docs/.vitepress/dist/power_management.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

Power Management

Power Management for SBC's

Overview

power

Because with the upgrade of Pi5, Pi official also recommends 5V5A power supply for Pi5, but most specifications of power on the market are 5V3A, which cannot reach 5A. This may make PCIE and USB peripherals to not have enough power, so we need to use power management.

There are generally two ways:

  • Power Management Hat
  • DC-DC converter

I have used both ways, and I personally prefer Hat's way.

Recommend

Here I list some hardware I have used. You can also use different ones yourself. You just need to pay attention to the input voltage and output voltage and current.

Power Management Hat

  • Geekworm X735 V3.0 & Momentary switch 💴Buy 📕Wiki (⭐Recommend)
  • 52Pi EP-0104 💴Buy 📕Wiki

DC-DC converter

  • dc-dc converter 💴Buy

About Battery

There are many options for batteries. You just need to make sure that the voltage and capacity are sufficient. I recommend V-mount batteries like SmallRig VB50 💴Buy.

- +
Skip to content

Power Management

Power Management for SBC's

Overview

power

Because with the upgrade of Pi5, Pi official also recommends 5V5A power supply for Pi5, but most specifications of power on the market are 5V3A, which cannot reach 5A. This may make PCIE and USB peripherals to not have enough power, so we need to use power management.

There are generally two ways:

  • Power Management Hat
  • DC-DC converter

I have used both ways, and I personally prefer Hat's way.

Recommend

Here I list some hardware I have used. You can also use different ones yourself. You just need to pay attention to the input voltage and output voltage and current.

Power Management Hat

  • Geekworm X735 V3.0 & Momentary switch 💴Buy 📕Wiki (⭐Recommend)
  • 52Pi EP-0104 💴Buy 📕Wiki

DC-DC converter

  • dc-dc converter 💴Buy

About Battery

There are many options for batteries. You just need to make sure that the voltage and capacity are sufficient. I recommend V-mount batteries like SmallRig VB50 💴Buy.

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/sbc.html b/docs/.vitepress/dist/sbc.html index e564aac..639b5fa 100644 --- a/docs/.vitepress/dist/sbc.html +++ b/docs/.vitepress/dist/sbc.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

SBC's

Single Board Computers for Cine-Fox

Overview

Single Board Computers are little computer's like the Raspberry Pi, which are build to run computing tasks efficiently.

Currently Cine-Fox supports:

- +
Skip to content

SBC's

Single Board Computers for Cine-Fox

Overview

Single Board Computers are little computer's like the Raspberry Pi, which are build to run computing tasks efficiently.

Currently Cine-Fox supports:

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/software.html b/docs/.vitepress/dist/software.html index 66e325f..0a2e609 100644 --- a/docs/.vitepress/dist/software.html +++ b/docs/.vitepress/dist/software.html @@ -8,17 +8,17 @@ - + - - - + + + -
Skip to content

Software

Install Cine-Fox in your Pi5.

Overview

soft

Install Cine Fox on your Pi. After installation, you can use USB network tethering to access the Cine Fox webUI interface on your mobile phone using a browser.

For Android users, I recommend installing Android App, which can achieve more functions.

Install Cine-Fox

  1. Flash cinepi-sdk to your micro-sd card
  2. run command and make sure it works
shell
./run-raw.sh
  1. Since the current cinepi-sdk image is a pre-release version, some functions need to be fixed. Cine-Fox/cinepi-raw is the version I have fixed. You need to overwrite it in the /home/pi/cinepi-raw.
  2. run command to recompile
shell
./compile-raw.sh
  1. Download cine-fox
shell
wget https://github.com/Cine-Fox/cine-fox.github.io/raw/main/docs/public/cine-fox

Or you can click here to download manually and send it to your pi

  1. run command
shell
sudo chmod 777 cine-fox
+    
Skip to content

Software

Install Cine-Fox in your Pi5.

Overview

soft

Install Cine Fox on your Pi. After installation, you can use USB network tethering to access the Cine Fox webUI interface on your mobile phone using a browser.

For Android users, I recommend installing Android App, which can directly open the WebUI, saving the time of opening the browser and entering the URL.

Install Cine-Fox

  1. Flash cinepi-sdk to your micro-sd card
  2. run command and make sure it works
shell
./run-raw.sh
  1. Since the current cinepi-sdk image is a pre-release version, some functions need to be fixed. Cine-Fox/cinepi-raw is the version I have fixed. You need to overwrite it in the /home/pi/cinepi-raw.
  2. run command to recompile
shell
./compile-raw.sh
  1. Download cine-fox
shell
wget https://github.com/Cine-Fox/cine-fox.github.io/raw/main/docs/public/cine-fox

Or you can click here to download manually and send it to your pi

  1. run command
shell
sudo chmod 777 cine-fox
 sudo ./cine-fox

TIP

if you use without CFE Hat, you should run ./cine-fox --cfe-hat=false

  1. open your browser and type <your-pi-ip>:5678/web
  2. Done!

Without CFE Hat

if you use cine-fox without CFE Hat, you need to mount SSD to /media/RAW manually.

Run Cine-Fox when boot

  1. Run command
shell
sudo nano /lib/systemd/system/cine-fox.service
  1. Enter the following
shell
[Unit]
 Description=Cine Fox Service
 After=multi-user.target
@@ -46,8 +46,8 @@
 
 [Install]
 WantedBy=multi-user.target
shell
sudo chmod 777 /lib/systemd/system/cinepi-raw.service
-sudo systemctl enable cinepi-raw.service
  1. reboot
- +sudo systemctl enable cinepi-raw.service
  1. reboot
+ \ No newline at end of file diff --git a/docs/.vitepress/dist/starlighteye.html b/docs/.vitepress/dist/starlighteye.html index 5747b23..3eb1ecf 100644 --- a/docs/.vitepress/dist/starlighteye.html +++ b/docs/.vitepress/dist/starlighteye.html @@ -8,24 +8,24 @@ - + - - - + + + -
Skip to content

StarlightEye

OpenSource IMX585 Camera Board for Raspberry Pi

Overview

Pic

StarlightEye is an OpenSource IMX585 Camera Board, which is made by Will Whang. The following introductions are all from Will's project👇

Welcome to the StarlightEye project, an open-source camera board designed for Raspberry Pi Compute Module 4 boards using the IMX585. This project aims to provide a high-quality, affordable, and accessible camera module for advanced Raspberry Pi projects. The board is designed using KiCad v6, a popular open-source electronics design automation (EDA) software.

StarlightEye captures stunning high-resolution images and videos with improved low-light performance and dynamic range. It's perfect for photography enthusiasts, developers, and makers who want to level up their Raspberry Pi projects with a powerful camera.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple StarlightEyes, but he recommends that users make their own with PCB Plant like JLCPCB and so on, because the key production files are already very complete.

pcb

This is the preview image when I commissioned JLCPCB to make it. 👆

Usage

Step 1: Modify dtoverlay

you will need to modify the config.txt found in the boot partition after you are flashing your cinepi-sdk.

shell
# StarlightEye Module ( default camera port 1 )
+    
Skip to content

StarlightEye

OpenSource IMX585 Camera Board for Raspberry Pi

Overview

Pic

StarlightEye is an OpenSource IMX585 Camera Board, which is made by Will Whang. The following introductions are all from Will's project👇

Welcome to the StarlightEye project, an open-source camera board designed for Raspberry Pi Compute Module 4 boards using the IMX585. This project aims to provide a high-quality, affordable, and accessible camera module for advanced Raspberry Pi projects. The board is designed using KiCad v6, a popular open-source electronics design automation (EDA) software.

StarlightEye captures stunning high-resolution images and videos with improved low-light performance and dynamic range. It's perfect for photography enthusiasts, developers, and makers who want to level up their Raspberry Pi projects with a powerful camera.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple StarlightEyes, but he recommends that users make their own with PCB Plant like JLCPCB and so on, because the key production files are already very complete.

pcb

This is the preview image when I commissioned JLCPCB to make it. 👆

Usage

Step 1: Modify dtoverlay

you will need to modify the config.txt found in the boot partition after you are flashing your cinepi-sdk.

shell
# StarlightEye Module ( default camera port 1 )
 camera_auto_detect=0
 dtoverlay=imx585

Step 2: Recompile driver

Initially, the default imx585 driver of current pre-release cinepi-sdk is not made for StarlightEye, so the i2c address needs to be changed and recompiled.

You can use the following two ways to complete it 👇


Use git pull

you can run this command

shell
cd ~/driver/imx585-v4l2-driver/
 git pull
 ./setup.sh

Done!


Modify manually

if you can not use git, you can do it manually

shell
cd ~/driver/imx585-v4l2-driver/

modify the overlay

shell
            cam_node: imx585@37 {
                 reg = <0x37>;

To

shell
            cam_node: imx585@37 {
                 reg = <0x1A>;

then run ./setup.sh

Done!

Wiki

Here is the wiki made by Will

- + \ No newline at end of file diff --git a/docs/.vitepress/dist/storage.html b/docs/.vitepress/dist/storage.html index 40b58c6..6163275 100644 --- a/docs/.vitepress/dist/storage.html +++ b/docs/.vitepress/dist/storage.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

Storage

Cine Fox supports and recommends the following storage ways on the Raspberry Pi 5

PCIe Hat

USB 3.0

- +
Skip to content

Storage

Cine Fox supports and recommends the following storage ways on the Raspberry Pi 5

PCIe Hat

USB 3.0

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/team.html b/docs/.vitepress/dist/team.html index 005a5e5..56c6c58 100644 --- a/docs/.vitepress/dist/team.html +++ b/docs/.vitepress/dist/team.html @@ -8,18 +8,18 @@ - + - - - + + +
Skip to content

Team

Cine Fox is mainly developed by the following core members.

Eason

Eason

Developer

- + \ No newline at end of file diff --git a/docs/.vitepress/dist/version.html b/docs/.vitepress/dist/version.html index d3aa050..4fdad80 100644 --- a/docs/.vitepress/dist/version.html +++ b/docs/.vitepress/dist/version.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

Version

v2.0.4

  • Support without CFE Hat, but you need to mount it by yourself

v2.0.3

  • Support edit file name
  • Support delete files
  • Support more FPS and Shuter Angle

v2.0.2

  • Fix some bugs
  • Support usb tethering on Android

v2.0.1

  • Support Zoom function

v2.0.0

  • Support CFE Hat
  • Support auto mount with CFE Hat
  • Support Cine Fox Apk
- +
Skip to content

Version

v2.0.4

  • Support without CFE Hat, but you need to mount it by yourself

v2.0.3

  • Support edit file name
  • Support delete files
  • Support more FPS and Shuter Angle

v2.0.2

  • Fix some bugs
  • Support usb tethering on Android

v2.0.1

  • Support Zoom function

v2.0.0

  • Support CFE Hat
  • Support auto mount with CFE Hat
  • Support Cine Fox Apk
+ \ No newline at end of file