diff --git a/docs/.vitepress/cache/deps/_metadata.json b/docs/.vitepress/cache/deps/_metadata.json index 4fd86b3..a991713 100644 --- a/docs/.vitepress/cache/deps/_metadata.json +++ b/docs/.vitepress/cache/deps/_metadata.json @@ -1,25 +1,25 @@ { - "hash": "2fb2d87e", - "configHash": "731f1c33", - "lockfileHash": "34fbc699", - "browserHash": "b8c98f10", + "hash": "0d7833a6", + "configHash": "441c59ee", + "lockfileHash": "946443c1", + "browserHash": "6f1bf9f6", "optimized": { "vue": { "src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "3f15abbe", + "fileHash": "9e432fc6", "needsInterop": false }, "vitepress > @vue/devtools-api": { "src": "../../../../node_modules/@vue/devtools-api/dist/index.js", "file": "vitepress___@vue_devtools-api.js", - "fileHash": "950776e1", + "fileHash": "6ce817b9", "needsInterop": false }, "vitepress > @vueuse/core": { "src": "../../../../node_modules/@vueuse/core/index.mjs", "file": "vitepress___@vueuse_core.js", - "fileHash": "3e3e65c3", + "fileHash": "1bd90ca8", "needsInterop": false } }, diff --git a/docs/.vitepress/config.mjs b/docs/.vitepress/config.mjs index 7b55b52..1712f9f 100644 --- a/docs/.vitepress/config.mjs +++ b/docs/.vitepress/config.mjs @@ -109,6 +109,12 @@ export default defineConfig({ }, ] }, + { + text: 'Editing', + items: [ + {text: 'DaVinci Resolve', link: '/davinci'}, + ], + } ], socialLinks: [ diff --git a/docs/.vitepress/dist/404.html b/docs/.vitepress/dist/404.html index b67d9ef..8c5dc84 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 6f63e88..d295ca7 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
- + \ No newline at end of file diff --git a/docs/.vitepress/dist/app-debug.apk b/docs/.vitepress/dist/app-debug.apk index a03fdaa..96178bd 100644 Binary files a/docs/.vitepress/dist/app-debug.apk and b/docs/.vitepress/dist/app-debug.apk differ diff --git a/docs/.vitepress/dist/assets/android.md.C7iyk_ej.js b/docs/.vitepress/dist/assets/android.md.TOxrgUrt.js similarity index 93% rename from docs/.vitepress/dist/assets/android.md.C7iyk_ej.js rename to docs/.vitepress/dist/assets/android.md.TOxrgUrt.js index c79eb3a..0f69cf5 100644 --- a/docs/.vitepress/dist/assets/android.md.C7iyk_ej.js +++ b/docs/.vitepress/dist/assets/android.md.TOxrgUrt.js @@ -1,4 +1,4 @@ -import{_ as a,c as e,o as s,a1 as t}from"./chunks/framework.nXcGTvHh.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
+import{_ as a,c as e,o as s,a1 as t}from"./chunks/framework.C9-aDgxC.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.C7iyk_ej.lean.js b/docs/.vitepress/dist/assets/android.md.TOxrgUrt.lean.js similarity index 68% rename from docs/.vitepress/dist/assets/android.md.C7iyk_ej.lean.js rename to docs/.vitepress/dist/assets/android.md.TOxrgUrt.lean.js index e991c58..1ea5c52 100644 --- a/docs/.vitepress/dist/assets/android.md.C7iyk_ej.lean.js +++ b/docs/.vitepress/dist/assets/android.md.TOxrgUrt.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as s,a1 as t}from"./chunks/framework.nXcGTvHh.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}; +import{_ as a,c as e,o as s,a1 as t}from"./chunks/framework.C9-aDgxC.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.xpqW3drs.js b/docs/.vitepress/dist/assets/app.CAex3qLO.js similarity index 72% rename from docs/.vitepress/dist/assets/app.xpqW3drs.js rename to docs/.vitepress/dist/assets/app.CAex3qLO.js index a606d84..7499449 100644 --- a/docs/.vitepress/dist/assets/app.xpqW3drs.js +++ b/docs/.vitepress/dist/assets/app.CAex3qLO.js @@ -1 +1 @@ -import{R as i}from"./chunks/theme.p8UKa21c.js";import{U as o,ai as u,aj as l,ak as c,al as f,am as d,an as m,ao as h,ap as g,aq as A,ar as v,d as y,u as P,k as w,y as C,as as R,at as b,au as E,av as S}from"./chunks/framework.nXcGTvHh.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=y({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=P();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=v(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.CDm_CtcQ.js";import{U as o,aj as u,ak as l,al as c,am as f,an as d,ao as m,ap as h,aq as g,ar as A,as as v,d as w,u as y,k as P,y as C,at as R,au as b,av as E,aw as S}from"./chunks/framework.C9-aDgxC.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=w({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return P(()=>{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=v(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.BLIu7aWj.js b/docs/.vitepress/dist/assets/cfe_card.md.BLIu7aWj.js deleted file mode 100644 index 5f7ec08..0000000 --- a/docs/.vitepress/dist/assets/cfe_card.md.BLIu7aWj.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as r,a1 as t,l as o,a2 as i}from"./chunks/framework.nXcGTvHh.js";const w=JSON.parse('{"title":"DIY CFE-TypeB Card","description":"","frontmatter":{},"headers":[],"relativePath":"cfe_card.md","filePath":"cfe_card.md","lastUpdated":1719826283000}'),c={name:"cfe_card.md"},d=t('

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. My two cards were made in

  • JEYI 2280 card adapter + Samsung 970 EVO-Plus 2T
  • ZITAY 2230 card adapter + WD SN740

They has extremely fast reading and writing speeds, and has very good heat dissipation effect. I recommend the 2230 size, which is easy to carry and will not hinder your shooting when using it. But if you use it for long-term shooting and larger capacity, I recommend the 2280 size.

How to make it?

',8),s=o("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/7wKL-6GBSw8?si=lHNireKPicTYYE7-",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),n=[d,s];function l(h,p,_,m,u,f){return r(),a("div",null,n)}const T=e(c,[["render",l]]);export{w as __pageData,T as default}; diff --git a/docs/.vitepress/dist/assets/cfe_card.md.BLIu7aWj.lean.js b/docs/.vitepress/dist/assets/cfe_card.md.BLIu7aWj.lean.js deleted file mode 100644 index 5cfa680..0000000 --- a/docs/.vitepress/dist/assets/cfe_card.md.BLIu7aWj.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as r,a1 as t,l as o,a2 as i}from"./chunks/framework.nXcGTvHh.js";const w=JSON.parse('{"title":"DIY CFE-TypeB Card","description":"","frontmatter":{},"headers":[],"relativePath":"cfe_card.md","filePath":"cfe_card.md","lastUpdated":1719826283000}'),c={name:"cfe_card.md"},d=t("",8),s=o("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/7wKL-6GBSw8?si=lHNireKPicTYYE7-",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),n=[d,s];function l(h,p,_,m,u,f){return r(),a("div",null,n)}const T=e(c,[["render",l]]);export{w as __pageData,T as default}; diff --git a/docs/.vitepress/dist/assets/cfe_card.md.CoOllQG-.js b/docs/.vitepress/dist/assets/cfe_card.md.CoOllQG-.js new file mode 100644 index 0000000..84a8c27 --- /dev/null +++ b/docs/.vitepress/dist/assets/cfe_card.md.CoOllQG-.js @@ -0,0 +1,33 @@ +import{_ as i,c as a,o as n,a1 as s,l as e,a2 as h}from"./chunks/framework.C9-aDgxC.js";const E=JSON.parse('{"title":"DIY CFE-TypeB Card","description":"","frontmatter":{},"headers":[],"relativePath":"cfe_card.md","filePath":"cfe_card.md","lastUpdated":1720457414000}'),t={name:"cfe_card.md"},l=s('

DIY CFE-TypeB Card

CFE-TypeB card cost-effective solution.

Overview

card

DIY CFE-TypeB card only needs NVMe SSD + Any CFE-TypeB card adapter. My two cards were made in

  • JEYI 2280 card adapter + Samsung 970 EVO-Plus 2T
  • ZITAY 2230 card adapter + WD SN740

They have extremely fast reading and writing speeds.

How to make it?

',8),p=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/7wKL-6GBSw8?si=lHNireKPicTYYE7-",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),k=s(`

Which size should I choose?

I recommend the 2230 size, which is easy to carry and will not hinder your shooting when in use. But if you are shooting for a long time and the capacity is large, I recommend the 2280 size.

Because the 2230 card is shorter and has less exposed parts, the heat dissipation effect is worse than the 2280 card. When the card temperature is too high due to long-term recording, it will slightly affect the CPU usage and writing speed during writing.

The following are the speeds I tested, it will be affected by the SSD, so it is just for reference:

  • 2230
shell
# Initial
+
+pi@cinepi:~ $ ./test_speed_multi /media/RAW
+Total data written: 1500 MB
+Time taken: 2.05 seconds
+Write speed: 730.71 MB/s
+User CPU time used: 0.00 seconds
+System CPU time used: 0.04 seconds
+
+# After fever
+
+pi@cinepi:~ $ ./test_speed_multi /media/RAW
+Total data written: 1500 MB
+Time taken: 2.42 seconds
+Write speed: 620.26 MB/s
+User CPU time used: 0.00 seconds
+System CPU time used: 0.04 seconds
  • 2280
shell
# Initial
+
+pi@cinepi:~ $ ./test_speed_multi /media/RAW
+Total data written: 1500 MB
+Time taken: 2.03 seconds
+Write speed: 740.12 MB/s
+User CPU time used: 0.00 seconds
+System CPU time used: 0.04 seconds
+
+# After fever
+
+pi@cinepi:~ $ ./test_speed_multi /media/RAW
+Total data written: 1500 MB
+Time taken: 2.03 seconds
+Write speed: 737.25 MB/s
+User CPU time used: 0.00 seconds
+System CPU time used: 0.05 seconds
`,8),F=[l,p,k];function r(d,C,y,c,g,o){return n(),a("div",null,F)}const u=i(t,[["render",r]]);export{E as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/cfe_card.md.CoOllQG-.lean.js b/docs/.vitepress/dist/assets/cfe_card.md.CoOllQG-.lean.js new file mode 100644 index 0000000..c3a4b99 --- /dev/null +++ b/docs/.vitepress/dist/assets/cfe_card.md.CoOllQG-.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,a1 as s,l as e,a2 as h}from"./chunks/framework.C9-aDgxC.js";const E=JSON.parse('{"title":"DIY CFE-TypeB Card","description":"","frontmatter":{},"headers":[],"relativePath":"cfe_card.md","filePath":"cfe_card.md","lastUpdated":1720457414000}'),t={name:"cfe_card.md"},l=s("",8),p=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/7wKL-6GBSw8?si=lHNireKPicTYYE7-",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),k=s("",8),F=[l,p,k];function r(d,C,y,c,g,o){return n(),a("div",null,F)}const u=i(t,[["render",r]]);export{E as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/cfehat.md.CXvosWNg.js b/docs/.vitepress/dist/assets/cfehat.md.Cio0ef4w.js similarity index 98% rename from docs/.vitepress/dist/assets/cfehat.md.CXvosWNg.js rename to docs/.vitepress/dist/assets/cfehat.md.Cio0ef4w.js index c703d91..1f4b282 100644 --- a/docs/.vitepress/dist/assets/cfehat.md.CXvosWNg.js +++ b/docs/.vitepress/dist/assets/cfehat.md.Cio0ef4w.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.nXcGTvHh.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.C9-aDgxC.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.CXvosWNg.lean.js b/docs/.vitepress/dist/assets/cfehat.md.Cio0ef4w.lean.js similarity index 84% rename from docs/.vitepress/dist/assets/cfehat.md.CXvosWNg.lean.js rename to docs/.vitepress/dist/assets/cfehat.md.Cio0ef4w.lean.js index b54d2e5..aa937b9 100644 --- a/docs/.vitepress/dist/assets/cfehat.md.CXvosWNg.lean.js +++ b/docs/.vitepress/dist/assets/cfehat.md.Cio0ef4w.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.nXcGTvHh.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.C9-aDgxC.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.nXcGTvHh.js b/docs/.vitepress/dist/assets/chunks/framework.C9-aDgxC.js similarity index 74% rename from docs/.vitepress/dist/assets/chunks/framework.nXcGTvHh.js rename to docs/.vitepress/dist/assets/chunks/framework.C9-aDgxC.js index 969727e..ecbed37 100644 --- a/docs/.vitepress/dist/assets/chunks/framework.nXcGTvHh.js +++ b/docs/.vitepress/dist/assets/chunks/framework.C9-aDgxC.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="/imx283.png",cf="/pi.jpg",af="/power.jpg",ff="/software.jpg",uf="/imx585.jpg",df="/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 hf(...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 pf(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 gf(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 mf(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 _f(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 yf(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 bf(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()),vf=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"])}}),wf=pi({setup(e,{slots:t}){const n=ae(!1);return Ct(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Ef(){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 Cf(){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 xf(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 Sf(){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,yf as H,fe as I,ja as J,Ji as K,no as L,Ql as M,vt as N,mf as O,gs as P,hf as Q,Cn as R,gf as S,Vi as T,ge as U,wn as V,pf 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,df as ah,xf as ai,xa as aj,_f as ak,ba as al,vf as am,wf as an,at as ao,za as ap,bf as aq,Ea as ar,Sf as as,Cf as at,Ef as au,fs as av,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="/davinci.jpg",sf="/external_ssd.png",rf="/hardware.png",of="/hq_camera.jpg",lf="/nvme.jpg",cf="/imx283.png",af="/pi.jpg",ff="/power.jpg",uf="/software.jpg",df="/imx585.jpg",hf="/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 pf(...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 gf(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 mf(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 _f(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 yf(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 bf(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 vf(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()),wf=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"])}}),Ef=pi({setup(e,{slots:t}){const n=ae(!1);return Ct(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Cf(){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 xf(){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 Sf(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 Tf(){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,bf as H,fe as I,ja as J,Ji as K,no as L,Ql as M,vt as N,_f as O,gs as P,pf as Q,Cn as R,mf as S,Vi as T,ge as U,wn as V,gf 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,df as ah,hf as ai,Sf as aj,xa as ak,yf as al,ba as am,wf as an,Ef as ao,at as ap,za as aq,vf as ar,Ea as as,Tf as at,xf as au,Cf as av,fs as aw,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.p8UKa21c.js b/docs/.vitepress/dist/assets/chunks/theme.CDm_CtcQ.js similarity index 99% rename from docs/.vitepress/dist/assets/chunks/theme.p8UKa21c.js rename to docs/.vitepress/dist/assets/chunks/theme.CDm_CtcQ.js index 5a561c3..4efab54 100644 --- a/docs/.vitepress/dist/assets/chunks/theme.p8UKa21c.js +++ b/docs/.vitepress/dist/assets/chunks/theme.CDm_CtcQ.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.nXcGTvHh.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.C9-aDgxC.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.ZqPVYCeZ.js b/docs/.vitepress/dist/assets/cine-fox.md.vdvn9JpH.js similarity index 97% rename from docs/.vitepress/dist/assets/cine-fox.md.ZqPVYCeZ.js rename to docs/.vitepress/dist/assets/cine-fox.md.vdvn9JpH.js index cbb38db..dd4d470 100644 --- a/docs/.vitepress/dist/assets/cine-fox.md.ZqPVYCeZ.js +++ b/docs/.vitepress/dist/assets/cine-fox.md.vdvn9JpH.js @@ -1 +1 @@ -import{_ as e,c as a,o,a1 as t,a6 as i,a7 as n}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.ZqPVYCeZ.lean.js b/docs/.vitepress/dist/assets/cine-fox.md.vdvn9JpH.lean.js similarity index 84% rename from docs/.vitepress/dist/assets/cine-fox.md.ZqPVYCeZ.lean.js rename to docs/.vitepress/dist/assets/cine-fox.md.vdvn9JpH.lean.js index fb99eb7..acf4cf1 100644 --- a/docs/.vitepress/dist/assets/cine-fox.md.ZqPVYCeZ.lean.js +++ b/docs/.vitepress/dist/assets/cine-fox.md.vdvn9JpH.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o,a1 as t,a6 as i,a7 as n}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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/davinci.md.BbDOfD9F.js b/docs/.vitepress/dist/assets/davinci.md.BbDOfD9F.js new file mode 100644 index 0000000..a062b3e --- /dev/null +++ b/docs/.vitepress/dist/assets/davinci.md.BbDOfD9F.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as a,a1 as t,a8 as o}from"./chunks/framework.C9-aDgxC.js";const u=JSON.parse('{"title":"DaVinci Resolve","description":"","frontmatter":{},"headers":[],"relativePath":"davinci.md","filePath":"davinci.md","lastUpdated":null}'),n={name:"davinci.md"},r=t('

DaVinci Resolve

DaVinci Resolve is the world's only all in one solution for editing, color, VFX, motion graphics and audio!

Overview

davinci

DaVinci Resolve can directly edit Cinema DNG files recorded by cinepi-raw. To use it, just drag the entire folder starting with CINEPI into it.

',5),c=[r];function s(d,l,_,v,p,h){return a(),i("div",null,c)}const f=e(n,[["render",s]]);export{u as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/davinci.md.BbDOfD9F.lean.js b/docs/.vitepress/dist/assets/davinci.md.BbDOfD9F.lean.js new file mode 100644 index 0000000..ccad158 --- /dev/null +++ b/docs/.vitepress/dist/assets/davinci.md.BbDOfD9F.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as a,a1 as t,a8 as o}from"./chunks/framework.C9-aDgxC.js";const u=JSON.parse('{"title":"DaVinci Resolve","description":"","frontmatter":{},"headers":[],"relativePath":"davinci.md","filePath":"davinci.md","lastUpdated":null}'),n={name:"davinci.md"},r=t("",5),c=[r];function s(d,l,_,v,p,h){return a(),i("div",null,c)}const f=e(n,[["render",s]]);export{u as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/external_ssd.md.FOqzvB9H.js b/docs/.vitepress/dist/assets/external_ssd.md.DPePC47q.js similarity index 96% rename from docs/.vitepress/dist/assets/external_ssd.md.FOqzvB9H.js rename to docs/.vitepress/dist/assets/external_ssd.md.DPePC47q.js index bcacd95..1a6937b 100644 --- a/docs/.vitepress/dist/assets/external_ssd.md.FOqzvB9H.js +++ b/docs/.vitepress/dist/assets/external_ssd.md.DPePC47q.js @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as e,a1 as i,a8 as t}from"./chunks/framework.nXcGTvHh.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,a9 as t}from"./chunks/framework.C9-aDgxC.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.FOqzvB9H.lean.js b/docs/.vitepress/dist/assets/external_ssd.md.DPePC47q.lean.js
similarity index 69%
rename from docs/.vitepress/dist/assets/external_ssd.md.FOqzvB9H.lean.js
rename to docs/.vitepress/dist/assets/external_ssd.md.DPePC47q.lean.js
index 7b9f357..8cca7a7 100644
--- a/docs/.vitepress/dist/assets/external_ssd.md.FOqzvB9H.lean.js
+++ b/docs/.vitepress/dist/assets/external_ssd.md.DPePC47q.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as e,a1 as i,a8 as t}from"./chunks/framework.nXcGTvHh.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,a9 as t}from"./chunks/framework.C9-aDgxC.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.DMSiUi4B.js b/docs/.vitepress/dist/assets/hardware.md.1lbQQlIV.js
similarity index 87%
rename from docs/.vitepress/dist/assets/hardware.md.DMSiUi4B.js
rename to docs/.vitepress/dist/assets/hardware.md.1lbQQlIV.js
index 27da72f..2399c4c 100644
--- a/docs/.vitepress/dist/assets/hardware.md.DMSiUi4B.js
+++ b/docs/.vitepress/dist/assets/hardware.md.1lbQQlIV.js
@@ -1 +1 @@
-import{_ as a,c as e,o as r,a1 as t,a9 as i}from"./chunks/framework.nXcGTvHh.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,aa as i}from"./chunks/framework.C9-aDgxC.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.DMSiUi4B.lean.js b/docs/.vitepress/dist/assets/hardware.md.1lbQQlIV.lean.js similarity index 68% rename from docs/.vitepress/dist/assets/hardware.md.DMSiUi4B.lean.js rename to docs/.vitepress/dist/assets/hardware.md.1lbQQlIV.lean.js index 8bbe8f8..1706b7c 100644 --- a/docs/.vitepress/dist/assets/hardware.md.DMSiUi4B.lean.js +++ b/docs/.vitepress/dist/assets/hardware.md.1lbQQlIV.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as r,a1 as t,a9 as i}from"./chunks/framework.nXcGTvHh.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,aa as i}from"./chunks/framework.C9-aDgxC.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.BAey4fTZ.js b/docs/.vitepress/dist/assets/hq_camera.md.Ck2BsT9-.js similarity index 92% rename from docs/.vitepress/dist/assets/hq_camera.md.BAey4fTZ.js rename to docs/.vitepress/dist/assets/hq_camera.md.Ck2BsT9-.js index 846d834..3b65007 100644 --- a/docs/.vitepress/dist/assets/hq_camera.md.BAey4fTZ.js +++ b/docs/.vitepress/dist/assets/hq_camera.md.Ck2BsT9-.js @@ -1 +1 @@ -import{_ as a,c as e,o as r,a1 as t,aa as i}from"./chunks/framework.nXcGTvHh.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,ab as i}from"./chunks/framework.C9-aDgxC.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.BAey4fTZ.lean.js b/docs/.vitepress/dist/assets/hq_camera.md.Ck2BsT9-.lean.js similarity index 70% rename from docs/.vitepress/dist/assets/hq_camera.md.BAey4fTZ.lean.js rename to docs/.vitepress/dist/assets/hq_camera.md.Ck2BsT9-.lean.js index 419a8dd..9904f37 100644 --- a/docs/.vitepress/dist/assets/hq_camera.md.BAey4fTZ.lean.js +++ b/docs/.vitepress/dist/assets/hq_camera.md.Ck2BsT9-.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as r,a1 as t,aa as i}from"./chunks/framework.nXcGTvHh.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,ab as i}from"./chunks/framework.C9-aDgxC.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.DbA9WIzi.js b/docs/.vitepress/dist/assets/image_sensor.md.CG9tPVRH.js similarity index 88% rename from docs/.vitepress/dist/assets/image_sensor.md.DbA9WIzi.js rename to docs/.vitepress/dist/assets/image_sensor.md.CG9tPVRH.js index c51a898..e0bf1d5 100644 --- a/docs/.vitepress/dist/assets/image_sensor.md.DbA9WIzi.js +++ b/docs/.vitepress/dist/assets/image_sensor.md.CG9tPVRH.js @@ -1 +1 @@ -import{_ as e,c as a,o as s,a1 as r}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.DbA9WIzi.lean.js b/docs/.vitepress/dist/assets/image_sensor.md.CG9tPVRH.lean.js similarity index 69% rename from docs/.vitepress/dist/assets/image_sensor.md.DbA9WIzi.lean.js rename to docs/.vitepress/dist/assets/image_sensor.md.CG9tPVRH.lean.js index 5fa572c..aba299d 100644 --- a/docs/.vitepress/dist/assets/image_sensor.md.DbA9WIzi.lean.js +++ b/docs/.vitepress/dist/assets/image_sensor.md.CG9tPVRH.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as s,a1 as r}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.DLnvKFKL.js b/docs/.vitepress/dist/assets/index.md.D54RihT3.js similarity index 93% rename from docs/.vitepress/dist/assets/index.md.DLnvKFKL.js rename to docs/.vitepress/dist/assets/index.md.D54RihT3.js index d24981b..e8cd7cc 100644 --- a/docs/.vitepress/dist/assets/index.md.DLnvKFKL.js +++ b/docs/.vitepress/dist/assets/index.md.D54RihT3.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.DLnvKFKL.lean.js b/docs/.vitepress/dist/assets/index.md.D54RihT3.lean.js similarity index 93% rename from docs/.vitepress/dist/assets/index.md.DLnvKFKL.lean.js rename to docs/.vitepress/dist/assets/index.md.D54RihT3.lean.js index d24981b..e8cd7cc 100644 --- a/docs/.vitepress/dist/assets/index.md.DLnvKFKL.lean.js +++ b/docs/.vitepress/dist/assets/index.md.D54RihT3.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.DW4xWrbo.js b/docs/.vitepress/dist/assets/ios.md.BAMSpg7E.js similarity index 92% rename from docs/.vitepress/dist/assets/ios.md.DW4xWrbo.js rename to docs/.vitepress/dist/assets/ios.md.BAMSpg7E.js index a0ced2f..9d6f846 100644 --- a/docs/.vitepress/dist/assets/ios.md.DW4xWrbo.js +++ b/docs/.vitepress/dist/assets/ios.md.BAMSpg7E.js @@ -1 +1 @@ -import{_ as a,c as o,o as n,l as e,a as t}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.DW4xWrbo.lean.js b/docs/.vitepress/dist/assets/ios.md.BAMSpg7E.lean.js similarity index 92% rename from docs/.vitepress/dist/assets/ios.md.DW4xWrbo.lean.js rename to docs/.vitepress/dist/assets/ios.md.BAMSpg7E.lean.js index a0ced2f..9d6f846 100644 --- a/docs/.vitepress/dist/assets/ios.md.DW4xWrbo.lean.js +++ b/docs/.vitepress/dist/assets/ios.md.BAMSpg7E.lean.js @@ -1 +1 @@ -import{_ as a,c as o,o as n,l as e,a as t}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.DmqDekf7.js b/docs/.vitepress/dist/assets/nvme.md.ByDiVmDx.js similarity index 97% rename from docs/.vitepress/dist/assets/nvme.md.DmqDekf7.js rename to docs/.vitepress/dist/assets/nvme.md.ByDiVmDx.js index aa5c0cc..4cf452b 100644 --- a/docs/.vitepress/dist/assets/nvme.md.DmqDekf7.js +++ b/docs/.vitepress/dist/assets/nvme.md.ByDiVmDx.js @@ -1,4 +1,4 @@ -import{_ as s,c as e,o as a,a1 as t,ab as i}from"./chunks/framework.nXcGTvHh.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,ac as i}from"./chunks/framework.C9-aDgxC.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}; +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,c,k,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.DmqDekf7.lean.js b/docs/.vitepress/dist/assets/nvme.md.ByDiVmDx.lean.js similarity index 52% rename from docs/.vitepress/dist/assets/nvme.md.DmqDekf7.lean.js rename to docs/.vitepress/dist/assets/nvme.md.ByDiVmDx.lean.js index 44891ff..b24317a 100644 --- a/docs/.vitepress/dist/assets/nvme.md.DmqDekf7.lean.js +++ b/docs/.vitepress/dist/assets/nvme.md.ByDiVmDx.lean.js @@ -1 +1 @@ -import{_ as s,c as e,o as a,a1 as t,ab as i}from"./chunks/framework.nXcGTvHh.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,ac as i}from"./chunks/framework.C9-aDgxC.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,c,k,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.03SqGA3R.js b/docs/.vitepress/dist/assets/oneincheye.md.Df0nqKHy.js similarity index 96% rename from docs/.vitepress/dist/assets/oneincheye.md.03SqGA3R.js rename to docs/.vitepress/dist/assets/oneincheye.md.Df0nqKHy.js index 8131694..90ce836 100644 --- a/docs/.vitepress/dist/assets/oneincheye.md.03SqGA3R.js +++ b/docs/.vitepress/dist/assets/oneincheye.md.Df0nqKHy.js @@ -1,3 +1,3 @@ -import{_ as e,c as a,o as i,a1 as t,ac as r}from"./chunks/framework.nXcGTvHh.js";const f=JSON.parse('{"title":"OneInchEye","description":"","frontmatter":{},"headers":[],"relativePath":"oneincheye.md","filePath":"oneincheye.md","lastUpdated":1719990175000}'),o={name:"oneincheye.md"},s=t('

OneInchEye

OpenSource IMX283 Camera Board for Raspberry Pi

Overview

pcb

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

Welcome to the OneInchEye project, an open-source camera board designed for Raspberry Pi Compute Module 4 boards using the IMX283 one-inch sensor. 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.

OneInchEye 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. The board also features a TMP117 temperature sensor for accurate temperature readings.

Please note that the OneInchEye is not compatible with most Raspberry Pi boards because it requires 22-pin FPC connector with 4-lane MIPI-CSI interface. Ensure compatibility with your specific board before proceeding.

But Will said StarlightEye is more suitable for video cropping, so I never test OneInchEye.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple OneInchEyes, 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.

Usage

Modify dtoverlay

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

shell
# OneInchEye Module ( default camera port 1 )
+import{_ as e,c as a,o as i,a1 as t,ad as r}from"./chunks/framework.C9-aDgxC.js";const f=JSON.parse('{"title":"OneInchEye","description":"","frontmatter":{},"headers":[],"relativePath":"oneincheye.md","filePath":"oneincheye.md","lastUpdated":1719990175000}'),o={name:"oneincheye.md"},s=t('

OneInchEye

OpenSource IMX283 Camera Board for Raspberry Pi

Overview

pcb

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

Welcome to the OneInchEye project, an open-source camera board designed for Raspberry Pi Compute Module 4 boards using the IMX283 one-inch sensor. 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.

OneInchEye 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. The board also features a TMP117 temperature sensor for accurate temperature readings.

Please note that the OneInchEye is not compatible with most Raspberry Pi boards because it requires 22-pin FPC connector with 4-lane MIPI-CSI interface. Ensure compatibility with your specific board before proceeding.

But Will said StarlightEye is more suitable for video cropping, so I never test OneInchEye.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple OneInchEyes, 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.

Usage

Modify dtoverlay

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

shell
# OneInchEye Module ( default camera port 1 )
 camera_auto_detect=0
 dtoverlay=imx283

Wiki

Here is the wiki made by Will

`,15),n=[s];function h(l,c,p,d,u,m){return i(),a("div",null,n)}const g=e(o,[["render",h]]);export{f as __pageData,g as default}; diff --git a/docs/.vitepress/dist/assets/oneincheye.md.03SqGA3R.lean.js b/docs/.vitepress/dist/assets/oneincheye.md.Df0nqKHy.lean.js similarity index 69% rename from docs/.vitepress/dist/assets/oneincheye.md.03SqGA3R.lean.js rename to docs/.vitepress/dist/assets/oneincheye.md.Df0nqKHy.lean.js index 082ebb8..f35ddd5 100644 --- a/docs/.vitepress/dist/assets/oneincheye.md.03SqGA3R.lean.js +++ b/docs/.vitepress/dist/assets/oneincheye.md.Df0nqKHy.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as i,a1 as t,ac as r}from"./chunks/framework.nXcGTvHh.js";const f=JSON.parse('{"title":"OneInchEye","description":"","frontmatter":{},"headers":[],"relativePath":"oneincheye.md","filePath":"oneincheye.md","lastUpdated":1719990175000}'),o={name:"oneincheye.md"},s=t("",15),n=[s];function h(l,c,p,d,u,m){return i(),a("div",null,n)}const g=e(o,[["render",h]]);export{f as __pageData,g as default}; +import{_ as e,c as a,o as i,a1 as t,ad as r}from"./chunks/framework.C9-aDgxC.js";const f=JSON.parse('{"title":"OneInchEye","description":"","frontmatter":{},"headers":[],"relativePath":"oneincheye.md","filePath":"oneincheye.md","lastUpdated":1719990175000}'),o={name:"oneincheye.md"},s=t("",15),n=[s];function h(l,c,p,d,u,m){return i(),a("div",null,n)}const g=e(o,[["render",h]]);export{f as __pageData,g as default}; diff --git a/docs/.vitepress/dist/assets/pi.md.CpeCUTl7.js b/docs/.vitepress/dist/assets/pi.md.BA9vmAz4.js similarity index 93% rename from docs/.vitepress/dist/assets/pi.md.CpeCUTl7.js rename to docs/.vitepress/dist/assets/pi.md.BA9vmAz4.js index cdecb1c..1050783 100644 --- a/docs/.vitepress/dist/assets/pi.md.CpeCUTl7.js +++ b/docs/.vitepress/dist/assets/pi.md.BA9vmAz4.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as r,ad as i}from"./chunks/framework.nXcGTvHh.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(h,c,l,d,u,_){return t(),a("div",null,n)}const f=e(o,[["render",p]]);export{b as __pageData,f as default}; +import{_ as e,c as a,o as t,a1 as r,ae as i}from"./chunks/framework.C9-aDgxC.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(h,c,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.CpeCUTl7.lean.js b/docs/.vitepress/dist/assets/pi.md.BA9vmAz4.lean.js similarity index 67% rename from docs/.vitepress/dist/assets/pi.md.CpeCUTl7.lean.js rename to docs/.vitepress/dist/assets/pi.md.BA9vmAz4.lean.js index 59fb004..b8dc6d7 100644 --- a/docs/.vitepress/dist/assets/pi.md.CpeCUTl7.lean.js +++ b/docs/.vitepress/dist/assets/pi.md.BA9vmAz4.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as r,ad as i}from"./chunks/framework.nXcGTvHh.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(h,c,l,d,u,_){return t(),a("div",null,n)}const f=e(o,[["render",p]]);export{b as __pageData,f as default}; +import{_ as e,c as a,o as t,a1 as r,ae as i}from"./chunks/framework.C9-aDgxC.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(h,c,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/power_management.md.DV0nfqV1.js b/docs/.vitepress/dist/assets/power_management.md.a9l0NDZq.js similarity index 96% rename from docs/.vitepress/dist/assets/power_management.md.DV0nfqV1.js rename to docs/.vitepress/dist/assets/power_management.md.a9l0NDZq.js index 44f1304..026a3f2 100644 --- a/docs/.vitepress/dist/assets/power_management.md.DV0nfqV1.js +++ b/docs/.vitepress/dist/assets/power_management.md.a9l0NDZq.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,a1 as t,ae as o}from"./chunks/framework.nXcGTvHh.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,af as o}from"./chunks/framework.C9-aDgxC.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.DV0nfqV1.lean.js b/docs/.vitepress/dist/assets/power_management.md.a9l0NDZq.lean.js similarity index 71% rename from docs/.vitepress/dist/assets/power_management.md.DV0nfqV1.lean.js rename to docs/.vitepress/dist/assets/power_management.md.a9l0NDZq.lean.js index 3827abb..161831e 100644 --- a/docs/.vitepress/dist/assets/power_management.md.DV0nfqV1.lean.js +++ b/docs/.vitepress/dist/assets/power_management.md.a9l0NDZq.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,a1 as t,ae as o}from"./chunks/framework.nXcGTvHh.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,af as o}from"./chunks/framework.C9-aDgxC.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.DQEuX2hF.js b/docs/.vitepress/dist/assets/sbc.md.B-LCxkJB.js similarity index 86% rename from docs/.vitepress/dist/assets/sbc.md.DQEuX2hF.js rename to docs/.vitepress/dist/assets/sbc.md.B-LCxkJB.js index b0b61d2..6ea8ecf 100644 --- a/docs/.vitepress/dist/assets/sbc.md.DQEuX2hF.js +++ b/docs/.vitepress/dist/assets/sbc.md.B-LCxkJB.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as r}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.DQEuX2hF.lean.js b/docs/.vitepress/dist/assets/sbc.md.B-LCxkJB.lean.js similarity index 66% rename from docs/.vitepress/dist/assets/sbc.md.DQEuX2hF.lean.js rename to docs/.vitepress/dist/assets/sbc.md.B-LCxkJB.lean.js index 0a44257..ebcc777 100644 --- a/docs/.vitepress/dist/assets/sbc.md.DQEuX2hF.lean.js +++ b/docs/.vitepress/dist/assets/sbc.md.B-LCxkJB.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a1 as r}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.CygCFyls.js b/docs/.vitepress/dist/assets/software.md.CygCFyls.js deleted file mode 100644 index 510ef97..0000000 --- a/docs/.vitepress/dist/assets/software.md.CygCFyls.js +++ /dev/null @@ -1,29 +0,0 @@ -import{_ as s,c as i,o as a,a1 as e,af as n}from"./chunks/framework.nXcGTvHh.js";const u=JSON.parse('{"title":"Software","description":"","frontmatter":{},"headers":[],"relativePath":"software.md","filePath":"software.md","lastUpdated":1720187335000}'),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. Download and unzip cinepi-sdk-001.zip to your micro-sd card, and insert the card into the Pi.
  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://raw.githubusercontent.com/Cine-Fox/cine-fox.github.io/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
-
-[Service]
-Type=idle
-ExecStart=/home/pi/cine-fox
-User=root
-Group=root
-StandardOutput=syslog
-StandardError=syslog
-
-[Install]
-WantedBy=multi-user.target

TIP

if you use without CFE Hat, you replace /home/pi/cine-fox to /home/pi/cine-fox --cfe-hat=false

  1. Run command
shell
sudo chmod 777 /lib/systemd/system/cine-fox.service
-sudo systemctl enable cine-fox.service
  1. Do the same thing with cinepi-raw.service
shell
sudo nano /lib/systemd/system/cinepi-raw.service
shell
[Unit]
-Description=CinePi Raw Service
-After=multi-user.target
-
-[Service]
-Type=idle
-ExecStart=/home/pi/run-raw.sh
-User=pi
-StandardOutput=syslog
-StandardError=syslog
-
-[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}; diff --git a/docs/.vitepress/dist/assets/software.md.CygCFyls.lean.js b/docs/.vitepress/dist/assets/software.md.CygCFyls.lean.js deleted file mode 100644 index 90b429e..0000000 --- a/docs/.vitepress/dist/assets/software.md.CygCFyls.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a1 as e,af as n}from"./chunks/framework.nXcGTvHh.js";const u=JSON.parse('{"title":"Software","description":"","frontmatter":{},"headers":[],"relativePath":"software.md","filePath":"software.md","lastUpdated":1720187335000}'),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/software.md.bK_ZEl73.js b/docs/.vitepress/dist/assets/software.md.bK_ZEl73.js new file mode 100644 index 0000000..29837c8 --- /dev/null +++ b/docs/.vitepress/dist/assets/software.md.bK_ZEl73.js @@ -0,0 +1,38 @@ +import{_ as s,c as i,o as a,a1 as e,ag as n}from"./chunks/framework.C9-aDgxC.js";const y=JSON.parse('{"title":"Software","description":"","frontmatter":{},"headers":[],"relativePath":"software.md","filePath":"software.md","lastUpdated":1720585392000}'),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.

WARNING

The installation process may be a bit troublesome, which requires some patience. In the near future, I will make an .img to facilitate direct flashing of cine-fox

Install Software

Step1: Prepare cinepi-sdk

  1. unzip or use software like Belena Etcher to flash the cinepi-sdk-001.zip directly to a micro-sd card. After plugging in the Raspberry Pi, turn it on and plug in the network cable.

TIP

The following commands need to be executed using SSH.

  • On Windows, use win+R to enter cmd to enter the terminal. enter ssh pi@cinepi.local and type 1.
  • On MacOS, open the terminal tool, enter ssh pi@cinepi.local and type 1.
  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.
shell
cd cinepi-raw
+git remote add cinefox https://github.com/Cine-Fox/cinepi-raw.git
+git remote remove origin
+git remote rename cinefox origin
+git fetch --all
+git reset --hard origin/cinepi-sdk-001
+cd ~
  1. run command to recompile
shell
./compile-raw.sh
  1. If everything is normal, update ./run-raw.sh
shell
sudo nano run-raw.sh
+
+# and modify the command like this:
+cinepi-raw --post-process-file ~/post-processing.json -n --mode 2028:1520:12:U --width 1280 --height 720 --lores-width 1280 --lores-height 720
  1. run cinepi-raw again
shell
./run-raw.sh

Step2: Install Cine-Fox

  1. Open another terminal, and download cine-fox
shell
wget https://raw.githubusercontent.com/Cine-Fox/cine-fox.github.io/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 sudo ./cine-fox --cfe-hat=false

  1. open your browser and type <your-pi-ip>:5678/web
  2. After testing all functions, you can add a service to automatically start cinepi-raw and cine-fox when the Raspberry Pi is boot. 👇

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
+
+[Service]
+Type=idle
+ExecStart=/home/pi/cine-fox
+User=root
+Group=root
+StandardOutput=syslog
+StandardError=syslog
+
+[Install]
+WantedBy=multi-user.target

TIP

if you use without CFE Hat, you replace /home/pi/cine-fox to /home/pi/cine-fox --cfe-hat=false

  1. Run command
shell
sudo chmod 777 /lib/systemd/system/cine-fox.service
+sudo systemctl enable cine-fox.service
  1. Do the same thing with cinepi-raw.service
shell
sudo nano /lib/systemd/system/cinepi-raw.service
shell
[Unit]
+Description=CinePi Raw Service
+After=multi-user.target
+
+[Service]
+Type=idle
+ExecStart=/home/pi/run-raw.sh
+User=pi
+StandardOutput=syslog
+StandardError=syslog
+
+[Install]
+WantedBy=multi-user.target
shell
sudo chmod 777 /lib/systemd/system/cinepi-raw.service
+sudo systemctl enable cinepi-raw.service
  1. reboot

Without CFE Hat

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

`,42),h=[l];function p(k,r,o,d,c,F){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.bK_ZEl73.lean.js b/docs/.vitepress/dist/assets/software.md.bK_ZEl73.lean.js new file mode 100644 index 0000000..942ff24 --- /dev/null +++ b/docs/.vitepress/dist/assets/software.md.bK_ZEl73.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a1 as e,ag as n}from"./chunks/framework.C9-aDgxC.js";const y=JSON.parse('{"title":"Software","description":"","frontmatter":{},"headers":[],"relativePath":"software.md","filePath":"software.md","lastUpdated":1720585392000}'),t={name:"software.md"},l=e("",42),h=[l];function p(k,r,o,d,c,F){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/starlighteye.md.BD0OKBUi.js b/docs/.vitepress/dist/assets/starlighteye.md.BD0OKBUi.js deleted file mode 100644 index d258b70..0000000 --- a/docs/.vitepress/dist/assets/starlighteye.md.BD0OKBUi.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as a,c as e,o as i,a1 as s,ag as t,ah as l}from"./chunks/framework.nXcGTvHh.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
-./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

`,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/starlighteye.md.BD0OKBUi.lean.js b/docs/.vitepress/dist/assets/starlighteye.md.BD0OKBUi.lean.js deleted file mode 100644 index 3a2e531..0000000 --- a/docs/.vitepress/dist/assets/starlighteye.md.BD0OKBUi.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as e,o as i,a1 as s,ag as t,ah as l}from"./chunks/framework.nXcGTvHh.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/starlighteye.md.DMJqhjIg.js b/docs/.vitepress/dist/assets/starlighteye.md.DMJqhjIg.js new file mode 100644 index 0000000..5ec06e2 --- /dev/null +++ b/docs/.vitepress/dist/assets/starlighteye.md.DMJqhjIg.js @@ -0,0 +1,5 @@ +import{_ as e,c as a,o as i,a1 as t,ah as s,ai as r}from"./chunks/framework.C9-aDgxC.js";const y=JSON.parse('{"title":"StarlightEye","description":"","frontmatter":{},"headers":[],"relativePath":"starlighteye.md","filePath":"starlighteye.md","lastUpdated":1720581063000}'),l={name:"starlighteye.md"},o=t('

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 way to complete it 👇

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

Done!

Wiki

Here is the wiki made by Will

`,21),n=[o];function h(p,d,c,g,u,m){return i(),a("div",null,n)}const f=e(l,[["render",h]]);export{y as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/starlighteye.md.DMJqhjIg.lean.js b/docs/.vitepress/dist/assets/starlighteye.md.DMJqhjIg.lean.js new file mode 100644 index 0000000..896da03 --- /dev/null +++ b/docs/.vitepress/dist/assets/starlighteye.md.DMJqhjIg.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as i,a1 as t,ah as s,ai as r}from"./chunks/framework.C9-aDgxC.js";const y=JSON.parse('{"title":"StarlightEye","description":"","frontmatter":{},"headers":[],"relativePath":"starlighteye.md","filePath":"starlighteye.md","lastUpdated":1720581063000}'),l={name:"starlighteye.md"},o=t("",21),n=[o];function h(p,d,c,g,u,m){return i(),a("div",null,n)}const f=e(l,[["render",h]]);export{y as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/storage.md.BzlfteFe.js b/docs/.vitepress/dist/assets/storage.md.CjCyfTkZ.js similarity index 88% rename from docs/.vitepress/dist/assets/storage.md.BzlfteFe.js rename to docs/.vitepress/dist/assets/storage.md.CjCyfTkZ.js index b90a434..1cf8bb2 100644 --- a/docs/.vitepress/dist/assets/storage.md.BzlfteFe.js +++ b/docs/.vitepress/dist/assets/storage.md.CjCyfTkZ.js @@ -1 +1 @@ -import{_ as a,c as e,o as t,a1 as r}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.BzlfteFe.lean.js b/docs/.vitepress/dist/assets/storage.md.CjCyfTkZ.lean.js similarity index 67% rename from docs/.vitepress/dist/assets/storage.md.BzlfteFe.lean.js rename to docs/.vitepress/dist/assets/storage.md.CjCyfTkZ.lean.js index eb96b5e..1f52a57 100644 --- a/docs/.vitepress/dist/assets/storage.md.BzlfteFe.lean.js +++ b/docs/.vitepress/dist/assets/storage.md.CjCyfTkZ.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as t,a1 as r}from"./chunks/framework.nXcGTvHh.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.C9-aDgxC.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.DnLinnGI.js b/docs/.vitepress/dist/assets/team.md.D3QYVN-z.js similarity index 86% rename from docs/.vitepress/dist/assets/team.md.DnLinnGI.js rename to docs/.vitepress/dist/assets/team.md.D3QYVN-z.js index a574b8b..c39dade 100644 --- a/docs/.vitepress/dist/assets/team.md.DnLinnGI.js +++ b/docs/.vitepress/dist/assets/team.md.D3QYVN-z.js @@ -1 +1 @@ -import{V as n,a as m,b as i}from"./chunks/theme.p8UKa21c.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.nXcGTvHh.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.CDm_CtcQ.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.C9-aDgxC.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.DnLinnGI.lean.js b/docs/.vitepress/dist/assets/team.md.D3QYVN-z.lean.js similarity index 86% rename from docs/.vitepress/dist/assets/team.md.DnLinnGI.lean.js rename to docs/.vitepress/dist/assets/team.md.D3QYVN-z.lean.js index a574b8b..c39dade 100644 --- a/docs/.vitepress/dist/assets/team.md.DnLinnGI.lean.js +++ b/docs/.vitepress/dist/assets/team.md.D3QYVN-z.lean.js @@ -1 +1 @@ -import{V as n,a as m,b as i}from"./chunks/theme.p8UKa21c.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.nXcGTvHh.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.CDm_CtcQ.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.C9-aDgxC.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.D2S_XppC.js b/docs/.vitepress/dist/assets/version.md.xku_6eWR.js similarity index 92% rename from docs/.vitepress/dist/assets/version.md.D2S_XppC.js rename to docs/.vitepress/dist/assets/version.md.xku_6eWR.js index 9c38611..491e337 100644 --- a/docs/.vitepress/dist/assets/version.md.D2S_XppC.js +++ b/docs/.vitepress/dist/assets/version.md.xku_6eWR.js @@ -1 +1 @@ -import{_ as a,c as e,o as t,a1 as o}from"./chunks/framework.nXcGTvHh.js";const _=JSON.parse('{"title":"Version","description":"","frontmatter":{},"headers":[],"relativePath":"version.md","filePath":"version.md","lastUpdated":1720187387000}'),i={name:"version.md"},r=o('

Version

v2.0.5

  • Support replay record files

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
',13),l=[r];function n(u,s,h,d,c,p){return t(),e("div",null,l)}const m=a(i,[["render",n]]);export{_ as __pageData,m as default}; +import{_ as a,c as e,o as t,a1 as o}from"./chunks/framework.C9-aDgxC.js";const _=JSON.parse('{"title":"Version","description":"","frontmatter":{},"headers":[],"relativePath":"version.md","filePath":"version.md","lastUpdated":1720187387000}'),i={name:"version.md"},r=o('

Version

v2.0.5

  • Support replay record files

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
',13),l=[r];function n(u,s,h,d,c,p){return t(),e("div",null,l)}const m=a(i,[["render",n]]);export{_ as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/version.md.D2S_XppC.lean.js b/docs/.vitepress/dist/assets/version.md.xku_6eWR.lean.js similarity index 67% rename from docs/.vitepress/dist/assets/version.md.D2S_XppC.lean.js rename to docs/.vitepress/dist/assets/version.md.xku_6eWR.lean.js index 994aaa3..8ba8d13 100644 --- a/docs/.vitepress/dist/assets/version.md.D2S_XppC.lean.js +++ b/docs/.vitepress/dist/assets/version.md.xku_6eWR.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as t,a1 as o}from"./chunks/framework.nXcGTvHh.js";const _=JSON.parse('{"title":"Version","description":"","frontmatter":{},"headers":[],"relativePath":"version.md","filePath":"version.md","lastUpdated":1720187387000}'),i={name:"version.md"},r=o("",13),l=[r];function n(u,s,h,d,c,p){return t(),e("div",null,l)}const m=a(i,[["render",n]]);export{_ as __pageData,m as default}; +import{_ as a,c as e,o as t,a1 as o}from"./chunks/framework.C9-aDgxC.js";const _=JSON.parse('{"title":"Version","description":"","frontmatter":{},"headers":[],"relativePath":"version.md","filePath":"version.md","lastUpdated":1720187387000}'),i={name:"version.md"},r=o("",13),l=[r];function n(u,s,h,d,c,p){return t(),e("div",null,l)}const m=a(i,[["render",n]]);export{_ as __pageData,m as default}; diff --git a/docs/.vitepress/dist/cfe_card.html b/docs/.vitepress/dist/cfe_card.html index d7c1713..8deb31a 100644 --- a/docs/.vitepress/dist/cfe_card.html +++ b/docs/.vitepress/dist/cfe_card.html @@ -8,18 +8,50 @@ - + - - - + + + -
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. My two cards were made in

  • JEYI 2280 card adapter + Samsung 970 EVO-Plus 2T
  • ZITAY 2230 card adapter + WD SN740

They has extremely fast reading and writing speeds, and has very good heat dissipation effect. I recommend the 2230 size, which is easy to carry and will not hinder your shooting when using it. But if you use it for long-term shooting and larger capacity, I recommend the 2280 size.

How to make it?

- +
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 adapter. My two cards were made in

  • JEYI 2280 card adapter + Samsung 970 EVO-Plus 2T
  • ZITAY 2230 card adapter + WD SN740

They have extremely fast reading and writing speeds.

How to make it?

Which size should I choose?

I recommend the 2230 size, which is easy to carry and will not hinder your shooting when in use. But if you are shooting for a long time and the capacity is large, I recommend the 2280 size.

Because the 2230 card is shorter and has less exposed parts, the heat dissipation effect is worse than the 2280 card. When the card temperature is too high due to long-term recording, it will slightly affect the CPU usage and writing speed during writing.

The following are the speeds I tested, it will be affected by the SSD, so it is just for reference:

  • 2230
shell
# Initial
+
+pi@cinepi:~ $ ./test_speed_multi /media/RAW
+Total data written: 1500 MB
+Time taken: 2.05 seconds
+Write speed: 730.71 MB/s
+User CPU time used: 0.00 seconds
+System CPU time used: 0.04 seconds
+
+# After fever
+
+pi@cinepi:~ $ ./test_speed_multi /media/RAW
+Total data written: 1500 MB
+Time taken: 2.42 seconds
+Write speed: 620.26 MB/s
+User CPU time used: 0.00 seconds
+System CPU time used: 0.04 seconds
  • 2280
shell
# Initial
+
+pi@cinepi:~ $ ./test_speed_multi /media/RAW
+Total data written: 1500 MB
+Time taken: 2.03 seconds
+Write speed: 740.12 MB/s
+User CPU time used: 0.00 seconds
+System CPU time used: 0.04 seconds
+
+# After fever
+
+pi@cinepi:~ $ ./test_speed_multi /media/RAW
+Total data written: 1500 MB
+Time taken: 2.03 seconds
+Write speed: 737.25 MB/s
+User CPU time used: 0.00 seconds
+System CPU time used: 0.05 seconds
+ \ No newline at end of file diff --git a/docs/.vitepress/dist/cfehat.html b/docs/.vitepress/dist/cfehat.html index 8528ea3..c72cf6b 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 b/docs/.vitepress/dist/cine-fox index 19d41e1..76c5b5e 100644 Binary files a/docs/.vitepress/dist/cine-fox and b/docs/.vitepress/dist/cine-fox differ diff --git a/docs/.vitepress/dist/cine-fox.html b/docs/.vitepress/dist/cine-fox.html index 71dcc61..ff7a2f5 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/davinci.html b/docs/.vitepress/dist/davinci.html new file mode 100644 index 0000000..d6ba361 --- /dev/null +++ b/docs/.vitepress/dist/davinci.html @@ -0,0 +1,25 @@ + + + + + + DaVinci Resolve | Cine Fox + + + + + + + + + + + + + + +
Skip to content

DaVinci Resolve

DaVinci Resolve is the world's only all in one solution for editing, color, VFX, motion graphics and audio!

Overview

davinci

DaVinci Resolve can directly edit Cinema DNG files recorded by cinepi-raw. To use it, just drag the entire folder starting with CINEPI into it.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/davinci.jpg b/docs/.vitepress/dist/davinci.jpg new file mode 100644 index 0000000..72b2fa9 Binary files /dev/null and b/docs/.vitepress/dist/davinci.jpg differ diff --git a/docs/.vitepress/dist/external_ssd.html b/docs/.vitepress/dist/external_ssd.html index 8a897fd..daacffa 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 ca7b6c9..5234573 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 3eae2a4..944af57 100644 --- a/docs/.vitepress/dist/hashmap.json +++ b/docs/.vitepress/dist/hashmap.json @@ -1 +1 @@ -{"pi.md":"CpeCUTl7","image_sensor.md":"DbA9WIzi","hq_camera.md":"BAey4fTZ","sbc.md":"DQEuX2hF","cfe_card.md":"BLIu7aWj","android.md":"C7iyk_ej","hardware.md":"DMSiUi4B","storage.md":"BzlfteFe","index.md":"DLnvKFKL","cine-fox.md":"ZqPVYCeZ","external_ssd.md":"FOqzvB9H","cfehat.md":"CXvosWNg","oneincheye.md":"03SqGA3R","starlighteye.md":"BD0OKBUi","software.md":"CygCFyls","version.md":"D2S_XppC","ios.md":"DW4xWrbo","team.md":"DnLinnGI","power_management.md":"DV0nfqV1","nvme.md":"DmqDekf7"} +{"oneincheye.md":"Df0nqKHy","pi.md":"BA9vmAz4","sbc.md":"B-LCxkJB","starlighteye.md":"DMJqhjIg","power_management.md":"a9l0NDZq","android.md":"TOxrgUrt","cfe_card.md":"CoOllQG-","cfehat.md":"Cio0ef4w","cine-fox.md":"vdvn9JpH","davinci.md":"BbDOfD9F","external_ssd.md":"DPePC47q","hardware.md":"1lbQQlIV","hq_camera.md":"Ck2BsT9-","image_sensor.md":"CG9tPVRH","storage.md":"CjCyfTkZ","version.md":"xku_6eWR","nvme.md":"ByDiVmDx","team.md":"D3QYVN-z","ios.md":"BAMSpg7E","software.md":"bK_ZEl73","index.md":"D54RihT3"} diff --git a/docs/.vitepress/dist/hq_camera.html b/docs/.vitepress/dist/hq_camera.html index dd5fb75..cbe63b1 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 0258217..62ba645 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 fcd9f36..9619976 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 37be228..cb9c679 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 d73921f..66068b9 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 789f285..45ad999 100644 --- a/docs/.vitepress/dist/oneincheye.html +++ b/docs/.vitepress/dist/oneincheye.html @@ -8,20 +8,20 @@ - + - - - + + + -
Skip to content

OneInchEye

OpenSource IMX283 Camera Board for Raspberry Pi

Overview

pcb

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

Welcome to the OneInchEye project, an open-source camera board designed for Raspberry Pi Compute Module 4 boards using the IMX283 one-inch sensor. 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.

OneInchEye 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. The board also features a TMP117 temperature sensor for accurate temperature readings.

Please note that the OneInchEye is not compatible with most Raspberry Pi boards because it requires 22-pin FPC connector with 4-lane MIPI-CSI interface. Ensure compatibility with your specific board before proceeding.

But Will said StarlightEye is more suitable for video cropping, so I never test OneInchEye.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple OneInchEyes, 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.

Usage

Modify dtoverlay

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

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

OneInchEye

OpenSource IMX283 Camera Board for Raspberry Pi

Overview

pcb

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

Welcome to the OneInchEye project, an open-source camera board designed for Raspberry Pi Compute Module 4 boards using the IMX283 one-inch sensor. 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.

OneInchEye 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. The board also features a TMP117 temperature sensor for accurate temperature readings.

Please note that the OneInchEye is not compatible with most Raspberry Pi boards because it requires 22-pin FPC connector with 4-lane MIPI-CSI interface. Ensure compatibility with your specific board before proceeding.

But Will said StarlightEye is more suitable for video cropping, so I never test OneInchEye.

Where can I get it?

This is probably the most important issue for you. Will Whang may occasionally create multiple OneInchEyes, 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.

Usage

Modify dtoverlay

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

shell
# OneInchEye Module ( default camera port 1 )
 camera_auto_detect=0
 dtoverlay=imx283

Wiki

Here is the wiki made by Will

- + \ No newline at end of file diff --git a/docs/.vitepress/dist/pi.html b/docs/.vitepress/dist/pi.html index 826ca97..db5d025 100644 --- a/docs/.vitepress/dist/pi.html +++ b/docs/.vitepress/dist/pi.html @@ -8,18 +8,18 @@ - + - - - + + + -
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

- +
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 fd3fe2f..0055bc0 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 364fc8b..beadf62 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 d2effec..9b3e562 100644 --- a/docs/.vitepress/dist/software.html +++ b/docs/.vitepress/dist/software.html @@ -8,18 +8,27 @@ - + - - - + + + -
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. Download and unzip cinepi-sdk-001.zip to your micro-sd card, and insert the card into the Pi.
  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://raw.githubusercontent.com/Cine-Fox/cine-fox.github.io/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]
+    
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.

WARNING

The installation process may be a bit troublesome, which requires some patience. In the near future, I will make an .img to facilitate direct flashing of cine-fox

Install Software

Step1: Prepare cinepi-sdk

  1. unzip or use software like Belena Etcher to flash the cinepi-sdk-001.zip directly to a micro-sd card. After plugging in the Raspberry Pi, turn it on and plug in the network cable.

TIP

The following commands need to be executed using SSH.

  • On Windows, use win+R to enter cmd to enter the terminal. enter ssh pi@cinepi.local and type 1.
  • On MacOS, open the terminal tool, enter ssh pi@cinepi.local and type 1.
  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.
shell
cd cinepi-raw
+git remote add cinefox https://github.com/Cine-Fox/cinepi-raw.git
+git remote remove origin
+git remote rename cinefox origin
+git fetch --all
+git reset --hard origin/cinepi-sdk-001
+cd ~
  1. run command to recompile
shell
./compile-raw.sh
  1. If everything is normal, update ./run-raw.sh
shell
sudo nano run-raw.sh
+
+# and modify the command like this:
+cinepi-raw --post-process-file ~/post-processing.json -n --mode 2028:1520:12:U --width 1280 --height 720 --lores-width 1280 --lores-height 720
  1. run cinepi-raw again
shell
./run-raw.sh

Step2: Install Cine-Fox

  1. Open another terminal, and download cine-fox
shell
wget https://raw.githubusercontent.com/Cine-Fox/cine-fox.github.io/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 sudo ./cine-fox --cfe-hat=false

  1. open your browser and type <your-pi-ip>:5678/web
  2. After testing all functions, you can add a service to automatically start cinepi-raw and cine-fox when the Raspberry Pi is boot. 👇

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 +55,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

Without CFE Hat

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

+ \ No newline at end of file diff --git a/docs/.vitepress/dist/starlighteye.html b/docs/.vitepress/dist/starlighteye.html index 17516bf..6e53e26 100644 --- a/docs/.vitepress/dist/starlighteye.html +++ b/docs/.vitepress/dist/starlighteye.html @@ -8,24 +8,22 @@ - + - - - + + + -
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/
+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 way to complete it 👇

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

- +./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 bc455c1..6f7b948 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 b069f5c..10ef35d 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 8c53a37..f7e41e0 100644 --- a/docs/.vitepress/dist/version.html +++ b/docs/.vitepress/dist/version.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

Version

v2.0.5

  • Support replay record files

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.5

  • Support replay record files

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 diff --git a/docs/davinci.md b/docs/davinci.md new file mode 100644 index 0000000..709c434 --- /dev/null +++ b/docs/davinci.md @@ -0,0 +1,9 @@ +# DaVinci Resolve + +DaVinci Resolve is the world's only all in one solution for editing, color, VFX, motion graphics and audio! + +## Overview + +![davinci](/davinci.jpg) + +DaVinci Resolve can directly edit Cinema DNG files recorded by cinepi-raw. To use it, just drag the entire folder starting with `CINEPI` into it. \ No newline at end of file diff --git a/docs/public/davinci.jpg b/docs/public/davinci.jpg new file mode 100644 index 0000000..72b2fa9 Binary files /dev/null and b/docs/public/davinci.jpg differ